Blog

Claude Code en Codex: nachtelijk werken met /goal in 2026

Markdown

Met de opdracht /goal in Claude Code 2.1.139 en Codex CLI kan een AI-agent urenlang zelfstandig werken. Ik leg de configuratie uit, geef praktijkvoorbeelden en bespreek hoeveel tokens het kost.

Lees het volledige artikel

Belangrijkste punten

De opdracht /goal verscheen in Claude Code 2.1.139 (11 mei 2026) en Codex CLI 0.128.0 (30 april 2026, stabiel sinds 21 mei). Je definieert één keer het criterium voor ‘klaar’, waarna de agent zelfstandig blijft plannen, uitvoeren en verifiëren totdat aan het criterium is voldaan of de tokens op zijn. OpenAI liet publiekelijk een run van 25 uur zien waarbij 13 miljoen tokens werden gebruikt. Dit is geschikt voor migraties, benchmarks en refactors met meetbare criteria. Het is niet geschikt voor UI-taken, productiedatabases of vage verzoeken zoals ‘maak het beter’.

Informatie over werken met Ailoot vind je in de documentatie.

Wat is /goal en waarom verscheen het in 2026?

Belangrijkste punten

Vóór /goal vereiste elke beurt van een agent een handmatig ‘ga verder’. De agent opende een bestand, las het, schreef iets, stopte en wachtte. Met de opdracht /goal stel je één keer een voltooiingscriterium in: de agent bepaalt zelf wanneer de taak klaar is en geeft de controle pas terug als hij klaar is.

De situatie die we allemaal kenden vóór april 2026: ik geef Claude de taak ‘migreer het project van Pydantic v1 naar v2’. Het begint, stopt na 30 seconden, ik bekijk wat het heeft gedaan en schrijf ‘ga verder’. Het zet de volgende stap, stopt, en ik schrijf opnieuw ‘ga verder’. Bij een grote migratie betekent dat 200–300 keer handmatig ‘ga verder’ zeggen. In plaats van parallel andere code te schrijven, ben ik de agent aan het begeleiden.

Volgens de analyse van OpenAI lag het probleem niet bij de ‘domheid’ van het model, maar bij de architectuur van de lus. Het model wist niet wanneer het moest stoppen en trapte daarom bij elke beurt op de rem. Geef het een criterium voor ‘klaar’ en het beslist zelf.

Zo ontstond /goal: een mechanisme dat in de harness is ingebouwd, niet in het model.

Deze uitspraak deed hij tijdens de Code with Claude-conferentie in Londen op 19–20 mei 2026. Ze beschrijft wat er in de maand na de lancering van /goal in beide tools daadwerkelijk gebeurde.

Hoe stel je Goal-modus in Claude Code in?

Belangrijkste punten

Claude Code 2.1.139 werd op 11 mei 2026 uitgebracht met de opdracht /goal. Een klein model (standaard Haiku) controleert het criterium na elke beurt. Als het criterium niet is gehaald, neemt Claude nog een beurt. Het criterium mag maximaal 4,000 tekens lang zijn en per sessie is er één doel.

Een minimaal voorbeeld uit de officiële documentatie van Anthropic:

claude -p "/goal CHANGELOG.md has an entry for every PR merged this week"

Deze opdracht start de agent op de achtergrond met één doel. Claude zoekt de PR’s, controleert ze aan de hand van CHANGELOG.md, voegt ontbrekende regels toe en stopt zodra aan het criterium is voldaan.

Typ in de interactieve modus gewoon /goal, gevolgd door de voorwaarde:

/goal all pytest tests pass and mypy strict reports zero errors

Wat Claude vervolgens doet:

  • Na elke beurt ontvangt een apart snel model (standaard Haiku) het huidige criterium en de gespreksgeschiedenis
  • Dit model antwoordt met ‘ja’ of ‘nee’ en een korte reden
  • Als het antwoord ‘nee’ is, neemt Claude automatisch nog een beurt zonder de controle aan jou terug te geven
  • Als het antwoord ‘ja’ is, wordt het doel gewist en krijg jij de controle terug

Na elke beurt controleert een klein, snel model of aan de voorwaarde is voldaan. Zo niet, dan begint Claude een nieuwe beurt zonder de controle aan jou terug te geven.

