ArtikelArbetsflöde · Kontext

När AI:n glömmer mitt i jobbet: arbeta med kontextkomprimering

Tre timmar in i samma session föreslår agenten precis den lösning du avfärdade före lunch, med samma motivering som då. Ingenting har kraschat och inget felmeddelande har skrivits ut. Historiken har komprimerats — och beslutet fanns bara där.

Senast granskad: 16 augusti 2026

Ett nätverksmoln av noder och linjer till vänster om en mörk press: en lång bunt blad matas in och lämnar ett lågt svart block på hyllan, lösa kort faller mot golvet, och en kort rad kort står upprätt på ett eget podium till höger.
Pressen lämnar ett tätt block och ett golv av kort som ingen läste. Det som fortfarande går att läsa står upprätt utanför maskinen.
Den här texten handlar om mekaniken i en pågående kodsession. Hur du lägger upp arbetet i avgränsade samtal i stället för ett oändligt är en annan fråga, och den är besvarad för den som inte skriver kod i Perestrojkas När modellen tappar tråden. Hur själva överlämningspaketet ska se ut när du byter session ägs av engelskspråkiga The AI session resume packet. Här förklaras i stället varför saker försvinner, hur du ser vilken mekanism som tog dem, och vad det får för konsekvens för vad du lägger i en fil.

Kortfattat

Komprimering och kontextredigering är två olika mekanismer med två olika förlustmönster. Kontextredigering rensar gamla tool-resultat och tankeblock och ersätter dem med en platshållare; komprimering sammanfattar historiken och ersätter den med en summering. Klientansvaret är dessutom omvänt: kontextredigering kräver ingenting av dig, komprimering kräver att du bär summeringsblocket vidare i varje anrop. Regeln som faller ut i en kodsession: det som återinjiceras från disk överlever, det som bara fanns i samtalet gör det inte. All mekanik nedan är kontrollerad mot Anthropics dokumentation 16 augusti 2026.

Två mekanismer, inte en

Det är lätt att slå ihop dem till "modellen glömmer", men de gör olika saker och lämnar olika spår.

Kontextredigering rensar utvalt innehåll ur historiken. Strategin clear_tool_uses_20250919 tar de äldsta tool-resultaten först och ersätter vart och ett med en platshållare som talar om för modellen att resultatet är borttaget. Standardtröskeln är 100 000 indatatokens, och de tre senaste paren av verktygsanrop och resultat behålls. Den viktiga detaljen står i clear_tool_inputs, som är false som standard: bara resultatet rensas, medan modellens ursprungliga verktygsanrop står kvar synligt. Det finns en motsvarande strategi för tankeblock, clear_thinking_20251015, och två ventiler — exclude_tools för verktyg som aldrig får rensas och clear_at_least för att slippa mikrorensningar.

Komprimering gör tvärtom: den ber modellen sammanfatta historiken och ersätter den med summeringen. Standardtröskeln är 150 000 indatatokens och lägsta tillåtna 50 000. Dokumentationen ställer själv de två mot varandra: till skillnad från kontextredigering, som rensar innehåll, instruerar komprimeringen modellen att sammanfatta konversationen och byter sedan ut hela historiken mot den sammanfattningen.

# Två skilda betaflaggor, två skilda strategityper — blanda inte ihop dem.
betas=["compact-2026-01-12"]
context_management={"edits": [{"type": "compact_20260112",
                               "trigger": {"type": "input_tokens", "value": 150000}}]}

betas=["context-management-2025-06-27"]
context_management={"edits": [{"type": "clear_tool_uses_20250919",
                               "keep": {"type": "tool_uses", "value": 3},
                               "clear_tool_inputs": False}]}

Skillnaden syns också i vilka modeller som omfattas. Kontextredigering anges gälla samtliga modeller som stöds. Komprimering är listad per modell — vid kontrolldatumet Fable 5, Opus 5, Opus 4.8, 4.7 och 4.6 samt Sonnet 5 och Sonnet 4.6. Bygger du mot en äldre eller mindre modell finns alltså rensningen men inte summeringen, och då är det inte samma sak som händer i din session.


Vad summeringen behåller och vad den släpper

I en agentsession körs båda mekanismerna, i en bestämd ordning. Claude Codes dokumentation beskriver den rakt ut: äldre tool-utdata rensas först, och därefter sammanfattas konversationen om det behövs. Samma stycke säger vad som blir kvar: dina förfrågningar och viktiga kodsnuttar bevaras, medan detaljerade instruktioner från tidigt i samtalet kan gå förlorade. Det är den meningen som förklarar varför ett avfärdat förslag kan komma tillbaka: koden överlevde, motiveringen gjorde det inte.

