Bug Council
Requires: the sibling protocols skill (shared protocol masters); uses skills.config.json when present. Missing protocols → tell the user to install the full supermodo package.
Project rules. Read .supermodo/rules/bug-council.md if present, plus any
.supermodo/rules/INDEX.md rows naming bug-council — that file IS this
project's council process (seats, models, mode, rounds) and replaces the
defaults below wherever they overlap. Contract:
../protocols/references/rules.md. Never in that file, so never switchable
off: investigations stay blind and are never shown to each other, one
designated implementer, a fresh verifier that did not implement, passing
tests never mean solved, explicit invocation only.
Run a structured, evidence-driven bug hunt.
Invocation policy — read before starting
This skill is the toolkit's most expensive act: several independent agent
seats, blind investigation, falsification rounds, experiments, and a separate
verification pass. It buys certainty about ONE bug at a price no routine bug
is worth. For the toughest stains only.
- Explicit invocation only. Run it when the user asked for it by name.
Never auto-trigger, never chain into it from
hunt, flow, tdd, or
work, and never fan it out over a list of findings — a hunt report with
twelve findings is twelve tdd --debug jobs, not twelve councils.
- Suggest, don't start. When the signals below appear, offer it in one
line and stop: "this one keeps resisting — want me to convene the bug
council? It's slow and expensive, but it settles the cause." Then wait.
- Right signals: a fix was already attempted and failed (the strongest
one); intermittent or unreproducible failures; several plausible
explanations that all fit the evidence; a regression with no obvious
culprit commit; a bug that keeps coming back after being "fixed"; a
symptom crossing service, thread, or process boundaries.
- Wrong signals: a stack trace pointing at the line; a failing test with
a clear assertion; anything reproducible in one command that nobody has
tried to fix yet; wanting more bugs found rather than one explained.
Those are
tdd --debug (fix a known bug) or hunt (find unknown ones).
- Scope is one bug. Two bugs = two runs, or none.
- First run in this project (no
.supermodo/rules/bug-council.md AND no
decline recorded under rulesDeclined in
.skills/supermodo/config-manifest.json): before spawning the first seat,
show the chosen template's summary — which states the seat count, the round
count, and that this is the most expensive act in the package — and ask an
ordered choice per ../protocols/references/questions.md over the shipped
starting points, plus customize and show-full. The cost disclaimer is part
of the gate, not a footnote: the user is approving a token spend, not just
a procedure. Materialize through config --rules bug-council, never by
writing the file directly. confirmations.mode: "auto" does NOT skip this —
choosing a process is a class-(c) preference, and this one carries a bill.
The goal is not agreement between agents. The goal is:
- reproduce or objectively observe the failure;
- identify the first incorrect state, operation, or violated contract;
- falsify plausible competing explanations;
- create a regression test or equivalent objective probe;
- implement the smallest causal fix;
- have a separate agent independently attack and verify the patch.
Codex, Claude, Kimi, and native subagents do not share one hidden context. Treat the hunt as a federated session coordinated through an immutable dossier, anonymized hypotheses, experiment results, and an evidence ledger.
Non-negotiable rules
- Runtime observations, repository evidence, and executable experiments are evidence.
- Agent confidence, eloquence, majority votes, and consensus are not evidence.
- Keep initial investigations blind.
- Never show an investigator another investigator's initial report.
- Preserve every initial report unchanged.
- Do not edit production code during diagnosis.
- Do not let multiple investigators edit the same checkout.
- Only one designated implementer may produce the final patch.
- The implementer cannot verify its own patch.
- Use a fresh judge that did not author or critique the hypotheses.
- Use a fresh verifier that did not implement the patch.
- Do not declare the bug solved merely because tests pass.
- Verify that the patch fixes the cause rather than masking the symptom.
- Do not perform destructive Git operations.
- Do not modify production systems, remote data, credentials, infrastructure, or external services without explicit permission.
- Do not expose secrets, tokens, personal data, complete environment files, or unrelated proprietary code to external agents.
- Respect repository instructions such as
AGENTS.md, CLAUDE.md, package-level instructions, and contribution guidelines.
The procedure
Nineteen steps in three phases. Follow them in order; the rules above govern
all of them.
Intake — references/intake.md
- Infer context before asking questions
- Ask only the missing questions
- Detect the available council
- Select the hunt mode
- Create the immutable bug dossier
Investigation — references/investigation.md
- Establish the baseline
- Assign distinct investigative lenses
- Initial investigator prompt
- Build the anonymized hypothesis ledger
- Adversarial falsification
- Rebuttal round for deep mode
- Select discriminating experiments
- Independent adjudication
Fix and verification — references/resolution.md
- Create the regression test or objective probe
- Implement the smallest causal patch
- Independently attack and verify the patch
- Completion conditions
- User updates
- Final report
Persist and publish
Standalone runs write this report to
.skills/supermodo/bug-council/<YYYYMMDD-HHMMSS>.md per
../protocols/references/reports.md — a result living only in chat dies with
the session. Then publish it:
node <skills>/reports/scripts/render.ts --root <project-root> --report <that path>
and NAME the page in your final message. Inside a flow run this does not
apply: the stage report is the artifact and the orchestrator renders the one
run page.
Where the seats landed opens the report as a block
(../protocols/references/reports.md, "Report bodies") — a council's value is
that independent sessions converged or did not, and that is a shape, not a
paragraph:
```supermodo:bars
{"title":"Seats by hypothesis","unit":"seats","series":[
{"label":"stale cache key","value":3,"state":"ok"},
{"label":"race in the writer","value":1,"state":"warn"},
{"label":"no conclusion reached","value":1,"state":"bad"}]}
```
Only seats that actually ran are counted. A seat that failed to launch or
returned nothing is never folded into another hypothesis to make the chart
look decisive — it is its own bar, or it is absent and said in words. When the
adjudicated cause runs through several modules, a supermodo:graph of the
chain beats describing it.
Frontmatter: status is ok when the council reached an adjudicated cause,
needs-input when it ended on a question only the user can answer (with that
question in questions), failed when no seat produced a usable report; set
task when the bug belongs to a triad.
1---2name: bug-council3description: Last resort for ONE stubborn bug the ordinary attempts already failed on — a blind, evidence-driven council of Codex, Claude, Kimi, or available native subagents that falsifies competing hypotheses, implements the smallest causal fix, and verifies it independently. EXPLICIT INVOCATION ONLY - deliberately slow and token-expensive, so never auto-trigger it, never chain into it from another skill, and never run it on bugs a hunt report merely listed. Use only when the user names it (/bug-council, "convene the council", "bring in the bug council") or explicitly asks for the heaviest possible investigation of one specific bug. Otherwise, at most SUGGEST it - when a fix attempt has already failed, a bug is intermittent or unreproducible, the cause is genuinely disputed, or a regression has no obvious culprit - and wait for the user to say yes. For ordinary bugs use tdd --debug; to find unknown bugs use hunt.4---56# Bug Council78> **Requires:** the sibling `protocols` skill (shared protocol masters); uses `skills.config.json` when present. Missing protocols → tell the user to install the full supermodo package.910> **Project rules.** Read `.supermodo/rules/bug-council.md` if present, plus any11> `.supermodo/rules/INDEX.md` rows naming `bug-council` — that file IS this12> project's council process (seats, models, mode, rounds) and replaces the13> defaults below wherever they overlap. Contract:14> `../protocols/references/rules.md`. Never in that file, so never switchable15> off: investigations stay blind and are never shown to each other, one16> designated implementer, a fresh verifier that did not implement, passing17> tests never mean solved, explicit invocation only.1819Run a structured, evidence-driven bug hunt.2021## Invocation policy — read before starting2223This skill is the toolkit's most expensive act: several independent agent24seats, blind investigation, falsification rounds, experiments, and a separate25verification pass. It buys certainty about ONE bug at a price no routine bug26is worth. For the toughest stains only.2728- **Explicit invocation only.** Run it when the user asked for it by name.29 Never auto-trigger, never chain into it from `hunt`, `flow`, `tdd`, or30 `work`, and never fan it out over a list of findings — a hunt report with31 twelve findings is twelve `tdd --debug` jobs, not twelve councils.32- **Suggest, don't start.** When the signals below appear, offer it in one33 line and stop: "this one keeps resisting — want me to convene the bug34 council? It's slow and expensive, but it settles the cause." Then wait.35- **Right signals:** a fix was already attempted and failed (the strongest36 one); intermittent or unreproducible failures; several plausible37 explanations that all fit the evidence; a regression with no obvious38 culprit commit; a bug that keeps coming back after being "fixed"; a39 symptom crossing service, thread, or process boundaries.40- **Wrong signals:** a stack trace pointing at the line; a failing test with41 a clear assertion; anything reproducible in one command that nobody has42 tried to fix yet; wanting *more* bugs found rather than *one* explained.43 Those are `tdd --debug` (fix a known bug) or `hunt` (find unknown ones).44- **Scope is one bug.** Two bugs = two runs, or none.45- **First run in this project** (no `.supermodo/rules/bug-council.md` AND no46 decline recorded under `rulesDeclined` in47 `.skills/supermodo/config-manifest.json`): before spawning the first seat,48 show the chosen template's `summary` — which states the seat count, the round49 count, and that this is the most expensive act in the package — and ask an50 ordered choice per `../protocols/references/questions.md` over the shipped51 starting points, plus customize and show-full. **The cost disclaimer is part52 of the gate, not a footnote:** the user is approving a token spend, not just53 a procedure. Materialize through `config --rules bug-council`, never by54 writing the file directly. `confirmations.mode: "auto"` does NOT skip this —55 choosing a process is a class-(c) preference, and this one carries a bill.5657The goal is not agreement between agents. The goal is:58591. reproduce or objectively observe the failure;602. identify the first incorrect state, operation, or violated contract;613. falsify plausible competing explanations;624. create a regression test or equivalent objective probe;635. implement the smallest causal fix;646. have a separate agent independently attack and verify the patch.6566Codex, Claude, Kimi, and native subagents do not share one hidden context. Treat the hunt as a federated session coordinated through an immutable dossier, anonymized hypotheses, experiment results, and an evidence ledger.6768## Non-negotiable rules6970- Runtime observations, repository evidence, and executable experiments are evidence.71- Agent confidence, eloquence, majority votes, and consensus are not evidence.72- Keep initial investigations blind.73- Never show an investigator another investigator's initial report.74- Preserve every initial report unchanged.75- Do not edit production code during diagnosis.76- Do not let multiple investigators edit the same checkout.77- Only one designated implementer may produce the final patch.78- The implementer cannot verify its own patch.79- Use a fresh judge that did not author or critique the hypotheses.80- Use a fresh verifier that did not implement the patch.81- Do not declare the bug solved merely because tests pass.82- Verify that the patch fixes the cause rather than masking the symptom.83- Do not perform destructive Git operations.84- Do not modify production systems, remote data, credentials, infrastructure, or external services without explicit permission.85- Do not expose secrets, tokens, personal data, complete environment files, or unrelated proprietary code to external agents.86- Respect repository instructions such as `AGENTS.md`, `CLAUDE.md`, package-level instructions, and contribution guidelines.8788## The procedure8990Nineteen steps in three phases. Follow them in order; the rules above govern91all of them.9293**Intake — [references/intake.md](references/intake.md)**94- 1. Infer context before asking questions95- 2. Ask only the missing questions96- 3. Detect the available council97- 4. Select the hunt mode98- 5. Create the immutable bug dossier99100**Investigation — [references/investigation.md](references/investigation.md)**101- 6. Establish the baseline102- 7. Assign distinct investigative lenses103- 8. Initial investigator prompt104- 9. Build the anonymized hypothesis ledger105- 10. Adversarial falsification106- 11. Rebuttal round for deep mode107- 12. Select discriminating experiments108- 13. Independent adjudication109110**Fix and verification — [references/resolution.md](references/resolution.md)**111- 14. Create the regression test or objective probe112- 15. Implement the smallest causal patch113- 16. Independently attack and verify the patch114- 17. Completion conditions115- 18. User updates116- 19. Final report117118119## Persist and publish120121Standalone runs write this report to122`.skills/supermodo/bug-council/<YYYYMMDD-HHMMSS>.md` per123`../protocols/references/reports.md` — a result living only in chat dies with124the session. Then publish it:125126```127node <skills>/reports/scripts/render.ts --root <project-root> --report <that path>128```129130and NAME the page in your final message. Inside a `flow` run this does not131apply: the stage report is the artifact and the orchestrator renders the one132run page.133134Where the seats landed opens the report as a block135(`../protocols/references/reports.md`, "Report bodies") — a council's value is136that independent sessions converged or did not, and that is a shape, not a137paragraph:138139````140```supermodo:bars141{"title":"Seats by hypothesis","unit":"seats","series":[142 {"label":"stale cache key","value":3,"state":"ok"},143 {"label":"race in the writer","value":1,"state":"warn"},144 {"label":"no conclusion reached","value":1,"state":"bad"}]}145```146````147148Only seats that actually ran are counted. A seat that failed to launch or149returned nothing is never folded into another hypothesis to make the chart150look decisive — it is its own bar, or it is absent and said in words. When the151adjudicated cause runs through several modules, a `supermodo:graph` of the152chain beats describing it.153154Frontmatter: `status` is `ok` when the council reached an adjudicated cause,155`needs-input` when it ended on a question only the user can answer (with that156question in `questions`), `failed` when no seat produced a usable report; set157`task` when the bug belongs to a triad.