— Officiële documentatie van Claude Code, https://code.claude.com/docs/en/goal

Harde beperkingen waar je pas achter komt als je ertegenaan loopt:

  • /goal werkt alleen in werkmappen waarvoor het vertrouwensvenster is geaccepteerd. Op een nieuwe machine mislukt de opdracht als Claude die map nog niet heeft onthouden
  • In bedrijfsomgevingen met disableAllHooks of allowManagedHooksOnly is de opdracht niet beschikbaar
  • De voorwaarde mag maximaal 4,000 tekens lang zijn
  • Per sessie kan slechts één doel actief zijn. Een nieuwe /goal vervangt het oude doel
  • Met --resume blijft de voorwaarde behouden, maar worden de tellers voor beurten, tijd en tokens gereset

Bedieningsopdrachten:

  • /goal zonder argument — toont de huidige status
  • /goal clear (of stop, off, reset, none, cancel) — wist het doel

Volgens Anthropic zijn de kosten van de evaluator ‘doorgaans verwaarloosbaar vergeleken met de kosten van de hoofdbeurt’. Haiku beoordeelt de criterium- en gesprekstekst en roept geen tools aan. De controle is dus goedkoop; het dure deel zijn de beurten van het hoofdmodel.

Hoe stel je /goal in Codex CLI in?

Belangrijkste punten

Codex CLI 0.128.0 voegde /goal op 30 april 2026 toe als experimentele functie. Op 21 mei werd de modus stabiel in release 26.519 / npm 0.133.0. De functie werkt met twee promptsjablonen: continuation.md (‘ga verder’) en budget_limit.md (‘stop’). Het doel is gekoppeld aan de thread en blijft na herstarts behouden.

De opdracht ziet er hetzelfde uit als in Claude:

codex
> /goal all vitest tests pass and there are no eslint errors

Codex biedt meer bediening voor doelen:

OpdrachtWat de opdracht doet
/goal conditioneen doel instellen
/goalstatus bekijken
/goal pausepauzeren
/goal resumehervatten
/goal editde voorwaarde wijzigen (met GA)
/goal clearhet doel wissen

Het belangrijkste verschil met Claude is dat Codex zelf controleert of het ‘klaar’ is, in plaats van een apart model. Na elke beurt voegt Codex automatisch de sjabloon continuation.md uit de repository openai/codex aan de context toe. Een letterlijke vertaling:

“Blijf werken aan het actieve threaddoel. Herhaal geen werk dat al is gedaan. Kies de volgende concrete actie richting het doel. Markeer het doel alleen als bereikt wanneer een audit aantoont dat het daadwerkelijk is gehaald en er geen verplicht werk meer over is.”

Wanneer de tokens hun limiet naderen, wordt een tweede sjabloon — budget_limit.md — toegevoegd:

“Het doel heeft zijn tokenlimiet bereikt. Begin geen omvangrijk nieuw werk. Rond deze beurt zo snel mogelijk af: vat de nuttige voortgang samen, benoem het resterende werk en de blokkades, en geef de gebruiker een duidelijke volgende stap.”

De logica is hetzelfde: ‘lieg niet over wat je hebt gedaan’. Voortzetting vereist dat het doel daadwerkelijk nog niet is bereikt. Budget_limit vereist stoppen, maar wel eerlijk beschrijven wat er nog moet gebeuren.

Anders dan Claude koppelt Codex het doel aan de thread, niet aan de sessie. Je kunt bijvoorbeeld de terminal sluiten en de volgende ochtend weer openen. /goal resume pakt hetzelfde doel en dezelfde feiten in het geheugen weer op. Dat is handig voor runs die je volgens je eigen planning in stukken verdeelt.

Hoe verschilt /goal in Claude Code van /goal in Codex?

Belangrijkste punten

Claude scheidt de schrijver en de beoordelaar: het hoofdmodel schrijft code en een apart klein model beoordeelt het werk. Codex is één agent die zijn eigen werk controleert en zichzelf eraan herinnert: ‘lieg niet over wat je hebt gedaan’. De architecturen verschillen, maar het risico op een lus is hetzelfde.

Dit is de meest voorkomende leemte in vergelijkingen, dus laten we het in detail bekijken.

