add
Register a deferred decision in the debt registry. Trigger by judgment, not a marker scan, whenever a future reader would ask "why this way?": an unmade…
Print a debt-ops health summary from the metrics log, covering registration rate, hook feedback action rate, ADR creation, and AI-authored share. Use when the user asks for "debt-ops metrics", "debt health", "registry stats", or invokes /debt-ops:metrics. Read-only, never writes
$ npx -y skills add bcanfield/agentic-tech-debt --skill metrics --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/metricsContext preview
The summary Claude sees to decide when to auto-load this skill.
Print a debt-ops health summary from the metrics log, covering registration rate, hook feedback action rate, ADR creation, and AI-authored share. Use when the user asks for "debt-ops metrics", "debt health", "registry stats", or invokes /debt-ops:metrics. Read-only, never writes
name: metrics
description: Print a debt-ops health summary from the metrics log, covering registration rate, hook feedback action rate, ADR creation, and AI-authored share. Use when the user asks for "debt-ops metrics", "debt health", "registry stats", or invokes /debt-ops:metrics. Read-only, never writes the log.
allowed-tools: Bash, Read
# Hidden from `npx skills` discovery — this copy ships in the Claude Code plugin (uses ${CLAUDE_PLUGIN_ROOT}); the portable skills/ copy is the one for the skills CLI.
metadata:
internal: trueRead the hidden metrics log and tell the user whether v1's tripwires are tripping.
TOPLEVEL=$(git rev-parse --show-toplevel)
REPO_HASH=$(printf '%s' "$TOPLEVEL" | shasum | cut -c1-12)
# Locate this repo's plugin cache. CLAUDE_PLUGIN_DATA is set in hook
# subprocesses but NOT in the skill's bash env, so glob the standard
# Claude Code plugin-data dirs and fall back to the legacy cache path.
CACHE_DIR=""
for D in \
${CLAUDE_PLUGIN_DATA:+"$CLAUDE_PLUGIN_DATA/cache/$REPO_HASH"} \
"$HOME/.claude/plugins/data"/debt-ops*/cache/"$REPO_HASH" \
"$HOME/.cache/debt-ops/cache/$REPO_HASH"; do
[ -d "$D" ] && { CACHE_DIR="$D"; break; }
done
LOG="$CACHE_DIR/metrics.jsonl"
if [ -n "$CACHE_DIR" ] && [ -f "$LOG" ]; then
tail -n 500 "$LOG"
else
echo "MISSING: no metrics.jsonl found for repo hash $REPO_HASH"
fiIf the file is missing or empty, tell the user the hooks haven't fired yet in this repo and stop.
One JSON object per line, three event shapes:
Timestamps are ISO-8601 UTC.
Filter to the last 7 days. Then compute:
If there are fewer than 5 sessions in the window, say "need more data" and skip the verdict.
One screen. No padding. Use `→` and `↑/↓` for trends. Example shape:
debt-ops metrics — last 7 days ───────────────────────────────── edits : 142 (8 sessions, ~18 edits/session) registry : +3 adrs : +1 ai-authored : 50% → 60% ↑ feedback ran : 89 times pass rate : 88% fail → pass rate: 80% (8/10) verdict: ok
End with one judgment line:
Catches AI-introduced tech debt at write-time Works with any coding agent. Any stack. Two decades of tech-debt research, distilled into a plugin and validated across dozens of codebases.
Repo: bcanfield/agentic-tech-debt
Register a deferred decision in the debt registry. Trigger by judgment, not a marker scan, whenever a future reader would ask "why this way?": an unmade…
Write or refresh the `## Tech debt operations` section in CLAUDE.md so a team shares one source of truth for debt-ops disciplines and cached quality commands.…
Audit the debt registry, rank survivors by churn × Fowler quadrant, surface a top-N list, then walk paydown on user follow-up. Use when the user asks to review…
Register a deferred decision in the tech-debt registry. Trigger by judgment, not a marker scan, whenever a future reader would ask "why this way?": an unmade…
Write or refresh a "Tech debt operations" section in the project's AGENTS.md so the team shares one source of truth for debt-ops disciplines. Run ONLY when the…
Print a debt-ops health summary from the metrics log, covering registration rate, feedback action rate, ADR creation, and AI-authored share. Use when the user…