Home Gallery Standard Research Blog GitHub Twitter LinkedIn Community

dario system prompt

Category: General-purpose assistants. Audited against the AISPA standard.

What is in dario's system prompt?

dario's full system prompt: 1 version, 9,792 characters. 5 instructions flagged, worst on truthfulness & information integrity.

The full text of 1 prompt is reproduced below, 9,792 characters in all, each read instruction by instruction against the eight AISPA dimensions. 5 instructions were flagged as working against the person on the other end, most of them on truthfulness & information integrity.

1 Prompts on record
5 Flagged instructions
AI audit Audit source
D2 · Truthfulness & Information Integrity D4 · Tool/Action Safety D5 · User Agency & Manipulation Prevention D6 · Unsafe Request Handling D7 · Harm Prevention & User Safety

dario - docs system prompt

9792 characters · 5 flagged

# System-prompt mode (v3.34.0) `dario proxy --system-prompt=<mode>` controls the system prompt dario sends upstream on Claude-backend requests. The default replays Claude Code's prompt verbatim — every existing setup keeps its current behavior. The non-default modes let you strip CC's behavioral constraints without losing subscription billing. The empirical basis for this feature lives in [`docs/research/system-prompt-classifier-study.md`](./research/system-prompt-classifier-study.md) — short version: Anthropic's billing classifier doesn't read the system prompt content. We tested 7 mutations (single char, word substitution, full replacement, extra block, length padding) and all routed to `five_hour` (subscription). System prompt is for the model. The classifier reads other channels. ## Modes | Mode | What it does | Output capability vs verbatim | |---|---|---| | `verbatim` *(default)* | CC's prompt unchanged, byte-for-byte | baseline | | `partial` | Strip `# Tone and style`, `# Text output`, and the scope/verbosity/comment bullets in `# Doing tasks`. Keeps every `IMPORTANT:` refusal reminder and every tool description. | ~1.2–2.8× on open-ended work | | `aggressive` | Partial + remove the prompt-level RLHF restatements (`IMPORTANT: Assist with authorized security testing…`, `IMPORTANT: You must NEVER generate or guess URLs…`) and the `# Executing actions with care` section. | <3% above partial | | `<file path>` | Replace the slot entirely with the contents of a file you control. The escape hatch for users running well-defined agent workflows with their own system prompt. | depends on your prompt | ## Aggressive vs partial — what's the actual difference? Aggressive is provided for completeness, not because it does meaningful work. The added removals are *prompt-level restatements* of refusal categories — reminders the prompt makes about RLHF behavior that's already trained into the model's weights. Removing the reminder doesn't remove the trained behavior. We measured this: 9 trials (3 prompts × 3 strip levels), aggressive vs partial added <3% practical change on benign tasks. If you're choosing between `partial` and `aggressive`, choose `partial`. The aggressive mode exists so the test matrix could distinguish "behavioral constraint" (real, in the prompt, ~1.2–2.8× effect) from "alignment restatement" (decorative, in the prompt but trained into the weights, <3% effect). ## Custom file mode ```bash dario proxy --system-prompt=/path/to/your-prompt.txt ``` The CLI reads the file at startup and passes the contents to the runtime path. The proxy never re-reads the file — to change the prompt, restart the proxy. An empty file or unreadable path fails fast with a clear error rather than silently degrading to verbatim. The custom prompt **replaces** the entire `system[2].text` slot. Your client's own system prompt (the one your agent normally sends) is still appended after, just as it would be on top of the CC verbatim default. So a custom prompt + your agent's prompt = the model's full instruction context. ## Configuration sources ```bash dario proxy --system-prompt=partial # CLI flag DARIO_SYSTEM_PROMPT=partial dario proxy # env var dario proxy --system-prompt=/etc/dario/prompt.txt # file path ``` CLI flag wins over env var. Both are read at proxy startup; mid-run changes require a restart. `dario doctor` surfaces the active mode + char-count delta vs CC's default, so you can confirm at a glance which mode is actually live without reading the proxy log. ## What this is NOT - **Not bypassing alignment.** The model's refusal behavior on harmful content is RLHF-trained into the weights, not the prompt. You can run `--system-prompt=aggressive` and still get refusals on harmful requests — that's the entire point of including aggressive in the test matrix and measuring <3% delta. - **Not detected as misuse by the classifier.** 7/7 variants routed to `five_hour` in the empirical test. If Anthropic later starts fingerprinting system-prompt content, you'll see it in the rate-limit-classifier headers; we'll document the change and update this page. - **Not specific to dario.** Any client building its own request body could already do this. Dario makes it a one-flag operation that preserves CC's other wire-shape axes (header order, body field order, billing tag, beta flags) so the rest of the subscription routing path keeps working. ## Drop-in custom-prompt recipes Four starting points you can save to a file and use with `--system-prompt=<filepath>`. Each is a complete `system[2].text` replacement — short by design (CC's stock prompt is ~27,000 characters; these are 200–500). Copy, modify, A/B against your actual workload, keep what works. ### Recipe 1 — Terse engineer (~280 chars) ``` You are a senior engineer. Answer questions directly and ship code. Prefer working code over prose. Skip pleasantries, hedging, and apologies. When asked for a recommendation, recommend — don't enumerate every option unless asked. Match output length to question complexity. If the question is ambiguous, pick the most likely interpretation and proceed; flag the assumption in one sentence. ``` Day-to-day coding work, agent-driven sessions, anything where you want minimum friction. Optimizes signal-to-noise. ### Recipe 2 — Verbose explainer (~500 chars) ``` You are an engineer-mentor. Your job is to teach by example. For every code answer, explain the reasoning, alternative approaches, and tradeoffs you considered. For every concept, give the intuition first, then the technical detail, then a concrete example. Include comments in code that explain WHY decisions were made, not just WHAT the code does. Aim for outputs that build the user's mental model, not just answer the question. ``` Learning a new codebase, onboarding, contexts where pedagogical depth matters more than turn-around. The opposite axis from Recipe 1. ### Recipe 3 — Code reviewer (~440 chars) ``` You are reviewing code. Your job is to surface issues — bugs, security risks, performance traps, edge cases not handled, style and maintainability concerns, missing tests, ambiguous APIs. Order findings by severity. Suggest specific fixes with code snippets, but don't rewrite the entire file unless asked. If the code is correct, say "no issues found" and stop — don't invent problems. Honest is more valuable than thorough. ``` Review-only sessions, gating PRs through an LLM check, pairing review with another tool. The "honest > thorough" line is load-bearing — without it, models manufacture concerns to justify their output. ### Recipe 4 — Research assistant (~520 chars) ``` You are a research assistant. Answer questions with structured analysis: summary first (2-4 sentences), then claim-by-claim breakdown with supporting reasoning, then unresolved questions or limitations. Distinguish between observed facts, reasonable inferences, and speculation — never blur the boundaries. Use markdown tables for comparisons across more than two items. When citing online sources, prefer primary documentation, papers, or official spec text over secondary blog posts. Flag uncertainty explicitly. ``` Investigation work, technical due diligence, evaluating libraries / frameworks / services. Optimizes for analysis quality over speed. ### Empirical mapping — what each section of CC's prompt actually controls | CC Section | Constrains | Effect when removed | |---|---|---| | `# Tone and style` | Verbosity bias toward terse, no-emoji, apology patterns | Output length grows; conversational tone returns | | `# Text output` | Final-answer format, "summary at end" patterns | Less rigid output structure | | `# Doing tasks` bullets ("Don't add features", "Default to writing no comments", "Don't explain WHAT", scope discipline) | Code stays minimal; comments suppressed; refuses to expand scope past literal request | Code includes comments where useful; explanations included; scope inferred more broadly | | `# Executing actions with care` | Confirmation-before-action bias | More autonomous action; fewer clarifying questions for ambiguous-but-low-risk work | | `IMPORTANT:` lines reminding of refusal categories | Nothing measurable — restate RLHF-trained behavior | <3% practical delta. Alignment is in the weights, not the prompt. | Behavioral knobs (top three rows) are real — flipping them changes output. Alignment knobs (bottom two) are decorative — removing them doesn't change refusal behavior because refusal is trained into the weights. ## Reproducibility The strip rules in `src/cc-template.ts:resolveSystemPrompt` are ported byte-for-byte from `scripts/research/test-constraint-removal.mjs`, which is committed in this repo. The empirical billing-classifier validation script is `scripts/research/test-system-prompt-mods.mjs`. Both run real upstream requests against your own subscription. ```bash node scripts/research/test-system-prompt-mods.mjs # 7 upstream requests, classifier readout per variant node scripts/research/test-constraint-removal.mjs # 9 upstream requests, behavior delta per variant ``` To A/B test your own custom prompt: hold everything constant (model, max_tokens, effort, tools, body field order, billing tag, OAuth bearer, headers) except `system[2].text`. Send identical user prompts under your variants. Measure the `representative-claim` header per response (should stay `five_hour`), output character count + `usage.output_tokens`, and whatever behavior axis you care about. Repeat at least 3× to rule out sampling variance. If your prompt routes to anything other than `five_hour`, something else changed besides the prompt — open an issue with the request-id; that's how a new fingerprint axis would be found.