AspectClaude Code /goalCodex /goal
Releasev2.1.139, 11 mei 2026v0.128.0, 30 april 2026 (experimenteel) → v0.133.0 / 26.519, 21 mei 2026 (stabiel)
DoelbereikSessieThread (blijft na herstarts behouden)
Bedieningsoptiesset, clear (+ aliassen)set, view, pause, resume, edit, clear
Wie controleert of het ‘klaar’ isApart model (standaard Haiku)Dezelfde agent, via een ingevoegde prompt
Toegang van de evaluator tot bestandenNee; beoordeelt alleen de gesprekstekstJa; kan bestanden, tests en logs inspecteren
BudgetIn de voorwaardetekst: ‘of stop na 20 beurten’Ingebouwde tokenlimiet + automatische invoeging van budget_limit.md
Harde bestedingslimietGeen; alleen de abonnementslimietGeen; alleen de abonnementslimiet
Lengte van de voorwaardeMaximaal 4,000 tekensNiet gespecificeerd
Waar het werktInteractieve modus, -p, desktopapp, Remote ControlApp, IDE-extensie, CLI, ACP-clients

Het conceptuele verschil is dat Claude de lus ziet als een kwaliteitscontract (een externe evaluator), terwijl Codex die ziet als een uitvoeringsmechanisme (de agent beheert zichzelf).

In de praktijk betekent dit: kies Claude als je wilt dat het criterium voor ‘klaar’ onpartijdig wordt beoordeeld. Kies Codex als je wilt dat de agent tijdens de evaluatie bestanden en logs kan controleren.

Lees meer over de tools zelf in de gids voor Codex versus Claude Code.

Praktijkvoorbeeld: in 31 uur migreren van Pydantic v1 naar v2

Belangrijkste punten

Codex /goal voltooide de migratie van 14,000 regels van een interne service van Pydantic v1 naar v2 in 31 uur werkelijke tijd, verdeeld over vier sessies. De kosten bedroegen ongeveer $44 op gpt-5.3-codex.

De taak werd als volgt geformuleerd: ‘migreer van Pydantic v1 naar v2, alle pytest-tests moeten slagen en mypy strict moet nul fouten melden’.

Wat er gebeurde:

  • Sessie 1 (8 uur)—Codex analyseerde de imports, herschreef BaseModel-declaraties en stelde mypy in
  • Sessie 2 (10 uur)—herschreef validators en liet ongeveer 200 tests mislukken
  • Sessie 3 (7 uur)—herstelde de tests en vond circulaire afhankelijkheden
  • Sessie 4 (6 uur)—loste de resterende mypy-fouten en regressies op

Tokenkosten:

“Totale kloktijd: ongeveer 31 uur, verdeeld over vier sessies. De totale tokenkosten van Codex tegen de tarieven van gpt-5.3-codex: ongeveer $44.”

De prijs wordt vooral bepaald door de outputtokens van gpt-5.3-codex, tegen een tarief van $14 per miljoen. Dat betekent dat 31 uur autonoom werk ongeveer evenveel kost als een ChatGPT Plus-abonnement van meerdere weken.

Wat de agent niet zelfstandig deed:

  • Hij schreef geen migratiedocumentatie voor het team (Codex begreep niet dat dit bij de ‘migratie’ hoorde)
  • Hij werkte de configuratiebestanden voor publicatie met de nieuwe versie van Pydantic niet bij
  • Hij miste één productieregressie, die pas een dag later werd ontdekt

Met andere woorden: /goal deed 95% van het werk; de resterende 5% moet nog steeds handmatig worden gedaan. Dat is normaal voor de huidige generatie en geen reden om het niet te gebruiken.

14 uur ’s nachts aan een macOS-driver werken

Welke taken geschikt zijn voor lange runs 's nachts

Belangrijkste punten

Drivers zijn als categorie slecht geschikt voor interactief werk, maar passen goed bij langlopende lussen.

De soorten taken waarbij deze aanpak de meeste winst oplevert:

  • Low-level werk waarbij een iteratie en controle minuten kosten (compileren, tests uitvoeren)
  • Migraties met duidelijke formele criteria (types, tests, lint)
  • Benchmarks en optimalisaties met meetbare resultaten
  • Documentatie en changelogs met een duidelijke structuur

