agentleFS
muratsilahtaroglumuratsilahtaroglu/claude-code-starter-kit/.claude/skills/keel-agent-team-start/SKILL.md

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.

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

    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), …

    line 8
  2. Distinctive:

    No argument: if the reground hook already injected "this session is @X" into this context, confirm and jump to step 3 (idempotent — a known …

    line 16
  3. Distinctive:

    Double-claim guard: if ANOTHER session id maps to the same agent with a recent date (≤ ~2 days), warn — "@<name> also looks active in …

    line 26
  4. Very specific:

    Ask the owner to run /rename <name> in this chat (or relaunch it with claude --name <name>).

    line 32
  5. Distinctive:

    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 …

    line 72
  6. Very specific:

    Read .claude/agents/team-<name>.md and take it as this session's standing orders: mission, scope paths, lane, author folder, review …

    line 79
  7. Very specific:

    NEVER to TASKS/LESSONS/HANDOVER/the index: the orchestrator syncs your board into them.

    line 90
  8. Very specific:

    After a compaction/--resume the reground hook re-injects the identity from the mapping file — re-adopt silently.

    line 93

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

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

/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 against team-<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.

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.