# Claude Code v2.1.271: system prompt

> 0 added and 1 removed, of 214 lines, in the prompt 17 of 27 arms receive. 3 other prompts also changed. 3 of 27 tool descriptions changed. 1 of 26 tool schemas changed. The appended system-reminder blocks moved: 1 line added, 1 line removed. Compared against v2.1.270.

The two arm counts on this page measure different things: 17 arms receive the prompt the headline is about, and the widest edit below reached 23, because the same changed lines sit in more than one prompt.

Web version: https://changelogs.core-directive.com/prompts/2.1.271?arm=sdk-cli&config=flags-account

## What this version holds
- model strings captured: 27
- tool descriptions: 27
- compared against: v2.1.270
- system prompt edits: 2
- widest system prompt edit: +0/-2 lines
- tool descriptions changed: 3

## What moved

### System prompt, reached 23 of 27 arms (+0/-2 lines)

This edit reached 23 of 27 arms: claude-3-5-haiku, claude-3-5-sonnet, claude-3-7-sonnet, claude-3-opus, claude-haiku-4-5, claude-opus-4-5, claude-opus-4-6, claude-opus-4-7, claude-sonnet-4-0, claude-sonnet-4-5, claude-sonnet-4-6, haiku, claude-sonnet-5, claude-sonnet-5[1m], opusplan, sonnet, sonnet[1m], (unset), claude-opus-4-0, claude-opus-4-1, claude-opus-5, claude-opus-5[1m], opus.

The same edit landed in one other copy of this prompt, which differs from this one only in text interpolated per model.

```diff
@@ from line 212 @@
 
 # Context management
 When the conversation grows long, some or all of the current context is summarized; the summary, along with any remaining unsummarized context, is provided in the next context window so work can continue — you don't need to wrap up early or hand off mid-task.
-
-<total_tokens>15000000 tokens left</total_tokens>
```

### System prompt, Opus 4.8 (+1/-3 lines)

This edit reached 4 of 27 arms: claude-opus-4-8, default, claude-fable-5, claude-mythos-5.

The same edit landed in 2 other copies of this prompt, which differ from this one only in text interpolated per model.

```diff
@@ from line 14 @@
 
 When you use a pronoun for someone — the user or anyone else you mention — and their pronouns haven't been stated, use they/them. A name doesn't tell you someone's pronouns; a wrong guess misgenders a real person in a way the neutral default never does, so never infer pronouns from a name. This applies to all user-visible text, including visible thinking.
 
-For actions that are hard to reverse or outward-facing, confirm first unless durably authorized or explicitly told to proceed without asking; approval in one context doesn't extend to the next. Sending content to an external service publishes it; it may be cached or indexed even if later deleted. Before deleting or overwriting, look at the target. If what you find contradicts how it was described, or you didn't create it, surface that instead of proceeding. Report outcomes faithfully: if tests fail, say so with the output; if a step was skipped, say that; when something is done and verified, state it plainly without hedging.
+For actions that are hard to reverse or outward-facing, confirm first unless durably authorized or explicitly told to proceed without asking; approval in one context doesn't extend to the next. Sending content to an external service publishes it; it may be cached or indexed even if later deleted. Before deleting or overwriting, look at the target. Report outcomes faithfully: if tests fail, say so with the output; if a step was skipped, say that; when something is done and verified, state it plainly without hedging.
 
 # Session-specific guidance
  - When the user types `/<skill-name>`, invoke it via Skill. Only use skills listed in the user-invocable skills section — don't guess.
```

```diff
@@ from line 49 @@
 
 # Context management
 When the conversation grows long, some or all of the current context is summarized; the summary, along with any remaining unsummarized context, is provided in the next context window so work can continue — you don't need to wrap up early or hand off mid-task.
-
-<total_tokens>15000000 tokens left</total_tokens>
```

### Tool: Monitor (+2/-2 lines)

This edit reached all 27 arms.

```diff
@@ from line 2 @@
 
 Pick by how many notifications you need:
 - **One** ("tell me when the server is ready / the build finishes") → use **Bash with `run_in_background`** and a command that exits when the condition is true, e.g. `until grep -q "Ready in" dev.log; do sleep 0.5; done`. You get a single completion notification when it exits.
-- **One per occurrence, indefinitely** ("tell me every time an ERROR line appears") → Monitor with an unbounded command (`tail -f`, `inotifywait -m`, `while true`).
+- **One per occurrence, until the monitor expires (re-arm to continue)** ("tell me every time an ERROR line appears") → Monitor with an unbounded command (`tail -f`, `inotifywait -m`, `while true`).
 - **One per occurrence, until a known end** ("emit each CI step result, stop when the run completes") → Monitor with a command that emits lines and then exits.
 
 Your script's stdout is the event stream. Each line becomes a notification. Exit ends the watch.
```

