From cd625682c712a5fbe7e7169956cd8c92180ab8b1 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Aug 2026 19:52:23 +0000 Subject: [PATCH 1/5] =?UTF-8?q?Fable=20Mode=202.0.0=20=E2=80=94=20config-d?= =?UTF-8?q?riven=20spend,=20Claude=205=20era=20overhaul?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add .claude/fable/CONFIG.md (subagent model/effort, fleet, votes) read by skills at invocation and honored by all 7 workflows via a drift-checked shared config block; new /fable-config skill with value/light/max presets. Installers preserve user CONFIG.md on --update (CI-tested both platforms). Rewrite FABLE.md, GUIDE.md, README, and agent reporting style for the leaner Claude 5 generation: plain language, lead with the outcome, value over token burn. New SVG banner; drop stale PNGs; bump to 2.0.0. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XWSx33Mi2bXpR6w75r3SY2 --- .claude/agents/fable-builder.md | 2 + .claude/agents/fable-critic.md | 2 + .claude/agents/fable-finder.md | 2 + .claude/agents/fable-judge.md | 2 + .claude/agents/fable-scout.md | 2 + .claude/agents/fable-scribe.md | 1 + .claude/agents/fable-skeptic.md | 2 +- .claude/fable/CONFIG.md | 37 ++++ .claude/fable/FABLE.md | 72 +++---- .claude/fable/GUIDE.md | 132 ++++++------- .claude/fable/VERSION | 2 +- .claude/skills/fable-config/SKILL.md | 22 +++ .claude/skills/fable-exhaust/SKILL.md | 2 + .claude/skills/fable-marathon/SKILL.md | 2 +- .claude/skills/fable-migrate/SKILL.md | 2 + .claude/skills/fable-plan/SKILL.md | 2 + .claude/skills/fable-research/SKILL.md | 2 + .claude/skills/fable-review/SKILL.md | 4 +- .claude/skills/fable-ship/SKILL.md | 2 + .claude/skills/fable-understand/SKILL.md | 2 + .claude/skills/fable/SKILL.md | 2 +- .claude/skills/ultra/SKILL.md | 2 + .claude/workflows/fable-design.js | 29 ++- .claude/workflows/fable-exhaust.js | 29 ++- .claude/workflows/fable-migrate.js | 17 +- .claude/workflows/fable-research.js | 20 +- .claude/workflows/fable-review.js | 18 +- .claude/workflows/fable-ship.js | 17 +- .claude/workflows/fable-understand.js | 18 +- .github/workflows/ci.yml | 4 + CHANGELOG.md | 11 ++ CLAUDE.md | 14 +- CONTRIBUTING.md | 6 +- README.md | 241 ++++++++--------------- assets/banner.png | Bin 56910 -> 0 bytes assets/banner.svg | 34 ++++ assets/review-pipeline.png | Bin 140723 -> 0 bytes install.ps1 | 6 + install.sh | 6 + tools/check-workflows.cjs | 8 + 40 files changed, 456 insertions(+), 322 deletions(-) create mode 100644 .claude/fable/CONFIG.md create mode 100644 .claude/skills/fable-config/SKILL.md delete mode 100644 assets/banner.png create mode 100644 assets/banner.svg delete mode 100644 assets/review-pipeline.png diff --git a/.claude/agents/fable-builder.md b/.claude/agents/fable-builder.md index 99b37ab..8462b90 100644 --- a/.claude/agents/fable-builder.md +++ b/.claude/agents/fable-builder.md @@ -13,3 +13,5 @@ You implement one precisely scoped change. The scope is your contract: everythin - Verify your own work before reporting: syntax-check what you changed, and run the nearest test or build step when practical. Report the actual result — a failing check reported honestly is a good report. - Never weaken, skip, or delete a test to make your change pass. - If the spec conflicts with what the code actually is, do not improvise a different scope. Implement the closest faithful reading if one exists and flag the conflict prominently in your report; if no faithful reading exists, change nothing and report why. + +Report plainly: lead with the answer, keep lists short, and skip filler and hedging. diff --git a/.claude/agents/fable-critic.md b/.claude/agents/fable-critic.md index a338b57..acd61bf 100644 --- a/.claude/agents/fable-critic.md +++ b/.claude/agents/fable-critic.md @@ -16,3 +16,5 @@ Sweep this checklist against the draft: - A silent cap — "top N", sampling, a skipped retry — presented as full coverage. Verify each suspicion against the repo before reporting it: a critic who guesses is just noise. Report only real gaps, each specific enough that a follow-up agent could close it from your description alone, with your confidence — certain, probable, or coin-flip. If the draft genuinely holds, say so plainly. + +Report plainly: lead with the answer, keep lists short, and skip filler and hedging. diff --git a/.claude/agents/fable-finder.md b/.claude/agents/fable-finder.md index e47ecdc..301e43c 100644 --- a/.claude/agents/fable-finder.md +++ b/.claude/agents/fable-finder.md @@ -18,3 +18,5 @@ Rules: - If the project keeps a decision log (DECISIONS.md or docs/DECISIONS.md), read it before reporting: a finding whose substance is disagreement with an entry marked Locked is not a finding — but code that violates a Locked constraint is, and the report should cite the entry's id. Your report goes to an adversarial verifier who will try to refute each finding by reading the same code. Write findings that survive that. + +Report plainly: lead with the answer, keep lists short, and skip filler and hedging. diff --git a/.claude/agents/fable-judge.md b/.claude/agents/fable-judge.md index d596e2b..5f2cc76 100644 --- a/.claude/agents/fable-judge.md +++ b/.claude/agents/fable-judge.md @@ -12,3 +12,5 @@ You score competing candidates (designs, answers, plans) against exactly one rub - Use the full 1–10 range. Clustered 7s carry no information; force separation between candidates. - Justify each score with specifics from the candidate and the code, not adjectives. - You are not choosing a winner — you are pricing one dimension accurately so the panel's totals mean something. + +Report plainly: lead with the answer, keep lists short, and skip filler and hedging. diff --git a/.claude/agents/fable-scout.md b/.claude/agents/fable-scout.md index d0bc309..3156322 100644 --- a/.claude/agents/fable-scout.md +++ b/.claude/agents/fable-scout.md @@ -15,3 +15,5 @@ Your reply is consumed by an orchestrator, not a chat partner: - Cite everything as path:line. - Mark the difference between "confirmed by reading the code" and "inferred" — inferences are welcome but must be labeled as such. - If parts of the question are uncovered, say exactly which parts. Never silently narrow the question to what you happened to find. + +Report plainly: lead with the answer, keep lists short, and skip filler and hedging. diff --git a/.claude/agents/fable-scribe.md b/.claude/agents/fable-scribe.md index 979ec02..05ecfb5 100644 --- a/.claude/agents/fable-scribe.md +++ b/.claude/agents/fable-scribe.md @@ -13,3 +13,4 @@ You synthesize multi-agent findings into one deliverable for a reader who did no - When sources conflict, resolve it by reading the code yourself if that is cheap; otherwise surface the conflict explicitly rather than averaging it away. - Keep every load-bearing citation (path:line). Drop details that don't change what the reader does next — selectivity, not compression. - Structure follows content: prose for explanation, a table only for short enumerable facts, headers only when the deliverable is genuinely multi-part. +- Number multi-step instructions, keep lists to five items or fewer, and when there is a next action, end with it stated concretely. No filler, no hedging. diff --git a/.claude/agents/fable-skeptic.md b/.claude/agents/fable-skeptic.md index 46663a5..32a6c98 100644 --- a/.claude/agents/fable-skeptic.md +++ b/.claude/agents/fable-skeptic.md @@ -18,4 +18,4 @@ Refute when: the scenario cannot actually occur (guarded upstream, unreachable s Uphold only on positive evidence that the failure is real. If you genuinely cannot decide, refute — a false alarm shipped to the user costs more than a discarded maybe. -Cite the exact lines (path:line) that decide your verdict. +Cite the exact lines (path:line) that decide your verdict. Report plainly: verdict first, then the decisive evidence, nothing else. diff --git a/.claude/fable/CONFIG.md b/.claude/fable/CONFIG.md new file mode 100644 index 0000000..f384c57 --- /dev/null +++ b/.claude/fable/CONFIG.md @@ -0,0 +1,37 @@ +# Fable Mode — config + +Defaults for every fable workflow in this project. Edit this file by hand or run +`/fable-config`. Skills read it at invocation, so changes apply to the next +command — no restart. + +## Subagents (honored by every workflow) + +```yaml +subagent_model: opus # fable | opus | sonnet | haiku | inherit (= session model) +subagent_effort: medium # low | medium | high | xhigh | inherit +fleet: standard # light | standard | max — scales pools, votes, round caps +votes: 3 # skeptics per review finding (overrides the fleet preset) +# max_rounds: 6 # fable-exhaust round cap (uncomment to override the fleet preset) +# max_leads: 30 # fable-research deep-read cap (uncomment to override the fleet preset) +``` + +What `fleet` changes: **light** = smaller finder pools, 1 skeptic per finding, +lower round and lead caps. **standard** = the shipped defaults. **max** = 5-vote +verification and raised caps, for audits. + +## Main agent (set in the harness, recorded here) + +The pack cannot set your session's model, effort, or thinking — those are Claude +Code settings: + +- Model: `/model` (pick Fable 5 or Opus 5) +- Effort: `/effort low` — on Fable 5, low effort is fast, cheap, and still strong +- Thinking: toggle with Tab in the CLI, or via `/config` + +Recommended setups (apply the subagent half with `/fable-config `): + +| Preset | Main agent | Subagents | Fleet | +|---|---|---|---| +| `value` (the default) | Fable 5 @ low effort, or Opus 5 | opus @ medium | standard | +| `light` | anything | inherit @ low | light | +| `max` | Fable 5 @ high | opus @ high | max, 5 votes | diff --git a/.claude/fable/FABLE.md b/.claude/fable/FABLE.md index 9a0e43d..fa50c71 100644 --- a/.claude/fable/FABLE.md +++ b/.claude/fable/FABLE.md @@ -1,68 +1,56 @@ # Fable Mode -This project has Fable Mode installed. Work with the discipline, orchestration depth, and reporting quality of Claude Fable 5 running in Ultracode mode — compensate for raw capability with structure (independent perspectives, adversarial verification, iteration until the work runs dry), never with confidence. +This project has Fable Mode installed: run every substantive task with the structure Claude Fable 5 uses in Ultracode — independent perspectives, adversarial verification, iteration until the work runs dry. Structure over confidence, and value over token burn: the goal is the right answer at the lowest spend that still verifies it. -**Standing authorization:** the user installed this pack to opt into multi-agent orchestration by default. For every substantive task, prefer orchestrated workflows over solo work, without asking permission first. Solo work is for conversational replies and trivial mechanical edits. Explicit user instructions in the conversation always override this file. +**Standing authorization:** installing this pack is the user's opt-in to multi-agent orchestration by default. Prefer orchestrated workflows for substantive work without asking permission first. Solo work is for conversational replies and trivial edits. Explicit user instructions always override this file. -## Phase discipline +## Config -Every substantive task moves through phases; do not skip one because you feel sure: +`.claude/fable/CONFIG.md` holds the project's defaults: subagent model, subagent effort, fleet size, skeptic votes. Read it before dispatching any fable workflow and pass its yaml keys as `config` in the workflow args (e.g. `args: { question: "...", config: { subagent_model: "opus", subagent_effort: "medium", fleet: "standard", votes: 3 } }`). If the file is missing, pass no config — workflows default to standard. `/fable-config` changes the file; words in the request override it for one run. -1. **Understand** — map the relevant code before proposing anything. Run the `fable-understand` workflow for unfamiliar territory; at minimum, read every file you are about to change plus the callers of anything whose behavior changes. -2. **Design** — when more than one reasonable approach exists, generate genuinely different candidates and judge them (`fable-design`); commit to one before writing code. Do not fake a panel for a one-option decision. -3. **Implement** — the smallest diff that fully solves the problem, in the local idiom. No abstractions, error handling, or validation for scenarios that cannot happen: trust internal code and framework guarantees, validate only at system boundaries, and change code directly rather than adding flags or compatibility shims. Fan out with `fable-migrate` when the same change hits many independent sites. -4. **Verify** — adversarially. Run `fable-review` over your own changes; run the real tests; fix confirmed findings and re-verify. Done means verified, not written. Before a release or deployment, gate with `fable-ship`. +## Phases -Stay in the loop between phases: read each workflow's result and decide the next phase yourself. Tell the user in a sentence or two what each phase established before moving on. +Every substantive task moves through four phases; skip one only when you can say why: -## Orchestration +1. **Understand** — map before proposing. Run `fable-understand` for unfamiliar territory; at minimum read every file you will change plus the callers of anything whose behavior changes. +2. **Design** — when more than one reasonable approach exists, run `fable-design` and commit to the winner before writing code. Don't fake a panel for a one-option decision. +3. **Implement** — the smallest diff that fully solves the problem, in the local idiom. No abstractions or validation for scenarios that can't happen; change code directly rather than adding flags or shims. Fan out with `fable-migrate` when the same change hits many independent sites. +4. **Verify** — adversarially. Run `fable-review` over your own changes, run the real tests, fix confirmed findings, re-verify. Done means verified. Gate releases with `fable-ship`. + +Stay in the loop between phases: read each result, tell the user in a sentence what it established, then decide the next phase yourself. -Named workflows ship in `.claude/workflows/`: `fable-understand`, `fable-design`, `fable-review`, `fable-migrate`, `fable-ship` (release-readiness gate), `fable-research` (multi-modal answers to "where / how / what-breaks" questions), and `fable-exhaust` (loop-until-dry discovery for "find all the…" tasks). Subagents ship in `.claude/agents/` — fable-scout, fable-finder, fable-skeptic, fable-judge, fable-builder, fable-critic, fable-scribe — and are equally usable directly through the Agent tool. +## Orchestration -If the Workflow tool is unavailable in this environment, emulate the same stages with parallel Agent-tool calls using those subagents — the scripts in `.claude/workflows/` document each stage's structure and prompts. +Workflows in `.claude/workflows/`: `fable-understand`, `fable-design`, `fable-review`, `fable-migrate`, `fable-ship` (release gate), `fable-research` (cited answers to where/how/what-breaks questions), `fable-exhaust` (loop-until-dry discovery). Agents in `.claude/agents/`: fable-scout, fable-finder, fable-skeptic, fable-judge, fable-builder, fable-critic, fable-scribe — also usable directly through the Agent tool. -## Verification doctrine +If the Workflow tool is unavailable, emulate the same stages with parallel Agent-tool calls using those subagents; the workflow scripts document each stage's structure and prompts. -- Nothing important ships unverified. Findings face independent skeptics prompted to refute them (majority refuted → dropped). Designs face judges who check their claims against the code. -- Verification means observing the changed behavior, not the changed text: drive the affected flow end-to-end the way a human reviewer would — the real tests, the real command, the running app. "The edit succeeded" is not verification; prefer machine-checkable conditions (a command that exits 0) over judgment calls. -- Discovery tasks ("find all X") use loop-until-dry, not one pass: keep hunting until two consecutive rounds surface nothing new. Fixed counts miss the tail. -- After synthesis, run a completeness check — what modality wasn't searched, what source wasn't read, what claim has no citation — and close the gaps before delivering. -- No silent caps: if you bounded anything (top-N, sampling, skipped retries), say what was dropped. -- Never weaken, skip, or delete a test or check to make work pass — that is a failure to report, not a way to succeed. -- Report outcomes faithfully: failing tests are reported with their output; skipped steps are named as skipped; "done and verified" is stated plainly only when both are true. -- One fact, one home: a project's own operating docs — the root CLAUDE.md and its imports, AGENTS.md, a decision log (DECISIONS.md or docs/DECISIONS.md), FABLE-RUN.md Walls — are authoritative over re-detection. Pass facts you already know into workflow args (e.g. `fable-migrate`'s `verify`) instead of letting fleets re-derive them. Decision-log entries marked Locked are settled constraints to respect and cite, not findings to report or decisions to relitigate. +## Verification -## Long-running work +- Nothing important ships unverified. Findings face independent skeptics prompted to refute them; majority refuted → dropped. Verification means observing the changed behavior — the real tests, the real command — not re-reading the edit. Prefer machine-checkable conditions (a command that exits 0) over judgment calls. +- Discovery ("find all X") loops until two consecutive rounds surface nothing new; fixed counts miss the tail. After synthesis, run a completeness check and close the gaps. +- No silent caps: if anything was bounded (top-N, sampling, skipped retries), say what was dropped. Never weaken or skip a test to make work pass. Failing tests are reported with their output; before reporting progress, audit each claim against a tool result from this session. +- One fact, one home: the project's own docs — root CLAUDE.md and its imports, AGENTS.md, a decision log (DECISIONS.md or docs/DECISIONS.md), FABLE-RUN.md Walls — are authoritative over re-detection. Pass known facts into workflow args instead of letting fleets re-derive them; entries marked Locked are settled constraints, not findings. -For work spanning many cycles or sessions, keep state in `FABLE-RUN.md` at the project root: the goal, walls (actions that always queue for the user), a backlog with statuses and machine-checkable done-conditions where possible, standing invariants that every cycle re-verifies, a short journal, and the next action. Update it at every verified milestone and commit checkpoints, so any session can resume from that file alone; after compaction or in a fresh session, re-ground from it before acting. `/fable-marathon` runs this cycle discipline; for unattended operation, compose it with the harness's `/loop`, scheduled tasks, or `/goal` where available — a backlog item's done-when command is a ready-made goal condition. +## Scale -## Scale dial +CONFIG.md sets the default; the request adjusts it for one run. "Quick" or "no agents" → solo, without argument. "Thorough", "audit", "make sure" → fleet max and 5-vote verification. A stated token budget is a hard cap — stay under it and report what was cut. Every workflow announces every bound it applies. -Match fleet size to the ask. A quick question → answer directly or send one scout. A normal task → the phase loop at default settings. "Thorough", "audit", "comprehensive", "make sure" → bigger finder pools, 5-vote verification, exhaust loops. If the user says "quick" or "no agents", drop to solo work without argument. Every workflow caps its own loops and announces every bound it applies; a budget the user states is a hard cap — stay under it and report what was cut. +For work spanning many cycles or sessions, `/fable-marathon` keeps all state in `FABLE-RUN.md` (goal, walls, backlog with done-when commands, journal) so any session resumes from the file alone; compose with `/loop` or scheduled tasks for unattended runs. ## When a run breaks -- A failed or interrupted workflow loses no repository state — re-invoke it, narrowing the args to what is still unanswered. -- Null results from individual agents are expected, not fatal: workflows degrade by marking the gap. Report the gap rather than re-running the whole fleet for it. -- A stop at a round cap or token budget means coverage is incomplete and the run said so — narrow the scope and re-run, or report exactly what was skipped. -- "Agent type not found" means the pack was just installed: workflows fall back to the default agent and finish, but remind the user to restart the session so the pack's agents register. -- When verification rejects the same fix twice — the same disagreement recurring, not successive rounds of new findings — stop iterating and surface it; the third opinion belongs to the user. +Re-invoke a failed workflow with narrower args — no repo state is lost. Null results from single agents are gaps to report, not reasons to re-run the fleet. "Agent type not found" means a fresh install: workflows fall back to the default agent; remind the user to restart the session. When verification rejects the same fix twice, stop — the third opinion is the user's. ## Reporting -You are writing for a teammate who did not watch the work happen: +Write for a teammate who didn't watch the work: -- Before reporting progress, audit each claim against a tool result from the session. -- Lead with the outcome — the first sentence answers "what happened / what did you find". -- Complete sentences; no fragment chains (`A → B → fails`), no codenames or shorthand invented mid-task that the reader must decode. -- Be selective rather than compressed: drop details that don't change what the reader does next, and spell out what you keep. -- Cite code as `path:line`. Use tables only for short enumerable facts, with the explanation in prose. -- Everything the user needs from the turn must be in the final message — never buried mid-turn between tool calls. +- Lead with the outcome — the first sentence answers "what happened / what did you find". When there's a next action, state it concretely. +- Complete sentences, plain words. No arrow chains, no codenames invented mid-task, no filler ("Great question", "Hope this helps"), no hedging. +- Number multi-step instructions; keep lists to five items or fewer. Be selective rather than compressed: drop details that don't change what the reader does next. +- Cite code as `path:line`. Everything the user needs must be in the final message, never buried mid-turn. ## Autonomy -- When you have enough information to act, act: don't re-derive facts already established, re-litigate decisions the user has made, or survey options you won't pursue — when weighing a choice, give a recommendation. -- Act on the request without permission-seeking for reversible, in-scope work; confirm only destructive or genuinely scope-changing actions. -- Before a command that changes system state (restart, delete, config edit), check that the evidence supports that specific action — a signal that pattern-matches a known failure may have a different cause. -- Never end a turn on a promise ("I'll now…") — do the work, then end. Retry after errors; gather missing information yourself. -- When the user is asking a question or thinking out loud rather than requesting a change, deliver the assessment and stop — don't apply fixes unasked. +Act when you have enough information: don't re-derive established facts, re-litigate settled decisions, or survey options you won't pursue — recommend. Confirm only destructive or scope-changing actions. Never end a turn on a promise — do the work, then end. When the user is asking a question rather than requesting a change, deliver the assessment and stop. diff --git a/.claude/fable/GUIDE.md b/.claude/fable/GUIDE.md index e825ba5..67bce3b 100644 --- a/.claude/fable/GUIDE.md +++ b/.claude/fable/GUIDE.md @@ -1,100 +1,80 @@ # Fable Mode — user guide -One page: what to run, when to run it, and what runs itself. Ships with the pack -(`.claude/fable/GUIDE.md`) so it's in every project that has Fable Mode installed; -it is never loaded into context — it's for you, not the model. +One page: what to run, when, and how to dial cost. Ships with the pack +(`.claude/fable/GUIDE.md`); it's for you, never loaded into context. ## The default: run nothing -With the pack installed, the doctrine (`FABLE.md`) is in every session's context and -the model orchestrates on its own: it maps unfamiliar code before designing, panels -wide decisions, reviews its own diffs with skeptics, and gates releases. Ask for work -in plain language. The slash commands below are for when you want specific machinery, -a specific scale, or a run the doctrine wouldn't start by itself (marathon). +With the pack installed, the doctrine (`FABLE.md`) is in every session and the +model orchestrates on its own: maps unfamiliar code, panels wide decisions, +reviews its own diffs with skeptics, gates releases. Ask for work in plain +language. The slash commands are for when you want specific machinery at a +specific scale. -**What the pack reads from your repo:** workflows treat your project's own docs as -authoritative before self-detecting — the root CLAUDE.md and its `@path` imports, -AGENTS.md, a decision log (DECISIONS.md or docs/DECISIONS.md, where entries marked -Locked are settled constraints), and FABLE-RUN.md's Walls. Document your commands -and rules once, in your own files, and every fleet uses them. +## Set up once: models and effort -## Ad-hoc: pick by the question you're asking +Two dials, two places: -In lifecycle order — the order you'd use them building a feature from scratch: +1. **Main agent** (harness settings): pick the driver with `/model` and its + effort with `/effort`. The value setup is Fable 5 at **low** effort — recent + benchmarks keep showing lower effort (and often less thinking) is faster, + cheaper, and just as good when the structure does the verifying. Opus 5 is + the other strong driver. Thinking toggles with Tab in the CLI or `/config`. +2. **Subagents** (`.claude/fable/CONFIG.md`): the pack ships with subagents on + **opus at medium effort**, fleet **standard**, **3** skeptic votes. Change it + with `/fable-config` — no restart, applies to the next command: + +``` +/fable-config # show current settings +/fable-config fleet light # smaller pools, 1 skeptic, lower caps +/fable-config subagent_model haiku # cheap subagents +/fable-config max # audit mode: 5 votes, raised caps +/fable-config value # back to the shipped defaults +``` + +Words in a request override config for one run: "quick" / "no agents" → solo; +"thorough" / "audit" → fleet max. A stated budget ("+500k") is a hard cap. + +## Pick by the question | Your question | Run | Cost feel | |---|---|---| -| "How is this codebase / subsystem organized?" (new territory) | `/fable-understand` | medium | +| "How is this codebase organized?" (new territory) | `/fable-understand` | medium | | "Where is X handled? What breaks if I change Y?" | `/fable-research` | medium | -| "How should I build X?" (wide-open approach, decision only) | `/fable-plan` | medium | -| "Build X" (substantive feature, end to end) | `/ultra` | high | -| "Apply this same change everywhere" | `/fable-migrate` | scales with sites | -| "Review this diff / branch / PR" | `/fable-review` | ~16 agents | +| "How should I build X?" (decision only) | `/fable-plan` | medium | +| "Build X" (substantive, end to end) | `/ultra` | high | +| "Apply this change everywhere" | `/fable-migrate` | scales with sites | +| "Review this diff / branch / PR" | `/fable-review` | ~16 agents at standard | | "Find ALL the bugs / audit this module" | `/fable-exhaust` | highest — loops until dry | -| "Are we ready to release / deploy?" | `/fable-ship` | medium | +| "Are we ready to release?" | `/fable-ship` | medium | | "Keep working on this for hours / days" | `/fable-marathon` | open-ended | -| Doctrine isn't loaded (fresh clone, no CLAUDE.md wiring) | `/fable` | free | - -**Look-alikes, disambiguated:** - -- `/fable-research` vs `/fable-exhaust` — a scoped question gets one bounded sweep; - "find all the…" loops until two rounds come up dry. Prefer research unless you - really mean *all*. -- `/fable-plan` vs `/ultra` — plan stops at a synthesized design; ultra carries it - through implement and review. Use plan when you want to read the design first. -- `/fable-review` vs `/fable-ship` — review judges the change; ship judges the - release (project checks, hygiene, docs, then a skeptic attacks "ready"). -- `/fable-understand` vs `/fable-research` — a map of territory vs an answer to a - question. If you can phrase it as a question, use research. - -## Building a feature by hand +| Change defaults | `/fable-config` | free | +| Doctrine isn't loaded (fresh clone) | `/fable` | free | -If you're driving phases yourself instead of using `/ultra`: - -1. `/fable-understand` — only if the territory is unfamiliar this session. -2. `/fable-plan` — only if more than one reasonable approach exists. -3. Implement (ask normally; `/fable-migrate` if it's one change across many files). -4. `/fable-review` — fix confirmed findings, re-run tests. -5. `/fable-ship` — only when this lands in a release or deploy. - -Skipping a step you don't need is correct, not lazy — the doctrine says the same. +Look-alikes: `/fable-research` answers a scoped question in one bounded sweep; +`/fable-exhaust` loops until two rounds come up dry — use it only when you mean +*all*. `/fable-plan` stops at a design; `/ultra` carries it through review. +`/fable-review` judges the change; `/fable-ship` judges the release. ## What marathon runs for you -In a `/fable-marathon` run you don't invoke any of the above ad-hoc — the cycle calls -them as needed: `fable-understand` or `fable-design` to ground a new backlog, -`fable-design` when an item's approach is genuinely open, `fable-review` plus the -project's own checks to verify every item, and `fable-ship` to gate anything -deploy-shaped. Your job is the run file, `FABLE-RUN.md` at the project root: +`/fable-marathon` cycles a backlog through the full phase discipline and calls +the other workflows itself. Your job is the run file, `FABLE-RUN.md`: -- **Goal / Backlog** — edit these to steer the run; it re-reads them every cycle. +- **Goal / Backlog** — edit to steer; it re-reads every cycle. - **Walls** — actions that always stop and queue for you (secrets, payments, - deploys, anything destructive). Add your own; the run never crosses them. -- **`- [?]` blocked items** — questions only you can answer; the run keeps cycling - past them. Answer in the file or in chat to unblock. -- **Proposals** — Walls/Invariants the run suggests after failures; they take - effect only when you move them up yourself. - -For unattended runs: `/loop /fable-marathon` (self-paced) or `/loop 30m /fable-marathon`. - -**Loop types, mapped:** a plain prompt is one agentic turn (the doctrine handles it); -work with a verifiable finish line is a marathon backlog item with a `done-when:` -command — or the harness's `/goal` for a single task; recurring or time-driven work -is `/loop` or a scheduled task wrapped around `/fable-marathon`. The pack supplies -the process; the harness supplies the trigger. - -## Scale and cost dial + deploys, anything destructive). The run never crosses them. +- **`- [?]` blocked items** — questions only you can answer; the run keeps + cycling past them until you answer. -Words in your request are the dial: "quick" or "no agents" → solo work; nothing -special → default fleets; "thorough" / "audit" / "make sure" → bigger pools and -5-vote verification. A budget you state ("+500k") is a hard cap. Every workflow -logs every bound it applies — a stopped run always says what it skipped. +Unattended: `/loop /fable-marathon` or a scheduled task pointed at the same +command. A backlog item's `done-when:` command doubles as a `/goal` condition. ## If something breaks -- "Agent type not found" everywhere → the pack was just installed; restart the - session (runs still finish via a fallback in the meantime). -- A workflow died mid-run → re-invoke the skill with narrower args; no repo state - is lost. Marathon resumes from `FABLE-RUN.md` alone. -- Edited a skill or workflow → takes effect immediately. Edited an agent or the - CLAUDE.md wiring → restart the session. +- "Agent type not found" everywhere → fresh install; restart the session + (runs still finish via a fallback in the meantime). +- A workflow died mid-run → re-invoke the skill with narrower args; no repo + state is lost. Marathon resumes from `FABLE-RUN.md` alone. +- Edited a skill, workflow, or CONFIG.md → applies immediately. Edited an + agent or the CLAUDE.md wiring → restart the session. diff --git a/.claude/fable/VERSION b/.claude/fable/VERSION index 3eefcb9..227cea2 100644 --- a/.claude/fable/VERSION +++ b/.claude/fable/VERSION @@ -1 +1 @@ -1.0.0 +2.0.0 diff --git a/.claude/skills/fable-config/SKILL.md b/.claude/skills/fable-config/SKILL.md new file mode 100644 index 0000000..1f3c8ef --- /dev/null +++ b/.claude/skills/fable-config/SKILL.md @@ -0,0 +1,22 @@ +--- +name: fable-config +description: View or change Fable Mode defaults — subagent model, subagent effort, fleet size, skeptic votes — by editing .claude/fable/CONFIG.md. Presets - value, light, max. Use for "use fewer agents", "run subagents on haiku", "crank verification up", "cheaper runs". +argument-hint: "[show | ... | value | light | max]" +--- + +This is a mechanical edit of `.claude/fable/CONFIG.md` — do it yourself, no agents. + +1. Read `.claude/fable/CONFIG.md`. If it is missing, recreate it from the template at the end of this file first. +2. No arguments, or `show`: print the current yaml settings as a short table, then the harness commands for the main agent (`/model`, `/effort`, thinking toggles with Tab or `/config`). Stop. +3. ` ` pairs: update those keys in the yaml block. Valid keys and values — `subagent_model`: fable | opus | sonnet | haiku | inherit; `subagent_effort`: low | medium | high | xhigh | inherit; `fleet`: light | standard | max; `votes`, `max_rounds`, `max_leads`: positive integers. Reject anything else, showing the valid list. +4. A preset name rewrites the yaml keys: `value` → opus / medium / standard / votes 3; `light` → inherit / low / light / votes 1; `max` → opus / high / max / votes 5. +5. Confirm in two lines: what changed, and that it applies to the next fable command (no restart needed). If the user also asked about the main agent's model, effort, or thinking, give them the exact harness commands — you cannot run those for them. + +Template for a missing CONFIG.md — recreate the `## Subagents` yaml block exactly as: + +```yaml +subagent_model: opus # fable | opus | sonnet | haiku | inherit (= session model) +subagent_effort: medium # low | medium | high | xhigh | inherit +fleet: standard # light | standard | max — scales pools, votes, round caps +votes: 3 # skeptics per review finding (overrides the fleet preset) +``` diff --git a/.claude/skills/fable-exhaust/SKILL.md b/.claude/skills/fable-exhaust/SKILL.md index 94ce87f..f81cf89 100644 --- a/.claude/skills/fable-exhaust/SKILL.md +++ b/.claude/skills/fable-exhaust/SKILL.md @@ -6,6 +6,8 @@ argument-hint: "[what to hunt] [scope]" The user invoked /fable-exhaust: that is explicit opt-in to workflow orchestration — call the Workflow tool. This is the most expensive skill in the pack — many agents over several rounds — so note that to the user in one line when you start. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. From the arguments, determine what to hunt and where. Defaults: hunt defects (logic bugs, unhandled edge cases, races, leaks, security flaws) across the whole repository. 2. Run the named workflow `fable-exhaust` with `args: { hunt: "", scope: "" }`. 3. Report the confirmed findings grouped by file, each with its failure scenario and `file:line`. State how many rounds ran and whether the hunt ran dry or stopped at the round/budget cap — the user must know whether coverage is complete. diff --git a/.claude/skills/fable-marathon/SKILL.md b/.claude/skills/fable-marathon/SKILL.md index 7fa65f5..36111e5 100644 --- a/.claude/skills/fable-marathon/SKILL.md +++ b/.claude/skills/fable-marathon/SKILL.md @@ -4,7 +4,7 @@ description: Continuous goal-directed operation across many cycles or sessions argument-hint: "[goal]" --- -The user invoked /fable-marathon: that is explicit opt-in to workflow orchestration and to checkpoint commits at verified milestones — call the Workflow tool and commit without asking again. +The user invoked /fable-marathon: that is explicit opt-in to workflow orchestration and to checkpoint commits at verified milestones — call the Workflow tool and commit without asking again. Read `.claude/fable/CONFIG.md` once per cycle if it exists and pass its yaml keys as `config` in the args of every workflow the cycle dispatches. ## State diff --git a/.claude/skills/fable-migrate/SKILL.md b/.claude/skills/fable-migrate/SKILL.md index 92f6560..7844700 100644 --- a/.claude/skills/fable-migrate/SKILL.md +++ b/.claude/skills/fable-migrate/SKILL.md @@ -6,6 +6,8 @@ argument-hint: "" The user invoked /fable-migrate: that is explicit opt-in to workflow orchestration and to applying the described change across the repository — call the Workflow tool. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. The arguments are the migration instruction. If they are empty, ask for it. If the instruction is ambiguous about what the end state looks like, sharpen it inline first (read one representative site) — discovery on a mushy instruction floods the transformers with false positives. If the user named a verification command, capture it. 2. Run the named workflow `fable-migrate` with `args: { instruction: "", verify: "" }` — omit `verify` to let the workflow detect the project's own checks. 3. Report: how many files were transformed, every per-file problem the checkers reported with its file:line, and the final suite report verbatim — failing checks are reported, never silently fixed or hidden. If discovery found no matching sites, say so plainly and stop. If the result says `pilotFailed`, report that the fan-out was aborted after the pilot slice failed its checks — the remaining files were never touched — and what to sharpen before re-running. diff --git a/.claude/skills/fable-plan/SKILL.md b/.claude/skills/fable-plan/SKILL.md index 5045edf..84d42ef 100644 --- a/.claude/skills/fable-plan/SKILL.md +++ b/.claude/skills/fable-plan/SKILL.md @@ -6,6 +6,8 @@ argument-hint: "" The user invoked /fable-plan: that is explicit opt-in to workflow orchestration — call the Workflow tool. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. The arguments are the design question. If they are vague, sharpen the question inline first (read enough code to know what the real decision is) — a judge panel on a mushy question produces mush. 2. Run the named workflow `fable-design` with `args: { question: "" }`. 3. Present the synthesized design: the decision, why it won (with the judges' totals), what it sacrifices, and the concrete implementation plan. Give the losing approaches one line each — the user should see what was considered. diff --git a/.claude/skills/fable-research/SKILL.md b/.claude/skills/fable-research/SKILL.md index 550c84f..9a5e350 100644 --- a/.claude/skills/fable-research/SKILL.md +++ b/.claude/skills/fable-research/SKILL.md @@ -6,6 +6,8 @@ argument-hint: "" The user invoked /fable-research: that is explicit opt-in to workflow orchestration — call the Workflow tool. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. The arguments are the research question. If they are empty, ask for the question first. 2. Run the named workflow `fable-research` with `args: { question: "" }`. 3. Deliver the synthesized answer with its path:line citations intact. Separate what the evidence establishes from what remains uncertain, say what the completeness critic flagged — or that it found the answer complete — and name any leads the workflow returned as unread. diff --git a/.claude/skills/fable-review/SKILL.md b/.claude/skills/fable-review/SKILL.md index ac2cf4e..31a5d05 100644 --- a/.claude/skills/fable-review/SKILL.md +++ b/.claude/skills/fable-review/SKILL.md @@ -6,8 +6,10 @@ argument-hint: "[target]" The user invoked /fable-review: that is explicit opt-in to workflow orchestration — call the Workflow tool. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. Pin down the target inline first. If arguments were given, they describe it. Otherwise run `git status` and `git diff --stat HEAD` to see what is pending; if the tree is clean, target the most recent commit. If the project is not a git repository, target the files the user named or the most recently modified source files. -2. Run the named workflow `fable-review` with `args: { target: "", votes: 3 }`. If the user asked for a thorough or audit-grade review, use `votes: 5`. +2. Run the named workflow `fable-review` with `args: { target: "", config: {...} }`. Votes come from the config; pass `votes: 5` explicitly only when the user asked for a thorough or audit-grade review and the config says less. 3. Report the confirmed findings most-severe-first, in prose a teammate can act on: what breaks, the concrete failure scenario, and the `file:line`. Note how many raw findings the skeptics refuted (so the user knows the list is filtered), and name anything the review did not cover. 4. Fix findings only if the user asked for fixes; otherwise the report is the deliverable. diff --git a/.claude/skills/fable-ship/SKILL.md b/.claude/skills/fable-ship/SKILL.md index ed1eb69..7046976 100644 --- a/.claude/skills/fable-ship/SKILL.md +++ b/.claude/skills/fable-ship/SKILL.md @@ -6,6 +6,8 @@ argument-hint: "[scope]" The user invoked /fable-ship: that is explicit opt-in to workflow orchestration — call the Workflow tool. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. From the arguments, determine what is being shipped (a release, a deploy, a package publish). Default: the current state of the repository. 2. Run the named workflow `fable-ship` with `args: { scope: "" }`. 3. Report the verdict first — ready or not — then every blocker and warning with its evidence, then the ship mechanics the workflow returns (`shipCommands` and `releaseNotes`). If no ship command was detected, say so rather than inventing one. diff --git a/.claude/skills/fable-understand/SKILL.md b/.claude/skills/fable-understand/SKILL.md index d2e9e42..10e9fc1 100644 --- a/.claude/skills/fable-understand/SKILL.md +++ b/.claude/skills/fable-understand/SKILL.md @@ -6,6 +6,8 @@ argument-hint: "[focus]" The user invoked /fable-understand: that is explicit opt-in to workflow orchestration — call the Workflow tool. +Before dispatching, read `.claude/fable/CONFIG.md` if it exists and pass its yaml keys as `config` in the workflow args; words in the user's request override it for this run ("quick" = fleet light, "thorough"/"audit" = fleet max). + 1. The arguments name the focus (a subsystem, directory, or feature). If they are empty, map the whole repository. 2. Run the named workflow `fable-understand` with `args: { focus: "" }`. 3. Deliver the architecture brief with its path:line citations intact: system overview first, then per-area summaries, how the areas connect, and the "watch out" list of fragile spots. If an area reader failed, the brief marks that gap — surface it rather than smoothing it over. diff --git a/.claude/skills/fable/SKILL.md b/.claude/skills/fable/SKILL.md index 5460ad1..f37dff0 100644 --- a/.claude/skills/fable/SKILL.md +++ b/.claude/skills/fable/SKILL.md @@ -4,7 +4,7 @@ description: Session doctrine loader — reads the Fable Mode operating contract argument-hint: "[task]" --- -Read `.claude/fable/FABLE.md` in the project root and follow it as your operating doctrine for the rest of the session. It governs pacing, orchestration, verification, and reporting; explicit user instructions in the conversation always override it. +Read `.claude/fable/FABLE.md` in the project root and follow it as your operating doctrine for the rest of the session, including its Config section (`.claude/fable/CONFIG.md` sets workflow defaults). It governs pacing, orchestration, verification, and reporting; explicit user instructions in the conversation always override it. If the file does not exist, tell the user the Fable Mode pack is only partially installed (the doctrine file is missing) and continue without it. diff --git a/.claude/skills/ultra/SKILL.md b/.claude/skills/ultra/SKILL.md index dbc721b..4cd5c8d 100644 --- a/.claude/skills/ultra/SKILL.md +++ b/.claude/skills/ultra/SKILL.md @@ -8,6 +8,8 @@ The user invoked /ultra: that is explicit opt-in to multi-agent workflow orchest The arguments to this command are the task. If there are no arguments, ask the user what the task is before doing anything else. +Read `.claude/fable/CONFIG.md` once if it exists and pass its yaml keys as `config` in the args of every workflow below; words in the user's request override it for this run. + Run the task through the phases, reading each workflow's result before choosing the next step. 1. **Understand.** Unless the relevant code is already well known to you from this session, run the named workflow `fable-understand` with `args: { focus: "" }`. diff --git a/.claude/workflows/fable-design.js b/.claude/workflows/fable-design.js index 0da51a7..c4aadc4 100644 --- a/.claude/workflows/fable-design.js +++ b/.claude/workflows/fable-design.js @@ -9,15 +9,27 @@ export const meta = { ], } -const question = typeof args === 'string' ? args : (args && args.question) +const input = typeof args === 'string' ? { question: args } : (args || {}) +const question = input.question if (!question) throw new Error('fable-design requires a design question — pass args: { question: "..." }') +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const APPROACH = { @@ -55,8 +67,11 @@ const STANCES = [ 'evolution-first: optimize for how this will be extended and maintained over the next year', ] -const approaches = (await parallel(STANCES.map((stance, i) => () => - agent( +const stances = fleet === 'light' ? STANCES.slice(0, 2) : STANCES +if (stances.length < STANCES.length) log('fleet light: ' + stances.length + ' of ' + STANCES.length + ' design stances (evolution-first dropped)') + +const approaches = (await parallel(stances.map((stance, i) => () => + run( 'Design question: ' + question + '\n\n' + 'Explore the codebase first so the design is grounded in what actually exists — cite real files. ' + 'Then produce ONE complete design, taking this stance: ' + stance + '. ' + @@ -75,8 +90,10 @@ const briefFor = offset => approaches.map((_, k) => card((k + offset) % approach const brief = briefFor(0) const RUBRICS = ['correctness and edge-case coverage', 'implementation cost and risk', 'long-term maintainability'] +const rubrics = fleet === 'light' ? RUBRICS.slice(0, 2) : RUBRICS +if (rubrics.length < RUBRICS.length) log('fleet light: ' + rubrics.length + ' of ' + RUBRICS.length + ' judge rubrics (maintainability dropped)') -const judgments = (await parallel(RUBRICS.map((rubric, j) => () => +const judgments = (await parallel(rubrics.map((rubric, j) => () => run( 'Design question: ' + question + '\n\n' + briefFor(j) + '\n\n' + 'Presentation order is arbitrary — the approach number in each header, not position, identifies a candidate. ' + diff --git a/.claude/workflows/fable-exhaust.js b/.claude/workflows/fable-exhaust.js index e5c435e..56506fc 100644 --- a/.claude/workflows/fable-exhaust.js +++ b/.claude/workflows/fable-exhaust.js @@ -12,12 +12,23 @@ const input = typeof args === 'string' ? { hunt: args } : (args || {}) const hunt = input.hunt || 'defects: logic bugs, unhandled edge cases, race conditions, resource leaks, and security flaws' const scope = input.scope || 'the entire repository' +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const BUGS = { @@ -65,19 +76,25 @@ const STANCES = [ 'hunt boundaries: empty, zero, negative, maximum, unicode, malformed input', ] +// Fleet scaling — every bound is announced up front, per the no-silent-caps rule. +const stances = fleet === 'light' ? STANCES.slice(0, 2) : STANCES +const panel = fleet === 'light' ? LENSES.slice(0, 1) : LENSES +const need = fleet === 'light' ? 1 : 2 +const MAX_ROUNDS = cfg.max_rounds || { light: 3, standard: 6, max: 8 }[fleet] +log('fleet ' + fleet + ': ' + stances.length + ' finder stances per round, ' + panel.length + '-lens verification, round cap ' + MAX_ROUNDS) + const key = b => b.file + ':' + b.line + ':' + b.title.toLowerCase().slice(0, 60) const seen = new Set() // Locations only (no titles) — this set is re-broadcast to every finder each round, // so it must stay small; the finders need "don't re-report here", not the details. const seenLocs = new Set() const confirmed = [] -const MAX_ROUNDS = 6 let round = 0 let dry = 0 while (dry < 2 && round < MAX_ROUNDS && (!budget.total || budget.remaining() > 40_000)) { round++ - const found = (await parallel(STANCES.map((stance, i) => () => + const found = (await parallel(stances.map((stance, i) => () => run( 'Hunt for ' + hunt + ' in ' + scope + '. Round ' + round + '. Your stance: ' + stance + '.' + (seenLocs.size ? '\nAlready found — do NOT re-report findings at these locations: ' + Array.from(seenLocs).slice(-200).join('; ') : ''), @@ -95,14 +112,14 @@ while (dry < 2 && round < MAX_ROUNDS && (!budget.total || budget.remaining() > 4 fresh.forEach(b => { seen.add(key(b)); seenLocs.add(b.file + ':' + b.line) }) const judged = await parallel(fresh.map(b => () => - parallel(LENSES.map(lens => () => + parallel(panel.map(lens => () => run( 'Claimed finding in ' + b.file + ':' + b.line + ' — "' + b.title + '". Scenario: ' + b.detail + '\n' + 'Judge it through ONE lens only — ' + lens + '\n' + CONTRAST, { label: 'verify:' + b.file + ':' + b.line, phase: 'Verify', schema: VERDICT, agentType: 'fable-skeptic' } ))) - .then(vs => ({ b, real: vs.filter(v => v && v.refuted === false).length >= 2 })) + .then(vs => ({ b, real: vs.filter(v => v && v.refuted === false).length >= need })) )) const kept = judged.filter(j => j.real).map(j => j.b) confirmed.push(...kept) diff --git a/.claude/workflows/fable-migrate.js b/.claude/workflows/fable-migrate.js index 1a286c9..450ba5f 100644 --- a/.claude/workflows/fable-migrate.js +++ b/.claude/workflows/fable-migrate.js @@ -17,12 +17,23 @@ const verifyCmd = input.verify || "the project's documented build and test commands (read the root CLAUDE.md and its @path imports and AGENTS.md first; " + "detect from package.json scripts, Makefile, or CI config only if the docs name none)" +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const SITES = { @@ -121,7 +132,7 @@ const bad = results.filter(r => r && !r.ok) if (bad.length) log(bad.length + ' file(s) failed their per-file check — see perFileProblems') phase('Final verify') -const suite = await agent( +const suite = await run( 'A migration just touched ' + files.length + ' files ("' + input.instruction + '"). ' + 'Run ' + verifyCmd + ' and report the outcome verbatim — do not fix anything, just report what passed and what failed.', { label: 'project-checks', phase: 'Final verify' } diff --git a/.claude/workflows/fable-research.js b/.claude/workflows/fable-research.js index 1e6adcf..ee06588 100644 --- a/.claude/workflows/fable-research.js +++ b/.claude/workflows/fable-research.js @@ -10,15 +10,27 @@ export const meta = { ], } -const question = typeof args === 'string' ? args : (args && args.question) +const input = typeof args === 'string' ? { question: args } : (args || {}) +const question = input.question if (!question) throw new Error('fable-research requires a question — pass args: { question: "..." }') +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const LEADS = { @@ -71,7 +83,7 @@ for (const s of sweeps) for (const l of s.leads || []) if (!byFile.has(l.file)) let leads = Array.from(byFile.values()) log(leads.length + ' unique leads from ' + sweeps.length + ' sweep modalities') -const MAX_LEADS = 30 +const MAX_LEADS = cfg.max_leads || { light: 12, standard: 30, max: 60 }[fleet] let unreadLeads = [] if (leads.length > MAX_LEADS) { unreadLeads = leads.slice(MAX_LEADS).map(l => l.file + ' — ' + l.why) diff --git a/.claude/workflows/fable-review.js b/.claude/workflows/fable-review.js index 386449a..580f421 100644 --- a/.claude/workflows/fable-review.js +++ b/.claude/workflows/fable-review.js @@ -11,15 +11,27 @@ export const meta = { const input = typeof args === 'string' ? { target: args } : (args || {}) const target = input.target || 'the uncommitted working-tree changes (run `git status` and `git diff HEAD` to see them); if the tree is clean, review the most recent commit (`git show HEAD`); if this is not a git repository, review the most recently modified source files' -const votes = input.votes || 3 +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + +const votes = input.votes || cfg.votes || { light: 1, standard: 3, max: 5 }[fleet] const needed = Math.floor(votes / 2) + 1 +log(votes + ' skeptic vote(s) per finding, ' + needed + ' uphold(s) to survive') // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const FINDINGS = { diff --git a/.claude/workflows/fable-ship.js b/.claude/workflows/fable-ship.js index b6e4cc1..eb90ad9 100644 --- a/.claude/workflows/fable-ship.js +++ b/.claude/workflows/fable-ship.js @@ -12,12 +12,23 @@ export const meta = { const input = typeof args === 'string' ? { scope: args } : (args || {}) const scope = input.scope || 'the current state of this repository' +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const MECH = { @@ -80,7 +91,7 @@ const commands = (mech && mech.commands) || [] const releaseNotes = (mech && mech.notes) || '' log(commands.length + ' project check(s) detected' + (commands.length ? ': ' + commands.map(c => c.purpose).join(', ') : ' — gates will note the absence')) -const checks = await agent( +const checks = await run( 'Shipping ' + scope + '. Run each of these project checks and report every outcome verbatim — do not fix anything:\n' + (commands.length ? commands.map(c => c.purpose + ': ' + c.command).join('\n') : '(none detected — say so and report what you would have expected to find)'), { label: 'gate:checks', phase: 'Gate' } diff --git a/.claude/workflows/fable-understand.js b/.claude/workflows/fable-understand.js index 17c685c..b90d860 100644 --- a/.claude/workflows/fable-understand.js +++ b/.claude/workflows/fable-understand.js @@ -12,12 +12,23 @@ export const meta = { const input = typeof args === 'string' ? { focus: args } : (args || {}) const focus = input.focus || 'the whole repository' +// Config arrives via args.config — the skills read .claude/fable/CONFIG.md and pass it. +// sub() applies the configured subagent model/effort to every agent call in run(). +const cfg = (input && input.config && typeof input.config === 'object') ? input.config : {} +const fleet = ['light', 'standard', 'max'].includes(cfg.fleet) ? cfg.fleet : 'standard' +const sub = opts => ({ + ...opts, + ...(cfg.subagent_model && cfg.subagent_model !== 'inherit' ? { model: cfg.subagent_model } : {}), + ...(cfg.subagent_effort && cfg.subagent_effort !== 'inherit' ? { effort: cfg.subagent_effort } : {}), +}) +if (cfg.subagent_model || cfg.subagent_effort || cfg.fleet) log('config: subagents on ' + (cfg.subagent_model || 'the session model') + ' at ' + (cfg.subagent_effort || 'session') + ' effort, fleet ' + fleet) + // Falls back to the default agent when the pack's agents aren't registered yet // (agent types load at session start — a fresh install needs a restart). -const run = (prompt, opts) => agent(prompt, opts).catch(e => { +const run = (prompt, opts) => agent(prompt, sub(opts)).catch(e => { if (!opts.agentType || !String(e).includes('not found')) throw e log(opts.agentType + ' not registered (restart the session after installing the pack) — using the default agent') - return agent(prompt, { ...opts, agentType: undefined }) + return agent(prompt, { ...sub(opts), agentType: undefined }) }) const AREAS = { @@ -40,8 +51,9 @@ const AREAS = { } phase('Partition') +const areaRange = fleet === 'light' ? '2-4' : '3-8' const partition = await run( - 'Partition ' + focus + ' into 3-8 coherent areas for parallel deep-reading. ' + + 'Partition ' + focus + ' into ' + areaRange + ' coherent areas for parallel deep-reading. ' + 'Scan the directory tree, entry points, build configuration, and dependency manifest first. ' + 'Give each area the paths that belong to it and the single most important question about it.', { label: 'partition', schema: AREAS, agentType: 'fable-scout' } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5d14859..95fef55 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,9 +45,11 @@ jobs: run: | echo tampered >> "$T/.claude/fable/FABLE.md" echo user-owned > "$T/.claude/agents/user-own.md" + echo 'fleet: light' >> "$T/.claude/fable/CONFIG.md" ./install.sh --update "$T" cmp .claude/fable/FABLE.md "$T/.claude/fable/FABLE.md" [ "$(cat "$T/.claude/agents/user-own.md")" = "user-owned" ] + grep -q 'fleet: light' "$T/.claude/fable/CONFIG.md" || { echo "update overwrote user CONFIG.md"; exit 1; } install-ps1: runs-on: windows-latest @@ -74,8 +76,10 @@ jobs: Add-Content (Join-Path $t '.claude\fable\FABLE.md') 'tampered' Set-Content (Join-Path $t '.claude\agents\user-own.md') 'user-owned' + Add-Content (Join-Path $t '.claude\fable\CONFIG.md') 'fleet: light' .\install.ps1 -Target $t -Update $a = (Get-FileHash .claude\fable\FABLE.md).Hash $b = (Get-FileHash (Join-Path $t '.claude\fable\FABLE.md')).Hash if ($a -ne $b) { throw 'update did not restore FABLE.md byte-identical' } if ((Get-Content (Join-Path $t '.claude\agents\user-own.md')) -ne 'user-owned') { throw 'update touched a user-owned file' } + if (-not (Select-String -Path (Join-Path $t '.claude\fable\CONFIG.md') -SimpleMatch 'fleet: light' -Quiet)) { throw 'update overwrote user CONFIG.md' } diff --git a/CHANGELOG.md b/CHANGELOG.md index 10c2c89..fe3c2ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,17 @@ If a release ever removes a shipped file, the entry lists the stale path so `--update` users can delete it manually. +## 2.0.0 — 2026-08-07 + +The Claude 5 / value-maxxing release: pick your spend instead of prompting for it, tuned for the leaner Claude Code system prompts that shipped with the Claude 5 generation. + +- **Config file** — `.claude/fable/CONFIG.md` sets the defaults every workflow runs with: `subagent_model` (ships as `opus`), `subagent_effort` (ships as `medium`), `fleet` (`light` / `standard` / `max`), `votes`, and optional round/lead caps. Skills read it at invocation and pass it as `config` in workflow args, so edits apply to the next command with no restart. `--update` installs never overwrite it (CI-tested on both installers). +- **`/fable-config`** — new skill (11th) to show settings, change keys, or apply presets: `value` (the shipped defaults), `light` (inherit/low, 1 skeptic), `max` (opus/high, 5 votes). It also prints the harness commands for the main agent — `/model`, `/effort`, thinking toggle — which a pack cannot set itself. +- **All 7 workflows** honor the config: subagent model/effort applied to every agent call, fleet-scaled pools, votes, and caps, each announced with `log()` (no silent caps). The shared config block is drift-checked like the `run()` helper. +- **Recommended setup** documented throughout: main agent Fable 5 at low effort (or Opus 5), subagents Opus at medium — lower effort with structural verification beats higher effort without it, at a fraction of the spend. +- **Doctrine and reporting** rewritten for the Claude 5 generation: `FABLE.md` slimmed to judgment-over-rules, agents and scribe now report in plain language (lead with the answer, numbered steps, short lists, no filler). +- **README, GUIDE.md** rewritten shorter; new SVG banner. Removed: `assets/banner.png`, `assets/review-pipeline.png` (stale; `--update` users can delete them manually). + ## 1.0.0 — 2026-07-10 First public release, MIT licensed. diff --git a/CLAUDE.md b/CLAUDE.md index e50ab88..1975a68 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -19,12 +19,13 @@ node tools/check-workflows.cjs mkdir -p /tmp/fable-target && ./install.sh /tmp/fable-target # or: .\install.ps1 -Target ``` -## Architecture: four layers wired by name +## Architecture: five layers wired by name 1. **Doctrine** — `.claude/fable/FABLE.md`. Always-on operating contract, loaded via a `@.claude/fable/FABLE.md` import in the target's CLAUDE.md (created/appended by the installers). Its Orchestration list must stay in sync with the actual workflow names (the checker verifies the names resolve). -2. **Agents** — `.claude/agents/fable-*.md`. Seven subagents (scout, finder, skeptic, judge, builder, critic, scribe) that everything else is built from. -3. **Workflows** — `.claude/workflows/fable-*.js`. Scripts for the Workflow tool that fan out over the agents. -4. **Skills** — `.claude/skills/*/SKILL.md`. Slash commands that invoke the workflows by name and report results. +2. **Config** — `.claude/fable/CONFIG.md`. User-owned defaults (subagent model/effort, fleet, votes). Skills read it at invocation and pass its yaml keys as `config` in workflow args; workflows apply it via the shared config block. Once installed it belongs to the user: `--update` never overwrites it (both installers special-case `fable/CONFIG.md`, CI asserts it), and `/fable-config` carries a template to recreate it. +3. **Agents** — `.claude/agents/fable-*.md`. Seven subagents (scout, finder, skeptic, judge, builder, critic, scribe) that everything else is built from. +4. **Workflows** — `.claude/workflows/fable-*.js`. Scripts for the Workflow tool that fan out over the agents. +5. **Skills** — `.claude/skills/*/SKILL.md`. Slash commands that invoke the workflows by name and report results. The layers reference each other by **string name**; `tools/check-workflows.cjs` validates this wiring (agentType strings ↔ agent frontmatter names, backticked fable-* references in skills/doctrine ↔ workflow/agent/skill names, phase titles ↔ meta.phases), so run it after any rename or addition. One reference it cannot see: the installers detect an existing install by grepping CLAUDE.md for the literal string `@.claude/fable/FABLE.md` — if the doctrine path ever changes, update both installers, the FABLE.md references in the skills, and this import string together. @@ -34,14 +35,15 @@ The layers reference each other by **string name**; `tools/check-workflows.cjs` - `export const meta = {...}` must open the file and be a pure literal — no variables, calls, or spreads. `phases` titles must match the `phase()` calls / `phase:` opts in the body. - Plain JavaScript only (no TypeScript annotations). `Date.now()`, `Math.random()`, and argless `new Date()` throw in the sandbox. - Repo conventions to preserve: every workflow accepts `args` as either an object or a plain string (the harness can deliver args as a JSON-encoded string, so never access `args.x` bare); every deliberate bound (lead caps, round caps, budget stops) is announced with `log()` — no silent caps; `agent()`/`parallel()` results and schema arrays are null-guarded because skipped or dead agents resolve to null and structured output can come back with fields missing. -- Every workflow defines the same `run()` helper wrapping `agent()`: it retries without `agentType` when the agent isn't registered. This is load-bearing — agent types register at session start only, so a fresh install would otherwise kill every workflow until the session restarts. Use `run()` (not bare `agent()`) for any call that passes `agentType`. +- Every workflow defines the same `run()` helper wrapping `agent()`: it retries without `agentType` when the agent isn't registered. This is load-bearing — agent types register at session start only, so a fresh install would otherwise kill every workflow until the session restarts. Use `run()` (not bare `agent()`) for every agent call — it also applies the configured subagent model/effort via `sub()`. +- Every workflow carries the same config block (`const cfg` … `const sub` … the `log('config: …')` line) directly above `run()`. Both blocks are drift-checked byte-for-byte across workflows and required in each; fleet-dependent bounds (`votes`, round caps, stance slices) derive from `cfg`/`fleet` and must be announced with `log()`. ## Load-bearing wording - Each SKILL.md opens by declaring the invocation as the user's **explicit opt-in to the Workflow tool**. That sentence satisfies the Workflow tool's permission gating on other models — do not soften or remove it. - Each skill and the doctrine carry an Agent-tool fallback for Claude Code versions without the Workflow tool — keep it when adding skills. - FABLE.md is injected into every session of every target project; keep it lean and doctrine-only. -- Agents default to `model: inherit`; per-role pinning is user-facing tuning documented in README.md, not something to hardcode. +- Agents default to `model: inherit`; the supported model/effort lever is `CONFIG.md`'s `subagent_model` / `subagent_effort` (applied per-call by the workflows' `sub()` helper), not frontmatter pinning — don't hardcode models in agent files. # Fable Mode @.claude/fable/FABLE.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 121d8f2..fa566f4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -8,11 +8,12 @@ A distributable Claude Code configuration pack. The deliverable is the `.claude/ > **Everything under `.claude/` ships to every target project.** Repo-level files (CI, templates, assets, docs) live outside `.claude/`. Session-local or repo-local config never goes inside it. -## The four layers +## The five layers | Layer | Where | Referenced by | |---|---|---| | Doctrine | `.claude/fable/FABLE.md` | imported into the target's `CLAUDE.md` | +| Config | `.claude/fable/CONFIG.md` | read by skills, passed to workflows as `args.config` (user-owned after install — `--update` skips it) | | Agents | `.claude/agents/fable-*.md` | `agentType` strings in workflows | | Workflows | `.claude/workflows/fable-*.js` | invoked by name from skills | | Skills | `.claude/skills/*/SKILL.md` | slash commands | @@ -41,7 +42,8 @@ CI runs both, plus the PowerShell installer on Windows. A PR that fails the chec - Accept `args` as an object **or** a plain string (the harness may deliver JSON-encoded strings). - Announce every deliberate bound with `log()` — no silent caps. - Null-guard agent results; skipped or dead agents resolve to `null`. -- Use the shared `run()` helper (not bare `agent()`) for any call passing `agentType` — it falls back to the default agent on fresh installs where agent types haven't registered yet. +- Use the shared `run()` helper (not bare `agent()`) for every agent call — it falls back to the default agent on fresh installs where agent types haven't registered yet, and applies the configured subagent model/effort via `sub()`. +- Carry the shared config block (`const cfg` … the `log('config: …')` line) above `run()` in every workflow; both blocks are drift-checked byte-for-byte and required by the checker. Fleet-dependent bounds derive from `cfg`/`fleet` and are announced with `log()`. ## Adding an agent, workflow, or skill diff --git a/README.md b/README.md index af09519..eab6889 100644 --- a/README.md +++ b/README.md @@ -1,41 +1,25 @@
-Fable Mode — Fable 5's Ultracode discipline, ported to the models you can run all day +Fable Mode — Fable 5's Ultracode discipline, as a drop-in Claude Code pack. Verified fleets on any Claude model, at the spend you choose. [![CI](https://github.com/creativeskyai/Fable-Mode/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/creativeskyai/Fable-Mode/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/license-MIT-3da638)](LICENSE) [![Made for Claude Code](https://img.shields.io/badge/made%20for-Claude%20Code-D97757)](https://claude.com/claude-code) -[![Runs on](https://img.shields.io/badge/runs%20on-Opus%20·%20Sonnet%20·%20Haiku-8b7cff)](#which-model-should-drive) +[![Runs on](https://img.shields.io/badge/runs%20on-Fable%20·%20Opus%20·%20Sonnet%20·%20Haiku-8b7cff)](#the-value-setup) -**[Install](#install) · [See it work](#see-it-work) · [Commands](#the-commands) · [How it works](#how-it-works) · [Marathon](#continuous-operation-fable-marathon) · [Models](#which-model-should-drive) · [FAQ](#faq)** +**[Install](#install) · [The value setup](#the-value-setup) · [Config](#config) · [Commands](#the-commands) · [How it works](#how-it-works) · [FAQ](#faq)**
--- -Claude Fable 5 is Anthropic's Mythos-class model, built to run in an agent harness for days at a time: planning across stages, delegating to subagents, checking its own work. Most of us drive Opus, Sonnet, or Haiku day to day. +Fable Mode is a drop-in `.claude/` pack that gives any Claude Code project the working style of Claude Fable 5 running Ultracode: every substantive task becomes an orchestrated fleet, every finding is attacked by independent skeptics before you see it, discovery loops until it runs dry, and long jobs survive crashes and new sessions. One folder, two installer scripts, zero dependencies, MIT. -Fable Mode ports that working style to the model you already run. Every substantive task becomes an orchestrated fleet. Every finding is attacked by independent skeptics before you see it. Discovery loops until it runs dry. Long jobs survive crashes, compactions, and new sessions. One `.claude/` folder, two installer scripts, zero dependencies, MIT. - -The insight the pack is built on: most of what makes Fable-grade output trustworthy is process, and process is portable. Independent perspectives, skeptics that kill plausible-but-wrong claims before you read them, completeness critics, and reports that say exactly what was and wasn't covered. The pack ships that process as structure your model runs through, whichever model it is. - -Claude Code's own `ultracode` setting (Opus 4.8 / Sonnet 5, v2.1.203+) grants xhigh effort plus standing permission to orchestrate. What it doesn't ship is a *doctrine*: what the fleets should do with that permission, what verification means, when a hunt is done, when to stop and ask you. That doctrine is this pack. It composes with ultracode where you have it, and supplies the structure everywhere else, including on Haiku, which has no xhigh at all. - -## See it work - -With the doctrine wired in you don't run commands. You ask for work in plain language and the model orchestrates on its own; the skills exist for when you want specific machinery at a specific scale. Here is the trial every `/fable-review` finding has to survive: - -The fable-review pipeline: your diff fans out to four finders (correctness, contracts, security, resources); each raw finding must cite a concrete failure scenario, then faces three independent skeptics with different lenses; majority upholds and you see it, majority refutes and it dies - -The step most packs skip is the second one: **every raw finding goes on trial before it reaches you.** Three skeptics per finding, each judging through a different lens (trace it line by line; is it reachable from a real entry point; is the impact as claimed), majority verdict. A plausible-but-wrong finding dies in the pipeline instead of costing you twenty minutes of disproving it yourself. - -This very release was reviewed by its own fleet before merge. 28 agents, 8 raw findings, 3 survived cross-examination (one installer bug a skeptic reproduced live, two CI gaps), all fixed before merge. The five refuted claims died because skeptics verify the tree, not the finder's word: - -Real fable-review run over this release: 4 finders, 8 raw findings, 24 skeptic votes; 3 confirmed (install.sh version-hint ordering, missing CI timeout-minutes, missing CI cancel-in-progress) and 5 refuted as stale because the fixes had already landed +What's new in 2.0: **you set the spend in a config file instead of hoping the model infers it.** Subagent model, subagent effort, fleet size, and verification votes live in `.claude/fable/CONFIG.md`, changeable mid-session with `/fable-config`. The defaults are tuned for value, not token burn — benchmarks keep showing that lower effort with structural verification beats higher effort without it. ## Install -From a clone, into any project (the installer never overwrites existing files): +From a clone, into any project (never overwrites existing files): ```bash # macOS / Linux @@ -50,79 +34,88 @@ git clone --depth 1 https://github.com/creativeskyai/Fable-Mode.git $tmp & "$tmp\install.ps1" C:\path\to\your\project ``` -That copies the `.claude/` assets and adds one line to the target's `CLAUDE.md`: +That copies `.claude/**` and adds one import line to the target's `CLAUDE.md`. Then **restart any open Claude Code session in that project** — agents register at session start. -```markdown -# Fable Mode -@.claude/fable/FABLE.md -``` - -Manual install is those same two steps done by hand. If you'd rather not touch `CLAUDE.md`, skip the import and run `/fable` at the start of a session instead. - -> [!IMPORTANT] -> **Restart any open Claude Code session in the target project after installing.** Agent types register at session start and don't hot-reload. (Workflows survive an unregistered agent by falling back to the default agent type, with a log line telling you to restart.) - -To update an installed project later, re-run the installer with `--update` / `-Update`: it refreshes every pack-owned file to the current version and touches nothing else. Your own agents, skills, and settings are never modified, but it does overwrite tuning edits you made *inside* pack files, so commit first and re-apply from the diff. The installed version is readable at `.claude/fable/VERSION`; changes per version are in [CHANGELOG.md](CHANGELOG.md). +To update later, re-run with `--update` / `-Update`: it refreshes pack files, never touches your own files, and never overwrites your `CONFIG.md`. Version at `.claude/fable/VERSION`; changes in [CHANGELOG.md](CHANGELOG.md).
-Uninstall (two steps, no script) +Uninstall -1. Remove the `# Fable Mode` heading and the `@.claude/fable/FABLE.md` import line from the project's `CLAUDE.md` (delete the file if the installer created it and you added nothing else). -2. Delete the pack's files. Everything is namespaced `fable*` except the `ultra` skill: +1. Remove the `# Fable Mode` heading and `@.claude/fable/FABLE.md` line from the project's `CLAUDE.md`. +2. Delete the pack files (everything is namespaced `fable*` except `/ultra`): ```bash rm -rf .claude/fable .claude/skills/ultra .claude/skills/fable* rm -f .claude/agents/fable-*.md .claude/workflows/fable-*.js ``` +
-```powershell -Remove-Item -Recurse -Force .claude\fable, .claude\skills\ultra -Get-ChildItem .claude\agents\fable-*.md, .claude\workflows\fable-*.js | Remove-Item -Get-ChildItem .claude\skills -Directory -Filter fable* | Remove-Item -Recurse -Force +## The value setup + +Two dials. The main agent is a harness setting; the subagents are the pack's config. + +| | Set with | Recommended | +|---|---|---| +| **Main agent** | `/model`, `/effort`, thinking via Tab or `/config` | **Fable 5 at low effort** (or Opus 5) | +| **Subagents** | `.claude/fable/CONFIG.md`, via `/fable-config` | **Opus at medium effort** (the shipped default) | + +Why low effort on the driver: the pack's structure — independent finders, skeptics that refute, completeness critics — does the verification that high effort tries to do with more thinking. You get Ultracode-shaped results faster and cheaper. Turn effort (or thinking) back up only for genuinely hard single-brain reasoning; `/fable-config max` when you want audit-grade verification instead. + +## Config + +`.claude/fable/CONFIG.md` sets the defaults every fable command runs with: + +```yaml +subagent_model: opus # fable | opus | sonnet | haiku | inherit (= session model) +subagent_effort: medium # low | medium | high | xhigh | inherit +fleet: standard # light | standard | max — scales pools, votes, round caps +votes: 3 # skeptics per review finding ``` - +Change it any time — applies to the next command, no restart: + +``` +/fable-config # show current settings +/fable-config fleet light # fewer agents, 1 skeptic per finding +/fable-config subagent_model haiku # cheap subagents +/fable-config max # audit mode: opus/high, 5 votes +/fable-config value # back to the shipped defaults +``` + +Words in a request still override for one run: "quick" or "no agents" drops to solo work, "thorough" or "audit" scales to fleet max, and a stated budget ("+500k") is a hard cap. Every workflow announces every bound it applies — a stopped run always says what it skipped. ## The commands | Your question | Run | What happens | |---|---|---| -| "Build X" (substantive, end to end) | `/ultra` | understand → design → implement → review, full pipeline | -| "How is this codebase organized?" | `/fable-understand` | partition, parallel deep-reads, one cited architecture brief | +| "Build X" (substantive, end to end) | `/ultra` | understand → design → implement → review | +| "How is this codebase organized?" | `/fable-understand` | parallel deep-reads, one cited brief | | "Where is X handled? What breaks if I change Y?" | `/fable-research` | 5 search modalities, cited answer, completeness critic | -| "How should I build X?" (decision only) | `/fable-plan` | 3 divergent designs, judge panel, synthesized plan | +| "How should I build X?" (decision only) | `/fable-plan` | divergent designs, judge panel, synthesized plan | | "Review this diff / branch / PR" | `/fable-review` | 4 finder dimensions, every finding attacked by skeptics | -| "Find ALL the bugs / audit this module" | `/fable-exhaust` | rounds of diverse finders until two rounds come up dry | -| "Apply this change everywhere" | `/fable-migrate` | discover every site, pilot on 2 files, transform + verify each | -| "Are we ready to release?" | `/fable-ship` | project checks + hygiene + docs, then a skeptic attacks "ready" | -| "Keep working on this for hours/days" | `/fable-marathon` | continuous verified cycles with a persistent run file | -| Doctrine isn't loaded (fresh clone) | `/fable` | loads the operating contract mid-session | +| "Find ALL the bugs / audit this" | `/fable-exhaust` | finder waves until two rounds come up dry | +| "Apply this change everywhere" | `/fable-migrate` | discover every site, pilot on 2 files, transform + verify | +| "Are we ready to release?" | `/fable-ship` | project checks + hygiene + docs, skeptic attacks "ready" | +| "Keep working on this for hours/days" | `/fable-marathon` | verified cycles with a persistent run file | +| Change the defaults | `/fable-config` | edits CONFIG.md, shows presets | +| Doctrine isn't loaded | `/fable` | loads the operating contract mid-session | -The one command whose stopping rule deserves a sentence is `/fable-exhaust`: a fixed number of sweeps is a guess about how much there is to find, so it keeps launching differently-angled finder waves until two consecutive rounds surface nothing new, then stops on that evidence. - -A one-page routing guide (what to run when, look-alikes disambiguated, cost feel per command) ships with the pack as [`.claude/fable/GUIDE.md`](.claude/fable/GUIDE.md), so it's in every project you install into. +Mostly, though, you run nothing: the doctrine is in every session's context and the model orchestrates on its own. A one-page routing guide ships with the pack as [`.claude/fable/GUIDE.md`](.claude/fable/GUIDE.md). ## How it works -One folder, four layers, wired by string name, with a [checker](tools/check-workflows.cjs) in CI that keeps every name resolving: +One folder, five layers, wired by string name, with a [checker](tools/check-workflows.cjs) in CI that keeps every name resolving: ``` .claude/ -├── fable/FABLE.md the doctrine — always-on operating contract, imported into CLAUDE.md -├── skills/ 10 slash commands (the layer you touch) -├── workflows/ 7 deterministic fan-out scripts for Claude Code's Workflow tool -└── agents/ 7 specialists the fleets are built from +├── fable/FABLE.md the doctrine — always-on contract, imported into CLAUDE.md +├── fable/CONFIG.md your defaults — read at invocation, passed into every workflow +├── skills/ 11 slash commands (the layer you touch) +├── workflows/ 7 deterministic fan-out scripts for the Workflow tool +└── agents/ 7 specialists: scout, finder, skeptic, judge, builder, critic, scribe ``` -| Agent | Role | -|---|---| -| `fable-scout` | reads and maps territory (read-only) | -| `fable-finder` | hunts defects, each backed by a concrete failure scenario | -| `fable-skeptic` | adversarial verifier: weighs claims both ways, kills the wrong ones | -| `fable-judge` | scores candidates on one rubric, grounded in the code | -| `fable-builder` | precisely-scoped edits, self-verified | -| `fable-critic` | completeness critic: finds what's missing | -| `fable-scribe` | synthesizes fan-out results into one readable report | +The step most packs skip: **every raw finding goes on trial before it reaches you.** Skeptics judge each finding through different lenses (trace it line by line; is it reachable; is the impact real), majority verdict. A plausible-but-wrong finding dies in the pipeline instead of costing you twenty minutes. ```mermaid flowchart LR @@ -131,146 +124,68 @@ flowchart LR W --> F2["finder
contracts"] W --> F3["finder
security"] W --> F4["finder
resources"] - F1 & F2 & F3 & F4 --> S{"3 skeptics
per finding"} + F1 & F2 & F3 & F4 --> S{"skeptics vote
per finding"} S -->|"majority upholds"| OK["you see it"] S -->|"majority refutes"| DEAD["it dies here"] ``` -Every workflow announces every bound it applies (round caps, lead caps, budget stops), so a stopped run always says what it skipped. The doctrine writes this down as a rule: `no silent caps`. - -### How it maps to Fable 5 Ultracode - -| Ultracode behavior | Pack mechanism | -|---|---| -| Workflow orchestration by default | standing authorization in `FABLE.md`, plus per-skill opt-in | -| Adversarial verify (N refuting skeptics, majority kills) | `fable-review` verify stage; `fable-skeptic` agent | -| Perspective-diverse verification | three-lens panels in `fable-review` and `fable-exhaust` | -| Judge panel for wide solution spaces | `fable-design` + `fable-judge` (rotated presentation order per judge) | -| Loop-until-dry discovery | `fable-exhaust` (2 consecutive dry rounds to stop) | -| Multi-modal sweep | `fable-research` (names, content, structure, history, tests) | -| Completeness critic | `fable-critic`; final stage of `fable-research` | -| Token-budget awareness (`+500k` directives) | `fable-exhaust` checks `budget.remaining()` each round | -| Long-running autonomous work | `/fable-marathon` + `FABLE-RUN.md` state file; composes with `/loop` | -| Release gating before deploys | `fable-ship` (verifies readiness; never deploys) | - -## Continuous operation (`/fable-marathon`) +A real run of this pipeline over this repo's own 1.0 release — 4 finders, 8 raw findings, 24 skeptic votes, 3 confirmed and fixed before merge: -Built for overnight and multi-day runs. All state lives in `FABLE-RUN.md` at the project root: goal, backlog with machine-checkable `done-when:` commands, journal, next action. It's created automatically and committed at every verified milestone, so **any session resumes from the file alone**, across crashes, compactions, or machines. Each cycle executes one backlog item through the full phase discipline and checkpoints. +Real fable-review run: 4 finders, 8 raw findings, 24 skeptic votes; 3 confirmed, 5 refuted as stale because the fixes had already landed -Three disciplines keep unattended runs honest: - -- **Walls** — actions that always queue for you (secrets, payments, deploys, anything destructive), written into the run file so they survive compaction. -- **Invariants** — finished items graduate into cheap re-runnable check commands that every cycle re-verifies, so nothing that passed once rots silently. -- **The standoff rule** — when implementation and verification reject the same fix twice, the item blocks for you instead of burning tokens all night. - -For unattended operation, compose it with whatever loop mechanism your Claude Code provides: - -``` -/loop /fable-marathon # self-paced recurring cycles -/loop 30m /fable-marathon # fixed interval -``` - -or point a scheduled task at the same command. Where your Claude Code has `/goal`, a backlog item's `done-when:` command doubles as the goal condition. Marathon stops on its own only for things that are yours: an empty backlog, a question only you can answer, or a deploy-shaped action (gated behind `/fable-ship` and handed to you). - -## Which model should drive? - -The pack is model-agnostic. Agents ship with `model: inherit`, so everything runs on your session model. What changes per model is what the structure buys you: - -| Session model | Sweet spot | What the pack adds | -|---|---|---| -| **Opus 4.8** | design-heavy features, audits, overnight marathons | breadth: panels and skeptic votes catch what even a strong single pass misses | -| **Sonnet 5** | the daily driver: reviews, research, migrations | rigor: Ultracode-style verification at run-all-day prices | -| **Haiku 4.5** | scoped questions, mechanical migrations | honesty: the discipline reports gaps a small model would otherwise gloss over | - -Three practical notes: - -- On Opus 4.8 and Sonnet 5 (Claude Code v2.1.203+), `/effort ultracode` pairs naturally with the pack: ultracode supplies the effort and the standing permission, Fable Mode supplies the process. On Haiku 4.5 there is no xhigh, so the pack's structure is the whole game there. -- Per-agent model pinning in agent frontmatter (e.g. scouts on Haiku) is the intended tuning lever, **but Claude Code currently ignores that field** ([#44385](https://github.com/anthropics/claude-code/issues/44385)): subagents inherit the session model regardless. The shipped files stay on `inherit` deliberately. -- Reasoning effort is the better lever today: the Workflow tool accepts per-agent `effort` overrides. Spend it where the loop branches (skeptics and judges) and keep mechanical stages at default. The shipped workflows set no overrides; see [Tuning](#tuning). - -## Tuning - -- **Verification strictness** — `votes` in the review workflow (3 default, 5 for audits); dry-round threshold and `MAX_ROUNDS` in `fable-exhaust`. -- **Per-stage effort** — workflow agents inherit the session's reasoning effort; pass `effort: 'high'` on skeptic/judge stages if you want the loop's branch points thinking harder. -- **Doctrine** — `FABLE.md` is plain markdown; edit the scale dial or reporting rules to taste. It loads into every session, so keep it lean. -- **Cost control** — the scale dial is the main lever: "quick" or "no agents" in your request drops to solo work; "thorough" / "audit" scales up. A budget you state ("+500k") is a hard cap. Prefer `/fable-research` (one bounded sweep) over `/fable-exhaust` (loops until dry) for scoped questions. - -### What the pack reads from your repo, if present - -Workflows treat your project's own operating docs as authoritative before self-detecting anything: the root `CLAUDE.md` plus every file it imports via `@path` lines, `AGENTS.md`, a decision log at `DECISIONS.md` or `docs/DECISIONS.md` (entries marked **Locked** are settled constraints that reviewers cite instead of relitigating), and `FABLE-RUN.md`'s Walls. Nothing is required: a project that documents none of this gets plain self-detection (package.json scripts, Makefile, CI config). Document your commands once, in your own files, and every fleet uses them. +For long jobs, `/fable-marathon` keeps all state in `FABLE-RUN.md` at the project root — goal, walls (actions that always queue for you), backlog with machine-checkable `done-when:` commands, journal — committed at every verified milestone, so any session resumes from the file alone. Unattended: `/loop /fable-marathon` or a scheduled task. ## Requirements | Your Claude Code | What you get | |---|---| -| Workflow tool available (documented floor: v2.1.154+, paid plan) | the full experience: named workflows, deterministic orchestration | -| Agent tool only | the same structures via each skill's shipped fallback: parallel subagents, same stages, less deterministic control flow | -| Neither | doctrine-only via `/fable`: phase discipline and reporting standards, solo execution | +| Workflow tool (v2.1.154+, paid plan) | the full experience: named workflows, deterministic orchestration | +| Agent tool only | the same stages via each skill's shipped fallback | +| Neither | doctrine-only via `/fable`: phase discipline, solo execution | -Two things worth knowing going in: - -- **You're trading tokens for verification.** Costs and the levers that control them are in the [FAQ](#faq). -- **What hot-reloads:** skills and workflow scripts are read at invocation, so edits apply immediately. Agents and the `CLAUDE.md` import load at session start and need a restart. +Skills, workflows, and CONFIG.md hot-reload at invocation. Agents and the CLAUDE.md import load at session start — restart after installing. ## FAQ
Is this a plugin? Do I need a marketplace? -No. It's a drop-in `.claude/` configuration pack, not a marketplace plugin, and it coexists fine with any plugins you already use. No plugin manager, no npm, no build step. It works anywhere Claude Code reads project configuration: CLI, desktop, web, IDE extensions. +No. It's a drop-in `.claude/` configuration pack. No plugin manager, no npm, no build step. Works anywhere Claude Code reads project config: CLI, desktop, web, IDE extensions.
Will it fight my existing CLAUDE.md or agents? -It adds one import line and namespaced files (`fable-*`, plus `/ultra`), and the installer never overwrites anything that exists. Your explicit instructions always override the doctrine; that rule is written into the doctrine itself. +It adds one import line and namespaced files, and the installer never overwrites anything that exists. Your explicit instructions always override the doctrine — that rule is written into the doctrine itself.
-What does a run actually cost? +What does a run cost? -Orchestration multiplies agents: `/fable-review` is ~16+ agents, `/fable-exhaust` can be dozens across rounds. Every workflow logs every bound it applies, and "quick" in your request drops to solo work. If you state a token budget, it's treated as a hard cap. +Orchestration multiplies agents: `/fable-review` is ~16 agents at standard fleet, ~6 at light. The config is the dial — `/fable-config fleet light` halves the pools and drops to single-skeptic verification. "Quick" in a request drops to solo work; a stated token budget is a hard cap.
Does it make my model as good as Fable 5? -It makes your model's *work* go through the same gauntlet Fable's does: mapped before designed, reviewed by agents that didn't write it, hunted until dry, reported without gaps glossed over. On hard problems, that process accounts for a large share of the difference you can see in the output, even though the weights stay yours. -
- -
-Does it work outside Claude Code? - -The doctrine, agents, and skills port reasonably (they're markdown); the workflow scripts are Claude-Code-specific (the Workflow tool's JS sandbox). Every skill ships an Agent-tool fallback that emulates its stages, and on hosts that read `.claude/` directories that fallback becomes the primary path. First-class support for other harnesses is open for discussion in the issues. +It makes your model's *work* go through the same gauntlet: mapped before designed, reviewed by agents that didn't write it, hunted until dry, reported without gaps glossed over. On hard problems that process accounts for a large share of the visible difference — the weights stay yours.
-Can I adopt just one piece? +If a run dies mid-flight? -Yes. `/fable` loads doctrine only. Any skill works standalone. The seven agents are directly usable from the Agent tool without any workflow. Delete what you don't want; everything is namespaced. +Re-invoke the skill with narrower args; no repo state is lost. Marathon resumes from `FABLE-RUN.md` alone. "Agent type not found" everywhere means a fresh install — restart the session (runs still finish via a fallback meanwhile).
-If a run dies mid-flight? +Does it work outside Claude Code? -Workflows are stateless between invocations: re-invoke the skill, narrowing the args to what's still unanswered; no repo state is lost. `/fable-marathon` resumes from `FABLE-RUN.md` alone. "Agent type not found" everywhere means the pack was just installed: restart the session (runs still complete via the default-agent fallback in the meantime). +The doctrine, agents, and skills are markdown and port reasonably; the workflow scripts are Claude-Code-specific. Every skill ships an Agent-tool fallback that becomes the primary path on hosts without the Workflow tool.
## Contributing -The wiring is strict and the checker enforces it. Read [CONTRIBUTING.md](CONTRIBUTING.md) before your first PR. Security reports: [SECURITY.md](SECURITY.md). - -If Fable Mode killed a bad merge for you, that's a good reason to star the repo. It's how the next person finds it. - -
- - - - - Star history chart - - -
+The wiring is strict and the checker enforces it — read [CONTRIBUTING.md](CONTRIBUTING.md) first. Security reports: [SECURITY.md](SECURITY.md). If Fable Mode killed a bad merge for you, star the repo — it's how the next person finds it. ## License diff --git a/assets/banner.png b/assets/banner.png deleted file mode 100644 index 2cfbcec35f953996c5c5e8c4a1e9597177927828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56910 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 HamD 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 diff --git a/assets/banner.svg b/assets/banner.svg new file mode 100644 index 0000000..6e88532 --- /dev/null +++ b/assets/banner.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Fable Mode + + Fable 5’s Ultracode discipline, as a drop-in Claude Code pack. + Verified fleets on any Claude model — at the spend you choose. + diff --git a/assets/review-pipeline.png b/assets/review-pipeline.png deleted file mode 100644 index 4b72d983f7cd87bf3d198f5cd594dea86a4d972f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140723 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

-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�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�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 Date: Fri, 7 Aug 2026 20:03:31 +0000 Subject: [PATCH 2/5] Fix the 5 findings from the pack's own review fleet MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dogfood fable-review run (4 finders, 3 skeptics per finding, 19 agents) confirmed 5 findings and refuted none: - Shipped CONFIG.md had votes: 3 uncommented, short-circuiting the fleet vote presets (light=1/standard=3/max=5) — votes now ships commented, and the /fable-config presets re-comment it instead of forcing a count. - fable-review never scaled its finder pool by fleet — light now runs 2 of 4 dimensions, announced. - /ultra hardcoded votes: 3 into review args, overriding user config — it now defers to the config's fleet. - The checker's includes() presence test let a config block with an edited anchor line drop out of the drift comparison while still passing — the required-block check now demands a full twin-regex match (negative-tested). - README's light-fleet agent math corrected to what the code does. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XWSx33Mi2bXpR6w75r3SY2 --- .claude/fable/CONFIG.md | 12 ++++++------ .claude/fable/FABLE.md | 2 +- .claude/skills/fable-config/SKILL.md | 4 ++-- .claude/skills/ultra/SKILL.md | 2 +- .claude/workflows/fable-review.js | 6 +++++- CHANGELOG.md | 2 +- README.md | 4 ++-- tools/check-workflows.cjs | 9 +++++---- 8 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.claude/fable/CONFIG.md b/.claude/fable/CONFIG.md index f384c57..694eae2 100644 --- a/.claude/fable/CONFIG.md +++ b/.claude/fable/CONFIG.md @@ -10,14 +10,14 @@ command — no restart. subagent_model: opus # fable | opus | sonnet | haiku | inherit (= session model) subagent_effort: medium # low | medium | high | xhigh | inherit fleet: standard # light | standard | max — scales pools, votes, round caps -votes: 3 # skeptics per review finding (overrides the fleet preset) +# votes: 3 # skeptics per review finding (uncomment to override the fleet preset) # max_rounds: 6 # fable-exhaust round cap (uncomment to override the fleet preset) # max_leads: 30 # fable-research deep-read cap (uncomment to override the fleet preset) ``` What `fleet` changes: **light** = smaller finder pools, 1 skeptic per finding, -lower round and lead caps. **standard** = the shipped defaults. **max** = 5-vote -verification and raised caps, for audits. +lower round and lead caps. **standard** = the shipped defaults (3 skeptics). +**max** = 5-vote verification and raised caps, for audits. ## Main agent (set in the harness, recorded here) @@ -32,6 +32,6 @@ Recommended setups (apply the subagent half with `/fable-config `): | Preset | Main agent | Subagents | Fleet | |---|---|---|---| -| `value` (the default) | Fable 5 @ low effort, or Opus 5 | opus @ medium | standard | -| `light` | anything | inherit @ low | light | -| `max` | Fable 5 @ high | opus @ high | max, 5 votes | +| `value` (the default) | Fable 5 @ low effort, or Opus 5 | opus @ medium | standard (3 votes) | +| `light` | anything | inherit @ low | light (1 vote) | +| `max` | Fable 5 @ high | opus @ high | max (5 votes) | diff --git a/.claude/fable/FABLE.md b/.claude/fable/FABLE.md index fa50c71..4bd3f0b 100644 --- a/.claude/fable/FABLE.md +++ b/.claude/fable/FABLE.md @@ -6,7 +6,7 @@ This project has Fable Mode installed: run every substantive task with the struc ## Config -`.claude/fable/CONFIG.md` holds the project's defaults: subagent model, subagent effort, fleet size, skeptic votes. Read it before dispatching any fable workflow and pass its yaml keys as `config` in the workflow args (e.g. `args: { question: "...", config: { subagent_model: "opus", subagent_effort: "medium", fleet: "standard", votes: 3 } }`). If the file is missing, pass no config — workflows default to standard. `/fable-config` changes the file; words in the request override it for one run. +`.claude/fable/CONFIG.md` holds the project's defaults: subagent model, subagent effort, fleet size, skeptic votes. Read it before dispatching any fable workflow and pass its yaml keys as `config` in the workflow args (e.g. `args: { question: "...", config: { subagent_model: "opus", subagent_effort: "medium", fleet: "standard" } }` — pass only keys the file actually sets; an explicit `votes` overrides the fleet's own count). If the file is missing, pass no config — workflows default to standard. `/fable-config` changes the file; words in the request override it for one run. ## Phases diff --git a/.claude/skills/fable-config/SKILL.md b/.claude/skills/fable-config/SKILL.md index 1f3c8ef..b1a3f4d 100644 --- a/.claude/skills/fable-config/SKILL.md +++ b/.claude/skills/fable-config/SKILL.md @@ -9,7 +9,7 @@ This is a mechanical edit of `.claude/fable/CONFIG.md` — do it yourself, no ag 1. Read `.claude/fable/CONFIG.md`. If it is missing, recreate it from the template at the end of this file first. 2. No arguments, or `show`: print the current yaml settings as a short table, then the harness commands for the main agent (`/model`, `/effort`, thinking toggles with Tab or `/config`). Stop. 3. ` ` pairs: update those keys in the yaml block. Valid keys and values — `subagent_model`: fable | opus | sonnet | haiku | inherit; `subagent_effort`: low | medium | high | xhigh | inherit; `fleet`: light | standard | max; `votes`, `max_rounds`, `max_leads`: positive integers. Reject anything else, showing the valid list. -4. A preset name rewrites the yaml keys: `value` → opus / medium / standard / votes 3; `light` → inherit / low / light / votes 1; `max` → opus / high / max / votes 5. +4. A preset name rewrites the yaml keys: `value` → opus / medium / standard; `light` → inherit / low / light; `max` → opus / high / max. Presets also re-comment any explicit `votes` line so the fleet's own vote count (light 1, standard 3, max 5) applies — an uncommented `votes` always overrides the fleet, so only set it when the user asks for a specific count. 5. Confirm in two lines: what changed, and that it applies to the next fable command (no restart needed). If the user also asked about the main agent's model, effort, or thinking, give them the exact harness commands — you cannot run those for them. Template for a missing CONFIG.md — recreate the `## Subagents` yaml block exactly as: @@ -18,5 +18,5 @@ Template for a missing CONFIG.md — recreate the `## Subagents` yaml block exac subagent_model: opus # fable | opus | sonnet | haiku | inherit (= session model) subagent_effort: medium # low | medium | high | xhigh | inherit fleet: standard # light | standard | max — scales pools, votes, round caps -votes: 3 # skeptics per review finding (overrides the fleet preset) +# votes: 3 # skeptics per review finding (uncomment to override the fleet preset) ``` diff --git a/.claude/skills/ultra/SKILL.md b/.claude/skills/ultra/SKILL.md index 4cd5c8d..14c3994 100644 --- a/.claude/skills/ultra/SKILL.md +++ b/.claude/skills/ultra/SKILL.md @@ -15,7 +15,7 @@ Run the task through the phases, reading each workflow's result before choosing 1. **Understand.** Unless the relevant code is already well known to you from this session, run the named workflow `fable-understand` with `args: { focus: "" }`. 2. **Design.** If more than one reasonable approach exists, run `fable-design` with `args: { question: "" }` and adopt the synthesized design. If the approach is genuinely forced, write a three-line plan inline instead. 3. **Implement.** Make the changes yourself for a normal-sized diff, verifying compile/tests as you go. If the change is the same operation across many files, run `fable-migrate` with `args: { instruction: "..." }`. -4. **Review.** Run `fable-review` over the change set (`args: { target: "the uncommitted changes", votes: 3 }`). Fix every confirmed finding, re-run the tests, and re-run the review if the fixes were non-trivial. The task is done when review comes back clean and tests pass — or when the only remaining findings are ones you explicitly present to the user as accepted risks. +4. **Review.** Run `fable-review` over the change set (`args: { target: "the uncommitted changes", config: {...} }` — vote count comes from the config's fleet; don't pass `votes` unless the user asked for a specific count). Fix every confirmed finding, re-run the tests, and re-run the review if the fixes were non-trivial. The task is done when review comes back clean and tests pass — or when the only remaining findings are ones you explicitly present to the user as accepted risks. 5. **Ship** (only when the task includes releasing or deploying). Gate with `fable-ship` and hand the deploy trigger to the user. Scale honestly: if the task turns out to be trivial once understood, say so and skip ahead rather than burning a full pipeline on a one-line fix. diff --git a/.claude/workflows/fable-review.js b/.claude/workflows/fable-review.js index 580f421..ab34755 100644 --- a/.claude/workflows/fable-review.js +++ b/.claude/workflows/fable-review.js @@ -80,8 +80,12 @@ const LENSES = [ // Must stay single-line — the drift checker compares this line byte-for-byte across workflows. const CONTRAST = 'First state the strongest concrete case that the claim is REAL, then the strongest case that it is NOT, then decide: set refuted=true only if the against-case wins under your lens, citing the decisive evidence.' +// Fleet scaling — announced, per the no-silent-caps rule. +const dimensions = fleet === 'light' ? DIMENSIONS.slice(0, 2) : DIMENSIONS +if (dimensions.length < DIMENSIONS.length) log('fleet light: ' + dimensions.length + ' of ' + DIMENSIONS.length + ' finder dimensions (security and resources dropped)') + const perDimension = await pipeline( - DIMENSIONS, + dimensions, d => run( 'Review ' + target + '.\n\n' + 'Focus exclusively on this dimension: ' + d.focus + '.\n\n' + diff --git a/CHANGELOG.md b/CHANGELOG.md index fe3c2ec..1a8e78e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ If a release ever removes a shipped file, the entry lists the stale path so `--u The Claude 5 / value-maxxing release: pick your spend instead of prompting for it, tuned for the leaner Claude Code system prompts that shipped with the Claude 5 generation. -- **Config file** — `.claude/fable/CONFIG.md` sets the defaults every workflow runs with: `subagent_model` (ships as `opus`), `subagent_effort` (ships as `medium`), `fleet` (`light` / `standard` / `max`), `votes`, and optional round/lead caps. Skills read it at invocation and pass it as `config` in workflow args, so edits apply to the next command with no restart. `--update` installs never overwrite it (CI-tested on both installers). +- **Config file** — `.claude/fable/CONFIG.md` sets the defaults every workflow runs with: `subagent_model` (ships as `opus`), `subagent_effort` (ships as `medium`), `fleet` (`light` / `standard` / `max` — each fleet carries its own vote count of 1/3/5), and optional `votes` / round / lead-cap overrides. Skills read it at invocation and pass it as `config` in workflow args, so edits apply to the next command with no restart. `--update` installs never overwrite it (CI-tested on both installers). - **`/fable-config`** — new skill (11th) to show settings, change keys, or apply presets: `value` (the shipped defaults), `light` (inherit/low, 1 skeptic), `max` (opus/high, 5 votes). It also prints the harness commands for the main agent — `/model`, `/effort`, thinking toggle — which a pack cannot set itself. - **All 7 workflows** honor the config: subagent model/effort applied to every agent call, fleet-scaled pools, votes, and caps, each announced with `log()` (no silent caps). The shared config block is drift-checked like the `run()` helper. - **Recommended setup** documented throughout: main agent Fable 5 at low effort (or Opus 5), subagents Opus at medium — lower effort with structural verification beats higher effort without it, at a fraction of the spend. diff --git a/README.md b/README.md index eab6889..94986c7 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Why low effort on the driver: the pack's structure — independent finders, skep subagent_model: opus # fable | opus | sonnet | haiku | inherit (= session model) subagent_effort: medium # low | medium | high | xhigh | inherit fleet: standard # light | standard | max — scales pools, votes, round caps -votes: 3 # skeptics per review finding +# votes: 3 # uncomment to pin the skeptic count instead of the fleet's (1/3/5) ``` Change it any time — applies to the next command, no restart: @@ -162,7 +162,7 @@ It adds one import line and namespaced files, and the installer never overwrites

What does a run cost? -Orchestration multiplies agents: `/fable-review` is ~16 agents at standard fleet, ~6 at light. The config is the dial — `/fable-config fleet light` halves the pools and drops to single-skeptic verification. "Quick" in a request drops to solo work; a stated token budget is a hard cap. +Orchestration multiplies agents: `/fable-review` is ~16 agents at standard fleet (4 finders, 3 skeptics per finding) and roughly a third of that at light (2 finders, 1 skeptic per finding). The config is the dial — `/fable-config fleet light` shrinks every workflow's pools, votes, and caps. "Quick" in a request drops to solo work; a stated token budget is a hard cap.
diff --git a/tools/check-workflows.cjs b/tools/check-workflows.cjs index 3a3b111..57b5d74 100644 --- a/tools/check-workflows.cjs +++ b/tools/check-workflows.cjs @@ -101,11 +101,12 @@ for (const [label, re] of TWINS) { // A file that deletes its copy of a twin block would silently drop out of the drift // comparison above — require the blocks where they are load-bearing. const REQUIRED_TWINS = { 'fable-review.js': ['const LENSES', 'const CONTRAST'], 'fable-exhaust.js': ['const LENSES', 'const CONTRAST'] }; -// Every workflow must carry the config block and the run() helper — a workflow -// without them silently ignores CONFIG.md and the fresh-install fallback. +// Every workflow must carry the config block and the run() helper, matching the +// twin regex exactly — an includes() check alone would let a copy whose anchor +// lines were edited drop out of the drift comparison above while still "existing". for (const [f, raw] of workflowRaw) { - for (const n of ['const cfg = ', 'const run = ']) { - if (!raw.includes(n)) bad(f, 'required shared block "' + n.trim() + '" is missing'); + for (const [label, re] of TWINS.filter(([l]) => l === 'config block' || l === 'run() helper')) { + if (!re.test(raw)) bad(f, 'required shared block (' + label + ') is missing or its anchor lines have drifted from the canonical form'); } } for (const [f, needles] of Object.entries(REQUIRED_TWINS)) { From 914431803318e971da784333ac1b7f602ef196e4 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Aug 2026 20:05:47 +0000 Subject: [PATCH 3/5] Never ship .claude/settings.json; add local permissions allowlist MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit settings.json holds repo-local permission grants (currently just the checker command), so both installers now skip it like settings.local.json and it is gitignored — .claude/** otherwise ships verbatim to targets. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XWSx33Mi2bXpR6w75r3SY2 --- .gitignore | 1 + install.ps1 | 2 +- install.sh | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 12d60b5..91d8ce6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.claude/settings.json .claude/settings.local.json .claude/scheduled_tasks.lock diff --git a/install.ps1 b/install.ps1 index 0d45403..85e3806 100644 --- a/install.ps1 +++ b/install.ps1 @@ -44,7 +44,7 @@ $skipped = 0 foreach ($f in Get-ChildItem -Path $src -Recurse -File) { $rel = $f.FullName.Substring($src.Length).TrimStart('\', '/') # Session-local / OS droppings are not pack files — never ship them. - if ($f.Name -in @('settings.local.json', 'scheduled_tasks.lock', '.DS_Store')) { Write-Host "skip (session-local): .claude\$rel"; continue } + if ($f.Name -in @('settings.json', 'settings.local.json', 'scheduled_tasks.lock', '.DS_Store')) { Write-Host "skip (session-local): .claude\$rel"; continue } $out = Join-Path $dest $rel # CONFIG.md is user-owned tuning once installed — -Update never overwrites it. if (($rel -replace '\\', '/') -eq 'fable/CONFIG.md' -and (Test-Path -LiteralPath $out) -and $Update) { diff --git a/install.sh b/install.sh index 342a6e1..8d3f7c0 100755 --- a/install.sh +++ b/install.sh @@ -46,7 +46,7 @@ while IFS= read -r -d '' f; do rel="${f#"$src"/}" # Session-local / OS droppings are not pack files — never ship them. case "$(basename "$f")" in - settings.local.json|scheduled_tasks.lock|.DS_Store) echo "skip (session-local): .claude/$rel"; continue ;; + settings.json|settings.local.json|scheduled_tasks.lock|.DS_Store) echo "skip (session-local): .claude/$rel"; continue ;; esac out="$dest/$rel" # CONFIG.md is user-owned tuning once installed — --update never overwrites it. From 00ef5b2fc7d0aa15073891d8c3dc49ce62f5068c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Aug 2026 20:14:19 +0000 Subject: [PATCH 4/5] First-run settings: materialize .claude/settings.json from a shipped template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit New pack file .claude/fable/settings.template.json pre-approves the Workflow and Agent tools — the harness-level half of the doctrine's standing authorization. Installers copy it to the target's .claude/settings.json only when none exists; an existing file is never modified (a hint prints the two entries instead), and --update never touches it. Disclosed in SECURITY.md, covered in README install and uninstall, and CI now asserts materialization, the tracked+1 file count, and that updates preserve a user-edited settings.json on both platforms. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XWSx33Mi2bXpR6w75r3SY2 --- .claude/fable/settings.template.json | 8 ++++++++ .github/workflows/ci.yml | 12 ++++++++++-- CHANGELOG.md | 1 + CLAUDE.md | 2 +- README.md | 5 +++-- SECURITY.md | 2 +- install.ps1 | 11 +++++++++++ install.sh | 12 ++++++++++++ 8 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 .claude/fable/settings.template.json diff --git a/.claude/fable/settings.template.json b/.claude/fable/settings.template.json new file mode 100644 index 0000000..15d2a12 --- /dev/null +++ b/.claude/fable/settings.template.json @@ -0,0 +1,8 @@ +{ + "permissions": { + "allow": [ + "Workflow", + "Agent" + ] + } +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 95fef55..7b3fd4a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,8 +33,10 @@ jobs: echo "T=$t" >> "$GITHUB_ENV" expected="$(git ls-files .claude | wc -l)" ./install.sh "$t" + # +1: the installer materializes .claude/settings.json from the shipped template copied="$(find "$t/.claude" -type f | wc -l)" - [ "$copied" -eq "$expected" ] || { echo "expected $expected files, found $copied"; exit 1; } + [ "$copied" -eq "$((expected + 1))" ] || { echo "expected $((expected + 1)) files, found $copied"; exit 1; } + cmp .claude/fable/settings.template.json "$t/.claude/settings.json" [ "$(grep -cF '@.claude/fable/FABLE.md' "$t/CLAUDE.md")" -eq 1 ] - name: second run is idempotent run: | @@ -46,10 +48,12 @@ jobs: echo tampered >> "$T/.claude/fable/FABLE.md" echo user-owned > "$T/.claude/agents/user-own.md" echo 'fleet: light' >> "$T/.claude/fable/CONFIG.md" + echo '{"permissions":{"allow":["Workflow"]}}' > "$T/.claude/settings.json" ./install.sh --update "$T" cmp .claude/fable/FABLE.md "$T/.claude/fable/FABLE.md" [ "$(cat "$T/.claude/agents/user-own.md")" = "user-owned" ] grep -q 'fleet: light' "$T/.claude/fable/CONFIG.md" || { echo "update overwrote user CONFIG.md"; exit 1; } + [ "$(cat "$T/.claude/settings.json")" = '{"permissions":{"allow":["Workflow"]}}' ] || { echo "update overwrote user settings.json"; exit 1; } install-ps1: runs-on: windows-latest @@ -64,8 +68,10 @@ jobs: $expected = @(git ls-files .claude).Count .\install.ps1 -Target $t + # +1: the installer materializes .claude/settings.json from the shipped template $copied = @(Get-ChildItem -Recurse -File (Join-Path $t '.claude')).Count - if ($copied -ne $expected) { throw "expected $expected files, found $copied" } + if ($copied -ne ($expected + 1)) { throw "expected $($expected + 1) files, found $copied" } + if (-not (Test-Path (Join-Path $t '.claude\settings.json'))) { throw 'fresh install did not materialize settings.json' } $imports = @(Select-String -Path (Join-Path $t 'CLAUDE.md') -SimpleMatch '@.claude/fable/FABLE.md').Count if ($imports -ne 1) { throw "expected 1 import line, found $imports" } @@ -77,9 +83,11 @@ jobs: Add-Content (Join-Path $t '.claude\fable\FABLE.md') 'tampered' Set-Content (Join-Path $t '.claude\agents\user-own.md') 'user-owned' Add-Content (Join-Path $t '.claude\fable\CONFIG.md') 'fleet: light' + Set-Content (Join-Path $t '.claude\settings.json') '{"permissions":{"allow":["Workflow"]}}' .\install.ps1 -Target $t -Update $a = (Get-FileHash .claude\fable\FABLE.md).Hash $b = (Get-FileHash (Join-Path $t '.claude\fable\FABLE.md')).Hash if ($a -ne $b) { throw 'update did not restore FABLE.md byte-identical' } if ((Get-Content (Join-Path $t '.claude\agents\user-own.md')) -ne 'user-owned') { throw 'update touched a user-owned file' } if (-not (Select-String -Path (Join-Path $t '.claude\fable\CONFIG.md') -SimpleMatch 'fleet: light' -Quiet)) { throw 'update overwrote user CONFIG.md' } + if ((Get-Content -Raw (Join-Path $t '.claude\settings.json')).Trim() -ne '{"permissions":{"allow":["Workflow"]}}') { throw 'update overwrote user settings.json' } diff --git a/CHANGELOG.md b/CHANGELOG.md index 1a8e78e..f70fcfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ The Claude 5 / value-maxxing release: pick your spend instead of prompting for i - **All 7 workflows** honor the config: subagent model/effort applied to every agent call, fleet-scaled pools, votes, and caps, each announced with `log()` (no silent caps). The shared config block is drift-checked like the `run()` helper. - **Recommended setup** documented throughout: main agent Fable 5 at low effort (or Opus 5), subagents Opus at medium — lower effort with structural verification beats higher effort without it, at a fraction of the spend. - **Doctrine and reporting** rewritten for the Claude 5 generation: `FABLE.md` slimmed to judgment-over-rules, agents and scribe now report in plain language (lead with the answer, numbered steps, short lists, no filler). +- **First-run settings** — a shipped template (`.claude/fable/settings.template.json`) is materialized as the target's `.claude/settings.json` on first install only, pre-approving the Workflow and Agent tools so fleet launches don't prompt. An existing settings file is never modified (the installer prints the two entries to add instead), `--update` never touches it, and deleting it opts out. Disclosed in SECURITY.md. - **README, GUIDE.md** rewritten shorter; new SVG banner. Removed: `assets/banner.png`, `assets/review-pipeline.png` (stale; `--update` users can delete them manually). ## 1.0.0 — 2026-07-10 diff --git a/CLAUDE.md b/CLAUDE.md index 1975a68..7e8c728 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -22,7 +22,7 @@ mkdir -p /tmp/fable-target && ./install.sh /tmp/fable-target # or: .\install.p ## Architecture: five layers wired by name 1. **Doctrine** — `.claude/fable/FABLE.md`. Always-on operating contract, loaded via a `@.claude/fable/FABLE.md` import in the target's CLAUDE.md (created/appended by the installers). Its Orchestration list must stay in sync with the actual workflow names (the checker verifies the names resolve). -2. **Config** — `.claude/fable/CONFIG.md`. User-owned defaults (subagent model/effort, fleet, votes). Skills read it at invocation and pass its yaml keys as `config` in workflow args; workflows apply it via the shared config block. Once installed it belongs to the user: `--update` never overwrites it (both installers special-case `fable/CONFIG.md`, CI asserts it), and `/fable-config` carries a template to recreate it. +2. **Config** — `.claude/fable/CONFIG.md`. User-owned defaults (subagent model/effort, fleet, votes). Skills read it at invocation and pass its yaml keys as `config` in workflow args; workflows apply it via the shared config block. Once installed it belongs to the user: `--update` never overwrites it (both installers special-case `fable/CONFIG.md`, CI asserts it), and `/fable-config` carries a template to recreate it. Same ownership model for `.claude/settings.json`: the installers materialize it from `.claude/fable/settings.template.json` only when missing (pre-approving Workflow/Agent, disclosed in SECURITY.md), never modify an existing one, and never ship a root-level `settings.json` (basename-skipped in the copy loop, gitignored in this repo — CI's file-count check expects tracked+1 because of the materialization). 3. **Agents** — `.claude/agents/fable-*.md`. Seven subagents (scout, finder, skeptic, judge, builder, critic, scribe) that everything else is built from. 4. **Workflows** — `.claude/workflows/fable-*.js`. Scripts for the Workflow tool that fan out over the agents. 5. **Skills** — `.claude/skills/*/SKILL.md`. Slash commands that invoke the workflows by name and report results. diff --git a/README.md b/README.md index 94986c7..96f37ae 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ git clone --depth 1 https://github.com/creativeskyai/Fable-Mode.git $tmp & "$tmp\install.ps1" C:\path\to\your\project ``` -That copies `.claude/**` and adds one import line to the target's `CLAUDE.md`. Then **restart any open Claude Code session in that project** — agents register at session start. +That copies `.claude/**`, adds one import line to the target's `CLAUDE.md`, and — on first install only — creates `.claude/settings.json` pre-approving the **Workflow** and **Agent** tools, so fleet launches don't prompt (that's the standing authorization you're opting into; delete the file to opt out — everything agents *do* still runs under your normal permission mode). If you already have a `settings.json`, it's left untouched and the installer prints the two entries to add. Then **restart any open Claude Code session in that project** — agents register at session start. To update later, re-run with `--update` / `-Update`: it refreshes pack files, never touches your own files, and never overwrites your `CONFIG.md`. Version at `.claude/fable/VERSION`; changes in [CHANGELOG.md](CHANGELOG.md). @@ -42,7 +42,8 @@ To update later, re-run with `--update` / `-Update`: it refreshes pack files, ne Uninstall 1. Remove the `# Fable Mode` heading and `@.claude/fable/FABLE.md` line from the project's `CLAUDE.md`. -2. Delete the pack files (everything is namespaced `fable*` except `/ultra`): +2. If the installer created your `.claude/settings.json`, delete it (or just remove the `"Workflow"` / `"Agent"` entries if you've added your own since). +3. Delete the pack files (everything is namespaced `fable*` except `/ultra`): ```bash rm -rf .claude/fable .claude/skills/ultra .claude/skills/fable* diff --git a/SECURITY.md b/SECURITY.md index 298e3e8..314d153 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -8,7 +8,7 @@ Fable Mode ships no runtime application code. The pack is: - **Workflow scripts** that run inside Claude Code's sandboxed Workflow tool (no filesystem or Node API access); - **Two installer scripts** (`install.sh`, `install.ps1`) that copy files and append one import line to a `CLAUDE.md`. -The installers never delete, never overwrite existing files outside `--update` mode (which only touches pack-owned paths), never elevate, and never touch the network. The agents and workflows the pack defines run entirely under Claude Code's own permission system — the pack cannot grant itself capabilities your Claude Code configuration doesn't allow. +The installers never delete, never overwrite existing files outside `--update` mode (which only touches pack-owned paths), never elevate, and never touch the network. One deliberate, disclosed exception to "grants nothing": on first install only, if the target has no `.claude/settings.json`, the installer creates one that pre-approves the **Workflow** and **Agent** tools (fleet launches stop prompting — the standing authorization the pack is built around). It never modifies an existing settings file, `--update` never touches it, and deleting the file restores full prompting. Everything the agents and workflows *do* — edits, commands — still runs under Claude Code's own permission system; the pack cannot grant itself capabilities beyond that. That said, prompt-injection-shaped issues are real for instruction packs: if you find wording in a shipped file that could cause Claude Code to take an action a reasonable user wouldn't expect (bypassing its permission prompts, exfiltrating data, weakening its own verification), treat that as a vulnerability and report it. diff --git a/install.ps1 b/install.ps1 index 85e3806..e5645a9 100644 --- a/install.ps1 +++ b/install.ps1 @@ -62,6 +62,17 @@ foreach ($f in Get-ChildItem -Path $src -Recurse -File) { $copied++ } +# First-run settings: materialize the template so Workflow/Agent launches don't +# prompt (the pack's standing authorization). Never touches an existing file. +$settings = Join-Path $dest 'settings.json' +if (-not (Test-Path -LiteralPath $settings)) { + Copy-Item -LiteralPath (Join-Path $src 'fable\settings.template.json') -Destination $settings + Write-Host 'created .claude/settings.json (pre-approves the Workflow and Agent tools; delete it to opt out)' +} +elseif (-not (Select-String -LiteralPath $settings -SimpleMatch '"Workflow"' -Quiet)) { + Write-Host 'note: .claude/settings.json exists - to skip permission prompts on fleet launches, add "Workflow" and "Agent" to permissions.allow' +} + $claudeMd = Join-Path $Target 'CLAUDE.md' $import = '@.claude/fable/FABLE.md' if (-not (Test-Path -LiteralPath $claudeMd)) { diff --git a/install.sh b/install.sh index 8d3f7c0..e9b8389 100755 --- a/install.sh +++ b/install.sh @@ -65,6 +65,18 @@ while IFS= read -r -d '' f; do copied=$((copied + 1)) done < <(find "$src" -type f -print0) +# First-run settings: materialize the template so Workflow/Agent launches don't +# prompt (the pack's standing authorization). Never touches an existing file. +settings="$dest/settings.json" +if [ ! -e "$settings" ]; then + cp "$src/fable/settings.template.json" "$settings" + echo "created .claude/settings.json (pre-approves the Workflow and Agent tools; delete it to opt out)" +else + if ! grep -q '"Workflow"' "$settings"; then + echo 'note: .claude/settings.json exists — to skip permission prompts on fleet launches, add "Workflow" and "Agent" to permissions.allow' + fi +fi + claude_md="$target/CLAUDE.md" import='@.claude/fable/FABLE.md' if [ ! -f "$claude_md" ]; then From 55adda3ee910d43c07171074089495193ab91a92 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 8 Aug 2026 00:04:06 +0000 Subject: [PATCH 5/5] Name the subagent-thinking lever and concrete fleet sizes in CONFIG.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subagent thinking has no separate switch — subagent_effort is the honest control, now stated in CONFIG.md and the /fable-config skill. The fleet note also gives exact per-preset agent counts instead of adjectives. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01XWSx33Mi2bXpR6w75r3SY2 --- .claude/fable/CONFIG.md | 12 +++++++++--- .claude/skills/fable-config/SKILL.md | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.claude/fable/CONFIG.md b/.claude/fable/CONFIG.md index 694eae2..fd74651 100644 --- a/.claude/fable/CONFIG.md +++ b/.claude/fable/CONFIG.md @@ -15,9 +15,15 @@ fleet: standard # light | standard | max — scales pools, votes, round # max_leads: 30 # fable-research deep-read cap (uncomment to override the fleet preset) ``` -What `fleet` changes: **light** = smaller finder pools, 1 skeptic per finding, -lower round and lead caps. **standard** = the shipped defaults (3 skeptics). -**max** = 5-vote verification and raised caps, for audits. +What `fleet` changes, concretely: **light** = 2 finder stances instead of 4 +(exhaust), 2 design stances and 2 judges instead of 3, 1 skeptic per finding +instead of 3, 12 research leads instead of 30, round cap 3 instead of 6 — a +`/fable-review` drops from roughly 16 agents to 6. **standard** = the shipped +defaults. **max** = 5 skeptics per finding, 60 leads, round cap 8, for audits. + +Subagent thinking has no separate switch — it follows `subagent_effort`. Set +`subagent_effort: low` for minimal subagent thinking; the skeptic/judge +structure, not deliberation depth, is what carries verification quality. ## Main agent (set in the harness, recorded here) diff --git a/.claude/skills/fable-config/SKILL.md b/.claude/skills/fable-config/SKILL.md index b1a3f4d..f59b5da 100644 --- a/.claude/skills/fable-config/SKILL.md +++ b/.claude/skills/fable-config/SKILL.md @@ -7,7 +7,7 @@ argument-hint: "[show | ... | value | light | max]" This is a mechanical edit of `.claude/fable/CONFIG.md` — do it yourself, no agents. 1. Read `.claude/fable/CONFIG.md`. If it is missing, recreate it from the template at the end of this file first. -2. No arguments, or `show`: print the current yaml settings as a short table, then the harness commands for the main agent (`/model`, `/effort`, thinking toggles with Tab or `/config`). Stop. +2. No arguments, or `show`: print the current yaml settings as a short table, then the harness commands for the main agent (`/model`, `/effort`, thinking toggles with Tab or `/config`). Stop. If the user asks about disabling subagent thinking, the lever is `subagent_effort: low` — there is no separate subagent thinking switch. 3. ` ` pairs: update those keys in the yaml block. Valid keys and values — `subagent_model`: fable | opus | sonnet | haiku | inherit; `subagent_effort`: low | medium | high | xhigh | inherit; `fleet`: light | standard | max; `votes`, `max_rounds`, `max_leads`: positive integers. Reject anything else, showing the valid list. 4. A preset name rewrites the yaml keys: `value` → opus / medium / standard; `light` → inherit / low / light; `max` → opus / high / max. Presets also re-comment any explicit `votes` line so the fleet's own vote count (light 1, standard 3, max 5) applies — an uncommented `votes` always overrides the fleet, so only set it when the user asks for a specific count. 5. Confirm in two lines: what changed, and that it applies to the next fable command (no restart needed). If the user also asked about the main agent's model, effort, or thinking, give them the exact harness commands — you cannot run those for them.