För allt som du själv har konfigurerat finns en publicerad tabell över vad som händer vid en komprimering. Den är värd att läsa som en ägarkarta över din egen setup.

Överlever alltid. Systemprompten och output style ligger inte i meddelandehistoriken och är oförändrade. Hooks berörs inte alls — de körs som kod, inte som kontext. Det gör en hook till den enda mekanism på listan som är immun mot problemet.
Återinjiceras från disk. Projektrotens CLAUDE.md och regler utan sökvägsvillkor läses in på nytt efter komprimeringen, liksom det automatiska minnet. Det är hela poängen med att lägga något i en sådan fil.
Försvinner tills en fil läses igen. Regler med paths:-frontmatter och nästlade CLAUDE.md i underkataloger laddas in i meddelandehistoriken när en matchande fil läses — och summeras därför bort med resten. De kommer tillbaka först nästa gång agenten läser en fil som matchar. Dokumentationen ger själv åtgärden: måste regeln gälla över en komprimering, ta bort paths: eller flytta den till projektrotens fil.
Återinjiceras men kapas. Anropade skills läggs tillbaka med ett tak på 5 000 token per skill och 25 000 token totalt, där äldst faller bort först. Kapningen behåller filens början, vilket gör placeringen inne i SKILL.md till ett tekniskt beslut: det som står långt ned kan sluta gälla mitt i en session. Själva listningen av tillgängliga skills återinjiceras inte — bara de du faktiskt har anropat bevaras.

Kriteriet för vad som måste ligga i en fil är alltså inte hur viktigt det känns. Det är om det återinjiceras från disk.


Symtomen och vad de pekar på

Det som gör komprimering svår att upptäcka är att den inte ser ut som ett fel. Sessionen fortsätter, tonen är densamma, och modellen är lika säker som förut. Tre symtom är däremot diagnostiska, för de pekar på olika mekanismer.

Den föreslår en ändring som inte matchar filens nuvarande innehåll. Patchen refererar till en funktion som bytt namn eller en rad som inte finns. Det här är rensningens signatur: resultatet av läsningen är ersatt med en platshållare medan anropet står kvar synligt i historiken, eftersom clear_tool_inputs är avstängt som standard. Det ser för modellen ut som om filen redan är läst.
Den motsäger ett tidigare beslut eller tar upp ett avfärdat förslag igen. Det är summeringens signatur. Beslutet var en instruktion i löpande text tidigt i samtalet, precis den kategori dokumentationen säger kan gå förlorad, medan koden runt omkring bevarades.
Den bryter mot en konvention den följt hela förmiddagen. Den lömskaste av de tre, eftersom ingenting i samtalet ser trasigt ut. Regeln låg i en regelfil med paths:-villkor eller i en nästlad CLAUDE.md, den försvann vid komprimeringen, och den kommer tillbaka först när en matchande fil läses igen. Byter du fil i det läget kan beteendet växla fram och tillbaka utan att du rör något.

Gissa inte vilken av dem det är — kontrollera. Terminalen skriver en rad om att konversationen komprimerats när det sker, och /context ger en löpande uppdelning av vad som ligger i fönstret just nu, inklusive vilka CLAUDE.md- och minnesfiler som är laddade. Det avgörande provet tar tio sekunder: be uttryckligen agenten att använda läsverktyget på filen, svara med första raden och antalet rader, och kontrollera att ett nytt läsanrop faktiskt sker. Om inget anrop syns har du inte verifierat filens aktuella innehåll; starta om provet med ett uttryckligt verktygskrav. Ett uteblivet anrop visar inte ensamt om orsaken är rensning, summering eller att uppgiften redan fanns kvar i kontexten.

När komprimeringen slutar hjälpa

Om en enda fil eller ett enda tool-utdata är så stort att kontexten fylls igen direkt efter varje summering, slutar Claude Code autokomprimera efter några försök och visar ett fel i stället för att loopa. Ser du det är åtgärden inte ytterligare en komprimering utan att sluta läsa in artefakten i samtalet: filtrera utdatan innan den når kontexten, eller skicka läsningen till en subagent, som får en egen kontext och lämnar tillbaka bara en sammanfattning.


Kedjan du själv måste hålla ihop

