agentsclimarketplace

Debt ops init

Skill bcanfield/agentic-tech-debt/copilot/skills/debt-ops-init

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 user explicitly asks to set up, install, or initialize debt-ops disciplines — never auto-invoke. Idempotent; only the managed section changes, other sections are untouched.From its SKILL.md

Install
npx -y skills add bcanfield/agentic-tech-debt --skill debt-ops-init

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • 8 stars8 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
  • runs commandsInstructs the agent to run 6 commands, including `REPO_HASH=$(python3 -c "import hashlib,subprocess;t=subprocess.run(['git','rev-parse','--show-toplevel'],capture_output=True,text=True).stdout.strip();print(hashlib.sha1(t.encode()).hexdigest()[:12] i` and 5 more.

SKILL.md

5.8 KB, ~1.4k tokens by cl100k_base, as published. Nobody here has run it

debt-ops-init

Write or update a ## Tech debt operations section in the project's agent charter. Idempotent — only the managed section changes.

Run only on explicit user request ("set up debt-ops", "init debt-ops", "write the disciplines"). Do not invoke this as part of normal work. (Tools with a debt-ops hook adapter inject these disciplines per-session automatically; this skill is the persistence step for everyone else.)

Why this matters more on skills-only tools

Without a hook adapter there is no per-edit enforcement and no automatic capture. The charter is the only place the disciplines live, so the agent self-applies them. That's "vibes," not a tripwire — be honest with the user that the persistent charter is the substitute for, not the equal of, the hook-driven write-time loop.

1. Pick the charter file

Use AGENTS.md at the repo root — the cross-tool charter most agents read. If the project clearly standardizes on a different file your agent auto-loads (GEMINI.md, .github/copilot-instructions.md, CLAUDE.md), use that instead and tell the user which you picked.

2. Read any cached quality commands (optional)

If a hook adapter previously ran in this repo, it cached the project's quality commands. Include them if present; otherwise leave the placeholder.

REPO_HASH=$(python3 -c "import hashlib,subprocess;t=subprocess.run(['git','rev-parse','--show-toplevel'],capture_output=True,text=True).stdout.strip();print(hashlib.sha1(t.encode()).hexdigest()[:12] if t else '')")
CACHE_DIR="${DEBT_OPS_CACHE:-$HOME/.cache/debt-ops}/cache/$REPO_HASH"
[ -f "$CACHE_DIR/feedback.list" ] && cat "$CACHE_DIR/feedback.list"
ADR_DIR=$( [ -s "$CACHE_DIR/adr-dir" ] && cat "$CACHE_DIR/adr-dir" || echo "docs/adr" )
REGISTRY_DIR=$( [ -s "$CACHE_DIR/registry-dir" ] && cat "$CACHE_DIR/registry-dir" || echo "docs/debt" )
echo "adr-dir: $ADR_DIR"
echo "registry-dir: $REGISTRY_DIR"

If no commands are cached, detect the project's lint/type/test commands by scanning its manifests (package.json, pyproject.toml, Cargo.toml, go.mod, Makefile, …). Prefer commands that take a changed-file argument and run in a few seconds.

3. Compose the section (template)

Substitute {{ADR_DIR}}, {{REGISTRY_DIR}}, and {{COMMANDS}} (the cached or detected commands, one per line; leave a # add your lint/type/test commands here placeholder if none found).

## Tech debt operations

<!-- this section is auto-managed by the debt-ops agent skill; safe to edit, run debt-ops-init to regenerate -->

### Disciplines

1. The test for debt: would a future reader ask "why this way?" If yes, register via the `debt-ops-add` skill immediately — no prompt. This is judgment, not a marker scan: a `TODO`/`FIXME`/`HACK`/`XXX` is the obvious case, but an unmade decision, a stub, a loosened type, or a default picked "for now" all count even with no marker in the diff. Use `payoff_trigger: unknown` if unsure. Announce: `+1 entry: <slug> (drop?)`. Over-register freely; the developer drops with "drop it".

2. When making an architecturally significant change — a data model, public interface, security boundary, release pipeline, or a dep-manifest change that is a major-version bump or a *new* top-level dependency — draft an ADR under `{{ADR_DIR}}/` in Nygard format: a `# NNNN — Title` heading, `**Date:**` and `**Status:**` lines, then Context, Decision, Consequences, Alternatives, Payoff trigger. Create the directory if needed. Only draft an ADR when there are two credible alternatives; if you cannot list two, it is a comment, not an ADR. An ADR with a payoff trigger *is* deliberate debt — when you write one, also use `debt-ops-add` so the registry entry mirrors the ADR.

3. Read entries under `{{REGISTRY_DIR}}/` before changing files they reference.

### Quality checks

If a debt-ops hook adapter is installed (e.g. the Copilot adapter), it reads the marker block below and runs these after every edit under a 3 s budget. Without an adapter (skills-only tool), they are *not* enforced automatically — you, the agent, run them after editing and fix failures before moving on. Lines starting with `#` are estimates/comments and are skipped at run time.

<!-- debt-ops:feedback v1 -->
{{COMMANDS}}
<!-- /debt-ops:feedback -->

4. Apply

  • If the charter file doesn't exist: create it with the section above as the entire file.
  • If it has a ## Tech debt operations section: replace exactly that section — from the heading through (but not including) the next ## heading, or EOF if none. Leave every other byte unchanged.
  • If it exists without the section: append the section after the last line, with one blank line between.

5. Announce

charter updated: <file> — disciplines + N quality commands (N = non-comment, non-blank lines inside the marker block; 0 if placeholder).

Marker contract — do not deviate

  • <!-- debt-ops:feedback v1 --> is the open marker the hook adapters key on. Exact string; the v1 is part of the marker.
  • <!-- /debt-ops:feedback --> is the close marker.
  • This must stay identical across every adapter's feedback.py and init skill — see CLAUDE.md "Adapter parity." A drift here silently breaks the Copilot write-time loop (it reads the block by this exact marker).

Don't

  • Don't auto-invoke. Only on explicit user request.
  • Don't touch any byte outside the ## Tech debt operations section.
  • Don't claim the charter gives deterministic enforcement — it doesn't without a hook adapter. Say so.

What ships with it

Read from the repository

Just SKILL.md. No reference files, no scripts.

Gives 0 of the 12 instructions most project setup skills give in ~1.4k tokens

Counted across 1,553 of the 3,091 authors here whose files we hold, read 2026-09-06

  • Write the configuration filein 36 of 1553
  • Create the directory structurein 35 of 1553, across 33 files
  • Verify the setupin 31 of 1553, across 28 files
  • Run the setup scriptin 30 of 1553, across 29 files
  • Pre-determine the required sample sizein 29 of 1553, across 12 files
  • Check if the configuration already existsin 29 of 1553
  • Document every testin 26 of 1553, across 10 files
  • Start with a hypothesisin 26 of 1553, across 11 files
  • Ask one question at a timein 22 of 1553
  • Test a single variable per testin 21 of 1553, across 9 files
  • Read product marketing context before asking questionsin 19 of 1553, across 8 files
  • Do not peek and stop earlyin 18 of 1553, across 7 files

Said here and by no other author read

  • Pick the charter file at the repo root
  • Read any cached quality commands
  • Compose the section using the template
  • Apply changes to the charter file
  • Announce the charter update

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.