Skip to main content

Captured System Prompts

A system prompt is the text that Claude Code sends to the model before your first message. It tells the model who it is, how to behave, and what the session looks like. The model reads it on every request.

Claude Code has no single system prompt. It builds one from parts. The parts depend on the model, on flags, on env vars, on your output style, and on whether the request comes from the main agent or a subagent. This section shows every variant that you can pick, in full, with a diff against the default.

The text on these pages is Anthropic's. It is shown here only to describe how the program works. See the notice on the home page.

Status badges:

Documented: An official docs page names this item.
means an official docs page names the switch.
Undocumented: Only the program shows this item. It can change without notice.
means only the program shows it.
Differs: The official docs and the program disagree. The row says how. example
means the docs and the program disagree.
Gated: Works only behind a flag or a server gate. example
means a flag or a server gate is needed.

Every Prompt and How to Change It​

A condition in parentheses after a prompt name is the condition that makes the prompt apply.

PromptCan You Change It?Turn On or OffWhere It LivesStatus
Default, Lean Prompt (Every session on a lean model gets it) Yes. Use the flags and settings on the other pages.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 switches to the full prompt.Built into the program. Nothing on disk.
Undocumented: Only the program shows this item. It can change without notice.
Default, Sonnet 5.5 (Every Sonnet 5.5 session gets it) Yes. Use the flags and settings on the other pages.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 switches to the full prompt.Built into the program. Nothing on disk.
Documented: An official docs page names this item.
Default, Haiku 5.5 (Every Haiku 5.5 session gets it) Yes. Use the flags and settings on the other pages.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 switches to the full prompt.Built into the program. Nothing on disk.
Undocumented: Only the program shows this item. It can change without notice.
Full Prompt Yes. Set or unset the env var.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 (also false, no, off).Environment variable. Put it under env in settings.json to keep it.
Documented: An official docs page names this item.
Simple Prompt Switch on Sonnet Yes. Set or unset the env var.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1.Environment variable.
Documented: An official docs page names this item.
Simple Prompt Switch on Haiku Yes. Set or unset the env var.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1.Environment variable.
Documented: An official docs page names this item.
Simple Prompt Switch on Opus Yes. Set or unset the env var.CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1.Environment variable.
Documented: An official docs page names this item.
Bare Mode No. The two lines are fixed.--bare or CLAUDE_CODE_SIMPLE=1.Command-line flag.
Documented: An official docs page names this item.
Simple Mode Env Var No. The two lines are fixed.CLAUDE_CODE_SIMPLE=1.Environment variable.
Documented: An official docs page names this item.
Exclude Dynamic Sections No. It only moves text.--exclude-dynamic-system-prompt-sections.Command-line flag.
Documented: An official docs page names this item.
Exclude Dynamic Sections, Full Prompt No. It only moves text.--exclude-dynamic-system-prompt-sections.Command-line flag.
Documented: An official docs page names this item.
Output Style, ExplanatoryNot the built-in text. You can write a custom style./output-style or the outputStyle setting.outputStyle in any settings scope.
Documented: An official docs page names this item.
Output Style, LearningNot the built-in text. You can write a custom style./output-style or the outputStyle setting.outputStyle in any settings scope.
Documented: An official docs page names this item.
Output Style, ProactiveNot the built-in text. You can write a custom style./output-style or the outputStyle setting.outputStyle in any settings scope.
Documented: An official docs page names this item.
Output Style, ConciseNot the built-in text. You can write a custom style./output-style or the outputStyle setting.outputStyle in any settings scope.
Documented: An official docs page names this item.
Custom Output Style Yes. You write the file./output-style or the outputStyle setting.~/.claude/output-styles/*.md or .claude/output-styles/*.md.
Documented: An official docs page names this item.
Custom Output Style on the Full Prompt Yes. You write the file./output-style or the outputStyle setting.~/.claude/output-styles/*.md or .claude/output-styles/*.md.
Documented: An official docs page names this item.
Custom Output Style with Keep Coding Instructions Yes. You write the file.keep-coding-instructions in the style's front matter.~/.claude/output-styles/*.md or .claude/output-styles/*.md.
Documented: An official docs page names this item.
Custom Output Style with Keep Coding Instructions, Lean Prompt Yes. You write the file.keep-coding-instructions in the style's front matter.~/.claude/output-styles/*.md or .claude/output-styles/*.md.
Documented: An official docs page names this item.
Append System Prompt Yes. You give the text.--append-system-prompt or --append-system-prompt-file.Command-line flags.
Documented: An official docs page names this item.
Replace System Prompt Yes. You give the text.--system-prompt or --system-prompt-file.Command-line flags.
Documented: An official docs page names this item.
Replace and Append Together Yes. You give the text.The two flags.Command-line flags.
Documented: An official docs page names this item.
With a CLAUDE.md File Yes. You write the file.Add or remove the file. CLAUDE_CODE_DISABLE_CLAUDE_MDS=1 skips them.CLAUDE.md, .claude/CLAUDE.md, ~/.claude/CLAUDE.md.
Documented: An official docs page names this item.
Inside a Git Repository (It happens on its own) No.includeGitInstructions in settings controls the git rules. The status text always appears in a repo.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Main Thread Custom Agent Yes. You write the agent file.--agent or the agent setting..claude/agents/*.md or ~/.claude/agents/*.md.
Documented: An official docs page names this item.
Permission Mode, Plan No.--permission-mode or defaultMode in settings.Flag or settings.
Documented: An official docs page names this item.
Permission Mode, Accept Edits No.--permission-mode or defaultMode in settings.Flag or settings.
Documented: An official docs page names this item.
Permission Mode, Don't Ask No.--permission-mode or defaultMode in settings.Flag or settings.
Documented: An official docs page names this item.
Brief Mode No.--brief.Command-line flag.
Undocumented: Only the program shows this item. It can change without notice.
Compaction PromptPartly. You can add focus text after /compact./compact, or automatic when the context fills.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, General Purpose (The model starts subagents)Not the built-in text. You can write custom agents.--disallowedTools Agent stops all subagents.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, Explore (The model starts subagents)Not the built-in text. You can write custom agents.--disallowedTools Agent stops all subagents.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, Plan (The model starts subagents)Not the built-in text. You can write custom agents.--disallowedTools Agent stops all subagents.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, Custom Agent Yes. You write the agent file.Add or remove the file..claude/agents/*.md or ~/.claude/agents/*.md.
Documented: An official docs page names this item.
Subagent, Statusline Setup Yes. A user agent file with the same name replaces it.--disallowedTools Agent stops all subagents.Built into the program. Override in .claude/agents/<name>.md.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, Claude (FleetView) Yes. A user agent file with the same name replaces it.--disallowedTools Agent stops all subagents.Built into the program. Override in .claude/agents/<name>.md.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, Web Fetch Yes. A user agent file with the same name replaces it.CLAUDE_CODE_WEB_FETCH_AGENT=1 adds it. CLAUDE_CODE_DISABLE_WEB_FETCH removes it.Built into the program. Override in .claude/agents/web-fetch.md.
Undocumented: Only the program shows this item. It can change without notice.
Subagent, Claude Code Guide Yes. A user agent file with the same name replaces it.Not offered in -p or the SDK entry points. --disallowedTools Agent stops all subagents.Built into the program. Override in .claude/agents/claude-code-guide.md.
Undocumented: Only the program shows this item. It can change without notice.
Override a Built-in Agent with a File Yes. You write the agent file.Add or remove the file..claude/agents/*.md or ~/.claude/agents/*.md.
Undocumented: Only the program shows this item. It can change without notice.
Override a Built-in Agent with --agents Yes. You give the JSON.--agents.Command-line flag.
Documented: An official docs page names this item.
Append to Every Subagent Prompt Yes. You give the text.--append-subagent-system-prompt or --append-subagent-system-prompt-file (print mode only).Command-line flags.
Undocumented: Only the program shows this item. It can change without notice.
Turn Off the Explore and Plan Agents Yes. It removes text.CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1.Environment variable.
Undocumented: Only the program shows this item. It can change without notice.
Turn Off All Built-in Agents Yes. It removes text.CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1.Environment variable.
Undocumented: Only the program shows this item. It can change without notice.
Command, /init Yes. A command or skill file with the same name may replace it.Type /init.Built into the program.
Documented: An official docs page names this item.
Command, /security-review Yes. A command or skill file with the same name may replace it.Type /security-review.Built into the program.
Documented: An official docs page names this item.
Skill, /simplify Yes. A command or skill file with the same name may replace it.Type /simplify.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Skill, /debug Yes. A command or skill file with the same name may replace it.Type /debug.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Override /init with a Command File Yes. A command or skill file with the same name may replace it.Type /init.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Override /simplify with a Skill File Yes. A command or skill file with the same name may replace it.Type /simplify.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Prompt Hook RequestPartly. You write the prompt and pick the model. The system text is fixed.Add or remove the hook.hooks in any settings scope.
Documented: An official docs page names this item.
Agent Hook RequestPartly. You write the prompt and pick the model. The system text is fixed.Add or remove the hook.hooks in any settings scope.
Documented: An official docs page names this item.
Auto Mode ClassifierPartly. The autoMode setting edits the rule lists.--permission-mode auto or defaultMode: "auto".autoMode in user, flag, or managed settings.
Documented: An official docs page names this item.
Auto Mode Classifier, Custom Rules Yes. You write the rules.autoMode setting.autoMode in user, flag, or managed settings.
Documented: An official docs page names this item.
Compaction Prompt, Custom Instructions Yes. You add focus text. The base summary rules stay./compact <text>.The command line, CLAUDE.md, or a PreCompact hook.
Documented: An official docs page names this item.
Plan Mode, Custom Workflow Yes. You give the workflow text. The read-only rules and the ExitPlanMode rule stay.--plan-mode-instructions.Command-line flag.
Undocumented: Only the program shows this item. It can change without notice.
Git Instructions Turned Off Yes. It removes text.includeGitInstructions or CLAUDE_CODE_DISABLE_GIT_INSTRUCTIONS=1.Any settings scope, or an environment variable.
Documented: An official docs page names this item.
Auto Memory Turned Off Yes. It removes text.CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 or autoMemoryEnabled.Environment variable or any settings scope.
Documented: An official docs page names this item.
Custom Output Style with a Built-in Name Yes. You write the file./output-style or the outputStyle setting.~/.claude/output-styles/*.md or .claude/output-styles/*.md.
Undocumented: Only the program shows this item. It can change without notice.
Subagent with --system-prompt and --append-system-promptNot for the subagent. Use --append-subagent-system-prompt.The flags.Command-line flags.
Undocumented: Only the program shows this item. It can change without notice.
Prompt Hook on StopPartly. You write the prompt and pick the model. The system text is fixed.Add or remove the hook.hooks in any settings scope.
Documented: An official docs page names this item.
All Tools Sent Upfront Yes. It adds the deferred tools to the request.ENABLE_TOOL_SEARCH.Environment variable, or env in any settings scope.
Documented: An official docs page names this item.
Override a Prompt Yes. The page lists each prompt you can replace, append to, or turn off.Per prompt. See the page.Flags, env vars, settings, and files.
Undocumented: Only the program shows this item. It can change without notice.
Tool Descriptions (Every request carries them) Yes. A Mod API tool.describe hook replaces a description.ENABLE_TOOL_SEARCH, --tools, --disallowedTools.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.
Built-In Skills (The main agent reads one line for each) Yes. A skill or command with the same name replaces one.--disable-slash-commands.Built into the program. Override in .claude/skills/<name>/SKILL.md.
Documented: An official docs page names this item.
Built-In Agents (The main agent reads one line for each) Yes. An agent with the same name replaces one.CLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS, CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS.Built into the program. Override in .claude/agents/<name>.md.
Documented: An official docs page names this item.
Tools per Variant (Every request carries the list) Yes. Use --tools, --allowedTools, --disallowedTools, or settings.--bare and CLAUDE_CODE_SIMPLE=1 cut the list to three tools.Built into the program.
Undocumented: Only the program shows this item. It can change without notice.

How the Captures Were Made​

Every prompt on these pages was captured offline, with no model call and no cost.

  1. A script starts the installed program (version 2.1.312) in print mode (-p) once per variant.
  2. The program talks to a small fake Messages API on 127.0.0.1. The fake server writes each request body to a file and sends back a canned reply.
  3. The run uses a fake API key, a dead proxy (HTTPS_PROXY and HTTP_PROXY point to a closed port), CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1, DISABLE_TELEMETRY=1, and a temporary home, config folder, and project folder. No login token is used. The script checks that every request went to the local server.
  4. A second script reads the saved request bodies, replaces machine-specific values with placeholders, and writes these pages. It makes the diffs with diff -u, not by hand.

For the subagent pages, the fake server answers the first turn with an Agent tool call. The program then starts a real subagent and sends its request to the fake server.

For the compaction page, the script runs twice in the same folders: once with Reply with 'OK'., then with --continue and /compact.

The Three System Blocks​

Each request has a system field with three blocks, then messages. This is what the captures show.

BlockWhat it holdsCache marker
system[0]A billing header line with the program version and entry point (cc_entrypoint=sdk-cli in -p mode).None
system[1]The identity line.ephemeral
system[2]The body: the rules, the memory section, and your appended text.ephemeral

Not everything that the model reads as instructions is in system. Claude Code also sends the following in the messages list, before your own text:

  • A reminder with the git attribution lines (first user message).
  • Project memory files, git status, and (with --exclude-dynamic-system-prompt-sections) the memory section.
  • A message with the role system. It holds the environment details, the output style text, the agent types, the skills list, and the date.

Every variant page shows all of these parts, in the order they are sent, with a === line before each part.

Identity Line​

In -p mode the identity line is the SDK line: You are a Claude agent, built on Anthropic's Claude Agent SDK. Every capture here uses -p, so every page shows that line, except pages where it changes (see below).

The program has three identity lines. Two more appear in its text:

  • You are Claude Code, Anthropic's official CLI for Claude. This is the line for the interactive terminal app. It could not be captured offline: the full-screen app did not accept typed input in the test harness, so no request was sent. Setting CLAUDE_CODE_ENTRYPOINT=cli in -p mode does not change the line.
  • You are Claude Code, Anthropic's official CLI for Claude, running within the Claude Agent SDK. Print mode sends this one when you use --append-system-prompt. See Append System Prompt.

How Claude Code Picks the Variant​

The chart shows what the captures prove. The order of the first three checks was not tested with every combination of flags.

Subagents skip this chart. They get their own body and notes (see Subagent, general-purpose).

Captures disagree with the old wiki in one place: the wiki says models with sonnet or haiku in the name get the full prompt. In 2.1.312 they get the lean prompt, and only CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0 gives the full one.

All Variants​

Size is the number of characters in everything shown on the variant page, after placeholders are in place. The last column lists the # headings found in the system body.

VariantHow to select itCharactersToolsSections
Default, Lean PromptDefault on Opus 5.515,72112Harness, Session-specific guidance, Memory, Environment, Context management
Default, Sonnet 5.5Default on Sonnet 5.515,72712Harness, Session-specific guidance, Memory, Environment, Context management
Default, Haiku 5.5Default on Haiku 5.518,51612Harness, Session-specific guidance, Memory, Environment, Context management
Full PromptCLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=037,10512System, Doing tasks, Executing actions with care, Using your tools, Tone and style, Text output (does not apply to tool calls), Session-specific guidance, auto memory, Environment, Context management
Simple Prompt Switch on Sonnet (same text as default-sonnet)CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1 on Sonnet15,72712Harness, Session-specific guidance, Memory, Environment, Context management
Simple Prompt Switch on Haiku (same text as default-haiku)CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1 on Haiku18,51612Harness, Session-specific guidance, Memory, Environment, Context management
Simple Prompt Switch on Opus (same text as default-lean)CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=1 on Opus15,72112Harness, Session-specific guidance, Memory, Environment, Context management
Bare Mode--bare3763none
Simple Mode Env Var (same text as bare)CLAUDE_CODE_SIMPLE=13763none
Exclude Dynamic Sections--exclude-dynamic-system-prompt-sections15,61612Harness, Environment, Context management
Exclude Dynamic Sections, Full Prompt--exclude-dynamic-system-prompt-sections plus the full prompt37,11512System, Doing tasks, Executing actions with care, Using your tools, Tone and style, auto memory, Text output (does not apply to tool calls), Session-specific guidance, Environment, Context management
Output Style, ExplanatoryOutput style Explanatory16,90812Harness, Session-specific guidance, Memory, Environment, Context management
Output Style, LearningOutput style Learning20,76712Harness, Session-specific guidance, Memory, Environment, Context management
Output Style, ProactiveOutput style Proactive17,22712Harness, Session-specific guidance, Memory, Environment, Context management
Output Style, ConciseOutput style Concise17,26112Harness, Session-specific guidance, Memory, Environment, Context management
Custom Output StyleCustom style file15,93912Harness, Session-specific guidance, Memory, Environment, Context management
Custom Output Style on the Full PromptCustom style, full prompt34,00212System, Executing actions with care, Using your tools, Tone and style, Text output (does not apply to tool calls), Session-specific guidance, auto memory, Environment, Context management
Custom Output Style with Keep Coding InstructionsCustom style with keep-coding-instructions37,32312System, Doing tasks, Executing actions with care, Using your tools, Tone and style, Text output (does not apply to tool calls), Session-specific guidance, auto memory, Environment, Context management
Custom Output Style with Keep Coding Instructions, Lean Prompt (same text as style-custom)Custom style with keep-coding-instructions, lean15,93912Harness, Session-specific guidance, Memory, Environment, Context management
Append System Prompt--append-system-prompt15,77812Harness, Session-specific guidance, Memory, Environment, Context management
Replace System Prompt--system-prompt10,12012none
Replace and Append Together--system-prompt plus --append-system-prompt10,17712none
With a CLAUDE.md FileA CLAUDE.md file16,11012Harness, Session-specific guidance, Memory, Environment, Context management
Inside a Git RepositoryA git repository16,33712Harness, Session-specific guidance, Memory, Environment, Context management
Main Thread Custom Agent--agent <name>10,22212none
Permission Mode, Plan--permission-mode plan20,60012Harness, Session-specific guidance, Memory, Environment, Context management
Permission Mode, Accept Edits (same text as default-lean)--permission-mode acceptEdits15,72112Harness, Session-specific guidance, Memory, Environment, Context management
Permission Mode, Don't Ask (same text as default-lean)--permission-mode dontAsk15,72112Harness, Session-specific guidance, Memory, Environment, Context management
Brief Mode (same text as default-lean)--brief15,72112Harness, Session-specific guidance, Memory, Environment, Context management
Compaction Prompt/compact22,57512Harness, Session-specific guidance, Memory, Environment, Context management
Subagent, General PurposeAgent tool, general-purpose11,1358none
Subagent, ExploreAgent tool, Explore11,6655none
Subagent, PlanAgent tool, Plan11,9725none
Subagent, Custom AgentCustom agent file9,7598none
Subagent, Statusline SetupAgent tool, statusline-setup15,5352none
Subagent, Claude (FleetView)Agent tool, claude11,5348none
Subagent, Web FetchCLAUDE_CODE_WEB_FETCH_AGENT=1, Agent tool, web-fetch5,5251none
Subagent, Claude Code GuideInteractive session, Agent tool, claude-code-guide29,0624none
Override a Built-in Agent with a FileAgent file with a built-in name9,7728none
Override a Built-in Agent with --agents--agents with a built-in name9,7538none
Append to Every Subagent Prompt--append-subagent-system-prompt11,6935none
Turn Off the Explore and Plan AgentsCLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=114,81612Harness, Session-specific guidance, Memory, Environment, Context management
Turn Off All Built-in AgentsCLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=114,08312Harness, Session-specific guidance, Memory, Environment, Context management
Command, /init/init17,36612Harness, Session-specific guidance, Memory, Environment, Context management
Command, /security-review/security-review16,24612Harness, Session-specific guidance, Memory, Environment, Context management
Skill, /simplify/simplify18,59812Harness, Session-specific guidance, Memory, Environment, Context management
Skill, /debug/debug17,36812Harness, Session-specific guidance, Memory, Environment, Context management
Override /init with a Command File/init15,83012Harness, Session-specific guidance, Memory, Environment, Context management
Override /simplify with a Skill File/simplify15,78312Harness, Session-specific guidance, Memory, Environment, Context management
Prompt Hook RequestHook type: prompt1,4780none
Agent Hook RequestHook type: agent2,36210none
Auto Mode Classifier--permission-mode auto140,7180none
Auto Mode Classifier, Custom RulesautoMode setting76,0280none
Compaction Prompt, Custom Instructions/compact <text>, CLAUDE.md, or PreCompact hook23,08512Harness, Session-specific guidance, Memory, Environment, Context management
Plan Mode, Custom Workflow--plan-mode-instructions17,21712Harness, Session-specific guidance, Memory, Environment, Context management
Git Instructions Turned OffincludeGitInstructions: false15,08312Harness, Session-specific guidance, Memory, Environment, Context management
Auto Memory Turned OffCLAUDE_CODE_DISABLE_AUTO_MEMORY=113,65812Harness, Session-specific guidance, Environment, Context management
Custom Output Style with a Built-in NameStyle file with a built-in name15,93612Harness, Session-specific guidance, Memory, Environment, Context management
Subagent with --system-prompt and --append-system-promptPrompt flags plus a subagent11,6975none
Prompt Hook on StopHook type: prompt on Stop12,6220none
All Tools Sent UpfrontENABLE_TOOL_SEARCH=false15,35221Harness, Session-specific guidance, Memory, Environment, Context management

See also Tools per Variant.

Placeholders​

PlaceholderReplaces
<cwd>The project folder (a temporary folder in each run).
<config-dir>The Claude config folder (CLAUDE_CONFIG_DIR, a temporary folder).
<home>The home folder (a temporary folder).
<project-slug>The project folder name as used inside the config folder, with / and . turned into -.
<config-slug>The same kind of name for the config folder.
<date>Any date such as the day of the run.
<platform>, <shell>, <os-version>Your operating system, shell, and OS version.
<build>The build suffix of cc_version in the billing header.
<sha>A git commit hash.
<uuid-1>, <uuid-2>, ...A random id, such as a session id, numbered by first use in each capture. The same number is the same id.
<robot-emoji>A robot emoji in the pull request line of the attribution reminder. The site shows no emojis.
<plan-name>The random plan file name in plan mode.

Strings such as PROBE-CUSTOM-STYLE-TEXT and APPENDED-TEXT-FROM-FLAG are test text that the script supplies, so you can see where your own text lands.

How to Regenerate​

Run these from the repository root. Both steps use bun only.

bun tools/capture-prompts/capture.ts # capture every variant, then write the pages
bun tools/capture-prompts/capture.ts --only default-lean,bare # capture some variants
bun tools/capture-prompts/render.ts # rebuild the pages from saved captures

Raw requests go to captures/<version>/prompts/ (not committed). Normalized text goes to tools/capture-prompts/out/. The variant list is in tools/capture-prompts/variants.ts. For a new release, update src/version.ts (or pass --bin and --out) and run it again.