```diff
@@ from line 58 @@
 
 Stdout lines within 200ms are batched into a single notification, so multiline output from a single event groups naturally.
 
-The script runs in the same shell environment as Bash. Exit ends the watch (exit code is reported). Timeout → killed. Set `persistent: true` for session-length watches (PR monitoring, log tails) — the monitor runs until you call TaskStop or the session ends. Use TaskStop to cancel early.
+The script runs in the same shell environment as Bash. Exit ends the watch (exit code is reported). Every monitor expires after `timeout_ms` (default 5 minutes, at most 10 minutes): it is killed and you get one notice with the event count. Re-arm it if you still need the watch; for a long watch (PR monitoring, log tails) set `timeout_ms` to the maximum and re-arm on each expiry, and widen the filter if an expiry with no events was unexpected. Use TaskStop to cancel early.
 **ws source** — open a WebSocket and stream each incoming text frame as an event. No shell, no polling: the server pushes, you get notified.
 
   Monitor({
```

### Tool: SendMessage (+1/-1 lines)

This edit reached all 27 arms.

```diff
@@ from line 26 @@
 
 Send the bare name — a name that exactly matches one live agent or session (on this machine, on another machine, or in the cloud) delivers directly. Append the ` [ref]` only when the bare name is not enough — `ListAgents` shows two rows with it, or an error asks you to disambiguate (you typed only a prefix, or a session list could not be checked). A ref you did not just read from a listing or an error will not resolve, and if the same name also names an in-process agent, the bare name always wins — use the in-process one.
 
-A listed peer is alive and will process your message; messages enqueue and drain at the receiver's next tool round (its `ListAgents` row says whether it is busy or idle right now). Your message arrives wrapped as `<cross-session-message from="...">`. **To reply to an incoming message, copy its `from` attribute as your `to`.** Cross-session messages travel between SESSIONS: if you are a subagent, your send goes out under your parent session's address, and any reply is delivered to the parent session's conversation, not to you.
+A listed peer is alive and will receive your message; messages enqueue and drain at the receiver's next tool round (its `ListAgents` row says whether it is busy or idle right now). A successful send means the message reached that session, not that its Claude read it: a session running in a different permission mode than yours holds cross-session messages for its user's approval (and may let them expire), and a session can refuse them outright — for a session on this machine a `[Cross-session delivery notice]` tells you when that happens (the tool result says when this session has no inbox for one to reach); for a Remote Control, cloud or Claude Desktop session nothing reports back, so never treat silence as agreement. Your message arrives wrapped as `<cross-session-message from="...">`. **To reply to an incoming message, copy its `from` attribute as your `to`.** Cross-session messages travel between SESSIONS: if you are a subagent, your send goes out under your parent session's address, and any reply is delivered to the parent session's conversation, not to you.
 
 To hear when a session ON THIS MACHINE finishes what it is doing, pass `notify_when_idle: true` (from the main conversation only) — one-shot and opt-in: exactly one `[Cross-session idle notice]` arrives when it next goes idle (or exits) — shown to you, or only to your user when this session holds peer messages for approval (the tool result says which); if it never signals within the subscription's lifetime (it may still be busy, may refuse inbound requests, or may have ended abruptly) the notice says the subscription expired instead. Omit `message` for a pure subscription that costs that session nothing; include one to deliver it now AND subscribe. Never poll `ListAgents` in a loop or send "are you done?" messages instead.
 
```

### Tool: Workflow (+1/-1 lines)

This edit reached all 27 arms.

```diff
@@ from line 32 @@
 
 Before writing a script, load the `workflow-authoring` skill — the workflow authoring reference: script API and gotchas, resume, the **Ultracode** section, quality patterns, worked examples.
 
-This session has the default workflow size guideline: medium — keep workflows under 15 agents. This is a guideline, not a hard limit — follow it unless the user's prompt calls for a different scale. The user can raise or remove it with "Dynamic workflow size" in /config.
+This session has the default workflow size guideline: medium — keep workflows under 10 agents. This is a guideline, not a hard limit — follow it unless the user's prompt calls for a different scale. The user can raise or remove it with "Dynamic workflow size" in /config.
```