Claude /goal doet dit net zo goed, maar voor drivers wordt vaker voor Codex gekozen omdat het zelf bestanden en logs controleert in plaats van op een externe beoordelaar te vertrouwen.

Hoeveel kost het, en hoe voorkom je dat je ’s nachts je tokens opbrandt?

Belangrijkste punten

/goal heeft geen harde bovengrens voor uitgaven — alleen de limieten van je abonnement. Een werkelijk uur Codex kost op gpt-5.3-codex ongeveer $1.50–$3. Claude is duurder in gebruik en goedkoper om te evalueren. De enige beveiliging is ‘of stop na N beurten’ in de voorwaarde zelf op te nemen.

Cijfers uit openbare verslagen:

RunDuurTokensKosten
Demo van de OpenAI-designtool25 uur13M(interne run)
Pydantic v1→v231 uur, 4 sessies~3.1M output~$44
Spraakinterviewsysteemin totaal 6 uur en 44 minuten (41 minuten rekentijd)6.8 miljoen input, 94% gecachet-
Font-smoketest5 minuten188,832minder dan 5% van het weekquotum

Het belangrijkste om te begrijpen: Claude Code noch Codex biedt een harde limiet van ‘stop met uitgeven bij $N’. Er zijn drie beveiligingen:

  1. Abonnementslimieten—Pro, Max of Enterprise. Bij het Max-abonnement van Anthropic ($100 per maand) past een run van 14 uur gedurende de nacht ruim binnen het weekquotum
  2. Tekstlimiet in de voorwaarde—schrijf rechtstreeks in /goal: ‘of stop na 20 beurten’. De Claude-beoordelaar leest dit en beëindigt het doel
  3. Tokenlimiet in Codex—ingebouwd mechanisme dat budget_limit.md invoegt wanneer de tokens op zijn

Wat ’s nachts de rekening opdrijft:

  • Een vaag criterium zoals ‘maak het gebruiksvriendelijker’: de agent stopt nooit, omdat de evaluator niet weet wat ‘beter’ betekent
  • Toegang tot externe API’s zonder stubs: elke nieuwe poging kost tokens
  • Lange context: na 6.7M tokens begint contextcompressie en gaat een deel van het geheugen verloren

Lees meer over kosten besparen in de gidsen waar Claude Code-tokens naartoe gaan en hoe je je limieten niet opbrandt.

Wanneer je /goal NIET moet gebruiken: 5 situaties

Belangrijkste punten

Vage criteria zoals ‘maak het mooi’, wijzigingen van één regel, productiedatabases met gebruikersgegevens, beveiligingskritieke wijzigingen en taken met onduidelijke externe afhankelijkheden. In alle vijf situaties loopt de agent vast in een lus of verbrandt hij tokens zonder resultaat.

De documentatie van OpenAI zegt expliciet wat je NIET moet doen:

  1. Wijzigingen van één regel—/goal gebruiken om een variabelenaam te wijzigen kost meer dan het handmatig doen
  2. Vage doelen—‘prestaties verbeteren’, ‘de code opschonen’, ‘het gebruiksvriendelijker maken’. De evaluator heeft geen criterium, waardoor de agent eindeloos blijft ronddraaien
  3. Productiedatabases met gebruikersgegevens—de agent kan een migratie breken en herstellen vanaf een back-up kost meer dan de besparing oplevert
  4. Beveiligingswijzigingen—authenticatie, versleuteling, betalingsverwerking. Een persoon moet hier elke commit beoordelen
  5. Externe API’s zonder stubs—elke netwerkfout kost tokens en ligt buiten je controle

Wat moet je doen als de agent vastloopt?

Belangrijkste punten

Een teken van een lus is dat de agent 3–4 beurten lang dezelfde plek bewerkt en de wijzigingen vervolgens terugdraait. Onderbreek hem met Ctrl+C, controleer het log en maak het criterium daarna strenger of beperk de taak tot één onderdeel. In Claude helpt /goal clear; gebruik in Codex /goal pause en wijzig de voorwaarde.

