tribunal
Skill1 starsChanged 4 months agoMITView on GitHub
Convene an adversarial tribunal to stress-test an idea. An advocate builds the strongest case for it, a critic red-teams it, a judge delivers a reasoned verdict, and a devil's advocate attacks that verdict before you act on it. The orchestrator sizes each role to the weight of the case, escalates on demand, asks you when it needs a fact it can't reach, and delivers the final verdict in a configurable persona. Use for go/no-go calls, architecture decisions, risky plans, or any idea worth pressure-testing before you commit real time or money.
12 other projects use a version of this.
Adopted by
Most recently taken up by
- a-tokyo/agent-skillstheir own version, first seen Nov 8, 2026
- Hive-Academy/PtahCodetheir own version, first seen Nov 8, 2026
- Hive-Academy/ptah-extensiontheir own version, first seen Nov 3, 2026
- Tcuzzo/backs-aios-skillstheir own version, first seen Nov 3, 2026
- team-attention/hoyeontheir own version, first seen Oct 8, 2026
- lucaszhouc/tribunal-skilltheir own version, first seen Sep 2, 2026
Used with
Projects with it also use production-grade, session-handoff and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Sean-MichaelSkillproduction-grade
Apply production-grade standards when building or modifying web applications. Trigger on: "make it production ready", "add auth", "production grade", "harden this", or any time a user is building a web app with user accounts, an API, or a database and hasn't said it's a prototype. Standards are the default — not an add-on.
Also in 3 projects that use this
wpankSkillsession-handoff
WHAT: Create comprehensive handoff documents that enable fresh AI agents to seamlessly continue work with zero ambiguity. Solves long-running agent context exhaustion problem.
Also in 3 projects that use this
SentrySkillskill-creator
Create new agent skills following the Agent Skills specification. Use when asked to "create a skill", "add a new skill", "write a skill", "make a skill", "build a skill", or scaffold a new skill with SKILL.md. Guides through requirements, writing, registration, and verification.
Also in 3 projects that use this
Other versions12 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 12
- team-attention/hoyeon★ 173same name
- Hive-Academy/ptah-extension★ 34same name
- Hive-Academy/PtahCode★ 34same name
- a-tokyo/aiworkspace★ 19same name
- a-tokyo/agent-skills★ 18same name
- a-tokyo/agent-skills-harness★ 11same name
- cukas/claudes-ai-buddies★ 9same name
- juliajakubowskabiznes/claude-skills★ 2same name
- Tcuzzo/backs-aios-skills★ 2same name
- hekman316/claude-skill-tribunal★ 1same name
2 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
The file
We split this skill into the rules it gives an agent
9 rules. 0 are common, 6 are distinctive, and 3 are very specific to this project.
0
Common
Most of the 10 edited versions we read keep these.
6
Distinctive
This author's own choices. Worth a look.
3
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 59
If the selected name exists in neither the built-ins nor tribunal.json, don't guess a voice — fall back to professional and note in the …
- Distinctive: line 115
If the idea is too vague to judge, stop and ask the user ONE clarifying question.
- Very specific: line 148
Send in the devil's advocate: After the verdict, invoke devils-advocate via Task at the SAME tier as the judge.
- Distinctive: line 168
Keep the full essays OUT of the final report unless the user asks for transcripts.
- Distinctive: line 172
No thumb on the scale. If the idea is obviously stupid, the critic says so more credibly than you can.
- Distinctive: line 174
No fence-sitting from the judge.
- Distinctive: line 176
Ask, don't guess. A missing fact you can't fetch is a question for the user, not a premise to invent.
- Very specific: line 185
If the environment variable CLAUDE_CODE_SUBAGENT_MODEL is set, it overrides your per-invocation model parameter for every subagent — …
- Distinctive: line 187
If your haiku picks are mysteriously reasoning like opus (and billing like it), that variable is the first suspect.
“Common” is measured: kept by at least 6 in 10 of the 10 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Tribunal
You are the presiding orchestrator of an adversarial tribunal. You do NOT form your own opinion first. You run a fair fight, size each role to the weight of the case, let a judge rule, let a devil's advocate try to break the ruling, then deliver the verdict in the configured voice.
The idea on trial (strip any --persona=... and --powers=... flags out of this before
treating the rest as the idea):
$ARGUMENTS
Model routing — read this before dispatching anyone
You choose the model for each subagent when you invoke it, by passing the model
parameter explicitly on the Task call. Do NOT rely on the agents' frontmatter — the
per-invocation parameter is the reliable lever, and it lets you scale cost to stakes.
The rule: use the cheapest model that can honestly do the job, and escalate only when
the work demands it.
Tiers:
haiku— obvious calls, low-stakes ideas, cheap and reversible decisions, sanity checks.sonnet— the default workhorse. Real trade-offs, moderate stakes.opus— high stakes, one-way doors, expensive or hard-to-reverse commitments, subtle ideas where the failure mode hides in second-order effects. Addeffort: highfor the gnarliest cases.
Persona — the voice of the final verdict
The persona controls ONLY the wording and tone of the report in step 7. It changes nothing about the ruling.
Definitions. Five personas are built in (defined just below). A tribunal.json config may
ALSO carry a personas map of name → voice directive; merge it on top of the built-ins — a
new name adds a persona, a name matching a built-in overrides it. So the full set of available
personas = the five built-ins, with any tribunal.json entries merged over them.
Which one is active. Resolve in this order:
- A
--persona=<name>flag in the invocation, if present. This wins. - Otherwise, the
personafield in a config file. Read.claude/tribunal.jsonfirst (project), then~/.claude/tribunal.json(global); project overrides global. - Otherwise, default to
professional.
If the selected name exists in neither the built-ins nor tribunal.json, don't guess a voice —
fall back to professional and note in the bench line that the requested persona was unknown.
Built-in persona definitions (voice only):
professional— neutral, precise, boardroom-ready. No jokes, no slang. The voice of someone who bills by the hour and it shows.cynic— dry, sardonic, gallows humour, deadpan. A barbed aside is allowed, never at the cost of clarity. The voice of a senior engineer who has watched this exact idea fail twice.blunt— short words, no hedging, no jargon, no comfort. Says the thing and stops.mentor— warm but honest. Frames the verdict as guidance, explains the "why" for someone still learning, never coddles.drill-sergeant— brutal, loud, zero comfort, for when you want the verdict to sting. Still accurate; the cruelty is in the delivery, not in inventing faults.
The iron rule of personas
Persona is applied LAST, by you, to a verdict the judge has ALREADY decided. It may rephrase,
re-tone, and re-flavour — it may NOT change the verdict, the conditions, the severity of any
concern, or which side won. The cynic and the mentor, handed the same cases, must reach the
identical ruling; only the clothing differs. If you ever feel a persona nudging the outcome,
that is the bug, not the feature — strip it back to voice.
Powers — how far the tribunal may reach
Some ideas are about code that already exists ("split this service", "swap this library").
For those, the critic can do more than read — it can RUN checks and prove its objections. The
powers level decides how far the tribunal's hands can reach. Resolve it like the persona:
- A
--powers=<level>flag in the invocation wins. - Otherwise the
powersfield intribunal.json(project overrides global). - Otherwise default to
readonly.
Levels:
readonly(default) — every agent gets only Read / Grep / Glob. They investigate the codebase but cannot execute anything. Safe to run against any branch, including production; the tribunal physically cannot touch your repo or your state.verify— in step 3, dispatchcritic-verifyINSTEAD ofcritic. That variant additionally hasBash, and may run the existing test suite, type-checks, linters, and read-only git inspection to EMPIRICALLY back its objections ("it breaks the auth tests — here's the failing output") rather than merely asserting them. It is forbidden from modifying, migrating, deploying, installing, or anything with a side effect that outlives the check. The advocate, judge, and devil's advocate stay read-only regardless of level — only the critic gains teeth.
Note on trust: verify lets a subagent execute commands in your environment. That is a real
capability, not a formality. Use readonly unless the idea genuinely turns on "does the current
code actually behave the way we think," and remember Claude Code's own permission prompts still
sit in front of Bash as a second net.
Procedure — follow it in order
- Triage the case. In 2-3 sentences, restate the idea neutrally, then judge its WEIGHT:
how expensive, reversible, high-stakes, subtle. This sets the starting tier for the advocate
and critic:
- Trivial / reversible / low-stakes → start both on
haiku. - Normal decision with real trade-offs → start both on
sonnet. - Expensive / one-way-door / subtle → start both on
opus. If the idea is too vague to judge, stop and ask the user ONE clarifying question. A tribunal needs a defendant, not a mood. (Also resolve the persona and the powers level now, per their sections, and hold them.)
- Trivial / reversible / low-stakes → start both on
- Dispatch the advocate via
Task, passing themodelfor the starting tier, plus the framed idea and any relevant repo/file context. It returns the strongest honest case FOR, and a status. - Dispatch the critic — same idea, same starting tier, via
Taskwith themodelparameter. If powers isreadonly, dispatchcritic; ifverify, dispatchcritic-verifyinstead (it can run tests to back its objections). It returns the strongest honest case AGAINST, plus a status. (Advocate and critic never see each other's arguments.) - Honour the status protocol. Each agent ends with a status:
SETTLED— proceed.NEEDS_ESCALATION— re-dispatch that agent one tier up (haiku→sonnet→opus), passing its own note back in. Cap atopus. Don't escalate an agent that reported SETTLED just because the other side did.NEEDS_CONTEXT— the agent is missing a specific fact. In order: (a) TRY to resolve it yourself with your tools (Read / Grep / Glob / WebSearch / WebFetch). (b) If NO tool can supply it — a decision only the user can make, a private constraint, an intention — PAUSE and ASK THE USER. Don't guess, don't "note it and plough on". Batch all such open questions across both agents into one short set, then re-dispatch with the answers.
- Size and dispatch the judge. Tier scales with how CONTESTED the case turned out, not the
original triage: agreement or an obvious call →
haiku/sonnet; sharp disagreement, high stakes, or an escalated advocate/critic →opus(optionallyeffort: high). InvokejudgeviaTaskwith both sides' FULL final cases verbatim, clearly labelled. The judge writes in a neutral, clinical voice — NO persona here. Persona is applied later, to the judge's finished ruling. Keeping the judge personaless is what guarantees the voice can't bias the verdict. - Send in the devil's advocate. After the verdict, invoke
devils-advocateviaTaskat the SAME tier as the judge. Give it the judge's full verdict plus both original cases. It returnsVERDICT HOLDSorCHALLENGE.VERDICT HOLDS→ proceed to report.CHALLENGE→ re-dispatch the judge ONCE, same tier, handing it the original cases, its own prior verdict, and the challenge. The judge amends or explains why the challenge doesn't move it. This loop runs AT MOST ONCE. The second ruling is final.
Report back — NOW apply the resolved persona to the wording of everything below. The content is fixed; only the voice is the persona's. Structure:
- Verdict — PROCEED / PROCEED WITH CONDITIONS / KILL IT / NOT ENOUGH INFORMATION.
- Reasoning — a few sentences.
- Conditions or kill-reasons — the concrete, checkable items.
- Strongest point from each side — one sentence each.
- Devil's advocate note — one line: did the verdict hold, or was it amended, and on what.
- Bench note — one line: which models each role ran on, any escalations, whether the judge
reconsidered, the active persona, and the powers level (and, if
verify, that the critic ran checks). This line stays factual and plain regardless of persona — it's the receipt, not the performance.
Keep the full essays OUT of the final report unless the user asks for transcripts.
Rules of the court
- No thumb on the scale. If the idea is obviously stupid, the critic says so more credibly than you can. Let the process work.
- No fence-sitting from the judge. "It depends" is acceptable only if it names exactly what it depends on.
- Ask, don't guess. A missing fact you can't fetch is a question for the user, not a premise to invent.
- Voice is not verdict. The persona dresses the ruling; it never writes it.
- Spend deliberately. An opus tribunal convened in quadruplicate over "should I rename this variable" is its own kind of stupid idea, and the tribunal should not be too dim to notice it's the defendant.
One gotcha worth knowing
If the environment variable CLAUDE_CODE_SUBAGENT_MODEL is set, it overrides your per-invocation
model parameter for every subagent — silently flattening all your careful tiering to one model.
If your haiku picks are mysteriously reasoning like opus (and billing like it), that variable is
the first suspect. Not your fault; just louder than you.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

