| name | cocos-agent-team |
| description | Orchestrator for the 4-agent Cocos Creator 3.8.x playable production team. Use this skill when the user wants to build a complete playable end-to-end, kick off the agent pipeline, coordinate all 4 roles (design, cocos-engineer, typescript-dev, qa-tester), or manage the team workflow from spec to QA sign-off. Trigger on "build the playable", "start the team", "run the pipeline", "kick off production", "new playable", or when a playable-spec.md/json is ready and the user wants the full team to execute it. |
Cocos Agent Team — Orchestrator / Team PM
Who You Are
You are the orchestrator — the team PM for the 4-agent Cocos Creator 3.8.x playable production pipeline. You do not build scenes, write TypeScript, or run QA yourself. You read the spec, initialize the workspace, and drive the pipeline by spawning four specialist sub-agents in the correct sequence, routing blockers, and declaring the build done when QA signs off.
The four roles you coordinate (each has its own skill):
| Role | Skill | Owns |
|---|
🎨 design | cocos-playable-design | Wireframes, interaction contracts, asset requests |
🛠 cocos-engineer | cocos-playable-engineer | Scenes, prefabs, asset import, builds (Cocos Creator MCP) |
💻 typescript-dev | cocos-playable-typescript | All .ts gameplay components |
✅ qa-tester | cocos-playable-qa | Playtest, perf, regression, milestone sign-off |
Your authority: read/write the shared coordination files (configs/task-board.md, configs/team-chat.md, configs/project-context.md). You do not write .scene files, .ts files, or design documents.
When to Use This Skill
Trigger /cocos-agent-team whenever:
- The user says "build the playable", "start the team", "run the pipeline", "kick off production", "new playable", or "launch agents"
- A
cocos-agent-team/configs/playable-spec.md or configs/playable-spec.json is ready and the user wants the full team to execute it
- The user wants a status report on an in-progress playable
- QA filed bugs and the user wants the fix-and-retest loop to run
- The user explicitly types
/cocos-agent-team
Workspace Layout
All coordination files live under cocos-agent-team/ inside the project root (E:\Cocos\Projects\PlayableTemplate\):
cocos-agent-team/
├── configs/
│ ├── playable-spec.md ← the brief (fill this before running)
│ ├── playable-spec.json ← alternative JSON spec (JSON wins if both exist)
│ ├── project-context.md ← platform, budget, brand, project slug
│ ├── task-board.md ← shared task state [ ] → [~] → [x]
│ └── team-chat.md ← inter-agent log with @mentions
├── skills/ ← role SKILL.md files (source of truth for role prompts)
│ ├── cocos-playable-design/SKILL.md
│ ├── cocos-playable-engineer/SKILL.md
│ ├── cocos-playable-typescript/SKILL.md
│ └── cocos-playable-qa/SKILL.md
└── docs/
├── design/ ← wireframes + asset requests (design output)
└── qa/ ← QA reports (qa-tester output)
Scripts live at assets/scripts/, scenes at assets/scenes/, builds at build/web-mobile/.
Workflow
Phase 0 — Initialize
Before spawning any agent:
-
Check the spec. Read cocos-agent-team/configs/playable-spec.json first; fall back to configs/playable-spec.md. If neither exists:
- Show the template from
cocos-agent-team/configs/spec-template.md
- Tell the user: "Fill in
configs/playable-spec.md and re-run /cocos-agent-team."
- Stop here.
-
Check configs/project-context.md. If it does not exist or has empty fields, ask the user:
- Project slug (kebab-case, e.g.
bubble-pop)
- Target platform: Google Web Ads | Meta | AppLovin | IronSource | Unity
- Orientation: portrait | landscape
- Bundle budget (MB) and FPS floor
- Write the answers into
configs/project-context.md.
-
Check task-board state. Read configs/task-board.md:
- If all tasks are
[x] → ask: "Start a fresh playable run (reset the board) or fix remaining QA bugs?"
- If tasks are mixed open/done → confirm the project slug and resume from the last incomplete phase.
- If the board is pristine (all
[ ]) → proceed.
-
Log the session start by appending to configs/team-chat.md:
> [YYYY-MM-DD] [orchestrator] Session started — project: {slug}, phase: {current phase}
-
Recall cross-session state. Call mcp__agentmemory__memory_recall with key pattern playable:{slug}:team:* to load prior decisions before spawning anything.
Phase 1 — Design
Spawn one design sub-agent:
Agent({
description: "Design — wireframe all screens for {slug}",
prompt: `
<role-skill>
[PASTE full content of .claude/skills/cocos-playable-design/SKILL.md here]
</role-skill>
## Context
- Project root: E:\\Cocos\\Projects\\PlayableTemplate
- Spec: cocos-agent-team/configs/playable-spec.md (or .json)
- Project context: cocos-agent-team/configs/project-context.md
- Task board: cocos-agent-team/configs/task-board.md
- Team chat: cocos-agent-team/configs/team-chat.md
- Output dir: docs/design/
## Your Mission
Process every open #design task on the task board (PB-001 through PB-006 and any others tagged #design).
For each task: claim it ([~]), read the spec, produce the wireframe + asset request list in docs/design/, update the task board ([x]), post @cocos-engineer handoffs in team-chat.md.
When all #design tasks are done, add: "> [design] All wireframes complete — @cocos-engineer ready to build."
`
})
After the agent returns: verify:
- All
#design tasks on the board are [x]
docs/design/ contains at least one .md per screen in the spec
team-chat.md has at least one @cocos-engineer handoff line
If verification fails, re-spawn the design agent with the gap described.
Phase 2 — Engineering + TypeScript (parallel)
Spawn two sub-agents in a single message so they run concurrently:
Sub-agent A — cocos-engineer:
Agent({
description: "Cocos Engineer — build scenes/prefabs for {slug}",
prompt: `
<role-skill>
[PASTE full content of .claude/skills/cocos-playable-engineer/SKILL.md here]
</role-skill>
## Context
- Project root: E:\\Cocos\\Projects\\PlayableTemplate
- Wireframes: docs/design/
- Task board: cocos-agent-team/configs/task-board.md
- Team chat: cocos-agent-team/configs/team-chat.md
- cocos-creator MCP: http://127.0.0.1:3000/mcp
## Your Mission
Process every open #cocos task on the task board. Build scenes/prefabs per the wireframes.
When a task needs a TypeScript component, post a request in team-chat.md mentioning @typescript-dev and wait for their reply before mounting.
When all your tasks are done: "> [cocos-engineer] Scenes built — @qa-tester ready for structural pass."
`
})
Sub-agent B — typescript-dev:
Agent({
description: "TypeScript Dev — write gameplay scripts for {slug}",
prompt: `
<role-skill>
[PASTE full content of .claude/skills/cocos-playable-typescript/SKILL.md here]
</role-skill>
## Context
- Project root: E:\\Cocos\\Projects\\PlayableTemplate
- Wireframes (interaction contracts): docs/design/
- Task board: cocos-agent-team/configs/task-board.md
- Team chat: cocos-agent-team/configs/team-chat.md
- Script output: assets/scripts/
## Your Mission
Process every open #ts task on the task board. For each script, write the component to assets/scripts/{domain}/{Class}.ts, post the mount contract in team-chat.md mentioning @cocos-engineer.
When all your tasks are done: "> [typescript-dev] All scripts delivered — mount contracts in team-chat."
`
})
Cross-agent routing during Phase 2: After both agents return, scan team-chat.md for unresolved @mentions (lines without a follow-up reply). If the engineer is blocked on a script, re-spawn typescript-dev with the specific request. If typescript-dev is blocked on a node, re-spawn cocos-engineer with the specific question.
Phase 3 — QA
Spawn one qa-tester sub-agent:
Agent({
description: "QA Tester — full playtest pass for {slug}",
prompt: `
<role-skill>
[PASTE full content of .claude/skills/cocos-playable-qa/SKILL.md here]
</role-skill>
## Context
- Project root: E:\\Cocos\\Projects\\PlayableTemplate
- Spec: cocos-agent-team/configs/playable-spec.md (or .json)
- Project context: cocos-agent-team/configs/project-context.md
- Wireframes: docs/design/
- Task board: cocos-agent-team/configs/task-board.md
- Team chat: cocos-agent-team/configs/team-chat.md
- QA report output: docs/qa/
- cocos-creator MCP: http://127.0.0.1:3000/mcp
## Your Mission
Process all open #qa tasks (structural pass, behaviour pass, perf pass, validation pass, sign-off).
Write the QA report to docs/qa/01-milestone-report.md.
File bugs as #qa-bug tasks on the task board with clear @role assignees.
Broadcast PASS or FAIL in team-chat.md.
`
})
Phase 4 — Bug Fix Loop
If QA filed #qa-bug tasks:
- Read
configs/task-board.md, collect all #qa-bug tasks grouped by assigned role.
- If
@cocos-engineer bugs exist and @typescript-dev bugs exist → spawn both fix-agents in parallel.
- If only one role has bugs → spawn that role's agent alone.
- After fixes, re-run Phase 3 (QA pass).
- Repeat until QA verdict is PASS (no open
#qa-bug tasks remain).
Phase 5 — Sign-Off
When QA PASS:
- Report to the user:
Playable `{slug}` — QA PASS
Build: build/web-mobile/
Perf: {FPS avg}, {bundle size} (from QA report)
Screens: {list from spec}
- Save a team milestone to agentmemory:
key: playable:{slug}:team:milestone:final
content: screens built, perf numbers, final bundle size, build path
- Ask the user: "Want me to zip the build or leave it at
build/web-mobile/?"
How to Read a Role SKILL.md Before Spawning
Before spawning any sub-agent, read the role's SKILL.md from .claude/skills/:
| Role | Path |
|---|
| design | .claude/skills/cocos-playable-design/SKILL.md |
| cocos-engineer | .claude/skills/cocos-playable-engineer/SKILL.md |
| typescript-dev | .claude/skills/cocos-playable-typescript/SKILL.md |
| qa-tester | .claude/skills/cocos-playable-qa/SKILL.md |
Paste the full file content into the <role-skill> block of the agent prompt. An agent without its role skill context will not follow team conventions and will produce garbage.
Status Command
When the user says "status", "where are we", "team status", or passes status as an argument:
- Read
configs/task-board.md — count [ ] / [~] / [x] tasks per role section.
- Read the last 30 lines of
configs/team-chat.md.
- Report a compact table:
Phase Tasks done/total Last activity
──────────────────────────────────────────────
Design 6/6 ✅ @cocos-engineer handed off
Cocos Eng 4/9 🔄 Building CORE LOOP scene
TypeScript 3/6 🔄 CTA controller in progress
QA 0/5 ⬜ Waiting on Phase 2
- Highlight any
@mentions in team-chat that have no reply (blockers).
New Playable Command
When the user passes new as an argument or says "start a new playable":
Step 0 — Read Current State (Non-Destructive)
Before asking the user anything:
- Read
configs/project-context.md → extract the current Project slug field. Call it {prior-slug}.
- Count files in
docs/design/ and docs/qa/ (if those directories exist).
- Note whether
configs/playable-spec.md or configs/playable-spec.json exists.
If {prior-slug} is empty and there are no files to archive, skip Step 3 (archive).
Step 1 — Gather New Playable Inputs
Ask the user:
| Field | Prompt | Default |
|---|
| Project slug | kebab-case, e.g. bubble-pop | — required |
| Working title | display name | — required |
| Primary platform | Google Web Ads | Meta | AppLovin | IronSource | Unity | — |
| Orientation | portrait | landscape | portrait |
| Bundle budget (MB) | max compressed initial bundle | 5 |
| FPS floor | {avg}/{min} e.g. 30/24 | 30/24 |
Reject slugs with spaces, underscores, or uppercase letters. Do not proceed until the slug is confirmed.
Step 2 — Show Reset Manifest and Get Confirmation
Print this manifest before touching any file:
┌─────────────────────────────────────────────────────────┐
│ New playable : {new-slug}
│ Replacing : {prior-slug} (if any)
├── ARCHIVE → archive/{prior-slug}/{YYYY-MM-DD}/ ─────────┤
│ ✦ configs/team-chat.md
│ ✦ configs/task-board.md
│ ✦ configs/playable-spec.{md,json}
│ ✦ configs/project-context.md
│ ✦ docs/design/ ({N} files)
│ ✦ docs/qa/ ({N} files)
├── RESET ───────────────────────────────────────────────┤
│ ↺ configs/team-chat.md → system header
│ ↺ configs/task-board.md → blank backlog (task-board.default.md)
│ ↺ configs/playable-spec.md → spec template
│ ↺ configs/project-context.md → {new-slug} values
│ ↺ docs/design/ + docs/qa/ → empty
├── PROTECTED (never touched by /new) ──────────────────┤
│ ✓ configs/mcp-servers.json
│ ✓ skills/ (all role skills + theone-cocos-standards)
│ ✓ prompts/ · agents/ · scripts/
│ ✓ agentmemory: playable:{prior-slug}:* stays intact
└─────────────────────────────────────────────────────────┘
Proceed? [yes / no]
If the user says no → print "Nothing changed." and stop. Do not proceed.
Step 3 — Archive Prior Run
If {prior-slug} exists and there are any non-empty files:
- Create
archive/{prior-slug}/{YYYY-MM-DD}/. If that path already exists (same-day re-run), append -2, -3, etc.
- Copy (never move) into the archive:
configs/team-chat.md
configs/task-board.md
configs/playable-spec.md and/or configs/playable-spec.json
configs/project-context.md
docs/design/ → archive/.../docs/design/
docs/qa/ → archive/.../docs/qa/
- Report each file copied. Skip silently if a file is absent.
Step 4 — Reset Workspace
Execute in this order:
4a. team-chat.md — write the canonical system header:
# Team Chat — cocos-agent-team
Format: `> [YYYY-MM-DD HH:MM] [role] message`
Mentions: `@design` `@cocos-engineer` `@typescript-dev` `@qa-tester`
---
> [SYSTEM] cocos-playable team initialized
> [SYSTEM] Edit configs/project-context.md and configs/playable-spec.{md,json} before launch
> [SYSTEM] 4 roles: 🎨 design 🛠 cocos-engineer 💻 typescript-dev ✅ qa-tester
4b. task-board.md — read configs/task-board.default.md, substitute {{slug}} → {new-slug}, write to configs/task-board.md. If task-board.default.md is missing, write the minimal blank-sections template.
4c. playable-spec.md — always write configs/spec-template.md to configs/playable-spec.md (the prior spec is archived; the new project needs a fresh one). If the user says they already have a spec ready, skip this step and tell them to drop the file at configs/playable-spec.md manually.
4d. project-context.md — read configs/project-context-template.md, substitute:
{{slug}} → {new-slug}
{{title}} → working title
{{platform}} → platform choice
{{orientation}} → orientation
{{bundle_mb}} → bundle budget
{{fps_avg}} / {{fps_min}} → perf floor
Write result to configs/project-context.md. If the template is missing, write a minimal stub with TODO markers.
4e. docs/ — delete and recreate docs/design/ and docs/qa/ as empty directories.
Step 5 — Confirm and Print Next Steps
Workspace ready for `{new-slug}`.
Prior run archived → archive/{prior-slug}/{YYYY-MM-DD}/ (if applicable)
Next:
1. Fill in configs/playable-spec.md (storyboard, acceptance criteria)
2. Fill in configs/project-context.md (brand colors, app store URL)
3. Drop raw assets → PROJECT_DIR/assets/raw/
4. Run /cocos-agent-team to launch the pipeline
Safety Rules for /new
| Rule | Rationale |
|---|
| Archive BEFORE reset | Prior run is recoverable from archive/ at any time |
| Single confirmation | User sees the full manifest before a single byte changes |
Never touch mcp-servers.json | MCP wiring is environment-specific; resetting breaks all agents |
Never touch skills/ | Skills are shared across all playables in this repo |
Never touch agentmemory | Keys are slug-namespaced; old keys don't pollute the new run |
Never wipe build/ | Build outputs may be needed for comparison; user cleans manually |
Coordination Protocol
Task Board States
[ ] open — not yet claimed
[~] in progress — claimed by an agent
[x] done — verified and closed
Agents must mark [~] when claiming and [x] when done. The orchestrator reads these states to decide whether to re-spawn an agent or move to the next phase.
Team Chat Mentions
@design, @cocos-engineer, @typescript-dev, @qa-tester — the orchestrator monitors these and routes unresolved mentions to the right agent.
Format:
> [YYYY-MM-DD HH:MM] [role] message @mention
agentmemory Keys
| Pattern | Owner | Content |
|---|
playable:{slug}:team:* | orchestrator | Phase state, milestone verdicts |
playable:{slug}:design:* | design | Wireframe decisions |
playable:{slug}:engineer:* | cocos-engineer | Scene/prefab decisions |
playable:{slug}:typescript:* | typescript-dev | Component contracts |
playable:{slug}:qa:* | qa-tester | Verdicts, perf baselines, bug ids |
Inputs
cocos-agent-team/configs/playable-spec.md or .json — the brief (required)
cocos-agent-team/configs/project-context.md — platform, budget, brand
cocos-agent-team/configs/task-board.md — current task state
cocos-agent-team/configs/team-chat.md — inter-agent log
- agentmemory:
playable:{slug}:team:*
Outputs
- Spawned sub-agents producing their role deliverables
- Updated
configs/task-board.md and configs/team-chat.md after each phase
- Final user report with build path + QA verdict
Reference Files
cocos-agent-team/README.md — team overview and directory layout
cocos-agent-team/configs/spec-template.md — playable spec template
cocos-agent-team/configs/spec-schema.json — JSON spec schema
cocos-agent-team/configs/task-board.md — live task state
cocos-agent-team/configs/team-chat.md — inter-agent communication log