keel-agent-team-start
Skill9 starsChanged 51 days agoMITView on GitHub
Adopt an agent-team identity for THIS chat (run once per new chat) — load the charter, record the session→agent mapping so the reground hook re-injects the identity from disk after every compaction/--resume, then resume from the agent's lane.
In this repository17 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- keel-adoptSkill
- keel-agent-team-createSkill
- keel-auditSkill
- keel-autopilotSkill
- keel-compactSkill
- keel-continueSkill
- keel-distillSkill
- keel-handoverSkill
- keel-phase-reviewSkill
- keel-pilotSkill
- keel-planSkill
- keel-researchSkill
- keel-statsSkill
- keel-teamSkill
- keel-tidySkill
- keel-updateSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 3 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
When: the FIRST message of a newly-opened session that should act as one of the project's team agents (/keel-agent-team-start @mechanic), …
- Distinctive: line 16
No argument: if the reground hook already injected "this session is @X" into this context, confirm and jump to step 3 (idempotent — a known …
- Distinctive: line 26
Double-claim guard: if ANOTHER session id maps to the same agent with a recent date (≤ ~2 days), warn — "@<name> also looks active in …
- Very specific: line 32
Ask the owner to run /rename <name> in this chat (or relaunch it with claude --name <name>).
- Distinctive: line 72
Two machines, two VS Code builds = twins: If the owner works one remote host from two clients on DIFFERENT VS Code versions, two VS Code …
- Very specific: line 79
Read .claude/agents/team-<name>.md and take it as this session's standing orders: mission, scope paths, lane, author folder, review …
- Very specific: line 90
NEVER to TASKS/LESSONS/HANDOVER/the index: the orchestrator syncs your board into them.
- Very specific: line 93
After a compaction/--resume the reground hook re-injects the identity from the mapping file — re-adopt silently.
≈ “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
/keel-agent-team-start @<name> — who am I in this chat
When: the FIRST message of a newly-opened session that should act as one of the project's team
agents (/keel-agent-team-start @mechanic), or to SWITCH an existing chat's identity. The roster is
.claude/agents/team-*.md (created owner-approved by /keel-agent-team-create) — if no charters
exist, say so and stop; NEVER invent one (charter creation is the owner's, §10.42).
1. Resolve the agent
- Argument given (
@<name>or<name>): match againstteam-<name>.md. No match → list the roster once, ask. - No argument: if the reground hook already injected "this session is @X" into this context, confirm and jump to step 3 (idempotent — a known identity is never re-asked); otherwise ask ONCE with the roster.
2. Record the mapping — this is what survives compaction
- Session id: take it from the reground hook's
Session-id: <id>line in this context (the hook prints it whenever team charters exist). If it is genuinely absent, adopt the identity for this context anyway and WARN: "mapping not recorded — identity may need re-adopting after the next compact". - Append to
.claude/agent-team-sessions(git-ignored, machine-local):<session_id> <name> <YYYY-MM-DD>. If THIS session id already has a line, REPLACE that line (identity switch). Keep the file ≤ ~50 lines — drop the oldest. - Double-claim guard: if ANOTHER session id maps to the same agent with a recent date (≤ ~2
days), warn — "@
<name>also looks active in another chat: takeover, or a collision about to happen?" — and proceed only on the owner's word (two chats writing one lane = the §10.42 clobber).
2b. Name the session after the agent — this is the messaging ADDRESS
Ask the owner to run /rename <name> in this chat (or relaunch it with claude --name <name>).
This is not cosmetic. The orchestrator wakes a worker with SendMessage, and its to: is the
SESSION name that /list-agents shows — not the keel agent name. A session nobody renamed is named
after the working directory, so a five-agent team reads as my-app-3f, my-app-a1, my-app-7c…
mutually indistinguishable: the orchestrator cannot address a worker, and the star-topology wall
cannot recognise a target as a teammate (it allows what it cannot identify, by design).
With the rename done, to: "<name>" reaches this session, the wall recognises the roster, and the
@<name> tag on every .claude/ritual-log line lines up with the address people actually use.
Re-run this after every client restart, even when the identity re-adopted silently. Field case
2026-08-19: a VS Code restart left the session id AND .claude/agent-team-sessions mapping exactly
intact — the reground hook re-injected "@frontend" correctly — but /list-agents started showing
this window under its directory-derived name again. The orchestrator read "name unreachable" as
"session dead" and broadcast a needless re-identify. The mapping (identity) and the display name
(addressing) are two different layers, and only one of them survives a client restart. /rename
<name> is idempotent and cheap — run it any time addressing might have reset, not only once.
Make it automatic — install the launch wrapper once per machine (recommended). Measured
2026-09-03: /rename IS written to the session transcript (an agent-name record), but a process
started with --resume does not copy it into the messaging record — it comes up
nameSource=derived. So "I forgot to rename" is structural, not a lapse. claude --name <agent>
at launch is the documented flag for that record, and the VS Code extension lets a script front the binary:
cp .claude/claude-launch-wrapper.sh ~/.claude/ && chmod +x ~/.claude/claude-launch-wrapper.sh
# VS Code settings on the machine that RUNS claude (remote host, if Remote-SSH):
# "claudeCode.claudeProcessWrapper": "/home/<you>/.claude/claude-launch-wrapper.sh"From then on every --resume launch is named from .claude/agent-team-sessions (this step's
mapping) — or, on any project without a map, from the transcript's own last rename. Verify
once after installing — and do it with the trace, because the exec is transparent and the process
cmdline looks identical either way: touch ~/.claude/keel-launch-wrapper.log, reload the IDE window
(the setting is read when the extension host starts), reopen one agent tab, then read the log — a
named --name=<agent> line means it fired. python3 .claude/team-addresses.py should then show that
lane OK. Delete the log file to disarm; the wrapper never creates it. New sessions
pass through untouched; the wrapper never writes to stdout and fails open to the original launch.
The team-addresses.py --hook SessionStart line stays as the safety net: it tells THIS window,
by name, when its address and identity have diverged.
Two machines, two VS Code builds = twins. If the owner works one remote host from two clients
on DIFFERENT VS Code versions, two VS Code servers stay alive and each resumes the same session
ids — every identity shows 2–3 live windows. The SessionStart line marks which twin is ATTACHED
(its server has a client) and which is DETACHED, with the kill command for the detached pids;
the durable fix is version parity between the two clients (see steering "Addressing").
3. Adopt the charter
Read .claude/agents/team-<name>.md and take it as this session's standing orders: mission, scope
paths, lane, author folder, review routing, and — for workers — the FORBIDDEN list (no WRITE-rituals,
no commit/push, no touching others' lines; rules §10.42). The Role: orchestrator charter instead
assumes the duties: rituals, lane/@tag assignment, review routing (§10.41), memory curation — and no
work items of its own.
4. Resume in-lane (write-surface split, §10.42)
Refresh your board's lane MIRROR from TASKS.md (read-only), then run the /keel-continue flow scoped
to it: brief "where the lane left off · in-flight item · warnings · next step", then work ONLY your
items. Everything you write mid-work goes to YOUR surfaces — reports/team/<name>/board.md
(progress · findings inbox the moment something is learned · requests) and your spec/fix files —
NEVER to TASKS/LESSONS/HANDOVER/the index: the orchestrator syncs your board into them.
Out-of-scope discoveries: one line in your board's requests section — never fixed by you.
After a compaction/--resume the reground hook re-injects the identity from the mapping file —
re-adopt silently; do NOT re-run this skill unless the hook says the session has no identity.
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.

