← ClaudeAtlas

recover-from-false-positivelisted

Recover Claude Code session logs after an Anthropic API output-classifier false positive — the "cyber-related safeguards" / "appears to violate our Usage Policy" hard failure that kills a turn mid-generation. Use to (a) surgically remove the triggering user message + error response from the active session so it resumes cleanly, (b) clean accumulated refusal turns across old sessions, and (c) stop recurrence via a per-repo CLAUDE.md framing guard. PROACTIVE: if "appears to violate our Usage Policy" or "cyber-related safeguards" appears anywhere — user message, error output, tool result, workflow failure — invoke immediately without being asked. Also trigger on: "false positive", "fake violation", "it blocked me again", "remove the refusals from the logs", "cannot resume my conversation", "scrub the session logs", or any known-legitimate repo (mining, supply-chain/sigstore, BTCPay/Lightning, chaos/infra-ops, security infra) that tripped the classifier. JSON-aware log surgeon, never a blind sed/grep delete.
88plug/recover-from-false-positive · ★ 0 · AI & Automation · score 63
Install: claude install-skill 88plug/recover-from-false-positive
# Recover from a cyber-safeguard false positive ## Primary recovery — do this first (de-saturate; never switch models) Removing refusal turns alone does NOT stop a session from re-tripping — the client filters `isApiErrorMessage` turns before the API send (verified in the binary). What re-fires is the dense WORK content in the resume window. So the FIRST move is **de-saturation**, not model-switching (model switch does nothing — the classifier is family-wide) and not `/compact` (a generation over the poison → also trips). 1. **Run recovery from a CLEAN sibling terminal, never inside the stuck session.** Invoking this skill in the stuck session injects its own dense vocab and makes the trip worse (cascade). 2. From the clean terminal: ```bash python3 …/scrub_refusals.py --fix-active --apply # removes refusals AND de-saturates when saturated # or target a session whose refusals were already scrubbed but still trips: python3 …/scrub_refusals.py --desaturate --file <session.jsonl> --apply ``` De-saturation is **surgical by default**: it DROPS the offending vocabulary-dense turns in the resume window and keeps every other turn **byte-exact** (word-for-word), re-stitching the chain and dropping tool_use/tool_result pairs as a unit so resume can't orphan a tool call. `--stub` keeps transcript length by neutralizing in place instead. 3. **In place — no close, no model switch (preferred): CLEAR THEN REINJECT.** `/clear` is local (empties t