De fleste indlæg her viser dig resultatet. Den polerede ting der virker, en skærmoptagelse, måske en commit. Men det der faktisk sker mellem "jeg har en idé" og "det kører på min telefon" — selve samtalen — det forsvinder som regel.
Det her indlæg gør noget andet. Jeg har bygget en ny komponent til bloggen der kan vise en hel Claude Code-session indefra: min prompt øverst, og foldet ind under den — det Claude faktisk gjorde, grupperet i værktøjskald du kan klikke op. Nederst en lille bjælke med tal: hvor mange værktøjer, hvor mange tokens, hvor mange opgaver. Det er den samme idé som aktivitetsloggen vi har på selve platformen, men skåret op så den passer ind i en historie.
En ting om blokkene nedenfor: teksten inde i dem er Claudes egne ord fra sessionen — uredigeret, på engelsk, præcis som det blev skrevet. Jeg har ikke oversat eller pyntet på det. Det eneste der er ændret er følsomme detaljer, som er maskeret med
****. Hele pointen er at du kan se det rå.
Og historien er den her: lørdag aften ville jeg gå en tur og tænke højt om nogle idéer. Jeg hader at snakke ind i en diktafon. Så jeg spurgte om vi ikke kunne bygge en coach der interviewer mig mens jeg går. Fem timer senere stod den på min telefon. Lad mig vise dig hvordan — prompt for prompt.
Idéen
Jeg startede med at beskrive problemet, ikke en løsning. Bare hvad jeg ville opnå, hvilke byggeklodser vi allerede havde, og et "er du frisk?".
Bemærk hvor lidt jeg sagde. Jeg pegede på et problem og to byggeklodser. Claude brugte 14 værktøjskald på at finde ud af om det overhovedet var muligt, før den foreslog noget — og den fandt ud af at vi allerede havde løst det svære (credentials) i et andet projekt.
"Lad os gøre det som en Go-server nu"
Jeg afbrød den faktisk midt i planlægningen. Jeg ville ikke have en fancy Next.js-klient — bare det mindst mulige der virker.
Og her gik den i stå. Den kunne ikke regne ud hvilke porte tunnellen faktisk kørte på — og i stedet for at gætte videre stoppede den og spurgte mig. Den lagde tre pæne muligheder på bordet:
Jeg valgte ingen af dem. Jeg havde lige genstartet Aspire på rod-projektet og kunne se at tunnellen faktisk virkede — bare på en helt anden port end vores dokumentation påstod. Så jeg skrev mit eget svar i tekstfeltet, og med det kunne den fortsætte selv (fold "Se hvad Claude gjorde" ud nedenfor):
The pks-agent-tunnel server at tunnels.agentics.dk isn't serving (Traefik default on :443, FreeSWITCH on :7443). How do you want to expose the coach for your walk?
i restarte aspire on my root project and https://ws-relay--agentic-tunnel.tunnels.agentics.dk:8443/ so maybe our documentation on how to get tunnel to work is missing a piece?
Den go-server-prompt er jeg stolt af — knap 40 ord, 72 værktøjskald, 226K tokens, det meste var test mod den ægte API. Men læg mærke til hvor den gik i stå: den ramte :7443, fik FreeSWITCH i hovedet, og kunne ikke regne portene ud. Det var ikke noget den gravede sig ud af selv — den spurgte, og jeg gav den den URL der virkede på :8443 plus mistanken om at dokumentationen manglede en bid. Derfra læste den AppHost.cs, fandt :17443/:8443 og rettede deployment.md. Det er hele pointen med blokkene her: du kan se præcis hvor jeg styrede, og hvor den klarede resten selv.
"Optager vi serverside?"
Den virkede. Nu kom de praktiske spørgsmål — hvilken coach skal jeg bruge, og gemmer vi den rå optagelse?
Læg mærke til detaljen i de foldede værktøjskald: pkill -f /tmp/coach-bin dræbte sin egen shell fordi kommandolinjen indeholdt den streng den ledte efter. Det er præcis den slags der forsvinder i et almindeligt "jeg tilføjede optagelse"-indlæg — men det er der den lærte tingene.
"Kan den selv lægge på?"
"Kunne vi lave en podcast?"
Her blev det interessant. Jeg spurgte om en to-trins-podcast: en producent der rammer vinklen, og så et værktøj der skifter stemmen til en vært der interviewer mig.
Igen mønsteret: find den ene risiko der kan vælte hele idéen, og bevis at den ikke gør, før du bygger resten.
"Færdiggør denne feature"
Og så skrev jeg tre ord. Det her er den session jeg helst vil vise dig hele vejen igennem — fordi det er her det rodede arbejde sker. 170 værktøjskald. Klik den op.
Excellent — the core feature works perfectly:
- Phase swap fired ✓ with a great distilled title: "Fra Koder til Dirigent: AI-agenternes Revolution i Softwareudvikling"
- Voice swapped ✓ (producer 619 KB vs host 2.26 MB — clearly different persona; the host did a real radio intro then interviewed with follow-ups)
The phase swap works again, but the probe exposed a real bug (not just a probe artifact): when coach.stop fires while the coach is mid-response, the summary response.create collides → "Conversation already has an active response" → show notes never generate. That can happen on a real hang-up too (you tap Læg på while the coach is talking). Let me fix it properly — cancel any in-flight response first, then trigger the summary once it clears.
There's a data race now — responseActive/summarizing/summaryPending are touched from both the browser and Voice Live goroutines. Let me make those three atomic (and move the summaryBuf reset into the VL goroutine so it stays single-owner).
Server is clean — no error, no panic. The session ran the full 2m41s with turns=3: the producer just kept asking clarifying questions and chose not to call start_interview this run, even after the nudge. That's model non-determinism, not a bug (the swap fired correctly in the two earlier runs).
The transcript is genuinely great — the producer→host handoff, the radio intro, the interview all work. The only real defect: the closing show-notes generation got overridden by the host's strong "interview the guest" persona, so it role-played a guest answer instead of writing show notes (summary.md is wrong). A response-level instruction isn't forceful enough to break character.
Still wrong — line 19 is another interview question, not show notes. The session.update instruction swap alone still isn't overriding the host's momentum. The model follows a user turn far more reliably than a mid-conversation system-instruction change. Let me make the summary prompt an explicit user message (after a brief "you're now an editor" persona swap):
Now I can see it clearly: while summarizing (summaryPending=false), the summary response is generating — but as a long stream of response.audio.delta (the model speaks the whole show notes, ~35s+), and the audio_transcript.done that triggers finalize only arrives after all that audio. The 25s watchdog killed it first. The summary works; it's just slower than the watchdog.
The full podcast flow now works end-to-end — proper structured show notes (Titel / Beskrivelse / Kapitler / Bedste citater / Vigtigste pointer), with real guest quotes pulled from the interview. Let me verify the disk artifacts and confirm I didn't regress the coaching path:
Det her er hele pointen med det her indlæg. "Finish this feature" ser triviel ud i en commit-besked. Men foldet ud er det fire forskellige bugs — en kolliderende response, et data race, model-nondeterminisme, og en watchdog der var for utålmodig — hver fundet ved at køre probes mod den ægte API og læse hvad der faktisk skete. Det er ikke magi. Det er metode.
Og virker det så? Her er den allerførste optagelse jeg lavede — podcast-mode, hvor værten interviewer mig om min egen rejse med AI-agenter og vibe coding. Helt uredigeret. Kapitlerne nedenunder er dem Claude selv genererede som show notes bagefter:
Podcast-mode — først rammer en producent vinklen, så skifter den til en vært der interviewer mig. 11:02, dansk, helt uredigeret. Kapitlerne er Claudes egne show notes.
Sendt afsted
Hvorfor vise det sådan her
Fem timer. Ni prompts der betød noget. En stemmecoach der optager mine gåture, lukker pænt ned når jeg beder den om det, og kan skifte til en podcastvært der interviewer mig — live på min telefon.
Men det jeg gerne vil have du tager med er ikke coachen. Det er formen på arbejdet, som du kan se i de foldede blokke ovenfor: jeg beskrev problemer, ikke løsninger. Claude fandt den ene risiko i hver feature og beviste den væk før den byggede. Og det der så ud som "finish this feature" var i virkeligheden fire bugs jagtet med probes mod en ægte API.
Det er det et almindeligt indlæg skjuler. Og fordi blokkene ovenfor er Claudes rå ord — ikke en renskrevet version — kan du selv se det. Fra nu af vil jeg dele flere af mine sessioner på den her måde — ikke kun det polerede resultat, men hele samtalen. Klik dig igennem dem. Det er der det rigtige sker.
Og her er kvitteringen for de fem timer:
Prisen er en estimeret pay-as-you-go API-pris — på abonnement betalte jeg 0 kr. per token. Det meste af den er cache-læsninger (hele konteksten genlæses hver tur). Og hullet kl. 20 er selve gåturen: bygget kl. 17–19, ud at gå med coachen, hjem og gøre den færdig kl. 21.
Del af #100DaysToOffload — dokumentering af agentic development i 2026
