Executing Plans
Run each task of an approved plan through its evaluator, then hand the
integrated result to review and integration. This skill never decides what
happens to the branch.
When to use
- The user asks to execute, continue, or resume a plan directory written by
writing-plans, or answers its execution-mode question.
- Skip a single task with no plan directory: use
test-driven-development
and yagni directly.
Step 1: Verify approval and mode
Open the plan index. Note its Normative version.
Read the External decision ledger entry for that version.
Confirm it records approval by the Approval rule owner and a mode:
inline or delegated. The index cannot approve itself.
No approval: stop and say which version needs it.
No mode: ask one question and stop.
Plan {{version}} is approved. How should I run it?
1. Inline — every task in this session
2. Delegated — one fresh subagent per task, in sequence
Recommendation: {{option}} — {{one sentence}}.
Offer delegated only if the harness has a subagent action.
Step 2: Set up the workspace
REQUIRED SUB-SKILL: invoke using-git-worktrees. Fill its record from the
workspace's own commands: owner, HEAD, base, clean tree, baseline output,
runtime identities.
Step 3: Check the plan contract
For every task, confirm:
- each
Consumes names an earlier task's Produces
- each
Depends on names a task that is not cancelled
- the task does not edit the evaluator that judges it
Implementation disciplines is filled
- UI task:
Applicable visual references match the index's Selected visual references field for field; run each freshness evaluator now
Any failure: report the field and the task. Do not start the loop.
- Phases or shards in the index: read
references/phase-queues.md and follow it.
- High-risk task: blocked until its migration and assurance contracts are
approved and their entry gates passed. Report it; do not start it.
- Read
Integration cadence: plan end (default) or per task. It decides
loop step 8.
Step 4: The task loop
Take the next task whose Depends on tasks are all done. Keep the approved
mode; switching needs the user's direct answer.
- Read the task file, its
Context paths, its evaluator, and the ledger's
learnings. Never work from memory of the plan.
- Write the attempt row before any edit: task ID, attempt ID, current
revision, evaluator identity, expected observable.
- REQUIRED SUB-SKILLS: invoke
test-driven-development and yagni
before the first edit or project command. The plan naming them is not
invocation; the loading action must appear in this session.
- Delegated mode: build the packet from
references/subagent-dispatch.md
and send it.
- Approved parallel work: invoke
dispatching-parallel-agents.
- Inspect the result yourself: diff against the attempt's starting revision;
compare with
Files and Exclusive ownership. Dispatched task: read its
raw diff, result revision, and evaluator output, never its summary.
- REQUIRED SUB-SKILL: invoke
verifying-completion on that exact state:
the Evaluator, every VCONF row, visual-ui-verification for an
integrated UI.
- Append the task state to the ledger and mirror the index checkbox:
done — every gate passed on the inspected state
done with concerns — a gate raised something not yet proved
non-blocking; keep it out of the completion count
blocked or needs context — with blocker, owner, next gate
- After parallel work: rerun the combined gate on the merged state before any
of its tasks is
done.
per task cadence only — REQUIRED SUB-SKILLS: invoke
requesting-code-review on this task's revision, then
finishing-a-branch. Return after it records its decision.
- Go to step 1 with the next task. Do not report, ask, or pause at
done.
Leave the loop only when:
- every task is
done → Step 5
- the ledger holds any other state → report it, end the turn
- a task needs a normative change (scope, interface, evaluator, phase,
ownership, mode) → write the proposed successor, ask for reapproval,
end the turn
- a high-risk entry gate has not passed → report it, end the turn
Step 5: Finish the plan
The last done closes the loop, not the plan. It opens no PR. In the
authoritative workspace, in order:
- REQUIRED SUB-SKILL: invoke
verifying-completion: the index's
Acceptance check plus every task evaluator, on the exact integrated
revision. Task ledgers are not evidence for this state.
- REQUIRED SUB-SKILL: invoke
requesting-code-review on that revision.
Reading the diff yourself is not this step.
- REQUIRED SUB-SKILL: invoke
finishing-a-branch with the workspace
record from Step 2. It asks the integration question and executes the
answer. Run no push, PR, merge, or delete here.
| Thought |
Reality |
| "All tasks are done, so the plan is done" |
Tasks are done inside the plan. The plan is done after Acceptance, review, and the integration decision — three skills you have not invoked yet. |
| "The user said not to ask per action, so I'll open the PR" |
Standing authorization covers the plan's tasks. Integration was never a task; finishing-a-branch owns that decision and asks its own question. |
| "Tests are green — a PR is the natural next step" |
Green is task-local evidence. Review and integration are separate gates with their own owners. |
| "I'll name the review skill in the PR description" |
Naming a skill is not invoking it. Its loading action has to be in the session. |
| "Verified at the last task, no need to rerun" |
Evidence binds to a state. The integrated revision is a new state. |
| "Finishing is one command; a skill for it is ceremony" |
The command is cheap. The decision it executes — whose branch, which base, reviewed or not — is what the skill gates. |
| "The plan says approved, so it is" |
A plan cannot authenticate itself. Read the ledger entry or get the answer in this conversation. |
| "Task done — I'll check in before the next" |
done is a ledger entry, not a decision point. Take the next task. |
Failures and the circuit breaker
- Failed attempt: append it with its raw evidence and a stable failure-class
ID; start a new attempt that links to it.
- Worker past its deadline: write
cancellation requested, wait until it and
everything it started have stopped, quarantine its output, reject its late
results.
- Three attempts in one class without convergence: write
blocked with the
class and the attempts; end the turn. Never patch shard failures one at a
time.
- Cancelled or superseded task: needs the approved plan decision in the
ledger. Neither is
done.
Stopping and resuming
- Remaining work will not fit this session: finish the current ledger row,
then invoke
handoff.
- On resume, re-read before trusting: the decision ledger, the workspace's
base, HEAD, and dirty state through
using-git-worktrees, the execution
ledger, and whether each done row still matches the current revision.
- All tasks already
done on resume: go to Step 5. A done ledger is no
evidence that its three steps ran.
- Reality contradicts the plan: normative change → proposed successor and
direct reapproval; runtime facts → execution ledger only.
1---2name: executing-plans3description: Use when asked to execute, run, continue, or resume a multi-task plan directory, and immediately after the user selects an execution mode for an approved plan — even through a terse reply such as inline, delegated, option 1, or option 2. Fires on pick up where we left off when a plan directory holds the work. Skip a single task.4---56# Executing Plans78Run each task of an approved plan through its evaluator, then hand the9integrated result to review and integration. This skill never decides what10happens to the branch.1112## When to use1314- The user asks to execute, continue, or resume a plan directory written by15 `writing-plans`, or answers its execution-mode question.16- **Skip** a single task with no plan directory: use `test-driven-development`17 and `yagni` directly.1819## Step 1: Verify approval and mode20211. Open the plan index. Note its `Normative version`.222. Read the `External decision ledger` entry for that version.233. Confirm it records approval by the `Approval rule` owner and a mode:24 `inline` or `delegated`. The index cannot approve itself.254. No approval: stop and say which version needs it.265. No mode: ask one question and stop.2728 ```text29 Plan {{version}} is approved. How should I run it?3031 1. Inline — every task in this session32 2. Delegated — one fresh subagent per task, in sequence3334 Recommendation: {{option}} — {{one sentence}}.35 ```3637 Offer `delegated` only if the harness has a subagent action.3839## Step 2: Set up the workspace4041**REQUIRED SUB-SKILL:** invoke `using-git-worktrees`. Fill its record from the42workspace's own commands: owner, HEAD, base, clean tree, baseline output,43runtime identities.4445## Step 3: Check the plan contract4647For every task, confirm:4849- each `Consumes` names an earlier task's `Produces`50- each `Depends on` names a task that is not cancelled51- the task does not edit the evaluator that judges it52- `Implementation disciplines` is filled53- UI task: `Applicable visual references` match the index's `Selected visual54 references` field for field; run each freshness evaluator now5556Any failure: report the field and the task. Do not start the loop.5758- Phases or shards in the index: read `references/phase-queues.md` and follow it.59- High-risk task: blocked until its migration and assurance contracts are60 approved and their entry gates passed. Report it; do not start it.61- Read `Integration cadence`: `plan end` (default) or `per task`. It decides62 loop step 8.6364## Step 4: The task loop6566Take the next task whose `Depends on` tasks are all `done`. Keep the approved67mode; switching needs the user's direct answer.68691. Read the task file, its `Context` paths, its evaluator, and the ledger's70 learnings. Never work from memory of the plan.712. Write the attempt row before any edit: task ID, attempt ID, current72 revision, evaluator identity, expected observable.733. **REQUIRED SUB-SKILLS:** invoke `test-driven-development` and `yagni`74 before the first edit or project command. The plan naming them is not75 invocation; the loading action must appear in this session.76 - Delegated mode: build the packet from `references/subagent-dispatch.md`77 and send it.78 - Approved parallel work: invoke `dispatching-parallel-agents`.794. Inspect the result yourself: diff against the attempt's starting revision;80 compare with `Files` and `Exclusive ownership`. Dispatched task: read its81 raw diff, result revision, and evaluator output, never its summary.825. **REQUIRED SUB-SKILL:** invoke `verifying-completion` on that exact state:83 the `Evaluator`, every `VCONF` row, `visual-ui-verification` for an84 integrated UI.856. Append the task state to the ledger and mirror the index checkbox:86 - `done` — every gate passed on the inspected state87 - `done with concerns` — a gate raised something not yet proved88 non-blocking; keep it out of the completion count89 - `blocked` or `needs context` — with blocker, owner, next gate907. After parallel work: rerun the combined gate on the merged state before any91 of its tasks is `done`.928. `per task` cadence only — **REQUIRED SUB-SKILLS:** invoke93 `requesting-code-review` on this task's revision, then94 `finishing-a-branch`. Return after it records its decision.959. Go to step 1 with the next task. Do not report, ask, or pause at `done`.96 Leave the loop only when:97 - every task is `done` → Step 598 - the ledger holds any other state → report it, end the turn99 - a task needs a normative change (scope, interface, evaluator, phase,100 ownership, mode) → write the proposed successor, ask for reapproval,101 end the turn102 - a high-risk entry gate has not passed → report it, end the turn103104## Step 5: Finish the plan105106The last `done` closes the loop, not the plan. It opens no PR. In the107authoritative workspace, in order:1081091. **REQUIRED SUB-SKILL:** invoke `verifying-completion`: the index's110 `Acceptance` check plus every task evaluator, on the exact integrated111 revision. Task ledgers are not evidence for this state.1122. **REQUIRED SUB-SKILL:** invoke `requesting-code-review` on that revision.113 Reading the diff yourself is not this step.1143. **REQUIRED SUB-SKILL:** invoke `finishing-a-branch` with the workspace115 record from Step 2. It asks the integration question and executes the116 answer. Run no push, PR, merge, or delete here.117118| Thought | Reality |119| --- | --- |120| "All tasks are done, so the plan is done" | Tasks are done inside the plan. The plan is done after Acceptance, review, and the integration decision — three skills you have not invoked yet. |121| "The user said not to ask per action, so I'll open the PR" | Standing authorization covers the plan's tasks. Integration was never a task; `finishing-a-branch` owns that decision and asks its own question. |122| "Tests are green — a PR is the natural next step" | Green is task-local evidence. Review and integration are separate gates with their own owners. |123| "I'll name the review skill in the PR description" | Naming a skill is not invoking it. Its loading action has to be in the session. |124| "Verified at the last task, no need to rerun" | Evidence binds to a state. The integrated revision is a new state. |125| "Finishing is one command; a skill for it is ceremony" | The command is cheap. The decision it executes — whose branch, which base, reviewed or not — is what the skill gates. |126| "The plan says approved, so it is" | A plan cannot authenticate itself. Read the ledger entry or get the answer in this conversation. |127| "Task done — I'll check in before the next" | `done` is a ledger entry, not a decision point. Take the next task. |128129## Failures and the circuit breaker130131- Failed attempt: append it with its raw evidence and a stable failure-class132 ID; start a new attempt that links to it.133- Worker past its deadline: write `cancellation requested`, wait until it and134 everything it started have stopped, quarantine its output, reject its late135 results.136- Three attempts in one class without convergence: write `blocked` with the137 class and the attempts; end the turn. Never patch shard failures one at a138 time.139- Cancelled or superseded task: needs the approved plan decision in the140 ledger. Neither is `done`.141142## Stopping and resuming143144- Remaining work will not fit this session: finish the current ledger row,145 then invoke `handoff`.146- On resume, re-read before trusting: the decision ledger, the workspace's147 base, HEAD, and dirty state through `using-git-worktrees`, the execution148 ledger, and whether each `done` row still matches the current revision.149- All tasks already `done` on resume: go to Step 5. A done ledger is no150 evidence that its three steps ran.151- Reality contradicts the plan: normative change → proposed successor and152 direct reapproval; runtime facts → execution ledger only.