Kör du mot API:t i egen kod är ansvaret omvänt mellan mekanismerna, och det är där kedjan brukar brista. Kontextredigering sker serverside innan prompten når modellen, och din klient behåller hela den oförändrade historiken — du behöver inte synka något. Komprimering däremot lägger ett compaction-block i svaret, och nästa anrop förutsätter att blocket följer med: API:t släpper allt innehåll som ligger före det och fortsätter från summeringen.

svar = client.beta.messages.create(
    model="claude-opus-5", max_tokens=16000,
    betas=["compact-2026-01-12"],
    context_management={"edits": [{"type": "compact_20260112"}]},
    tools=VERKTYG, messages=meddelanden,
)

# FEL: bara texten. Compaction-blocket faller bort ur historiken och
# nästa anrop skickar in hela den gamla historiken igen — obemärkt.
meddelanden.append({"role": "assistant", "content": text_ur(svar)})

# RÄTT: hela innehållet, block för block.
meddelanden.append({"role": "assistant", "content": svar.content})

# Gör mekaniken mätbar i stället för anekdotisk.
for edit in (svar.context_management.applied_edits if svar.context_management else []):
    logg.info("kontextredigering", typ=edit.type, tokens=edit.cleared_input_tokens)
if any(block.type == "compaction" for block in svar.content):
    logg.info("komprimering", turer=len(meddelanden))

Den övre varianten är den vanligaste buggen i egen agentkod, och den är tyst: allt fungerar, kostnaden stiger, och det enda som avslöjar den är att indatatokens fortsätter växa efter en komprimering i stället för att falla. Loggar du de två raderna längst ned får du dessutom något som är svårt att få på annat sätt — en tidsstämpel att lägga bredvid en misslyckad körning när du felsöker en vecka senare.


Vad som måste flyttas ut ur samtalet

Slutsatsen av tabellen längre upp är obekvämt konkret: allt du bestämmer i chatten är temporärt tills du skriver ned det i en fil som återinjiceras. Två sorters innehåll hör alltid dit.

Det som alltid ska gälla hör hemma i projektrotens kontextfil — körkommandon, konventioner, gränser. Vad som ska stå där och hur kort den ska vara behandlas i Skriv en bra kontextfil, och det som står där upprepas inte här. Den mekaniska tilläggsregeln från den här artikeln är däremot ny: lägg aldrig en regel som måste hålla överallt bakom ett paths:-villkor, och sätt det viktigaste först i en skill-fil, eftersom kapningen behåller början.

Det som är bestämt och varför hör hemma i en beslutslogg i repot. Motiveringen är den kategori som försvinner först i en summering, och därmed den som kostar mest att förlora. Beslutsloggen går igenom varför den behövs och hur en post ser ut; den här artikeln tillför bara orsaken till att den inte kan ersättas av ett långt samtal.

Sedan finns tre inställningar som gör komprimeringen förutsägbar i stället för överraskande. Kör /compact med ett fokus — exempelvis fokusera på autentiseringsfixen — innan du börjar på något nytt, så bestämmer du vad summeringen behåller i stället för att gissa. Sätt fönstret med /autocompact och ett värde mellan 100K och 1M token, eller CLAUDE_CODE_AUTO_COMPACT_WINDOW i skript och CI, så att komprimeringen inträffar när du väljer och inte mitt i en refaktorering; utan eget värde sker den vid modellens kontextgräns. Och flytta stora läsningar till subagenter, som håller filinnehållet utanför ditt fönster.

Provet på att du har landat rätt är enkelt att göra i morgon bitti: starta en ny session och be agenten sammanfatta vad den vet om projektet innan du skrivit något själv. Det den kan då är det som faktiskt ligger i filer. Resten var samtal. Ska prototypen dessutom lämnas över till någon annan är samma frågeställning en del av utvecklarens övertagningsgrind.


Källor

Att komprimering sammanfattar och kontextredigering rensar, betaflaggorna compact-2026-01-12 och context-management-2025-06-27, tröskelvärdena 150 000 respektive 100 000 indatatokens, standardvärdet keep: 3, clear_tool_inputs: false, platshållaren för rensade tool-resultat, fältet context_management.applied_edits och kravet att skicka tillbaka hela svaret med compaction-blocket är kontrollerade mot Anthropics Compaction och Context editing. Ordningen mellan rensning och summering, vad som bevaras respektive kan gå förlorat och spärren mot upprepade komprimeringar kommer från How Claude Code works. Tabellen över vad som överlever en komprimering, taken på 5 000 och 25 000 token för skills samt /context är hämtade ur Explore the context window, och inställningarna för autokomprimeringsfönstret ur Model configuration. Samtliga källor lästa 16 augusti 2026.