{ "about": "Teams (team.md, spec 3.2.0; the main agent and its tree, subagents.md §5–§13, spec 3.4.0 — a member's team_add is now the lead's with `parent`, and `offered` lists 3.4.0's tools): one lead session's team, step by step, written from a reference model of the rules. `start`: the size setting `min` and `max`, `subagents` (enabled for the session; default true) and the chat model's `capacity` (models/schema.json: `parallel`, `single_session`; {} — no limit). The lead is `lead`; its first prompt is running as the case begins, and every agent is on the chat's model, and it is the only model there is (spec 3.3.0: other models are subagents.json's). Steps and what each answers: `offered` (`by` an agent, default lead) — `{tools, setting}`: the team tools listed for that agent, sorted, and whether the setting is shown; `call` (`by`, `tool`, `args`) — `{result, delivered}`: the call's answer word for word (null where an ordinary tool would run: the case looks only at whether it is refused), and what was delivered to whom by this step, `{name: [message, …]}`; `team_read` answers `{room, delivered}` instead, `room` being the messages it shows as `{n, from, to}` (the tree and the text format are loop.json team.read's, checked by each project's own tests); `task` runs a subagent that counts toward the size (and holds a slot) until `task_done` (`by`) — answers null; `finish` (`by`, `reply`, `reason`: stop by default, or steps, budget, `error — `) — the agent's turn ends: a member's reply is its report — `{delivered}`; `set` (`min`, `max`, `capacity`: the person's setting or the model's metadata changed) — null; `person_stop` (`name`) — the person stopped that member in the UI — null; `user` — the person's message to the lead — `{note}`: the note on it (context.md §10), null when there is none; `state` — the team in tree order as `{name, manager, state}`: working, waiting (for a slot), finished, idle (the lead between turns). Delivering to a finished member or the idle lead wakes it (it is then working, or waiting when its model is full). Spec 3.4.0 adds: `start.mode` — the main agent's mode (default edit); `call` to team_whoami, team_finish, team_findings, team_request, team_decide, team_assign, team_replace, answered word for word; `context` (`by`, `used`, `window`) — its engine's context use — null; `context_full` (`by`) — its context reached team.context.pause_at: `{delivered}`; `started` (`by`) — `{text}`: what its latest turn was started with (a brief, or the messages that woke it); `tree` — `{size, open_slots, agents: [{id, name, parent, state, mode, request}], ended: [{id, name, state}]}`; `main_mode` (`mode`) — the main agent's mode changed — null. LLeMbas: services/team.py; CLI: team/.", "cases": [ { "about": "Offered on a model that serves two requests at once: the lead has all four tools and the setting is shown.", "start": { "min": 1, "max": 4, "capacity": { "parallel": 2 } }, "steps": [ { "op": "offered" } ], "expect": [ { "tools": [ "team_add", "team_assign", "team_decide", "team_findings", "team_read", "team_replace", "team_send", "team_stop", "team_whoami" ], "setting": true } ] }, { "about": "A hosted API (no capacity said) offers a team too.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "offered" } ], "expect": [ { "tools": [ "team_add", "team_assign", "team_decide", "team_findings", "team_read", "team_replace", "team_send", "team_stop", "team_whoami" ], "setting": true } ] }, { "about": "A model that serves one request at a time, with no other model, offers no team: no tools, no setting.", "start": { "min": 1, "max": 4, "capacity": { "single_session": true } }, "steps": [ { "op": "offered" } ], "expect": [ { "tools": [], "setting": false } ] }, { "about": "parallel 1 is the same as single_session.", "start": { "min": 1, "max": 4, "capacity": { "parallel": 1, "single_session": false } }, "steps": [ { "op": "offered" } ], "expect": [ { "tools": [], "setting": false } ] }, { "about": "parallel wins over single_session where they disagree.", "start": { "min": 1, "max": 4, "capacity": { "parallel": 3, "single_session": true } }, "steps": [ { "op": "offered" } ], "expect": [ { "tools": [ "team_add", "team_assign", "team_decide", "team_findings", "team_read", "team_replace", "team_send", "team_stop", "team_whoami" ], "setting": true } ] }, { "about": "Subagents switched off: no team.", "start": { "min": 1, "max": 4, "subagents": false, "capacity": { "parallel": 4 } }, "steps": [ { "op": "offered" } ], "expect": [ { "tools": [], "setting": false } ] }, { "about": "max 1: the tools stay listed (the setting can change during the session) and answer that one agent is allowed; task answers the same.", "start": { "min": 1, "max": 1, "capacity": { "parallel": 2 } }, "steps": [ { "op": "offered" }, { "op": "user" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "A parser" } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "all" ], "message": "hi" } }, { "op": "call", "by": "lead", "tool": "task", "args": { "prompt": "x" } }, { "op": "call", "by": "lead", "tool": "write", "args": {} } ], "expect": [ { "tools": [ "team_add", "team_assign", "team_decide", "team_findings", "team_read", "team_replace", "team_send", "team_stop", "team_whoami" ], "setting": true }, { "note": "\nThe person allows one agent: work alone; the team tools and task are unavailable.\n" }, { "result": "The person allows one agent in this chat: there is no team. Do the work yourself.", "delivered": {} }, { "result": "The person allows one agent in this chat: there is no team. Do the work yourself.", "delivered": {} }, { "result": "The person allows one agent in this chat: there is no team. Do the work yourself.", "delivered": {} }, { "result": null, "delivered": {} } ] }, { "about": "A subagent has team_whoami, team_read, team_send, team_findings and team_finish; a sub-manager the same — it adds nothing (spec 3.4.0).", "start": { "min": 1, "max": 4, "capacity": { "parallel": 4 } }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "docs", "role": "owns a part", "task": "Do the part.", "lead": true } }, { "op": "offered", "by": "parser" }, { "op": "offered", "by": "docs" } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Added docs (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 4 agents.", "delivered": {} }, { "tools": [ "team_findings", "team_finish", "team_read", "team_send", "team_whoami" ], "setting": true }, { "tools": [ "team_findings", "team_finish", "team_read", "team_send", "team_whoami" ], "setting": true } ] }, { "about": "The size is a note on the first user message, and on the next one after it changes — never in the prompt.", "start": { "min": 1, "max": 4, "capacity": { "parallel": 2 } }, "steps": [ { "op": "user" }, { "op": "finish", "by": "lead" }, { "op": "user" }, { "op": "set", "max": 6 }, { "op": "finish", "by": "lead" }, { "op": "user" }, { "op": "set", "max": 6 }, { "op": "finish", "by": "lead" }, { "op": "user" } ], "expect": [ { "note": "\nThe team may have 1 to 4 agents, you included.\n" }, { "delivered": {} }, { "note": null }, null, { "delivered": {} }, { "note": "\nThe team may have 1 to 6 agents, you included.\n" }, null, { "delivered": {} }, { "note": null } ] }, { "about": "min 2 or more: the note asks for a team from the start, and the lead is a manager before its first member.", "start": { "min": 3, "max": 5, "capacity": { "parallel": 4 } }, "steps": [ { "op": "user" }, { "op": "call", "by": "lead", "tool": "edit", "args": {} }, { "op": "call", "by": "lead", "tool": "read", "args": {} } ], "expect": [ { "note": "\nThe team may have 3 to 5 agents, you included.\nWork through subagents from the start: you lead, and they do the work. The person opened 2 slots for them: fill them with team_add.\n" }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": null, "delivered": {} } ] }, { "about": "Lowering max to 1 is said as one agent.", "start": { "min": 1, "max": 4, "capacity": { "parallel": 2 } }, "steps": [ { "op": "user" }, { "op": "set", "max": 1 }, { "op": "finish", "by": "lead" }, { "op": "user" } ], "expect": [ { "note": "\nThe team may have 1 to 4 agents, you included.\n" }, null, { "delivered": {} }, { "note": "\nThe person allows one agent: work alone; the team tools and task are unavailable.\n" } ] }, { "about": "min equal to max: the range and the request for a team.", "start": { "min": 2, "max": 2, "capacity": { "parallel": 2 } }, "steps": [ { "op": "user" } ], "expect": [ { "note": "\nThe team may have 2 to 2 agents, you included.\nWork through subagents from the start: you lead, and they do the work. The person opened 1 slots for them: fill them with team_add.\n" } ] }, { "about": "Past max, team_add is refused; a stopped member makes room. The size counts the lead.", "start": { "min": 1, "max": 3, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lexer", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "tests", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "lexer" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "tests", "role": "owns a part", "task": "Do the part." } }, { "op": "state" } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 3 agents.", "delivered": {} }, { "result": "Added lexer (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 3 agents.", "delivered": {} }, { "result": "The team is full: it has as many agents as the person allows (3). Give the work to a member already on it (team_send), or stop one (team_stop) first.", "delivered": {} }, { "result": "Stopped lexer. The team is 2 of 3 agents.", "delivered": {} }, { "result": "Added tests (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 3 agents.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "parser", "manager": "lead", "state": "working" }, { "name": "tests", "manager": "lead", "state": "working" } ] ] }, { "about": "A finished member keeps its place in the size: it can be woken.", "start": { "min": 1, "max": 2, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "finish", "by": "parser", "reply": "Done." }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lexer", "role": "owns a part", "task": "Do the part." } }, { "op": "state" } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 2 agents.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from parser to lead:]\nDone." ] } }, { "result": "The team is full: it has as many agents as the person allows (2). Give the work to a member already on it (team_send), or stop one (team_stop) first.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "parser", "manager": "lead", "state": "finished" } ] ] }, { "about": "The size is across the whole tree: subagents placed under a sub-manager count within the same max.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "backend", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "db", "role": "owns a part", "task": "Do the part.", "parent": "backend" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "frontend", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "parent": "backend" } }, { "op": "state" } ], "expect": [ { "result": "Added backend (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Added db (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 4 agents.", "delivered": {} }, { "result": "Added frontend (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 4 agents.", "delivered": {} }, { "result": "The team is full: it has as many agents as the person allows (4). Give the work to a member already on it (team_send), or stop one (team_stop) first.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "backend", "manager": "lead", "state": "working" }, { "name": "db", "manager": "backend", "state": "working" }, { "name": "frontend", "manager": "lead", "state": "working" } ] ] }, { "about": "A task subagent counts toward max while it runs, inside a team. A subagent's own task is refused: only the main agent starts subagents (spec 3.4.0).", "start": { "min": 1, "max": 3, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "call", "by": "lead", "tool": "task", "args": { "prompt": "Find the grammar." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lexer", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "parser", "tool": "task", "args": { "prompt": "x" } }, { "op": "task_done", "by": "lead" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lexer", "role": "owns a part", "task": "Do the part." } } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 3 agents.", "delivered": {} }, { "result": null, "delivered": {} }, { "result": "The team is full: it has as many agents as the person allows (3). Give the work to a member already on it (team_send), or stop one (team_stop) first.", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, null, { "result": "Added lexer (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 3 agents.", "delivered": {} } ] }, { "about": "The count includes the lead: max 2 is the lead and one subagent. A second task while the first runs is refused; once it is done there is room again.", "start": { "min": 1, "max": 2, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "task", "args": { "prompt": "Find the grammar." } }, { "op": "call", "by": "lead", "tool": "task", "args": { "prompt": "x" } }, { "op": "task_done", "by": "lead" }, { "op": "call", "by": "lead", "tool": "task", "args": { "prompt": "x" } } ], "expect": [ { "result": null, "delivered": {} }, { "result": "The team is full: it has as many agents as the person allows (2). Give the work to a member already on it (team_send), or stop one (team_stop) first.", "delivered": {} }, null, { "result": null, "delivered": {} } ] }, { "about": "Lowering max stops nobody: the members stay, and nothing is added until the size is under it. The lead keeps its team tools while it has members.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "a", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "b", "role": "owns a part", "task": "Do the part." } }, { "op": "set", "max": 1 }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "c", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "a" ], "message": "Wrap up." } }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "all" } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "all" ], "message": "x" } }, { "op": "state" } ], "expect": [ { "result": "Added a (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Added b (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 4 agents.", "delivered": {} }, null, { "result": "The team is full: it has as many agents as the person allows (1). Give the work to a member already on it (team_send), or stop one (team_stop) first.", "delivered": {} }, { "result": "Sent to a.", "delivered": { "a": [ "[Team message from lead to a:]\nWrap up." ] } }, { "result": "Stopped a, b. The team is 1 of 1 agents.", "delivered": {} }, { "result": "The person allows one agent in this chat: there is no team. Do the work yourself.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" } ] ] }, { "about": "The model's capacity changed after the prompt was made: the tools answer one_request.", "start": { "min": 1, "max": 4, "capacity": { "parallel": 2 } }, "steps": [ { "op": "set", "capacity": { "single_session": true } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } } ], "expect": [ null, { "result": "This model serves one request at a time now, so there is no team. Do the work yourself.", "delivered": {} } ] }, { "about": "Names: the pattern, all, lead and a name already on the team are refused; the first member needs the goal.", "start": { "min": 1, "max": 8, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "Parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "all", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lead", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "9lives", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "role": "owns a part", "task": "Do the part." } } ], "expect": [ { "result": "Parser cannot be a name: use lowercase letters, digits and hyphens, beginning with a letter, at most 32 characters.", "delivered": {} }, { "result": "all addresses the whole team; it cannot be a name.", "delivered": {} }, { "result": "There is already an agent called lead in this team. Choose another name.", "delivered": {} }, { "result": "Say the team's goal in `goal`, in one line, with your first member: every member is told it.", "delivered": {} }, { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 8 agents.", "delivered": {} }, { "result": "There is already an agent called parser in this team. Choose another name.", "delivered": {} }, { "result": "9lives cannot be a name: use lowercase letters, digits and hyphens, beginning with a letter, at most 32 characters.", "delivered": {} }, { "result": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa cannot be a name: use lowercase letters, digits and hyphens, beginning with a letter, at most 32 characters.", "delivered": {} }, { "result": "Added aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 8 agents.", "delivered": {} } ] }, { "about": "Once it has a member, the lead does not do the work: writers and executors are refused, readers and the interact tools stay, and bash only for what the default rules allow.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "write", "args": {} }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "call", "by": "lead", "tool": "write", "args": {} }, { "op": "call", "by": "lead", "tool": "edit", "args": {} }, { "op": "call", "by": "lead", "tool": "multiedit", "args": {} }, { "op": "call", "by": "lead", "tool": "apply_patch", "args": {} }, { "op": "call", "by": "lead", "tool": "mkdir", "args": {} }, { "op": "call", "by": "lead", "tool": "mv", "args": {} }, { "op": "call", "by": "lead", "tool": "rm", "args": {} }, { "op": "call", "by": "lead", "tool": "skill_manage", "args": {} }, { "op": "call", "by": "lead", "tool": "python", "args": {} }, { "op": "call", "by": "lead", "tool": "commit", "args": {} }, { "op": "call", "by": "lead", "tool": "branch", "args": {} }, { "op": "call", "by": "lead", "tool": "pr", "args": {} }, { "op": "call", "by": "lead", "tool": "merge", "args": {} }, { "op": "call", "by": "lead", "tool": "tag", "args": {} }, { "op": "call", "by": "lead", "tool": "release", "args": {} }, { "op": "call", "by": "lead", "tool": "bash", "args": { "command": "git status" } }, { "op": "call", "by": "lead", "tool": "bash", "args": { "command": "cat README.md" } }, { "op": "call", "by": "lead", "tool": "bash", "args": { "command": "grep -r foo ." } }, { "op": "call", "by": "lead", "tool": "bash", "args": { "command": "npm test" } }, { "op": "call", "by": "lead", "tool": "bash", "args": { "command": "ls && rm -rf build" } }, { "op": "call", "by": "lead", "tool": "read", "args": {} }, { "op": "call", "by": "lead", "tool": "glob", "args": {} }, { "op": "call", "by": "lead", "tool": "grep", "args": {} }, { "op": "call", "by": "lead", "tool": "list", "args": {} }, { "op": "call", "by": "lead", "tool": "recall", "args": {} }, { "op": "call", "by": "lead", "tool": "web_fetch", "args": {} }, { "op": "call", "by": "lead", "tool": "ask_user", "args": {} }, { "op": "call", "by": "lead", "tool": "plan_write", "args": {} }, { "op": "call", "by": "lead", "tool": "memory", "args": {} }, { "op": "call", "by": "lead", "tool": "show", "args": {} }, { "op": "call", "by": "lead", "tool": "job_send", "args": {} }, { "op": "call", "by": "lead", "tool": "job_stop", "args": {} }, { "op": "call", "by": "lead", "tool": "task", "args": {} } ], "expect": [ { "result": null, "delivered": {} }, { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} }, { "result": null, "delivered": {} } ] }, { "about": "A subagent works; a sub-manager becomes a manager when one is placed under it; stopping them all makes the lead a worker again (min 1).", "start": { "min": 1, "max": 6, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "api", "tool": "edit", "args": {} }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "api", "tool": "edit", "args": {} }, { "op": "call", "by": "routes", "tool": "edit", "args": {} }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "all" } }, { "op": "call", "by": "lead", "tool": "edit", "args": {} } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": null, "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} }, { "result": null, "delivered": {} }, { "result": "Stopped api, routes. The team is 1 of 6 agents.", "delivered": {} }, { "result": null, "delivered": {} } ] }, { "about": "A finished member still makes its manager a manager: it can be woken.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "finish", "by": "parser", "reply": "Done." }, { "op": "call", "by": "lead", "tool": "write", "args": {} } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from parser to lead:]\nDone." ] } }, { "result": "You lead a team: give this to a member (team_add or team_send).", "delivered": {} } ] }, { "about": "A message to one name reaches that one only, under the message mark; the answer names who it went to.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lexer", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "parser", "tool": "team_send", "args": { "to": [ "lexer" ], "message": "I need a token for `=>`." } }, { "op": "call", "by": "lexer", "tool": "team_send", "args": { "to": [ "parser", "lead" ], "message": "Added; see src/lex.ts:40." } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "lexer", "lexer" ], "message": "Thanks." } } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Added lexer (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 4 agents.", "delivered": {} }, { "result": "Sent to lexer.", "delivered": { "lexer": [ "[Team message from parser to lexer:]\nI need a token for `=>`." ] } }, { "result": "Sent to parser, lead.", "delivered": { "parser": [ "[Team message from lexer to parser, lead:]\nAdded; see src/lex.ts:40." ], "lead": [ "[Team message from lexer to parser, lead:]\nAdded; see src/lex.ts:40." ] } }, { "result": "Sent to lexer.", "delivered": { "lexer": [ "[Team message from lead to lexer:]\nThanks." ] } } ] }, { "about": "all reaches everyone but the sender, across the tree; a message is addressed the same way to every recipient.", "start": { "min": 1, "max": 6, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "routes", "tool": "team_send", "args": { "to": [ "all" ], "message": "The API is frozen from now on." } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": "all", "message": "Stand-up: post your status." } } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 6 agents.", "delivered": {} }, { "result": "Sent to all.", "delivered": { "lead": [ "[Team message from routes to all:]\nThe API is frozen from now on." ], "api": [ "[Team message from routes to all:]\nThe API is frozen from now on." ], "web": [ "[Team message from routes to all:]\nThe API is frozen from now on." ] } }, { "result": "Sent to all.", "delivered": { "api": [ "[Team message from lead to all:]\nStand-up: post your status." ], "routes": [ "[Team message from lead to all:]\nStand-up: post your status." ], "web": [ "[Team message from lead to all:]\nStand-up: post your status." ] } } ] }, { "about": "Refused sends post nothing: an unknown name (the first), yourself, all with nobody else.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "all" ], "message": "Anyone?" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "parser", "ghost", "spook" ], "message": "x" } }, { "op": "call", "by": "parser", "tool": "team_send", "args": { "to": [ "parser" ], "message": "x" } }, { "op": "call", "by": "parser", "tool": "team_send", "args": { "to": [ "lead", "parser" ], "message": "x" } }, { "op": "call", "by": "lead", "tool": "team_read", "args": {} } ], "expect": [ { "result": "Nobody else is on the team yet: add a member with team_add.", "delivered": {} }, { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "No agent called ghost in this team. The team: lead, parser.", "delivered": {} }, { "result": "That is you: send it to someone else.", "delivered": {} }, { "result": "That is you: send it to someone else.", "delivered": {} }, { "room": [], "delivered": {} } ] }, { "about": "A manager is not sent its members' messages to each other; it reads them with team_read. A member sees what it sent and received; a sub-manager what touches its subtree; the lead all.", "start": { "min": 1, "max": 8, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "db", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "routes", "tool": "team_send", "args": { "to": [ "db" ], "message": "Which table?" } }, { "op": "call", "by": "db", "tool": "team_send", "args": { "to": [ "routes" ], "message": "users." } }, { "op": "call", "by": "web", "tool": "team_send", "args": { "to": [ "lead" ], "message": "Mock data ok?" } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "web" ], "message": "Yes." } }, { "op": "call", "by": "web", "tool": "team_send", "args": { "to": [ "routes" ], "message": "Path for login?" } }, { "op": "call", "by": "lead", "tool": "team_read", "args": {} }, { "op": "call", "by": "api", "tool": "team_read", "args": {} }, { "op": "call", "by": "db", "tool": "team_read", "args": {} }, { "op": "call", "by": "web", "tool": "team_read", "args": { "since": 3 } } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 8 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 8 agents.", "delivered": {} }, { "result": "Added db (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 8 agents.", "delivered": {} }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 5 of 8 agents.", "delivered": {} }, { "result": "Sent to db.", "delivered": { "db": [ "[Team message from routes to db:]\nWhich table?" ] } }, { "result": "Sent to routes.", "delivered": { "routes": [ "[Team message from db to routes:]\nusers." ] } }, { "result": "Sent to lead.", "delivered": { "lead": [ "[Team message from web to lead:]\nMock data ok?" ] } }, { "result": "Sent to web.", "delivered": { "web": [ "[Team message from lead to web:]\nYes." ] } }, { "result": "Sent to routes.", "delivered": { "routes": [ "[Team message from web to routes:]\nPath for login?" ] } }, { "room": [ { "n": 1, "from": "routes", "to": "db" }, { "n": 2, "from": "db", "to": "routes" }, { "n": 3, "from": "web", "to": "lead" }, { "n": 4, "from": "lead", "to": "web" }, { "n": 5, "from": "web", "to": "routes" } ], "delivered": {} }, { "room": [ { "n": 1, "from": "routes", "to": "db" }, { "n": 2, "from": "db", "to": "routes" }, { "n": 5, "from": "web", "to": "routes" } ], "delivered": {} }, { "room": [ { "n": 1, "from": "routes", "to": "db" }, { "n": 2, "from": "db", "to": "routes" } ], "delivered": {} }, { "room": [ { "n": 4, "from": "lead", "to": "web" }, { "n": 5, "from": "web", "to": "routes" } ], "delivered": {} } ] }, { "about": "A member's final reply is its report to its manager, under the report mark, and in the room; an empty one says so; a turn that ended at its limit says how.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "Ship the parser" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "lexer", "role": "owns a part", "task": "Do the part." } }, { "op": "finish", "by": "lead" }, { "op": "finish", "by": "parser", "reply": "The parser handles `=>`; tests in tests/parse.test.ts pass." }, { "op": "state" }, { "op": "finish", "by": "lexer", "reply": "", "reason": "steps" }, { "op": "call", "by": "lead", "tool": "team_read", "args": { "since": 0 } } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Added lexer (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 4 agents.", "delivered": {} }, { "delivered": {} }, { "delivered": { "lead": [ "[Team report from parser to lead:]\nThe parser handles `=>`; tests in tests/parse.test.ts pass." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "parser", "manager": "lead", "state": "finished" }, { "name": "lexer", "manager": "lead", "state": "working" } ], { "delivered": { "lead": [ "[Team report from lexer to lead:]\n(no report)\n\n[ended: steps]" ] } }, { "room": [ { "n": 1, "from": "parser", "to": "lead" }, { "n": 2, "from": "lexer", "to": "lead" } ], "delivered": {} } ] }, { "about": "A sub-manager's members report to it, not to the lead; its own final reply is its report to the lead.", "start": { "min": 1, "max": 5, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "goal": "The REST API", "parent": "api" } }, { "op": "finish", "by": "api", "reply": "" }, { "op": "state" }, { "op": "finish", "by": "routes", "reply": "Routes done." }, { "op": "state" }, { "op": "finish", "by": "api", "reply": "API done: routes by routes." } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 5 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 5 agents.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from api to lead:]\n(no report)" ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "api", "manager": "lead", "state": "finished" }, { "name": "routes", "manager": "api", "state": "working" } ], { "delivered": { "api": [ "[Team report from routes to api:]\nRoutes done." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "api", "manager": "lead", "state": "working" }, { "name": "routes", "manager": "api", "state": "finished" } ], { "delivered": { "lead": [ "[Team report from api to lead:]\nAPI done: routes by routes." ] } } ] }, { "about": "A message wakes a finished member with its context; its next final reply is its next report.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "finish", "by": "parser", "reply": "Done." }, { "op": "state" }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "parser" ], "message": "Also handle `<=`." } }, { "op": "state" }, { "op": "finish", "by": "parser", "reply": "Both done." } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from parser to lead:]\nDone." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "parser", "manager": "lead", "state": "finished" } ], { "result": "Sent to parser.", "delivered": { "parser": [ "[Team message from lead to parser:]\nAlso handle `<=`." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "parser", "manager": "lead", "state": "working" } ], { "delivered": { "lead": [ "[Team report from parser to lead:]\nBoth done." ] } } ] }, { "about": "A report wakes the idle lead.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "finish", "by": "lead" }, { "op": "state" }, { "op": "finish", "by": "parser", "reply": "Done." }, { "op": "state" } ], "expect": [ { "result": "Added parser (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "delivered": {} }, [ { "name": "lead", "manager": null, "state": "idle" }, { "name": "parser", "manager": "lead", "state": "working" } ], { "delivered": { "lead": [ "[Team report from parser to lead:]\nDone." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "parser", "manager": "lead", "state": "finished" } ] ] }, { "about": "Stopping is the main agent's: a subagent's team_stop is refused. Stopping a subagent stops its subtree; they leave the team, and their names are free again.", "start": { "min": 1, "max": 8, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "lead": true, "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "auth", "role": "owns a part", "task": "Do the part.", "parent": "routes" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "db", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "api", "tool": "team_stop", "args": { "name": "web" } }, { "op": "call", "by": "api", "tool": "team_stop", "args": { "name": "api" } }, { "op": "call", "by": "api", "tool": "team_stop", "args": { "name": "ghost" } }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "routes" } }, { "op": "state" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "auth", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "all" } }, { "op": "state" }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "all" } } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 8 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 8 agents.", "delivered": {} }, { "result": "Added auth (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 8 agents.", "delivered": {} }, { "result": "Added db (owns a part): it is working. Its report comes to you when it finishes. The team is 5 of 8 agents.", "delivered": {} }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 6 of 8 agents.", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Stopped routes, auth. The team is 4 of 8 agents.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "api", "manager": "lead", "state": "working" }, { "name": "db", "manager": "api", "state": "working" }, { "name": "web", "manager": "lead", "state": "working" } ], { "result": "Added auth (owns a part): it is working. Its report comes to you when it finishes. The team is 5 of 8 agents.", "delivered": {} }, { "result": "Stopped api, db, auth, web. The team is 1 of 8 agents.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" } ], { "result": "No member is under you: there is nobody to stop.", "delivered": {} } ] }, { "about": "A member the person stopped is said to the lead in a note, with those under it.", "start": { "min": 1, "max": 6, "capacity": {} }, "steps": [ { "op": "user" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "finish", "by": "lead" }, { "op": "person_stop", "name": "api" }, { "op": "user" }, { "op": "state" } ], "expect": [ { "note": "\nThe team may have 1 to 6 agents, you included.\n" }, { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "delivered": {} }, null, { "note": "\nThe person stopped api, routes; they have left the team.\n" }, [ { "name": "lead", "manager": null, "state": "working" } ] ] }, { "about": "Past the model's parallel capacity a member waits for a slot; slots free in order as turns end; the lead goes first.", "start": { "min": 1, "max": 6, "capacity": { "parallel": 2 } }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "a", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "b", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "c", "role": "owns a part", "task": "Do the part." } }, { "op": "state" }, { "op": "finish", "by": "lead" }, { "op": "state" }, { "op": "finish", "by": "a", "reply": "a done" }, { "op": "state" }, { "op": "finish", "by": "b", "reply": "b done" }, { "op": "state" } ], "expect": [ { "result": "Added a (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added b (owns a part): it waits for a free slot — the model serves 2 requests at once and all are busy — and starts when one frees. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Added c (owns a part): it waits for a free slot — the model serves 2 requests at once and all are busy — and starts when one frees. Its report comes to you when it finishes. The team is 4 of 6 agents.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "a", "manager": "lead", "state": "working" }, { "name": "b", "manager": "lead", "state": "waiting" }, { "name": "c", "manager": "lead", "state": "waiting" } ], { "delivered": {} }, [ { "name": "lead", "manager": null, "state": "idle" }, { "name": "a", "manager": "lead", "state": "working" }, { "name": "b", "manager": "lead", "state": "working" }, { "name": "c", "manager": "lead", "state": "waiting" } ], { "delivered": { "lead": [ "[Team report from a to lead:]\na done" ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "a", "manager": "lead", "state": "finished" }, { "name": "b", "manager": "lead", "state": "working" }, { "name": "c", "manager": "lead", "state": "waiting" } ], { "delivered": { "lead": [ "[Team report from b to lead:]\nb done" ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "a", "manager": "lead", "state": "finished" }, { "name": "b", "manager": "lead", "state": "finished" }, { "name": "c", "manager": "lead", "state": "working" } ] ] }, { "about": "A stopped member's slot goes to the next waiting one; a waiting member that is stopped leaves the queue.", "start": { "min": 1, "max": 6, "capacity": { "parallel": 2 } }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "a", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "b", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "c", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "b" } }, { "op": "state" }, { "op": "call", "by": "lead", "tool": "team_stop", "args": { "name": "a" } }, { "op": "state" } ], "expect": [ { "result": "Added a (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added b (owns a part): it waits for a free slot — the model serves 2 requests at once and all are busy — and starts when one frees. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Added c (owns a part): it waits for a free slot — the model serves 2 requests at once and all are busy — and starts when one frees. Its report comes to you when it finishes. The team is 4 of 6 agents.", "delivered": {} }, { "result": "Stopped b. The team is 3 of 6 agents.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "a", "manager": "lead", "state": "working" }, { "name": "c", "manager": "lead", "state": "waiting" } ], { "result": "Stopped a. The team is 2 of 6 agents.", "delivered": {} }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "c", "manager": "lead", "state": "working" } ] ] }, { "about": "A message to a finished member while the model is full: it waits for a slot.", "start": { "min": 1, "max": 6, "capacity": { "parallel": 2 } }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "a", "role": "owns a part", "task": "Do the part.", "goal": "G" } }, { "op": "finish", "by": "a", "reply": "done" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "b", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "a" ], "message": "One more thing." } }, { "op": "state" }, { "op": "finish", "by": "b", "reply": "b done" }, { "op": "state" } ], "expect": [ { "result": "Added a (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from a to lead:]\ndone" ] } }, { "result": "Added b (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Sent to a.", "delivered": { "a": [ "[Team message from lead to a:]\nOne more thing." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "a", "manager": "lead", "state": "waiting" }, { "name": "b", "manager": "lead", "state": "working" } ], { "delivered": { "lead": [ "[Team report from b to lead:]\nb done" ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "a", "manager": "lead", "state": "working" }, { "name": "b", "manager": "lead", "state": "finished" } ] ] }, { "about": "Spec 3.4.0: only the main agent adds, assigns, replaces, stops and decides; a subagent's call to any of them, or to task, is refused with one text.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "api", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "api", "tool": "team_assign", "args": { "name": "api", "task": "x" } }, { "op": "call", "by": "api", "tool": "team_replace", "args": { "name": "api" } }, { "op": "call", "by": "api", "tool": "team_stop", "args": { "name": "all" } }, { "op": "call", "by": "api", "tool": "team_decide", "args": { "id": "r1", "allow": true } }, { "op": "call", "by": "api", "tool": "task", "args": { "prompt": "x" } }, { "op": "tree" } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "result": "Only the main agent adds, assigns, replaces and stops subagents: ask it (team_send to lead).", "delivered": {} }, { "size": 2, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] } ], "ended": [] } ] }, { "about": "Spec 3.4.0: a subagent is placed under a sub-manager with parent; parent must be one (lead: true), and the size still counts the whole tree.", "start": { "min": 1, "max": 6, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "auth", "role": "owns a part", "task": "Do the part.", "parent": "routes" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "auth", "role": "owns a part", "task": "Do the part.", "parent": "ghost" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parent", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "routes", "tool": "team_send", "args": { "to": [ "parent" ], "message": "Routes are in." } }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "parent" ], "message": "Hello?" } }, { "op": "finish", "by": "routes", "reply": "Routes done." }, { "op": "tree" } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "routes is not a sub-manager: place a subagent under the main agent (lead) or under one added with lead: true.", "delivered": {} }, { "result": "No agent called ghost in this team. The team: lead, api, routes.", "delivered": {} }, { "result": "There is already an agent called parent in this team. Choose another name.", "delivered": {} }, { "result": "Sent to api.", "delivered": { "api": [ "[Team message from routes to api:]\nRoutes are in." ] } }, { "result": "You are the main agent: you have no parent.", "delivered": {} }, { "delivered": { "api": [ "[Team report from routes to api:]\nRoutes done." ] } }, { "size": 3, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] }, { "id": "s2", "name": "routes", "parent": "api", "state": "finished", "mode": "edit", "request": [] } ], "ended": [] } ] }, { "about": "Spec 3.4.0: Min above 1 opens min − 1 slots from the start of the reply; each subagent added fills one, and the note says how many the person opened.", "start": { "min": 3, "max": 4, "capacity": {} }, "steps": [ { "op": "user" }, { "op": "tree" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "goal": "Ship v2" } }, { "op": "tree" }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "docs", "role": "owns a part", "task": "Do the part." } }, { "op": "tree" } ], "expect": [ { "note": "\nThe team may have 3 to 4 agents, you included.\nWork through subagents from the start: you lead, and they do the work. The person opened 2 slots for them: fill them with team_add.\n" }, { "size": 1, "open_slots": 2, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] } ], "ended": [] }, { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "size": 2, "open_slots": 1, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] } ], "ended": [] }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 4 agents.", "delivered": {} }, { "result": "Added docs (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 4 agents.", "delivered": {} }, { "size": 4, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] }, { "id": "s2", "name": "web", "parent": "lead", "state": "working", "mode": "edit", "request": [] }, { "id": "s3", "name": "docs", "parent": "lead", "state": "working", "mode": "edit", "request": [] } ], "ended": [] } ] }, { "about": "Spec 3.4.0: a subagent's mode is its parent's or stricter; request options only with a stricter one; a main agent made stricter reaches down the tree.", "start": { "min": 1, "max": 6, "capacity": {}, "mode": "edit" }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2", "mode": "auto" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "mode": "manual", "request": [ "write" ], "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api", "mode": "edit", "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api", "mode": "plan", "request": [ "execute" ], "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part.", "request": [ "write" ], "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part.", "goal": "Ship v2" } }, { "op": "tree" }, { "op": "main_mode", "mode": "manual" }, { "op": "tree" } ], "expect": [ { "result": "A subagent's mode cannot be looser than its parent's (edit).", "delivered": {} }, { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "A subagent's mode cannot be looser than its parent's (manual).", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Request options go with a mode stricter than the parent's: without one there is nothing to ask for.", "delivered": {} }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 6 agents.", "delivered": {} }, { "size": 4, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "manual", "request": [ "write" ] }, { "id": "s2", "name": "routes", "parent": "api", "state": "working", "mode": "plan", "request": [ "execute" ] }, { "id": "s3", "name": "web", "parent": "lead", "state": "working", "mode": "edit", "request": [] } ], "ended": [] }, null, { "size": 4, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "manual", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "manual", "request": [ "write" ] }, { "id": "s2", "name": "routes", "parent": "api", "state": "working", "mode": "plan", "request": [ "execute" ] }, { "id": "s3", "name": "web", "parent": "lead", "state": "working", "mode": "manual", "request": [] } ], "ended": [] } ] }, { "about": "Spec 3.4.0: team_whoami says who the caller is, its mode and request options, its limits and its context use; the main agent has no parent or task line.", "start": { "min": 1, "max": 4, "capacity": {}, "mode": "edit" }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "parser", "role": "reviews the parser", "task": "Review src/parse.ts.\nReport what is wrong.", "goal": "Ship v2", "mode": "manual", "request": [ "write" ] } }, { "op": "context", "by": "parser", "used": 1000, "window": 4000 }, { "op": "call", "by": "parser", "tool": "team_whoami", "args": {} }, { "op": "call", "by": "lead", "tool": "team_whoami", "args": {} } ], "expect": [ { "result": "Added parser (reviews the parser): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, null, { "result": "You are parser (s1): reviews the parser.\nYour parent: lead.\nYour task: Review src/parse.ts.\nYour mode: manual.\nYou may ask the main agent for: write (team_request).\nYour model: m.\nLimits: the team is 2 of 4 agents; at most 50 steps a turn; only the main agent adds subagents.\nContext: 1000 of 4000 tokens (25%).", "delivered": {} }, { "result": "You are lead (lead): the main agent.\nYour mode: edit.\nYour model: m.\nLimits: the team is 2 of 4 agents; at most 200 steps a turn; you add subagents.", "delivered": {} } ] }, { "about": "Spec 3.4.0: team_finish reports to the parent and ends the subagent: it leaves the size, its name is free again with a new id, and it stays in the tree's ended list.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "goal": "Ship v2" } }, { "op": "call", "by": "api", "tool": "team_finish", "args": { "report": "All done: see src/api.ts:12." } }, { "op": "tree" }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "api" ], "message": "One more thing." } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part." } }, { "op": "tree" } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Reported to lead. Your task is done: stop here.", "delivered": { "lead": [ "[Team report from api to lead:]\nAll done: see src/api.ts:12." ] } }, { "size": 1, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] } ], "ended": [ { "id": "s1", "name": "api", "state": "done" } ] }, { "result": "No agent called api in this team. The team: lead.", "delivered": {} }, { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "size": 2, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s2", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] } ], "ended": [ { "id": "s1", "name": "api", "state": "done" } ] } ] }, { "about": "Spec 3.4.0: findings are kept beyond an agent's end; the agent, the subagents above it and the main agent read them; nobody else.", "start": { "min": 1, "max": 6, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part." } }, { "op": "call", "by": "routes", "tool": "team_findings", "args": { "action": "write", "text": "Login is POST /session." } }, { "op": "call", "by": "routes", "tool": "team_findings", "args": { "action": "write", "text": "Tokens expire after 1h." } }, { "op": "call", "by": "routes", "tool": "team_findings", "args": { "action": "read" } }, { "op": "call", "by": "api", "tool": "team_findings", "args": { "action": "read", "of": "routes" } }, { "op": "call", "by": "web", "tool": "team_findings", "args": { "action": "read", "of": "routes" } }, { "op": "call", "by": "web", "tool": "team_findings", "args": { "action": "read" } }, { "op": "call", "by": "routes", "tool": "team_finish", "args": { "report": "Done." } }, { "op": "call", "by": "lead", "tool": "team_findings", "args": { "action": "read", "of": "s2" } } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 6 agents.", "delivered": {} }, { "result": "Noted (finding 1).", "delivered": {} }, { "result": "Noted (finding 2).", "delivered": {} }, { "result": "Findings of routes (s2):\n1. Login is POST /session.\n2. Tokens expire after 1h.", "delivered": {} }, { "result": "Findings of routes (s2):\n1. Login is POST /session.\n2. Tokens expire after 1h.", "delivered": {} }, { "result": "You may read only your own findings and those of the subagents under you.", "delivered": {} }, { "result": "Findings of web (s3):\n(no findings)", "delivered": {} }, { "result": "Reported to api. Your task is done: stop here.", "delivered": { "api": [ "[Team report from routes to api:]\nDone." ] } }, { "result": "Findings of routes (s2):\n1. Login is POST /session.\n2. Tokens expire after 1h.", "delivered": {} } ] }, { "about": "Spec 3.4.0: when a subagent's context fills it is paused and given one final turn; a message to it then stays in the room; when that turn ends it is out of context and its parent gets the notice and its last reply as its report. The main agent replaces it: the same name and position, a new id, briefed with the task and the findings.", "start": { "min": 1, "max": 4, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Write the API.", "goal": "Ship v2" } }, { "op": "call", "by": "api", "tool": "team_findings", "args": { "action": "write", "text": "Half the routes are done." } }, { "op": "context_full", "by": "api" }, { "op": "state" }, { "op": "call", "by": "lead", "tool": "team_send", "args": { "to": [ "api" ], "message": "How far?" } }, { "op": "finish", "by": "api", "reply": "Saved; the rest is the auth routes." }, { "op": "tree" }, { "op": "call", "by": "lead", "tool": "team_replace", "args": { "name": "api" } }, { "op": "started", "by": "api" }, { "op": "tree" } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "Noted (finding 1).", "delivered": {} }, { "delivered": { "api": [ "[Team notice to api: your context is full]\nSave what you found with team_findings, then tell your parent with team_send that you are gone and what is left undone. This is your last turn: at most 8 steps." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "api", "manager": "lead", "state": "paused" } ], { "result": "Sent to api.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from api to lead:]\napi (s1) ran out of context and has ended. Its findings: team_findings with of api.\n\nSaved; the rest is the auth routes." ] } }, { "size": 1, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] } ], "ended": [ { "id": "s1", "name": "api", "state": "out_of_context" } ] }, { "result": "Replaced api: s2 takes its place, briefed with its task and findings. The team is 2 of 4 agents.", "delivered": {} }, { "text": "Write the API.\n\nYou take over from api (s1), which ended. What it found:\n1. Half the routes are done." }, { "size": 2, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s2", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] } ], "ended": [ { "id": "s1", "name": "api", "state": "out_of_context" } ] } ] }, { "about": "Spec 3.4.0: a narrowed subagent asks the main agent with team_request (only for a kind in its options); the main agent decides once, and the subagent is told under the decision mark.", "start": { "min": 1, "max": 4, "capacity": {}, "mode": "auto" }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "ops", "role": "owns a part", "task": "Do the part.", "goal": "Ship v2", "mode": "edit", "request": [ "execute" ] } }, { "op": "call", "by": "ops", "tool": "team_request", "args": { "tool": "edit", "pattern": "src/a.ts", "why": "to fix it" } }, { "op": "call", "by": "ops", "tool": "team_request", "args": { "tool": "bash", "pattern": "git push *", "why": "to publish the branch" } }, { "op": "call", "by": "lead", "tool": "team_decide", "args": { "id": "r1", "allow": true, "note": "Only to origin." } }, { "op": "call", "by": "lead", "tool": "team_decide", "args": { "id": "r1", "allow": false } }, { "op": "call", "by": "ops", "tool": "team_request", "args": { "tool": "bash", "pattern": "rm -rf build", "why": "clean" } }, { "op": "call", "by": "lead", "tool": "team_decide", "args": { "id": "r2", "allow": false } } ], "expect": [ { "result": "Added ops (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 4 agents.", "delivered": {} }, { "result": "You may not ask for edit: your request options are execute.", "delivered": {} }, { "result": "Asked the main agent (r1): you are told its decision. Carry on with what you can meanwhile.", "delivered": { "lead": [ "[Team request r1 from ops to lead:]\nbash git push * — to publish the branch" ] } }, { "result": "Allowed r1 for ops.", "delivered": { "ops": [ "[Team decision on r1 from lead to ops:]\nAllowed: bash git push *. Try it again now.\n\nOnly to origin." ] } }, { "result": "No open request r1.", "delivered": {} }, { "result": "Asked the main agent (r2): you are told its decision. Carry on with what you can meanwhile.", "delivered": { "lead": [ "[Team request r2 from ops to lead:]\nbash rm -rf build — clean" ] } }, { "result": "Refused r2 for ops.", "delivered": { "ops": [ "[Team decision on r2 from lead to ops:]\nRefused: bash rm -rf build." ] } } ] }, { "about": "Spec 3.4.0: team_assign gives a subagent new work (it is told, and woken), may move it under another sub-manager, never under its own subtree, and never to one that ended.", "start": { "min": 1, "max": 6, "capacity": {} }, "steps": [ { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "api", "role": "owns a part", "task": "Do the part.", "lead": true, "goal": "Ship v2" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "routes", "role": "owns a part", "task": "Do the part.", "lead": true, "parent": "api" } }, { "op": "call", "by": "lead", "tool": "team_add", "args": { "name": "web", "role": "owns a part", "task": "Do the part." } }, { "op": "finish", "by": "web", "reply": "Web done." }, { "op": "call", "by": "lead", "tool": "team_assign", "args": { "name": "web", "task": "Now the docs.", "role": "writes the docs" } }, { "op": "state" }, { "op": "call", "by": "lead", "tool": "team_assign", "args": { "name": "api", "task": "x", "parent": "routes" } }, { "op": "call", "by": "lead", "tool": "team_assign", "args": { "name": "web", "task": "x", "parent": "routes", "mode": "auto" } }, { "op": "call", "by": "lead", "tool": "team_assign", "args": { "name": "web", "task": "Help with routes.", "parent": "routes" } }, { "op": "call", "by": "web", "tool": "team_finish", "args": { "report": "ok" } }, { "op": "call", "by": "lead", "tool": "team_assign", "args": { "name": "web", "task": "again" } }, { "op": "tree" } ], "expect": [ { "result": "Added api (owns a part): it is working. Its report comes to you when it finishes. The team is 2 of 6 agents.", "delivered": {} }, { "result": "Added routes (owns a part): it is working. Its report comes to you when it finishes. The team is 3 of 6 agents.", "delivered": {} }, { "result": "Added web (owns a part): it is working. Its report comes to you when it finishes. The team is 4 of 6 agents.", "delivered": {} }, { "delivered": { "lead": [ "[Team report from web to lead:]\nWeb done." ] } }, { "result": "Assigned to web: it is told now.", "delivered": { "web": [ "[Team assignment from lead to web:]\nNow the docs." ] } }, [ { "name": "lead", "manager": null, "state": "working" }, { "name": "api", "manager": "lead", "state": "working" }, { "name": "routes", "manager": "api", "state": "working" }, { "name": "web", "manager": "lead", "state": "working" } ], { "result": "api cannot go under routes: that is under it.", "delivered": {} }, { "result": "A subagent's mode cannot be looser than its parent's (edit).", "delivered": {} }, { "result": "Assigned to web: it is told now.", "delivered": { "web": [ "[Team assignment from lead to web:]\nHelp with routes." ] } }, { "result": "Reported to routes. Your task is done: stop here.", "delivered": { "routes": [ "[Team report from web to routes:]\nok" ] } }, { "result": "web has ended: replace it (team_replace) or add another.", "delivered": {} }, { "size": 3, "open_slots": 0, "agents": [ { "id": "lead", "name": "lead", "parent": null, "state": "working", "mode": "edit", "request": [] }, { "id": "s1", "name": "api", "parent": "lead", "state": "working", "mode": "edit", "request": [] }, { "id": "s2", "name": "routes", "parent": "api", "state": "working", "mode": "edit", "request": [] } ], "ended": [ { "id": "s3", "name": "web", "state": "done" } ] } ] } ] }