diff --git a/agents/client-handover-writer.md b/agents/client-handover-writer.md index 6b0af6b..125220b 100644 --- a/agents/client-handover-writer.md +++ b/agents/client-handover-writer.md @@ -225,6 +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). 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, 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. For web projects, dispatch in **a single message with two parallel Agent calls** (each with `model: "fable"`): diff --git a/lib/tests/effort-routing.test.sh b/lib/tests/effort-routing.test.sh index abe0bb6..c0d5bac 100755 --- a/lib/tests/effort-routing.test.sh +++ b/lib/tests/effort-routing.test.sh @@ -63,6 +63,16 @@ has "lib/effort-shift.md" 'Skill(effort-max)' has "lib/effort-shift.md" 'never inside a dispatched agent' 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) 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 02ac235..1443c91 100644 --- a/skills/audit-delta/SKILL.md +++ b/skills/audit-delta/SKILL.md @@ -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 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. Audit only what changed since the last run, on the axes the user picks. 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) +`Skill(effort-xhigh)` first (effort-shift: reflection resumes). 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 @@ -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 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", 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 7366e07..4dfa490 100644 --- a/skills/bugfix/SKILL.md +++ b/skills/bugfix/SKILL.md @@ -26,6 +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. ## REQUEST $ARGUMENTS @@ -123,6 +124,7 @@ 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) 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 @@ -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: ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent(subagent_type="bugfixer") prompt: "CONTRACT: DIAGNOSIS: @@ -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`. +`Skill(effort-low)` first (effort-shift: bookkeeping tail). + **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit diff --git a/skills/code-clean/SKILL.md b/skills/code-clean/SKILL.md index 30079f2..ec1dcea 100644 --- a/skills/code-clean/SKILL.md +++ b/skills/code-clean/SKILL.md @@ -26,6 +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. ## TARGET $ARGUMENTS @@ -120,6 +121,7 @@ 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) 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 @@ -173,6 +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 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 b013c0a..b39a042 100644 --- a/skills/feat/SKILL.md +++ b/skills/feat/SKILL.md @@ -26,6 +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. ## REQUEST $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 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) 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 @@ -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: ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent(subagent_type="feater") prompt: "CONTRACT: PLAN: @@ -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 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). 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`. +`Skill(effort-low)` first (effort-shift: bookkeeping tail). + **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit diff --git a/skills/geo/SKILL.md b/skills/geo/SKILL.md index 3ed2600..d5b21bd 100644 --- a/skills/geo/SKILL.md +++ b/skills/geo/SKILL.md @@ -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 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. Dispatches the `geo-analyzer` subagent (audit + fix bundle), then applies 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-.md` after apply. **A — collect (sonnet):** ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent(subagent_type="geo-analyzer", model="sonnet") prompt: "MODE: collect RUNID: @@ -83,6 +85,7 @@ 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) The analyzer returned a `## FIX BUNDLE` — worth attacking before any edit lands. **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: ``` +Skill(effort-medium) # effort-shift: dispatch span starts 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 5aad845..7277deb 100644 --- a/skills/harden/SKILL.md +++ b/skills/harden/SKILL.md @@ -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 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. This skill orchestrates a narrow-scope hardening audit: TLS + security 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. ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent( subagent_type="seo-analyzer", 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) 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 diff --git a/skills/hotfix/SKILL.md b/skills/hotfix/SKILL.md index ff11901..e5fa263 100644 --- a/skills/hotfix/SKILL.md +++ b/skills/hotfix/SKILL.md @@ -24,6 +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. ## REQUEST $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 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 `.claude/tasks/plans/--.md`, then run `$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: ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent(subagent_type="hotfixer") prompt: "CONTRACT: LOCATED: @@ -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). +`Skill(effort-low)` first (effort-shift: bookkeeping tail). + **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit diff --git a/skills/init-project/SKILL.md b/skills/init-project/SKILL.md index 069779a..48fb483 100644 --- a/skills/init-project/SKILL.md +++ b/skills/init-project/SKILL.md @@ -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 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. ## REQUEST $ARGUMENTS @@ -183,6 +184,7 @@ 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) Before the human sees the implementation plan, harden it. Run `$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. ## STEP 8 — IMPLEMENT +First: `Skill(effort-medium)` (effort-shift: dispatch span starts). Start the MVP feature branch off develop, then implement on it: ```bash 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 language; entries must not. +`Skill(effort-low)` first (effort-shift: bookkeeping tail). + **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits the approved founding decisions (`.claude/memory` + `.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, BEFORE diff --git a/skills/onboard/SKILL.md b/skills/onboard/SKILL.md index eba468d..b89a83b 100644 --- a/skills/onboard/SKILL.md +++ b/skills/onboard/SKILL.md @@ -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 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. ## REQUEST $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) +`Skill(effort-medium)` first (effort-shift: dispatch span starts). 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 @@ -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) The 4 audit files are on disk; `AUDIT_PROPOSALS.md` is the artifact worth attacking before the human spends a gate on it. Run diff --git a/skills/seo/SKILL.md b/skills/seo/SKILL.md index a4cf440..03f8115 100644 --- a/skills/seo/SKILL.md +++ b/skills/seo/SKILL.md @@ -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 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. 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 @@ -324,6 +325,7 @@ templating. **PHASE A — collect (both domains, one message):** ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent(subagent_type="seo-analyzer", model="sonnet") prompt: """ MODE: collect @@ -507,6 +509,7 @@ 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) Both envelopes now carry a `## FIX BUNDLE` — worth attacking before any edit lands. **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: ``` +Skill(effort-medium) # effort-shift: dispatch span starts 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 76bc316..04aedbc 100644 --- a/skills/ship-feature/SKILL.md +++ b/skills/ship-feature/SKILL.md @@ -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 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. ## REQUEST $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 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) 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/` @@ -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. ## STEP 4 — IMPLEMENT +First: `Skill(effort-medium)` (effort-shift: dispatch span starts). Start the feature branch off develop, then implement on it: ```bash bash "$HOME/.claude/lib/gitflow.sh" start feature @@ -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. +`Skill(effort-low)` first (effort-shift: bookkeeping tail). + **Then commit the memory** — follow `$HOME/.claude/lib/capitalize-commit.md`: it surgically commits what capitalize just wrote (`.claude/memory` + `.claude/tasks` only, never `git add -A`) as one `chore(memory)` commit, reports the memory-commit diff --git a/skills/tour/SKILL.md b/skills/tour/SKILL.md index b19dfc1..b2ed14a 100644 --- a/skills/tour/SKILL.md +++ b/skills/tour/SKILL.md @@ -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 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. One pipeline per project: **security → clean → re-verify → reconcile → 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: ``` +Skill(effort-medium) # effort-shift: dispatch span starts 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 1fa34b6..0b886ce 100644 --- a/skills/web-validate/SKILL.md +++ b/skills/web-validate/SKILL.md @@ -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 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. This skill orchestrates a narrow-scope standards audit : @@ -179,6 +180,7 @@ Spawn a single `validator-analyzer` subagent with explicit scope and collected context : ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent( subagent_type="validator-analyzer", 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) 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 @@ -310,6 +313,7 @@ Options : share files: ``` +Skill(effort-medium) # effort-shift: dispatch span starts Agent(subagent_type="hotfixer") prompt: ".