Audit the repo's Claude instructions for self-correction death spirals — verify-your-work prompts, Stop/advisory hooks that re-fire on unchanged state, unbounded review→fix→re-review loops, and obligations that can never be discharged. Use for "Claude keeps re-checking itself", "the session never ends", "hooks keep waking it up", "it loops on verification", or as part of /opus-pocus. Read-only; reports findings with file:line and a fix per class. NOT for debugging application-level infinite l...
Installs into .claude/skills of the current project.
Are you the author of Finite Recursum?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/totes-mickgoats-finite-recursum)
---
name: finite-recursum
description: Audit the repo's Claude instructions for self-correction death spirals — verify-your-work prompts, Stop/advisory hooks that re-fire on unchanged state, unbounded review→fix→re-review loops, and obligations that can never be discharged. Use for "Claude keeps re-checking itself", "the session never ends", "hooks keep waking it up", "it loops on verification", or as part of /opus-pocus. Read-only; reports findings with file:line and a fix per class. NOT for debugging application-level infinite loops — instruction layer only.
---
# 🛡 Finite Recursum
> *"The robot was checking its work checking its work checking its—"*
The 5-family verifies its own work without being told. Instructions and hooks written to force
verification on older models now stack on top of that and produce spirals: the model re-checks,
finds nothing new, and the instruction layer demands it re-check again.
## What to scan
- Every memory file the repo carries — `CLAUDE.md`, `AGENTS.md`, nested, user-level if opted in
- Every hook that fires on Stop / session-end / post-tool events
- Every skill or agent definition containing review, verification, or completion procedures
- Output styles and system-prompt fragments
## Anti-patterns to find
1. **Verify-your-work incantations that have a loop partner.** "Double-check your work",
"verify before finishing", "always confirm correctness", "re-read your changes" — as standing
prose rules **where something re-raises the obligation**: a Stop or session-end hook, a
re-firing advisory, or a second copy of the rule elsewhere. That combination is loop fuel.
**Not a finding on its own.** A rule naming a *concrete, non-inferable artifact check* —
`run npm test before claiming done`, `run terraform plan and paste the output` — is
load-bearing and stays. The model self-verifies its reasoning; it does not know your commands.
In a repo with no Stop or advisory hooks this class has **no instances**: say so, rather than
flagging the prose.
2. **Re-firing advisories with no state fingerprint.** A Stop/advisory hook that emits the same
warning every time it runs, regardless of whether the underlying state changed. The model
answers, stops, the hook fires again on identical state: wake→answer→stop→wake.
3. **Unbounded review loops.** A review→fix→re-review procedure with no round cap and no exit
criterion besides "no findings". Reviewers on the 5-family will always find *something*;
minor findings extend the loop forever.
4. **Undischargeable obligations.** A rule demanding a condition the agent cannot always satisfy
("all tests must pass before you stop" when the suite needs approval to run; "verify in the
editor" when the agent has no editor). The obligation can't be discharged, so it re-surfaces
every turn.
5. **Staleness-free verification demands.** "Verify X before claiming done" with no allowance
for evidence already gathered this session — forcing re-verification of unchanged subjects
per message instead of per change.
6. **Advisory text that reads as blocking.** A warning phrased like a wall ("BLOCKED", "not
landable") on a condition that is actually advisory — agents stop doing legitimate work.
## Fix prescriptions
| Finding class | Fix |
|---|---|
| Verify-your-work prose *with a loop partner* | Remove the loop partner first — that is the mechanism. Then narrow the prose to the one artifact check that is genuinely load-bearing ("read the artifact, not the exit code"). Deleting a rule that names a real command, in a repo with nothing re-raising it, costs the user a check the model cannot infer |
| Re-firing advisory | Fingerprint the *state* (not the rendered text); emit once per fingerprint; explicit "silence = already reported, not verified clean" wording |
| Unbounded review loop | Cap rounds (≤3–5), then adjudicate: land with gaps named / park with a ruling / escalate. Minor findings never extend the loop |
| Undischargeable obligation | Give it a terminal state: "if you cannot perform X, state that and stop" — an explicit out that discharges the obligation by reporting |
| Per-message re-verification | Staleness rule: evidence stands while its subject is unchanged; re-run after a change, not per message |
| Advisory-as-wall | Reword the verdict to name the action that still proceeds ("lands with a bare `<command>`") |
| Any of the above enforced by a hook | Add a wake/round budget at the hook layer as a backstop — the mechanism, not the prose, is what actually bounds a spiral |
## Bounds
- Scope: memory files, hooks that fire on Stop or session-end, and the review/verification/completion procedures inside skills and agents. Not application source, not dependencies, not another installed plugin.
- Cap: 15 findings, ranked by whether the spiral fires today or only under conditions.
- Done when the declared scope has been swept once and ranked — not when the sweep stops finding loops.
- Quote once, at read time; mark anything you cannot re-confirm `UNVERIFIED` rather than re-reading to check yourself.
- See `skills/opus-pocus/references/casting-safety.md` for the full rules.
## Report format
Per finding: `file:line` · class (1–6) · the quoted text · the prescription · severity
(does it loop *today*, or only under conditions). End with the loop census: how many distinct
spiral mechanisms exist and how many have a bound. `SCANNED NOTHING` if no instruction layer
was found.