team-protocol
Skill3 starsChanged 8 days agoMITView on GitHub
Use when running any team-* skill (team-debate, team-plan, team-kickoff, team-refactor, team-review) — dispatching its role agents, settling what they disagree on, or handing off at a gate.
2 other projects use a version of this.
Adopted by
Most recently taken up by
- TokiDEV/team-skillsword for word, first seen Nov 4, 2026
- Shehabov/ai-dev-crewtheir own version, first seen Sep 30, 2026
Other versions2 projects use a version of this.
Word for word · 1
- TokiDEV/team-skills★ 3100% same
Edited · 0
None found.
Wrote their own version · 1
- Shehabov/ai-dev-crew★ 4same name
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.
In this repository7 other files it gives its agents.
- team-debateSkill
- team-kickoffSkill
- team-planSkill
- team-refactorSkill
- team-reviewSkill
- team-scanSkill
- team-viewSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 5 are distinctive, and 3 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
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
- Distinctive: line 12
One agent per role, dispatched in parallel: Never play the roles yourself in one context (one context, one opinion in several costumes).
- Distinctive: line 13
Separation of context: Every agent gets the minimum it needs.
- Distinctive: line 20
Ad-hoc specialists: When you summon one, write it 3–5 tests, no names.
- Distinctive: line 21
Attribution: Every finding is credited to the role that made it, including what a role got from a specialist skill.
- Very specific: line 64
Every question the roles disagree on is settled by counting.md (copied to the run folder): the count goes in tags (3–1).
- Very specific: line 128
Read ## Weakened checks in execution.md (copied to the run folder).
- Very specific: line 136
Only on an auto-accept run: read auto-accept.md (copied to the run folder).
- Distinctive: line 157
Every role agreeing on everything
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
team-protocol
The rules every team-* skill shares. Each caller owns its roles, rounds and gate mapping; this skill owns how agents are dispatched, how their positions are counted, how a run hands off, and how approved work is executed and checked. When a caller and this skill disagree, the caller wins for its own flow.
Dispatch
- One agent per role, dispatched in parallel. Never play the roles yourself in one context (one context, one opinion in several costumes).
- Separation of context. Every agent gets the minimum it needs; none receives the conversation, the raw transcripts or another agent's output unless its caller says so. The caller's table says what each one receives.
- Agents return async. Send every agent of a round in one message. Each completion wakes you for a turn that re-reads the whole run: until the round's last agent is back, answer a notice in one line under 10 words — no tool call, no Read, no summary of the reply. Then read the replies once and take the next step.
- Pass the model and budget from the caller's table to every dispatch.
- Seat agent. Dispatch each agent as its type: the caller's
Typecolumn, or outside a tablemakerif it writes a project file or code,judgeif it weighs other agents' output on opus, elseanalyst. Useteam-skills:team-<type>if the session lists it, elseteam-<type>, elsegeneral-purpose, said once in one line before the first dispatch. Pass the model either way. - Skill files go into the run folder first. The skill's base directory (
~/.claude/skills/…or the plugin cache) is outside the project: a Read there waits on a permission prompt. Once the caller's preconditions pass, create the run folder; the run's first action copies, in one Bash call, every skill file you or an agent will Read (team-view's two only for an agent building a page or sketch):cp <base directory>/{templates.md,roles/role-*.md} <base directory>/../team-protocol/{counting.md,bridge.md,scope.md,execution.md,auto-accept.md,lane-handoffs.md,machine-tools.md,reachability.md,off-model.md} <base directory>/../team-view/{contract.md,figures.md} <run folder>/ && cp <base directory>/../team-protocol/SKILL.md <run folder>/team-protocol.md. Check overrides with[ -d .council/role-overrides ] && ls .council/role-overrides(a barelsfails on a missing folder). team-kickoff has neither templates.md nor roles/ (its debate run copies team-debate's). Point each agent to its copy; a pointer to ateam-protocolsection means that section ofteam-protocol.md. Scripts run through Bash (render.js,cards.sh) and project overrides need no copy. You read the copies too: before the copy, only the SKILL.md the Skill tool loaded; after, sections from the copy (grep -n '^## ' <run folder>/templates.mdfirst). A file not copied: copy it then, never Read it in place. - Role overrides. Templates live in the caller's
roles/. A project may override any of them with.council/role-overrides/role-<name>.md; the project file wins.<name>is the role's file name. - Roles are lenses. A role is named after what it looks at, never after a person. This holds for built-in roles, ad-hoc specialists and project overrides.
- Ad-hoc specialists. When you summon one, write it 3–5 tests, no names.
- Attribution. Every finding is credited to the role that made it, including what a role got from a specialist skill.
Writers
Writers keep the orchestrator short. Gate JSON, decision, refactor and review records, exec briefs and plans are written by agents (from the synthesis file, the decisions block or a reviewer's lines). The orchestrator writes prompts and small run-folder notes, flips a Status: line, appends a record's Execution section, serves the page, and passes the decisions block on. A human follow-up that needs more than one grep goes to a sonnet evidence agent: your context is the run's most expensive. A record amendment of ≤ 5 lines you append yourself (cat >>), no writer. Each caller's table gives these writers a model and a budget.
- The synthesis stays under ~300 lines and holds everything the gate page and the record need, since it is the only run-folder file the gate writer and the record writer read.
- The exec brief is for the executors and nothing else: a header (scope, the quality-gate commands copied verbatim, fences for the whole run), then the approved cards in order. No debate, no arguments, no declined or rejected items. Aim under ~150 lines.
- After execution, complete the record yourself with one Bash call that appends to it (
cat >> <record> <<'EOF'), then flipStatus:toexecuted. The appended## Executionsection copies the reply lines as they came: Commits (hash and item, one line each), Reverted or blocked (item and reason), Notes (the final reviewer'snotefindings; the caller says what they count as).
Off-model seat
The caller names the seat that can go off-model. Before the roster line that seats it, read off-model.md (copied to the run folder): why, when to offer it, and how to run it.
Run folder
.council/runs/YYYY-MM-DD-<topic>/. Every agent writes its full output there, except a writer whose output is a project file (Agent contract). Later agents (Round 2, gate, synthesizer) read the files they need from it. The orchestrator reads only the synthesis file, or, in a flow with none, the reply lines its caller names.
Agent contract
Append this block to every dispatch prompt, with the budget, run folder and agent id filled in. Every turn re-reads the whole context, so context size × turns is the bill.
## How to work
- Budget: about <N> tool calls. Put several searches in one Bash call; Read a file once, whole.
- Read run-folder files with the Read tool, several in one message, never through `cat`. Working files (diffs, lists, scripts) go in <run folder>, never `$TMPDIR` or `/tmp`; commit messages inline (`git commit -F - <<'EOF'`); `gh` and `glab` alone in their Bash call.
- Tool rules: <the user's standing tool rules from CLAUDE.md, e.g. "absolute paths, never `cd`">
- Only a command's output counts, never IDE diagnostics (they can come from stale buffers). Run each gate command exactly as your brief writes it, with no pipe, redirect or prefix added.
- Write your full output to <run folder>/<agent id>.md.
- A question the code, the ticket or the MR/PR answers is yours: answer it with `file:line` or the link. Before asking how a new variant behaves, say how its sibling behaves today. A claim that something does not exist names the terms and paths you searched, else mark it `unverified`.
- A rule about what code allows reads the whole class deciding it, constructor included, never a line window; grep a guard by its effect (its error, its constant list).
- A scenario you raise names the path reaching it in today's code (`file:line`), else the guards you searched, marked `unverified`.
- Reply with: the file path, one line per position, card, verdict or defect (id + title), the questions for the human, and what you settled alone (`question → answer — source`). Nothing else.Drop the Tool rules line when the user has none. A caller may add lines above the budget (team-refactor adds "Start from the Code Brief").
A writer whose output is a project file (a plan, a record, an exec brief, a gate JSON) writes it there: its project path replaces the run-folder line, as - Write your full output to <project path>. An off-model seat replaces that line too (off-model.md).
An agent whose job is not to change the project (a role, a reviewer, an evidence pass) also gets this line: - Leave the project tree as you found it. Scratch files (a probe test, a script) go in <run folder>; if a tool only runs them from inside the tree, delete them before you reply and say so.
Counting positions
Every question the roles disagree on is settled by counting.md (copied to the run folder): the count goes in tags (3–1). The synthesizer and the writers apply it from their copy.
Confidence. counting.md § Confidence is the only definition of high, med and low; agents apply it from their copy.
Bridge
How business and tech meet on one decision is set by bridge.md (copied to the run folder): lenses, constraints and trade-offs. A caller that follows it names it in its REQUIRED BACKGROUND line; its role agents, synthesizer and writers apply it from their copy.
Structural choices
A structural choice is any of: a new package or module, a new layer, a dependency direction or import rule, a public contract other code builds on, a folder convention. Each is expensive to undo, so the human makes it as a choice between options, with a recommendation. A writer never settles one, and an approve on a routine step that happens to create one is not that choice. The caller says where its structural choices reach the human. A settled one that later work could break also becomes a constraint (bridge.md § Structural choices and constraints). A choice the user sees (a screen's layout or placement, wording, a flow) is the human's in the same way. A spike answers a fact; it never settles one of these.
Settled without the human
You see every question, and every answer nobody asked you for.
- A question the code, the ticket or the MR/PR answers is not a question for the human. The agent that raises it answers it, or an evidence pass does before the pause.
- Everything settled without the human goes on the gate's Settled without you list (
contract.md,settled): a question answered from code, anassumedpremise or constraint taken as true, a default you or a writer took, an author-intent question sent to a merge request's comment. You can reopen each one. - Before the question pause, grep the role files for
assumed. Each one is in a question or on the list.
Reachability
Today's rules are in the code; a case it can't reach never reaches the human. team-debate and team-plan read reachability.md (in the run folder).
Project profile
A git worktree with no .council/project-profile.md takes a sibling worktree's first (team-scan § Sibling worktrees), before the caller's rule for a missing profile applies.
Code scope
For any caller that reads existing code (Recon, seats, executors): read scope.md (copied to the run folder).
Lane hand-offs
For team-refactor and team-review, which hand what they stumble on in the other lane to a list: read lane-handoffs.md (copied to the run folder).
Handoff
Each gate ends a session. An open answer. An UNDECIDED, or a note that asks a question: one check (an evidence agent if it needs code), then one question in chat that states only what the run's files hold and flags the rest as unchecked. The record says "gate pick X, changed in chat to Y" and quotes the human; a card made moot is recorded moot. Write the record the next phase needs. Before deleting the run folder, grep the deliverables for runs/ and for ids that exist only in the run (reviewer defects); rewrite those as plain sentences. Evidence, settled notes and sketches worth keeping go to .council/decisions/<name>-sources/. Then delete the run folder (anything worth keeping is in the record by then). Commit as the profile's Run preferences say (team-scan). With no Commit records line, ask once with AskUserQuestion: "Commit <the files the next phase reads> now, as one docs commit?", naming each gitignored one (git check-ignore), and record the answer as that line. Worktree executors only see committed files, and a commit after the handoff costs turns at the session's largest context.
The handoff ends your last message: /clear, then the next prompt alone in a fenced code block, whole and ready to paste (paths filled in, nothing else inside):
`/clear`, then:
```
execute the review fixes in .council/reviews/2026-10-28-checkout.exec.md
```The next phase starts from that file, not from a context that holds the whole debate.
Launch. The next phase can start itself in a new session, per the profile's Next step line (launch | paste); with none, ask in the commit question's AskUserQuestion call and record the answer. On launch, run outside the sandbox, detached:
setsid -f claude -p --name "<topic>" --append-system-prompt "Headless team-* handoff: no AskUserQuestion. At the first point needing the human (a question, a gate page to serve), write it as text and end your turn; they resume this session." "<the prompt>" > /dev/null 2>&1Say it runs alone, to open from the session history or /resume. The handoff block still ends the message.
Execution
At execution, first (nothing is copied yet): mkdir -p <run folder> && cp <base directory>/templates.md <base directory>/../team-protocol/{execution.md,scope.md} <run folder>/ && cp <base directory>/../team-protocol/SKILL.md <run folder>/team-protocol.md. Then read execution.md there.
Weakened checks
Read ## Weakened checks in execution.md (copied to the run folder). A caller writes "no check weakened (team-protocol § Weakened checks)".
Sweep
For a sweep of zones: read ## Sweep in execution.md (copied to the run folder).
Auto-accept
Only on an auto-accept run: read auto-accept.md (copied to the run folder).
Rationalizations
| Excuse | Reality |
| "I'll play the roles myself, it's faster" | One context gives one opinion wearing several costumes, and no tension. Dispatch them. |
| "It's close, I'll pick a side and call it a decision" | No majority makes it a tension. The synthesizer suggests a side; the human takes it. |
| "We're on a roll, I'll keep going in this session" | The next phase would pay for this whole context on every turn. Write the record, then /clear. |
| "The code answers it, no need to mention it" | Answer it, and put it on Settled without you: nothing is decided in the dark. |
| "A new package is an implementation detail; the writer will shape it" | Its boundaries, dependencies and folders are expensive to undo, and an approve on one step line among forty is not a choice the human made (§ Structural choices). |
| "The fence says format only the changed lines; the executor will comply" | It didn't, seven times in one sweep. The Diff guard runs before every commit; words alone don't. |
Red Flags
- Writing a role's position, card or verdict yourself
- A dispatch without
model, or asgeneral-purposewhile itsteam-*agent is listed - Writing or patching a gate JSON, record, exec brief or plan yourself (a
Status:line and the Execution append aside) - Fixing a reviewer's finding, or editing code between batches, yourself
- A skill file read from its base directory, by you or an agent
- A counted position written before the human's answer that contradicts it
- Every role agreeing on everything
- A count in
tagsthat includes a position with nofile:line, doc, output or measurement - Opening a run-folder file other than the synthesis or a skill-file copy
- Starting the next phase in the session that ran the gate
- An external model CLI called without a yes on record
- A gate auto-accepted in a run the human did not invoke with
auto-accept - A structural choice that reached the human only as a routine step, or not at all
- A commit made without its brief's Diff guard run
- A hand-off line with no scenario
- A card that restates a Settled line with no new evidence
- On an auto-accept run with no page, an item without a recommendation, a
correctsitem or an unmetafterthat was never asked about
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.

