Claude-Code-Workflow team-tech-debt

Unified team skill for tech debt identification and remediation. Scans codebase for tech debt, assesses severity, plans and executes fixes with validation. Uses team-worker agent architecture with roles/ for domain logic. Coordinator orchestrates pipeline, workers are team-worker agents. Triggers on "team tech debt".

install
source · Clone the upstream repo
git clone https://github.com/catlog22/Claude-Code-Workflow
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/catlog22/Claude-Code-Workflow "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.codex/skills/team-tech-debt" ~/.claude/skills/catlog22-claude-code-workflow-team-tech-debt-f11f36 && rm -rf "$T"
manifest: .codex/skills/team-tech-debt/SKILL.md
source content

Team Tech Debt

Systematic tech debt governance: scan -> assess -> plan -> fix -> validate. Built on team-worker agent architecture — all worker roles share a single agent definition with role-specific Phase 2-4 loaded from

roles/<role>/role.md
.

Architecture

Skill(skill="team-tech-debt", 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       v
           [team-worker agents, each loads roles/<role>/role.md]
          scanner  assessor  planner  executor  validator

Role Registry

RolePathPrefixInner Loop
coordinatorroles/coordinator/role.md
scannerroles/scanner/role.mdTDSCAN-*false
assessorroles/assessor/role.mdTDEVAL-*false
plannerroles/planner/role.mdTDPLAN-*false
executorroles/executor/role.mdTDFIX-*true
validatorroles/validator/role.mdTDVAL-*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
,
followup_task
ALLOWEDOrchestration
list_agents
ALLOWEDAgent health check
request_user_input
ALLOWEDUser interaction
mcp__ccw-tools__team_msg
ALLOWEDMessage bus
Read/Write
on
.workflow/.team/
files
ALLOWEDSession state
Read
on
roles/
,
commands/
,
specs/
ALLOWEDLoading own instructions
Read/Grep/Glob
on project source code
BLOCKEDDelegate to worker
Edit
on any file outside
.workflow/
BLOCKEDDelegate to worker
Bash("ccw cli ...")
BLOCKEDOnly workers call CLI
Bash
running build/test/lint commands
BLOCKEDDelegate 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:
    TD
  • Session path:
    .workflow/.team/TD-<date>-<slug>/
  • CLI tools:
    ccw cli --mode analysis
    (read-only),
    ccw cli --mode write
    (modifications)
  • Message bus:
    mcp__ccw-tools__team_msg(session_id=<session-id>, ...)
  • Max GC rounds: 3

Worker Spawn Template

Coordinator spawns workers using this template:

spawn_agent({
  agent_type: "team_worker",
  task_name: "<task-id>",
  fork_turns: "none",
  message: `## 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.

## Task Context
task_id: <task-id>
title: <task-title>
description: <task-description>
pipeline_phase: <pipeline-phase>

## Upstream Context
<prev_context>`
})

After spawning, use

wait_agent({ timeout_ms: 1800000 })
to collect results. If
result.timed_out
, send STATUS_CHECK via followup_task (wait 3 min), then FINALIZE with interrupt (wait 3 min), then mark timed_out and close agents. Use
close_agent({ target })
each worker.

Model Selection Guide

Tech debt follows a discovery-to-fix pipeline. Scanner is broad/fast, later stages need deeper reasoning.

Rolereasoning_effortRationale
scannermediumBroad codebase scan, pattern matching over deep analysis
assessorhighSeverity assessment requires understanding impact and risk
plannerhighRemediation planning must prioritize and sequence fixes
executorhighCode fixes must preserve behavior while removing debt
validatormediumValidation follows defined acceptance criteria

Pipeline Pattern: Scanner Results Inform Downstream

Scanner discoveries flow through the pipeline — each stage narrows and refines:

  1. TDSCAN produces broad debt inventory
  2. TDEVAL assesses and prioritizes (filters low-impact items)
  3. TDPLAN creates sequenced fix plan from assessed items
  4. TDFIX implements fixes per plan
  5. TDVAL validates fixes against original debt findings

User Commands

CommandAction
check
/
status
View execution status graph
resume
/
continue
Advance to next step
--mode=scan
Run scan-only pipeline (TDSCAN + TDEVAL)
--mode=targeted
Run targeted pipeline (TDPLAN + TDFIX + TDVAL)
--mode=remediate
Run full pipeline (default)
-y
/
--yes
Skip confirmations

Specs Reference

Session Directory

.workflow/.team/TD-<date>-<slug>/
├── .msg/
│   ├── messages.jsonl      # Team message bus
│   └── meta.json           # Pipeline config + role state snapshot
├── scan/                   # Scanner output
├── assessment/             # Assessor output
├── plan/                   # Planner output
├── fixes/                  # Executor output
├── validation/             # Validator output
└── wisdom/                 # Cross-task knowledge

v4 Agent Coordination

Message Semantics

IntentAPIExample
Queue supplementary info (don't interrupt)
send_message
Send scan findings to running assessor
Assign fix from remediation plan
followup_task
Assign TDFIX task from planner output
Check running agents
list_agents
Verify agent health during resume

Agent Health Check

Use

list_agents({})
in handleResume and handleComplete:

// Reconcile session state with actual running agents
const running = list_agents({})
// Compare with meta.json active tasks
// 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: "TDSCAN-001", message: "..." })
    -- send additional scan scope to scanner
  • followup_task({ target: "TDFIX-001", message: "..." })
    -- assign fix task from planner output
  • close_agent({ target: "TDVAL-001" })
    -- cleanup after validation

Error Handling

ScenarioResolution
Unknown commandError with available command list
Role not foundError with role registry
Session corruptionAttempt recovery, fallback to manual
Fast-advance conflictCoordinator reconciles on next callback
Completion action failsDefault to Keep Active
Scanner finds no debtReport clean codebase, skip to summary