feat(effort): wire phase shifts in the 13 orchestrators and the handover writer

This commit is contained in:
bastien
2026-09-28 19:44:22 +02:00
parent 4a450ea6bc
commit 3c58160d0c
15 changed files with 64 additions and 0 deletions
+2
View File
@@ -225,6 +225,7 @@ Store `DEPLOYED_URL` for STEP 7. If empty, ask user during STEP 6.
--- ---
## STEP 3 — BASELINE AUDITS (parallel) ## STEP 3 — BASELINE AUDITS (parallel)
First: `Skill(effort-medium)` (effort-shift: dispatch span starts).
Goal: capture `SCORE_*_BEFORE` so the client doc shows the delta. Goal: capture `SCORE_*_BEFORE` so the client doc shows the delta.
@@ -261,6 +262,7 @@ the gate.
this pipeline (initial audits, fix-loop re-dispatches, commit-change, this pipeline (initial audits, fix-loop re-dispatches, commit-change,
web-validate) carries `model: "fable"` — the child hosts gated orchestration web-validate) carries `model: "fable"` — the child hosts gated orchestration
on the pipeline's behalf; it must never inherit the session model. on the pipeline's behalf; it must never inherit the session model.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
For web projects, dispatch in **a single message with two parallel Agent calls** (each with `model: "fable"`): For web projects, dispatch in **a single message with two parallel Agent calls** (each with `model: "fable"`):
+10
View File
@@ -63,6 +63,16 @@ has "lib/effort-shift.md" 'Skill(effort-max)'
has "lib/effort-shift.md" 'never inside a dispatched agent' has "lib/effort-shift.md" 'never inside a dispatched agent'
has "lib/model-gate.md" 'lib/effort-shift.md' has "lib/model-gate.md" 'lib/effort-shift.md'
# ── 6) orchestrator wiring (spec D4)
for s in feat hotfix bugfix ship-feature init-project onboard tour code-clean seo geo harden web-validate audit-delta; do
has "skills/$s/SKILL.md" 'lib/effort-shift.md'; has "skills/$s/SKILL.md" 'Skill(effort-medium)'; done
has "agents/client-handover-writer.md" 'lib/effort-shift.md'; has "agents/client-handover-writer.md" 'Skill(effort-medium)'
for s in feat hotfix bugfix; do has "skills/$s/SKILL.md" 'Skill(effort-high)'; done
for s in ship-feature init-project onboard code-clean audit-delta; do has "skills/$s/SKILL.md" 'Skill(effort-xhigh)'; done
for s in seo geo harden web-validate; do has "skills/$s/SKILL.md" 'Skill(effort-high)'; done
for s in feat hotfix bugfix ship-feature init-project; do has "skills/$s/SKILL.md" 'Skill(effort-low)'; done
has "skills/feat/SKILL.md" 'effort-shift: nested commit-change'
# ── summary (later tasks insert their locks ABOVE this line) # ── summary (later tasks insert their locks ABOVE this line)
printf 'effort-routing census: %d pass, %d fail\n' "$pass" "$fail" printf 'effort-routing census: %d pass, %d fail\n' "$pass" "$fail"
[ "$fail" -eq 0 ] [ "$fail" -eq 0 ]
+3
View File
@@ -29,6 +29,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
Audit only what changed since the last run, on the axes the user picks. Audit only what changed since the last run, on the axes the user picks.
Per axis: **audit → approval gate → fix → re-verify → marker update**, Per axis: **audit → approval gate → fix → re-verify → marker update**,
@@ -169,6 +170,7 @@ Then show the user the same compact table inline.
### 3b-bis. CHALLENGE THE PROPOSALS (before the gate) ### 3b-bis. CHALLENGE THE PROPOSALS (before the gate)
`Skill(effort-xhigh)` first (effort-shift: reflection resumes).
This axis' findings + proposed fixes are a proposal set worth attacking before This axis' findings + proposed fixes are a proposal set worth attacking before
the human gate. Persist THIS axis' finding list (not the whole append-only the human gate. Persist THIS axis' finding list (not the whole append-only
report) to `.claude/tasks/plans/<date>-<axis>-<HHMM>.md`, then run report) to `.claude/tasks/plans/<date>-<axis>-<HHMM>.md`, then run
@@ -254,6 +256,7 @@ Then offer to capitalize (per CLAUDE.md): recurring finding patterns →
below on the same delta (the SAST is a deterministic floor, the reasoned below on the same delta (the SAST is a deterministic floor, the reasoned
pass covers what grep/rules miss): pass covers what grep/rules miss):
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="security-auditor", description="audit-delta security — semgrep SAST", Agent(subagent_type="security-auditor", description="audit-delta security — semgrep SAST",
prompt="MODE: audit\nSCOPE: <delta file list>\nREPORT: .claude/audits/.audit-delta-semgrep.md\nFollow agents/security-auditor.md exactly. Pinned rulesets, no login. Write ONLY to REPORT. End with REPORT_WRITTEN: <path>.") prompt="MODE: audit\nSCOPE: <delta file list>\nREPORT: .claude/audits/.audit-delta-semgrep.md\nFollow agents/security-auditor.md exactly. Pinned rulesets, no login. Write ONLY to REPORT. End with REPORT_WRITTEN: <path>.")
``` ```
+5
View File
@@ -26,6 +26,7 @@ allowed-tools:
MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any
step below. Verdict `small` → STOP — print the gate's remedy, end the step below. Verdict `small` → STOP — print the gate's remedy, end the
turn, dispatch nothing. turn, dispatch nothing.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## REQUEST ## REQUEST
$ARGUMENTS $ARGUMENTS
@@ -123,6 +124,7 @@ RISK: <low/medium — what could go wrong>
bug report left open → one batch of questions, before STEP 3b. The trivial bug report left open → one batch of questions, before STEP 3b. The trivial
fast-path is not exempt: a 1-line fix with a visible choice still asks. fast-path is not exempt: a 1-line fix with a visible choice still asks.
`Skill(effort-high)` first (effort-shift: reflection resumes).
## STEP 3b — CHALLENGE THE FIX PLAN (before the contract) ## STEP 3b — CHALLENGE THE FIX PLAN (before the contract)
Unless the fix is the trivial 1-2 line case STEP 3 already fast-paths, the Unless the fix is the trivial 1-2 line case STEP 3 already fast-paths, the
DIAGNOSIS + FIX PLAN is a reflection worth attacking before it hardens into a DIAGNOSIS + FIX PLAN is a reflection worth attacking before it hardens into a
@@ -157,6 +159,7 @@ branch it's a no-op (commit in place). Never `finish`.
Dispatch the executor — sonnet by frontmatter pin, do not override: Dispatch the executor — sonnet by frontmatter pin, do not override:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="bugfixer") Agent(subagent_type="bugfixer")
prompt: "CONTRACT: <path from STEP 3.5> prompt: "CONTRACT: <path from STEP 3.5>
DIAGNOSIS: <ROOT CAUSE + EVIDENCE from STEP 3> DIAGNOSIS: <ROOT CAUSE + EVIDENCE from STEP 3>
@@ -278,6 +281,8 @@ A bugfix with an understood root cause is almost always worth one entry:
If the bug was trivial and the root cause not transferable → skip with `CAPITALIZE: trivial, skip`. If the bug was trivial and the root cause not transferable → skip with `CAPITALIZE: trivial, skip`.
`Skill(effort-low)` first (effort-shift: bookkeeping tail).
**Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it
surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks`
only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit
+3
View File
@@ -26,6 +26,7 @@ allowed-tools:
MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any
step below. Verdict `small` → STOP — print the gate's remedy, end the step below. Verdict `small` → STOP — print the gate's remedy, end the
turn, dispatch nothing. turn, dispatch nothing.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## TARGET ## TARGET
$ARGUMENTS $ARGUMENTS
@@ -120,6 +121,7 @@ TOTALS: <N blocking, N warn, N info>
If no issues found: report clean state and stop. If no issues found: report clean state and stop.
`Skill(effort-xhigh)` first (effort-shift: reflection resumes).
## STEP 3b — CHALLENGE THE SCOPE (before approval) ## STEP 3b — CHALLENGE THE SCOPE (before approval)
The STEP 3 report is the proposed cleanup scope — worth attacking before the The STEP 3 report is the proposed cleanup scope — worth attacking before the
human approves it. It is still inline, so FIRST persist it to human approves it. It is still inline, so FIRST persist it to
@@ -173,6 +175,7 @@ is approved, stop — no dispatch.
2. **Dispatch the executor** — sonnet by frontmatter pin, do not override: 2. **Dispatch the executor** — sonnet by frontmatter pin, do not override:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="code-cleaner") Agent(subagent_type="code-cleaner")
prompt: "SCOPE: .claude/audits/CODE-CLEAN-SCOPE.md prompt: "SCOPE: .claude/audits/CODE-CLEAN-SCOPE.md
APPROVED: <the approved item list, incl. any per-item exported-symbol clears> APPROVED: <the approved item list, incl. any per-item exported-symbol clears>
+6
View File
@@ -26,6 +26,7 @@ allowed-tools:
MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any
step below. Verdict `small` → STOP — print the gate's remedy, end the step below. Verdict `small` → STOP — print the gate's remedy, end the
turn, dispatch nothing. turn, dispatch nothing.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## REQUEST ## REQUEST
$ARGUMENTS $ARGUMENTS
@@ -122,6 +123,7 @@ request left open → one batch of questions BEFORE dispatching; answers land
in the contract's CLARIFICATIONS `[gated]` and in the plan. A choice that in the contract's CLARIFICATIONS `[gated]` and in the plan. A choice that
surfaces only during execution comes back as `NEED-DECISION` (STEP 3). surfaces only during execution comes back as `NEED-DECISION` (STEP 3).
`Skill(effort-high)` first (effort-shift: reflection resumes).
## STEP 1b — CHALLENGE THE PLAN (before branching) ## STEP 1b — CHALLENGE THE PLAN (before branching)
The STEP 1 plan is a reflection worth attacking before a branch is spent on it. The STEP 1 plan is a reflection worth attacking before a branch is spent on it.
Persist it to `.claude/tasks/plans/<date>-<slug>-<HHMM>.md`, then run Persist it to `.claude/tasks/plans/<date>-<slug>-<HHMM>.md`, then run
@@ -144,6 +146,7 @@ branch it's a no-op (commit in place). Never `finish`.
Dispatch the executor — sonnet by frontmatter pin, do not override: Dispatch the executor — sonnet by frontmatter pin, do not override:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="feater") Agent(subagent_type="feater")
prompt: "CONTRACT: <path from STEP 0.7> prompt: "CONTRACT: <path from STEP 0.7>
PLAN: <the STEP 1 checklist + approach bullets + edge cases, verbatim> PLAN: <the STEP 1 checklist + approach bullets + edge cases, verbatim>
@@ -200,6 +203,7 @@ test), consider splitting into 2-3 atomic commits grouped by logical
unit — or run `/commit-change` on the pending work (it dispatches the unit — or run `/commit-change` on the pending work (it dispatches the
commit-changer (propose opus / apply sonnet, BDR-077); never inline-load the bare agent, it is now a commit-changer (propose opus / apply sonnet, BDR-077); never inline-load the bare agent, it is now a
propose/apply executor). propose/apply executor).
Then `Skill(effort-high)` (effort-shift: nested commit-change loaded at low; reload feat's level).
Print summary: Print summary:
``` ```
@@ -250,6 +254,8 @@ Always append a 1-line entry to today's heading in `.claude/memory/journal.md`.
If no substantive capture candidate → skip with `CAPITALIZE: nothing to log`. If no substantive capture candidate → skip with `CAPITALIZE: nothing to log`.
`Skill(effort-low)` first (effort-shift: bookkeeping tail).
**Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it
surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks`
only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit
+4
View File
@@ -29,6 +29,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
Dispatches the `geo-analyzer` subagent (audit + fix bundle), then applies Dispatches the `geo-analyzer` subagent (audit + fix bundle), then applies
the bundle from THIS main loop at **L1** — same shape as `/web-validate` the bundle from THIS main loop at **L1** — same shape as `/web-validate`
@@ -46,6 +47,7 @@ every phase (LRN-126). Clean `.audit/geo-signals-<RUNID>.md` after apply.
**A — collect (sonnet):** **A — collect (sonnet):**
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="geo-analyzer", model="sonnet") Agent(subagent_type="geo-analyzer", model="sonnet")
prompt: "MODE: collect prompt: "MODE: collect
RUNID: <RUNID> RUNID: <RUNID>
@@ -83,6 +85,7 @@ Do NOT apply any fix and do NOT dispatch any sub-agent — /geo applies
your bundle." your bundle."
``` ```
`Skill(effort-high)` first (effort-shift: reflection resumes).
## STEP 1b — CHALLENGE THE FIX BUNDLE (advisory, before apply) ## STEP 1b — CHALLENGE THE FIX BUNDLE (advisory, before apply)
The analyzer returned a `## FIX BUNDLE` — worth attacking before any edit lands. The analyzer returned a `## FIX BUNDLE` — worth attacking before any edit lands.
**Skip if intervention mode = conservative** (nothing is applied). Else persist the **Skip if intervention mode = conservative** (nothing is applied). Else persist the
@@ -115,6 +118,7 @@ intent, not header wording: **AUTO** = no-confirmation items (G1–G4/G6);
For each AUTO item, dispatch its `applier` at L1, passing the item verbatim: For each AUTO item, dispatch its `applier` at L1, passing the item verbatim:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="hotfixer") # or "feater" per the item's applier Agent(subagent_type="hotfixer") # or "feater" per the item's applier
prompt: "<paste the bundle item: files, concern, current, expected, prompt: "<paste the bundle item: files, concern, current, expected,
framework note + shared-file discipline>. framework note + shared-file discipline>.
+3
View File
@@ -29,6 +29,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
This skill orchestrates a narrow-scope hardening audit: TLS + security This skill orchestrates a narrow-scope hardening audit: TLS + security
headers + redirects + canonical + custom 404 + server configs. It headers + redirects + canonical + custom 404 + server configs. It
@@ -260,6 +261,7 @@ seo-analyzer will run in parallel.
Spawn a single seo-analyzer subagent with an explicit IN/OUT scope list. Spawn a single seo-analyzer subagent with an explicit IN/OUT scope list.
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent( Agent(
subagent_type="seo-analyzer", subagent_type="seo-analyzer",
description="harden — narrow-scope web hardening audit", description="harden — narrow-scope web hardening audit",
@@ -519,6 +521,7 @@ Extract the score and critical-alert count from `.claude/audits/HARDEN.md` for t
--- ---
`Skill(effort-high)` first (effort-shift: reflection resumes).
## STEP 2b — CHALLENGE THE FIX BUNDLE (MODE=fix only, advisory) ## STEP 2b — CHALLENGE THE FIX BUNDLE (MODE=fix only, advisory)
Skip if MODE=audit (no bundle exists). Else, before the STEP 3 gate, harden the bundle: Skip if MODE=audit (no bundle exists). Else, before the STEP 3 gate, harden the bundle:
extract the `## 8. Fix bundle` section from HARDEN.md to extract the `## 8. Fix bundle` section from HARDEN.md to
+5
View File
@@ -24,6 +24,7 @@ allowed-tools:
MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any
step below. Verdict `small` → STOP — print the gate's remedy, end the step below. Verdict `small` → STOP — print the gate's remedy, end the
turn, dispatch nothing. turn, dispatch nothing.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## REQUEST ## REQUEST
$ARGUMENTS $ARGUMENTS
@@ -93,6 +94,7 @@ point. Run it ONLY when the settled fix touches control flow or behaviour — an
off-by-one, a wrong operator/variable, a behaviour-changing config value, or a off-by-one, a wrong operator/variable, a behaviour-changing config value, or a
missing import that alters execution. In doubt → it is probably a `/bugfix`. missing import that alters execution. In doubt → it is probably a `/bugfix`.
`Skill(effort-high)` first (effort-shift: reflection resumes).
For a logic fix: persist the STEP 1 located fix (root cause + the exact edit) to For a logic fix: persist the STEP 1 located fix (root cause + the exact edit) to
`.claude/tasks/plans/<date>-<slug>-<HHMM>.md`, then run `.claude/tasks/plans/<date>-<slug>-<HHMM>.md`, then run
`$HOME/.claude/lib/challenge-plan.md` with `PLAN` = that file, `KIND` = `$HOME/.claude/lib/challenge-plan.md` with `PLAN` = that file, `KIND` =
@@ -136,6 +138,7 @@ mentioned: STOP and ask `"working tree dirty: stash and continue, or abort?"`.
Dispatch the executor — sonnet by frontmatter pin, do not override: Dispatch the executor — sonnet by frontmatter pin, do not override:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="hotfixer") Agent(subagent_type="hotfixer")
prompt: "CONTRACT: <path from STEP 1.7> prompt: "CONTRACT: <path from STEP 1.7>
LOCATED: <file(s) found in STEP 1 + the confirmed root cause> LOCATED: <file(s) found in STEP 1 + the confirmed root cause>
@@ -233,6 +236,8 @@ Always append a 1-line entry to today's heading in `.claude/memory/journal.md` (
**Language rule**: the journal line and any proposed BLK/LRN entries are ALWAYS written English AND caveman — fragments, articles dropped, code/IDs/quoted errors verbatim — per CLAUDE.md "Memory registries" (Always English, always caveman). **Language rule**: the journal line and any proposed BLK/LRN entries are ALWAYS written English AND caveman — fragments, articles dropped, code/IDs/quoted errors verbatim — per CLAUDE.md "Memory registries" (Always English, always caveman).
`Skill(effort-low)` first (effort-shift: bookkeeping tail).
**Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it
surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks`
only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit
+5
View File
@@ -14,6 +14,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## REQUEST ## REQUEST
$ARGUMENTS $ARGUMENTS
@@ -183,6 +184,7 @@ implemented on a `feature/*` branch off `develop` (STEP 8).
Invoke `writing-plans` (vendored superpowers skill) with BRIEF + skeleton. Invoke `writing-plans` (vendored superpowers skill) with BRIEF + skeleton.
Granular tasks (2-5 min each), exact file paths, TDD: tests before code. Granular tasks (2-5 min each), exact file paths, TDD: tests before code.
`Skill(effort-xhigh)` first (effort-shift: reflection resumes).
## STEP 6b — CHALLENGE THE PLAN (before the gate) ## STEP 6b — CHALLENGE THE PLAN (before the gate)
Before the human sees the implementation plan, harden it. Run Before the human sees the implementation plan, harden it. Run
`$HOME/.claude/lib/challenge-plan.md` with `PLAN` = the plan STEP 6 wrote under `$HOME/.claude/lib/challenge-plan.md` with `PLAN` = the plan STEP 6 wrote under
@@ -209,6 +211,7 @@ Approve and start? (yes / request changes)
Changes → back to STEP 6. Approved → continue. Changes → back to STEP 6. Approved → continue.
## STEP 8 — IMPLEMENT ## STEP 8 — IMPLEMENT
First: `Skill(effort-medium)` (effort-shift: dispatch span starts).
Start the MVP feature branch off develop, then implement on it: Start the MVP feature branch off develop, then implement on it:
```bash ```bash
bash "$HOME/.claude/lib/gitflow.sh" start feature mvp bash "$HOME/.claude/lib/gitflow.sh" start feature mvp
@@ -311,6 +314,8 @@ articles dropped, code/IDs/quoted errors verbatim — per CLAUDE.md "Memory
registries" (Always English, always caveman). The gate may mirror the user's registries" (Always English, always caveman). The gate may mirror the user's
language; entries must not. language; entries must not.
`Skill(effort-low)` first (effort-shift: bookkeeping tail).
**Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it
surgically commits the approved founding decisions (`.claude/memory` + surgically commits the approved founding decisions (`.claude/memory` +
`.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, BEFORE `.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, BEFORE
+3
View File
@@ -14,6 +14,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## REQUEST ## REQUEST
$ARGUMENTS $ARGUMENTS
@@ -91,6 +92,7 @@ STOP. La réponse détermine si STEP 1 tourne une fois (A) ou N fois (C) ou avec
## STEP 2 — BASELINE CONFIG (onboarder agent) ## STEP 2 — BASELINE CONFIG (onboarder agent)
`Skill(effort-medium)` first (effort-shift: dispatch span starts).
Dispatch `Agent(subagent_type="onboarder")` (pin sonnet — BDR-077 : config Dispatch `Agent(subagent_type="onboarder")` (pin sonnet — BDR-077 : config
templating = exécution, plus jamais inline sur le modèle de session). Un templating = exécution, plus jamais inline sur le modèle de session). Un
BLOCAGE (clé manquante, CLAUDE.md existant) revient en rapport — l'agent ne BLOCAGE (clé manquante, CLAUDE.md existant) revient en rapport — l'agent ne
@@ -890,6 +892,7 @@ Vérifier que les 4 fichiers `.claude/audits/ONBOARD_REPORT.md`, `.claude/audits
--- ---
`Skill(effort-xhigh)` first (effort-shift: reflection resumes).
## STEP 7b — CHALLENGE THE PROPOSALS (before the human gate) ## STEP 7b — CHALLENGE THE PROPOSALS (before the human gate)
The 4 audit files are on disk; `AUDIT_PROPOSALS.md` is the artifact worth The 4 audit files are on disk; `AUDIT_PROPOSALS.md` is the artifact worth
attacking before the human spends a gate on it. Run attacking before the human spends a gate on it. Run
+4
View File
@@ -30,6 +30,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
This skill orchestrates TWO specialist agents running in parallel, then This skill orchestrates TWO specialist agents running in parallel, then
merges their output into a single `.claude/audits/SEO.md` report. It is the main merges their output into a single `.claude/audits/SEO.md` report. It is the main
@@ -324,6 +325,7 @@ templating.
**PHASE A — collect (both domains, one message):** **PHASE A — collect (both domains, one message):**
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="seo-analyzer", model="sonnet") Agent(subagent_type="seo-analyzer", model="sonnet")
prompt: """ prompt: """
MODE: collect MODE: collect
@@ -507,6 +509,7 @@ write GEO.md/SEO.md — /seo applies your bundle in STEP 1.5 and merges
the reports." the reports."
``` ```
`Skill(effort-high)` first (effort-shift: reflection resumes).
## STEP 1b — CHALLENGE THE FIX BUNDLE (advisory, before apply) ## STEP 1b — CHALLENGE THE FIX BUNDLE (advisory, before apply)
Both envelopes now carry a `## FIX BUNDLE` — worth attacking before any edit lands. Both envelopes now carry a `## FIX BUNDLE` — worth attacking before any edit lands.
**Skip if intervention mode = conservative** (nothing is applied). Else persist both **Skip if intervention mode = conservative** (nothing is applied). Else persist both
@@ -555,6 +558,7 @@ The two bundles may touch the same shared template (meta vs JSON-LD). Apply
For each AUTO item, dispatch its `applier` at L1, passing the item verbatim: For each AUTO item, dispatch its `applier` at L1, passing the item verbatim:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="hotfixer") # or "feater" per the item's applier Agent(subagent_type="hotfixer") # or "feater" per the item's applier
prompt: "<paste the bundle item: files, concern, current, expected, prompt: "<paste the bundle item: files, concern, current, expected,
framework note + shared-file discipline>. framework note + shared-file discipline>.
+5
View File
@@ -14,6 +14,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
## REQUEST ## REQUEST
$ARGUMENTS $ARGUMENTS
@@ -123,6 +124,7 @@ every VISIBLE / PUBLIC NAME / SCOPE choice the plan settles that neither the
request nor the STEP 1 brainstorm settled (check the contract's CLARIFICATIONS request nor the STEP 1 brainstorm settled (check the contract's CLARIFICATIONS
first) → one batch before STEP 2b; answers append to the contract `[gated]`. first) → one batch before STEP 2b; answers append to the contract `[gated]`.
`Skill(effort-xhigh)` first (effort-shift: reflection resumes).
## STEP 2b — CHALLENGE THE PLAN (adversarial, before the gate) ## STEP 2b — CHALLENGE THE PLAN (adversarial, before the gate)
Before the human sees the plan, harden it. Run `$HOME/.claude/lib/challenge-plan.md`: Before the human sees the plan, harden it. Run `$HOME/.claude/lib/challenge-plan.md`:
- `PLAN` = the plan STEP 2 wrote under `docs/superpowers/plans/` - `PLAN` = the plan STEP 2 wrote under `docs/superpowers/plans/`
@@ -170,6 +172,7 @@ judges the diff against this ENRICHED contract, not the STEP 0e seed — so a
criterion the design introduced is verified, not lost. criterion the design introduced is verified, not lost.
## STEP 4 — IMPLEMENT ## STEP 4 — IMPLEMENT
First: `Skill(effort-medium)` (effort-shift: dispatch span starts).
Start the feature branch off develop, then implement on it: Start the feature branch off develop, then implement on it:
```bash ```bash
bash "$HOME/.claude/lib/gitflow.sh" start feature <name> bash "$HOME/.claude/lib/gitflow.sh" start feature <name>
@@ -268,6 +271,8 @@ Feature shipped implies at least one design decision worth capturing. Run this B
If nothing substantive to log → print `CAPITALIZE: nothing substantive to log` and skip. If nothing substantive to log → print `CAPITALIZE: nothing substantive to log` and skip.
`Skill(effort-low)` first (effort-shift: bookkeeping tail).
**Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it
surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks`
only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit
+2
View File
@@ -30,6 +30,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
One pipeline per project: **security → clean → re-verify → reconcile → One pipeline per project: **security → clean → re-verify → reconcile →
doc → convergence re-audit**, looping until a full pass applies zero new doc → convergence re-audit**, looping until a full pass applies zero new
@@ -86,6 +87,7 @@ Model discipline (the user-fixed invariant behind this mode):
Runner dispatch, one per project: Runner dispatch, one per project:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="general-purpose", Agent(subagent_type="general-purpose",
description="tour runner — <project basename>", description="tour runner — <project basename>",
prompt="Read ~/.claude/skills/tour/SKILL.md and execute STEP 1 → STEP 3 prompt="Read ~/.claude/skills/tour/SKILL.md and execute STEP 1 → STEP 3
+4
View File
@@ -28,6 +28,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit
judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the
gate prints the remedy; end the turn — no later step, no dispatch. Nominal gate prints the remedy; end the turn — no later step, no dispatch. Nominal
(big) path is silent. (big) path is silent.
EFFORT SHIFTS: follow `$HOME/.claude/lib/effort-shift.md` (BDR-NEXT): medium when a dispatch span starts, own level before challenge synthesis, low at the bookkeeping tail, max at escalation.
This skill orchestrates a narrow-scope standards audit : This skill orchestrates a narrow-scope standards audit :
@@ -179,6 +180,7 @@ Spawn a single `validator-analyzer` subagent with explicit scope and
collected context : collected context :
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent( Agent(
subagent_type="validator-analyzer", subagent_type="validator-analyzer",
description="validate — W3C HTML + CSS + WCAG audit", description="validate — W3C HTML + CSS + WCAG audit",
@@ -252,6 +254,7 @@ grep -c '^### \[Critique\]' .claude/audits/VALIDATE.md
--- ---
`Skill(effort-high)` first (effort-shift: reflection resumes).
## STEP 2b — CHALLENGE THE FIX BUNDLE (MODE=fix only, advisory) ## STEP 2b — CHALLENGE THE FIX BUNDLE (MODE=fix only, advisory)
Skip if MODE=audit (no bundle exists). Else, before the STEP 3 gate, harden the bundle: Skip if MODE=audit (no bundle exists). Else, before the STEP 3 gate, harden the bundle:
extract the `## 5. Fix bundle` section from VALIDATE.md to extract the `## 5. Fix bundle` section from VALIDATE.md to
@@ -310,6 +313,7 @@ Options :
share files: share files:
``` ```
Skill(effort-medium) # effort-shift: dispatch span starts
Agent(subagent_type="hotfixer") Agent(subagent_type="hotfixer")
prompt: "<paste the file-group's bundle items: file, issue, current, prompt: "<paste the file-group's bundle items: file, issue, current,
expected fix>. expected fix>.