Skip to content
AI Dev Toolkit.
Esc
  • AI Token CounterCount tokens for GPT, Claude, Gemini, DeepSeek, Qwen and more.Tool
  • LLM API Cost CalculatorEstimate per-request, daily and monthly API costs.Tool
  • AI Model ComparisonCompare prices, context windows and features across models.Tool
  • AI Model Pricing PagesSpecs, real costs and cheaper alternatives for popular models.Tool
  • Context Window CheckerSee whether your text fits each model’s context window.Tool
  • Subscription vs API CalculatorFind out whether a chat plan or the API is cheaper for you.Tool
  • GPU / VRAM CalculatorCheck how much VRAM a local model needs and which GPUs fit.Tool
  • Prompt Caching CalculatorEstimate savings from prompt caching.Tool

System prompt · Writing

Technical writer system prompt for developer documentation

Use this to draft or edit documentation from source code, specs or engineers’ notes. Models write fluent docs quickly, and that is the danger: fluent docs that describe a parameter that doesn’t exist, or a default value nobody checked. This prompt keeps the writer grounded in the material it is given, asks it to list questions where the material is silent, and sets a house style that matches how developers read docs: task first, short paragraphs, and code examples that can be copied and run.

Prompt

The system prompt

326 tokens with OpenAI o200k_base (gpt-tokenizer 4.0.0), placeholders unfilled. Original writing, free to copy and adapt.

System prompt · 326 tokens
You are a technical writer for {{product}}. You write documentation for {{audience}}. Developers read docs to get a task done, often while skimming, so lead with what they need to do and make examples easy to copy.

<sources>
You'll receive source material: code, specs, notes or an existing page. Document only what the material shows. If something a reader would need is missing (a default value, an error case, a required permission), don't fill it in; list it under "Questions for the engineer" at the end.
</sources>

<style>
- Second person, present tense, active voice: "Run the command", not "The command should be run".
- Start each page with one sentence on what the reader can do with it, then prerequisites, then steps.
- One idea per paragraph; paragraphs of at most three sentences.
- Number steps that must happen in order. Use tables for parameters: name, type, required, default, description.
- Use the same term for the same thing everywhere. Terms: {{terminology}}
- Spelling: {{spelling}}.
</style>

<examples>
- Every procedure gets a complete, copyable example using only APIs in the source material.
- Use realistic values, not "foo" and "bar". Use placeholders like YOUR_API_KEY for secrets, never real-looking keys.
- Show the expected output when it helps the reader confirm success.
</examples>

<output>
Markdown, starting with a level-two heading. End with "Questions for the engineer" if there are any; otherwise leave that section out.
</output>

Variables

What to fill in

Fill these once per deployment. Anything that changes per request, such as the user’s name or today’s date, belongs in the user message so the system prompt stays identical and cacheable.

{{product}}
What is being documented.
e.g. the Acme Payments API
{{audience}}
Who reads the docs.
e.g. backend developers integrating card payments
{{terminology}}
Preferred terms, and terms to avoid.
e.g. "API key" (not token or secret key), "webhook endpoint", "payment intent"
{{spelling}}
Spelling convention.
e.g. US English

Design notes

Why each part is there

  1. Role line and reader

    Defines the reader’s situation (skimming to finish a task) and so the priorities. Anthropic’s guide recommends explaining why a behaviour matters; here the why produces task-first structure without a long list of rules.

    Follows: Anthropic: Prompting best practices

  2. <sources>

    Restricts the writer to the material provided and gives missing information a place to go. This is Anthropic’s external knowledge restriction plus permission to admit gaps, applied to documentation.

    Follows: Anthropic: Reduce hallucinations

  3. <style>

    Concrete style rules (voice, tense, paragraph length, tables for parameters) instead of “write clearly”. Google’s guide recommends specific instructions; a terminology list stops the synonym drift that confuses readers.

    Follows: Google: Prompt design strategies · Anthropic: Prompting best practices

  4. <examples>

    Copyable examples using only documented APIs. The placeholder rule keeps real-looking secrets out of docs, which otherwise get copied into code and secret scanners.

    Follows: Anthropic: Prompting best practices

  5. <output>

    Markdown starting at level two so it drops into your docs site under its own page title. The questions section turns gaps into a review checklist.

    Follows: OpenAI: Prompt engineering

Try it

A message to test it with

First user message
Document this endpoint:

POST /v1/refunds
body: { payment_id: string (required), amount: integer minor units (optional, defaults to full amount), reason: "duplicate" | "requested_by_customer" | "fraudulent" }
returns 201 with the refund object; 409 if the payment was already fully refunded.

Adapt

How to adapt it

  • Paste one page of your existing docs as an example of house style in the first user turn; style is easier to show than describe.
  • If your docs use MDX components (callouts, tabs), list the allowed components and their syntax in <output>.
  • For reference docs generated from code, send the type definitions and docstrings rather than whole files.
  • Run the examples in CI where you can; the prompt makes them look runnable, only running them proves it.

Failure modes

Common failure modes

It documents parameters that don’t exist.
Send the actual schema or types, and check the questions list: an empty one on a thin spec is a warning sign.
Inconsistent terms across pages.
Extend {{terminology}}, and run the same prompt with a “check terminology” request over finished pages.
Marketing tone creeps in.
Add a short list of words to avoid, and an example sentence in the tone you want.

Cost

What it costs to send with every request

The prompt alone (326 tokens), sent with 10,000 requests a day over 12 hours, for a month. User messages and replies are extra. Prices from our daily data, updated 2026-10-15.
ModelWithout cachingWith caching
Claude Sonnet 5.5estimate: this model’s tokenizer isn’t public, so its count may differ$198.32Not cached: under the 512-token minimum
Claude Haiku 5.5estimate: this model’s tokenizer isn’t public, so its count may differ$9.92Not cached: under the 512-token minimum
GPT-6.1 Solo200k_base count; OpenAI hasn’t published this model’s tokenizer$198.32Not cached: under the 1,024-token minimum
Gemini 3.8 Flashestimate: this model’s tokenizer isn’t public, so its count may differ$74.37Not cached: under the 4,096-token minimum

A prompt under a provider’s minimum is still billed in full on every call. Tool definitions sit before the system prompt in the cached prefix, so together they may cross it. Price it at your own traffic.

Placement

Where it goes in each API

The style rules are stable across pages; with a long terminology list they can pass the provider’s cache minimum, but at 326 tokens on their own they are billed in full each time. Put the source material in the user turn, ahead of the request. For very large codebases, send only the files for the page being written.

APIWhere the system prompt goesWorth knowing
OpenAI Responses APIinstructionsApplies to that request only: with previous_response_id, send it again every turn.
OpenAI Chat Completionsa developer message first in messagesReplaces the system role for o1 and newer models; developer messages take priority over user messages.
Anthropic Messages APItop-level systemNo system role inside messages. Pass it as a text block with cache_control to cache it.
Gemini generateContentsystemInstructionText only. Still supported; Google recommends the Interactions API for new work.
Gemini Interactions APItop-level system_instructionSent beside model and input. Applies to that interaction only: with previous_interaction_id, send it again every turn.

Related

Need it once, for a single task or in a chat window? A prompt template is one message with {{variables}} you fill each time: Write a README prompt template.

CLAUDE.md generatorPrompt builderToken counterAll system prompts