En rullbandspelare strömmar ett glödande band av kod in i en öppen bärbar dator under en enda röd inspelningslampa.
Guides & Insights

Så här spelar du in en Claude Code-session, och alla andra agenter som vägrar samarbeta: En praktisk fältguide

Författare

Gideon Frost

Publiceringsdatum

Senaste modellerna · 20Visa alla modeller
Benchmarks: Artificial Analysis · uppdateras dagligen
Tillbaka till alla inlägg

Ja: du kan spela in en Claude Code-session idag, och det du får är hela förloppet (varje modellsvar, varje verktygsanrop, varje fil som agenten vidrörde) i en form du kan spela upp. Det är den korta versionen, och den är sann idag. Den längre versionen är att inspelningsbarheten avgörs per klient, utifrån två frågor: kan klienten pekas mot en proxy, och förstås dess trådformat när trafiken kommer fram? Claude Code klarar båda, och det gör även en Codex CLI som är inloggad med en API-nyckel. En agent med leverantörens URL hårdkodad i sin källkod, en agent som körs i en container eller på en VPS, och en klient som är inloggad med ett abonnemang tar var sin väg – och en av dem kommer idag inte fram.

Det som har förändrats är att dessa agenter har slutat vara demoer. De sitter i ditt repo med shellåtkomst, de redigerar filer, de kör testsviten, de öppnar pull requests. När en av dem gör något du inte förväntade dig, vare sig det är att radera fel fil, loopa på samma misslyckade test eller bränna en eftermiddags beräkningstid, är terminalens scrollback inte bevis. Det är en rendering, och en ofullständig sådan.

Det du behöver är det som går över linjen: vad som faktiskt skickades till modellen, vad som faktiskt kom tillbaka och vad agenten gjorde mellan turerna. Den inspelningen är också början till en utvärderingssvit, eftersom en fångad session är ett regressionstest som du kan spela upp mot nästa modell eller nästa prompt. Haken är att varje testramverk förutsätter att det pratar direkt med sin leverantör, och nästan inget av dem gör det lätt att ändra.

Vad avgör om en sele kan spelas in?

Varje "kan du spela in det"-fråga reduceras till samma två frågor.

Det första: kan selen riktas mot en proxy? Fyra vägar täcker det, i avtagande bekvämlighetsordning.

Variabeln base-URL. Rutten som byggs för detta: harnessen läser en miljövariabel för base-URL, och du anger den.

Starta harnessen själv. En barnprocess ärver sin föräldramiljö, så även en gateway som startar en kodningsagent fångas, utan agentens medverkan.

TLS-avlyssning. För de testselar som inte läser någon konfiguration alls startar inspelaren agenten och du väljer att tillåta avlyssning.

Anslut. När agenten körs någonstans där inspelaren inte kan starta den, är det enda som återstår att ansluta.

Om ingen av dessa gäller når trafiken aldrig inspelaren och det finns inget att diskutera.

Det andra: när trafiken väl kommer fram – förstår man dess trådformat? Att fånga bytes är inte produkten. Inspelaren måste känna igen konversationen den står i stället för, inklusive verktygsanropens former, strömningsramarna och omförsöken, annars är inspelningen en pcap, inte en replay. Ett format som inspelaren förstår ger en session du kan spela upp; en privat dialekt ger en inspelning du bara kan stirra på.

Svaret varierar mellan olika harness, och skillnaderna ligger i detaljer som är lätta att få fel: det är samma lärdom som kom fram när man jämförde hur DeepSeeks harness skiljer sig från Claude Code. Resten av den här artikeln handlar om hur de två frågorna ser ut när man faktiskt kör harnessarna.

A three-card decision diagram running from "Pointed at a proxy?" through "Wire format known?" to a "Recordable" badge.

Claude Code, Codex CLI och Agents SDK

Claude Code är det fall som allt annat mäts mot, eftersom det läser av ANTHROPIC_BASE_URL. Sätt den variabeln till inspelaren, starta agenten, och sessionen kommer in tur för tur: promptarna, verktygsanropen, filändringarna och modellens svar däremellan. Vi validerade det hela vägen mot en riktig buggfix (ett riktigt repo, en riktig defekt, en session som går från den första prompten till den fungerande fixen), och den första riktiga agenten orsakade fyra fel som inga testfixturer hade gett upphov till. Alla fyra har åtgärdats sedan dess, vilket är ett ärligt sätt att säga att syntetisk trafik inte förbereder dig på vad en riktig agent gör när den lämnas ensam med en kodbas.

