CtrlK
BlogDocsLog inGet started
Tessl Logo

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".

76

Quality

71%

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-tech-debt/SKILL.md
SKILL.md
Quality
Evals
Security

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 --roleroles/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: TD
  • Session path: .workflow/.team/TD-<slug>-<date>/
  • 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_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

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 / statusView execution status graph
resume / continueAdvance to next step
--mode=scanRun scan-only pipeline (TDSCAN + TDEVAL)
--mode=targetedRun targeted pipeline (TDPLAN + TDFIX + TDVAL)
--mode=remediateRun full pipeline (default)
-y / --yesSkip confirmations

Specs Reference

Session Directory

.workflow/.team/TD-<slug>-<date>/
├── .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_messageSend scan findings to running assessor
Assign fix from remediation planassign_taskAssign TDFIX task from planner output
Check running agentslist_agentsVerify 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", items: [...] }) -- send additional scan scope to scanner
  • assign_task({ target: "TDFIX-001", items: [...] }) -- 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
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.