Skip to content

Upgrading to edikt v0.8.0

v0.8.0's headline change is what it removes, not what it adds: edikt no longer needs python3. Every lifecycle hook used to shell out to it to emit protocol JSON — on a machine without python3, a hook would silently no-op while doctor kept reporting healthy. All 22 hooks now ship as ten-line shims that exec the Go binary directly.

If you're on v0.7.x, this upgrade is small. If you're further back, read The path from older versions below before running anything.

If you're on v0.7.x

bash
edikt upgrade-pin

That's it. There is no data-format change between v0.7.x and v0.8.0 — no sidecar schema bump, no recompile required. upgrade-pin moves edikt_version in your .edikt/config.yaml past the v0.8 floor, so the new binary stops refusing the project.

A v0.8 binary refuses to operate on any project pinned below the v0.8 line — this is what upgrade-pin clears. If you run one first without pinning, you'll see:

this project was set up with edikt v0.7.x, which predates the v0.8 line (edikt only
upgrades one minor line at a time, and refuses a project pinned further back than
that). edikt does not run across version lines.
  Upgrade the project:  run /edikt:upgrade (migrates it onto the current line)
  Or match the project: install edikt v0.7.x (edikt rollback, or install --ref v0.7.x)
  Override (not recommended): EDIKT_SKIP_VERSION_GATE=1

After pinning, confirm your hooks are on the new shims:

bash
grep -l python3 .claude/hooks/*.sh   # should return nothing

Upgrading from before v0.7

Not a supported path today. If your project predates v0.7, don't jump it to v0.8.0 yet. Get to v0.7.x first via the v0.7.0 upgrade guide, let it settle, then follow the v0.7.x → v0.8.0 steps above.

A v0.8 binary refuses to operate on any project pinned below the v0.8 line at all, before it looks at anything else:

this project was set up with edikt v0.4.x, which predates the v0.8 line (edikt only
upgrades one minor line at a time, and refuses a project pinned further back than
that). edikt does not run across version lines.
  Upgrade the project:  run /edikt:upgrade (migrates it onto the current line)
  Or match the project: install edikt v0.4.x (edikt rollback, or install --ref v0.4.x)
  Override (not recommended): EDIKT_SKIP_VERSION_GATE=1

migrate, migrate sidecars, and migrate to-v2 are exempt from that gate and do ship inside the current binary — you don't need to install an old release to run them. But a v0.4.x project's ADRs and invariants carry the old in-body [edikt:directives:start]…[edikt:directives:end] sentinel, not a sidecar, and edikt gov compile hard-refuses the moment it sees one:

error: pre-migration project state — v0.6.0 requires co-located .edikt.yaml sidecars.

  In Claude Code:  /edikt:upgrade   (runs the full v0.4→v0.6 migration flow)

So the mechanical pieces — layout migration, sentinel-to-sidecar lift, schema v1→v2 — are all present in the v0.8.0 binary. What's missing is verification: nothing today runs that chain end-to-end starting from an actual v0.4.x project through to a compiled v0.8.0 state, the way the v0.7.x → v0.8.0 hop is. Until that exists, treat pre-v0.7 → v0.8.0 as untested and unsupported, not as a documented multi-hop chain to follow yourself. This is tracked as follow-up work.

Released under the Elastic License 2.0. Free to use, not for resale.