CtrlK
BlogDocsLog inGet started
Tessl Logo

team-testing

Unified team skill for testing team. Progressive test coverage through Generator-Critic loops, shared memory, and dynamic layer selection. Triggers on "team testing".

63

Quality

55%

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Passed

No known issues

Optimize this skill with Tessl

npx tessl skill review --optimize ./.codex/skills/team-testing/SKILL.md
SKILL.md
Quality
Evals
Security

Team Testing

Orchestrate multi-agent test pipeline: strategist -> generator -> executor -> analyst. Progressive layer coverage (L1/L2/L3) with Generator-Critic loops for coverage convergence.

Architecture

Skill(skill="team-testing", args="task description")
                    |
         SKILL.md (this file) = Router
                    |
     +--------------+--------------+
     |                             |
  no --role flag              --role <name>
     |                             |
  Coordinator                  Worker
  roles/coordinator/role.md    roles/<name>/role.md
     |
     +-- analyze -> dispatch -> spawn workers -> STOP
                                    |
                    +-------+-------+-------+-------+
                    v       v       v       v
                [strat] [gen]  [exec]  [analyst]
                team-worker agents, each loads roles/<role>/role.md

Role Registry

RolePathPrefixInner Loop
coordinatorroles/coordinator/role.md
strategistroles/strategist/role.mdSTRATEGY-*false
generatorroles/generator/role.mdTESTGEN-*true
executorroles/executor/role.mdTESTRUN-*true
analystroles/analyst/role.mdTESTANA-*false

Role Router

Parse $ARGUMENTS:

  • Has --role <name> -> Read roles/<name>/role.md, execute Phase 2-4
  • No --role -> roles/coordinator/role.md, execute entry router

Delegation Lock

Coordinator is a PURE ORCHESTRATOR. It coordinates, it does NOT do.

Before calling ANY tool, apply this check:

Tool CallVerdictReason
spawn_agent, wait_agent, close_agent, send_message, assign_taskALLOWEDOrchestration
list_agentsALLOWEDAgent health check
request_user_inputALLOWEDUser interaction
mcp__ccw-tools__team_msgALLOWEDMessage bus
Read/Write on .workflow/.team/ filesALLOWEDSession state
Read on roles/, commands/, specs/ALLOWEDLoading own instructions
Read/Grep/Glob on project source codeBLOCKEDDelegate to worker
Edit on any file outside .workflow/BLOCKEDDelegate to worker
Bash("ccw cli ...")BLOCKEDOnly workers call CLI
Bash running build/test/lint commandsBLOCKEDDelegate to worker

If a tool call is BLOCKED: STOP. Create a task, spawn a worker.

No exceptions for "simple" tasks. Even a single-file read-and-report MUST go through spawn_agent.


Shared Constants

  • Session prefix: TST
  • Session path: .workflow/.team/TST-<slug>-<date>/
  • Team name: testing
  • CLI tools: ccw cli --mode analysis (read-only), ccw cli --mode write (modifications)
  • Message bus: mcp__ccw-tools__team_msg(session_id=<session-id>, ...)

Worker Spawn Template

Coordinator spawns workers using this template:

spawn_agent({
  agent_type: "team_worker",
  task_name: "<task-id>",
  fork_context: false,
  items: [
    { type: "text", text: `## Role Assignment
role: <role>
role_spec: <skill_root>/roles/<role>/role.md
session: <session-folder>
session_id: <session-id>
requirement: <task-description>
inner_loop: <true|false>

Read role_spec file (<skill_root>/roles/<role>/role.md) to load Phase 2-4 domain instructions.` },

    { type: "text", text: `## Task Context
task_id: <task-id>
title: <task-title>
description: <task-description>
pipeline_phase: <pipeline-phase>` },

    { type: "text", text: `## Upstream Context
<prev_context>` }
  ]
})

After spawning, use wait_agent({ targets: [...], timeout_ms: 900000 }) to collect results, then close_agent({ target }) each worker.

Model Selection Guide

Rolemodelreasoning_effortRationale
Strategist (STRATEGY-*)(default)highTest strategy requires deep code understanding
Generator (TESTGEN-*)(default)highTest code generation needs precision
Executor (TESTRUN-*)(default)mediumRunning tests and collecting results, less reasoning
Analyst (TESTANA-*)(default)highCoverage analysis and quality assessment

Override model/reasoning_effort in spawn_agent when cost optimization is needed:

spawn_agent({
  agent_type: "team_worker",
  task_name: "<task-id>",
  fork_context: false,
  model: "<model-override>",
  reasoning_effort: "<effort-level>",
  items: [...]
})

User Commands

CommandAction
check / statusView pipeline status graph
resume / continueAdvance to next step
revise <TASK-ID>Revise specific task
feedback <text>Inject feedback for revision

v4 Agent Coordination

Message Semantics

IntentAPIExample
Send strategy to running generatorssend_messageQueue test strategy findings to TESTGEN-* workers
Not used in this skillassign_taskNo resident agents -- all workers are one-shot
Check running agentslist_agentsVerify parallel generator/executor health

Parallel Test Generation

Comprehensive pipeline spawns multiple generators (per layer) and executors in parallel:

// Spawn parallel generators for L1 and L2
const genNames = ["TESTGEN-001", "TESTGEN-002"]
for (const name of genNames) {
  spawn_agent({ agent_type: "team_worker", task_name: name, ... })
}
wait_agent({ targets: genNames, timeout_ms: 900000 })

GC Loop Coordination

Generator-Critic loops create dynamic TESTGEN-fix and TESTRUN-fix tasks. The coordinator tracks gc_rounds[layer] and creates fix tasks dynamically when coverage is below target.

Agent Health Check

Use list_agents({}) in handleResume and handleComplete:

// Reconcile session state with actual running agents
const running = list_agents({})
// Compare with tasks.json active_agents
// Reset orphaned tasks (in_progress but agent gone) to pending

Named Agent Targeting

Workers are spawned with task_name: "<task-id>" enabling direct addressing:

  • send_message({ target: "TESTGEN-001", items: [...] }) -- queue strategy context to running generator
  • close_agent({ target: "TESTRUN-001" }) -- cleanup by name after wait_agent returns

Completion Action

When pipeline completes, coordinator presents:

request_user_input({
  questions: [{
    question: "Testing pipeline complete. What would you like to do?",
    header: "Completion",
    multiSelect: false,
    options: [
      { label: "Archive & Clean (Recommended)", description: "Archive session, clean up team" },
      { label: "Keep Active", description: "Keep session for follow-up work" },
      { label: "Deepen Coverage", description: "Add more test layers or increase coverage targets" }
    ]
  }]
})

Session Directory

.workflow/.team/TST-<slug>-<date>/
├── .msg/messages.jsonl     # Team message bus
├── .msg/meta.json          # Session metadata
├── wisdom/                 # Cross-task knowledge
├── strategy/               # Strategist output
├── tests/                  # Generator output (L1-unit/, L2-integration/, L3-e2e/)
├── results/                # Executor output
└── analysis/               # Analyst output

Specs Reference

Error Handling

ScenarioResolution
Unknown --role valueError with available role list
Role not foundError with expected path (roles/<name>/role.md)
CLI tool failsWorker fallback to direct implementation
GC loop exceededAccept current coverage with warning
Fast-advance conflictCoordinator reconciles on next callback
Completion action failsDefault to Keep Active
Repository
catlog22/Claude-Code-Workflow
Last updated
Created

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.