From a117e7ed678101c09f731ff79d3216fbe7696e9f Mon Sep 17 00:00:00 2001 From: bastien Date: Mon, 28 Sep 2026 19:55:47 +0200 Subject: [PATCH] fix(effort): shifts are sent with the step's first tool call (harness pairing rule); challenge shifts under their heading; fence indentation --- agents/client-handover-writer.md | 4 ++-- lib/effort-shift.md | 13 ++++++++++++- lib/tests/effort-routing.test.sh | 5 +++++ skills/audit-delta/SKILL.md | 6 +++--- skills/bugfix/SKILL.md | 8 ++++---- skills/code-clean/SKILL.md | 6 +++--- skills/feat/SKILL.md | 10 +++++----- skills/geo/SKILL.md | 8 ++++---- skills/harden/SKILL.md | 6 +++--- skills/hotfix/SKILL.md | 8 ++++---- skills/init-project/SKILL.md | 8 ++++---- skills/onboard/SKILL.md | 6 +++--- skills/seo/SKILL.md | 8 ++++---- skills/ship-feature/SKILL.md | 8 ++++---- skills/tour/SKILL.md | 4 ++-- skills/web-validate/SKILL.md | 8 ++++---- 16 files changed, 66 insertions(+), 50 deletions(-) diff --git a/agents/client-handover-writer.md b/agents/client-handover-writer.md index 125220b..0e0e204 100644 --- a/agents/client-handover-writer.md +++ b/agents/client-handover-writer.md @@ -225,7 +225,7 @@ Store `DEPLOYED_URL` for STEP 7. If empty, ask user during STEP 6. --- ## STEP 3 — BASELINE AUDITS (parallel) -First: `Skill(effort-medium)` (effort-shift: dispatch span starts). +First: `Skill(effort-medium)` (effort-shift: dispatch span starts; send it in the same message as this step's first dispatch). Goal: capture `SCORE_*_BEFORE` so the client doc shows the delta. @@ -262,7 +262,7 @@ the gate. this pipeline (initial audits, fix-loop re-dispatches, commit-change, web-validate) carries `model: "fable"` — the child hosts gated orchestration 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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. For web projects, dispatch in **a single message with two parallel Agent calls** (each with `model: "fable"`): diff --git a/lib/effort-shift.md b/lib/effort-shift.md index 71be69b..85d823c 100644 --- a/lib/effort-shift.md +++ b/lib/effort-shift.md @@ -8,6 +8,16 @@ max (stuck error, judged need). ## Mechanics (verified on Claude Code 2.1.283) +- **Pairing rule**: a `Skill(effort-)` call applies its effort only + when the same assistant message carries at least one other tool call + after it; a lone Skill call is a no-op. Send the shift together with the + step's first tool call, shift first. That paired call already runs at the + new level: pair a downward shift with a pinned-agent dispatch or a + Read/Bash, never with a built-in judgment dispatch (`general-purpose`, + `model: "opus"`), which would inherit it. +- Re-loading a shifter already loaded in the conversation re-applies its + effort (the harness only dedupes the skill text), so bounce-back + sequences such as medium → max → medium work. - A skill's `effort:` frontmatter applies from the moment it loads to the end of the turn: on the user's `/skill` and on a `Skill(...)` call by Claude in an interactive session. Last loaded wins, both directions. The @@ -21,7 +31,8 @@ max (stuck error, judged need). ## Shifters `Skill(effort-low)` · `Skill(effort-medium)` · `Skill(effort-high)` · -`Skill(effort-xhigh)` · `Skill(effort-max)`. One tool call, one-line body. +`Skill(effort-xhigh)` · `Skill(effort-max)`. One tool call, one-line body, +always sent with another tool call (Pairing rule). Typed by the user, `/effort-max` is a turn-scoped max: the relaunch lever after a STOP. `ultrathink` only adds an in-context nudge; the API level does not move. diff --git a/lib/tests/effort-routing.test.sh b/lib/tests/effort-routing.test.sh index c0d5bac..6dc7391 100755 --- a/lib/tests/effort-routing.test.sh +++ b/lib/tests/effort-routing.test.sh @@ -73,6 +73,11 @@ for s in seo geo harden web-validate; do has "skills/$s/SKILL.md" 'Skill(effort- 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' +# ── 6b) pairing rule documented (R11) +has "lib/effort-shift.md" 'lone Skill call is a no-op' +has "lib/effort-shift.md" 're-applies its' +[ "$(grep -c 'a lone Skill call is a no-op' "$R/skills/feat/SKILL.md")" -ge 1 ] && ok || ko "feat INC line must carry the pairing rule" + # ── summary (later tasks insert their locks ABOVE this line) printf 'effort-routing census: %d pass, %d fail\n' "$pass" "$fail" [ "$fail" -eq 0 ] diff --git a/skills/audit-delta/SKILL.md b/skills/audit-delta/SKILL.md index 1443c91..3cbda45 100644 --- a/skills/audit-delta/SKILL.md +++ b/skills/audit-delta/SKILL.md @@ -29,7 +29,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. Audit only what changed since the last run, on the axes the user picks. Per axis: **audit → approval gate → fix → re-verify → marker update**, @@ -170,7 +170,7 @@ Then show the user the same compact table inline. ### 3b-bis. CHALLENGE THE PROPOSALS (before the gate) -`Skill(effort-xhigh)` first (effort-shift: reflection resumes). +`Skill(effort-xhigh)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). 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 report) to `.claude/tasks/plans/--.md`, then run @@ -256,7 +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 pass covers what grep/rules miss): ``` -Skill(effort-medium) # effort-shift: dispatch span starts + Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="security-auditor", description="audit-delta security — semgrep SAST", prompt="MODE: audit\nSCOPE: \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: .") ``` diff --git a/skills/bugfix/SKILL.md b/skills/bugfix/SKILL.md index 4dfa490..af186a5 100644 --- a/skills/bugfix/SKILL.md +++ b/skills/bugfix/SKILL.md @@ -26,7 +26,7 @@ allowed-tools: MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any step below. Verdict `small` → STOP — print the gate's remedy, end the 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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## REQUEST $ARGUMENTS @@ -124,8 +124,8 @@ RISK: 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. -`Skill(effort-high)` first (effort-shift: reflection resumes). ## STEP 3b — CHALLENGE THE FIX PLAN (before the contract) +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). 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 contract. Persist it to `.claude/tasks/plans/--.md`, then run @@ -159,7 +159,7 @@ branch it's a no-op (commit in place). Never `finish`. Dispatch the executor — sonnet by frontmatter pin, do not override: ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="bugfixer") prompt: "CONTRACT: DIAGNOSIS: @@ -281,7 +281,7 @@ 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`. -`Skill(effort-low)` first (effort-shift: bookkeeping tail). +`Skill(effort-low)` first (effort-shift: bookkeeping tail; send it in the same message as the memory-commit command). **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` diff --git a/skills/code-clean/SKILL.md b/skills/code-clean/SKILL.md index ec1dcea..0821ebb 100644 --- a/skills/code-clean/SKILL.md +++ b/skills/code-clean/SKILL.md @@ -26,7 +26,7 @@ allowed-tools: MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any step below. Verdict `small` → STOP — print the gate's remedy, end the 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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## TARGET $ARGUMENTS @@ -121,8 +121,8 @@ TOTALS: If no issues found: report clean state and stop. -`Skill(effort-xhigh)` first (effort-shift: reflection resumes). ## STEP 3b — CHALLENGE THE SCOPE (before approval) +`Skill(effort-xhigh)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). 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 `.claude/tasks/plans/--.md` (STEP 3 report format, one item @@ -175,7 +175,7 @@ is approved, stop — no dispatch. 2. **Dispatch the executor** — sonnet by frontmatter pin, do not override: ``` -Skill(effort-medium) # effort-shift: dispatch span starts + Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="code-cleaner") prompt: "SCOPE: .claude/audits/CODE-CLEAN-SCOPE.md APPROVED: diff --git a/skills/feat/SKILL.md b/skills/feat/SKILL.md index b39a042..a5de32b 100644 --- a/skills/feat/SKILL.md +++ b/skills/feat/SKILL.md @@ -26,7 +26,7 @@ allowed-tools: MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any step below. Verdict `small` → STOP — print the gate's remedy, end the 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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## REQUEST $ARGUMENTS @@ -123,8 +123,8 @@ request left open → one batch of questions BEFORE dispatching; answers land in the contract's CLARIFICATIONS `[gated]` and in the plan. A choice that 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) +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). The STEP 1 plan is a reflection worth attacking before a branch is spent on it. Persist it to `.claude/tasks/plans/--.md`, then run `$HOME/.claude/lib/challenge-plan.md` with `PLAN` = that file, `KIND` = `build-plan`, @@ -146,7 +146,7 @@ branch it's a no-op (commit in place). Never `finish`. Dispatch the executor — sonnet by frontmatter pin, do not override: ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="feater") prompt: "CONTRACT: PLAN: @@ -203,7 +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 commit-changer (propose opus / apply sonnet, BDR-077); never inline-load the bare agent, it is now a propose/apply executor). -Then `Skill(effort-high)` (effort-shift: nested commit-change loaded at low; reload feat's level). +Then `Skill(effort-high)` (effort-shift: nested commit-change loaded at low; reload feat's level, sent with the next tool call). Print summary: ``` @@ -254,7 +254,7 @@ 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`. -`Skill(effort-low)` first (effort-shift: bookkeeping tail). +`Skill(effort-low)` first (effort-shift: bookkeeping tail; send it in the same message as the memory-commit command). **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` diff --git a/skills/geo/SKILL.md b/skills/geo/SKILL.md index d5b21bd..c06c8f6 100644 --- a/skills/geo/SKILL.md +++ b/skills/geo/SKILL.md @@ -29,7 +29,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. Dispatches the `geo-analyzer` subagent (audit + fix bundle), then applies the bundle from THIS main loop at **L1** — same shape as `/web-validate` @@ -47,7 +47,7 @@ every phase (LRN-126). Clean `.audit/geo-signals-.md` after apply. **A — collect (sonnet):** ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="geo-analyzer", model="sonnet") prompt: "MODE: collect RUNID: @@ -85,8 +85,8 @@ Do NOT apply any fix and do NOT dispatch any sub-agent — /geo applies your bundle." ``` -`Skill(effort-high)` first (effort-shift: reflection resumes). ## STEP 1b — CHALLENGE THE FIX BUNDLE (advisory, before apply) +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). The analyzer returned a `## FIX BUNDLE` — worth attacking before any edit lands. **Skip if intervention mode = conservative** (nothing is applied). Else persist the bundle verbatim to `.claude/tasks/plans/--.md`, then run @@ -118,7 +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: ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="hotfixer") # or "feater" per the item's applier prompt: ". diff --git a/skills/harden/SKILL.md b/skills/harden/SKILL.md index 7277deb..ad3ef56 100644 --- a/skills/harden/SKILL.md +++ b/skills/harden/SKILL.md @@ -29,7 +29,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. This skill orchestrates a narrow-scope hardening audit: TLS + security headers + redirects + canonical + custom 404 + server configs. It @@ -261,7 +261,7 @@ seo-analyzer will run in parallel. Spawn a single seo-analyzer subagent with an explicit IN/OUT scope list. ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent( subagent_type="seo-analyzer", description="harden — narrow-scope web hardening audit", @@ -521,8 +521,8 @@ 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) +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). 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 `.claude/tasks/plans/--.md` (a clean, blind-judgeable artifact), then run diff --git a/skills/hotfix/SKILL.md b/skills/hotfix/SKILL.md index e5fa263..f395cd5 100644 --- a/skills/hotfix/SKILL.md +++ b/skills/hotfix/SKILL.md @@ -24,7 +24,7 @@ allowed-tools: MODEL GATE (blocking): run `$HOME/.claude/lib/model-gate.md` BEFORE any step below. Verdict `small` → STOP — print the gate's remedy, end the 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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## REQUEST $ARGUMENTS @@ -94,7 +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 missing import that alters execution. In doubt → it is probably a `/bugfix`. -`Skill(effort-high)` first (effort-shift: reflection resumes). +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). For a logic fix: persist the STEP 1 located fix (root cause + the exact edit) to `.claude/tasks/plans/--.md`, then run `$HOME/.claude/lib/challenge-plan.md` with `PLAN` = that file, `KIND` = @@ -138,7 +138,7 @@ mentioned: STOP and ask `"working tree dirty: stash and continue, or abort?"`. Dispatch the executor — sonnet by frontmatter pin, do not override: ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="hotfixer") prompt: "CONTRACT: LOCATED: @@ -236,7 +236,7 @@ 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). -`Skill(effort-low)` first (effort-shift: bookkeeping tail). +`Skill(effort-low)` first (effort-shift: bookkeeping tail; send it in the same message as the memory-commit command). **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` diff --git a/skills/init-project/SKILL.md b/skills/init-project/SKILL.md index 48fb483..66e6c91 100644 --- a/skills/init-project/SKILL.md +++ b/skills/init-project/SKILL.md @@ -14,7 +14,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## REQUEST $ARGUMENTS @@ -184,8 +184,8 @@ implemented on a `feature/*` branch off `develop` (STEP 8). Invoke `writing-plans` (vendored superpowers skill) with BRIEF + skeleton. 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) +`Skill(effort-xhigh)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). Before the human sees the implementation plan, harden it. Run `$HOME/.claude/lib/challenge-plan.md` with `PLAN` = the plan STEP 6 wrote under `docs/superpowers/plans/`, `KIND` = `build-plan`, `SCOPE` = the skeleton + task file @@ -211,7 +211,7 @@ Approve and start? (yes / request changes) Changes → back to STEP 6. Approved → continue. ## STEP 8 — IMPLEMENT -First: `Skill(effort-medium)` (effort-shift: dispatch span starts). +First: `Skill(effort-medium)` (effort-shift: dispatch span starts; send it in the same message as this step's first dispatch). Start the MVP feature branch off develop, then implement on it: ```bash bash "$HOME/.claude/lib/gitflow.sh" start feature mvp @@ -314,7 +314,7 @@ articles dropped, code/IDs/quoted errors verbatim — per CLAUDE.md "Memory registries" (Always English, always caveman). The gate may mirror the user's language; entries must not. -`Skill(effort-low)` first (effort-shift: bookkeeping tail). +`Skill(effort-low)` first (effort-shift: bookkeeping tail; send it in the same message as the memory-commit command). **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits the approved founding decisions (`.claude/memory` + diff --git a/skills/onboard/SKILL.md b/skills/onboard/SKILL.md index b89a83b..5d7f526 100644 --- a/skills/onboard/SKILL.md +++ b/skills/onboard/SKILL.md @@ -14,7 +14,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## REQUEST $ARGUMENTS @@ -92,7 +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) -`Skill(effort-medium)` first (effort-shift: dispatch span starts). +`Skill(effort-medium)` first (effort-shift: dispatch span starts; send it in the same message as this step's first dispatch). Dispatch `Agent(subagent_type="onboarder")` (pin sonnet — BDR-077 : config 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 @@ -892,8 +892,8 @@ 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) +`Skill(effort-xhigh)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). The 4 audit files are on disk; `AUDIT_PROPOSALS.md` is the artifact worth attacking before the human spends a gate on it. Run `$HOME/.claude/lib/challenge-plan.md` with `PLAN` = diff --git a/skills/seo/SKILL.md b/skills/seo/SKILL.md index 03f8115..ebace86 100644 --- a/skills/seo/SKILL.md +++ b/skills/seo/SKILL.md @@ -30,7 +30,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. 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 @@ -325,7 +325,7 @@ templating. **PHASE A — collect (both domains, one message):** ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="seo-analyzer", model="sonnet") prompt: """ MODE: collect @@ -509,8 +509,8 @@ write GEO.md/SEO.md — /seo applies your bundle in STEP 1.5 and merges the reports." ``` -`Skill(effort-high)` first (effort-shift: reflection resumes). ## STEP 1b — CHALLENGE THE FIX BUNDLE (advisory, before apply) +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). Both envelopes now carry a `## FIX BUNDLE` — worth attacking before any edit lands. **Skip if intervention mode = conservative** (nothing is applied). Else persist both bundles (seo + geo, verbatim) to `.claude/tasks/plans/--.md`, then run @@ -558,7 +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: ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="hotfixer") # or "feater" per the item's applier prompt: ". diff --git a/skills/ship-feature/SKILL.md b/skills/ship-feature/SKILL.md index 04aedbc..fb8e3a6 100644 --- a/skills/ship-feature/SKILL.md +++ b/skills/ship-feature/SKILL.md @@ -14,7 +14,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. ## REQUEST $ARGUMENTS @@ -124,8 +124,8 @@ every VISIBLE / PUBLIC NAME / SCOPE choice the plan settles that neither the request nor the STEP 1 brainstorm settled (check the contract's CLARIFICATIONS 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) +`Skill(effort-xhigh)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). 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/` - `KIND` = `build-plan` @@ -172,7 +172,7 @@ judges the diff against this ENRICHED contract, not the STEP 0e seed — so a criterion the design introduced is verified, not lost. ## STEP 4 — IMPLEMENT -First: `Skill(effort-medium)` (effort-shift: dispatch span starts). +First: `Skill(effort-medium)` (effort-shift: dispatch span starts; send it in the same message as this step's first dispatch). Start the feature branch off develop, then implement on it: ```bash bash "$HOME/.claude/lib/gitflow.sh" start feature @@ -271,7 +271,7 @@ 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. -`Skill(effort-low)` first (effort-shift: bookkeeping tail). +`Skill(effort-low)` first (effort-shift: bookkeeping tail; send it in the same message as the memory-commit command). **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` diff --git a/skills/tour/SKILL.md b/skills/tour/SKILL.md index b2ed14a..8894645 100644 --- a/skills/tour/SKILL.md +++ b/skills/tour/SKILL.md @@ -30,7 +30,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. One pipeline per project: **security → clean → re-verify → reconcile → doc → convergence re-audit**, looping until a full pass applies zero new @@ -87,7 +87,7 @@ Model discipline (the user-fixed invariant behind this mode): Runner dispatch, one per project: ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="general-purpose", description="tour runner — ", prompt="Read ~/.claude/skills/tour/SKILL.md and execute STEP 1 → STEP 3 diff --git a/skills/web-validate/SKILL.md b/skills/web-validate/SKILL.md index 0b886ce..cae8c15 100644 --- a/skills/web-validate/SKILL.md +++ b/skills/web-validate/SKILL.md @@ -28,7 +28,7 @@ Run `$HOME/.claude/lib/model-gate.md`. Reflection here (planning, audit judgment, loop decisions) requires Fable/Opus. Verdict `small` → STOP: the gate prints the remedy; end the turn — no later step, no dispatch. Nominal (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. +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; every shift goes in the same message as the step's first tool call, a lone Skill call is a no-op. This skill orchestrates a narrow-scope standards audit : @@ -180,7 +180,7 @@ Spawn a single `validator-analyzer` subagent with explicit scope and collected context : ``` -Skill(effort-medium) # effort-shift: dispatch span starts +Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent( subagent_type="validator-analyzer", description="validate — W3C HTML + CSS + WCAG audit", @@ -254,8 +254,8 @@ 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) +`Skill(effort-high)` first (effort-shift: reflection resumes; send it in the same message as the challenger dispatch). 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 `.claude/tasks/plans/--.md` (a clean, blind-judgeable artifact), then run @@ -313,7 +313,7 @@ Options : share files: ``` -Skill(effort-medium) # effort-shift: dispatch span starts + Skill(effort-medium) # effort-shift: dispatch span starts; send with the Agent call below in ONE message Agent(subagent_type="hotfixer") prompt: ".