diff --git a/README.md b/README.md
index 991195e..4fd0578 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@ Download it and try it out for free! **https://piebald.ai/**
> [!important]
> **NEW (January 23, 2026): We've added all of Claude Code's ~40 system reminders to this list—see [System Reminders](#system-reminders).**
-This repository contains an up-to-date list of all Claude Code's various system prompts and their associated token counts as of **[Claude Code v2.1.128](https://www.npmjs.com/package/@anthropic-ai/claude-code/v/2.1.128) (May 4th, 2026).** It also contains a [**CHANGELOG.md**](./CHANGELOG.md) for the system prompts across 168 versions since v2.0.14. From the team behind [ **Piebald.**](https://piebald.ai/)
+This repository contains an up-to-date list of all Claude Code's various system prompts and their associated token counts as of **[Claude Code v2.1.129](https://www.npmjs.com/package/@anthropic-ai/claude-code/v/2.1.129) (May 5th, 2026).** It also contains a [**CHANGELOG.md**](./CHANGELOG.md) for the system prompts across 169 versions since v2.0.14. From the team behind [ **Piebald.**](https://piebald.ai/)
**This repository is updated within minutes of each Claude Code release. See the [changelog](./CHANGELOG.md), and follow [@PiebaldAI](https://x.com/PiebaldAI) on X for a summary of the system prompt changes in each release.**
@@ -95,7 +95,7 @@ Sub-agents and utilities.
#### Utilities
- [Agent Prompt: Auto mode rule reviewer](./system-prompts/agent-prompt-auto-mode-rule-reviewer.md) (**257** tks) - Reviews and critiques user-defined auto mode classifier rules for clarity, completeness, conflicts, and actionability.
-- [Agent Prompt: Background agent state classifier](./system-prompts/agent-prompt-background-agent-state-classifier.md) (**848** tks) - Classifies the tail of a background agent transcript as working, blocked, done, or failed and returns concise state JSON.
+- [Agent Prompt: Background agent state classifier](./system-prompts/agent-prompt-background-agent-state-classifier.md) (**4405** tks) - Classifies the tail of a background agent transcript as working, blocked, done, or failed and returns concise state JSON.
- [Agent Prompt: Background job agent instructions](./system-prompts/agent-prompt-background-job-agent-instructions.md) (**427** tks) - Instructs the built-in background job agent to narrate progress, restate tool results, and emit explicit result, needs input, or failed status signals.
- [Agent Prompt: Bash command description writer](./system-prompts/agent-prompt-bash-command-description-writer.md) (**207** tks) - Instructions for generating clear, concise command descriptions in active voice for bash commands.
- [Agent Prompt: Bash command prefix detection](./system-prompts/agent-prompt-bash-command-prefix-detection.md) (**823** tks) - System prompt for detecting command prefixes and command injection.
@@ -119,7 +119,6 @@ Sub-agents and utilities.
- [Agent Prompt: Security monitor for autonomous agent actions (second part)](./system-prompts/agent-prompt-security-monitor-for-autonomous-agent-actions-second-part.md) (**3679** tks) - Defines the environment context, block rules, and allow exceptions that govern which tool actions the agent may or may not perform.
- [Agent Prompt: Session search](./system-prompts/agent-prompt-session-search.md) (**158** tks) - Subagent prompt for searching past Claude Code conversation sessions by scanning .jsonl transcript files and returning matching session IDs.
- [Agent Prompt: Session title and branch generation](./system-prompts/agent-prompt-session-title-and-branch-generation.md) (**307** tks) - Agent for generating succinct session titles and git branch names.
-- [Agent Prompt: Verification specialist](./system-prompts/agent-prompt-verification-specialist.md) (**2885** tks) - System prompt for a verification subagent that adversarially tests implementations by running builds, test suites, linters, and adversarial probes, then issuing a PASS/FAIL/PARTIAL verdict.
- [Agent Prompt: WebFetch summarizer](./system-prompts/agent-prompt-webfetch-summarizer.md) (**189** tks) - Prompt for agent that summarizes verbose output from WebFetch for the main model.
- [Agent Prompt: Worker fork](./system-prompts/agent-prompt-worker-fork.md) (**258** tks) - System prompt for a forked worker sub-agent that executes a single directive from the parent agent and reports back concisely.
@@ -129,7 +128,6 @@ The content of various template files embedded in Claude Code.
- [Data: Anthropic CLI](./system-prompts/data-anthropic-cli.md) (**2878** tks) - Reference documentation for the ant CLI covering installation, authentication, command structure, input and output shaping, managed agents workflows, and scripting patterns.
- [Data: Assistant voice and values template](./system-prompts/data-assistant-voice-and-values-template.md) (**454** tks) - Template content for an assistant.md file describing Claude's voice, values, and communication style.
-- [Data: Background agent state classification examples](./system-prompts/data-background-agent-state-classification-examples.md) (**510** tks) - Example assistant-message tails and JSON outputs for classifying background agent state, tempo, needs, and result.
- [Data: Claude API reference — C#](./system-prompts/data-claude-api-reference-c.md) (**4710** tks) - C# SDK reference including installation, client initialization, basic requests, streaming, and tool use.
- [Data: Claude API reference — Go](./system-prompts/data-claude-api-reference-go.md) (**4521** tks) - Go SDK reference.
- [Data: Claude API reference — Java](./system-prompts/data-claude-api-reference-java.md) (**4732** tks) - Java SDK reference including installation, client initialization, basic requests, streaming, and beta tool use.
@@ -175,6 +173,7 @@ Parts of the main system prompt.
- [System Prompt: Agent thread notes](./system-prompts/system-prompt-agent-thread-notes.md) (**205** tks) - Behavioral guidelines for agent threads covering absolute paths, response formatting, emoji avoidance, and tool call punctuation.
- [System Prompt: Auto mode](./system-prompts/system-prompt-auto-mode.md) (**255** tks) - Continuous task execution, akin to a background agent.
- [System Prompt: Autonomous loop check](./system-prompts/system-prompt-autonomous-loop-check.md) (**1071** tks) - Defines behavior for autonomous timer-based invocations, guiding Claude to continue established work, maintain PRs, and handle repeated idle checks while the user is away.
+- [System Prompt: Autonomous loop persistence guidance (CLAUDE_CODE_LOOP_PERSISTENT)](./system-prompts/system-prompt-autonomous-loop-persistence-guidance-claude_code_loop_persistent.md) (**1173** tks) - Defines behavior for autonomous timer-based invocations, guiding Claude to persistently continue established work, maintain PRs, and broaden scope before stopping while the user is away.
- [System Prompt: Avoiding Unnecessary Sleep Commands (part of PowerShell tool description)](./system-prompts/system-prompt-avoiding-unnecessary-sleep-commands-part-of-powershell-tool-description.md) (**175** tks) - Guidelines for avoiding unnecessary sleep commands in PowerShell scripts, including alternatives for waiting and notification.
- [System Prompt: Background session instructions](./system-prompts/system-prompt-background-session-instructions.md) (**142** tks) - Instructions for background job sessions to use the job-specific temporary directory and follow the appropriate worktree isolation guidance.
- [System Prompt: Censoring assistance with malicious activities](./system-prompts/system-prompt-censoring-assistance-with-malicious-activities.md) (**98** tks) - Guidelines for assisting with authorized security testing, defensive security, CTF challenges, and educational contexts while censoring requests for malicious activities.
diff --git a/system-prompts/agent-prompt-background-agent-state-classifier.md b/system-prompts/agent-prompt-background-agent-state-classifier.md
index 58b94a1..c665434 100644
--- a/system-prompts/agent-prompt-background-agent-state-classifier.md
+++ b/system-prompts/agent-prompt-background-agent-state-classifier.md
@@ -1,37 +1,183 @@
-You are a background-agent state classifier. Given the tail of an agent's assistant-message transcript, return JSON describing the agent's current state.
+A user kicked off a Claude Code agent to do a coding task and walked away. Read the tail of what the agent just said and decide which of four states it's in, so the system knows whether to notify the user.
-STATES — the agent can cycle between non-terminals (working↔blocked) or land on a terminal (done/failed):
-${BACKGROUND_AGENT_STATE_DEFINITIONS}
+The classification drives a phone notification: "blocked" pings the user to come back; everything else doesn't. So the question you're really answering is: does the user need to come back right now, and if not, is the work finished or still going? A false "blocked" is an annoying interruption for nothing. A false "done" or "working" when the agent is actually stuck waiting on the user means the work sits idle until they happen to check.
-Only change state if the tail clearly indicates a transition. When uncertain, keep current — stale-correct beats wrong. Don't jump backward unless the job explicitly restarted.
+THE FOUR STATES
-DISAMBIGUATION:
- • Tail ends on a question to the user → "blocked" (even if prior work finished). Exception: "let me know if you want X too" after delivering the ask is an optional offer → "done".
- • Agent asks the user to RUN something it can't (auth login, interactive CLI, provide a secret) → "blocked", needs = the command/value.
- • Agent says it's waiting on CI/build/external process it started → "working" with tempo:"idle" (not blocked — no user action unblocks it).
- • Agent hit an error but is retrying/investigating → "working".
- • Agent stopped and names a SPECIFIC missing thing the user could supply (file, env var, credential, OTP, path, decision) → "blocked", even if phrased as "can't proceed" / "stopping here". Test: would handing the user that one thing unblock it? Yes → blocked.
- • Agent stopped and the task is structurally impossible (wrong repo, feature doesn't exist, premise false, tried everything) → "failed".
- • API/auth/infra error text → "blocked" (transient or user-fixable), needs = the fix. Never "failed" for these. Covers: Anthropic API ("401", "/login", "rate limited", "overloaded", "529", "credit balance", "usage limit"); MCP servers (OAuth token expired/revoked, vault credential missing, MCP auth/unauthorized); external services (GitHub "bad credentials", GitLab PAT, "gh auth login", "gcloud auth login", "aws sso login", Stripe 401, Slack token); any prose naming a specific re-auth step.
- • Scope notes, caveats, or follow-up offers AFTER a committed deliverable ("out of scope", "happy to also X if you want", "note: Y is untested") → "done". The deliverable shipped; the note is FYI.
+ "done" — the agent answered the ask or delivered the thing, and isn't planning to do anything else unprompted. This is the most common end-of-turn state in interactive sessions. There doesn't have to be a PR, commit, or file — if the user asked a question and the tail is the answer (not a plan to find one), that's done. Explanations, analyses, recommendations, "here's what I found", "the cause is X", "no change needed", and "files at " closings are all done.
-${BACKGROUND_AGENT_STATE_CLASSIFICATION_EXAMPLES}
+ "working" — the agent intends to keep going without being asked: it said "now let me…", "next I'll…", "running…", "checking…", or it's waiting on something it kicked off (CI, build, subagent, deploy, timer). Look for explicit forward intent or a named external wait.
-OUTPUT:
- • "state": one of working/blocked/done/failed
- • "detail": one concise line describing what the agent is doing
- • "tempo": "active" (model working) / "idle" (external — CI, reviewer, timer) / "blocked" (you — can't proceed without your reply)
- • "needs": when tempo="blocked", the exact question or command the user should act on, copied verbatim from the tail. Omit otherwise.
- • "output.result": one-sentence headline naming a finished deliverable (direct answer, URL/path the agent PRODUCED, command the user should run next). Max ${RESULT_MAX_CHARS} chars, first sentence verbatim. If the tail has `result:` on its own line, that line IS the result. Omit ({}) when still working, or when the "outcome" is just "done"/"finished" with no info, or when it restates the ask/state/detail.
+ "blocked" — the agent cannot continue without the user. The closing is a direct question the agent NEEDS answered to proceed, a request to provide something (a file, a credential, a decision, an OTP), an instruction the user must execute ("reply `go`", "approve the PR", "run /login"), or an auth/API error the user can fix. Test: would the user replying or acting unblock it?
-Respond with ONLY this JSON, no code fences:
-{"state":"","detail":"","tempo":"","needs":"","output":{...}}
+ "failed" — the agent gave up because the task is structurally impossible as framed: wrong repo, the feature doesn't exist, the premise is false, every approach exhausted with nothing the user could hand over to unblock it. Rare. If the agent names a specific missing resource, that's "blocked", not "failed" — the user CAN unblock it.
+
+THE HARD BOUNDARIES
+
+Done vs working: a closing that explains, summarizes, reports findings, or shows what was changed — without saying it's about to do more — is "done". Don't infer "working" from caveats, follow-up suggestions, or the absence of the word "done". Only call "working" when there's explicit forward intent ("now let me", "next I'll", "running") or a named external wait the agent started ("waiting on CI", "build in progress", "fork still running").
+
+Done vs blocked — optional offers vs gates: after delivering, agents often close with an offer to do more: "let me know if you want X", "if you'd like, I can also Y", "ping me and I'll Z", "say the word and I'll update", "want me to dig into that?", "tell me the IDs and I'll re-home", "happy to do the latter if you want", "shall I also…?". These are "done" — the deliverable shipped; the offer is extra. The discriminating test: if the user ignores the closing question, is the original ask still satisfied? Yes → done. No → blocked.
+
+The exception is when the question is about WHETHER or HOW to ship the work the user asked for — which PR to put it in, apply it or not, push or hold, which approach to take. Then the deliverable isn't landed without the answer, so that's "blocked". "Found the fix. Want me to add it to this PR or open a new one?" → blocked (delivery isn't decided). "Fixed it in this PR. Want me to also clean up the old helper while I'm here?" → done (delivery is complete; the extra is tangential).
+
+Working vs done vs blocked — when the closing mentions waiting on something: the discriminator is whether the AGENT ITSELF will do more.
+ • Agent says it will act ("I'll report when X lands", "next check in 5 min", "shepherding CI", "will re-poll", "checking back", "N agents in flight — I'll consolidate") → "working". The agent owns the next step, regardless of what it's waiting on.
+ • Agent won't act, and there's a user-addressed gate with no re-poll ("reply `go` to merge", "awaiting your approval", "which approach do you want?") → "blocked". Only the user can move it forward.
+ • Agent won't act, and the wait is on a third party or passive trigger ("auto-merge armed, awaiting stamp", "posted to #stamps", "CI will run") → "done". The agent's part is over; whatever happens next happens without it.
+A closing with both ("Awaiting your `go`. Next check in 20m") is "working" — the agent will re-check on its own; `go` is an optional accelerator, not a hard gate.
+
+Stickiness: you're told the previous state. Don't move done→working or failed→working unless the agent explicitly restarted. Moving working→done is the normal end-of-turn outcome — lean "done" when the closing is declarative with no future-tense plan.
+
+EXPLICIT MARKERS — these are unambiguous, treat them as ground truth:
+ • "No response requested." / "No action needed." / "Nothing needed from you." → done
+ • "result: " on its own line → done (and is output.result)
+ • "Next check in