Den komplette guide til at skrive Agent System Prompts â Erfaringer fra reverse-engineering af Claude Code
Jeg dekompilerede Claude Codes system prompt, studerede DeepAgents' kildekode og byggede min egen AI-agent fra bunden. De fleste prompt-guides er ren varm luft.

Title: Der foregĂĽr en kollektiv vrangforestilling i AI-verdenen lige nu
Content: Der foregĂĽr en kollektiv vrangforestilling i AI-verdenen lige nu.
Hver eneste tutorial fortĂŚller dig, at du skal skrive system-prompts, som om du kaster en trylleformular â du skal bare finde den rigtige besvĂŚrgelse, sĂĽ adlyder modellen. "You are an EXTREMELY TALENTED senior engineer with 20 years of experience..." Lyder det bekendt?
Jeg har brugt de sidste par müneder pü at bygge VibeCom, en AI-startup-rüdgiver, der kører dybdegüende markedsundersøgelser og genererer analyser pü VC-niveau. Undervejs har jeg reverse-engineeret Claude Codes system-prompt, lÌst DeepAgents' middleware-kildekode igennem og brÌndt flere API-credits af, end jeg har lyst til at indrømme. Den største lektie? Det meste af det, folk tror er vigtigt ved system-prompts, betyder ingenting. Og de ting, der rent faktisk betyder noget, er der nÌsten ingen, der taler om.
Dette indlĂŚg er den komplette drejebog â ikke et 5-minutters overblik, men alt det, jeg ville ønske, nogen havde fortalt mig, før jeg startede. Hent en kop kaffe.
1. Designfilosofi: Stol pĂĽ modellen
"An agent is a model. Not a framework. Not a prompt chain." â shareAI-lab/learn-claude-code
Denne idĂŠ ĂŚndrede alt for mig. LLM'en ved allerede, hvordan den skal rĂŚsonnere, planlĂŚgge og eksekvere. Din system-prompt lĂŚrer den ikke at tĂŚnke â den sĂŚtter miljøet op, som den skal arbejde i.
TĂŚnk pĂĽ det som at ansĂŚtte en seniorudvikler. Du giver dem ikke en tjekliste pĂĽ 20 trin til hver eneste opgave. Du fortĂŚller dem: Her er hvem vi er, her er grĂŚnserne, og her er, hvordan succes ser ud. Derefter trĂŚder du til side.
Din system-prompt har prĂŚcis fire opgaver:
- FortĂŚl den, hvem den er â rolle og identitet
- FortĂŚl den, hvor grĂŚnserne gĂĽr â sikkerhedsbegrĂŚnsninger
- FortĂŚl den, hvordan succes ser ud â kvalitetsstandarder
- Giv den vĂŚrktøjer â evner og viden
Det er det. Alt andet er støj.
Harness-tankegangen
Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions
Din system-prompt er brugermanualen til dette "harness" (arbejdsramme). Du designer ikke en rigid pipeline â du designer et miljø, hvor modellen kan udføre sit bedste arbejde autonomt.
Skriv ikke din system-prompt som et rutediagram. Modellen vil selv beslutte eksekveringsrÌkkefølgen.
2. Prompt-struktur og rÌkkefølge af sektioner
Det anbefalede layout (Reverse-engineeret fra Claude Code v2.0.14)
âââââââââââââââââââââââââââââââââââââââââââââââ
â 1. Identity â â Read first, anchors behavior
â 2. Security & Safety â â IMPORTANT markers, non-negotiable
â 3. Tone & Style â â Controls output format
â 4. Core Workflow â â How to do the work
â 5. Tool Usage Policy â â Tool selection priorities
â 6. Domain Knowledge â â On-demand, not pre-loaded
â 7. Environment Info â â Runtime context, dynamically injected
â 8. Reminders â â Re-state critical rules
âââââââââââââââââââââââââââââââââââââââââââââââ¤
â [Tool Definitions â system-injected] â â Not editable, usually very long
âââââââââââââââââââââââââââââââââââââââââââââââ¤
â [User Message] â
âââââââââââââââââââââââââââââââââââââââââââââââ
Hvorfor denne rÌkkefølge er vigtig
LLM'er har en U-formet opmĂŚrksomhedskurve â de er mest opmĂŚrksomme pĂĽ starten og slutningen af din prompt, og mister fokus i midten. Dette er den veldokumenterede "Lost in the Middle"-effekt.
- Identitet + Sikkerhed i toppen: Modellen etablerer rolle og grÌnser først (primacy-effekten)
- Kerne-workflow i den øvre midte: Din vigtigste sektion â hvordan agenten udfører sit arbejde
- VĂŚrktøjsdefinitioner injiceres af systemet efter din prompt: Claude Codes vĂŚrktøjsdefinitioner ĂŚder ~11.438 tokens. Det betyder, at dit tilpassede indhold faktisk ender tĂŚttere pĂĽ begyndelsen, end du mĂĽske forventer â hvilket hjĂŚlper pĂĽ overholdelsen af reglerne
- PĂĽmindelser i bunden: Udnyt recency-bias til at forstĂŚrke kritiske regler
3. SĂĽdan skriver du hver sektion
3.1 Identitet â Hvem er denne agent?
MĂĽl: Forankr modellens rolle pĂĽ 1-3 sĂŚtninger.
You are Claude Code, Anthropic's official CLI for Claude.
You are an interactive agent that helps users with software engineering tasks.
Retningslinjer:
- Hold det kort â maks. 1-3 sĂŚtninger
- Navngiv rollen eksplicit (hjĂŚlper modellen med at skelne mellem kontekster)
- Angiv kerneansvaret ("hjĂŚlper med X"), ikke et vagt "du er en hjĂŚlpsom assistent"
- NĂŚvn SDK/platform, hvis det er relevant ("bygget pĂĽ Anthropics Claude Agent SDK")
Anti-patterns:
- "You are a helpful, harmless, and honest AI assistant" â for generisk, ingen forankring af rollen
- Et helt afsnit med baggrundshistorie og "lore" â spilder tokens, modellen har ikke brug for karakterudvikling
3.2 Sikkerhed & Beskyttelse â De hĂĽrde grĂŚnser
MĂĽl: SĂŚt ubrydelige adfĂŚrdsmĂŚssige begrĂŚnsninger.
IMPORTANT: Assist with defensive security tasks only.
Refuse to create, modify, or improve code that may be used maliciously.
IMPORTANT: You must NEVER generate or guess URLs for the user.
Retningslinjer:
- Brug
IMPORTANT:-prĂŚfikset â Claudes trĂŚning i instruktionshierarki giver dette ekstra vĂŚgt - Brug absolut sprog:
NEVER,MUST NOT,Refuse to - Angiv bĂĽde hvad der er tilladt OG hvad der er forbudt (tosidede begrĂŚnsninger er tydeligere)
- Placer det helt i toppen, ikke begravet i midten
- Gentag kritiske sikkerhedsregler til sidst â Claude Code gør prĂŚcis dette
Hvorfor gentage? Primacy-effekt (begyndelsen) + Recency-effekt (slutningen) = dobbelt forstĂŚrkning. Claude Codes sikkerhedserklĂŚring optrĂŚder bĂĽde i starten og slutningen af prompten. Ikke fordi ingeniørerne var glemsomme â men fordi de forstĂĽr den U-formede opmĂŚrksomhedskurve.
3.3 Tone & Stil â Kontrol af output
MĂĽl: Kontroller output-format og stemme.
## Tone and style
- Your responses should be short and concise.
- Only use emojis if the user explicitly requests it.
- Use Github-flavored markdown for formatting.
- NEVER create files unless absolutely necessary.
Retningslinjer:
- Oplist specifikke adfÌrdsmønstre, ikke et vagt "vÌr professionel"
- Hver regel skal kunne testes som sand/falsk ("short and concise" vs. "try to be brief")
- Inkluder krav til output-format (markdown? JSON? ren tekst?)
- Inkluder hvad den IKKE skal gøre â mange stilproblemer handler om at forbyde en bestemt adfĂŚrd
Claude Codes genistreg â Professionel objektivitet:
Prioritize technical accuracy and truthfulness over validating the user's beliefs.
Focus on facts and problem-solving, providing direct, objective technical info
without any unnecessary superlatives, praise, or emotional validation.
Dette afsnit er afgørende: Det blokerer modellens tendens til at snakke brugeren efter munden (sycophancy). Hvis din agent skal give objektive vurderinger (code review, evaluering af idÊer, arkitekturbeslutninger), har du absolut brug for en lignende klausul.
3.4 Kerne-workflow â Den vigtigste sektion
MĂĽl: LĂŚr modellen hvordan den skal arbejde â metodologi, ikke rigide procedurer.
Dette er den svÌreste sektion at skrive godt, og den der har størst effekt, nür du rammer rigtigt.
Kerneprincippet: giv principper, ikke procedurer.
FortĂŚl LLM'en, hvordan et godt output ser ud, og hvorfor det er godt â lad den selv finde ud af, hvordan den nĂĽr dertil. UndgĂĽ at diktere prĂŚcise antal felter, sekvenser af trin eller formater, medmindre outputtet skal forbruges af maskiner lĂŚngere nede i systemet.
Claude Codes tilgang:
## Doing tasks
The user will primarily request software engineering tasks.
For these tasks the following steps are recommended:
- Use the TodoWrite tool to plan the task if required
LĂŚg mĂŚrke til ordet "recommended" â ikke "du skal følge disse prĂŚcise trin". Det ene ordvalg giver modellen plads til at tilpasse sig.
En god workflow-definition:
1. Understand first â read existing code before modifying it
2. Plan first â break complex tasks into steps before executing
3. Minimal changes â only change what's necessary, don't "refactor while you're in there"
4. Verify â confirm your changes work (run tests, lint, etc.)
Hver regel har et implicit "hvorfor" â modellen kan forstĂĽ hensigten og generalisere til nye scenarier.
Anti-patterns:
- En rigid procedure pĂĽ 20 trin â modellen vil eksekvere mekanisk og fryse ved uventede inputs
- "Gør først A, gør derefter B, gør derefter C" â det er en prompt-chain, ikke en agent-prompt
- At over-guide ting, som LLM'en allerede er god til â det spilder tokens
Jeg lÌrte dette pü den hürde müde med VibeCom. Tidlige versioner havde et research-workflow pü 10 trin. Modellen eksekverede pligtopfyldende alle 10 trin, selv nür trin 3 allerede havde besvaret brugerens spørgsmül. Da jeg skiftede til principper ("research indtil du har tilstrÌkkelig evidens, og syntetiser derefter"), steg kvaliteten, og token-omkostningerne faldt.
Undtagelsen: Nür outputtet skal forbruges af maskiner (inter-agent kommunikation, API-responsformater), bør du definere strikse formater. Principper er til adfÌrd; skemaer er til grÌnseflader.
3.5 Politik for brug af vĂŚrktøjer â Løsning af tvetydighed
Mül: Nür flere vÌrktøjer kan gøre det samme, skal du fortÌlle modellen, hvilket den skal foretrÌkke.
## Tool usage policy
- Use specialized tools instead of bash commands:
- Read for reading files instead of cat/head/tail
- Edit for editing instead of sed/awk
- Grep for searching instead of grep/rg
- You can call multiple tools in a single response. If independent, call in parallel.
- Use the Task tool for file search to reduce context usage.
Retningslinjer:
- Brug "instead of" for at udtrykke prioritet (A i stedet for B)
- Forklar hvorfor den skal foretrÌkke bestemte vÌrktøjer ("giver en bedre brugeroplevelse", "reducerer kontekstforbrug")
- Definer strategi for parallelisme (uafhĂŚngige â parallel, afhĂŚngige â sekventiel)
- Oplist sikkerhedsbegrÌnsninger for brug af vÌrktøjer (validering af stier, rettighedstjek)
Det afgørende forhold mellem vÌrktøjer og prompts:
VÌrktøjsdefinitioner injiceres typisk af systemet, og du kan ikke redigere dem direkte. Claude Codes vÌrktøjsdefinitioner er pü ~11.438 tokens. Det betyder:
- Gentag ikke information, der allerede findes i vÌrktøjsdefinitionerne
- Brug system-prompten til strategisk vejledning: hvornür hvert vÌrktøj skal bruges, hvorfor man skal foretrÌkke Êt frem for et andet, og prioriteringsrÌkkefølge
- Kvaliteten af vĂŚrktøjsdefinitioner pĂĽvirker agentens effektivitet direkte â hvis du bygger din egen agent, sĂĽ invester tid i at skrive fremragende vĂŚrktøjsbeskrivelser
3.6 DomĂŚneviden â IndlĂŚs on-demand, ikke pĂĽ forhĂĽnd
MĂĽl: Giv specialiseret viden, som modellens trĂŚningsdata mĂĽske mangler.
Kerneprincippet: progressiv afsløring, ikke videns-dumps.
â Paste all 200 API endpoints into the system prompt â token explosion
â
Give the model a tool to look things up â "Load knowledge when you need it"
Denne strategi deles af Claude Codes Skills-system og DeepAgents' Progressive Disclosure-middleware. Begge indlÌser viden on-demand via vÌrktøjskald i stedet for at pre-loade alt.
Implementeringstilgange:
- LĂŚg pointers i system-prompten: "Use the get_api_docs tool to retrieve documentation when needed"
- Brug CLAUDE.md / AGENTS.md til projektkontekst â indlĂŚses ved runtime, hardcodes ikke
- Brug Skills / SKILL.md til opdagelse af evner â modellen ser en menu af tilgĂŚngelige skills og henter fulde specifikationer on-demand
3.7 Miljø-info â Runtime-kontekst
Mül: Giv modellen bevidsthed om sit eksekveringsmiljø.
<env>
Working directory: /Users/fengliu/Desktop/tfm/vibecom
Is directory a git repo: true
Platform: darwin
Today's date: 2026-03-21
</env>
You are powered by the model named Claude Opus 4.6.
Retningslinjer:
- Generer dynamisk, hardcode aldrig
- Inkluder: working directory, platform, dato, modelnavn, git-status
- Brug struktureret format (XML-tags eller kodeblokke) for nem parsing
- Dato er vigtig â modellen har brug for at kende "nu" for at vurdere, hvor frisk informationen er
3.8 PĂĽmindelser â Den sidste forstĂŚrkning
MĂĽl: Gentag de mest kritiske regler i slutningen af prompten.
Claude Code gentager sin sikkerhedsbegrĂŚnsning og TodoWrite-krav i bunden:
IMPORTANT: Assist with defensive security tasks only. [repeated]
IMPORTANT: Always use the TodoWrite tool to plan and track tasks. [repeated]
Retningslinjer:
- Gentag kun 2-3 af de mest kritiske regler â dupliker ikke alt
- Udnyt recency-bias â modellen husker nyligt indhold stĂŚrkere
- Bedste kandidater: sikkerhedsbegrĂŚnsninger, regler der oftest overtrĂŚdes, pĂĽmindelser om kerne-workflow
4. Token-budget og hĂĽndtering af kontekst
Reference for budgetallokering
| Sektion | Anbefalede Tokens | Noter |
|---|---|---|
| Identitet + Sikkerhed | 200-500 | Kortfattet, men ufravigelig |
| Tone & Stil | 300-800 | Regler skal vĂŚre specifikke, men undgĂĽ at ĂŚvle |
| Kerne-workflow | 500-2.000 | Vigtigste sektion, investeringen vĂŚrd |
| Politik for vÌrktøjer | 300-1.000 | AfhÌnger af antallet af vÌrktøjer |
| DomĂŚneviden | 0-1.000 | On-demand indlĂŚsning foretrĂŚkkes |
| Miljø-info | 100-300 | Genereres dynamisk |
| Pümindelser | 100-300 | Gentag kun det absolut nødvendige |
| Din total | 1.500-6.000 | |
| VÌrktøjsdefinitioner (system) | 5.000-15.000 | Ikke under din kontrol |
Kurve for kontekst-forfald
Community-tests (Reddit u/CodeMonke_) har kortlagt, hvordan overholdelsen af regler forfalder i den virkelige verden:
- < 80K tokens: Prompt-overholdelse forbliver stabil
- 80K - 120K tokens: Evnen til at følge instruktioner begynder at forfalde
- > 120K tokens: Betydeligt forfald â modellen "glemmer" tidlige instruktioner
- > 180K tokens: Alvorligt forfald
Dit 200K kontekstvindue â 200K effektiv kontekst. PlanlĂŚg derefter.
Strategier til afbødning:
- Hold din system-prompt slank (< 6.000 tokens for din del)
- Brug opsummering til at komprimere samtalehistorikken (DeepAgents trigger ved ~80K tegn)
- Placer kritiske regler i begge ender af prompten (U-formet opmĂŚrksomhed)
- Injicer
<system-reminder>-tags midt i samtalen (mere om dette i sektion 8)
5. Skriveprincipper
5.1 Giv principper, ikke procedurer
â "Step 1: Read the file. Step 2: Find the bug. Step 3: Fix it. Step 4: Run tests."
â
"Always understand existing code before modifying it. Verify your changes work."
Principper generaliserer. Procedurer kan kun følges mekanisk. Nür modellen støder pü en situation, du ikke havde forudset, guider principper den til den rigtige beslutning. Det gør procedurer ikke.
Undtagelse: NĂĽr outputtet forbruges af maskiner (inter-agent kommunikation, API-formater), skal du definere strikse skemaer.
5.2 Brug absolut sprog til hĂĽrde begrĂŚnsninger
| Styrke | Sprog | Brug til |
|---|---|---|
| Absolut forbud | NEVER, MUST NOT | Sikkerhed, irreversible operationer |
| StĂŚrkt krav | ALWAYS, MUST | Regler for kerne-workflow |
| Anbefaling | recommended, prefer | Best practices med undtagelser |
| Forslag | consider, you may | Valgfrie optimeringer |
Claude Code eksempler:
NEVER update the git configâ absolut forbudALWAYS prefer editing an existing fileâ stĂŚrkt, men der findes undtagelserThe following steps are recommendedâ foreslĂĽet workflow
5.3 Brug eksempler i stedet for forklaringer
## Code References
When referencing specific functions or pieces of code include
the pattern `file_path:line_number`.
<example>
user: Where are errors from the client handled?
assistant: Clients are marked as failed in the `connectToServer`
function in src/services/process.ts:712.
</example>
Ăt eksempel underviser bedre end 100 ords forklaring:
- Modeller lÌrer mønstre fra eksempler mere pülideligt end fra abstrakte beskrivelser
- Pak dem ind i
<example>-tags for at adskille dem fra reglerne - Giv büde positive ("gør dette") og negative ("gør ikke dette") eksempler
- Brug rigtige, specifikke eksempler â ikke "foo/bar"-placeholders
5.4 Tosidede begrĂŚnsninger
â
"Use dedicated tools: Read for reading files, Edit for editing files."
â
"Do NOT use bash for file operations (cat, head, tail, sed, awk)."
At sige kun "gør dette" â modellen ved ikke, hvornĂĽr den IKKE skal gøre det. At sige kun "gør ikke dette" â modellen kender ikke alternativet. Tosidet â klart og utvetydigt.
5.5 Forklar hvorfor, ikke kun hvad
â "Don't use git commit --amend."
â
"Avoid git commit --amend. ONLY use --amend when either
(1) user explicitly requested amend OR
(2) adding edits from pre-commit hook.
Reason: amending may overwrite others' commits."
At forklare hvorfor lader modellen trĂŚffe korrekte vurderinger i edge-cases. Claude Codes git-sikkerhedsprotokol er en masterclass â hver regel antyder sin egen begrundelse.
5.6 Struktur frem for prosa
- Markdown-overskrifter (
##,###) â modeller genkender hierarki - Punktopstillinger frem for afsnit â hver regel kan testes uafhĂŚngigt
- XML-tags til specielt indhold:
<example>,<env>,<system-reminder> - Tabeller til sammenligninger og mapninger
- Dump aldrig ustruktureret tekst â strukturerede prompts udkonkurrerer konsekvent naturlig sprogprosa i tests af regeloverholdelse
6. Anti-patterns der spilder dine tokens
Prompt-chains forklĂŚdt som agenter
"First call tool A to get data.
Then call tool B with the result.
Then format the output as JSON.
Then save to file."
Dette er ikke en agent-prompt â det er et pipeline-script. Modellen vil eksekvere mekanisk og miste sin autonome planlĂŚgningsevne.
Løsningen: FortÌl modellen mület og begrÌnsningerne. Lad den selv beslutte trinnene.
Smiger-engineering
"You are an EXTREMELY TALENTED and INCREDIBLY EXPERIENCED
senior software engineer with 20 years of experience..."
Komplimenter og superlativer forbedrer ikke output-kvaliteten. Modellen har ikke et ego, der skal boostes. Gem de 15 tokens til en rigtig regel.
Videns-dumps
"Here is the complete API documentation for our 200 endpoints..."
Dette ĂŚder dit kontekstvindue og fremskynder kontekst-forfald. Erstat med on-demand indlĂŚsning:
"Use the get_api_docs tool to retrieve API documentation when needed."
Gentagelse af vÌrktøjsbeskrivelser
Hvis vĂŚrktøjsdefinitionen allerede siger "Read tool reads a file from the filesystem", sĂĽ sig det ikke igen i din system-prompt. Tilføj kun strategisk vejledning, som vĂŚrktøjsdefinitionen ikke dĂŚkker â hvornĂĽr det skal bruges, hvorfor det skal foretrĂŚkkes, prioriteringsrĂŚkkefølge.
Manglende hĂĽndtering af fejl
Uden eksplicit vejledning vil modeller forsøge at genkalde fejlede vÌrktøjskald i et uendeligt loop. Inkluder altid:
"If a tool call is denied, do not re-attempt the exact same call.
Think about why it was denied and adjust your approach."
Ignorering af kontekstvinduets forfald
200K kontekstvindue â 200K effektiv kontekst. Tests i den virkelige verden viser, at forfaldet starter ved 80K. Du har brug for en strategi for opsummering.
7. Injektionspunkter og prioritet
Claude Codes tre metoder til tilpasning
| Metode | Erstatter | Placering | Bedst til |
|---|---|---|---|
| Output Styles | "Tone and style" + "Doing tasks" sektionerne | Lige før vĂŚrktøjsdefinitioner | Ăndring af interaktionsstil |
| --append-system-prompt | Ingenting (additiv) | Efter output style, før vÌrktøjsdefinitioner | Tilføjelse af specifik adfÌrd |
| --system-prompt | Hele system-prompten | Beholder vÌrktøjsdefinitioner + Ên identitetslinje | Fuld tilpasning (den drastiske løsning) |
Hvis du bruger flere: Output Style â Append Prompt â Tool Definitions
Instruktionshierarki
Claude er specifikt trĂŚnet med et instruktionshierarki:
1. User's explicit instructions (CLAUDE.md, direct requests) â Highest priority
2. Custom system prompt additions â High
3. Default system prompt â Medium
4. Tool definitions â Reference level
Det betyder:
- CLAUDE.md-regler overskriver standard system-prompt-adfĂŚrd
- Brugerens direkte anmodninger overskriver alt
- Din tilpassede prompt overskriver standard-prompten
Dynamiske injektionsmekanismer
<system-reminder>â injicer i enhver besked midt i samtalen for at minde modellen om kritiske regler- CLAUDE.md / AGENTS.md â indlĂŚses ved runtime fra filer, tilføjes til system-prompten
- Skills / SKILL.md â indlĂŚses on-demand via vĂŚrktøjskald, nul fodaftryk i system-prompten
8. Injektion midt i samtalen â Det hemmelige vĂĽben
System-prompten optrÌder kun Ên gang, helt i starten af besked-arrayet. Men LLM'er accepterer hele besked-arrayet (skiftevis bruger / assistent / vÌrktøjsbeskeder) som input, og du kan ogsü injicere prompts i brugermeddelelser og vÌrktøjsresultater. Claude Code bruger denne teknik flittigt i produktion.
Hvorfor det er nødvendigt
Kampen mod kontekst-forfald. EfterhĂĽnden som samtaler bliver lĂŚngere, forfalder modellens overholdelse af system-promptens instruktioner (mĂŚrkbart ved 80K+ tokens). At injicere pĂĽmindelser midt i samtalen = opfriskning af reglerne via recency-bias.
Den mentale model:
- System-prompt = grundloven (etableres ĂŠn gang, langsigtet autoritet)
- Brugermeddelelses-pĂĽmindelser = memos (sendes periodisk, opretholder hĂĽndhĂŚvelsen)
Tre injektionspunkter i besked-arrayet
Messages Array:
âââââââââââââââââââââââââââââââââââââââ
â System Prompt â â Appears once, primacy effect
â (identity, safety, workflow...) â
âââââââââââââââââââââââââââââââââââââââ¤
â User Message 1 â
â Assistant Message 1 â
â User Message 2 + <system-reminder> â â Mid-conversation injection
â Assistant Message 2 â
â Tool Result + <system-reminder> â â Can inject into tool results too
â ... â
â User Message N + <system-reminder> â â Latest message, strongest recency
âââââââââââââââââââââââââââââââââââââââ
| Placering | Fordel | Ulempe |
|---|---|---|
| System-prompt | Primacy-effekt, lÌses først | OptrÌder Ên gang, "glemmes" i lange samtaler |
| Brugermeddelelses-injektion | Recency-bias, periodisk opfriskning | Hver injektion koster tokens |
| VÌrktøjsresultat-injektion | Mest naturlige injektionspunkt | Virker kun, nür vÌrktøjer kaldes |
Hvordan Claude Code rent faktisk bruger det
ForudsĂŚtning â deklarer tags i system-prompten:
Tool results and user messages may include <system-reminder> tags.
<system-reminder> tags contain useful information and reminders.
They are automatically added by the system, and bear no direct
relation to the specific tool results or user messages in which they appear.
Dette trin er kritisk: Det fortĂŚller modellen, at disse tags er system-injicerede, ikke brugerens tale.
Brug 1: AdfĂŚrdsmĂŚssige pĂĽmindelser (periodisk opfriskning af regler)
<system-reminder>
The task tools haven't been used recently. If you're working on tasks
that would benefit from tracking progress, consider using TaskCreate...
</system-reminder>
Claude Code bruger dette til at minde modellen om at planlĂŚgge med TodoWrite â fordi modeller har en tendens til at "glemme" planlĂŚgning og bare begynde at kode.
Brug 2: Skift af tilstand (Plan Mode)
<system-reminder>
Plan mode is active. The user indicated that they do not want you to
execute yet -- you MUST NOT make any edits, run any non-readonly tools,
or otherwise make any changes to the system.
</system-reminder>
Plan mode er ikke implementeret i system-prompten. Det er et tag, der injiceres i den nĂŚste brugermeddelelse. Dette lader dig skifte tilstande dynamisk uden at ĂŚndre system-prompten. Genialt.
Brug 3: Notifikationer om filĂŚndringer
<system-reminder>
Note: /path/to/file.ts was modified, either by the user or by a linter.
This change was intentional, so make sure to take it into account.
</system-reminder>
NĂĽr en ekstern proces (linter, formatter, manuel redigering) ĂŚndrer en fil, giver systemet modellen besked via en pĂĽmindelse â hvilket forhindrer beslutninger baseret pĂĽ forĂŚldet filindhold.
Brug 4: Dynamisk kontekst (datoer, projektregler)
<system-reminder>
Today's date is 2026-03-21.
Current branch: dev
claudeMd: [CLAUDE.md content injected here]
</system-reminder>
Runtime-kontekst (dato, git-status, projektregler) injiceres via brugermeddelelser, ikke hardcodet i system-prompten.
Retningslinjer for at skrive pĂĽmindelser
- Pak ind i XML-tags (
<system-reminder>) â modellen kan skelne systeminjektion fra brugertale - ForhĂĽndsdeklarer tags i system-prompten â ellers kan modellen forsøge at svare pĂĽ pĂĽmindelsen
- Injicer ikke i hver besked â hver injektion koster tokens, injicer kun nĂĽr det er nødvendigt
- Hold det kort â en pĂĽmindelse er ikke en system-prompt nummer to, bare 1-2 kritiske regler
- Modsig ikke system-prompten â pĂĽmindelser supplerer og forstĂŚrker, de overskriver ikke
- Brug til dynamisk skift â plan mode, readonly mode, feature flags
HvornĂĽr skal man bruge System-prompt vs. Brugermeddelelses-pĂĽmindelse
| Scenarie | System-prompt | Brugermeddelelses-pĂĽmindelse |
|---|---|---|
| Rolledefinition | â | â |
| SikkerhedsbegrĂŚnsninger | â Første deklaration | â Periodisk gentagelse |
| Workflow-metodologi | â | â |
| Skift af tilstand (plan mode) | â | â |
| Notifikationer om filĂŚndringer | â | â |
| Dato / miljø-info | â StartvĂŚrdi | â Opdateret vĂŚrdi |
| AdfĂŚrdskorrektion | â | â |
| PĂĽmindelser om brug af vĂŚrktøjer | â Regeldefinition | â Eksekverings-nudges |
9. Prompt Cache â Spar 90% pĂĽ gentagne tokens
Anthropics prompt-caching lader dig cache det statiske prĂŚfiks af dit besked-array. NĂĽr efterfølgende anmodninger deler det samme prĂŚfiks, rammer de cachen â hvilket sparer penge og reducerer latency.
For agenter betyder dette utrolig meget: Du gensender system-prompten + vÌrktøjsdefinitionerne ved hvert eneste LLM-kald inden for en samtale.
Nøgletal
| Metrik | VĂŚrdi |
|---|---|
| Pris for cache hit | 10% af normal pris (90% besparelse) |
| Pris for cache write | 125% af normal pris (25% premium pü første skrivning) |
| Cache TTL | 5 minutter (udløber hvis ingen anmodninger) |
| Minimum cachebar lĂŚngde | 1.024 tokens (Claude 3.5+) |
| Cache-granularitet | PrĂŚfiks-matching â fra starten til et markeret breakpoint |
| Maksimum breakpoints | 4 |
Hvordan dette ĂŚndrer prompt-design
Kerneprincip: statisk indhold først, dynamisk indhold sidst.
â
Cache-friendly layout:
System prompt (static) â Cache breakpoint 1
Tool definitions (static) â Cache breakpoint 2
CLAUDE.md / project rules â Cache breakpoint 3 (changes occasionally)
Conversation history â Breakpoint 4 for rolling window
â Cache-destroying layout:
System prompt
DYNAMIC TIMESTAMP â Changes every request, everything after = cache miss
Tool definitions
Conversation history
FĂŚlden, ingen advarer dig imod: Hvis du placerer et dynamisk tidsstempel midt i din system-prompt, bliver alt efter det til et cache miss. Hver. Eneste. Anmodning. Ăt tidsstempel pĂĽ det forkerte sted, og du betaler fuld pris for tusindvis af tokens.
API-brug
const response = await anthropic.messages.create({
model: "claude-sonnet-4-6",
system: [
{
type: "text",
text: "You are a startup advisor...",
cache_control: { type: "ephemeral" } // â marks a cache breakpoint
}
],
messages: [...]
});
Multi-Breakpoint Strategi
Breakpoint 1: System prompt â Almost never changes
Breakpoint 2: Tool definitions â Almost never changes
Breakpoint 3: Project rules / CLAUDE.md â Changes occasionally
Breakpoint 4: First N history messages â Rolling window cache
Selv nür samtalehistorikken Ìndrer sig, rammer de første 3 breakpoints stadig. En samtale pü 10 ture sparer groft sagt 40-60% pü input-token-omkostninger.
Designanbefalinger
- Ingen højfrekvente dynamiske vĂŚrdier i system-prompten â dato er fint (ĂŚndres dagligt), prĂŚcise tidsstempler er ikke
- LĂŚg dynamisk kontekst (git-status osv.) i brugermeddelelses-injektioner â ikke i system-prompten, ellers ødelĂŚgger du cachen
- Hold vĂŚrktøjsdefinitioner stabile â tilføj/fjern ikke vĂŚrktøjer dynamisk ved runtime
- Brug rullende vindue til samtalehistorik â cache de første N beskeder, kun den nyeste besked er et cache miss
10. Tjeklisten
NĂĽr du har skrevet din system-prompt, sĂĽ gennemgĂĽ den med denne tjekliste:
Struktur
- Er identiteten helt i toppen?
- Er sikkerhedsbegrĂŚnsninger markeret med IMPORTANT og gentaget til sidst?
- Er der klar adskillelse af sektioner med overskrifter?
- Er eksempler pakket ind i
<example>-tags?
Token-budget
- Er din del < 6.000 tokens?
- Undgür du at gentage information, der allerede findes i vÌrktøjsdefinitionerne?
- IndlĂŚses domĂŚneviden on-demand i stedet for at vĂŚre pre-loaded?
- Er der ingen overflødig "lore" eller baggrundshistorie for karakteren?
Regelkvalitet
- Kan hver regel testes som sand/falsk?
- Bruger hĂĽrde begrĂŚnsninger absolut sprog (NEVER/MUST)?
- Bruger bløde forslag anbefalingssprog (recommended/prefer)?
- Forklarer kritiske regler hvorfor, ikke kun hvad?
- Er der tosidede begrÌnsninger (gør dette + gør ikke det der)?
Agent-adfĂŚrd
- Er der givet principper, ikke rigide trin-for-trin procedurer?
- Er scenariet "vÌrktøjskald afvist" hündteret?
- Er strategien for "stødt pü forhindring" hündteret (undgü brute-force retries)?
- Er der en strategi for hĂĽndtering af kontekst pĂĽ plads (tĂŚrskel for opsummering)?
Hvad du IKKE skal gøre
- Ingen smiger eller superlative adjektiver?
- Ingen overflødige "du er en hjÌlpsom AI"-deklarationer?
- Ikke skrevet som en prompt-chain?
- Ingen over-engineering (features ingen har bedt om)?
Hvis jeg startede forfra i dag
Her er prÌcis, hvad jeg ville gøre:
-
Start med identitet + sikkerhed i de første 3 linjer. To sÌtninger om, hvem agenten er. Hürde begrÌnsninger med NEVER/MUST. Gentag sikkerhedsreglerne til sidst.
-
Skriv dit kerne-workflow som principper, ikke trin. Maks. 4-5 punkter. Brug "recommended" og "prefer" til bløde regler, "NEVER" og "MUST" til hürde.
-
Budgetter 1.500-6.000 tokens til din del. VÌrktøjsdefinitioner vil tilføje 5.000-15.000 mere. Hvis du er over 6K, dumper du sandsynligvis viden, der burde indlÌses on-demand.
-
Strukturer alt. Markdown-overskrifter, punktopstillinger, XML-tags til eksempler. En struktureret prompt udkonkurrerer naturlig sprogprosa hver gang.
-
Indbyg pĂĽmindelser midt i samtalen fra dag ĂŠt. Deklarer
<system-reminder>i din system-prompt. Injicer pĂĽmindelser for kritiske regler, tilstandsskift og kontekstopdateringer. -
Design til cache. Statisk indhold først, dynamisk indhold sidst. Placer aldrig skiftende vÌrdier i selve din system-prompt.
Det ironiske ved alt dette arbejde? De bedste system-prompts er korte. Claude Codes tilpassede instruktioner (eksklusive vÌrktøjsdefinitioner) er overraskende kortfattede. Hver linje gør sig fortjent til sin plads.
Jeg troede engang, at prompt-engineering handlede om at finde smarte tricks. Nu tror jeg, det handler om disciplin â at sige mindre, sige det prĂŚcist, og stole pĂĽ, at modellen finder ud af resten. Modellen er klogere end din prompt. Design miljøet, ikke adfĂŚrden.
Referencer
| Kilde | Nøgleindsigt |
|---|---|
| Claude Code v2.0.14 System Prompt | Fuld reference til struktur af en produktions-agent-prompt |
| Reddit: Understanding Claude Code's 3 System Prompt Methods | DybdegĂĽende kig pĂĽ Output Styles / --append / --system-prompt, data fra den virkelige verden om kontekst-forfald |
| shareAI-lab/learn-claude-code | "Modellen er agenten"-filosofien, metodologi for harness-engineering |
| Anthropic Prompt Engineering Docs | Officielle best practices for prompts |
| DeepAgents Framework | Middleware til opsummering, progressiv afsløring af skills |
Del dette

Skrevet af Feng Liu
shenjian8628@gmail.com