Den komplette guiden til Ă„ skrive systemprompter for agenter â LĂŠrdommer fra reverse-engineering av Claude Code
Jeg dekompilerte system-prompten til Claude Code, studerte kildekoden til DeepAgents, og bygget min egen AI-agent fra bunnen av. De fleste prompt-guider er bare synsing.

Title: Det pÄgÄr en massevrangforestilling i AI-verdenen akkurat nÄ.
Content: Det pÄgÄr en massevrangforestilling i AI-verdenen akkurat nÄ.
Hver eneste tutorial forteller deg at du mĂ„ skrive system-prompts som om du kaster en trylleformel â bare du finner den rette besvergelsen, vil modellen adlyde. "Du er en EKSTREMT DYKTIG seniorutvikler med 20 Ă„rs erfaring..." HĂžres det kjent ut?
De siste mÄnedene har jeg bygget VibeCom, en AI-rÄdgiver for startups som kjÞrer dype markedsundersÞkelser og genererer analyser pÄ VC-nivÄ. PÄ veien dit har jeg reverskonstruert Claude Codes system-prompt, lest gjennom kildekoden til DeepAgents' middleware, og svidd av flere API-credits enn jeg liker Ä innrÞmme. Den stÞrste lÊrdommen? Det meste av det folk tror er viktig med system-prompts, betyr ingenting. Og de tingene som faktisk betyr noe, er det nesten ingen som snakker om.
Dette innlegget er den komplette dreieboken â ikke en 5-minutters oversikt, men alt jeg skulle Ăžnske noen hadde fortalt meg fĂžr jeg startet. Hent deg en kaffe.
1. Designfilosofi: Stol pÄ modellen
"An agent is a model. Not a framework. Not a prompt chain." â shareAI-lab/learn-claude-code
Denne tankegangen endret alt for meg. LLM-en vet allerede hvordan den skal resonnere, planlegge og utfĂžre. System-promptet ditt skal ikke lĂŠre den Ă„ tenke â det skal sette opp miljĂžet den skal jobbe i.
Tenk pÄ det som Ä ansette en seniorutvikler. Du gir dem ikke en sjekkliste pÄ 20 punkter for hver eneste oppgave. Du forteller dem: her er hvem vi er, her er grensene, her er definisjonen pÄ godt arbeid. SÄ flytter du deg ut av veien.
System-promptet ditt har nĂžyaktig fire jobber:
- Fortell den hvem den er â rolle og identitet
- Fortell den hvor veggene er â sikkerhetsbegrensninger
- Fortell den hvordan bra ser ut â kvalitetsstandarder
- Gi den verktĂžy â kapabiliteter og kunnskap
Det er det. Alt annet er stĂžy.
Harness-tankegangen
Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions
System-promptet ditt er brukermanualen for dette "seletĂžyet" (harness). Du designer ikke en rigid pipeline â du designer et miljĂž hvor modellen kan gjĂžre sitt beste arbeid autonomt.
Ikke skriv system-promptet ditt som et flytskjema. Modellen vil selv bestemme utfĂžrelsesrekkefĂžlgen.
2. Prompt-struktur og rekkefĂžlge
Den anbefalte layouten (Reverskonstruert fra Claude Code v2.0.14)
âââââââââââââââââââââââââââââââââââââââââââââââ
â 1. Identity â â Leses fĂžrst, forankrer adferd
â 2. Security & Safety â â VIKTIGE markĂžrer, ufravikelig
â 3. Tone & Style â â Kontrollerer output-format
â 4. Core Workflow â â Hvordan jobben skal gjĂžres
â 5. Tool Usage Policy â â Prioritering av verktĂžy
â 6. Domain Knowledge â â PĂ„ forespĂžrsel, ikke forhĂ„ndslastet
â 7. Environment Info â â Runtime-kontekst, injiseres dynamisk
â 8. Reminders â â Gjenta kritiske regler
âââââââââââââââââââââââââââââââââââââââââââââââ€
â [Tool Definitions â system-injected] â â Kan ikke redigeres, ofte veldig lange
âââââââââââââââââââââââââââââââââââââââââââââââ€
â [User Message] â
âââââââââââââââââââââââââââââââââââââââââââââââ
Hvorfor denne rekkefĂžlgen er viktig
LLM-er har en U-formet oppmerksomhetskurve â de fĂžlger best med pĂ„ begynnelsen og slutten av promptet ditt, og mister fokus i midten. Dette er den veldokumenterte "Lost in the Middle"-effekten.
- Identitet + Sikkerhet pÄ toppen: Modellen etablerer rolle og grenser fÞrst (primacy-effekten)
- Core Workflow i Ăžvre midtdel: Din viktigste seksjon â hvordan agenten gjĂžr jobben sin
- VerktĂžydefinisjoner injiseres av systemet etter promptet ditt: Claude Codes verktĂžydefinisjoner spiser ~11 438 tokens. Dette betyr at ditt tilpassede innhold faktisk havner nĂŠrmere begynnelsen enn du kanskje tror â noe som hjelper pĂ„ etterlevelsen
- PÄminnelser i bunnen: Utnytt recency bias for Ä forsterke kritiske regler
3. Hvordan skrive hver seksjon
3.1 Identitet â Hvem er denne agenten?
MÄl: Forankre modellens rolle pÄ 1-3 setninger.
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 setninger
- Navngi rollen eksplisitt (hjelper modellen med Ă„ skille kontekster)
- Oppgi kjerneansvaret ("hjelper med X"), ikke et vagt "du er en hjelpsom assistent"
- Nevn SDK/plattform hvis relevant ("bygget pÄ Anthropic's Claude Agent SDK")
Anti-patterns:
- "Du er en hjelpsom, ufarlig og ĂŠrlig AI-assistent" â for generisk, ingen rolleforankring
- Et helt avsnitt med bakhistorie og "lore" â kaster bort tokens, modellen trenger ikke karakterutvikling
3.2 Sikkerhet & Trygghet â De absolutte grensene
MÄl: Sett ufravikelige adferdsbegrensninger.
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:
- Bruk
IMPORTANT:-prefikset â Claudes trening pĂ„ instruksjonshierarki gir dette ekstra vekt - Bruk absolutt sprĂ„k:
NEVER,MUST NOT,Refuse to - Oppgi bÄde hva som er tillatt OG hva som er forbudt (toveis begrensninger er tydeligere)
- Plasser helt pÄ toppen, ikke begrav det i midten
- Gjenta kritiske sikkerhetsregler til slutt â Claude Code gjĂžr nĂžyaktig dette
Hvorfor gjenta? Primacy-effekt (begynnelse) + Recency-effekt (slutt) = dobbel forsterkning. Claude Codes sikkerhetserklĂŠring dukker opp bĂ„de i starten og slutten av promptet. Ikke fordi ingeniĂžrene var glemske â men fordi de forstĂ„r den U-formede oppmerksomhetskurven.
3.3 Tone & Stil â Kontroll over 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:
- List opp spesifikke adferder, ikke et vagt "vĂŠr profesjonell"
- Hver regel bĂžr kunne testes som sann/usann ("kort og konsis" vs. "prĂžv Ă„ vĂŠre kortfattet")
- Inkluder krav til output-format (markdown? JSON? ren tekst?)
- Inkluder hva den IKKE skal gjĂžre â mange stilproblemer handler om Ă„ forby adferd
Claude Codes genistrek â Profesjonell 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 avsnittet er avgjÞrende: det blokkerer modellens tendens til Ä vÊre en "ja-maskin" (sycophancy). Hvis agenten din skal gi objektive vurderinger (code review, idé-evaluering, arkitekturvalg), trenger du absolutt en lignende klausul.
3.4 Core Workflow â Den viktigste seksjonen
MĂ„l: LĂŠr modellen hvordan den skal jobbe â metodikk, ikke rigide prosedyrer.
Dette er den vanskeligste seksjonen Ä skrive godt, og den som gir stÞrst effekt nÄr du treffer blink.
Kjerneprinsippet: gi prinsipper, ikke prosedyrer.
Fortell LLM-en hvordan god output ser ut og hvorfor det er bra â la den selv finne ut hvordan den kommer dit. UnngĂ„ Ă„ diktere nĂžyaktig antall felt, trinnsekvenser eller formater, med mindre outputen skal konsumeres av maskiner nedstrĂžms.
Claude Codes tilnĂŠrming:
## 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
Legg merke til ordet "recommended" â ikke "du mĂ„ fĂžlge disse nĂžyaktige trinnene". Det ene ordvalget gir modellen rom til Ă„ tilpasse seg.
En god workflow-definisjon:
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 implisitt "hvorfor" â modellen kan forstĂ„ intensjonen og generalisere til nye scenarioer.
Anti-patterns:
- En rigid 20-trinns prosedyre â modellen vil utfĂžre den mekanisk og fryse ved uventet input
- "FĂžrst gjĂžr A, sĂ„ gjĂžr B, sĂ„ gjĂžr C" â det er en prompt chain, ikke et agent-prompt
- Ă overstyre ting LLM-en allerede er god pĂ„ â kaster bort tokens
Jeg lÊrte dette pÄ den harde mÄten med VibeCom. Tidlige versjoner hadde en 10-trinns research-workflow. Modellen utfÞrte pliktoppfyllende alle 10 trinnene selv nÄr trinn 3 allerede hadde besvart brukerens spÞrsmÄl. Da jeg byttet til prinsipper ("gjÞr research til du har tilstrekkelig bevis, deretter syntetiser"), gikk kvaliteten opp og token-kostnadene ned.
Unntaket: NÄr output skal konsumeres av maskiner nedstrÞms (inter-agent kommunikasjon, API-responsformater), bÞr du definere strenge formater. Prinsipper er for adferd; skjemaer er for grensesnitt.
3.5 Retningslinjer for verktĂžybruk â HĂ„ndtere tvetydighet
MÄl: NÄr flere verktÞy kan gjÞre det samme, fortell modellen hvilket den skal foretrekke.
## 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:
- Bruk "instead of" for Ă„ uttrykke prioritet (A i stedet for B)
- Forklar hvorfor den bĂžr foretrekke visse verktĂžy ("gir en bedre brukeropplevelse", "reduserer kontekstbruk")
- Definer strategi for parallellisme (uavhengig â parallell, avhengig â sekvensiell)
- List opp sikkerhetsbegrensninger for verktĂžybruk (validering av filstier, tilgangssjekker)
Det avgjĂžrende forholdet mellom verktĂžy og prompts:
VerktÞydefinisjoner injiseres typisk av systemet, og du kan ikke redigere dem direkte. Claude Codes verktÞydefinisjoner er pÄ ~11 438 tokens. Dette betyr:
- Ikke gjenta informasjon som allerede finnes i verktĂžydefinisjonene
- Bruk system-promptet for strategisk veiledning: nÄr man skal bruke hvert verktÞy, hvorfor man skal foretrekke ett fremfor et annet, prioriteringsrekkefÞlge
- Kvaliteten pĂ„ verktĂžydefinisjonene pĂ„virker agentens effektivitet direkte â hvis du bygger din egen agent, invester tid i Ă„ skrive utmerkede verktĂžybeskrivelser
3.6 Domenekunnskap â Last inn ved behov, ikke pĂ„ forhĂ„nd
MÄl: Tilby spesialisert kunnskap som modellens treningsdata kanskje mangler.
Kjerneprinsippet: progressiv tilgjengeliggjĂžring, ikke kunnskapsdumping.
â Lim inn alle 200 API-endepunkter i system-promptet â token-eksplosjon
â
Gi modellen et verktĂžy for Ă„ slĂ„ opp ting â "Last inn kunnskap nĂ„r du trenger det"
Denne strategien deles av Claude Codes Skills-system og DeepAgents' Progressive Disclosure middleware. Begge laster kunnskap ved behov gjennom verktÞykall i stedet for Ä forhÄndslaste alt.
ImplementeringstilnĂŠrminger:
- Legg inn pekere i system-promptet: "Bruk get_api_docs-verktĂžyet for Ă„ hente dokumentasjon ved behov"
- Bruk CLAUDE.md / AGENTS.md for prosjektkontekst â lastes ved runtime, ikke hardkodet
- Bruk Skills / SKILL.md for oppdagelse av kapabiliteter â modellen ser en meny av tilgjengelige ferdigheter, og henter fulle spesifikasjoner ved behov
3.7 MiljĂžinformasjon â Runtime-kontekst
MÄl: Gi modellen bevissthet om sitt eget kjÞretidsmiljÞ.
<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, aldri hardkod
- Inkluder: arbeidsmappe, plattform, dato, modellnavn, git-status
- Bruk strukturert format (XML-tags eller kodeblokker) for enkel parsing
- Dato er viktig â modellen mĂ„ vite hva "nĂ„" er for Ă„ vurdere hvor fersk informasjonen er
3.8 PĂ„minnelser â Den siste forsterkningen
MÄl: Gjenta de mest kritiske reglene pÄ slutten av promptet.
Claude Code gjentar sin sikkerhetsbegrensning og TodoWrite-krav i bunnen:
IMPORTANT: Assist with defensive security tasks only. [repeated]
IMPORTANT: Always use the TodoWrite tool to plan and track tasks. [repeated]
Retningslinjer:
- Gjenta kun 2-3 av de aller viktigste reglene â ikke dupliser alt
- Utnytt recency bias â modellen husker nylig innhold mye bedre
- Beste kandidater: sikkerhetsbegrensninger, regler som oftest brytes, pÄminnelser om core workflow
4. Token-budsjett og konteksthÄndtering
Referanse for budsjettallokering
| Seksjon | Anbefalte Tokens | Notater |
|---|---|---|
| Identity + Safety | 200-500 | Kortfattet, men ufravikelig |
| Tone & Style | 300-800 | Regler mÄ vÊre spesifikke, men ikke bable |
| Core Workflow | 500-2 000 | Viktigste seksjon, verdt investeringen |
| Tool Usage Policy | 300-1 000 | Avhenger av antall verktĂžy |
| Domain Knowledge | 0-1 000 | Innlasting ved behov foretrekkes |
| Environment Info | 100-300 | Genereres dynamisk |
| Reminders | 100-300 | Gjenta kun det essensielle |
| Din total | 1 500-6 000 | |
| Tool Definitions (system) | 5 000-15 000 | Utenfor din kontroll |
Kurve for kontekstforringelse
Testing i miljĂžet (Reddit u/CodeMonke_) har kartlagt hvordan etterlevelsen faktisk forringes i praksis:
- < 80K tokens: Prompt-etterlevelsen holder seg stabil
- 80K - 120K tokens: Evnen til Ă„ fĂžlge instruksjoner begynner Ă„ forringes
- > 120K tokens: Betydelig forringelse â modellen "glemmer" tidlige instruksjoner
- > 180K tokens: Alvorlig forringelse
Ditt 200K kontekstvindu â 200K med effektiv kontekst. Planlegg deretter.
AvbĂžtende strategier:
- Hold system-promptet ditt slankt (< 6 000 tokens for din del)
- Bruk oppsummering for Ă„ komprimere samtalehistorikken (DeepAgents utlĂžses ved ~80K tegn)
- Plasser kritiske regler i begge ender av promptet (U-formet oppmerksomhet)
- Injiser
<system-reminder>-tags midt i samtalen (mer om dette i seksjon 8)
5. Skriveprinsipper
5.1 Gi prinsipper, ikke prosedyrer
â "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."
Prinsipper generaliserer. Prosedyrer kan bare fÞlges mekanisk. NÄr modellen mÞter en situasjon du ikke forutsÄ, guider prinsipper den til riktig beslutning. Prosedyrer gjÞr ikke det.
Unntak: NÄr output konsumeres av maskiner (inter-agent kommunikasjon, API-formater), definer strenge skjemaer.
5.2 Bruk absolutt sprÄk for harde grenser
| Styrke | SprÄk | Brukes til |
|---|---|---|
| Absolutt forbud | NEVER, MUST NOT | Sikkerhet, irreversible operasjoner |
| Sterkt krav | ALWAYS, MUST | Core workflow-regler |
| Anbefaling | recommended, prefer | Best practices med unntak |
| Forslag | consider, you may | Valgfrie optimaliseringer |
Eksempler fra Claude Code:
NEVER update the git configâ absolutt forbudALWAYS prefer editing an existing fileâ sterkt, men unntak finnesThe following steps are recommendedâ foreslĂ„tt workflow
5.3 Bruk 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>
Ett eksempel lĂŠrer bort mer enn 100 ord med forklaring:
- Modeller lÊrer mÞnstre fra eksempler mer pÄlitelig enn fra abstrakte beskrivelser
- Pakk inn med
<example>-tags for Ä skille dem fra regler - Gi bÄde positive ("gjÞr dette") og negative ("ikke gjÞr dette") eksempler
- Bruk ekte, spesifikke eksempler â ikke "foo/bar"-placeholdere
5.4 Toveis begrensninger
â
"Use dedicated tools: Read for reading files, Edit for editing files."
â
"Do NOT use bash for file operations (cat, head, tail, sed, awk)."
Ă bare si "gjĂžr dette" â modellen vet ikke nĂ„r den IKKE skal gjĂžre det. Ă bare si "ikke gjĂžr dette" â modellen vet ikke hva alternativet er. Toveis â tydelig og utvetydig.
5.5 Forklar hvorfor, ikke bare hva
â "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."
Ă forklare hvorfor lar modellen ta riktige vurderinger i edge-cases. Claude Codes git-sikkerhetsprotokoll er en masterclass â hver regel impliserer sin egen rasjonale.
5.6 Struktur over prosa
- Markdown-overskrifter (
##,###) â modeller gjenkjenner hierarki - Punktlister fremfor avsnitt â hver regel kan testes uavhengig
- XML-tags for spesielt innhold:
<example>,<env>,<system-reminder> - Tabeller for sammenligninger og mapping
- Dump aldri ustrukturert tekst â strukturerte prompts utkonkurrerer konsekvent naturlig sprĂ„k i etterlevelsestester
6. Anti-patterns som kaster bort tokens
Prompt-chains forkledd 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 et agent-prompt â det er et pipeline-script. Modellen vil utfĂžre det mekanisk og miste sin autonome planleggingsevne.
LÞsningen: Fortell modellen hva mÄlet og begrensningene er. La den bestemme trinnene selv.
Smiger-engineering
"You are an EXTREMELY TALENTED and INCREDIBLY EXPERIENCED
senior software engineer with 20 years of experience..."
Kompimenter og superlativer forbedrer ikke output-kvaliteten. Modellen har ikke et ego som trenger Ă„ boostes. Spar de 15 tokensene til en faktisk regel.
Kunnskapsdumping
"Here is the complete API documentation for our 200 endpoints..."
Dette sluker kontekstvinduet ditt og akselererer kontekst-rÄte. Bytt det ut med innlasting ved behov:
"Use the get_api_docs tool to retrieve API documentation when needed."
Gjentakelse av verktĂžybeskrivelser
Hvis verktĂžydefinisjonen allerede sier "Read tool reads a file from the filesystem", ikke si det igjen i system-promptet ditt. Legg kun til strategisk veiledning som verktĂžydefinisjonen ikke dekker â nĂ„r det skal brukes, hvorfor det foretrekkes, prioriteringsrekkefĂžlge.
Manglende feilhÄndtering
Uten eksplisitt veiledning vil modeller prÞve feilede verktÞykall pÄ nytt i en uendelig loop. Inkluder alltid:
"If a tool call is denied, do not re-attempt the exact same call.
Think about why it was denied and adjust your approach."
Ă ignorere forfall i kontekstvinduet
200K kontekstvindu â 200K effektiv kontekst. Reell testing viser at forringelsen starter ved 80K. Du trenger en oppsummeringsstrategi.
7. Injeksjonspunkter og prioritet
Claude Codes tre tilpasningsmetoder
| Metode | Erstatter | Plassering | Best for |
|---|---|---|---|
| Output Styles | "Tone and style" + "Doing tasks"-seksjoner | Rett fĂžr verktĂžydefinisjoner | Endre interaksjonsstil |
| --append-system-prompt | Ingenting (additivt) | Etter output style, fĂžr verktĂžydefinisjoner | Legge til spesifikk adferd |
| --system-prompt | Hele system-promptet | Beholder verktÞy + én identitetslinje | Full tilpasning (atomknappen) |
Hvis du bruker flere: Output Style â Append Prompt â Tool Definitions
Instruksjonshierarki
Claude er spesifikt trent med et instruksjonshierarki:
1. User's explicit instructions (CLAUDE.md, direct requests) â HĂžyeste prioritet
2. Custom system prompt additions â HĂžy
3. Default system prompt â Medium
4. Tool definitions â ReferansenivĂ„
Dette betyr:
- CLAUDE.md-regler overstyrer standard system-prompt-adferd
- Brukerens direkte forespĂžrsler overstyrer alt
- Ditt tilpassede prompt overstyrer standardpromptet
Dynamiske injeksjonsmekanismer
<system-reminder>â injiser i hvilken som helst melding midt i samtalen for Ă„ minne modellen pĂ„ kritiske regler- CLAUDE.md / AGENTS.md â lastes ved runtime fra filer, legges til system-promptet
- Skills / SKILL.md â lastes ved behov via verktĂžykall, null fotavtrykk i system-promptet
8. Injeksjon midt i samtalen â Det hemmelige vĂ„penet
System-promptet dukker bare opp én gang, helt i starten av meldings-arrayet. Men LLM-er aksepterer hele meldings-arrayet (vekslende bruker / assistent / verktÞy-meldinger) som input, og du kan injisere prompts i brukermeldinger og verktÞyresultater ogsÄ. Claude Code bruker denne teknikken tungt i produksjon.
Hvorfor det er nĂždvendig
Kampen mot kontekst-rÄte. Etter hvert som samtaler blir lengre, forringes modellens etterlevelse av system-promptets instruksjoner (merkbart ved 80K+ tokens). à injisere pÄminnelser midt i samtalen = oppfriskning av reglene via recency bias.
Den mentale modellen:
- System-prompt = grunnloven (etablert én gang, langsiktig autoritet)
- PÄminnelser i brukermeldinger = memoer (sendes periodisk, opprettholder hÄndhevelse)
Tre injeksjonspunkter i meldings-arrayet
Messages Array:
âââââââââââââââââââââââââââââââââââââââ
â System Prompt â â Dukker opp Ă©n gang, primacy-effekt
â (identity, safety, workflow...) â
âââââââââââââââââââââââââââââââââââââââ€
â User Message 1 â
â Assistant Message 1 â
â User Message 2 + <system-reminder> â â Injeksjon midt i samtalen
â Assistant Message 2 â
â Tool Result + <system-reminder> â â Kan injiseres i verktĂžyresultater ogsĂ„
â ... â
â User Message N + <system-reminder> â â Siste melding, sterkest recency
âââââââââââââââââââââââââââââââââââââââ
| Lokasjon | Fordel | Ulempe |
|---|---|---|
| System prompt | Primacy-effekt, leses fÞrst | Dukker opp én gang, "glemmes" i lange samtaler |
| User message injection | Recency bias, periodisk refresh | Hver injeksjon koster tokens |
| Tool result injection | Mest naturlige injeksjonspunkt | Fungerer bare nÄr verktÞy kalles |
Hvordan Claude Code faktisk bruker det
Forutsetning â deklarer taggene i system-promptet:
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 trinnet er kritisk: det forteller modellen at disse taggene er system-injisert, ikke noe brukeren sier.
Bruk 1: AdferdspÄminnelser (periodisk oppfriskning av 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 bruker dette for Ă„ minne modellen pĂ„ Ă„ planlegge med TodoWrite â fordi modeller har en tendens til Ă„ "glemme" planlegging og bare begynne Ă„ kode.
Bruk 2: Bytte av modus (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 implementert i system-promptet. Det er en tag som injiseres i neste brukermelding. Dette lar deg bytte modus dynamisk uten Ă„ modifisere system-promptet. Genialt.
Bruk 3: Varsler om filendringer
<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 prosess (linter, formatter, manuell redigering) modifiserer en fil, varsler systemet modellen via en pĂ„minnelse â noe som forhindrer beslutninger basert pĂ„ utdatert filinnhold.
Bruk 4: Dynamisk kontekst (datoer, prosjektregler)
<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, prosjektregler) injiseres via brukermeldinger, ikke hardkodet i system-promptet.
Retningslinjer for Ä skrive pÄminnelser
- Pakk inn i XML-tags (
<system-reminder>) â modellen kan skille systeminjeksjon fra brukerens tale - ForhĂ„ndsdeklarer tags i system-promptet â ellers kan modellen prĂžve Ă„ svare pĂ„ pĂ„minnelsen
- Ikke injiser i hver melding â hver injeksjon koster tokens, injiser kun nĂ„r det trengs
- Hold det kort â en pĂ„minnelse er ikke et system-prompt nummer to, bare 1-2 kritiske regler
- Ikke motsi system-promptet â pĂ„minnelser supplerer og forsterker, de overstyrer ikke
- Bruk for dynamisk veksling â plan mode, readonly mode, feature flags
NÄr du skal bruke System Prompt vs. User Message Reminder
| Scenario | System Prompt | User Message Reminder |
|---|---|---|
| Rolledefinisjon | â | â |
| Sikkerhetsbegrensninger | â FĂžrste deklarasjon | â Periodisk gjentakelse |
| Workflow-metodikk | â | â |
| Modusbytte (plan mode) | â | â |
| Varsler om filendringer | â | â |
| Dato / miljĂžinfo | â Startverdi | â Oppdatert verdi |
| Adferdskorrigering | â | â |
| PĂ„minnelser om verktĂžybruk | â Regeldefinisjon | â Nudge for utfĂžrelse |
9. Prompt Cache â Spar 90 % pĂ„ gjentakende tokens
Anthropics prompt caching lar deg cache det statiske prefikset i meldings-arrayet ditt. NĂ„r pĂ„fĂžlgende forespĂžrsler deler samme prefiks, treffer de cachen â noe som sparer penger og reduserer latency.
For agenter betyr dette enormt mye: du sender system-promptet + verktÞydefinisjonene pÄ nytt ved hvert eneste LLM-kall i lÞpet av en samtale.
NĂžkkeltall
| Metrikk | Verdi |
|---|---|
| Pris for cache-treff | 10 % av normal pris (90 % besparelse) |
| Pris for cache-skriving | 125 % av normal pris (25 % premium pÄ fÞrste skriving) |
| Cache TTL | 5 minutter (utlĂžper hvis ingen forespĂžrsler) |
| Minimum cachebar lengde | 1 024 tokens (Claude 3.5+) |
| Cache-granularitet | Prefiks-matching â fra starten til et markert bruddpunkt |
| Maks antall bruddpunkter | 4 |
Hvordan dette endrer prompt-design
Kjerneprinsipp: statisk innhold fĂžrst, dynamisk innhold sist.
â
Cache-vennlig layout:
System prompt (statisk) â Cache breakpoint 1
Tool definitions (statisk) â Cache breakpoint 2
CLAUDE.md / prosjektregler â Cache breakpoint 3 (endres av og til)
Conversation history â Breakpoint 4 for rullerende vindu
â Cache-Ăždeleggende layout:
System prompt
DYNAMISK TIDSSTEMPEL â Endres hver forespĂžrsel, alt etter = cache miss
Tool definitions
Conversation history
Fellen ingen advarer deg mot: Hvis du legger inn et dynamisk tidsstempel midt i system-promptet ditt, blir alt som kommer etter det en cache-miss. Hver. Eneste. ForespÞrsel. Ett tidsstempel pÄ feil sted, og du betaler full pris for tusenvis av tokens.
API-bruk
const response = await anthropic.messages.create({
model: "claude-sonnet-4-6",
system: [
{
type: "text",
text: "You are a startup advisor...",
cache_control: { type: "ephemeral" } // â markerer et cache-bruddpunkt
}
],
messages: [...]
});
Strategi med flere bruddpunkter
Breakpoint 1: System prompt â Endres nesten aldri
Breakpoint 2: Tool definitions â Endres nesten aldri
Breakpoint 3: Prosjektregler / CLAUDE.md â Endres av og til
Breakpoint 4: FĂžrste N historikk-meldinger â Rullerende vindu-cache
Selv nÄr samtalehistorikken endres, treffer de fÞrste 3 bruddpunktene fortsatt. En samtale pÄ 10 turer sparer omtrent 40-60 % pÄ input token-kostnader.
Designanbefalinger
- Ingen hĂžyfrekvente dynamiske verdier i system-promptet â dato er greit (endres daglig), presise tidsstempler er ikke det
- Legg dynamisk kontekst (git-status, etc.) i brukermeldings-injeksjoner â ikke i system-promptet, ellers Ăždelegger du cachen
- Hold verktĂžydefinisjoner stabile â ikke legg til/fjern verktĂžy dynamisk ved runtime
- Bruk rullerende vindu for samtalehistorikk â cache de fĂžrste N meldingene, bare den nyeste meldingen er en cache-miss
10. Sjekklisten
Etter at du har skrevet system-promptet ditt, gÄ gjennom det med denne sjekklisten:
Struktur
- Er identitet helt pÄ toppen?
- Er sikkerhetsbegrensninger markert med IMPORTANT og gjentatt til slutt?
- Er det tydelig seksjonsinndeling med overskrifter?
- Er eksempler pakket inn i
<example>-tags?
Token-budsjett
- Er din del < 6 000 tokens?
- UnngÄr du Ä gjenta informasjon som allerede er i verktÞydefinisjonene?
- Lastes domenekunnskap inn ved behov, ikke pÄ forhÄnd?
- Er det fritt for ordrik "lore" eller bakhistorie for karakteren?
Regelkvalitet
- Kan hver regel testes som sann/usann?
- Bruker harde grenser absolutt sprÄk (NEVER/MUST)?
- Bruker myke forslag anbefalingssprÄk (recommended/prefer)?
- Forklarer kritiske regler hvorfor, ikke bare hva?
- Er det toveis begrensninger (gjĂžr dette + ikke gjĂžr det)?
Agent-adferd
- Er det gitt prinsipper, ikke rigide trinn-for-trinn prosedyrer?
- Er scenarioet "verktÞykall avvist" hÄndtert?
- Er strategien for "hindring mÞtt" hÄndtert (ikke prÞv pÄ nytt med rÄ makt)?
- Er det en strategi for konteksthÄndtering pÄ plass (terskel for oppsummering)?
Hva du IKKE skal gjĂžre
- Ingen smiger eller superlative adjektiver?
- Ingen overflĂždige "du er en hjelpsom AI"-deklarasjoner?
- Er det ikke skrevet som en prompt chain?
- Ingen over-engineering (funksjoner ingen ba om)?
Hvis jeg skulle startet i dag
Her er nĂžyaktig hva jeg ville gjort:
-
Start med identitet + sikkerhet i de fĂžrste 3 linjene. To setninger for hvem agenten er. Harde grenser med NEVER/MUST. Gjenta sikkerhetsreglene til slutt.
-
Skriv din core workflow som prinsipper, ikke trinn. Maks 4-5 kulepunkter. Bruk "recommended" og "prefer" for myke regler, "NEVER" og "MUST" for harde.
-
Budsjetter 1 500-6 000 tokens for din del. VerktĂžydefinisjoner vil legge til 5 000-15 000 mer. Hvis du er over 6K, dumper du sannsynligvis kunnskap som burde vĂŠrt lastet inn ved behov.
-
Strukturer alt. Markdown-overskrifter, punktlister, XML-tags for eksempler. Et strukturert prompt utkonkurrerer prosa i naturlig sprÄk hver eneste gang.
-
Bygg inn pÄminnelser midt i samtalen fra dag én. Deklarer
<system-reminder>i system-promptet ditt. Injiser pÄminnelser for kritiske regler, modusbytter og kontekstoppdateringer. -
Design for cache. Statisk innhold fĂžrst, dynamisk innhold sist. Legg aldri verdier som endrer seg i selve system-promptet.
Ironien i alt dette arbeidet? De beste system-promptene er korte. Claude Codes tilpassede instruksjoner (ekskludert verktĂžydefinisjoner) er overraskende konsise. Hver eneste linje fortjener plassen sin.
Jeg pleide Ă„ tro at prompt engineering handlet om Ă„ finne smarte triks. NĂ„ tror jeg det handler om disiplin â Ă„ si mindre, si det presist, og stole pĂ„ at modellen finner ut av resten. Modellen er smartere enn promptet ditt. Design miljĂžet, ikke adferden.
Referanser
| Kilde | NĂžkkelinnsikt |
|---|---|
| Claude Code v2.0.14 System Prompt | Full referanse for struktur pÄ produksjons-agent-prompt |
| Reddit: Understanding Claude Code's 3 System Prompt Methods | Dypdykk i Output Styles / --append / --system-prompt, reelle data pÄ kontekst-rÄte |
| shareAI-lab/learn-claude-code | "Modellen er agenten"-filosofien, harness-engineering metodikk |
| Anthropic Prompt Engineering Docs | Offisielle best practices for prompting |
| DeepAgents Framework | Oppsummerings-middleware, progressiv tilgjengeliggjĂžring av skills |
Excerpt: Det meste av det folk tror er viktig med system-prompts, betyr ingenting. Og de tingene som faktisk betyr noe, er det nesten ingen som snakker om. Etter Ă„ ha reverskonstruert Claude Code og bygget VibeCom, er dette den komplette dreieboken for hvordan du faktisk designer AI-agenter. Hent deg en kaffe.
Del dette

Skrevet av Feng Liu
shenjian8628@gmail.com