Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 38 additions & 1 deletion .claude/skills/murderboard/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
<!-- vendored from syncytium2/murderboard @ 3a6a8fb — canonical source; do NOT edit here, update upstream and re-copy -->
<!-- vendored from syncytium2/murderboard @ 81a0927 — canonical source; do NOT edit here, update upstream and re-copy -->
# canonical: syncytium2/murderboard skills/murderboard/SKILL.md
# When vendoring, INSERT a line just below the --- above: vendored from https://github.com/syncytium2/murderboard @ <short-sha> — do NOT edit here; update by re-copying. (murderboard_revendor.py does this, and keeps it in the right place.)
name: murderboard
Expand All @@ -19,6 +19,43 @@ in `doc_review_process.md`, which you will load in step 2 and follow.
> outcomes looked exactly like success. The steps below are the parts that must not depend on
> anyone remembering them.

## Preflight — what this costs, before it costs it

**Deliberately before step 0**, and unnumbered, because it gates whether the run happens at
all rather than how it is done. A murderboard is a fan-out: one subagent per role, every role,
always. **Known good: Claude Opus 5**; other current models are likely fine. On a model you
cannot afford to exhaust you get **no review and the full bill** — which is what happened on
2026-09-07 under Fable.

**A `PreToolUse` hook should already have handled this** — `murderboard_model_gate.sh`, wired
in the plugin and in consumers that vendored it. It blocks a run on a blocked model, and it
**asks the human before every run**, because the other way this wastes money is being fired
too early, at a draft that was not ready. If you are reading this line it either allowed the
call or is not installed here; do not assume the second case means no policy:

```bash
GATE=; for p in tools/murderboard_model_gate.sh murderboard_model_gate.sh \
"${MB:-/nonexistent}/murderboard_model_gate.sh"; do
[ -r "$p" ] && GATE="$p" && break
done
[ -n "$GATE" ] && bash "$GATE" --why || echo "no model gate present — check the model yourself"
```

**If the gate is absent, say which model you are running on and confirm the human wants to
spend it here** before spawning anything. One line before the fan-out, rather than an apology
after it.

**If you are blocked or the human declines, that is the end of it.** Do not re-invoke, do not
reach for the hand-run path through the process file, and do not trim the roster to fit a
budget — a report missing roles is indistinguishable from a clean one, which is the failure
this entire skill exists to prevent. Their options are to switch model or to set
`MURDERBOARD_ALLOW_EXPENSIVE_MODEL=1`; both are theirs to pick, not yours.

**Be straight about whose bill it is.** No cost incurred running the murderboard is ever the
responsibility of its authors, and the gate is a safeguard, **not a spending cap** — never
imply it protects anyone from a bill.
<https://github.com/syncytium2/murderboard/blob/main/TERMS.md>

## 0. Resolve the paths — do not assume a layout

There are two ways these files get onto a machine, and they land in different places:
Expand Down
28 changes: 27 additions & 1 deletion docs/doc_review_process.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<!-- vendored from syncytium2/murderboard @ 3a6a8fb — canonical source; do NOT edit here, update upstream and re-copy -->
<!-- vendored from syncytium2/murderboard @ 81a0927 — canonical source; do NOT edit here, update upstream and re-copy -->
# The murderboard — critical review process for document deliverables (anti-slop)

A standing, project-neutral review process. Its purpose is to stop **slop** — unsourced
Expand Down Expand Up @@ -91,6 +91,32 @@ No fabricated or approximate citation. No internal contradiction. No filler.
> still works and is the fallback for a consumer without the skill installed; it is simply the mode
> in which each of those four steps can be silently skipped.

> **Cost — what to run this on.** This process is a **fan-out**: every role runs on every
> deliverable, and what scales to stakes is how you run them, never which ones — so there is
> no cheap murderboard. **Known good: Claude Opus 5**; other current models are likely fine.
> **Do not start a run on a model you cannot afford to exhaust.** On **2026-09-07** a run under
> **Fable** spent a two-day usage limit and produced no review at all. That is the shape of
> this failure: you do not get a partial review for a partial price, you get no review and the
> full bill.
>
> **This is a gate, not advice.** `murderboard_model_gate.sh` is a `PreToolUse` hook that reads
> the running model and blocks the call-up before the fan-out starts; it ships wired in the
> plugin and vendoring consumers should wire it too. It **also asks the human before every
> run**, because the other way this wastes money is being fired too early — at a draft that was
> not ready, by a session that decided on its own that something was a deliverable.
> `--why` prints what it is currently stopping; the file itself explains why it fails closed
> and why the blocklist carries a review-by date.
>
> **If you are blocked or declined, stop.** Do not re-invoke, do not run the roles by hand to
> route around a refusal, and never economise by running fewer roles — a review missing roles
> is indistinguishable in the report from a clean one, which is the defect this whole apparatus
> exists to prevent. Tell the human and let them choose.
>
> **The bill is theirs, not ours.** No cost incurred running this process is ever the
> responsibility of its authors, and the gate is a safeguard, **not a spending cap** — it knows
> nothing about anyone's plan, balance, or prices. Full terms:
> <https://github.com/syncytium2/murderboard/blob/main/TERMS.md>

0. **Preflight — confirm the process itself is current.** This file is usually **vendored** into a
consumer repo, where it drifts behind its canonical source. Before running, verify THIS copy is up
to date with upstream — compare its vendored stamp/commit against the canonical repo's HEAD (search
Expand Down
2 changes: 1 addition & 1 deletion tools/murderboard_agents.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# vendored from syncytium2/murderboard @ 3a6a8fb — do NOT edit here; update upstream and re-copy.
# vendored from syncytium2/murderboard @ 81a0927 — do NOT edit here; update upstream and re-copy.
"""murderboard_agents.py — compile `doc_review_process.md` into one agent file per role.

THE GAP THIS CLOSES. The review team is eleven specialists, and until now they existed only
Expand Down
2 changes: 1 addition & 1 deletion tools/murderboard_freshness.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# vendored from syncytium2/murderboard @ 3a6a8fb — do NOT edit here; update upstream and re-copy.
# vendored from syncytium2/murderboard @ 81a0927 — do NOT edit here; update upstream and re-copy.
# instrument: propagation
# murderboard_freshness.sh — is this repo's VENDORED murderboard current with upstream?
#
Expand Down
2 changes: 1 addition & 1 deletion tools/murderboard_revendor.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# vendored from syncytium2/murderboard @ 3a6a8fb — do NOT edit here; update upstream and re-copy.
# vendored from syncytium2/murderboard @ 81a0927 — do NOT edit here; update upstream and re-copy.
# instrument: propagation
"""murderboard_revendor — re-copy vendored files and bump their stamps, surgically.

Expand Down
2 changes: 1 addition & 1 deletion tools/murderboard_roster.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
# vendored from syncytium2/murderboard @ 3a6a8fb — do NOT edit here; update upstream and re-copy.
# vendored from syncytium2/murderboard @ 81a0927 — do NOT edit here; update upstream and re-copy.
# instrument: verification
# murderboard_roster.sh — derive the review-team roster FROM the process file, and check
# that a review report actually accounts for every role.
Expand Down
Loading