Zo herken je snel een lus:

  • De agent wijzigt dezelfde bestanden gedurende 3+ beurten en zet ze daarna terug naar hun eerdere staat
  • Dezelfde fouten verschijnen herhaaldelijk in het log, fouten waarop hij al heeft gereageerd
  • Volgens jou is aan de voorwaarde voldaan, maar de agent zegt ‘niet voldaan’
  • Het tokengebruik per beurt stijgt, maar de code boekt geen vooruitgang

Wat je vervolgens kunt doen:

  • In Claude Code: /goal clear en maak de voorwaarde daarna specifieker
  • In Codex: /goal pause, inspecteer de huidige thread, wijzig de voorwaarde met /goal edit en voer daarna /goal resume uit
  • In beide: controleer of het criterium daadwerkelijk verifieerbaar is (een opdracht geeft exit 0 terug of produceert specifieke uitvoer)

Vaak ligt de oorzaak van de lus bij de taak zelf, niet bij de agent. De voorwaarde ‘alle tests slagen’ gaat ervan uit dat de tests überhaupt kunnen slagen. Als er een diepgaand architectuurprobleem in de code zit, blijft de agent rond het symptoom cirkelen.

Criteria voor ‘klaar’: taakdiscipline voor /goal

Belangrijkste punten

Een goed criterium is een opdracht die exit 0 teruggeeft of specifieke uitvoer oplevert. ‘Alle tests geslaagd’ werkt. ‘De code is schoner’ niet. Het beste is om een formele controle te combineren met een meetbare maatstaf, bijvoorbeeld tests plus een minimale testdekking.

OpenAI formuleert deze regel duidelijk in de officiële Codex Cookbook:

Een doel geldt niet als voltooid alleen omdat het model dat denkt. Een doel is pas voltooid wanneer het resultaat is gecontroleerd aan de hand van bestanden, tests, logs, benchmarks of andere concrete artefacten.

— OpenAI Codex Cookbook, Goals gebruiken in Codex, https://developers.openai.com/cookbook/examples/codex/using_goals_in_codex

Voorbeelden van criteria die echt werken:

Type criteriumFormulering
Tests‘pytest tests/ geeft exit 0 terug en de dekking is minstens 80%’
Types‘mypy strict meldt nul fouten op src/’
Lint‘eslint . geeft exit 0 terug voor alle gewijzigde bestanden’
Build‘npm run build wordt succesvol afgerond, zonder TypeScript-fouten’
Benchmark‘k6 run perf test toont een p95 onder 200 ms’
Diff‘git diff toont alleen wijzigingen in bestanden X, Y, Z’
Combinatie‘pytest slaagt EN mypy strict meldt nul fouten EN ruff check slaagt’

De Combo-rij combineert tests, mypy en lint. Als zelfs maar één controle nog rood is, wordt het doel niet afgesloten. De evaluator kan niet vals spelen.

Antipatronen:

  • ‘De code is beter’
  • ‘De gebruiksvriendelijkheid is verbeterd’
  • ‘De prestaties zijn verbeterd’
  • ‘De documentatie is compleet’

Het verschil tussen ‘werkt’ en ‘werkt niet’ is verifieerbaarheid. Als een criterium niet met een opdracht kan worden gecontroleerd, kan het helemaal niet worden gecontroleerd. Dat is ook wat OpenAI bedoelt met ‘coherentie over een lange horizon’: een agent kan lang nadenken, maar kan niet zelf bepalen wat ‘goed genoeg’ is.

Je kunt het idee van ‘één prompt — één resultaat’ uitproberen op een echt project: stel /goal in, formuleer een criterium, voer het uit en analyseer wat er misging.

Maak kennis met Ailoot.

Meer details

Vragen en antwoorden

Wat is een bruikbaar voltooiingscriterium voor /goal?

Gebruik een controleerbaar resultaat: noem de test, typecontrole, build of benchmark en de vereiste uitkomst. Combineer verplichte controles expliciet en vermeld welke bestanden mogen worden gewijzigd; “maak het beter” geeft geen meetbaar stoppunt.

Wat doe ik als de agent dezelfde mislukte bewerkingen herhaalt?

Onderbreek de run en bekijk het log. Blijft de agent dezelfde bestanden aanpassen en terugdraaien, beperk dan de taak of maak het criterium specifieker. Controleer voordat je hervat of de vereiste controles werkelijk kunnen slagen.

Alle artikelen