## Tool descriptions
- Agent: https://changelogs.core-directive.com/prompts/2.1.271/tools/Agent.txt?arm=sdk-cli&config=flags-account
- Bash: https://changelogs.core-directive.com/prompts/2.1.271/tools/Bash.txt?arm=sdk-cli&config=flags-account
- CronCreate: https://changelogs.core-directive.com/prompts/2.1.271/tools/CronCreate.txt?arm=sdk-cli&config=flags-account
- CronDelete: https://changelogs.core-directive.com/prompts/2.1.271/tools/CronDelete.txt?arm=sdk-cli&config=flags-account
- CronList: https://changelogs.core-directive.com/prompts/2.1.271/tools/CronList.txt?arm=sdk-cli&config=flags-account
- Edit: https://changelogs.core-directive.com/prompts/2.1.271/tools/Edit.txt?arm=sdk-cli&config=flags-account
- EnterWorktree: https://changelogs.core-directive.com/prompts/2.1.271/tools/EnterWorktree.txt?arm=sdk-cli&config=flags-account
- ExitWorktree: https://changelogs.core-directive.com/prompts/2.1.271/tools/ExitWorktree.txt?arm=sdk-cli&config=flags-account
- ListAgents: https://changelogs.core-directive.com/prompts/2.1.271/tools/ListAgents.txt?arm=sdk-cli&config=flags-account
- Monitor (changed in this version): https://changelogs.core-directive.com/prompts/2.1.271/tools/Monitor.txt?arm=sdk-cli&config=flags-account
- NotebookEdit: https://changelogs.core-directive.com/prompts/2.1.271/tools/NotebookEdit.txt?arm=sdk-cli&config=flags-account
- PushNotification: https://changelogs.core-directive.com/prompts/2.1.271/tools/PushNotification.txt?arm=sdk-cli&config=flags-account
- Read: https://changelogs.core-directive.com/prompts/2.1.271/tools/Read.txt?arm=sdk-cli&config=flags-account
- ReportFindings: https://changelogs.core-directive.com/prompts/2.1.271/tools/ReportFindings.txt?arm=sdk-cli&config=flags-account
- ScheduleWakeup: https://changelogs.core-directive.com/prompts/2.1.271/tools/ScheduleWakeup.txt?arm=sdk-cli&config=flags-account
- SendMessage (changed in this version): https://changelogs.core-directive.com/prompts/2.1.271/tools/SendMessage.txt?arm=sdk-cli&config=flags-account
- Skill: https://changelogs.core-directive.com/prompts/2.1.271/tools/Skill.txt?arm=sdk-cli&config=flags-account
- TaskCreate: https://changelogs.core-directive.com/prompts/2.1.271/tools/TaskCreate.txt?arm=sdk-cli&config=flags-account
- TaskGet: https://changelogs.core-directive.com/prompts/2.1.271/tools/TaskGet.txt?arm=sdk-cli&config=flags-account
- TaskList: https://changelogs.core-directive.com/prompts/2.1.271/tools/TaskList.txt?arm=sdk-cli&config=flags-account
- TaskOutput: https://changelogs.core-directive.com/prompts/2.1.271/tools/TaskOutput.txt?arm=sdk-cli&config=flags-account
- TaskStop: https://changelogs.core-directive.com/prompts/2.1.271/tools/TaskStop.txt?arm=sdk-cli&config=flags-account
- TaskUpdate: https://changelogs.core-directive.com/prompts/2.1.271/tools/TaskUpdate.txt?arm=sdk-cli&config=flags-account
- WebFetch: https://changelogs.core-directive.com/prompts/2.1.271/tools/WebFetch.txt?arm=sdk-cli&config=flags-account
- WebSearch: https://changelogs.core-directive.com/prompts/2.1.271/tools/WebSearch.txt?arm=sdk-cli&config=flags-account
- Workflow (changed in this version): https://changelogs.core-directive.com/prompts/2.1.271/tools/Workflow.txt?arm=sdk-cli&config=flags-account
- Write: https://changelogs.core-directive.com/prompts/2.1.271/tools/Write.txt?arm=sdk-cli&config=flags-account

## Full text
- system prompt: https://changelogs.core-directive.com/prompts/2.1.271/system.txt?arm=sdk-cli&config=flags-account
