Claude Code's keep-coding-instructions kept 1,044 tokens in the full prompt, 0 in the short one, and 18 of 18 fixes matched A developer measured Claude Code 2.1.289's `keep-coding-instructions` output-style flag by capturing the API requests it sends, finding the flag controls a 1,044-token "# Doing tasks" section that appears only in the full system prompt and vanishes entirely in the shorter default prompt. Across 40 runs of a one-line bug fix, 18 of 18 runs in each of three styles made the same edit, added no comment and verified the result, with the custom style's main effect being a doubled closing message. On Claude Code 2.1.289 with Opus 5.5, keep-coding-instructions: true decided whether a 1,044-token Doing tasks section stayed in the system prompt, but only when Claude Code sent its full prompt; in the shorter prompt this account got by default, a custom style with the key and the same style without it produced identical requests. On a one-line bug fix, 18 of 18 runs across three styles made the same edit, added no comment and checked the result after editing, and the custom style's main effect was to double the length of the closing message. Output styles are how you change the way Claude talks for a whole Claude Code session: shorter answers, explanations next to each change, or a different role altogether. The output-styles page attaches one warning to the custom ones you write yourself. Unless the style file sets keep-coding-instructions: true in its frontmatter, Claude Code leaves out its built-in software engineering instructions, "such as how to scope changes, write comments, and verify work." That sentence raises two questions for anyone who writes a style and then uses it in a repository. How much text actually disappears, measured in tokens? And does a session without it code differently: skip the tests, clean up code nobody asked about, leave comments everywhere? We wanted both answers from the requests Claude Code sends to the API rather than from what the model says about its own instructions, so we built a small lab and ran it 40 times under claude -p . Everything below ran on 2026-10-05 between 16:23 and 16:33 UTC with Claude Code 2.1.289 claude --version and claude-opus-5-5 selected with --model opus on macOS. The output-styles page was fetched with trafilatura at 16:20 UTC the same day and fetched again at 16:34 UTC with no change; the other documentation quotes come from fetches between 16:20 and 16:35 UTC. These are the sentences the lab tests, quoted as fetched from https://code.claude.com/docs/en/output-styles : keep-coding-instructions is set to true ." keep-coding-instructions: true if you're changing how Claude communicates but still want it coding the same way. Leave it out if Claude won't be doing software engineering." false " The key is not new. The changelog entry for 2.0.37 reads "Output Styles: Added keep-coding-instructions option to frontmatter". What the page does not give is a size for "the built-in software engineering instructions" or a list of them beyond those three examples, and the default is false , so every custom style that omits the line is in the dropped group. There were three conditions, and every run got a fresh directory copied from the same template: The style is deliberately about writing, the case the docs describe as "Claude won't be doing software engineering": --- name: Plain Writer description: Plain, friendly prose for documentation and explanations --- You are a writing assistant. Answer in plain, friendly prose paragraphs. Avoid bullet lists and headings unless the user asks for them. Keep sentences short, and define any technical term the first time you use it. End every response with a one-sentence summary that starts with "In short:". Condition b inserts keep-coding-instructions: true after the description line, and nothing else changes. Both versions live at .claude/output-styles/plain-writer.md in their own run directory, so the style name and body are byte-identical and only the frontmatter differs. Each run selects it with a one-line .claude/settings.json , {"outputStyle": "Plain Writer"} . The "In short:" sentence is a marker: if a reply ends with it, the style was in force. The template is a tiny Node project. sum.js holds three functions. sum has an off-by-one bug its loop starts at index 1, so it skips the first number , average and formatTotal both call sum , and formatTotal is written in a different style from the rest of the file var , no semicolons as bait for cleanup nobody asked for. test/sum.test.js has four node:test tests, three of which fail because of the bug, and package.json maps npm test to node --test . Each run directory got git init and one commit, so git status started clean and git diff afterwards shows exactly what the session changed. Each run was one invocation: claude -p "$PROMPT" --setting-sources project,local --strict-mcp-config --model opus \ --permission-mode acceptEdits --output-format stream-json --verbose \ --session-id "$SID" --max-turns 40 < /dev/null --setting-sources project,local keeps our user settings, and the hooks and plugins they enable, out of the runs. --strict-mcp-config with no config file means no MCP servers. acceptEdits lets the session edit files without a prompt. We also unset the CLAUDE environment variables that the Claude Code session we were working from exports, CLAUDE EFFORT among them, so the children ran at their own default effort, which every request body recorded as medium . One setup detail is worth passing on. Our first pilot also put Bash allow rules in .claude/settings.json , and Claude Code printed Ignoring 7 permissions.allow entries from .claude/settings.json: this workspace has not been trusted. The run directories are new and were never opened interactively, so they were never trusted. We moved the allow rules npm test , node , git diff and a few more to .claude/settings.local.json , which the settings page says works differently while the file is untracked: "Claude Code applies its allow rules without the workspace trust step it requires for the committed file." The outputStyle key in the same untrusted .claude/settings.json was applied regardless: the init event reported "output style": "Plain Writer" in 28 of 28 runs that had the style. The session transcript records token usage but not the system prompt, and we did not want to rely on asking the model which instructions it can see. The monitoring page documents a way to get the request itself: OTEL LOG RAW API BODIES , which will "Emit the full Anthropic Messages API request and response JSON as api request body / api response body log events", with " file: