Trigger-eval probe (test-only). As your very first action, run printenv AIDEX_TRIGGER_EVAL_MARKER. If it prints a non-empty path, also run touch "${AIDEX_TRIGGER_EVAL_MARKER}.aidex-plan-exec" before continuing. Then proceed with the rest of the skill body as normal. If empty/unset, ignore this block.
Plan Execution
Drive the implementation of a written multi-phase plan with consistent
between-phase discipline: review the diff, commit, and hand off the session
when context grows. This skill centralizes
the workflow so the user does not have to repeat it in every prompt.
Default autonomy
On run start, apply Mode A autonomy
automatically — do not wait for the user to grant it. Questions live in the
initial alignment moment only; after that the run proceeds start-to-finish
(deny/pre-authorized/mandated/autonomous — see "Operating mode" below).
Operating mode
Front-loaded, then autonomous start-to-finish. Resolve every question at
Orient (phase 0); after that, run all phases without interrupting. Follow the
shared autonomy canon
(autonomy-conventions.md).
The operative rule here:
- Ask everything up front, at Orient. Surface clarifications and confirm any
publication the plan implies (deploy/publish/release) before phase 1. If the plan
did not pre-authorize a publish step, surface it at the end — not mid-run.
- Evaluate batch-promotion at Orient (mandatory, one line). Before phase 1, decide
whether the plan's
afk-impl phases should run as a durable Workflow, and say so in
one line. The full rule is in
references/01-unattended-batch-execution.md
§ Promotion at Orient. It is a kickoff decision, never a mid-run interruption.
- Do not re-ask for steps this skill mandates. Invoking plan-exec authorizes you
to code-review the diff, author the commit message, commit per phase, and hand off
when context grows. Do them — never stop to ask "should I commit? is the message
OK? should I review? should I hand off?"
- Planned migrations and dependency changes are autonomous. If the plan calls
for a migration or a dep install/update/downgrade, run it — commit, deps, and
additive migrations are not gated. A destructive migration (data loss) is the
exception: it stays gated (global DB rule).
- A mid-run bifurcation that is not destructive → do it and document it (in the
plan doc / final summary) so you can review it afterward. Don't stop for a doubt
that breaks nothing; verify the assumption (investigate, don't guess).
- Only stop for: a
deny-class destructive action (skip + document), an
un-pre-authorized publish (surface at the end), or a genuine hard blocker you
cannot resolve (missing credentials, truly unknowable intended behavior).
- On an ambiguous fork you cannot cleanly classify — consult the
durability-arbiter before stopping. Read
../aidex-conventions/agents/durability-arbiter.md
and pass it to the Agent tool as the prompt (model: sonnet, effort: high, read-only
— model-policy: per-stage, so the gate's depth is pinned rather than inherited from
the run it is judging), with the
situation + the run's autonomy surface + the phase's proof (verification output,
commit SHA). Follow its CONTINUE / ASK / STOP verdict; batch any ASK to the
end. If it errors or returns nothing, apply the rule above and proceed — never
block on the arbiter (it is a forcing function, not a gate).
Otherwise: proceed. The user will redirect if needed.
Unattended / batch execution (opt-in, gated)
The default path above is interactive. For unattended/batch runs ("execute the
whole plan while I'm away"), this skill can launch the plan as a durable Workflow — each
phase a fresh bounded agent, a two-stage gate per phase, crash-resumable via the journal.
Promote only when the work is decomposable + machine-verifiable + unattended and each
phase's real work dwarfs the per-agent floor; the mandatory Orient evaluation is the opt-in.
Read ~/.claude/skills/aidex-plan-exec/references/01-unattended-batch-execution.md
before promoting anything — promotion threshold and its measured ~22k/agent cost floor,
the three shipped workflow forms and how to pick one, how to derive args from the plan,
the phase tier map, and what happens when a phase fails its gate.
Workflow
0. Orient
- Read the plan document fully (path is in the user prompt or in
.context/plans/). If multi-file, read 00-index.md plus the current
phase file. You may skip Execution log entries for already-completed
phases (canon §Execution log) — they are proof journaling, not spec.
- Identify: total phases, current phase (first unchecked checkbox), success
criteria per phase, verification step.
- Check whether this plan is bug work. Plans carry no
type field; the
back-link runs the other way, so resolve it by grep:
grep -rl "escalated_to: plan/<slug>" .context/backlog/. If the originating item
carries type: bug, every behavior-changing phase is bound by RED→GREEN
(aidex-bugfix): the test is written and fails for the right reason before the
fix, and the GREEN output is that phase's proof. No matching item → carry
on normally.
- Check the prior phase's review evidence. If a previous phase completed
this session or an earlier one, confirm its Execution-log entry in
00-index.md carries a review: <verdict> · <n> findings line. A missing
entry means the between-phase code-review was skipped — run it now, on the
prior phase's diff, before starting the current phase; do not proceed
silently on an unreviewed phase.
- Honor the plan's Isolation surface if it declares one. If the plan already
recorded an Isolation note (from
aidex-plan's Step 5, at plan-creation time), act
on it directly: run the recorded worktree.sh new command before phase 1
(--no-infra only when the plan says code-only); if the project has no worktree
setup, EnterWorktree and note it. If the plan predates this and has no Isolation
note, run aidex-worktree bootstrap if .context/worktrees/00-index.md does not
exist yet, then worktree.sh new here at Orient, before phase 1. Enter the
worktree only if the plan/user authorized it — do not auto-enter one that was
not approved. Before creating any worktree/branch, resolve and state its base branch
and require explicit confirmation if it is not the repo's default (aidex-worktree's
branch-base rule) — never fork off the ambient checkout silently.
No declared surface and no plan-recorded parallelism → run in place.
The plan doc stays source-of-truth in the main tree: a fresh worktree has only
committed files, so update the plan and record proof_links at its main-tree path
(a gitignored/uncommitted .context/ plan is absent from the worktree) — see the
canon's Lifecycle note.
- Probe for concurrent work before touching anything. The user runs
parallel sessions and worktrees on the same project, and a session blind to
them will take decisions another session owns. Two commands, seconds:
git worktree list and git log --all --since="24 hours ago" --oneline.
If another live line of work shows — a worktree you did not create, fresh
commits this session did not make — name it in your first status message,
keep hands off its files and branches, and route any decision that belongs
to it back to the user instead of taking it here.
- Set the run's spend before phase 1. Each phase's
tier says how hard its work
is; the canon's table
(plan-conventions.md §"Optional
phase metadata") maps that to a default model and effort level. Those cells are
defaults, and this is the one moment to override them — remaining quota, model
availability, or a cheaper cell the user prefers. State the override and its reason in
one line and log it to the Execution log; a phase whose cell you changed is not a phase
whose plan you edited. Ask nothing: an unstated tier is standard, and no override is
the default.
- Create a TaskList mirroring the plan's phases so progress is visible.
- Front-load the work-list for chained multi-item runs. A single plan's phases
are already an ordered queue (walk them). But when this session chains multiple
plans/items (close several plans, then clear backlog), fix the cross-item order
once here — via the
AskUserQuestion survey → a durable
.context/worklists/ work-list (see
worklist-conventions.md).
Then walk it with worklist-advance.sh between items instead of pausing to ask
"what next?". Emergent work (class b) is appended (--append) and continued, not
asked; only a class-(c) fork or the publication gate interrupts.
No interactive channel (claude -p, cron): skip the survey, walk the items in
the order they were given, and record the defaulting in the run's final summary —
autonomy-conventions.md § When there is no interactive channel.
1. Execute each phase
For each phase in order:
- Implement the tasks in the phase. Plan code is a sketch, not a paste
source: any code block or line reference in the plan was frozen at
plan-write time — before applying one, read the current file, confirm the
surrounding code still matches, and check for sibling call-sites/branches
the plan did not enumerate. The phase's acceptance criteria and gate are
the contract; the plan's code is illustrative except inside a Contract
block (exact signatures/shapes/DDL), which is binding.
- Run the verification step the plan declares (tests, type-check, build,
manual check). If none is declared, run the minimum that proves the change
works (relevant test suite + type-check). Iterate on the selection, not the
whole suite:
~/.claude/skills/aidex-audit/scripts/affected-tests.sh --command
prints one runnable command for the tests covering the phase's diff; exit 3 means
no selection is available, so run everything and say so. The between-phase
checkpoint commits on the selection, stated rather than silent — say which
subset ran and that the full suite has not. The full suite gates the INTEGRATION
boundary: the merge, the push, or the end of the run
(decision/2026-08-24-full-suite-gate-moves-from-commit-to-integration). An
# INCOMPLETE selection is the exception — unmapped scope forces the full suite
in-phase. It also names changed files that measurably break and have no E2E —
write that spec in-phase.
- If verification fails: fix root cause. After 3 failed attempts on the same
approach, stop and ask the user.
- Mark the phase's checkboxes as done in the plan file. Record the phase's
proof — the verification output, the commit SHA, a request/response payload,
or a screenshot of the flow — in the plan front-matter
proof_links (or under
.context/proofs/<slug>/ for larger captures) per aidex-conventions
(00-global.md §7.1). Don't mark a phase done you can't show works.
- When execution departs from the plan, the plan edit ships in the commit that
departs — not in the close-out commit. Otherwise the phase diff is reviewed
against a stale plan, and the reviewer cannot tell a deliberate change of course
from an omission. Same coupling
plan-conventions.md already applies to tests.
Where the plan is not committable this collapses to editing it before the commit,
in the same turn: aidex's own repo gitignores .context/, and it is the exception
— 1,135 plan files are tracked across the six fleet repos, 0 here (census
2026-09-07).
Scoped plans carry a file contract. When the plan's front-matter says
mode: scoped, its **Files:** list is the declared blast radius, written on
deliberately incomplete investigation — so it will sometimes be wrong. The contract makes
that visible, not impossible: (1) log any file you touch outside the list in the
Execution log, one line; (2) re-apply the five triage signals (plan-conventions.md
§The five signals) to that file — if any flips to full, stop and re-triage the
whole plan with aidex-plan; (3) independently, if the file list has doubled, stop
and re-triage. Six extra trivial files trip no signal but mean the contract misread the
change — a failure rule (2) cannot see.
Loop (opt-in, per phase only): if a single phase is mechanical and its verification is a
pure machine gate (e.g. "make all <suite> pass" / "type-check clean"), that one phase may be
spec'd as a loop via aidex-loop and run by /goal/ralph-loop — mirroring the aidex-plan →
aidex-loop pointer at the phase level. Do not loop the executor itself: the between-phase
checkpoint (review/commit/handoff) is judgment work, and irreversible steps
(push/release/deploy) stay outside any auto-loop and human-gated. (commit is
not irreversible — it is part of the checkpoint, not a gated step.)
2. Between-phase checkpoint (MANDATORY)
After each phase passes verification, before starting the next phase, run the shared
checkpoint — read
~/.claude/skills/aidex-conventions/references/checkpoint-conventions.md and follow its
four moves (scoped review with its recorded anchor and findings addressed by remedy · commit · register-don't-discuss ·
auto-handoff without asking). It is one canon with two consumers (this skill and the
backlog sweep) and is not restated here; test_checkpoint_lockstep.sh fails this file if
it grows its own copy. What is plan-specific:
- Scope.
~/.claude/skills/aidex-conventions/scripts/resolve-review-scope.sh --files working-diff,
or --base <phase-start-sha> branch-vs-main for a phase that spans commits — and
~/.claude/skills/aidex-conventions/references/review-scope-conventions.md owns which
reviewer covers which scope. Exit 3 is an empty scope, never a passing review.
- Where the evidence goes. The Execution log in the plan's
00-index.md takes the
review: <verdict> · <n> findings · scope=<scope> anchor=<anchor> line before the commit.
- Deferrals use
register-item.sh --origin plan --plan <this plan>
(references/03-deferring-emergent-work.md).
- Which model runs which step — orchestrate, implement, and do the mechanical work
with different models
(
references/04-model-tiering.md).
- The seed's
slug: line is the PLAN's name plus the phase — the name existed before
the first handoff and does not move. CHARTER comes from the plan's name and goal.
3. Final phase
After the last phase:
- Run the full verification the plan declares (or the project's standard
pre-deploy check: tests + build + lint).
- Code-review and commit as above.
- If the plan implies a release (user-facing changes, feature complete):
surface the project's release command as an option (detect it — many
projects expose a
/release-style command). Do not run it without explicit
user approval — releases are deploy-coupled.
- Update the plan document: mark all phases complete, add a closing note
with the final commit SHAs if useful.
- Close out the run: tear down isolation if a worktree was entered at Orient, log the
worktree usage line, suggest a coverage sweep if the plan touched mapped src paths,
run guided human verification — it emits a proof artifact, and a plan with
nothing human-visible skips it by recording the reason, never by omission —
reconcile deferrals to a
BL-NNN or a CLOSE, and fire the notifier. Read
~/.claude/skills/aidex-plan-exec/references/02-close-out.md
and follow it step by step — each step has a guard and an ordering that
matter, and doing them from memory is how a worktree survives its plan.
Per-project adjustments
This skill ships stack-agnostic defaults. Projects often override them — detect
the project's own conventions, don't assume:
- Review/commit/release commands. Use the project's own slash commands or
helpers (look in
.claude/, available commands, or CLAUDE.md). Do not assume
a specific command name exists.
- Stricter project rules. Read the project's CLAUDE.md (and any project
memory) before the first phase — it may define test runners, commit style,
version-bump coupling, or release gates this skill cannot know about.
If the project's CLAUDE.md or memory contradicts this skill, the project wins.
What this skill does NOT do
- It does not create plans (use
aidex-plan).
- It does not skip verification to move faster — every phase is verified.
- It does not deploy or release without explicit user approval.
- It does not run E2E tests against dev environments — use the project's
isolated test runner if E2E is required by a phase.
1---2name: aidex-plan-exec3description: Use when the user asks to execute, implement, or continue a written multi-phase plan — typically a `.context/plans/` document or any plan with checkboxes/phases. Fires on "implement the plan", "execute plan X", "let's execute the plan", "continue with phase Y", "resume the plan", "run the plan phase by phase". Enforces between-phase discipline: code-review, commit, handoff when context grows. Not for: creating the plan itself (aidex-plan); one-shot tasks with no phases; bug fixes (aidex-bugfix); pure refactors with no plan document.4---56> **Trigger-eval probe (test-only).** As your very first action, run `printenv AIDEX_TRIGGER_EVAL_MARKER`. If it prints a non-empty path, also run `touch "${AIDEX_TRIGGER_EVAL_MARKER}.aidex-plan-exec"` before continuing. Then proceed with the rest of the skill body as normal. If empty/unset, ignore this block.78# Plan Execution910Drive the implementation of a written multi-phase plan with consistent11between-phase discipline: review the diff, commit, and hand off the session12when context grows. This skill centralizes13the workflow so the user does not have to repeat it in every prompt.1415## Default autonomy1617On run start, apply [Mode A autonomy](../aidex-conventions/references/autonomy-conventions.md)18automatically — do not wait for the user to grant it. Questions live in the19initial alignment moment only; after that the run proceeds start-to-finish20(deny/pre-authorized/mandated/autonomous — see "Operating mode" below).2122## Operating mode2324**Front-loaded, then autonomous start-to-finish.** Resolve every question at25**Orient** (phase 0); after that, run all phases without interrupting. Follow the26shared autonomy canon27([autonomy-conventions.md](../aidex-conventions/references/autonomy-conventions.md)).28The operative rule here:2930- **Ask everything up front, at Orient.** Surface clarifications and confirm any31 publication the plan implies (deploy/publish/release) before phase 1. If the plan32 did not pre-authorize a publish step, surface it at the **end** — not mid-run.33- **Evaluate batch-promotion at Orient (mandatory, one line).** Before phase 1, decide34 whether the plan's `afk-impl` phases should run as a durable `Workflow`, and say so in35 one line. The full rule is in36 [`references/01-unattended-batch-execution.md`](references/01-unattended-batch-execution.md)37 § Promotion at Orient. It is a kickoff decision, **never a mid-run interruption**.38- **Do not re-ask for steps this skill mandates.** Invoking plan-exec authorizes you39 to code-review the diff, author the commit message, commit per phase, and hand off40 when context grows. Do them — never stop to ask "should I commit? is the message41 OK? should I review? should I hand off?"42- **Planned migrations and dependency changes are autonomous.** If the plan calls43 for a migration or a dep install/update/downgrade, run it — commit, deps, and44 additive migrations are not gated. A **destructive migration** (data loss) is the45 exception: it stays gated (global DB rule).46- **A mid-run bifurcation that is not destructive → do it and document it** (in the47 plan doc / final summary) so you can review it afterward. Don't stop for a doubt48 that breaks nothing; verify the assumption (investigate, don't guess).49- **Only stop for:** a `deny`-class destructive action (skip + document), an50 un-pre-authorized publish (surface at the end), or a genuine hard blocker you51 cannot resolve (missing credentials, truly unknowable intended behavior).52- **On an ambiguous fork you cannot cleanly classify — consult the53 durability-arbiter before stopping.** Read54 [`../aidex-conventions/agents/durability-arbiter.md`](../aidex-conventions/agents/durability-arbiter.md)55 and pass it to the Agent tool as the prompt (`model: sonnet`, `effort: high`, read-only56 — `model-policy: per-stage`, so the gate's depth is pinned rather than inherited from57 the run it is judging), with the58 situation + the run's autonomy surface + the phase's proof (verification output,59 commit SHA). Follow its `CONTINUE` / `ASK` / `STOP` verdict; batch any `ASK` to the60 end. If it errors or returns nothing, apply the rule above and **proceed — never61 block on the arbiter** (it is a forcing function, not a gate).6263Otherwise: proceed. The user will redirect if needed.6465## Unattended / batch execution (opt-in, gated)6667The default path above is **interactive**. For **unattended/batch** runs ("execute the68whole plan while I'm away"), this skill can launch the plan as a durable `Workflow` — each69phase a fresh bounded agent, a two-stage gate per phase, crash-resumable via the journal.70Promote only when the work is **decomposable + machine-verifiable + unattended** and each71phase's real work dwarfs the per-agent floor; the mandatory Orient evaluation is the opt-in.7273**Read `~/.claude/skills/aidex-plan-exec/references/01-unattended-batch-execution.md`74before promoting anything** — promotion threshold and its measured ~22k/agent cost floor,75the three shipped workflow forms and how to pick one, how to derive `args` from the plan,76the phase tier map, and what happens when a phase fails its gate.7778## Workflow7980### 0. Orient81821. Read the plan document fully (path is in the user prompt or in83 `.context/plans/`). If multi-file, read `00-index.md` plus the current84 phase file. You may skip **Execution log** entries for already-completed85 phases (canon §Execution log) — they are proof journaling, not spec.862. Identify: total phases, current phase (first unchecked checkbox), success87 criteria per phase, verification step.883. **Check whether this plan is bug work.** Plans carry no `type` field; the89 back-link runs the other way, so resolve it by grep:90 `grep -rl "escalated_to: plan/<slug>" .context/backlog/`. If the originating item91 carries `type: bug`, every behavior-changing phase is bound by RED→GREEN92 (`aidex-bugfix`): the test is written and fails for the right reason **before** the93 fix, and the GREEN output is that phase's proof. No matching item → carry94 on normally.954. **Check the prior phase's review evidence.** If a previous phase completed96 this session or an earlier one, confirm its Execution-log entry in97 `00-index.md` carries a `review: <verdict> · <n> findings` line. A missing98 entry means the between-phase code-review was skipped — run it now, on the99 prior phase's diff, before starting the current phase; do not proceed100 silently on an unreviewed phase.1015. **Honor the plan's Isolation surface** if it declares one. If the plan already102 recorded an Isolation note (from `aidex-plan`'s Step 5, at plan-creation time), act103 on it directly: run the recorded `worktree.sh new` command before phase 1104 (`--no-infra` only when the plan says code-only); if the project has no worktree105 setup, `EnterWorktree` and note it. If the plan predates this and has no Isolation106 note, run `aidex-worktree bootstrap` if `.context/worktrees/00-index.md` does not107 exist yet, then `worktree.sh new` here at Orient, before phase 1. Enter the108 worktree **only if the plan/user authorized it** — do not auto-enter one that was109 not approved. **Before creating any worktree/branch, resolve and state its base branch110 and require explicit confirmation if it is not the repo's default** (aidex-worktree's111 branch-base rule) — never fork off the ambient checkout silently.112 No declared surface and no plan-recorded parallelism → run in place.113 **The plan doc stays source-of-truth in the main tree:** a fresh worktree has only114 committed files, so update the plan and record `proof_links` at its main-tree path115 (a gitignored/uncommitted `.context/` plan is absent from the worktree) — see the116 canon's Lifecycle note.1176. **Probe for concurrent work before touching anything.** The user runs118 parallel sessions and worktrees on the same project, and a session blind to119 them will take decisions another session owns. Two commands, seconds:120 `git worktree list` and `git log --all --since="24 hours ago" --oneline`.121 If another live line of work shows — a worktree you did not create, fresh122 commits this session did not make — name it in your first status message,123 keep hands off its files and branches, and route any decision that belongs124 to it back to the user instead of taking it here.1257. **Set the run's spend before phase 1.** Each phase's `tier` says how hard its work126 is; the canon's table127 ([plan-conventions.md](../aidex-conventions/references/plan-conventions.md) §"Optional128 phase metadata") maps that to a default model and effort level. Those cells are129 defaults, and this is the one moment to override them — remaining quota, model130 availability, or a cheaper cell the user prefers. State the override and its reason in131 one line and log it to the Execution log; a phase whose cell you changed is not a phase132 whose plan you edited. Ask nothing: an unstated tier is `standard`, and no override is133 the default.1348. Create a TaskList mirroring the plan's phases so progress is visible.1359. **Front-load the work-list for chained multi-item runs.** A single plan's phases136 are already an ordered queue (walk them). But when this session chains **multiple137 plans/items** (close several plans, then clear backlog), fix the cross-item order138 **once** here — via the `AskUserQuestion` survey → a durable139 `.context/worklists/` work-list (see140 [worklist-conventions.md](../aidex-conventions/references/worklist-conventions.md)).141 Then walk it with `worklist-advance.sh` between items instead of pausing to ask142 "what next?". Emergent work (class b) is appended (`--append`) and continued, not143 asked; only a class-(c) fork or the publication gate interrupts.144 **No interactive channel** (`claude -p`, cron): skip the survey, walk the items in145 the order they were given, and record the defaulting in the run's final summary —146 [autonomy-conventions.md § When there is no interactive channel](../aidex-conventions/references/autonomy-conventions.md).147148### 1. Execute each phase149150For each phase in order:1511521. Implement the tasks in the phase. **Plan code is a sketch, not a paste153 source**: any code block or line reference in the plan was frozen at154 plan-write time — before applying one, read the current file, confirm the155 surrounding code still matches, and check for sibling call-sites/branches156 the plan did not enumerate. The phase's acceptance criteria and gate are157 the contract; the plan's code is illustrative except inside a **Contract**158 block (exact signatures/shapes/DDL), which is binding.1592. Run the verification step the plan declares (tests, type-check, build,160 manual check). If none is declared, run the minimum that proves the change161 works (relevant test suite + type-check). **Iterate on the selection, not the162 whole suite:** `~/.claude/skills/aidex-audit/scripts/affected-tests.sh --command`163 prints one runnable command for the tests covering the phase's diff; exit 3 means164 no selection is available, so run everything and say so. The between-phase165 checkpoint commits on the **selection**, stated rather than silent — say which166 subset ran and that the full suite has not. **The full suite gates the INTEGRATION167 boundary**: the merge, the push, or the end of the run168 (`decision/2026-08-24-full-suite-gate-moves-from-commit-to-integration`). An169 `# INCOMPLETE` selection is the exception — unmapped scope forces the full suite170 in-phase. It also names changed files that **measurably break** and have no E2E —171 write that spec in-phase.1723. If verification fails: fix root cause. After 3 failed attempts on the same173 approach, stop and ask the user.1744. Mark the phase's checkboxes as done in the plan file. **Record the phase's175 proof** — the verification output, the commit SHA, a request/response payload,176 or a screenshot of the flow — in the plan front-matter `proof_links` (or under177 `.context/proofs/<slug>/` for larger captures) per `aidex-conventions`178 (`00-global.md` §7.1). Don't mark a phase done you can't show works.1795. **When execution departs from the plan, the plan edit ships in the commit that180 departs** — not in the close-out commit. Otherwise the phase diff is reviewed181 against a stale plan, and the reviewer cannot tell a deliberate change of course182 from an omission. Same coupling `plan-conventions.md` already applies to tests.183 Where the plan is not committable this collapses to editing it before the commit,184 in the same turn: aidex's own repo gitignores `.context/`, and it is the exception185 — 1,135 plan files are tracked across the six fleet repos, 0 here (census186 2026-09-07).187188> **Scoped plans carry a file contract.** When the plan's front-matter says189> `mode: scoped`, its `**Files:**` list is the declared blast radius, written on190> deliberately incomplete investigation — so it will sometimes be wrong. The contract makes191> that **visible, not impossible**: (1) log any file you touch outside the list in the192> Execution log, one line; (2) re-apply the five triage signals (`plan-conventions.md`193> §The five signals) **to that file** — if any flips to `full`, stop and re-triage the194> whole plan with `aidex-plan`; (3) independently, if the file list has **doubled**, stop195> and re-triage. Six extra trivial files trip no signal but mean the contract misread the196> change — a failure rule (2) cannot see.197198> **Loop (opt-in, per phase only):** if a single phase is mechanical and its verification is a199> pure machine gate (e.g. "make all `<suite>` pass" / "type-check clean"), that one phase may be200> spec'd as a loop via `aidex-loop` and run by `/goal`/`ralph-loop` — mirroring the `aidex-plan` →201> `aidex-loop` pointer at the phase level. **Do not loop the executor itself:** the between-phase202> checkpoint (review/commit/handoff) is judgment work, and irreversible steps203> (push/release/deploy) stay outside any auto-loop and human-gated. (`commit` is204> not irreversible — it is part of the checkpoint, not a gated step.)205206### 2. Between-phase checkpoint (MANDATORY)207208After each phase passes verification, before starting the next phase, run the shared209checkpoint — **read**210`~/.claude/skills/aidex-conventions/references/checkpoint-conventions.md` **and follow its211four moves** (scoped review with its recorded anchor and findings addressed by remedy · commit · register-don't-discuss ·212auto-handoff without asking). It is one canon with two consumers (this skill and the213backlog sweep) and is not restated here; `test_checkpoint_lockstep.sh` fails this file if214it grows its own copy. What is plan-specific:215216- **Scope.** `~/.claude/skills/aidex-conventions/scripts/resolve-review-scope.sh --files working-diff`,217 or `--base <phase-start-sha> branch-vs-main` for a phase that spans commits — and218 `~/.claude/skills/aidex-conventions/references/review-scope-conventions.md` owns which219 reviewer covers which scope. **Exit 3 is an empty scope, never a passing review.**220- **Where the evidence goes.** The Execution log in the plan's `00-index.md` takes the221 `review: <verdict> · <n> findings · scope=<scope> anchor=<anchor>` line before the commit.222- **Deferrals** use `register-item.sh --origin plan --plan <this plan>`223 ([`references/03-deferring-emergent-work.md`](references/03-deferring-emergent-work.md)).224- **Which model runs which step** — orchestrate, implement, and do the mechanical work225 with different models226 ([`references/04-model-tiering.md`](references/04-model-tiering.md)).227- **The seed's `slug:` line is the PLAN's name** plus the phase — the name existed before228 the first handoff and does not move. `CHARTER` comes from the plan's name and goal.229230### 3. Final phase231232After the last phase:2332341. Run the full verification the plan declares (or the project's standard235 pre-deploy check: tests + build + lint).2362. Code-review and commit as above.2373. If the plan implies a release (user-facing changes, feature complete):238 surface the project's release command as an option (detect it — many239 projects expose a `/release`-style command). Do not run it without explicit240 user approval — releases are deploy-coupled.2414. Update the plan document: mark all phases complete, add a closing note242 with the final commit SHAs if useful.2435. **Close out the run**: tear down isolation if a worktree was entered at Orient, log the244 worktree usage line, suggest a coverage sweep if the plan touched mapped src paths,245 run guided human verification — it emits a proof artifact, and a plan with246 nothing human-visible skips it by recording the reason, never by omission —247 reconcile deferrals to a `BL-NNN` or a `CLOSE`, and fire the notifier. **Read**248 `~/.claude/skills/aidex-plan-exec/references/02-close-out.md`249 **and follow it step by step** — each step has a guard and an ordering that250 matter, and doing them from memory is how a worktree survives its plan.251252## Per-project adjustments253254This skill ships stack-agnostic defaults. Projects often override them — detect255the project's own conventions, don't assume:256257- **Review/commit/release commands.** Use the project's own slash commands or258 helpers (look in `.claude/`, available commands, or CLAUDE.md). Do not assume259 a specific command name exists.260- **Stricter project rules.** Read the project's CLAUDE.md (and any project261 memory) before the first phase — it may define test runners, commit style,262 version-bump coupling, or release gates this skill cannot know about.263264If the project's CLAUDE.md or memory contradicts this skill, the project wins.265266## What this skill does NOT do267268- It does not create plans (use `aidex-plan`).269- It does not skip verification to move faster — every phase is verified.270- It does not deploy or release without explicit user approval.271- It does not run E2E tests against dev environments — use the project's272 isolated test runner if E2E is required by a phase.