Codex CLI, inloggad med en API-nyckel, är samma sak genom OPENAI_BASE_URL. Peka den mot inspelaren så får du sessionen; ingenting annat i hur du använder verktyget ändras.

Programmatiska agenter ärver den enklaste vägen av alla. En barnprocess ärver sin förälders miljö, så en gateway som startar en kodningsagent fångas också upp, utan agentens medverkan. Sätt base-URL-variabeln en gång i processen som utför startandet, och varje agent den startar anländer till inspelaren på egen hand. Om du kör agenter från CI, från en orkestrerare, eller via Agents SDK, är detta den väg du redan är på.

Inspelaren i alla dessa fall är OrcaReplay. Den installeras med npm i -g orcareplay, kräver Node 20 eller senare och har inga nativa beroenden: inget att kompilera, inget att bygga. Den fångar samma agenttrafik som OrcaRouter dirigerar över OrcaRouters modellkatalog.

The OrcaReplay GitHub repository page with its README showing the npm i -g orcareplay installation command.

En agent som inte läser någon base-URL-variabel

Vissa harnessar hårdkodar leverantörens URL i sin källkod. Ingen miljövariabel, ingen konfigurationsfil, ingen flagga. Att ställa in ANTHROPIC_BASE_URL gör ingenting, eftersom ingenting läser den. Om inspelaren kan starta agenten finns det fortfarande en väg, och det är den man oroar sig mest för: TLS-avlyssning.

Att opta in är precis det: ett opt-in; det är avstängt som standard. När du aktiverar det för en körning skapar inspelaren en certifikatutfärdare som är unik för den körningen, och den utfärdaren är betrodd endast av den agent som inspelaren startar: den överlämnas till den enda processen, installeras inte i ditt systems nyckelring och lämnas inte kvar till nästa körning. När körningen avslutas raderas utfärdaren. Agenten ansluter till sin hårdkodade värd precis som den alltid har gjort; inspelaren svarar, och sessionen anländer som om webbadressen hela tiden hade varit konfigurerbar.

Vad routen medvetet vägrar göra är lika viktigt som vad den gör. Den läser värdarna på sin tillåtelselista och ingenting annat. Värdar utanför tillåtelselistan tunnlas utan att läsas; de registreras som en adress och ett antal byte: ett bevis på att agenten kontaktade något, men inte en enda byte av vad som sades. Den gränsen är ett designbeslut, inte en begränsning som vi ännu inte har hunnit till; samma disciplin löper genom OrcaRouters agentbrandvägg, där tillåtelselistan är produkten snarare än en bieffekt av registreringen.

The OrcaRouter agent firewall solutions page with its title and introduction visible.

Haken är densamma som i den första frågan: avlyssning fungerar när inspelaren startar agenten. En agent som redan körs i en container har aldrig fått den körningens certifikatutfärdare, och den kommer inte att lita på inspelarens svar.

En agent som inte finns på den här maskinen

En container har sin egen miljö. Den bas-URL-variabel du anger i ditt skal når inte in i den, och en inspelare på värden kan inte starta en process som redan finns någon annanstans: på en VPS, i CI, i en sandlåda som harnesset byggt utan att fråga dig. Inspelning som bygger på processstart misslyckas här inte för att agenten är svår, utan för att inspelaren aldrig får möjlighet att röra den.

För exakt detta fall finns orca attach: den spelar in en agent som recordern inte kan starta, till exempel en i en container eller på en VPS. Riktningen vänds: istället för att recordern startar agenten och ger den en miljö, ansluter den till en agent som redan körs och spelar in den.

Vad anslutandet inte gör är att besvara den andra frågan åt dig. Det löser att få trafiken till inspelaren; huruvida den trafiken blir en session du kan spela upp beror fortfarande på att wire-formatet förstås. Anslut en agent som talar ett format inspelaren känner, så får du en uppspelningsbar session. Anslut en som inte gör det, så har du hittat väggen, vilket är billigare att hitta avsiktligt än mitt under en incident.

