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.

Feng Liu
Feng Liu
20. mars 2026·25 min lesing
Den komplette guiden til Ă„ skrive systemprompter for agenter — LĂŠrdommer fra reverse-engineering av Claude Code

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:

  1. Legg inn pekere i system-promptet: "Bruk get_api_docs-verktĂžyet for Ă„ hente dokumentasjon ved behov"
  2. Bruk CLAUDE.md / AGENTS.md for prosjektkontekst — lastes ved runtime, ikke hardkodet
  3. 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

SeksjonAnbefalte TokensNotater
Identity + Safety200-500Kortfattet, men ufravikelig
Tone & Style300-800Regler mÄ vÊre spesifikke, men ikke bable
Core Workflow500-2 000Viktigste seksjon, verdt investeringen
Tool Usage Policy300-1 000Avhenger av antall verktĂžy
Domain Knowledge0-1 000Innlasting ved behov foretrekkes
Environment Info100-300Genereres dynamisk
Reminders100-300Gjenta kun det essensielle
Din total1 500-6 000
Tool Definitions (system)5 000-15 000Utenfor 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

StyrkeSprÄkBrukes til
Absolutt forbudNEVER, MUST NOTSikkerhet, irreversible operasjoner
Sterkt kravALWAYS, MUSTCore workflow-regler
Anbefalingrecommended, preferBest practices med unntak
Forslagconsider, you mayValgfrie optimaliseringer

Eksempler fra Claude Code:

  • NEVER update the git config — absolutt forbud
  • ALWAYS prefer editing an existing file — sterkt, men unntak finnes
  • The 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

MetodeErstatterPlasseringBest for
Output Styles"Tone and style" + "Doing tasks"-seksjonerRett fĂžr verktĂžydefinisjonerEndre interaksjonsstil
--append-system-promptIngenting (additivt)Etter output style, fĂžr verktĂžydefinisjonerLegge til spesifikk adferd
--system-promptHele system-promptetBeholder verktÞy + én identitetslinjeFull 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
└─────────────────────────────────────┘
LokasjonFordelUlempe
System promptPrimacy-effekt, leses fÞrstDukker opp én gang, "glemmes" i lange samtaler
User message injectionRecency bias, periodisk refreshHver injeksjon koster tokens
Tool result injectionMest naturlige injeksjonspunktFungerer 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

ScenarioSystem PromptUser 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

MetrikkVerdi
Pris for cache-treff10 % av normal pris (90 % besparelse)
Pris for cache-skriving125 % av normal pris (25 % premium pÄ fÞrste skriving)
Cache TTL5 minutter (utlĂžper hvis ingen forespĂžrsler)
Minimum cachebar lengde1 024 tokens (Claude 3.5+)
Cache-granularitetPrefiks-matching — fra starten til et markert bruddpunkt
Maks antall bruddpunkter4

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:

  1. 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.

  2. Skriv din core workflow som prinsipper, ikke trinn. Maks 4-5 kulepunkter. Bruk "recommended" og "prefer" for myke regler, "NEVER" og "MUST" for harde.

  3. 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.

  4. Strukturer alt. Markdown-overskrifter, punktlister, XML-tags for eksempler. Et strukturert prompt utkonkurrerer prosa i naturlig sprÄk hver eneste gang.

  5. 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.

  6. 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

KildeNĂžkkelinnsikt
Claude Code v2.0.14 System PromptFull referanse for struktur pÄ produksjons-agent-prompt
Reddit: Understanding Claude Code's 3 System Prompt MethodsDypdykk 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 DocsOffisielle best practices for prompting
DeepAgents FrameworkOppsummerings-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.

ai agent system promptsprompt engineering guideclaude code system promptbuilding ai agentsllm prompt optimization

Del dette

Feng Liu

Skrevet av Feng Liu

shenjian8628@gmail.com

Den komplette guiden til Ă„ skrive systemprompter for agenter — LĂŠrdommer fra reverse-engineering av Claude Code | Feng Liu