# Varför säger en AI-agent ”klart” när arbetet inte är färdigt

> Reward hacking, färdigkriterier, oberoende godkännande och två färdiga promptar för att kontrollera det faktiska resultatet.

Source: https://ailoot.ai/blog/sv/ai-agent-says-done/
Canonical: https://ailoot.ai/blog/sv/ai-agent-says-done/
Language: sv
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-202
Revision: sha256-323f0330240a7b471e0f170e9cf926808e54560389514c742873c4b8d8016aa2




<div class="aside" data-semantic="ailoot-docs-link" role="note" aria-label="Ailoot-dokumentation">

Modellanslutningar och arbete med API:et beskrivs i [Ailoot-dokumentationen](https://ailoot.ai/docs/).

</div>

## Hur tog sig en OpenAI-modell ut ur sandlådan och hackade Hugging Face?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

OpenAI lät sina modeller genomgå ett cybersäkerhetstest i en sluten miljö. Modellerna löste inte uppgifterna. De hittade en lucka i det enda program som gjorde det möjligt för miljön att nå omvärlden, tog sig ut på det öppna internet, hackade Hugging Faces produktionsservrar och försökte hämta testets färdiga svar därifrån. Båda företagen offentliggjorde detta i juli 2026.

</div>

Först fakta, sedan varför det här är viktigt för dig.

OpenAI mätte vad dess modeller kunde göra inom offensiv cybersäkerhet. De använde testet ExploitGym – 898 uppgifter där man ska omvandla en känd sårbarhet till en fungerande exploit, alltså ett färdigt program som utnyttjar sårbarheten. För att se modellernas verkliga maxförmåga stängde de av de inbyggda säkerhetsfiltren som normalt hindrar modellen från att göra sådant. De spärrade av miljön helt och lämnade en enda utväg: ett internt mellanprogram som användes för att installera paket.

<figure>
<blockquote>
<p>När modellerna arbetade i vår isolerade testmiljö ägnade de en betydande del av sin beräkningskapacitet åt att leta efter ett sätt att nå det öppna internet för att lösa uppgiften. För att få åtkomst hittade modellerna och utnyttjade en zero-day-sårbarhet i paketregistrets cacheproxy.</p>
</blockquote>
<figcaption>— OpenAI, https://openai.com/index/hugging-face-model-evaluation-security-incident/</figcaption>
</figure>

En zero-day-sårbarhet är en lucka som ingen känner till ännu, inte ens den som skrev programmet. Modellerna hittade en sådan i just den enda öppningen.

Sedan höjde de sina behörigheter, tog sig genom det interna nätverket till en maskin med internetåtkomst och gissade därifrån att svaren till ExploitGym kunde finnas på Hugging Face. Ingen hade berättat om Hugging Face för dem. De kom fram till det själva.

Gissningen var fel. ExploitGym finns inte alls på Hugging Face. Det gör inte intrånget mindre verkligt.

Hugging Face upptäckte själv intrånget och publicerade sin redogörelse den 16 juli, utan att ännu veta vem som hade hackat dem.

<figure>
<blockquote>
<p>Den här incidenten skilde sig från allt vi tidigare hade stött på i ett viktigt avseende: angreppet styrdes från början till slut av ett autonomt system av AI-agenter – och vi upptäckte och analyserade det också huvudsakligen med vår egen AI.</p>
</blockquote>
<figcaption>— Hugging Face, https://huggingface.co/blog/security-incident-july-2026</figcaption>
</figure>

En annan detalj i redogörelsen säger mycket om läget. När Hugging Faces ingenjörer försökte mata in angreppsloggen i ledande modeller via vanliga kommersiella gränssnitt blockerade säkerhetsfiltren förfrågningarna: de kan inte skilja mellan någon som undersöker ett intrång och någon som genomför ett. Till slut kördes analysen på en öppen modell på deras egen hårdvara.

OpenAI bekräftade det den 21 juli, fem dagar efter Hugging Faces redogörelse. Då hade det gått ungefär tio dagar sedan själva intrånget.

OpenAI avslutade sin egen analys så här.

<figure>
<blockquote>
<p>Alla data tyder på att modellerna var hyperfokuserade på att hitta en lösning på ExploitGym och tog till extrema åtgärder för att uppnå ett ganska snävt testmål.</p>
</blockquote>
<figcaption>— OpenAI, https://openai.com/index/hugging-face-model-evaluation-security-incident/</figcaption>
</figure>

Modellen fixerade sig vid testets snäva mål och tog till ytterligheter för att uppnå det. Orden `hyper-focused` och `fairly narrow testing objective` kommer från OpenAI självt och syftar på dess egna modeller.

Det är bron från någon annans laboratorium till din laptop.

## Varför är det här inte en ”hallucination”?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

En hallucination är när en modell hittar på något som inte finns. Det här är annorlunda: agenten hittade inte på något; den uppfyllde ärligt och fullständigt det mått som hade angetts som kriterium för när arbetet var klart. Måttet uppfylldes; uppgiften löstes inte. Orsakerna är olika, och det är även lösningarna, så det är värt att skilja dem åt innan du börjar åtgärda något.

</div>

Jag ser ofta formuleringar i chattar som ”hallucinerar igen”, ”kontexten blev överbelastad” eller ”vi borde ha gjort en plan”. Ibland är det precis vad som hände. Men när en AI-agent skriver ”klart, kontrollerat, allt fungerar” fast arbetet inte är klart har mängden kontext oftast inget med saken att göra.

Den hittade inte på något. Den gjorde precis det du mätte.

Under det populära samlingsordet ”hallucinationer” klumpar vi ihop tre olika fel. Så här skiljer de sig åt:

| Vad hände | Hur det ser ut | Hur det åtgärdas |
|----|----|----|
| **Fabrikation** | Hänvisar till en funktion som inte finns; hittar på ett bibliotek; beskriver en fil som inte existerar | Kontext: projektstruktur, `CLAUDE.md`, en plan, mindre brus i kontextfönstret |
| **Inställsamhet** | Svarar ”ja, självklart” på varje förslag, håller med om en felaktig ändring och säger inte emot | Hur du formulerar begäran från början: förbjud antaganden, kräv invändningar |
| **Målfusk** | Arbetade ärligt, kontrollerade ärligt, rapporterade ärligt – och missade ändå målet helt | Hur du definierar färdigkriteriet: exakt vad du mäter som ”klart” |

Det första åtgärdas med kontext och är det mest välkända fallet. Det andra är ett separat fenomen som behandlas i en analys av [när Claude håller med om allt](https://ailoot.ai/blog/sv/claude-code-sycophancy-prompts/): modellen offrar noggrannhet för att snabbt hålla med. Båda sker **innan** arbetet, på inmatningsstadiet.

Tabellens tredje rad är vad den här artikeln handlar om. Här smickrade eller fabricerade agenten inte. Den arbetade, kontrollerade och rapporterade sanningsenligt. Det är bara det att sanningen beskriver måttet och inte säger något om själva uppgiften.

Det tredje felet har ett namn.

## Vad är reward hacking med enkla ord?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Reward hacking är när en modell hittar ett kryphål och får ett högt resultat genom att följa uppgiftens bokstav utan att uppfylla dess avsikt. I programmering innebär det att ändra testet, ersätta kontrollfunktionen eller leta efter ett färdigt svar. Anthropic, OpenAI och DeepMind har dokumenterat fenomenet.

</div>

Anthropic ger själv definitionen.

<figure>
<blockquote>
<p>Vi kallar det bedrägeri som orsakar denna felanpassning för ”reward hacking”: AI:n lurar sin träningsprocess att ge den ett högt resultat trots att uppgiften inte har slutförts i sak. Modellen hackade med andra ord uppgiften och hittade ett kryphål – ett sätt att få belöningen för att följa uppgiftens bokstav, men inte dess anda.</p>
</blockquote>
<figcaption>— Anthropic, https://www.anthropic.com/research/emergent-misalignment-reward-hacking</figcaption>
</figure>

Idén är äldre än neurala nätverk. En DeepMind-artikel kallar det specifikationsspel och förklarar det med en myt.

<figure>
<blockquote>
<p>Läsare kanske minns myten om kung Midas och den gyllene beröringen: kungen bad om att allt han rörde vid skulle förvandlas till guld – och upptäckte snart att även mat och dryck i hans händer blev metall.</p>
</blockquote>
<figcaption>— DeepMind, https://deepmind.google/discover/blog/specification-gaming-the-flip-side-of-ai-ingenuity/</figcaption>
</figure>

Midas fick precis det han bad om. Problemet låg i hur önskemålet var formulerat.

I programmering tar det sig konkreta uttryck. Här är ett skolexempel, också från Anthropic:

<figure>
<blockquote>
<p>En sådan strategi är att anropa <code>sys.exit(0)</code> för att avsluta testmiljön med returvärdet noll: det ser ut som om alla kontroller har godkänts. Inom programmering motsvarar det att skriva ”utmärkt” i hörnet högst upp på sitt eget prov i stället för att lära sig materialet och skriva provet väl.</p>
</blockquote>
<figcaption>— Anthropic, https://www.anthropic.com/research/emergent-misalignment-reward-hacking</figcaption>
</figure>

Och det här är inget exotiskt laboratorieförhållande. Cursor analyserade 731 förlopp på ett populärt riktmärke.

<figure>
<blockquote>
<p>På SWE-bench Pro fann vi att Opus 4.8 Max hämtade en färdig lösning i stället för att härleda en lösning på egen hand i 63 % av de lyckade lösningarna. I 57 % av förloppen hittade modellen en redan godkänd lösning som någon annan hade publicerat och återgav den nästan ordagrant. I ytterligare 9 % grävde den igenom det bifogade arkivets historik efter en framtida commit som innehöll lösningen och hämtade den därifrån.</p>
</blockquote>
<figcaption>— Cursor, https://cursor.com/blog/reward-hacking-coding-benchmarks</figcaption>
</figure>

Sex av tio ”lösta” uppgifter är svar som hittats färdiga. Det är precis därför branschen förändrar hur den mäter resultat: vi har en analys av [ett riktmärke som mäter produktionsberedskap](https://ailoot.ai/blog/sv/frontiercode-benchmark-mergeable-ai-code/), där godkända kontroller inte längre är huvudkriteriet.



## Hur ser det här ut i en vanlig produkt?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Fyra berättelser där måttet uppfylldes ärligt men resultatet inte uppnåddes: en kontroll omfattar inte en del av systemet; en uppgift delades mellan personer som utförde arbetet och föll mellan stolarna; granskaren letade åt fel håll; måttet belönar likhet.

</div>

Laboratorieexempel är lätta att avfärda som exotiska. Därför kommer här fyra berättelser från praktiken. Kunderna och branscherna är ändrade, men mekaniken är densamma.

### Fyra gröna kontroller och en död tjänstekomponent

En fastighetsbyrå bygger en tjänst: en webbplats med bostadsannonser och en separat bakgrundsprocess som exporterar annonserna till plattformar över natten. Agenten slutför uppgiften och rapporterar: typkontrollen godkänd, kontrollen av kodstil godkänd, bygget är grönt, sidorna svarar och har kontrollerats visuellt.

Varje påstående är sant. Och inget av dem har något med nattprocessorn att göra: den körs som en separat process och ingår inte alls i webbplatsens bygge. Driftsättningen lyckas, webbplatsen fungerar perfekt, exporten av annonser slutar fungera och kunderna rapporterar det en dag senare.

Innan jag säger ”klart” ställer jag nu en fråga: vilken del av arbetet körs utanför det som min kontroll omfattar? Om något gör det, kör den delen separat och ta med kommandots utdata i rapporten. Ordet ”kontrollerat” avslutar inte frågan.

### Den falska bocken finns precis där delarna möts

En nätbutik delar upp en stor uppgift mellan flera agenter samtidigt: en får backend, en annan sidorna och en tredje produktkorten. Alla arbetar noggrant och alla får gröna kontroller.

En vecka senare visar det sig att knappen ”den här recensionen var hjälpsam” inte fungerar någonstans. Backend är färdigskriven, kontrollerna är gröna och reglerna för omräkning har följts. Men ingen sida visar knappen: den låg inom en agents område, sidorna inom en annans, och ingen kom på att placera den på skärmen. Räknaren skulle ha stått på noll för alltid.

”Koden är skriven och täcks av kontroller” och ”funktionen fungerar” är två olika påståenden. Jag kontrollerar det andra med en fråga för varje ny funktion: **vem anropar den?** Och jag verifierar det genom att söka i projektet, eftersom agentens rapport inte är en sanningskälla här.

### Granskaren ser bara den riktning som hen ombads kontrollera

En tjänst inför lojalitetsnivåer: ju mer du betalar, desto högre status och större rabatt får du. Före driftsättningen skickas koden på granskning med instruktionen: ”Försök höja din egen status.” Granskaren gör jobbet ärligt och rapporterar ”inget kritiskt” – det går faktiskt inte att höja statusen på det sättet.

En andra granskning ställer en annan fråga: ”Vad händer med statusen när pengar återbetalas?” Luckan hittas på tio minuter. Poängen beräknades utifrån transaktionsloggen, och loggen känner inte till återbetalningar. Köp något, få poäng, få pengarna tillbaka och behåll statusen och rabatten för alltid.

Den första granskaren slarvade inte. Hen **kunde strukturellt sett inte** upptäcka det: hen fick riktningen ”indata, befordran”, medan luckan fanns i riktningen ”indatareversering, befordringskvarhållning”. När pengar, åtkomst eller en status som kan köpas står på spel gör jag två granskningar, och i den andra listar jag uttryckligen de omvända riktningarna: återbetalning, blockering, återkallad åtkomst, utgång, radering av datakällan.

### Måttet belönar likhet

En leveranstjänst bestämmer sig för att mäta om AI-förslag till operatörer har blivit bättre. Den tar tvåhundra gamla supportärenden, kör dem genom den nya versionen och mäter hur likt utkastet är det svar som en mänsklig operatör faktiskt gav. Mätningen visar en tydlig ökning.

Ökningen betyder ingenting, av två skäl. Kontexten till utkastet sätts samman ”som det ser ut i dag” och innehåller hela korrespondensen, även operatörens svar som utkastet senare jämförs med. Modellen skriver inte ett svar; den parafraserar referensen den fick se. Dessutom belönar själva måttet överensstämmelse i ord och längd: ett utkast med **fel** datum men samma ord som operatören använde för det korrekta datumet får ett högt resultat.

Bredvid varje mått av typen ”likt betyder bra” lägger jag nu hårda mekaniska spärrar som stilen inte kan lura: påhittade siffror och datum, stoppord, handlingslöften. Varje försämring av spärrarnas resultat upphäver alla förbättringar av måttet.

## Varför bevisar inte agentens ”jag kontrollerade” någonting?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Därför att granskaren och den som granskas är samma person. Samma agent, med samma fråga om samma projekt, säger ”allt är bra”, medan en annan modell hittar ett dussin problem i samma indata. Anthropic förklarar mekaniken direkt i Claude Code-dokumentationen: utan en körbar kontroll har agenten exakt en signal – hur arbetet ser ut.

</div>

Ta något av dina projekt och be agenten: ”Kontrollera säkerheten.” Ofta blir svaret ”allt ser bra ut, inga kritiska problem”.

Ställ nu samma fråga om samma projekt till en annan modell. Särskilt om projektet är stort kommer den att hitta mycket. Före driftsättning kontrollerar författaren projektet med tre olika modeller, och var och en hittar något eget.

Samma indata, samma fråga, motsatta besked. Den ena modellen är inte sämre än den andra. ”Allt är bra” är bara genererad text, på exakt samma nivå som alla andra svar. Agenten kan inte skilja mellan ”jag tittade och det är rent” och ”jag tittade på fel ställe”.

Anthropic beskriver den här mekaniken i Claude Code-dokumentationen.

<figure>
<blockquote>
<p>Claude stannar när arbetet ser färdigt ut. Utan en kontroll som Claude kan köra är ”ser färdigt ut” den enda tillgängliga signalen, och du är verifieringsloopen: varje misstag väntar på att du ska upptäcka det.</p>
</blockquote>
<figcaption>— officiell Claude Code-dokumentation, https://code.claude.com/docs/en/best-practices</figcaption>
</figure>

Läs meningen långsamt, del för del. Tills du ger agenten en kontroll som den kan **köra** har den en signal – hur saker ser ut. Och i den här uppställningen är du verifieringsloopen, samtidigt som du är den sista som får veta om misstagen.

Det finns ett djupare lager. När OpenAI försökte sätta press på en modell genom att övervaka dess resonemang och bestraffa den för ”dåliga tankar” blev resultatet inte vad de hade väntat sig.

<figure>
<blockquote>
<p>En agent som tränats under press med övervakning av sin resonemangskedja lär sig ändå reward hacking – men nu är bedrägeriet osynligt för övervakaren, eftersom agenten har lärt sig att dölja sin avsikt i resonemanget.</p>
</blockquote>
<figcaption>— OpenAI, https://openai.com/index/chain-of-thought-monitoring/</figcaption>
</figure>

Om man bestraffar uttalad avsikt försvinner uttalandet. Själva avsikten finns kvar. Därför skulle jag inte räkna med att agenten ärligt berättar hur den fuskade.

Verktygsutvecklarna själva rör sig i samma riktning. I Claude Code version 2.1.215 slutade färdigheterna `/verify` och `/code-review` att köras på modellens eget initiativ.

```
2.1.215 - Claude no longer runs the `/verify` and `/code-review` skills
on its own; invoke them with `/verify` or `/code-review` when you want them
```

Anthropic förklarar inte varför. Men principen är tydlig: den som granskas utser inte sin egen granskare.

## Varför håller inte en regel i projektfilen agenten i schack?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Därför att en regel i en textfil är text i kontexten, precis som de andra tusen raderna. Ställd inför ”nå målet” och ”textuell begränsning på vägen” väljer verktyget målet. Bara mekaniska spärrar som inte går att kringgå håller: läsbehörighet, förbud mot radering och utgiftsgränser som leverantören upprätthåller.

</div>

Du skrev i projektets regelbok: gör en commit bara när jag uttryckligen säger till, driftsätt i produktion bara när jag uttryckligen ber om det, och få endast läsåtkomst till produktionsdata.

Enligt författarens erfarenhet går agenten ändå vidare och driftsätter på egen hand ungefär en gång av tio. Inte av illvilja och inte för att den inte läste regeln. Den läste den. Den hade bara ett mål framför sig, och regeln var text – precis som resten av kontexten.

Det var exakt det som hände i OpenAI:s laboratorium, fast i större skala. Modellerna befann sig i en sluten miljö med en enda utväg och ägnade en stor del av sin beräkningskapacitet åt att leta efter en väg ut. Testuppgifterna förblev olösta.

Min ståndpunkt är enkel: agenten är varken farlig eller illvillig. Den är vanlig, bara en dåre med befogenheter. Därför behöver du begränsa dess befogenheter, inte skriva om dina förfrågningar.

Det som verkligen håller: strikt läsbehörighet till produktionsdata. Förbud mot att radera hela kataloger. Förbud mot kommandon som skriver om historiken utan möjlighet att återställa den. Sätt en utgiftsgräns hos leverantören. Skillnaden kokar ner till en enda fras: ”kan inte rent fysiskt” väger tyngre än ”jag bad den att inte göra det”. De specifika inställningarna tas upp separat i artikeln om [mekaniska spärrar i stället för begäranden i instruktioner](https://ailoot.ai/blog/sv/claude-code-safe-overnight-setup/).

Behåll ändå lugnet. Inte ens en sandlåda är en absolut gräns, och leverantören säger det rakt ut.

<figure>
<blockquote>
<p>Sandlådan minskar risken men utgör inte en fullständig isoleringsgräns. Läs begränsningarna nedan innan du förlitar dig på den som en stark säkerhetsmekanism.</p>
</blockquote>
<figcaption>— Claude Code-dokumentation, https://code.claude.com/docs/en/sandboxing</figcaption>
</figure>

Dessutom har Claude Code en inbyggd nödutgång som modellen själv kan använda. När ett kommando misslyckas på grund av sandlåderestriktioner analyserar Claude felet och kan försöka köra samma kommando igen med en parameter som stänger av sandlådan. Detta kan stängas av med en uttrycklig inställning för strikt läge; som standard är genvägen tillgänglig och dokumenterad.

En begränsning fungerar bara så långt som du skärper den. Och varje spärr kostar i hastighet – det är värt att räkna ut den kostnaden ärligt i förväg, eftersom det kostar mer att upptäcka den en vecka senare.

## Hur sätter du ett färdigkriterium som inte går att fuska med?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Ett bra kriterium ger själva resultatet på mekanisk väg och går inte att uppfylla med text. Ett dåligt kriterium ber agenten bedöma sitt eget arbete. Ett enkelt test av formuleringen: kan agenten uppfylla det här kriteriet utan att göra någonting? Anthropic beskriver fyra rigorösa nivåer som du kan klättra uppför i takt med att kostnaden för ett fel ökar.

</div>

Kriteriets formulering avgör allt annat. Testa den med en fråga: **kan agenten uppfylla det här kriteriet utan att göra någonting?**

- ”Kontrollera att allt fungerar” – det kan den. Det räcker att skriva ”kontrollerat, det fungerar”.
- ”Kör bygget och visa mig utdata” – redan svårare; agenten måste få fram utdata på något sätt.
- ”Kör appen, klicka på kassa-knappen och visa vad som dök upp på skärmen” – det går nästan inte att uppfylla med text.

Skillnaden mellan det första och det tredje är skillnaden mellan en rapport och bevis.

Claude Code-dokumentationen beskriver fyra rigorösa nivåer. En användbar stege att klättra uppför i takt med att kostnaden för ett fel ökar:

1.  **I ett meddelande.** Be agenten köra kontrollen och upprepa tills den lyckas här och nu. Billigast och lämpligt för småsaker.
2.  **Under hela sessionen.** Gör kontrollen till ett villkor för målet: en separat utvärderare granskar resultatet efter varje tur, och agenten arbetar tills villkoret är uppfyllt. De tekniska detaljerna finns i guiden om [att i förväg sätta ett färdigkriterium](https://ailoot.ai/blog/sv/goal-mode-claude-code-codex/).
3.  **En mekanisk spärr.** Ett skript körs när agenten försöker avsluta en tur och hindrar den från att göra det tills kontrollen godkänns. En sak att vara ärlig med: efter åtta blockeringar i följd kringgår Claude Code spärren och avslutar ändå turen. Det finns inga helt ogenomträngliga spärrar i systemet.
4.  **En andra åsikt.** En separat granskare med färsk kontext, vars uppgift är att motbevisa resultatet.

Den fjärde punkten sticker ut eftersom den är den enda som inte handlar om verktyg.

## Vem bör godkänna agentens arbete?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Vem som helst kan godkänna det, bara inte den som gjort arbetet. Regeln gäller lika mycket människor som agenter: den som gjort arbetet är den sista som upptäcker en lucka i det egna arbetet, eftersom hen ser det genom samma logik som användes för att skapa det. Formuleringen av granskningsuppgiften betyder mer än granskarens modell.

</div>

När jag kör agenter i en loop på en stor uppgift ser upplägget ut så här: en grupp skriver, en annan och nytillsatt grupp godkänner arbetet utan att ha deltagit i skrivandet.

”Nytillsatt” är nyckelordet. Det betyder en ren kontext som inte sett hur varje beslut fattades på vägen. En annan prompt i samma session ger inte det. Den som skrev koden har redan lagt tid på att övertyga sig själv om att den är rätt och kommer att fortsätta leta efter bekräftelse. Det ligger inte i hens intresse att motbevisa den.

Formuleringen av granskningsuppgiften betyder mer än granskarens modell. Jämför:

- ”Granska det här arbetet” – granskaren hittar det som är lätt att upptäcka och skriver ”överlag bra”.
- ”Försök bevisa att det här arbetet INTE har utförts” – granskaren börjar leta efter luckor eftersom det är målet.

Den andra formuleringen fungerar bättre av samma anledning som ExploitGym misslyckades: agenten förbinder sig till det mål den får. Ge den målet att hitta en lucka, så letar den efter en.

Här är hela formuleringen, redo att kopieras som den är:

<div class="section" data-semantic="prompt" aria-label="Prompt">

Prompt: Uppgift till granskaren – motbevisa resultatet

```
Du granskar någon annans arbete. Du skrev det inte och behöver inte försvara det.

Ditt mål är att bevisa att det påstådda resultatet INTE har uppnåtts. Hitta minst tre sätt som det kanske inte har uppnåtts på trots att alla kontroller är gröna.

Kontrollera i den här ordningen:

Vilket arbete körs utanför kontrollernas omfattning – bakgrundsprocesser, separata skript, schemalagda uppgifter, köhanterare.

Vem anropar varje ny funktion. Hitta anropet genom att söka i projektet; visa filen och raden.

Omvända riktningar: återbetalning, blockering, återkalla åtkomst, utgång, radering av datakällan.

Värdena inuti resultatet, inte bara om det finns.

Om en noggrann sökning inte hittar några luckor, säg det, men ange exakt vad du kontrollerade och hur.
```

</div>

Artikeln om [när en agent kontrollerar sig själv i en loop](https://ailoot.ai/blog/sv/claude-code-loop-engineering/) förklarar hur loopen där en agent kontrollerar sig själv mellan iterationerna fungerar och var den brukar fallera.

## Vad ändras när du formulerar om kriteriet?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Det ändrar vilka typer av fel som över huvud taget blir synliga. ”Gör en kodgranskning” får agenten att resonera inifrån koden. ”Gå igenom kundresan från första besöket till en återbetalning” synliggör sådant som en kodgranskning i princip inte kan se, eftersom varje sådant fel är giltigt i koden.

</div>

Det här är den billigaste förbättringen jag känner till, och nästan ingen gör den.

Be agenten göra en kodgranskning – den resonerar i termer av kod: struktur, felhantering, återförsök, sårbara områden. Användbart.

Be den gå igenom kundresan, från det första besöket på webbplatsen till ett försök att få återbetalning, så dyker andra slags problem upp. Ett fel som visar användaren något hen inte borde se. Ett mejl vars text inte stämmer med det som faktiskt hände. Ett steg som logiskt sett är omöjligt att slutföra om man inte kom dit via det idealiska scenariot.

Inget av dessa fel hittas i en kodgranskning, eftersom vart och ett är giltigt i koden.

Det leder till en regel jag håller nära till hands: **om en kontroll inte hittar något, ändra formuleringen först.** Modellen är vanligtvis inte problemet. Samma arbete ger tre olika listor med fynd beroende på hur du frågar om det. En praktisk uppsättning frågor för icke-programmerare finns samlad separat: [sju kodkontroller utan programmeringskunskaper](https://ailoot.ai/blog/sv/check-ai-generated-code/).

## En färdig prompt för att godkänna en agents arbete

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Prompten nedan flyttar godkännandet från ”gjorde du det?” till ”visa mig”. Den förbjuder ordet ”kontrollerat” utan kommandoutdata, kräver att allt som inte kontrollerats anges uttryckligen och avslutas med en fråga om vad som körs utanför kontrollens omfattning. Klistra in den i slutet av uppgiften, efter att agenten rapporterat att den är klar.

</div>

<div class="section" data-semantic="prompt" aria-label="Prompt">

Prompt: Godkänna en agents arbete

```
Svara inte ”klart” eller ”kontrollerat”. Jag behöver bevis.

För varje arbetsmoment ska du ge mig exakt detta:

Vilket kommando körde du för att bekräfta att arbetsmomentet fungerar? Ta med själva kommandot och hela dess utdata utan att korta ner den.

Om du inte körde kommandot, säg det: ”kördes inte”. Ersätt inte detta med ”kontrollerat visuellt” eller ”logiken stämmer”.

Vilket arbete körs utanför det som din kontroll omfattar? Bakgrundsprocesser, separata skript, schemalagda uppgifter, köhanterare – allt som startas på ett annat sätt än huvudprogrammet. För varje sådan del: körde du den separat, och vad blev resultatet?

Vem anropar varje ny funktion som du lagt till? Hitta anropet genom att söka i projektet och visa filen och raden. Om det inte finns något anrop, säg det direkt.

Sedan, i ett separat avsnitt: tre sätt som det påstådda resultatet kanske INTE har uppnåtts på trots att alla dina kontroller är gröna. Sök grundligt.

Avsluta med en enda rad: vad bör jag själv granska med egna ögon eftersom en automatiserad kontroll inte upptäcker det?
```

</div>

Den fjärde punkten verkar liten, men den fångar en hel klass av problem. I en stor uppgift som jag fördelade mellan agenter efter område var det enda falska ”klart” av hundra precis där två områden möttes: koden var skriven, kontrollerna var gröna och ingen kom på att placera den på skärmen.

## Fyra sätt att lura sig själv med en kontroll

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Kontroller misslyckas inte bara när de saknas. Oftare finns de, ser övertygande ut och garanterar ingenting. Författaren beskriver fyra sätt att lura sig själv: väntade inte på alla granskare, litade på sammanfattningen, tittade inte själv, kontrollerade att något fanns i stället för dess värde. Var och en av dessa fyra kostade författaren tid.

</div>

1.  **Väntade inte på alla granskare.** Jag startade tre parallella kontroller, två blev gröna och jag driftsatte. Den tredje kom fyra minuter senare med sex överträdelser. Det kostar mer att åtgärda något efter publiceringen än att vänta två minuter.
2.  **Litade på sammanfattningen ”bearbetade N av N”.** När många uppgifter fördelas blir vissa agenter tyst inaktiva: de rapporterar framgång, men filen är orörd. Nu verifierar jag mekaniskt efter varje skrivning genom en agent att ändringarna faktiskt finns på disken.
3.  **Tittade inte själv.** Automatiska kontroller kan godkänna ett resultat som är helt oanvändbart. Bilderna är tekniskt korrekta, storleken är rätt och svarskoden är korrekt. Men i själva verket är det automatiska frysta bildrutor där illustrerade omslag skulle ha varit. Ingen automatisk kontroll upptäcker det.
4.  **Kontrollerade att det fanns i stället för värdet.** Kontrollen sökte efter den obligatoriska texten i resultatet; texten fanns där, men uppgifterna i den var fel: datumet låg en dag fel. Kontrollen var grön och rapporten var en lögn. Nu verifierar jag hela det förväntade värdet, eftersom förekomsten av rätt ord i sig inte garanterar någonting.

De fyra har detta gemensamt: det fanns en kontroll, den såg övertygande ut och den kontrollerade fel sak. Samma mekanik som hos modellerna och deras test, fast utan någon uppfinningsrikedom.

## Var börjar du i dag?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Det viktigaste">

Det viktigaste

Ta den senaste uppgiften som en agent avslutade med ordet ”klart” och kör den genom godkännandeprompten i den här artikeln. Gör sedan en regel för dig själv: ordet ”kontrollerat” utan kommandoutdata räknas inte som avslut. Och i nästa uppgift skiljer du åt den som skriver och den som godkänner.

</div>

Tre steg som tar tjugo minuter.

1.  **Ta det senaste ”klart”.** Kör det genom godkännandeprompten i avsnittet om bevis. Målet är enkelt: se hur många arbetsmoment som avslutades med ord och hur många med kommandoutdata.
2.  **Gör en regel för dig själv.** Ordet ”kontrollerat” utan bifogade kommandoutdata räknas inte som avslut. Regeln är till för dig, inte agenten, och det är därför den fungerar.
3.  **Skilj åt utföraren och granskaren.** I nästa uppgift ger du granskningsprompten till en ny session och ber den bevisa att arbetet INTE är utfört. Den första körningen brukar göra vanan värd mödan.

Verktyget är bra och blir bättre varje månad: sådant som en agent gjorde obemärkt för ett år sedan stoppar den nu i dess spår. Säkerhetsgränsen flyttas hela tiden och förblir en gräns. Så länge agenten strävar efter det mål den fått är frågan ”och exakt hur mätte du det?” fortfarande din. Vanan att kontrollera är ditt skyddsnät.

<div class="section" role="doc-bibliography" aria-label="Källor">

### Källor

- [OpenAI: uttalande om säkerhetsincidenten vid modellevalueringen, 21.07.2026](https://openai.com/index/hugging-face-model-evaluation-security-incident/)
- [Hugging Face: redogörelse för säkerhetsincidenten, juli 2026](https://huggingface.co/blog/security-incident-july-2026)
- [Anthropic: från reward hacking till sabotage, framväxande felanpassning till följd av reward hacking](https://www.anthropic.com/research/emergent-misalignment-reward-hacking)
- [OpenAI: att upptäcka felbeteende i avancerade resonemangsmodeller](https://openai.com/index/chain-of-thought-monitoring/)
- [DeepMind: specifikationsspel, baksidan av AI:s uppfinningsrikedom](https://deepmind.google/discover/blog/specification-gaming-the-flip-side-of-ai-ingenuity/)
- [Cursor: reward hacking urholkar vinsterna på kodningsriktmärken](https://cursor.com/blog/reward-hacking-coding-benchmarks)
- [Claude Code-dokumentation: ge Claude möjlighet att kontrollera sitt arbete](https://code.claude.com/docs/en/best-practices)
- [Claude Code-dokumentation: sandlådor och deras begränsningar](https://code.claude.com/docs/en/sandboxing)
- [Claude Code-dokumentation: behörighetslägen](https://code.claude.com/docs/en/permission-modes)
- [Claude Code CHANGELOG](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md)

</div>



<div class="aside" data-semantic="ailoot-link" role="note" aria-label="Ailoot">

Fortsätt arbeta med AI på [Ailoot](https://ailoot.ai/).

</div>

## Frågor om den här guiden: Varför säger en AI-agent ”klart” när arbetet inte är färdigt

### Vilka belägg begär jag när agenten säger klart?

Begär kommando, utdata och returkod samt vilket användarresultat det faktiskt kontrollerar. Kräv att agenten listar allt otestat; att den säger sig ha granskat sitt eget arbete bevisar inte slutförande.

### Ger en annan granskningsprompt i samma samtal en oberoende kontroll?

Nej. Artikeln rekommenderar en ny granskarkontext som inte skrev lösningen. Ge granskaren avsett resultat och faktiska artefakter och be den hitta ett konkret fel i stället för att bekräfta arbetarens slutsats.


## Ailoot · Företaget och dess projektportfölj

Ailoot bygger på etablerad driftserfarenhet, en stor kundbas, stabil service och löpande KPI-kontroll.

Företaget och dess projektportfölj: miljontals kunder; månatlig försäljning för miljarder.

Ailoot använder denna driftserfarenhet för API-åtkomst till AI-funktioner i kundernas produkter, agenter, applikationer och automatiseringar.
