anti-rationalization

anti-rationalization is a cursor rule for Cursor from hmj1026/dhpk. It costs 5 tokens per session (1,624 once invoked), scanned A, original, MIT.

A reference for recognizing self-justifying thoughts that can lead someone to skip required review, testing, or safety steps. It is loaded when that hesitation appears, rather than used for every task.

In plain words
What is it for?
Check rationalizations before omitting a reviewer, TDD step, or sentinel step required by a project's execution policy.
Why use it?
It helps interrupt decisions such as treating a small change as too safe to review, reducing the chance of skipping safeguards.

Cursor rule for Cursor

Written for Cursor: a Cursor rule (.mdc).

Install

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.

agentmods
npx agentmods add rules/hmj1026/dhpk/anti-rationalization
Clone the repo
git clone --depth 1 https://github.com/hmj1026/dhpk

Made for: Cursor.

Wrote 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.

agentmods badge for anti-rationalization

README.md
[![agentmods](https://agentmods.dev/badge/rules/hmj1026/dhpk/anti-rationalization.svg)](https://agentmods.dev/rules/hmj1026/dhpk/anti-rationalization)
Your own site
<a href="https://agentmods.dev/rules/hmj1026/dhpk/anti-rationalization"><img src="https://agentmods.dev/badge/rules/hmj1026/dhpk/anti-rationalization.svg" alt="Measured on agentmods" height="20"></a>
Per session 5 Only the description is in the session, so the agent can decide to use it. The body loads when it is invoked.
When invoked 1,624 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00005 $0.01624
Opus 5 $0.00003 $0.00812
Sonnet 5 $0.00001 $0.00325
Haiku 4.5 $0.00001 $0.00162

Measured yesterday against content hash 3b942ffabab5, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-06, from the pricing page.

Security

Grade A, and why

anti-rationalization 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 yesterday.

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.

cursor/rules/anti-rationalization.mdc · 67 lines

How it starts

The opening of the file, as written. The whole thing — 67 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Anti-Rationalization Patterns

Self-talk stop-loss reference for the rationalization phrasings that precede skipping a mandatory reviewer / TDD / sentinel step. Not always-on; referenced from .cursor/dhpk/policies/execution-policy.md "Anti-rationalization" section.

Load when: feeling hesitant about skipping any one of reviewer / TDD / sentinel mandatory steps; self-reference before acting.

Why list them out

Reviewing common judgment biases that resurface across sessions, each one is accompanied by a single line of self-persuasion. This file collects the common phrasings as a self-talk stop-loss reference table.

The most dangerous moment for a rationalization phrase is the instant it genuinely feels reasonable; consulting this table can yank that system-1 impulse back into system-2 thinking.


Common phrasings → counter-arguments

Self-persuasion phrasing Counter-argument / fact to return to
"This change is small, no reviewer needed" The sentinel system is designed for the cumulative risk of small changes, not large-change-only. Three-line changes have historically tripped CSRF / SQL injection / silent truncation traps.
"Sentinel auto-reaps, just commit first" The reap script's 24h threshold is a safety net, not a rationalisation for skipping the reviewer. Reap firing means "the previous review was missed" — it's a trap, not a feature.
"Bug is obvious, skip tdd-guide and just fix" "Obvious" is the single largest source of known bias. RED test forces the symptom into a reproducible failure, which is the only guarantee that you fix the root cause and not just the symptom. Historical record: bug fixes that skip RED have an average regression rate > 30%.
"Append-only exemption should apply here" Definition: .cursor/dhpk/policies/execution-policy.md Glossary. It applies only to pure additions — any line entering an existing method body, parameter reorder, or docblock edit means it does NOT apply. Before invoking it, first check the diff is actually 100% inside "new file / new method appended to end".
"Commit first, write tests after" The TDD workflow is RED → GREEN → REFACTOR, not GREEN → commit → RED. Tests written after the implementation naturally hug the implementation, not the requirement — and cannot detect "what was fixed wrong". Once committed, the psychological priority of writing those follow-up tests drops, every time.
"This is unique to us, we need custom logic" Library/service evaluation is the prerequisite, not the conclusion. Before building custom, answer: (1) what existing library did you rule out and why? (2) would its edge cases matter? (3) is custom actually simpler than integrate + maintain? Can't answer all → premature. Existing solutions ship battle-hardened edge cases.
"I'll add logging / telemetry after it works" "After" reliably becomes "after the first incident" — the most expensive moment to discover you're blind. Instrument as you build, the same way you test as you build; a feature that ships without telemetry turns its first prod bug into archaeology instead of a query.
"console.log is fine / more logs = more observability" Unstructured output cannot be filtered, correlated, or alerted on, and volume is not signal — three queryable structured events beat three hundred prose lines. A stable event name + fields + a correlation ID costs five minutes once; reconstructing an incident from orphan log lines costs hours.
"We'll document / version the API later" The types are the contract, and Hyrum's Law guarantees every observable behaviour (including undocumented quirks) becomes a dependency once anyone relies on it. Design for extension now — additive, optional fields; retrofitting a version scheme after consumers depend on the shape is a breaking change, not a later chore.
"I'm confident, skip the doubt step" Confidence correlates poorly with correctness on novel problems — the moment of certainty is exactly when a blind spot hides. A bounded fresh-context doubt pass (ARTIFACT + CONTRACT, never your conclusion) is cheap now; debugging the wrong direction after commit is not. See .cursor/dhpk/policies/execution-policy.md "In-flight doubt cycle".
"The fresh reviewer disagreed, so I was wrong / so it's noise" A fresh reviewer lacks your context — disagreement is information, not a verdict. Re-read the artifact against the finding and classify it (contract-misread / actionable / trade-off / noise); rubber-stamping the reviewer is the same failure as ignoring it. Zero actionable findings across 2+ substantive cycles = doubt theatre → escalate.
"We'll remove the dead / zombie code later" Code is a liability, not an asset — unreachable code misleads every future reader, surfaces in every grep and impact analysis, and quietly rots. Remove it in the same change that orphaned it (your own mess); for anything with consumers, ship the migration path first, then delete.

Read the full file on GitHub · 67 lines

Changes

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.

  1. yesterday First seen · 67 lines · 5 tokens per session scan A 3b942ffabab5

Subscribe to this mod's changes

anti-rationalization is a cursor rule published in the GitHub repository hmj1026/dhpk (2 stars, last pushed yesterday), licensed MIT. It adds 5 tokens to every session and 1,624 once invoked, about $0.0000 per session on Opus 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-05.