building
Skill3 starsChanged 4 days agoMITView on GitHub
Use this skill whenever the user wants to ship a kicked-off Shape Up pitch end to end — orient, plan, build, evaluate, hunt, cut, ship — as the tech lead who drives the run in this session and sits at every gate with the PO. Trigger on: \"ship this feature\", \"run the harness\", \"build from this pitch\", \"from pitch to ship\", \"run the full harness\", \"orchestrate the build\", \"resume the run\". Also covers its sub-commands: translate a non-English pitch to English (intake), decide when to stop with the census and cut list (the Cut-List Review gate, \"hammer this down to must-haves\"), and file ship feedback or seed the knowledge base from the project or the platform docs (the retro, \"coach this feedback\", \"scan the project for guidelines\"). DEFAULT: /ship <pitch>. Use it even when the user describes a multi-step build flow without naming the skills.
5 other projects use a version of this.
Adopted by
Most recently taken up by
- Conceptual-Machines/magda-coretheir own version, first seen Nov 7, 2026
- kju4q/q-claude-skillstheir own version, first seen Oct 27, 2026
- zilliztech/knowheretheir own version, first seen Oct 17, 2026
- pytorch/executorchtheir own version, first seen Oct 8, 2026
- CapSoftware/Captheir own version, first seen Oct 8, 2026
Other versions5 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 5
- CapSoftware/Cap★ 25ksame name
- pytorch/executorch★ 5.2ksame name
- zilliztech/knowhere★ 390same name
- Conceptual-Machines/magda-core★ 258same name
- kju4q/q-claude-skills★ 21same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository11 other files it gives its agents.
- AGENTS.mdAGENTS.md
- .claude/CLAUDE.mdCLAUDE.md
- architecture-research-reportSkill
- harness-maintenance-auditSkill
- plan-executorSkill
- svg-builderSkill
- orientSkill
- qa-edge-hunterSkill
- shapeupSkill
- spec-evaluatorSkill
- task-executorSkill
The file
We split this skill into the rules it gives an agent
4 rules. 0 are common, 2 are distinctive, and 2 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 21
Every kernel command below is run exactly as written, on ONE line (a grant matches a single-line command.
- Distinctive: line 30
NON-REGRESSION: Never touch what already works.
- Distinctive: line 31
A CLAIM NAMES ITS FILE: Every "done", "green" or "shipped" you write cites the file or kernel output it came from.
- Very specific: line 101
Apply it yourself: update the board's status: for the tasks the result closed, append each discovery to <run>/discovery/ledger.md, append …
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Building — the loop that drives a run
▶ RUN THIS FIRST — do not summarise this file
Your first output is a tool call, not a plan. Narrating the pipeline reads like a clean run and leaves defects behind it. A run that left no receipt did not happen; loading these instructions is not running them.
You drive the run, in this session. What stands between you and a claim of "done" is five mechanisms and
nothing else: the receipt init run writes, the gate resolver, the T0 witness that runs a
scope's fixtures and re-hashes what it cites, the write fence that refuses a worker's write outside
its order's substrate, and the dispatch receipts that name which agent ran. Everything else in this
file is your own discipline, and no script checks it for you — so after every action, read the files
again instead of remembering them.
Every kernel command below is run exactly as written, on ONE line (a grant matches a single-line
command; a \-continued one comes back "requires approval"). If a kernel command comes back "requires
approval", stop and say so — the scripts need a one-time grant (npx shapeup-sdlc init); never route
around it or hand-build the feature.
Rules
- ASK, DON'T ASSUME. Collect the intake explicitly (
resources/intake.md); put every gate to the PO with a recommendation first. - SIMPLEST FIRST. The smallest change that satisfies the pitch.
- NON-REGRESSION. Never touch what already works.
- A CLAIM NAMES ITS FILE. Every "done", "green" or "shipped" you write cites the file or kernel output it came from.
Step 0 — open the run
Resolve the intake and open it as resources/intake.md says: language check (a non-English pitch is made
English by you, right there: <name>.en.md and the glossary, and the run opens on the copy), the L0 collect-list,
init run — with every switch the operator typed, because it writes the launch record in the same act
as the receipt and refuses a model below the floor (exit 3 = a run is already open, or the worker roster is
missing: the record is kept and the loop continues from the files), the shared project-profile.md, and the
L0 gate.
Where the facts are
K is node "${CLAUDE_PLUGIN_ROOT}/kernel/harness.mjs". <run> is .shapeup/<slug>/, <spec> is shapeup/<slug>/.
| Fact | File |
the launch record: models, budgets.maxRounds, budgets.attemptBudget, the answer set (answers), noEval, noQa, maxParallelScopes | <run>/run-args.json |
| the intake, and which plugin copy opened the run | <run>/intake.md, <run>/receipt.json |
a gate is crossed when a row with that gate and "status":"ok" exists (matching round where it has one) | <run>/gates.jsonl |
orders and results — a dispatch is answered when results/<stem>.json exists | <run>/orders/<stem>.json, <run>/results/<stem>.json |
| the scorer's verdict per attempt; the latest row per scope is its state | <run>/t0/trials.jsonl, <run>/t0/verdicts/r<R>-a<A>-t<T>.json |
| committed plan: requirements, spec tree, wiring map, scope contracts | <spec>requirements.md, <spec>spec/, <spec>wiring-map.md, <spec>scopes/<id>.md |
the board: one TASK-NNN.md per task, status: in its frontmatter | <run>/tasks/ |
| the census GATE L4 reads | <run>/reports/hammer-census.json |
The phases — do the first one whose condition holds, then read the files again
A gate is crossed with K gate --resolve <GATE> --slug <slug> [--round R] [--verdict V] --preset <set> (exit 0 = crossed; 4 = ask the PO and
re-run with --answer <decision>; 5 = the set aborts: close the run as aborted and stop). <set> is the launch record's answers.
| # | Condition | Do |
| 0 | <run>/close.json exists | the run has ended: report its status and cause, and stop. Reopening it is the PO's decision (init run --force) |
| 1 | no results/orient.json | dispatch orient (below) |
| 2 | GATE L1a not crossed | K gate --resolve L1a --slug <slug> --preset <set> |
| 3 | no <spec>requirements.md | plan substep requirements |
| 4 | no spec tree or no board | plan substep spec; then read the board back against resources/plan-spec.md's checklist |
| 5 | no <spec>wiring-map.md | plan substep wire; then GATE L1a.5 |
| 6 | no <spec>scopes/*.md | plan substep scopes; then GATE L1b |
| 7 | a scope has no green latest trial for round R (R starts at 1) | build it (below) |
| 8 | every scope green or out of attempts, GATE L2 not crossed for R | K gate --resolve L2 --slug <slug> --round R --preset <set> |
| 9 | no results/evaluate-rR.json (skipped under noEval) | dispatch spec-evaluator |
| 10 | GATE L3 not crossed for R | K gate --resolve L3 --slug <slug> --round R --verdict <pass|fail|not-evaluated>. On fail and R < maxRounds, round R+1 repeats 7 to 10 for the scopes the verdict's bugs name; otherwise go to 13 |
| 11 | GATE QA not crossed | K gate --resolve QA --slug <slug> --round R --verdict pass --preset <set> |
| 12 | QA answered run and no results/hunt.json (skipped under noQa) | dispatch qa-edge-hunter. Do not move on without it: GATE L4 refuses ship over a hunt the run owed and never ran, and the only recorded way out is K gate --resolve QA … --answer skip |
| 13 | no census file | do the census (resources/stop.md) and write <run>/reports/hammer-census.json; then GATE H |
| 14 | GATE H crossed, no <spec>REPORT.md | write the ship report (resources/stop.md); then GATE L4 |
| 15 | GATE L4 crossed | K order close --slug <slug> --status <shipped|escalated|aborted> --cause "<verdict, rounds>"; shipped is refused (exit 1) unless this run's L4 row says ship, so a refusal here means the gate was not crossed — go back to phase 14; then GATE COACH-1 |
A plan substep is done here, in this session, with no sub-agent: write the substep's order (resources/orders.md, operation plan,
worker: "building"), open it with K order open, write only what the substep produces (resources/plan.md and its plan-*.md
siblings say what and how), then write results/plan-<step>.json yourself (the order's own path, so it is writable though results are frozen) and read the artifact back, before you write the next order. The order's substrate is the
fence: while it is open, the staged pitch, the receipt and the other orders are frozen.
A dispatch
The same five moves for every worker. resources/orders.md has the order for each operation.
- Write the order to
<run>/orders/<stem>.jsonfrom the template for the operation. It carries the substrate (the globs the worker may write, copied from the scope contract for a build) and the payload the worker needs, as paths where a path will do. - Open it:
K order open --slug <slug> --order "<run>/orders/<stem>.json". This stamps the order's time and names the live order to the fence; without it the fence allows every write. - Spawn the agent
shapeup-sdlc-plugin:<worker>with the prompt--order "<run>/orders/<stem>.json"and one line of note, and pass the model the launch record names for the role:models.execfororientandtask-executor,models.evalforspec-evaluator,models.qaforqa-edge-hunter. The agent definitions sayinherit, so a dispatch that carries no model runs on your session's model, whatever the record asked for. The dispatch is checked against the order schema before it leaves, and leaves a receipt naming the agent that ran, the model the call asked for and the model the host says ran. GATE L4 reads those receipts: anexecorevalworker that ran below the floor refusesship, and a model other than the record's is written into the gate's row — say so in the ship report. - Read the result at
<run>/results/<stem>.json:K verify envelope "<run>/results/<stem>.json" "${CLAUDE_PLUGIN_ROOT}/kernel/schemas/work-result.schema.json". Invalid, or absent, goes back once with the reason; a second failure is a phase that did not complete — name it and stop at that phase. - Apply it yourself: update the board's
status:for the tasks the result closed, append each discovery to<run>/discovery/ledger.md, append the evaluator's verdict-ledger lines to<run>/evaluation/.verdicts-<target>.jsonl, and state what the result changed. Nobody else writes these.
Build a scope
For scope S in round R, attempt A (start at 1): dispatch task-executor with operation execute (round 1, or fix with the verdict's bugs on later rounds),
whose substrate is the scope contract's allowed_file_substrate and shared_substrate. The worker runs K verify t0 "<spec>scopes/S.md" --round R --attempt A
itself. After its result lands, run the same command yourself and read status from the JSON on stdout, never from the exit code (a kept red-but-improved attempt exits 1):
status | You |
kept, overall green | the scope is green for round R |
kept, red | attempt A+1 builds on this tree; fold the digested errors into the next order |
reverted or crash | attempt A+1; the tree was restored |
A scope that reaches attemptBudget attempts without a green is out of attempts: stop building it, record it as a proposal for GATE H, and go on. It never stops the round.
Build a scope only after the scopes in its contract's depends_on are green. Two scopes build at once only when no path is writable by both (read the contracts' substrates); otherwise one at a time.
Count an attempt from the dispatch receipts in <run>/receipts/dispatch.jsonl, not from your memory: a dispatch with no receipt did not run the shipped worker.
The breakers
maxRounds ends the run: after a failed round R = maxRounds, go to the census. attemptBudget ends one scope. Neither ends the run from outside — both route to GATE H, where the
census compares what is green against the baseline and ships what works. A run killed from outside ships nothing.
Sub-commands
/ship with none runs the whole loop. A sub-command does one activity of it:
plan (/scopes, /wire) — the planning substeps; stop (/hammer) — the census over the run in hand;
retro (/retro, /retro --scan, /retro --research <stack>) — resources/retro.md, retro-scan.md, retro-research.md;
intake <path>… (--check writes nothing) — the language gate alone, resources/intake.md §2.
Resume
/ship again over an open run is the resume (over a closed one, phase 0 reports the ending and stops): init run refuses and prints what is on disk, and you continue from the phase table, reading files and nothing else.
A run closed without shipping is reopened by init run --force, which resolves every order nobody answered as abandoned before it writes.
Intake, language check and translation, profile, the launch record →
resources/intake.mdThe order for each operation: substrate, payload, where each field comes from →resources/orders.mdPlanning: how a substep runs, requirements; the spec, wiring and scope formats →resources/plan.mdand itsplan-*.mdsiblings Which knowledge-base file is read where, and under what name a rule is filed →resources/guidance.mdHow to put a gate to the PO, and what to have read first →resources/gates.mdWhat a round is; the attempt loop; why the loop stops where it does →resources/rounds.mdThe census, the baseline comparison, the cut list, the ship report (GATE H) →resources/stop.mdAfter a ship: feedback, the retro gate,--scan,--research→resources/retro.md,retro-scan.md,retro-research.md
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