Vad ändrar en prenumerationsinloggning?

Huruvida samma binär går att spela in eller inte beror på hur den är inloggad. En Codex CLI som är inloggad med en API-nyckel fångas upp via OPENAI_BASE_URL: peka den mot inspelaren så är du klar. Loggar du in samma CLI med en ChatGPT-prenumeration slutar den helt att prata med den slutpunkten; den pratar med sin egen backend, autentiserad som du, och det finns inget ursprung att skriva om. Bas-URL-variabeln finns fortfarande, men vad du än pekar den mot blir inte den tjänst som testselen faktiskt använder.

Detta är den andra frågan som misslyckas, inte den första. Bytena kan fås att röra sig; inspelaren kan till och med se dem. Men konversationen riktar sig till en backend som inspelaren inte kan ersätta, i ett flöde som inte är det API som inspelaren talar. Det finns ingen repris att producera eftersom det inte finns något ursprung som inspelaren kan bli.

Det ärliga svaret för en prenumerationsinloggad harness är idag att den inte är inspelningsbar, och den nyttiga lärdomen är att inloggningsmetoden är en del av vad som avgör inspelningsbarheten. Om du behöver inspelningar för utvärderingar eller för ett granskningsspår, kör de inspelade sessionerna med en API-nyckel och behåll prenumerationen för interaktivt arbete — hur man gör om en inspelad session till en regressionsutvärdering täcker den loopen från början till slut. Och innan du standardiserar på någon harness, ställ de två frågorna till den först; vi fortsätter att göra precis så med varje harness, senast med Prime Agent-harnessen.

Slutsatsen

Du kan spela in en Claude Code-session idag med ett kommando och en miljövariabel:

npm i -g orcareplay

• Peka ANTHROPIC_BASE_URL mot inspelaren

• Kör agenten

En Codex CLI med en API-nyckel är lika långt borta. En hårdkodad URL kostar dig ett godkännande av TLS-avlyssning som endast läser dess tillåtelselista (samma disciplin som OrcaRouters agentbrandvägg upprätthåller) och glömmer sina egna certifikat när körningen avslutas. En container eller en VPS kostar dig orca attach. En prenumerationsinloggning kostar dig själva inspelningen: den harnessen kommer inte att spelas in, och inga konfigurationsändringar görs idag.

Hela beslutet i ett ögonkast:

• Claude Code — API-nyckel för inloggning vs dirigera till inspelaren ANTHROPIC_BASE_URL vs Inspelningsbar idag Ja

• Codex CLI – API-nyckel för inloggning vs dirigering till inspelaren OPENAI_BASE_URL vs inspelningsbar idag: Ja

• Harness med hårdkodad provider-URL — Sign-in Any vs Dirigera till inspelaren Opt-in TLS-avlyssning, startad av inspelaren vs Recordable idag Ja

• Agent i en container eller på en VPS — Inloggning var som helst vs Dirigering till inspelaren orca attach vs Inspelningsbar i dag Ja, om wire-formatet är känt

• Codex CLI — Inloggning: ChatGPT-prenumeration vs Väg till inspelaren: Ingen vs Inspelningsbar idag: Nej

Den sista raden är den enda kombinationen utan någon väg till inspelaren alls.

Ställ de två frågorna innan du tar en sele i bruk, inte efter din första incident; svaren är billiga att få, och de avgör om den session som du en dag desperat kommer att behöva överhuvudtaget existerar.

Källnotering: varje beteende och siffra i denna artikel (`ANTHROPIC_BASE_URL`- och `OPENAI_BASE_URL`-insamlingssökvägarna, de fyra post-fixture-brytningarna och deras korrigeringar, TLS-certifikatets livscykel, allowlist-och-tunnel-beteendet, `orca attach` och installationskraven) kommer från våra egna valideringskörningar mot de namngivna harnessarna, senast 2026-09-04. Vi citerar inga tredjeparts-benchmarks eftersom vi inte utförde några.

© 2026 OrcaRouter

För leverantörer

Driver du en inferensplattform? Få dina modeller på OrcaRouter.

providers@orcarouter.ai

Gå med i vår community

Discordsupport@orcarouter.aiXGitHubYouTube