TapCanvas agents-team
Enable general multi-agent team mode via spawn_agent/wait tools. Supports orchestrator, worker, reviewer, research, writer, and editor roles.
install
source · Clone the upstream repo
git clone https://github.com/anymouschina/TapCanvas
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/anymouschina/TapCanvas "$T" && mkdir -p ~/.claude/skills && cp -r "$T/apps/agents-cli/skills/agents-team" ~/.claude/skills/anymouschina-tapcanvas-agents-team && rm -rf "$T"
manifest:
apps/agents-cli/skills/agents-team/SKILL.mdsource content
agents-team
This Skill enables general agents team mode. It is disabled by default and only becomes available after you load this Skill.
Principles
- Only use multi-agent tools when the user explicitly requests team mode, or after this Skill is loaded.
- Always explicitly declare roles by using
:agent_type
: plan, delegate, and merge.orchestrator
: implement a bounded code or execution task.worker
: do a read-only audit for bugs, regressions, or missing checks.reviewer
: summarize sources / produce supporting material.research
: draft a section or structured artifact.writer
: unify voice, tighten structure, fix inconsistencies.editor
- Keep each sub-agent task well-scoped and output-oriented.
- Prefer parallel delegation only for independent work. If one result determines the next step, do not parallelize.
- Use
andlist_agents
to observe real team state instead of assuming progress.wait - When you need to reference a specific dispatched task, track the returned
, not only thesubmission_id
.agent_id - Use
only when the child genuinely needs the current conversation context; otherwise keep prompts tighter.fork_context: true - Team children inherit the parent runtime grant for tools/filesystem/network, but runtime strips further subagent spawning (
/ legacyspawn_agent
).Task - Do not add blanket constraints like “不要调用任何工具” unless the task truly requires it; role prompts are soft guidance, runtime grant is the hard boundary.
Tools (available only after this Skill is loaded)
->spawn_agent({ agent_type, prompt, description?, fork_context? }){ agent_id, submission_id }
-> agent statuses + submission statuses/previewswait({ ids, timeout_ms? })
-> queue more work for that agent and return a newsend_input({ id, prompt, interrupt? })submission_id
-> reopen a closed agent so it can receive future workresume_agent({ id })close_agent({ id })list_agents()
Recommended Workflow (General Team)
- Orchestrator determines whether the next step is read-only exploration, implementation, review, or synthesis.
- Spawn only the agents that materially reduce wall-clock time.
for the blocking agents before the next dependent step.wait- If implementation happened, run a
or explicit verification pass before finalizing.reviewer - Final answer: one merged result with evidence, changed files, or findings as appropriate.
Lifecycle Notes
only stops future queued work. It does not kill in-flight execution.close_agent
is for reopening a previously closed agent, not for rewinding history.resume_agent
is reserved but not yet implemented as a real preemption primitive. If the target agent is still busy, the tool should fail explicitly instead of pretending success.interrupt: true- If you pass
totask_id
and that task is already owned by the current parent agent, runtime will drop the duplicate child binding. If another owner already holds it,spawn_agent
fails explicitly and you should retry withoutspawn_agent
when you only need an unbound helper.task_id
Prompt Template
Use this exact structure when delegating:
- Context: target audience, constraints, length, tone
- Deliverable: what to output, format requirements
- Must include: bullet list of required points
- Must avoid: banned content / style