agentleFS
SpecialITWeaponsSpecialITWeapons/tribunal-claude-skill/skills/tribunal/SKILL.md

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

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-MichaelSkill

    production-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

  • wpankSkill

    session-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

  • SentrySkill

    skill-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

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
  1. Very specific:

    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 …

    line 59
  2. Distinctive:

    If the idea is too vague to judge, stop and ask the user ONE clarifying question.

    line 115
  3. Very specific:

    Send in the devil's advocate: After the verdict, invoke devils-advocate via Task at the SAME tier as the judge.

    line 148
  4. Distinctive:

    Keep the full essays OUT of the final report unless the user asks for transcripts.

    line 168
  5. Distinctive:

    No thumb on the scale. If the idea is obviously stupid, the critic says so more credibly than you can.

    line 172
  6. Distinctive:

    No fence-sitting from the judge.

    line 174
  7. Distinctive:

    Ask, don't guess. A missing fact you can't fetch is a question for the user, not a premise to invent.

    line 176
  8. Very specific:

    If the environment variable CLAUDE_CODE_SUBAGENT_MODEL is set, it overrides your per-invocation model parameter for every subagent — …

    line 185
  9. Distinctive:

    If your haiku picks are mysteriously reasoning like opus (and billing like it), that variable is the first suspect.

    line 187

“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.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

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. Add effort: high for 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:

  1. A --persona=<name> flag in the invocation, if present. This wins.
  2. Otherwise, the persona field in a config file. Read .claude/tribunal.json first (project), then ~/.claude/tribunal.json (global); project overrides global.
  3. 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:

  1. A --powers=<level> flag in the invocation wins.
  2. Otherwise the powers field in tribunal.json (project overrides global).
  3. 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, dispatch critic-verify INSTEAD of critic. That variant additionally has Bash, 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

  1. 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.)
  2. Dispatch the advocate via Task, passing the model for the starting tier, plus the framed idea and any relevant repo/file context. It returns the strongest honest case FOR, and a status.
  3. Dispatch the critic — same idea, same starting tier, via Task with the model parameter. If powers is readonly, dispatch critic; if verify, dispatch critic-verify instead (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.)
  4. 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 at opus. 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.
  5. 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 (optionally effort: high). Invoke judge via Task with 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.
  6. Send in the devil's advocate. After the verdict, invoke devils-advocate via Task at the SAME tier as the judge. Give it the judge's full verdict plus both original cases. It returns VERDICT HOLDS or CHALLENGE.
    • 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.
  7. 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.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.