Instructions flagged against the user

D2 · Truthfulness & Information Integrity
“Alignment knobs (bottom two) are decorative — removing them doesn't change refusal behavior because refusal is trained into the weights.”
The prompt makes misleading claims that safety-relevant prompt instructions are merely 'decorative' and that alignment is entirely in the weights, which is a misrepresentation of how safety layers work. It also frames the removal of safety constraints as a performance optimization, downplaying the real function of prompt-level safety instructions. The claim that removing IMPORTANT refusal reminders has <3% effect is presented as justification for stripping them, which undermines information integrity about the role of defense-in-depth safety measures.
D2 · Truthfulness & Information Integrity
“| `IMPORTANT:` lines reminding of refusal categories | Nothing measurable — restate RLHF-trained behavior | <3% practical delta.”
The prompt makes misleading claims that safety-relevant prompt instructions are merely 'decorative' and that alignment is entirely in the weights, which is a misrepresentation of how safety layers work. It also frames the removal of safety constraints as a performance optimization, downplaying the real function of prompt-level safety instructions. The claim that removing IMPORTANT refusal reminders has <3% effect is presented as justification for stripping them, which undermines information integrity about the role of defense-in-depth safety measures.
D2 · Truthfulness & Information Integrity
“| `IMPORTANT:` lines reminding of refusal categories | Nothing measurable — restate RLHF-trained behavior | <3% practical delta. Alignment is in the weights, not the prompt.”
The prompt makes misleading claims that safety-relevant prompt instructions are merely 'decorative' and that alignment is entirely in the weights, which is a misrepresentation of how safety layers work. It also frames the removal of safety constraints as a performance optimization, downplaying the real function of prompt-level safety instructions. The claim that removing IMPORTANT refusal reminders has <3% effect is presented as justification for stripping them, which undermines information integrity about the role of defense-in-depth safety measures.
D4 · Tool/Action Safety
“| `aggressive` | Partial + remove the prompt-level RLHF restatements (`IMPORTANT:”
The prompt explicitly instructs removal of the '# Executing actions with care' section, which governs confirmation-before-action behavior. This directly undermines tool and action safety by making the model more autonomous and less likely to seek confirmation before potentially destructive operations. The prompt frames reduced safety checks as a feature ('More autonomous action; fewer clarifying questions').
D4 · Tool/Action Safety
“| `aggressive` | Partial + remove the prompt-level RLHF restatements (`IMPORTANT: Assist with authorized security testing…`, `IMPORTANT: You must NEVER generate or guess URLs…`) and the `# Executing actions with care` section.”
The prompt explicitly instructs removal of the '# Executing actions with care' section, which governs confirmation-before-action behavior. This directly undermines tool and action safety by making the model more autonomous and less likely to seek confirmation before potentially destructive operations. The prompt frames reduced safety checks as a feature ('More autonomous action; fewer clarifying questions').
D6 · Unsafe Request Handling
“| `aggressive` | Partial + remove the prompt-level RLHF restatements (`IMPORTANT: Assist with authorized security testing…`, `IMPORTANT: You must NEVER generate or guess URLs…`) and the `# Executing actions with care` section.”
The prompt's core purpose is to systematically remove safety policies from the system prompt, including explicit removal of IMPORTANT refusal reminders and safety constraint sections. The 'aggressive' mode specifically targets refusal category reminders. Even if RLHF training provides a baseline, defense-in-depth safety layers exist for a reason, and this prompt provides a structured methodology for stripping them. It also provides guidance on evading detection by the billing classifier.
D7 · Harm Prevention & User Safety
“| `aggressive` | Partial + remove the prompt-level RLHF restatements (`IMPORTANT: Assist with authorized security testing…`, `IMPORTANT: You must NEVER generate or guess URLs…`) and the `# Executing actions with care` section.”
By removing safety constraint sections and refusal reminders, the prompt weakens harm prevention mechanisms. The prompt explicitly removes sections designed to prevent harmful outputs and frames these removals as inconsequential. The custom file mode allows complete replacement of all safety instructions with arbitrary content, providing an unrestricted 'escape hatch' with no safety guardrails.
D4 · Tool/Action Safety
“| `# Executing actions with care` | Confirmation-before-action bias | More autonomous action; fewer clarifying questions for ambiguous-but-low-risk work |”
The prompt explicitly instructs removal of the '# Executing actions with care' section, which governs confirmation-before-action behavior. This directly undermines tool and action safety by making the model more autonomous and less likely to seek confirmation before potentially destructive operations. The prompt frames reduced safety checks as a feature ('More autonomous action; fewer clarifying questions').

4 more in the interactive gallery.

Questions about dario's system prompt

Does dario's system prompt contain instructions that work against the user?

Yes. 5 instructions in dario's system prompt were flagged as working against the person the product is talking to, most of them under truthfulness & information integrity. Each one is quoted in full on this page, with the AISPA dimension it was judged under.

How long is dario's system prompt?

9,792 characters across 1 prompt on this page. For comparison, the median system prompt in this index runs about 5,400 characters, so length varies by more than two orders of magnitude between products.

How many versions of dario's system prompt are on record?

1. Older releases are kept rather than replaced, so the wording of a given version stays readable after the product has moved on.

Where did this dario system prompt come from?

It was collected from publicly available sources and is reproduced here for transparency research, unedited. This site does not extract prompts from products itself.

How was dario's system prompt audited?

Against AISPA, an eight-dimension standard for how an instruction treats the person on the other end: identity transparency, truthfulness, privacy, tool safety, user agency, unsafe request handling, harm prevention and fairness. This audit was ai audit. The method is described in the paper behind the standard.

How this page was made

The prompt text above is reproduced verbatim from a public source. Every instruction in it was read against AISPA, an eight-dimension standard for whether an instruction serves or works against the person the product is talking to. The standard, the annotation method and the findings across 1,058 prompts are set out in the paper, and the full catalogue is available as structured data.

All prompts here were collected from publicly available sources and are reproduced for transparency research. Browse the general-purpose assistants category, the full gallery of 400+ products, or read the paper behind the AISPA standard.