team-protocollisted
Install: claude install-skill vmobifystudio/app-dev-team
# Team protocol
A team is not a set of roles. It is a set of roles plus an agreed way to talk.
Without one, this happens: an IC hits an ambiguity, writes `BLOCKED: needs tech-lead`, and exits.
The orchestrator reads it, spawns `tech-lead` with a paraphrase, gets an answer, paraphrases it
back, and re-spawns the IC from cold. Three context rebuilds, two lossy translations, and the
original question is now a summary of a summary.
## The channel: `docs/team/messages.jsonl`
One append-only event log for the whole team, schema `studio-event-schema/v1`. It works on a vanilla
install, survives an agent dying mid-run, and gives a restarted agent its history back.
`docs/team/messages.md` is the **generated human view** of that log — the same relationship
`docs/31-board.md` has to `docs/31-board-events.jsonl`. **Never hand-edit it.** A hand edit is
overwritten by the next render and is invisible to every rule.
```json
{"id":"MSG-0421","v":1,"ts":"2026-07-29T10:12Z","project":"tipjar","thread":"THR-APP-004",
"ticket":"APP-004","kind":"question","from":"android-developer","to":["tech-lead"],
"priority":"material","blocking":false,"requires_response":true,"expires_after_round":6,
"requirements":["REQ-031"],"summary":"Which error type for a failed toggle?",
"body":"Spec names TodoError but the repo throws IOException. Which wins?","status":"open"}
```
**Kinds:** `question` · `answer` · `handoff` · `blocker` · `fyi` · `escalation` · `decision`
**`answer` and `decision` each clos