Throwaway probe: logs agent.spawn inputs. Not part of CTK.

<img src="docs/assets/logo-light.svg" alt="Claude Team Kit: Native agent teams. Under control." width="520">
<h2 align="center">Build with a team. Stay in control.</h2>
Turn complex tasks into coordinated Claude Code agent teams.<br> Set hard limits, watch teammates work, and follow task dependencies live.
<a href="#install"><b>Install CTK</b></a> · <a href="#mission-control"><b>Watch Mission Control</b></a> · <a href="#how-ctk-works"><b>How it works</b></a>
<a href="https://github.com/tc3oliver/claude-team-kit/actions/workflows/ci.yml"><img src="https://github.com/tc3oliver/claude-team-kit/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT license"></a>
<img src="docs/assets/mission-control-f.svg" alt="Recording of a real Claude Code session: one plain sentence starts a team, three teammates work, and a click on the CTK line above the prompt opens Mission Control beside the transcript with workers, a task graph whose nodes turn from ready to running to done, and usage" width="900">
One goal, several teammates, clear tasks and dependencies. Claude Code's own Agent Teams do the work; CTK's skill guides the lead to split the goal into verifiable tasks and to check the result before calling it done.
Choose how many native teammates may be live at once (default 5, from 1 to 12). A spawn above the limit is refused and its task stays pending. Claude Code itself documents no such limit.
See workers, tasks, dependencies and usage without leaving Claude Code. It is read-only: it never starts, stops or changes anything.
Two ways, both through Claude Code's own Plugin Manager.
Paste this into Claude Code (or another coding agent that can run shell commands):
Install Claude Team Kit (CTK), a Claude Code plugin, by following the checklist at
https://raw.githubusercontent.com/tc3oliver/claude-team-kit/main/INSTALL.md
Rules: use only Claude Code's native Plugin Manager (`claude plugin ...`); no other installer, no `curl | bash`,
no `npm install`. Check `claude --version` and any existing CTK install first. Show me the exact change to
settings.json and wait for my yes before editing it; merge only, and keep my other plugins, MCP servers, hooks and
settings. Do not uninstall or disable anything else, including OMC. Tell me which steps only I can run
(`/reload-plugins` or a restart, then `/ctk-doctor`) and what the result should look like.
The agent follows INSTALL.md: it installs with the two commands below, adds the Agent Teams setting only after you agree, and asks you to reload and run /ctk-doctor.
In Claude Code:
/plugin marketplace add tc3oliver/claude-team-kit
/plugin install ctk@ctk-kit
Then run /reload-plugins (or restart). CTK needs Claude Code 2.1.287 or newer.
Turn on Agent Teams. They are experimental and off by default, and a plugin cannot switch them on. Add this to the env object in ~/.claude/settings.json (keep your other settings), then restart:
"env": { "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1" }
Run /ctk-doctor to check the setup: it changes nothing and prints the exact fix for anything missing. Details, Claude 5.x notes and options: Installation.
Ask in plain words:
Use a team to implement this feature, write tests, and review the result.
Or be explicit with /ctk:team <goal>. The explicit command always loads the team skill. A plain sentence usually does too, but the model decides, so use the command when you want to be sure (how it works). Then click CTK ▸ above the prompt to open Mission Control.
<img src="docs/assets/how-it-works.svg" alt="Illustration: one goal becomes eight tasks with dependencies; only ready tasks start; three native teammates work at once and a fourth ready task waits; the lead hands the next ready task to an idle teammate; the lead runs the final verification" width="900">
Plan → Coordinate → Execute → Verify
Claude Code provides the agent team and its shared task list. CTK's skill guides the lead through the four steps, and CTK's mod enforces the limit on native teammates. CTK has no scheduler of its own. Full division of work: How CTK works.
Click the CTK ▸ line above the prompt, or run /ctk-mission. Seven views: Overview, Workers, Tasks, Usage, Config, Stats and Doctor; keys 1 to 7 switch, Esc closes. Figures come from Claude Code's own events and API, and anything CTK could not observe reads unavailable, never a made-up zero.
<a href="docs/assets/mission-control-f-workers.svg"><img src="docs/assets/mission-control-f-workers.svg" alt="Mission Control Workers view beside the transcript: three workers on Sonnet 5.5, each with its task, tool-call count, elapsed time and last activity" width="640"></a><br> <b>Live workers</b><br> <sub>Who is running what, on which model, and how recently it did something.</sub>
<a href="docs/assets/mission-control-f-poster.svg"><img src="docs/assets/mission-control-f-poster.svg" alt="Mission Control Tasks view beside the transcript: five finished tasks fan in to a running npm test task, which leads to the report task" width="640"></a><br> <b>Task dependency graph</b><br> <sub>Drawn only from the dependencies the lead declared; waiting, ready, running and done are distinct.</sub>
<a href="docs/assets/mission-control-f-usage.svg"><img src="docs/assets/mission-control-f-usage.svg" alt="Mission Control Usage view beside the transcript: 5-hour and weekly limits with reset times, context use, session cost and tool calls" width="640"></a><br> <b>Usage</b><br> <sub>5-hour and weekly limits, context and session cost, as Claude Code reports them.</sub>
designer on Opus writes UI/UX briefs; it is new on main and has not yet been part of a recorded run./ctk:review scales reviewer depth to the risk of the change./ctk:debug asks for a failing reproduction before a fix./plugin configure ctk@ctk-kit. The optional ctk CLI syncs a profile between machines through a git repository you own, with a secrets scan before every publish (Configuration)./ctk:team says the limit and the team line are off.v0.1.1. The earlier v0.1.0 predates the redesigned Mission Control, the designer agent and the default limit of 5. The install commands above follow main.More: Limitations · Architecture · Threat model
Installation · How CTK works · Mission Control · Natural language · Configuration · Architecture · Limitations · Recordings · Verification record · Comparison with OMC, superpowers and claude-hud · Coming from OMC · Rollback
Contributing · Code of Conduct · Security · Changelog · MIT License · Third-party notices
hooks/register.mjs 29 lines1// Throwaway probe, not part of CTK: logs what Claude Code sends to `agent.spawn` for each Agent call, and
2// what the next hook answered, so the boundary "which calls are teammates" can be observed instead of assumed.
3// It changes nothing: every spawn is passed on untouched. The log path is CTK_PROBE_LOG (default: spawn-probe-log.json
4// in the session's working directory).
5const rows = []
6async function note($, e, result) {
7 rows.push({
8 name: e.name ?? null,
9 subagentType: e.subagentType,
10 isTeammate: e.isTeammate ?? null,
11 fork: e.fork,
12 background: e.background,
13 provider: e.provider,
14 keys: Object.keys(e).sort(),
15 result,
16 })
17 const path = (await $.env.get('CTK_PROBE_LOG').catch(() => undefined)) ?? 'spawn-probe-log.json'
18 try {
19 await $.fs.write(path, JSON.stringify(rows, null, 1))
20 } catch {}
21}
22export const register = on => {
23 on('agent.spawn', async ($, e, next) => {
24 const r = await next(e)
25 await note($, e, r.deny !== undefined ? { deny: String(r.deny).slice(0, 80) } : { agentId: r.agentId ?? null, teammateId: r.teammateId ?? null })
26 return r
27 })
28}
29