tech-debt
Skill10 starsChanged 39 days agoMITView on GitHub
Maintain docs/TECH_DEBT.md, the living list of code-level cleanup that isn't a risk, a shortcut, or an open decision (that's the risk-register skill's job) and isn't a future feature (that's ROADMAP.md's job). Use when a lint/format/style violation slips past an existing gate, a small known cleanup is noticed while working on something else, or a filed item is fixed and needs removing. DO NOT use for anything with a real cost or risk if left unaddressed (use risk-register instead), for aislop baseline findings (already lifecycle-managed in .aislop/baseline.json), or for anything confidential. Triggers: 'add to tech debt', 'log this as cleanup', 'track this lint violation', 'mark tech-debt item #N fixed', 'what's on the tech debt list'.
38 other projects use a version of this.
Adopted by
Most recently taken up by
- chuanglibs/Claude-Code-Game-Studios-Codextheir own version, first seen Nov 15, 2026
- Donchitos/Claude-Code-Game-Studiostheir own version, first seen Nov 9, 2026
- nisarth/claude-skills-storetheir own version, first seen Nov 8, 2026
- dirien/yet-another-agent-harnesstheir own version, first seen Nov 8, 2026
- y-miyazaki/configtheir own version, first seen Nov 6, 2026
- striderZA/OpenCodeGameStudiostheir own version, first seen Nov 4, 2026
Used with
Projects with it also use playtest-report, soak-test and 10 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
CoralGameSkillplaytest-report
Generates a structured playtest report template or analyzes existing playtest notes into a structured format. Use this to standardize playtest feedback collection and analysis.
Also in 12 projects that use this
lilangMaxSkillsoak-test
Generate a soak test protocol for extended play sessions. Defines what to observe, measure, and log during long play sessions to surface slow leaks, fatigue effects, and edge cases that only appear after sustained play. Primarily used in Polish and Release phases.
Also in 9 projects that use this
lilangMaxSkillteam-live-ops
Orchestrate the live-ops team for post-launch content planning: coordinates live-ops-designer, economy-designer, analytics-engineer, community-manager, writer, and narrative-director to design and plan a season, event, or live content update.
Also in 9 projects that use this
CoralGameSkillteam-polish
Orchestrate the polish team: coordinates performance-analyst, technical-artist, sound-designer, and qa-tester to optimize, polish, and harden a feature or area for release quality.
Also in 14 projects that use this
- +5 more from lilangMax
- +3 more from CoralGame
Other versions38 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 38
- Donchitos/Claude-Code-Game-Studios★ 39ksame name
- anthropics/knowledge-work-plugins★ 36ksame name
- vm0-ai/vm0★ 1.2ksame name
- pixel-cellar/Claude-Code-Game-Studios★ 324same name
- striderZA/OpenCodeGameStudios★ 124same name
- tranhieutt/software_development_department★ 71same name
- cenconq25/claude-code-app-studio★ 40same name
- drafthq/draft★ 40same name
- fagemx/edda★ 36same name
- CoralGame/Claude-Code-Game-Studios★ 19same name
28 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository81 other files it gives its agents.
- AGENTS.mdAGENTS.md
- skills/development/biome-complete/AGENTS.mdAGENTS.md
- skills/development/bun-development/AGENTS.mdAGENTS.md
- skills/development/commanderjs/AGENTS.mdAGENTS.md
- skills/documentation/markdown-authoring/AGENTS.mdAGENTS.md
- skills/package-mgmt/mise-complete/AGENTS.mdAGENTS.md
- skills/testing/bdd-testing/AGENTS.mdAGENTS.md
- agents-mdSkill
- cache-auditSkill
- context-radar-auditSkill
- create-contextSkill
- guided-interviewSkill
- handover-document-creatorSkill
- load-contextSkill
- pick-modelSkill
- pinSkill
- professional-honestySkill
- rules-managementSkill
- save-contextSkill
- session-reflectionSkill
- socratic-methodSkill
- vault-captureSkill
- vault-consolidateSkill
- vault-fetchSkill
- vault-searchSkill
- bird-fortune-political-satireSkill
- brooker-esque-media-satireSkill
- clarke-dawe-esqueSkill
- comedy-style-skill-generatorSkill
- cunk-esque-mockumentarySkill
- gervais-esque-cringe-satireSkill
- monty-python-esqueSkill
- pryor-esque-confessional-standupSkill
- rock-esque-observational-standupSkill
- biome-completeSkill
- bun-developmentSkill
- commanderjsSkill
- conventional-commitsSkill
- humanizerSkill
- journal-entry-importSkill
- markdown-authoringSkill
- mermaid-diagramsSkill
- plain-englishSkill
- professional-communicationSkill
- sop-structureSkill
- logql-generatorSkill
- mise-completeSkill
- context-indexSkill
- create-context-fileSkill
- follow-upSkill
- goal-trackerSkill
- nasa-pm-lessonsSkill
- plan-createSkill
- plan-executeSkill
- plan-reviewSkill
- risk-registerSkill
- tech-evaluationSkill
- blast-radiusSkill
- bridgeSkill
- challengeSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
9 rules. 0 are common, 2 are distinctive, and 7 are very specific to this project.
0
Common
Most of the 31 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
7
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 24
Due diligence runs in both directions: Before filing a row, confirm the item is genuinely just cleanup --not a risk, shortcut, or open …
- Very specific: line 72
Read the current last row's # in docs/TECH_DEBT.md.
- Very specific: line 74
Write a self-contained Description -- don't assume the reader has whatever prompted this open in front of them.
- Very specific: line 80
Run scripts/validate-tech-debt-schema.sh before committing (the pre-commit hook runs it too, but check early to avoid a bounced commit).
- Very specific: line 89
Delete the row entirely. Unlike risk-register, there is no Resolved state to flip to -- deletion is the resolution.
- Very specific: line 111
Kill criterion: if zero rows beyond the one seeded on launch have been added to docs/TECH_DEBT.md by
- Very specific: line 118
NEVER: add an append-only guard or a Resolved status value to this doc.
- Distinctive: line 122
GOOD: Delete the row. That's the resolution mechanism, not a shortcut around one.
- Distinctive: line 130
NEVER: delete a row without checking whether the fix revealed a real cost or risk (Rule 3).
“Common” is measured: kept by at least 6 in 10 of the 31 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Tech Debt
A single committed table (docs/TECH_DEBT.md) of code-level cleanup that isn't a risk, a shortcut, or an open
decision (docs/RISK_REGISTER.md's job) and isn't a future feature (docs/ROADMAP.md's job) -- just things that
should get tidied up when there's spare time. Sibling to the risk-register skill, sharing its scaffolding pattern
(dedicated skill, YAML row template, JSON schema, validation script) but not its append-only invariant: a tech-debt
row is deleted once fixed, not archived, because there is no decision to keep evidence of.
Rules
- A row is deleted once fixed, not archived. Unlike
risk-register'sdocs/RISK_REGISTER.md, there is no append-only guard here and no technical backstop preventing deletion -- that is the deliberate design, not a gap. A concurrent-edit merge that drops a still-open row alongside a legitimate deletion is a known, accepted limitation of this model; it is not engineered around, because the whole point of choosing this model overrisk-register's is to avoid that machinery for low-stakes items. - Enforcement is local pre-commit only, not CI-backed, not GitHub-server-enforced.
scripts/validate-tech-debt-schema.sh, wired intopre-commitvia lefthook, blocks a locally-committed malformed row. A commit made through the GitHub web UI or API,git commit --no-verify, or from a machine without lefthook installed is not stopped by this. - Due diligence runs in both directions. Before filing a row, confirm the item is genuinely just cleanup --not a
risk, shortcut, or open decision that belongs in
docs/RISK_REGISTER.mdinstead. Before deleting a row (marking it fixed), confirm the fix didn't reveal a real cost or risk; if it did, promote it todocs/RISK_REGISTER.mdfirst (see Workflow) rather than letting the row vanish with the discovery unrecorded.
Prerequisites
docs/TECH_DEBT.mdexists. If this is the first entry in a project and the file doesn't exist yet, create it with a# Tech Debttitle, an intro paragraph drawing the boundary againstRISK_REGISTER.md/ROADMAP.md/aislop's baseline, the enforcement-scope caveat from Rule 2, and an empty table using the columns inassets/templates/tech-debt-row-template.yaml.assets/templates/tech-debt-row-template.yaml-- the shape of a single row, illustratedassets/schemas/tech-debt-row.schema.json-- the same shape, as enforceable constraintsscripts/validate-tech-debt-schema.sh, wired intopre-commit(lefthook), so a malformed row can never be committed. No append-only companion (Rule 1).jq(schema constraints are read at runtime, never hardcoded -- see Scripts) andshellcheck(CI and pre-commit both gate the validator script), both pinned inmise.toml.
When to Use
- A lint, format, or style violation is noticed that an existing gate doesn't fail the build on (a warning, not an
error; or a path a gate doesn't cover) -- the exact situation the seed row in
docs/TECH_DEBT.mddocuments. - A small, low-stakes cleanup item is noticed while working on something unrelated, and isn't worth fixing in the same change.
- A filed item is actually fixed and its row needs deleting.
- Someone asks what code-level cleanup is outstanding.
When NOT to Use
- Anything with a real cost or risk if left unaddressed -- that's
docs/RISK_REGISTER.md(risk-registerskill), not this doc. If a tech-debt item turns out to carry one, promote it (see Workflow). aislopbaseline findings (.aislop/baseline.json) -- already a scored, regression-tracked inventory of code-quality findings with its own mechanism. Don't duplicate a finding aislop already tracks.- Anything confidential -- this file is committed and visible to everyone with repo access.
Area Taxonomy and Row Schema
area is a small, tech-debt-specific set of values (currently Code quality and Testing), not a closed JSON
Schema enum and not the .context/ themes vocabulary. RECOMMENDED reading before filing or resolving a row: see
Area Taxonomy and Row Schema for the full value list, the revisit
trigger for splitting an overloaded area, and the complete column-by-column row schema.
Workflow
Adding an entry
- Confirm this is genuinely just cleanup, not a risk, shortcut, or open decision (Rule 3). If it carries a real
cost or failure mode if left unaddressed, it belongs in
docs/RISK_REGISTER.mdinstead. - Read the current last row's
#indocs/TECH_DEBT.md; the new row's#is that value + 1 (rows are freely reused after deletion, so don't assume the max#ever seen -- just the max currently present). - Write a self-contained
Description-- don't assume the reader has whatever prompted this open in front of them. Never cite a.context/file as where the extra detail lives --.context/is gitignored local scratch, so a reference to it may be dead for every reader but the one who filed it. Inline the essential facts directly, or point at a committed doc (an ADR, an MR description, anotherdocs/*.mdpage) instead. - Append the row, matching
assets/templates/tech-debt-row-template.yaml's field shapes (Areafrom the current taxonomy,Effortfrom its enum,SinceasYYYY-MM-DD,StatusstartingOpen). - Run
scripts/validate-tech-debt-schema.shbefore committing (the pre-commit hook runs it too, but check early to avoid a bounced commit).
Resolving an entry
- Find the row by its
#or Item name. - Confirm the fix didn't reveal a real cost or risk (Rule 3). If it did, add a row to
docs/RISK_REGISTER.mdfirst, with the new row'sDescriptionreferencing this tech-debt item by name -- since this row is about to be deleted and would otherwise leave no trace of where the risk was first noticed. - Delete the row entirely. Unlike
risk-register, there is noResolvedstate to flip to -- deletion is the resolution.
Relationship to risk-register
The boundary between the two docs is exactly the kind of judgment call people get wrong -- that's the reason this
skill's grounding finding (a 2026-07-31 governance-model analysis) exists. If a
risk-register row turns out, on inspection, to actually be cleanup rather than a real risk, that's a correction to
make via the risk-register skill (amend or, if genuinely mis-filed, raise it there), not a silent move into this
doc.
Mindset
- Rule 1 is a deliberate tradeoff, not an oversight.
risk-register's append-only guard exists to preserve a decision audit trail; tech debt carries no decision to preserve evidence of. Don't add append-only machinery here "for consistency" -- that would defeat the reason this skill exists as a separate, lighter sibling. See the tech-debt-vs-risk-register governance rationale that grounds this skill for the full reasoning. - This is a PoC-phase project: proportionate is fine. TYPICALLY a
docs/TECH_DEBT.mdwith one honest row is more useful than an empty one or no doc at all -- RECOMMENDED to ship with whatever real rows exist rather than waiting for a "complete" sweep. - BY DEFAULT, resolve the risk-vs-cleanup judgment call in Rule 3 by asking "does this carry a cost if nobody ever
touches it again?" PREFER filing to
docs/RISK_REGISTER.mdUNLESS the answer is a clear no. - Kill criterion: if zero rows beyond the one seeded on launch have been added to
docs/TECH_DEBT.mdby 2026-10-31 (90 days from creation), deletedocs/TECH_DEBT.mdand this skill -- the doc isn't earning its keep if nobody is using it. The 90-day window is tied to this skill's 2026-07-31 seeding date, the same audit referenced below.
Anti-Patterns
NEVER add an append-only guard or a Resolved status value to this doc.
WHY: Both exist in risk-register to preserve a decision audit trail. Tech debt carries no decision -- adding
either here just re-creates the machinery this skill was deliberately built to avoid.
BAD: "For consistency with risk-register, let's also block row deletion here."
GOOD: Delete the row. That's the resolution mechanism, not a shortcut around one.
NEVER file a real risk or open decision here because it's less ceremony than risk-register.
WHY: docs/TECH_DEBT.md has no append-only guard and no audit trail -- a real risk filed here can be silently
lost the moment its row is deleted, with nothing to notice.
BAD: Filing "Directions API retries could silently exhaust the free quota" as tech debt to skip risk-register's due-diligence step.
GOOD: File it in docs/RISK_REGISTER.md, where deletion is blocked and the item can't quietly disappear.
NEVER delete a row without checking whether the fix revealed a real cost or risk (Rule 3).
WHY: Deletion is irreversible in practice here -- there's no technical backstop, so a real risk "resolved away"
by deletion instead of promoted leaves no trace and no failing check to catch the mistake.
BAD: Deleting the lint-violation row the moment the lint is fixed, without checking whether the underlying test
gap it was masking is itself a bigger problem.
GOOD: Confirm the fix is complete and clean, then delete -- or, if it wasn't, promote to risk-register first.
NEVER cite a .context/ file as where a row's extra detail lives.
WHY: .context/ is gitignored local scratch, not a committed, durable record -- a reference to it may point at
something no other reader, machine, or fresh clone can ever open, the moment the row is committed.
BAD: Description: ... (.context/findings/2026-07-31-foo.md, finding M2)
GOOD: Inline the essential fact in the row itself, or reference a committed doc (ADR, MR, another docs/*.md
page) if it doesn't fit.
NEVER invent placeholder rows to make the doc look more populated than it is. WHY: A fabricated row is worse than an honest gap -- it looks like real signal to the next reader and wastes their time chasing cleanup that doesn't exist. The 2026-07-31 launch audit found exactly one genuine candidate and shipped with that rather than padding the count. BAD: Adding a vague "clean up some old code somewhere" row just to reach a target count. GOOD: Ship with however many real, verified rows exist -- one is more useful than five fabricated ones.
Scripts
One check -- no append-only companion (Rule 1), unlike risk-register's two:
scripts/validate-tech-debt-schema.sh # Content: does every row match tech-debt-row.schema.json?Troubleshooting
Problem | Solution
Pre-commit blocks: a field doesn't match | validate-tech-debt-schema.sh caught a malformed field --
| fix it to match tech-debt-row.schema.json's constraints.
Pre-commit blocks: schema required fields mismatch | The script's column order is out of sync with a schema edit --
| update validate-tech-debt-schema.sh's expected_fields.
Not sure what the next # should be | Read the last row of the table; next # = its # + 1 (# is
| reused after deletion, so this is the max currently present,
| not the max ever assigned).
Unsure whether something belongs here or in | Does it carry a real cost/risk if left unaddressed? -> register
docs/RISK_REGISTER.md | row. Is it just cleanup for spare time? -> tech-debt row.References
| Topic | Reference | When to Use |
| Area values, the revisit/split trigger, full row schema, a worked example row | Area Taxonomy and Row Schema | Filing a new row or unsure which Area value or column format applies |
| Row shape as illustrated YAML | assets/templates/tech-debt-row-template.yaml | Drafting a new row before appending it |
| Row shape as enforceable constraints | assets/schemas/tech-debt-row.schema.json | Checking what the validator script actually enforces |
| Deciding whether an item is cleanup or a real risk | risk-register skill | Rule 3's due-diligence check, in either direction |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

