Skip to content
Back to skills

Scaffold Execution Plan

ASecurity

Scaffold a repeatable execution-plan structure and wire in the build-orchestrator workflow when starting a large, multi-session build that must survive across many sessions.

  • 2 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 6, 2026
ai-agentsrustgoshellapi

Works with

  • api

Security analysis

A100/100

Pro scans all 8 files and shows the line behind each finding

Scanned September 6, 2026

npx -y skills add avmnu-sng/sutra --skill scaffold-execution-plan --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Scaffold Execution Plan?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Scaffold Execution Plan
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/avmnu-sng-scaffold-execution-plan/badge)](https://www.skillsdirectory.com/skills/avmnu-sng-scaffold-execution-plan)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
description: Scaffold a repeatable execution-plan structure and wire in the build-orchestrator workflow when starting a large, multi-session build that must survive across many sessions.
---

# Scaffold execution plan

Lay down a durable, resumable structure for a build too large for one
session, then wire in the build-orchestrator workflow that drives it. The
structure is the source of truth across sessions: what to build next, in
what order, and what "done" means for each unit of work.

This skill copies ready-made skeleton files that carry explicit TODO
placeholders. It does not invent project specifics -- you (or a later
planning pass) fill the placeholders against the real repo.

## When to use

- A build that plausibly spans many sessions or many days.
- Work that decomposes into independent, shippable vertical slices.
- Any effort where "where did we leave off?" is a real cost and resume
  must be mechanical, not from memory.

## When not to use

- A single-session change, a bug fix, or a one-slice feature. The
  overhead is not worth it.
- A repo that already has an `execution_plan/` tree. Read it and resume
  instead of re-scaffolding (see Resume below).

## Preconditions

- Run on a dedicated build branch or a worktree. NEVER scaffold or build
  on the default branch. Create the branch/worktree first.
- Confirm the repo root and the local fast-check command before writing
  `DEV_LOOP.md`; if unknown, leave it as a TODO rather than guessing.

## Step 0 -- adversarial pressure-test first

Before writing the plan, pressure-test the intended approach. The goal is
to surface the failure modes that a naive plan silently regresses on, then
encode each one as an explicit "do not regress" invariant in
`MASTER_PLAN.md`.

Walk these prompts and write down every real delta:

- Where does the naive slice ordering create a dependency cycle or force
  a big-bang integration at the end?
- Which slices share hidden state (a schema, a config file, a global) so
  that finishing them in the wrong order corrupts the other?
- What does each slice's acceptance criterion NOT catch? Name the class of
  bug that passes the criterion but breaks the system.
- Which "we will handle it later" is actually load-bearing now?
- What breaks under the real deployment/runtime conditions that a local
  run never exercises?

Every confirmed delta becomes a bullet in the `## Do not regress` section
of `MASTER_PLAN.md`. The plan is only trustworthy once it enforces the
deltas the pressure-test found.

## Step 1 -- lay down the structure

Create these files if absent. Do not overwrite existing ones.

```
execution_plan/
  MASTER_PLAN.md
  SESSION_PROTOCOL.md
  DEV_LOOP.md
  sessions/
    INDEX.md
    BRIEF_TEMPLATE.md
    HANDOFF_TEMPLATE.md
    KICKOFF_TEMPLATE.md
    briefs/          (one brief per slice, created as slices start)
  handoffs/          (one handoff per completed slice)
.claude/
  workflows/
    build-orchestrator.workflow.js   (copied from this plugin)
```

Copy the orchestrator from this plugin into the target project:

```
cp "${CLAUDE_PLUGIN_ROOT}/workflows/build-orchestrator.workflow.js" \
   .claude/workflows/build-orchestrator.workflow.js
```

`${CLAUDE_PLUGIN_ROOT}` is this plugin's root at runtime. If the target
already has a copy, diff before replacing -- do not clobber local edits.

## Step 2 -- copy and adapt the templates

Do not hand-write these files. This skill ships ready-to-copy templates in
its own `templates/` directory -- copy and adapt them rather than
regenerating the structure from scratch:

```
${CLAUDE_PLUGIN_ROOT}/skills/scaffold-execution-plan/templates/
  MASTER_PLAN.md
  SESSION_PROTOCOL.md
  DEV_LOOP.md
  sessions/
    INDEX.md
    BRIEF_TEMPLATE.md
    HANDOFF_TEMPLATE.md
    KICKOFF_TEMPLATE.md
```

Copy each template into the `execution_plan/` tree from Step 1:

- `MASTER_PLAN.md`, `SESSION_PROTOCOL.md`, `DEV_LOOP.md` -> the root of
  `execution_plan/`.
- `sessions/INDEX.md` -> `execution_plan/sessions/INDEX.md`.
- `sessions/BRIEF_TEMPLATE.md`, `sessions/HANDOFF_TEMPLATE.md`,
  `sessions/KICKOFF_TEMPLATE.md` -> `execution_plan/sessions/`. These are
  per-slice stencils: copy one per slice into `briefs/`, `handoffs/`, and
  the next-session kickoff as slices start and finish.

Each template carries explicit `TODO:` placeholders (the slice DAG and
acceptance criteria, the dev-loop commands, the `Do not regress` bullets,
per-slice brief/handoff/kickoff fields). Copy verbatim, then fill only the
placeholders against the real repo -- do not regenerate the surrounding
structure, and do not invent specifics a later planning pass should
supply. Keep every `TODO:` marker obvious so the planning pass finds it.

`MASTER_PLAN.md` also carries the Release-milestones rollup: the grouping
of slices into versioned releases, each with its version/tag scheme and
cut criteria (see Cutting a release). Fill it or leave it as a visible
`TODO:` like any other placeholder.

## Plan phase and implement phase

Split the build into two phases with different tool allowlists, and enforce
the split in each phase's frontmatter rather than trusting intent.

- Plan phase -- run with a read-only tool allowlist (read, search, and
  list only; no write, edit, or mutating shell). This phase reads the real
  repo and fills the templates' `TODO:` placeholders: the slice DAG and
  acceptance criteria in `MASTER_PLAN.md`, the commands in `DEV_LOOP.md`,
  and the `Do not regress` bullets from Step 0. Its only output is the
  completed plan -- no source changes. A read-only allowlist makes it
  impossible for the planning pass to start editing code before the plan
  is agreed.
- Implement phase -- run with write tools enabled (read, edit, write, and
  shell). This phase drives `SESSION_PROTOCOL.md` one slice at a time and
  is the only phase permitted to touch product source.

Convention: declare the allowlist in the frontmatter of each phase's
command/agent definition (an `allowed-tools:` list), so the boundary is
mechanical. The planning agent physically cannot write; the split is
enforced, not merely documented.

## Step 3 -- run it

Launch the orchestrator workflow in the target project (from the build
branch/worktree). It reads `execution_plan/sessions/INDEX.md`, selects every
non-DONE slice in listed order, and drives each through the build -> review ->
fix -> validate -> retro stages.

## Resume

Resume is mechanical, driven by INDEX status -- never by recall.

- INDEX is the source of truth. DONE slices are skipped. The next PENDING
  slice whose dependencies are all DONE is selected.
- A BLOCKED slice halts advancement past it until its note is cleared.
- Relaunching after a finished slice picks up at the next one -- no manual
  bookkeeping beyond keeping INDEX honest.

## Gates: why a "gate" means relaunch

A Workflow cannot pause for human input mid-run. So a review-then-fix or
validate-then-fix "gate" is not an in-run prompt: the script runs a phase,
returns control, and you inspect the result and relaunch to continue.

Practical consequences:

- After each gated phase, the orchestrator returns. Read the output, make
  any call it asked for, and relaunch to advance.
- Keep INDEX updated at each return so a relaunch resumes at the right
  place even in a fresh session.
- Do not design the loop to expect an interactive answer mid-run -- encode
  the decision in a file (INDEX status, a logged finding) and let the next
  launch read it.

## Cutting a release

This kit assumes trunk-based releases (a tag on the default branch). If
your project uses release branches (LTS lines, backports), cut from yours
instead -- the gate criteria below are what matter, not the branch they
run on. Cut it in order:

1. Confirm every milestone in the release is `DONE` in
   `execution_plan/sessions/INDEX.md`. A single non-DONE slice blocks the
   cut.
2. Run the full pre-merge gate on the exact release SHA -- the SHA you
   will tag, not "a recent green run". Green is a precondition, not a
   formality.
3. Confirm the defer surface is empty: zero `BLOCKED` slices, zero
   unburned deferrals, zero `BUILT-UNTESTED` claims. Burn them down or
   renegotiate them out of the release first.
4. Rename the CHANGELOG `[Unreleased]` heading to the version and stamp
   the date (`## [X.Y.Z] - YYYY-MM-DD`), then open a fresh empty
   `[Unreleased]` above it.
5. Verify docs are current against the shipped code -- README, usage, and
   any version-pinned references.
6. Independent completeness gate -- a reviewer other than the author signs
   off on the release SHA. This is the eighth release-cut criterion in
   `MASTER_PLAN.md`; do not self-approve a release.
7. Tag `main` `vX.Y.Z` (or the next rung of the pre-release ladder --
   `vX.Y.Z-alpha.N` / `vX.Y.Z-beta.N` / `vX.Y.Z-rc.N`). Tag the gated SHA,
   nothing downstream of it.
8. Announce/publish -- push the tag, publish the artifact, post the notes.

Pre-release ladder (each rung is a real tag on `main`):

```
vX.Y.Z-alpha.N   internal / rough; API may still move
vX.Y.Z-beta.N    feature-complete; hardening + docs
vX.Y.Z-rc.N      release candidate; ship unless a blocker surfaces
vX.Y.Z           final
```

Copy-into-PR release checklist:

```
Release: vX.Y.Z (or -alpha.N / -beta.N / -rc.N)

- [ ] All included milestones DONE in INDEX
- [ ] Full pre-merge gate green on the exact release SHA <sha>
- [ ] Defer surface empty: no BLOCKED, no unburned deferrals, no BUILT-UNTESTED
- [ ] CHANGELOG [Unreleased] renamed to X.Y.Z with date; fresh [Unreleased] opened
- [ ] Docs current against shipped code
- [ ] Independent completeness gate passed (reviewer other than the author)
- [ ] Tag on main points at the gated SHA
- [ ] Announced / published
```

Do NOT:

- Tag a SHA the pre-merge gate has not passed.
- Ship with a non-empty defer surface (`BLOCKED` / deferrals /
  `BUILT-UNTESTED`).
- Hand-edit a changelog section that already shipped. Fix forward in the
  next version's section instead.

## Checklist

- [ ] On a dedicated build branch/worktree, not the default branch.
- [ ] Step 0 pressure-test run; deltas written into `## Do not regress`.
- [ ] All `execution_plan/` files created from `templates/` (none
      overwritten).
- [ ] Orchestrator copied into `.claude/workflows/`.
- [ ] Plan phase runs read-only; implement phase's write tools are a
      separate frontmatter allowlist.
- [ ] `DEV_LOOP.md` fast check and pre-merge gate filled or explicitly
      marked TODO.
- [ ] INDEX lists every slice as PENDING with a brief path.
- [ ] Release milestones grouped with a version/tag scheme, and cut
      criteria filled or explicitly marked TODO.
- [ ] No project specifics invented -- every unknown is a visible TODO.

Files in this skill

  • SKILL.md10.5 KB
  • templates/DEV_LOOP.md3.1 KB
  • templates/MASTER_PLAN.md8.7 KB
  • templates/SESSION_PROTOCOL.md6.1 KB
  • templates/sessions/BRIEF_TEMPLATE.md5.2 KB
  • templates/sessions/HANDOFF_TEMPLATE.md4.2 KB
  • templates/sessions/INDEX.md3.3 KB
  • templates/sessions/KICKOFF_TEMPLATE.md6 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.