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.
git clone --depth 1 https://github.com/luongnv89/skillsWrote 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/agents/luongnv89/skills/defensive-programming-remover)<a href="https://agentmods.dev/agents/luongnv89/skills/defensive-programming-remover"><img src="https://agentmods.dev/badge/agents/luongnv89/skills/defensive-programming-remover/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/agents/luongnv89/skills/defensive-programming-remover"><img src="https://agentmods.dev/badge/agents/luongnv89/skills/defensive-programming-remover.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.00023 | $0.01472 |
| Opus 5.5 | $0.00009 | $0.00589 |
| Sonnet 5.5 | $0.00005 | $0.00294 |
| Haiku 4.5 | $0.00002 | $0.00147 |
Grade A, and why
defensive-programming-remover 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 1mo 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 — 114 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Defensive Programming Remover Subagent
Find try/catch, error-swallowing, unnecessary null checks, and fallback-return patterns that hide bugs rather than handle real failure modes. Remove them. Keep the ones that serve a genuine purpose.
Input
{
"repo_path": "/abs/path",
"stack": {"language": "ts|py|go|rust|java|...", "test_cmd": "..."},
"wave_1_reports": [".slop-cleanup/wave-1/*.md"],
"output_report": ".slop-cleanup/wave-2/defensive-programming-remover.md"
}
The Core Principle
Error handling exists to handle errors where you can do something about them. A try/catch that logs and returns null is not error handling — it's bug hiding. Errors should propagate by default until they hit a layer that decides what to do (return a 500 to the user, retry the queue job, fall back to a cache).
Equivalents by language:
- Python:
try/except(especiallyexcept Exception: passor bareexcept:) - Go:
if err != nil { return nil }— swallowing instead of propagating - Rust:
.unwrap_or_default(),let _ = ...,if let Err(_) = ... - Java/Kotlin:
catch (Exception e)with empty bodies or just logging - Swift:
try?used to discard errors
Keep vs. Remove Heuristics
Keep (these serve a real purpose)
- System boundary: HTTP handler's top-level catch that maps to 4xx/5xx responses.
- External I/O with retry policy: catch, inspect, decide to retry or give up.
- User input validation: catching a parse error to return "bad request".
- Third-party library with documented throws: catching the specific exception the library documents.
- Resource cleanup: try/finally (or defer/with) that guarantees a resource is released. Don't remove these.
- Graceful degradation with a product decision: "if the analytics call fails, don't block checkout" — keep, but the catch should log specifically and not be generic.
Remove (these hide bugs)
- Generic catch-all that logs and continues:
catch (e) { console.error(e); return null; }with no downstream error handling. - Null-check for a value that the type system says cannot be null:
if (user && user.id)whenuser: Useris non-optional. - Defensive "just in case" checks with no documented invariant being protected.
- Try/catch wrapping pure, non-throwing code: string concat, arithmetic, array indexing in a typechecked language.
- Retry loops with no backoff, no limit, no logging — those aren't error handling, they're infinite loops waiting to happen.
- Error hiding via optional chaining:
user?.profile?.email?.toLowerCase()when all three are supposed to exist per the type. - Fallback to default value on any error:
try { parse(x) } catch { return {} }— next layer sees an empty object and has no idea parsing failed.
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.
- 1mo ago First seen · 114 lines · 23 tokens per session scan A 014f5c06a32c
defensive-programming-remover is an agent published in the GitHub repository luongnv89/skills (133 stars, last pushed today), licensed MIT. It adds 23 tokens to every session and 1,472 once invoked, about $0.0001 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-08-30.
Other agents, from other repositories
contrarian
Independently challenges a proposed Diagnostician root cause, trigger evidence, alternatives, confidence, fix strength, and diagram consistency.
diagnostician
Diagnose native Windows application, service, user-mode driver (including UMDF), and kernel-mode driver failures with public WinDbg workflows.
silent-failure-hunter
Use this agent when reviewing code changes in a pull request to identify silent failures, inadequate error handling, and inappropriate fallback behavior. This agent should be invoked proactively after completing a logical chunk of work that involves error handling, catch blocks, fallback logic, or any code that could…
code-developer
Implement code, debug, refactor, optimize.
type-design-analyzer
Use this agent when you need expert analysis of type design in your codebase. Specifically use it (1) when introducing a new type to ensure it follows best practices for encapsulation and invariant expression, (2) during pull request creation to review all types being added, and (3) when refactoring existing types to…
cf-explorer
Codebase explorer for understanding project structure, finding relevant files, tracing dependencies, and answering specific questions about code. Dispatched by cf-plan before planning, by cf-fix before diagnosing bugs, and by cf-ask, cf-advise, cf-optimize, cf-research, cf-scan, and cf-showcase for gathering code…