GPU Development Team
Create an agent team for the following task:
Task: $ARGUMENTS
Team structure
The team has five roles:
gpu-coordinator — Team lead. Decomposes the task, spawns the four specialists, assigns work, resolves cross-cutting issues, and runs final just check before declaring complete.
syskit-specialist — Specification documentation. Keeps requirement, interface, design, and verification docs under doc/ in sync with what the team implements. Updates Spec-ref hashes and maintains traceability.
verilog-specialist — SystemVerilog RTL implementation. Works on rtl/components/*/src/ modules. Reads the digital twin first, then implements RTL to match it bit-exactly. Follows .claude/skills/claude-skill-verilog/SKILL.md and .claude/skills/ecp5-sv-yosys-verilator/SKILL.md.
rust-twin-specialist — Digital twin implementation. Works on twin/components/*/ crates and integration/gs-twin-srs/. Implements the bit-accurate algorithm in Rust first. Follows .claude/skills/claude-skill-rust/SKILL.md. Generates expected outputs for verification.
verification-specialist — Verilator testbenches and synthesis validation. Works on rtl/components/*/tests/ and rtl/tb/. Compares RTL output against twin output using shared .hex stimulus. Follows .claude/skills/claude-skill-cpp/SKILL.md.
Spawning responsibility
The caller spawns all five agents. The coordinator does not spawn anyone.
This is deliberate: the gpu-coordinator subagent's toolset does not reliably expose the Agent tool, so coordinator-driven spawning silently fails. Caller-driven spawning is the only pattern that works.
Caller (top-level Claude that invoked this skill):
- Call
TeamCreate to create the team.
- Spawn all five agents via the
Agent tool, each with team_name set to the team name:
name: "coordinator", subagent_type: "gpu-coordinator"
name: "twin", subagent_type: "rust-twin-specialist"
name: "rtl", subagent_type: "verilog-specialist"
name: "verif", subagent_type: "verification-specialist"
name: "syskit", subagent_type: "syskit-specialist"
Each specialist's initial prompt must end with: "On first wakeup, send a one-line plain-text ack to coordinator (e.g. rtl ready) before doing anything else. Then wait for your assignment."
- After spawning, use the
Read tool on .claude/teams/<team-name>/config.json and confirm all five names appear in members. Any missing name means the Agent call failed — retry it before proceeding.
- Send the coordinator a briefing message describing the task, the approved in-scope work, and any flagged-only items. The coordinator will dispatch specialists once acks arrive.
Coordinator (once spawned):
- Read relevant specs and decompose the task. Do not attempt to spawn agents — the caller has already done that.
- Wait for each specialist to send a plain-text ack before dispatching assignments. If an expected ack is missing after your next turn, escalate to the caller (they may need to respawn).
- Dispatch assignment messages via
SendMessage. Monitor progress, unblock specialists, run final just check, and report back to the caller.
Spawn mechanics — read this carefully
These rules exist because silent failures here are the #1 way this skill wastes a session.
- Only the caller calls
Agent to spawn. The coordinator must not attempt it.
SendMessage does NOT spawn agents. It only writes to an inbox file. Sending a message to a name that was never spawned via Agent is a silent no-op — the message sits in an orphan inbox and nothing reads it. Do not rely on "message sent" as evidence that the recipient exists.
- Verify membership with
Read, not Bash. Use the Read tool on .claude/teams/<team-name>/config.json. Do not shell out with cat/jq/python3 — those trigger permission prompts that can stall the session.
- Spawn before message. Never send an assignment message to a specialist that is not present in
config.json.
Idle discipline for the coordinator
- Do not go idle immediately after dispatching inbox messages. "Messages sent" is not progress.
- Never end a turn on a failed or denied tool call. If a tool call is denied, errors, or stalls (permission prompt, missing tool, unexpected result), your very next action in the same turn must be a concrete progress step — usually a
Read, a SendMessage, or an escalation to the caller describing what's blocked. Do not go idle right after a failure.
- Only go idle when one of the following is true:
- All spawned specialists have acknowledged AND work is actively in flight (you are waiting on a named specialist's reply).
- You are blocked on the caller for a decision and have already asked the caller a specific question.
- Work is complete and you have reported the final result to the caller.
- If you catch yourself about to go idle without progress, instead: re-check
config.json via Read, re-check inboxes, and take the next concrete action (re-send a prompt, ask the caller to respawn a missing specialist, or escalate).
Workflow
The team follows this order:
- Coordinator reads relevant specs (
doc/design/, pipeline/pipeline.yaml, ARCHITECTURE.md) and decomposes the task
- Rust-twin-specialist implements or updates the twin algorithm (this defines the expected behavior)
- Verilog-specialist implements RTL to match the twin (can start in parallel if the twin interface is stable)
- Verification-specialist writes testbenches and runs RTL-vs-twin comparison
- Syskit-specialist updates docs under
doc/ to reflect what was implemented, stamps Spec-ref hashes
- Coordinator runs
just check and confirms all tests pass
Rules
- The digital twin is the authoritative algorithm spec — RTL must match it
- Shared
.hex stimulus files feed both twin and RTL testbenches
pipeline/pipeline.yaml must be updated before adding new pipeline units
- All code must pass
just check (Verilator lint, cargo fmt, cargo check, cargo clippy)
- The syskit-specialist keeps docs in sync with implementation — no formal syskit workflow needed
- The caller owns spawning; the coordinator owns dispatch, monitoring, and the final
just check
- The coordinator must obey the idle-discipline rules above — never end a turn on a denied/failed tool call, and never go idle without progress
1---2name: gpu-team3description: Spawn a four-person GPU development team with coordinator, verilog specialist, rust digital twin specialist, and verification specialist. Use when a task benefits from parallel RTL + twin + verification work.4---56# GPU Development Team78Create an agent team for the following task:910**Task:** $ARGUMENTS1112## Team structure1314The team has five roles:15161. **gpu-coordinator** — Team lead. Decomposes the task, spawns the four specialists, assigns work, resolves cross-cutting issues, and runs final `just check` before declaring complete.17182. **syskit-specialist** — Specification documentation. Keeps requirement, interface, design, and verification docs under `doc/` in sync with what the team implements. Updates Spec-ref hashes and maintains traceability.19203. **verilog-specialist** — SystemVerilog RTL implementation. Works on `rtl/components/*/src/` modules. Reads the digital twin first, then implements RTL to match it bit-exactly. Follows `.claude/skills/claude-skill-verilog/SKILL.md` and `.claude/skills/ecp5-sv-yosys-verilator/SKILL.md`.21224. **rust-twin-specialist** — Digital twin implementation. Works on `twin/components/*/` crates and `integration/gs-twin-srs/`. Implements the bit-accurate algorithm in Rust first. Follows `.claude/skills/claude-skill-rust/SKILL.md`. Generates expected outputs for verification.23245. **verification-specialist** — Verilator testbenches and synthesis validation. Works on `rtl/components/*/tests/` and `rtl/tb/`. Compares RTL output against twin output using shared `.hex` stimulus. Follows `.claude/skills/claude-skill-cpp/SKILL.md`.2526## Spawning responsibility2728**The caller spawns all five agents.** The coordinator does not spawn anyone.2930This is deliberate: the gpu-coordinator subagent's toolset does not reliably expose the `Agent` tool, so coordinator-driven spawning silently fails. Caller-driven spawning is the only pattern that works.3132**Caller (top-level Claude that invoked this skill):**33341. Call `TeamCreate` to create the team.352. Spawn all five agents via the `Agent` tool, each with `team_name` set to the team name:36 - `name: "coordinator"`, `subagent_type: "gpu-coordinator"`37 - `name: "twin"`, `subagent_type: "rust-twin-specialist"`38 - `name: "rtl"`, `subagent_type: "verilog-specialist"`39 - `name: "verif"`, `subagent_type: "verification-specialist"`40 - `name: "syskit"`, `subagent_type: "syskit-specialist"`41 Each specialist's initial prompt must end with: *"On first wakeup, send a one-line plain-text ack to `coordinator` (e.g. `rtl ready`) before doing anything else. Then wait for your assignment."*423. After spawning, use the `Read` tool on `.claude/teams/<team-name>/config.json` and confirm all five names appear in `members`. Any missing name means the `Agent` call failed — retry it before proceeding.434. Send the coordinator a briefing message describing the task, the approved in-scope work, and any flagged-only items. The coordinator will dispatch specialists once acks arrive.4445**Coordinator (once spawned):**46471. Read relevant specs and decompose the task. Do not attempt to spawn agents — the caller has already done that.482. Wait for each specialist to send a plain-text ack before dispatching assignments. If an expected ack is missing after your next turn, escalate to the caller (they may need to respawn).493. Dispatch assignment messages via `SendMessage`. Monitor progress, unblock specialists, run final `just check`, and report back to the caller.5051## Spawn mechanics — read this carefully5253These rules exist because silent failures here are the #1 way this skill wastes a session.5455- **Only the caller calls `Agent` to spawn.** The coordinator must not attempt it.56- **`SendMessage` does NOT spawn agents.** It only writes to an inbox file. Sending a message to a name that was never spawned via `Agent` is a silent no-op — the message sits in an orphan inbox and nothing reads it. Do not rely on "message sent" as evidence that the recipient exists.57- **Verify membership with `Read`, not `Bash`.** Use the `Read` tool on `.claude/teams/<team-name>/config.json`. Do not shell out with `cat`/`jq`/`python3` — those trigger permission prompts that can stall the session.58- **Spawn before message.** Never send an assignment message to a specialist that is not present in `config.json`.5960## Idle discipline for the coordinator6162- Do **not** go idle immediately after dispatching inbox messages. "Messages sent" is not progress.63- **Never end a turn on a failed or denied tool call.** If a tool call is denied, errors, or stalls (permission prompt, missing tool, unexpected result), your very next action in the same turn must be a concrete progress step — usually a `Read`, a `SendMessage`, or an escalation to the caller describing what's blocked. Do not go idle right after a failure.64- Only go idle when one of the following is true:65 - All spawned specialists have acknowledged AND work is actively in flight (you are waiting on a named specialist's reply).66 - You are blocked on the caller for a decision and have already asked the caller a specific question.67 - Work is complete and you have reported the final result to the caller.68- If you catch yourself about to go idle without progress, instead: re-check `config.json` via `Read`, re-check inboxes, and take the next concrete action (re-send a prompt, ask the caller to respawn a missing specialist, or escalate).6970## Workflow7172The team follows this order:73741. **Coordinator** reads relevant specs (`doc/design/`, `pipeline/pipeline.yaml`, `ARCHITECTURE.md`) and decomposes the task752. **Rust-twin-specialist** implements or updates the twin algorithm (this defines the expected behavior)763. **Verilog-specialist** implements RTL to match the twin (can start in parallel if the twin interface is stable)774. **Verification-specialist** writes testbenches and runs RTL-vs-twin comparison785. **Syskit-specialist** updates docs under `doc/` to reflect what was implemented, stamps Spec-ref hashes796. **Coordinator** runs `just check` and confirms all tests pass8081## Rules8283- The digital twin is the authoritative algorithm spec — RTL must match it84- Shared `.hex` stimulus files feed both twin and RTL testbenches85- `pipeline/pipeline.yaml` must be updated before adding new pipeline units86- All code must pass `just check` (Verilator lint, cargo fmt, cargo check, cargo clippy)87- The syskit-specialist keeps docs in sync with implementation — no formal syskit workflow needed88- The caller owns spawning; the coordinator owns dispatch, monitoring, and the final `just check`89- The coordinator must obey the idle-discipline rules above — never end a turn on a denied/failed tool call, and never go idle without progress