Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add tmj-90/gaffer --skill deprecate-and-removegit clone --depth 1 https://github.com/tmj-90/gafferWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/tmj-90/gaffer/deprecate-and-remove)<a href="https://agentmods.dev/skills/tmj-90/gaffer/deprecate-and-remove"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/deprecate-and-remove/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/tmj-90/gaffer/deprecate-and-remove"><img src="https://agentmods.dev/badge/skills/tmj-90/gaffer/deprecate-and-remove.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00080 | $0.01282 |
| Opus 5.5 | $0.00032 | $0.00513 |
| Sonnet 5.5 | $0.00016 | $0.00256 |
| Haiku 4.5 | $0.00008 | $0.00128 |
Grade A, and why
deprecate-and-remove scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 16d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 88 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Deprecate, then remove
Removing code changes a contract somebody may still hold. Find every dependent, warn before you cut, remove in the right order, and prove nothing still points at the thing you deleted. Dead code that is really dead is the best diff there is; dead code that is secretly load-bearing is an incident.
Steps
- Prove it is dead — and write the proof down. Search for every reference,
including the non-obvious ones:
- the symbol and its string form (
grep -rn): reflection, dynamic imports, DI registration, templates, routes tables, serialised names, cron/job registries; - tests, fixtures, docs, scripts, CI workflows, dashboards and infra config;
- for a flag or option: every read, and every place that sets it;
- for a column or table: every query, ORM model, migration and report;
- other repos:
find_dependentsandsearch_lorefor declared consumers, and grep any read-only context repos listed in your prompt. "No callers" is a claim; the commands you ran and their empty output are the evidence.
- the symbol and its string form (
- Decide: deprecate first, or remove now. Anything with consumers you cannot see —
another repo, a public or partner API, an operator-set option, a persisted format —
gets a deprecation period. Purely internal code with an empty step-1 search is removed
now. Semantic versioning puts a deprecation in a minor release and the removal in the
next major. If you cannot tell which case applies,
request_decision. - When deprecating, make it loud and dated. Mark it deprecated where tooling shows it
(JSDoc
@deprecated,warnings.warn(DeprecationWarning),[Obsolete],#[deprecated]), log a warning on use (once, not per call), document the replacement, and set the removal date. For HTTP APIs sendDeprecation(RFC 9745) andSunset(RFC 8594) headers with aLinkto the migration note; the sunset date must not precede the deprecation date. - Remove in dependency order. Callers before callees; public surface before
implementation; code before schema. Data follows expand/contract (the
add-db-migrationskill): stop writing, then stop reading, then drop — in separate deliveries when the repo deploys them separately. - Delete completely. Code, tests, fixtures, types, docs, config keys, flag
declarations, and now-unused helpers that only the dead code used. A dependency that
becomes unused is listed in your evidence for a human to remove: package-manager
commands cannot run safely in a delivery worktree (the
dependency-upgradeskill). A half-removed feature leaves a reader guessing which half is real. - Fail loudly for stragglers. An old API caller gets an explicit error with a pointer (HTTP 410 Gone with a link, a CLI message naming the replacement), not a silent 404 or a no-op stub that swallows the call.
- Verify nothing else moved. Run the full suite, build and lint once: removals break through import side effects, registration order, and shared helpers. Re-run the step-1 search to show zero remaining references.
- Record it. A CHANGELOG "Removed"/"Deprecated" entry in the repo's format (the
changelog-generatorskill), and evidence via therecord-evidenceskill: the searches and their empty results, what was deprecated-not-removed and its removal date. On a resume that call is refused: do not retry; put this, the AC → test map and the smallest-change note in your final message.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 16d ago Changed · +27 lines 82c10551c223
- 19d ago First seen · 61 lines · 80 tokens per session scan A bc5d4ca38af8
deprecate-and-remove is a skill published in the GitHub repository tmj-90/gaffer (2 stars, last pushed 17d ago), licensed Apache-2.0. It adds 80 tokens to every session and 1,282 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-28.
Other skills, from other repositories
plan-to-tasks
Transform a plancreation planv{N}.md into a structured tasks.yaml + per-WP workpackages/.yaml using parallel Sonnet sub-agents. Use after plan-creation finishes when you need execution-friendly task structure.
pact-init
Initialize PACT governance files in the current project.
daily-domain-migration-selector
Use when choosing daily Helpdesk service-to-domain migration candidates, table ownership moves, write seam consolidation, domain README gaps, or A-plus architecture burn-down work before implementation.
orchestrating-parallel-work
Orchestrates parallel execution of AI agents with dependency analysis, batch scheduling, and the playbook for landing many branches at once. Use when coordinating multiple concurrent tasks, optimizing task ordering, sequencing batches of code changes into waves, landing parallel branches through review and merge, or…
anthropic-validator
Validates Claude Code assets (skills, hooks, agents, commands, MCP servers, plugins) against official Anthropic standards. Fetches latest docs dynamically and produces structured validation reports.
create-subagent
Generates single-purpose Claude Code sub-agents for use via the Task tool. Use when creating dedicated sub-agents, scaffolding agent definitions, or generating agents with diagnostics and permissions setup.