Den kompletta guiden till att skriva systemprompter för agenter â LĂ€rdomar frĂ„n reverse engineering av Claude Code
Jag dekompilerade Claude Codes systemprompt, studerade DeepAgents kÀllkod och byggde min egen AI-agent frÄn grunden. De flesta prompt-guider Àr bara fluff.

Det pÄgÄr en massillusion inom AI just nu.
Varje tutorial sĂ€ger Ă„t dig att skriva system-prompts som om du kastade en trollformel â hitta bara rĂ€tt ramsa sĂ„ kommer modellen att lyda. "Du Ă€r en EXTREMT BEGĂ VAD senior utvecklare med 20 Ă„rs erfarenhet..." LĂ„ter det bekant?
Jag har tillbringat de senaste mÄnaderna med att bygga VibeCom, en AI-rÄdgivare för startups som kör djup marknadsresearch och genererar VC-klassad analys. LÀngs vÀgen har jag reverse-engineerat Claude Codes system-prompt, plöjt igenom DeepAgents middleware-kÀllkod och brÀnt fler API-krediter Àn jag vill erkÀnna. Den största lÀxan? Det mesta folk tror spelar roll nÀr det gÀller system-prompts gör faktiskt inte det. Och de saker som faktiskt spelar roll Àr det nÀstan ingen som pratar om.
Det hĂ€r inlĂ€gget Ă€r den kompletta spelboken â inte en 5-minuters översikt, utan allt jag önskar att nĂ„gon hade berĂ€ttat för mig innan jag började. HĂ€mta en kaffe.
1. Designfilosofi: Lita pÄ modellen
"En agent Ă€r en modell. Inte ett ramverk. Inte en prompt-kedja." â shareAI-lab/learn-claude-code
Den hĂ€r insikten förĂ€ndrade allt för mig. LLM:en vet redan hur man resonerar, planerar och exekverar. Din system-prompt lĂ€r den inte att tĂ€nka â den sĂ€tter upp miljön som den ska arbeta i.
TÀnk pÄ det som att anstÀlla en senior utvecklare. Du ger dem inte en checklista pÄ 20 steg för varje uppgift. Du sÀger: det hÀr Àr vilka vi Àr, hÀr Àr grÀnserna, sÄ hÀr ser ett bra resultat ut. Sedan kliver du ur vÀgen.
Din system-prompt har exakt fyra jobb:
- BerĂ€tta vem den Ă€r â roll och identitet
- BerĂ€tta var vĂ€ggarna finns â sĂ€kerhetsbegrĂ€nsningar
- BerĂ€tta hur bra ser ut â kvalitetsstandarder
- Ge den verktyg â kapabiliteter och kunskap
Det Àr allt. Allt annat Àr brus.
"Harness"-tÀnket
Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions
Din system-prompt Ă€r instruktionsboken för denna "harness" (sele/arbetsmiljö). Du designar inte en stel pipeline â du designar en miljö dĂ€r modellen kan göra sitt bĂ€sta arbete autonomt.
Skriv inte din system-prompt som ett flödesschema. Modellen kommer sjÀlv att bestÀmma exekveringsordningen.
2. Prompt-struktur och sektionsordning
Den rekommenderade strukturen (Reverse-engineerad frÄn Claude Code v2.0.14)
âââââââââââââââââââââââââââââââââââââââââââââââ
â 1. Identity â â LĂ€s först, förankrar beteende
â 2. Security & Safety â â VIKTIGA markörer, okrĂ€nkbara
â 3. Tone & Style â â Kontrollerar utdataformat
â 4. Core Workflow â â Hur arbetet ska utföras
â 5. Tool Usage Policy â â Prioriteringar för verktygsval
â 6. Domain Knowledge â â Vid behov, laddas inte i förvĂ€g
â 7. Environment Info â â Runtime-kontext, injiceras dynamiskt
â 8. Reminders â â Upprepa kritiska regler
âââââââââââââââââââââââââââââââââââââââââââââââ€
â [Tool Definitions â system-injected] â â Ej redigerbara, oftast vĂ€ldigt lĂ„nga
âââââââââââââââââââââââââââââââââââââââââââââââ€
â [User Message] â
âââââââââââââââââââââââââââââââââââââââââââââââ
Varför den hÀr ordningen spelar roll
LLM:er har en U-formad uppmĂ€rksamhetskurva â de lĂ€gger mest mĂ€rke till början och slutet av din prompt, och tappar fokus i mitten. Detta Ă€r "Lost in the Middle"-effekten, och den Ă€r vĂ€ldokumenterad.
- Identitet + SÀkerhet i toppen: Modellen etablerar roll och grÀnser först (primacy-effekten)
- KĂ€rnflöde (Core Workflow) i övre mitten: Din viktigaste sektion â hur agenten utför sitt arbete
- Verktygsdefinitioner injiceras av systemet efter din prompt: Claude Codes verktygsdefinitioner slukar ~11 438 tokens. Detta innebĂ€r att ditt anpassade innehĂ„ll faktiskt hamnar nĂ€rmare början Ă€n du kanske tror â vilket hjĂ€lper följsamheten
- PÄminnelser i botten: Utnyttja "recency bias" (nÀrhetseffekten) för att förstÀrka kritiska regler
3. Att skriva varje sektion
3.1 Identitet â Vem Ă€r den hĂ€r agenten?
MÄl: Förankra modellens roll pÄ 1-3 meningar.
You are Claude Code, Anthropic's official CLI for Claude.
You are an interactive agent that helps users with software engineering tasks.
Riktlinjer:
- HĂ„ll det kortfattat â max 1-3 meningar
- Namnge rollen explicit (hjÀlper modellen att skilja pÄ kontexter)
- Ange huvudansvaret ("hjÀlper till med X"), inte ett vagt "du Àr en hjÀlpsam assistent"
- NÀmn SDK/plattform om tillÀmpligt ("byggd pÄ Anthropics Claude Agent SDK")
Anti-mönster:
- "Du Ă€r en hjĂ€lpsam, ofarlig och Ă€rlig AI-assistent" â för generiskt, ingen förankring i rollen
- Ett helt stycke med bakgrundshistoria och "lore" â slösar tokens, modellen behöver ingen karaktĂ€rsutveckling
3.2 SĂ€kerhet & Skydd â De hĂ„rda grĂ€nserna
MÄl: SÀtt okrÀnkbara beteendegrÀnser.
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.
Riktlinjer:
- AnvÀnd prefixet
IMPORTANT:â Claudes trĂ€ning för instruktionshierarki ger detta extra vikt - AnvĂ€nd absolut sprĂ„k:
NEVER,MUST NOT,Refuse to - Ange bÄde vad som Àr tillÄtet OCH vad som Àr förbjudet (dubbelriktade grÀnser Àr tydligare)
- Placera allra högst upp, begrav det inte i mitten
- Upprepa kritiska sĂ€kerhetsregler pĂ„ slutet â Claude Code gör exakt detta
Varför upprepa? Primacy-effekten (början) + Recency-effekten (slutet) = dubbel förstĂ€rkning. Claude Codes sĂ€kerhetsdeklaration dyker upp bĂ„de i början och i slutet av prompten. Inte för att utvecklarna var glömska â utan för att de förstĂ„r den U-formade uppmĂ€rksamhetskurvan.
3.3 Ton & Stil â Att kontrollera output
MÄl: Kontrollera utdataformat och röst.
## 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.
Riktlinjer:
- Lista specifika beteenden, inte ett vagt "var professionell"
- Varje regel bör vara testbar som sant/falskt ("kort och koncis" vs. "försök att vara kortfattad")
- Inkludera krav pÄ utdataformat (markdown? JSON? ren text?)
- Inkludera vad den INTE ska göra â mĂ„nga stilproblem handlar om att förbjuda beteenden
Claude Codes guldklimp â Professionell 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.
Det hÀr stycket Àr avgörande: det blockerar modellens tendens att vara instÀllsam (sycophancy). Om din agent behöver ge objektiva bedömningar (code review, idéutvÀrdering, arkitekturbeslut) behöver du absolut en liknande klausul.
3.4 KĂ€rnflöde (Core Workflow) â Den viktigaste sektionen
MĂ„l: LĂ€r modellen hur den ska arbeta â metodik, inte stela procedurer.
Det hÀr Àr den svÄraste sektionen att skriva bra, och den som ger mest effekt nÀr du fÄr till den.
KĂ€rnprincipen: ge principer, inte procedurer.
BerĂ€tta för LLM:en hur bra utdata ser ut och varför det Ă€r bra â lĂ„t den sjĂ€lv rĂ€kna ut hur den ska ta sig dit. Undvik att föreskriva exakta fĂ€ltantal, stegsekvenser eller format, sĂ„vida inte utdatan ska konsumeras av maskiner lĂ€ngre ner i kedjan.
Claude Codes tillvÀgagÄngssÀtt:
## 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Ă€gg mĂ€rke till ordet "recommended" (rekommenderas) â inte "du mĂ„ste följa dessa exakta steg". Det enda ordvalet ger modellen utrymme att anpassa sig.
En bra definition av arbetsflödet:
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.)
Varje regel har ett implicit "varför" â modellen kan förstĂ„ avsikten och generalisera till nya scenarier.
Anti-mönster:
- En stel procedur pĂ„ 20 steg â modellen kommer att exekvera mekaniskt och frysa vid ovĂ€ntad input
- "Gör först A, gör sedan B, gör sedan C" â det Ă€r en prompt-kedja, inte en agent-prompt
- Att överstyra saker som LLM:en redan Ă€r bra pĂ„ â slösar tokens
Jag lÀrde mig detta den hÄrda vÀgen med VibeCom. Tidiga versioner hade ett research-flöde pÄ 10 steg. Modellen utförde plikttroget alla 10 steg Àven nÀr steg 3 redan hade besvarat anvÀndarens frÄga. NÀr jag bytte till principer ("researcha tills du har tillrÀckligt med bevis, syntetisera sedan") gick kvaliteten upp och token-kostnaderna ner.
Undantaget: NÀr utdatan konsumeras av maskiner lÀngre ner i kedjan (kommunikation mellan agenter, API-svarsformat) bör du definiera strikta format. Principer Àr för beteende; scheman Àr för grÀnssnitt.
3.5 Policy för verktygsanvĂ€ndning â Att lösa tvetydigheter
MÄl: NÀr flera verktyg kan göra samma sak, berÀtta för modellen vilket den ska föredra.
## 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.
Riktlinjer:
- AnvÀnd "istÀllet för" (instead of) för att uttrycka prioritet (A istÀllet för B)
- Förklara varför den ska föredra vissa verktyg ("ger en bÀttre anvÀndarupplevelse", "minskar kontextanvÀndningen")
- Definiera strategi för parallellism (oberoende â parallellt, beroende â sekventiellt)
- Lista sÀkerhetsbegrÀnsningar för verktygsanvÀndning (sökvÀgsvalidering, behörighetskontroller)
Den avgörande relationen mellan verktyg och prompts:
Verktygsdefinitioner injiceras vanligtvis av systemet och du kan inte redigera dem direkt. Claude Codes verktygsdefinitioner Àr pÄ ~11 438 tokens. Detta innebÀr:
- Upprepa inte information som redan finns i verktygsdefinitionerna
- AnvÀnd system-prompten för strategisk vÀgledning: nÀr varje verktyg ska anvÀndas, varför man ska föredra ett framför ett annat, prioriteringsordning
- Kvaliteten pĂ„ verktygsdefinitionen pĂ„verkar direkt agentens effektivitet â om du bygger din egen agent, investera tid i att skriva utmĂ€rkta verktygsbeskrivningar
3.6 DomĂ€nkunskap â Ladda vid behov, inte i förvĂ€g
MÄl: TillhandahÄll specialiserad kunskap som modellens trÀningsdata kanske saknar.
KÀrnprincipen: progressivt avslöjande (progressive disclosure), inte kunskapsdumpar.
â 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"
Denna strategi delas av Claude Codes Skills-system och DeepAgents Progressive Disclosure-middleware. BÄda laddar kunskap vid behov genom verktygsanrop snarare Àn att ladda allt i förvÀg.
Implementeringsmetoder:
- LÀgg in pekare i system-prompten: "AnvÀnd verktyget get_api_docs för att hÀmta dokumentation vid behov"
- AnvĂ€nd CLAUDE.md / AGENTS.md för projektkontext â laddas vid runtime, hĂ„rdkodas inte
- AnvĂ€nd Skills / SKILL.md för upptĂ€ckt av kapabiliteter â modellen ser en meny av tillgĂ€ngliga fĂ€rdigheter och hĂ€mtar fullstĂ€ndiga specifikationer vid behov
3.7 Miljöinformation â Runtime-kontext
MÄl: Ge modellen medvetenhet om sin exekveringsmiljö.
<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.
Riktlinjer:
- Generera dynamiskt, hÄrdkoda aldrig
- Inkludera: arbetskatalog, plattform, datum, modellnamn, git-status
- AnvÀnd strukturerat format (XML-taggar eller kodblock) för enkel parsning
- Datum spelar roll â modellen behöver veta nĂ€r "nu" Ă€r för att bedöma hur fĂ€rsk informationen Ă€r
3.8 PĂ„minnelser â Den sista förstĂ€rkningen
MÄl: Upprepa de mest kritiska reglerna i slutet av prompten.
Claude Code upprepar sin sÀkerhetsbegrÀnsning och TodoWrite-krav i botten:
IMPORTANT: Assist with defensive security tasks only. [repeated]
IMPORTANT: Always use the TodoWrite tool to plan and track tasks. [repeated]
Riktlinjer:
- Upprepa bara 2-3 av de allra viktigaste reglerna â duplicera inte allt
- Utnyttja recency bias â modellen minns nyligen lĂ€st innehĂ„ll starkare
- BÀsta kandidaterna: sÀkerhetsgrÀnser, regler som oftast bryts, pÄminnelser om kÀrnflödet
4. Token-budget och kontexthantering
Referens för budgetallokering
| Sektion | Rekommenderade tokens | Anteckningar |
|---|---|---|
| Identitet + SÀkerhet | 200-500 | Kortfattat men okrÀnkbart |
| Ton & Stil | 300-800 | Regler mÄste vara specifika, men svamla inte |
| KÀrnflöde | 500-2 000 | Viktigaste sektionen, vÀrd investeringen |
| Policy för verktyg | 300-1 000 | Beror pÄ antalet verktyg |
| DomÀnkunskap | 0-1 000 | Laddning vid behov föredras |
| Miljöinformation | 100-300 | Genereras dynamiskt |
| PÄminnelser | 100-300 | Upprepa bara det allra viktigaste |
| Din total | 1 500-6 000 | |
| Verktygsdefinitioner (system) | 5 000-15 000 | Utom din kontroll |
Kontextens nedbrytningskurva
Community-tester (Reddit u/CodeMonke_) har kartlagt hur följsamheten faktiskt bryts ner i praktiken:
- < 80K tokens: Prompt-följsamheten förblir stabil
- 80K - 120K tokens: FörmÄgan att följa instruktioner börjar försÀmras
- > 120K tokens: Betydande försĂ€mring â modellen "glömmer" tidiga instruktioner
- > 180K tokens: Allvarlig försÀmring
Ditt kontextfönster pĂ„ 200K â 200K av effektiv kontext. Planera dĂ€refter.
Strategier för att mildra detta:
- HÄll din system-prompt slimmad (< 6 000 tokens för din del)
- AnvÀnd summering för att komprimera konversationshistoriken (DeepAgents triggar vid ~80K tecken)
- Placera kritiska regler i bÄda Àndarna av prompten (U-formad uppmÀrksamhet)
- Injicera
<system-reminder>-taggar mitt i konversationen (mer om detta i sektion 8)
5. Skrivprinciper
5.1 Ge principer, inte 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."
Principer gÄr att generalisera. Procedurer kan bara följas mekaniskt. NÀr modellen stöter pÄ en situation du inte förutsett, vÀgleder principer till rÀtt beslut. Det gör inte procedurer.
Undantag: NĂ€r utdata konsumeras av maskiner (kommunikation mellan agenter, API-format), definiera strikta scheman.
5.2 AnvÀnd absolut sprÄk för hÄrda grÀnser
| Styrka | SprÄk | AnvÀnds för |
|---|---|---|
| Absolut förbud | NEVER, MUST NOT | SÀkerhet, oÄterkalleliga operationer |
| Starkt krav | ALWAYS, MUST | Regler för kÀrnflödet |
| Rekommendation | recommended, prefer | Best practices med undantag |
| Förslag | consider, you may | Valfria optimeringar |
Claude Code-exempel:
NEVER update the git configâ absolut förbudALWAYS prefer editing an existing fileâ starkt, men undantag finnsThe following steps are recommendedâ föreslaget arbetsflöde
5.3 AnvÀnd exempel istÀllet för förklaringar
## 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 exempel lÀr ut mer Àn 100 ord av förklaringar:
- Modeller lÀr sig mönster frÄn exempel mer tillförlitligt Àn frÄn abstrakta beskrivningar
- SlÄ in i
<example>-taggar för att separera frÄn regler - Ge bÄde positiva ("gör sÄ hÀr") och negativa ("gör inte sÄ hÀr") exempel
- AnvĂ€nd riktiga, specifika exempel â inte "foo/bar"-platshĂ„llare
5.4 Dubbelriktade grÀnser
â
"Use dedicated tools: Read for reading files, Edit for editing files."
â
"Do NOT use bash for file operations (cat, head, tail, sed, awk)."
Att bara sĂ€ga "gör detta" â modellen vet inte nĂ€r den INTE ska göra det. Att bara sĂ€ga "gör inte detta" â modellen kĂ€nner inte till alternativet. Dubbelriktat â tydligt och otvetydigt.
5.5 Förklara varför, inte bara vad
â "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."
Att förklara varför lĂ„ter modellen göra korrekta bedömningar i edge cases. Claude Codes git-sĂ€kerhetsprotokoll Ă€r en masterclass â varje regel antyder sin egen logik.
5.6 Struktur framför prosa
- Markdown-rubriker (
##,###) â modeller kĂ€nner igen hierarki - Punktlistor framför textstycken â varje regel kan testas oberoende
- XML-taggar för speciellt innehÄll:
<example>,<env>,<system-reminder> - Tabeller för jÀmförelser och mappningar
- Dumpa aldrig ostrukturerad text â strukturerade prompts övertrĂ€ffar konsekvent naturlig prosa i tester av följsamhet
6. Anti-mönster som slösar dina tokens
Prompt-kedjor förklÀdda till 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."
Det hĂ€r Ă€r ingen agent-prompt â det Ă€r ett pipeline-script. Modellen kommer att exekvera mekaniskt och förlora sin autonoma planeringsförmĂ„ga.
Lösningen: BerÀtta för modellen vad mÄlet och begrÀnsningarna Àr. LÄt den sjÀlv bestÀmma stegen.
Smicker-engineering (Flattery Engineering)
"You are an EXTREMELY TALENTED and INCREDIBLY EXPERIENCED
senior software engineer with 20 years of experience..."
Komplimanger och superlativ förbÀttrar inte utdatakvaliteten. Modellen har inget ego som behöver boostas. Spara de 15 tokens till en faktisk regel.
Kunskapsdumpar
"Here is the complete API documentation for our 200 endpoints..."
Detta slukar ditt kontextfönster och pÄskyndar kontextröta (context rot). ErsÀtt med laddning vid behov:
"Use the get_api_docs tool to retrieve API documentation when needed."
Att upprepa verktygsbeskrivningar
Om verktygsdefinitionen redan sĂ€ger "Read-verktyget lĂ€ser en fil frĂ„n filsystemet", sĂ€g det inte igen i din system-prompt. LĂ€gg bara till strategisk vĂ€gledning som verktygsdefinitionen inte tĂ€cker â nĂ€r det ska anvĂ€ndas, varför man ska föredra det, prioriteringsordning.
Saknad felhantering
Utan explicit vÀgledning kommer modeller att försöka göra om misslyckade verktygsanrop i en oÀndlig loop. Inkludera 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."
Att ignorera kontextfönstrets förfall
200K kontextfönster â 200K effektiv kontext. Tester i verkligheten visar att försĂ€mringen börjar vid 80K. Du behöver en strategi för summering.
7. Injiceringspunkter och prioritet
Claude Codes tre anpassningsmetoder
| Metod | ErsÀtter | Placering | BÀst för |
|---|---|---|---|
| Output Styles | "Tone and style" + "Doing tasks"-sektionerna | Precis före verktygsdefinitionerna | Att Àndra interaktionsstil |
| --append-system-prompt | Ingenting (additivt) | Efter output style, före verktygsdefinitioner | Att lÀgga till specifika beteenden |
| --system-prompt | Hela system-prompten | BehÄller verktygsdefinitioner + en identitetsrad | FullstÀndig anpassning (the nuclear option) |
Om du anvĂ€nder flera: Output Style â Append Prompt â Tool Definitions
Instruktionshierarki
Claude Àr specifikt trÀnad med en instruktionshierarki:
1. User's explicit instructions (CLAUDE.md, direct requests) â Högsta prioritet
2. Custom system prompt additions â Hög
3. Default system prompt â Medium
4. Tool definitions â ReferensnivĂ„
Detta innebÀr:
- CLAUDE.md-regler ÄsidosÀtter standardbeteendet i system-prompten
- AnvÀndarens direkta förfrÄgningar ÄsidosÀtter allt
- Din anpassade prompt ÄsidosÀtter standardprompten
Dynamiska injiceringsmekanismer
<system-reminder>â injicera i valfritt meddelande mitt i konversationen för att pĂ„minna modellen om kritiska regler- CLAUDE.md / AGENTS.md â laddas vid runtime frĂ„n filer, lĂ€ggs till i system-prompten
- Skills / SKILL.md â laddas vid behov via verktygsanrop, noll avtryck i system-prompten
8. Injicering mitt i konversationen â Det hemliga vapnet
System-prompten dyker bara upp en gÄng, allra först i meddelande-arrayen. Men LLM:er accepterar hela meddelande-arrayen (alternerande anvÀndar- / assistent- / verktygsmeddelanden) som input, och du kan injicera prompts i anvÀndarmeddelanden och verktygsresultat ocksÄ. Claude Code anvÀnder denna teknik flitigt i produktion.
Varför det Àr nödvÀndigt
Att bekÀmpa kontextröta. NÀr konversationer blir lÀngre försÀmras modellens förmÄga att följa system-promptens instruktioner (mÀrkbart vid 80K+ tokens). Att injicera pÄminnelser mitt i konversationen = att uppdatera reglerna via recency bias.
Den mentala modellen:
- System-prompt = grundlagen (etableras en gÄng, lÄngsiktig auktoritet)
- PÄminnelser i anvÀndarmeddelanden = PM/Memos (skickas periodiskt, upprÀtthÄller efterlevnad)
Tre injiceringspunkter i meddelande-arrayen
Messages Array:
âââââââââââââââââââââââââââââââââââââââ
â System-prompt â â Syns en gĂ„ng, primacy-effekt
â (identity, safety, workflow...) â
âââââââââââââââââââââââââââââââââââââââ€
â AnvĂ€ndarmeddelande 1 â
â Assistentmeddelande 1 â
â AnvĂ€ndarmeddelande 2 + <system-reminder> â â Injicering mitt i konversationen
â Assistentmeddelande 2 â
â Verktygsresultat + <system-reminder> â â Kan injiceras i verktygsresultat ocksĂ„
â ... â
â AnvĂ€ndarmeddelande N + <system-reminder> â â Senaste meddelandet, starkast recency-effekt
âââââââââââââââââââââââââââââââââââââââ
| Plats | Fördel | Nackdel |
|---|---|---|
| System prompt | Primacy-effekt, lÀses först | Syns en gÄng, "glöms bort" i lÄnga konversationer |
| User message injection | Recency bias, periodisk uppdatering | Varje injicering kostar tokens |
| Tool result injection | Mest naturliga injiceringspunkten | Fungerar bara nÀr verktyg anropas |
Hur Claude Code faktiskt anvÀnder det
FörutsĂ€ttning â deklarera taggarna 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.
Detta steg Àr kritiskt: det talar om för modellen att dessa taggar Àr systeminjicerade, inte anvÀndarens tal.
AnvÀndning 1: BeteendepÄminnelser (periodisk regeluppdatering)
<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 anvĂ€nder detta för att pĂ„minna modellen om att planera med TodoWrite â eftersom modeller tenderar att "glömma" planeringen och bara börja koda.
AnvÀndning 2: LÀgesvÀxling (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 (planeringslÀge) implementeras inte i system-prompten. Det Àr en tagg som injiceras i nÀsta anvÀndarmeddelande. Detta lÄter dig vÀxla lÀgen dynamiskt utan att modifiera system-prompten. Genialiskt.
AnvÀndning 3: Notifieringar om filÀndringar
<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 extern process (linter, formaterare, manuell redigering) modifierar en fil, meddelar systemet modellen via en pĂ„minnelse â vilket förhindrar beslut baserade pĂ„ inaktuellt filinnehĂ„ll.
AnvÀndning 4: Dynamisk kontext (datum, projektregler)
<system-reminder>
Today's date is 2026-03-21.
Current branch: dev
claudeMd: [CLAUDE.md content injected here]
</system-reminder>
Runtime-kontext (datum, git-status, projektregler) injiceras via anvÀndarmeddelanden, den hÄrdkodas inte i system-prompten.
Riktlinjer för att skriva pÄminnelser
- SlÄ in i XML-taggar (
<system-reminder>) â modellen kan skilja systeminjicering frĂ„n anvĂ€ndarens tal - Fördeklarera taggar i system-prompten â annars kan modellen försöka svara pĂ„ pĂ„minnelsen
- Injicera inte i varje meddelande â varje injicering kostar tokens, injicera bara nĂ€r det behövs
- HĂ„ll det kort â en pĂ„minnelse Ă€r inte en andra system-prompt, bara 1-2 kritiska regler
- MotsĂ€g inte system-prompten â pĂ„minnelser kompletterar och förstĂ€rker, de Ă„sidosĂ€tter inte
- AnvĂ€nd för dynamisk vĂ€xling â plan mode, readonly mode, feature flags
NÀr man ska anvÀnda System Prompt vs. User Message Reminder
| Scenario | System Prompt | User Message Reminder |
|---|---|---|
| Rolldefinition | â | â |
| SĂ€kerhetsgrĂ€nser | â Första deklarationen | â Periodisk upprepning |
| Arbetsflödesmetodik | â | â |
| LĂ€gesvĂ€xling (plan mode) | â | â |
| Notifieringar om filĂ€ndringar | â | â |
| Datum / miljöinformation | â Initialt vĂ€rde | â Uppdaterat vĂ€rde |
| Beteendekorrigering | â | â |
| PĂ„minnelser om verktygsanvĂ€ndning | â Regeldefinition | â Exekveringsknuffar (nudges) |
9. Prompt Cache â Spara 90% pĂ„ Ă„terkommande tokens
Anthropics prompt caching lĂ„ter dig cacha det statiska prefixet av din meddelande-array. NĂ€r efterföljande förfrĂ„gningar delar samma prefix trĂ€ffar de cachen â vilket sparar pengar och minskar latensen.
För agenter spelar detta stor roll: du skickar om system-prompten + verktygsdefinitionerna vid varje enskilt LLM-anrop inom en konversation.
Viktiga siffror
| MÀtvÀrde | VÀrde |
|---|---|
| Kostnad vid cache-trÀff | 10% av normalpriset (90% besparing) |
| Kostnad för cache-skrivning | 125% av normalpriset (25% pÄslag vid första skrivningen) |
| Cache TTL | 5 minuter (löper ut om inga förfrÄgningar görs) |
| Minsta cachebara lÀngd | 1 024 tokens (Claude 3.5+) |
| Cache-granularitet | Prefix-matchning â frĂ„n början till en markerad brytpunkt (breakpoint) |
| Maximala brytpunkter | 4 |
Hur detta förÀndrar prompt-design
KÀrnprincip: statiskt innehÄll först, dynamiskt innehÄll sist.
â
Cache-vÀnlig layout:
System-prompt (statisk) â Cache-brytpunkt 1
Verktygsdefinitioner (statiska) â Cache-brytpunkt 2
CLAUDE.md / projektregler â Cache-brytpunkt 3 (Ă€ndras ibland)
Konversationshistorik â Brytpunkt 4 för rullande fönster
â Cache-förstörande layout:
System-prompt
DYNAMIC TIMESTAMP â Ăndras vid varje request, allt efter = cache-miss
Verktygsdefinitioner
Konversationshistorik
FÀllan ingen varnar dig för: Om du lÀgger en dynamisk tidsstÀmpel mitt i din system-prompt blir allt efter den en cache-miss. Vid. Varje. Request. En tidsstÀmpel pÄ fel stÀlle och du betalar fullt pris för tusentals tokens.
API-anvÀndning
const response = await anthropic.messages.create({
model: "claude-sonnet-4-6",
system: [
{
type: "text",
text: "You are a startup advisor...",
cache_control: { type: "ephemeral" } // â markerar en cache-brytpunkt
}
],
messages: [...]
});
Strategi för flera brytpunkter
Brytpunkt 1: System-prompt â Ăndras nĂ€stan aldrig
Brytpunkt 2: Verktygsdefinitioner â Ăndras nĂ€stan aldrig
Brytpunkt 3: Projektregler / CLAUDE.md â Ăndras ibland
Brytpunkt 4: De första N historikmeddelandena â Rullande fönster-cache
Ăven nĂ€r konversationshistoriken Ă€ndras, trĂ€ffar de första 3 brytpunkterna fortfarande. En konversation pĂ„ 10 turer sparar ungefĂ€r 40-60% pĂ„ input-token-kostnader.
Designrekommendationer
- Inga högfrekventa dynamiska vĂ€rden i system-prompten â datum Ă€r okej (Ă€ndras dagligen), exakta tidsstĂ€mplar Ă€r det inte
- LĂ€gg dynamisk kontext (git-status, etc.) i injiceringar i anvĂ€ndarmeddelanden â inte i system-prompten, annars förstör du cachen
- HĂ„ll verktygsdefinitioner stabila â lĂ€gg inte till/ta bort verktyg dynamiskt vid runtime
- AnvĂ€nd rullande fönster för konversationshistorik â cacha de första N meddelandena, bara det nyaste meddelandet blir en cache-miss
10. Checklistan
Efter att du har skrivit din system-prompt, granska den mot den hÀr checklistan:
Struktur
- Ligger identiteten allra högst upp?
- Ăr sĂ€kerhetsgrĂ€nserna markerade med IMPORTANT och upprepade pĂ„ slutet?
- Tydlig sektionsuppdelning med rubriker?
- Ăr exempel inslagna i
<example>-taggar?
Token-budget
- Ăr din del < 6 000 tokens?
- Upprepar du inte information som redan finns i verktygsdefinitionerna?
- Laddas domÀnkunskap vid behov, istÀllet för att laddas i förvÀg?
- Ingen onödigt lÄng "lore" eller karaktÀrsbakgrund?
Regelkvalitet
- Ăr varje regel testbar som sant/falskt?
- AnvÀnder hÄrda grÀnser absolut sprÄk (NEVER/MUST)?
- AnvÀnder mjuka förslag rekommendationssprÄk (recommended/prefer)?
- Förklarar kritiska regler varför, inte bara vad?
- Dubbelriktade grÀnser (gör detta + gör inte detta)?
Agentbeteende
- Ges principer, inte stela steg-för-steg-procedurer?
- Har du hanterat scenariot "verktygsanrop nekades"?
- Har du hanterat strategin för "stötte pÄ hinder" (försök inte tvinga igenom det med brute-force)?
- Finns en strategi för kontexthantering pÄ plats (tröskelvÀrde för summering)?
Vad du INTE ska göra
- Inget smicker eller superlativa adjektiv?
- Inga överflödiga "du Àr en hjÀlpsam AI"-deklarationer?
- Inte skriven som en prompt-kedja?
- Ingen over-engineering (funktioner ingen bett om)?
Om jag började idag
HÀr Àr exakt vad jag skulle göra:
-
Börja med identitet + sÀkerhet pÄ de första 3 raderna. TvÄ meningar för vem agenten Àr. HÄrda grÀnser med NEVER/MUST. Upprepa sÀkerhetsreglerna pÄ slutet.
-
Skriv ditt kÀrnflöde som principer, inte steg. Max 4-5 punkter. AnvÀnd "recommended" och "prefer" för mjuka regler, "NEVER" och "MUST" för hÄrda.
-
Budgetera 1 500-6 000 tokens för din del. Verktygsdefinitioner kommer att lÀgga till 5 000-15 000 till. Om du Àr över 6K dumpar du förmodligen kunskap som borde laddas vid behov.
-
Strukturera allt. Markdown-rubriker, punktlistor, XML-taggar för exempel. En strukturerad prompt slÄr naturlig prosa varje gÄng.
-
Bygg in pÄminnelser mitt i konversationen frÄn dag ett. Deklarera
<system-reminder>i din system-prompt. Injicera pÄminnelser för kritiska regler, lÀgesvÀxlingar och kontextuppdateringar. -
Designa för cache. Statiskt innehÄll först, dynamiskt innehÄll sist. LÀgg aldrig förÀnderliga vÀrden i sjÀlva system-prompten.
Ironin i allt detta arbete? De bÀsta system-promptarna Àr korta. Claude Codes anpassade instruktioner (exklusive verktygsdefinitioner) Àr förvÄnansvÀrt koncisa. Varje rad förtjÀnar sin plats.
Jag brukade tro att prompt engineering handlade om att hitta smarta trick. Nu tror jag att det handlar om disciplin â att sĂ€ga mindre, sĂ€ga det exakt, och lita pĂ„ att modellen rĂ€knar ut resten. Modellen Ă€r smartare Ă€n din prompt. Designa miljön, inte beteendet.
Referenser
| KĂ€lla | Nyckelinsikt |
|---|---|
| Claude Code v2.0.14 System Prompt | Referens för prompt-struktur för agenter i produktion |
| Reddit: Understanding Claude Code's 3 System Prompt Methods | Djupdykning i Output Styles / --append / --system-prompt, verklig data pÄ kontextröta |
| shareAI-lab/learn-claude-code | Filosofin "modellen Àr agenten", metodik för harness engineering |
| Anthropic Prompt Engineering Docs | Officiella best practices för prompts |
| DeepAgents Framework | Middleware för summering, progressivt avslöjande av fÀrdigheter (skills) |
Dela detta

Skrivet av Feng Liu
shenjian8628@gmail.com