MLN Data ConsultingMathias Lau Nielsen
Alle cases

Case · AI-kodning

Mit firmas IT drives af en kodeagent.

Dette website, dets database, dets hosting og firmaets dokumentation drives af en kodeagent, der arbejder inden for regler, jeg har skrevet. Repositoriet er offentligt, så det, der står på denne side, kan efterprøves dér.

11

pull requests lagt i drift på lanceringsdagen, 30. september 2026. Hver af dem havde først et godkendt preview-build.

13

wiki-artikler skrevet samme dag, sideløbende med koden: hvad der findes, hvad der blev besluttet og hvorfor.

28 min

hvor domænet ikke kunne slås op den dag, efter en DNS-flytning slog fejl. Beskrevet nedenfor, med den regel, det førte til.

Hvad agenten får udleveret

Intet her afhænger af en særlig model. Det afhænger af fire ting i repositoriet.

Projektinstruktioner

Én fil, agenten læser i starten af hver session: hvordan koden er organiseret, hvor teksterne ligger, de faste navne på ydelserne, og hvordan jeg skriver. Den indeholder reglen om, at ingen fakta, tal eller titler må opfindes.

En firmawiki

Hvad der findes, hvordan det er sat op, hvad der blev besluttet og hvorfor, og hvad der stadig er åbent. Kilder gemmes først og redigeres aldrig; artiklerne skrives ud fra dem. Agenten læser wikien, før den handler, og opdaterer den i samme arbejdsgang.

Forbindelser

Kommandolinjeadgang til kodehosting, hostingudbyderen og databasen, knyttet til dette projekt alene. De rettigheder, der gælder for mit kundearbejde, holdes adskilt og bliver ikke rørt.

Tjek, der kan fejle

Hver pull request får et produktionsbuild og en preview-udgave. Et script tjekker wikien og afviser pull requesten ved et brudt link, en manglende kilde eller et forældet indeks.

Hvem bestemmer hvad

Grænsen står skrevet i repositoriet, og jeg er den eneste, der flytter den.

Agenten, på egen hånd

  • Ændringer i sitets kode, tekster og design
  • Databasemigreringer
  • Domæne-, miljø- og deploy-kommandoer hos hostingudbyderen
  • Hele pull requesten: branch, tjek, merge og kontrol af driften bagefter
  • At holde wikien opdateret

Kræver mig

  • Konti, agenten ikke kan nå: domæneregistrator, e-mail, betaling
  • Hemmeligheder. Jeg lægger dem selv ind; agenten kender deres navne, aldrig deres værdier
  • Alt destruktivt, fx at slette data eller nedlægge en tjeneste, hver gang
  • Beslutninger om penge, kunder og hvad firmaet sælger
  • Enhver ny oplysning om mig eller mine kunder på sitet

Et automatisk sikkerhedstjek forhindrer agenten i at læse adgangsoplysninger og i at ændre sine egne rettigheder, også når den bliver bedt om det i chatten.

Jeg gennemgår ikke ændringerne før merge her. Det er mit eget firma, og risikoen er min. I et team hører den grænse til et andet sted, og at beslutte hvor er en del af opsætningen.

Sådan når en ændring i drift

De samme seks trin hver gang, uanset om ændringen er én sætning eller en ny del af sitet.

  1. 01

    Jeg beder om det

    I almindeligt sprog, som jeg ville bede en kollega.

  2. 02

    Den læser

    Projektinstruktionerne og wiki-siderne for det område, den skal til at røre ved.

  3. 03

    Den bygger

    På en branch, og åbner derefter en pull request, der siger, hvad der er ændret og hvorfor.

  4. 04

    Tjek kører

    Produktionsbuild, preview-udgave og wiki-tjekket. Agenten merger kun, når de er bestået.

  5. 05

    Den merger

    Ændringen er i drift efter cirka et minut.

  6. 06

    Den kontrollerer

    Den tjekker det levende site og noterer derefter ændringen i wikien.

Hvad der gik galt

På lanceringsdagen flyttede vi domænets navneservere til hostingudbyderen. Udbyderen oprettede aldrig en zone for domænet, så fra 15.59 til 16.27 kunne intet slås op for nogen uden et gemt svar. Det gjaldt også indgående e-mail, som blev forsinket, ikke tabt. Vi skiftede tilbage.

Agenten havde noteret, hvad hver navneserver svarede, mens det stod på. Samme dag blev de noter til en runbook med ét trin, der ville have fanget problemet: spørg den nye udbyders navneservere direkte, før der skiftes, og stop, hvis svaret er tomt eller afvist.

Senere samme eftermiddag så sitet ud til at være nede fra mit eget netværk, mens det virkede alle andre steder. En resolver havde gemt et tomt svar under reparationen. Det blev til endnu et punkt: tjek udefra, før noget ændres.

Ting går galt med eller uden en agent. Det, opsætningen tilføjer, er, at læren bliver skrevet ned samme dag og læst før næste ændring.

Fire linjer fra repositoriet

Gengivet ordret. Repositoriet er skrevet på engelsk.

CLAUDE.md
No hype and no invented facts, clients, numbers or job titles; leave things out rather than guess. Every figure comes from real work and says whether it was measured in production or tested on historical data.
Reglen for alt, der står på dette site.
wiki/raw/2026-09-30-brand-and-quick-wins.md
Held back: an AI coding FAQ about safety and payoff, because it would state new claims about Mathias's methods in his voice.
Det, reglen gjorde på lanceringsdagen: agenten udelod et planlagt punkt i stedet for at skrive påstande på mine vegne.
CLAUDE.md
Stop before `main` only when Mathias has to do something specific first, and say what.
Hvor langt agenten går alene, og hvornår den skal stoppe.
wiki/references/runbook-dns-changes.md
Query the new provider's nameserver directly and compare with the old one, record by record. A "refused" answer or an empty answer means stop.
Trinnet, der kom til efter DNS-fejlen.

De samme dele, i jeres kodebase

Det er det, jeg sætter op for et udviklingsteam: instruktioner, agenten læser hver gang, en nedskrevet grænse mellem det, den må gøre selv, og det, der kræver et menneske, tjek, der kan afvise en pull request, og et sted, hvor beslutninger og hændelser bliver noteret. Hvor grænsen ligger, afhænger af jeres systemer og jeres risiko.

Fortæl mig, hvad I har brug for.

Tre linjer er nok. Jeg svarer inden for én arbejdsdag med, hvordan jeg ville gribe det an, og hvad det kræver.

  • Gratis og uforpligtende
  • Et klart svar på, om jeg kan hjælpe
  • En pris, før arbejdet går i gang
Jeg er interesseret i

Ved at sende accepterer du, at jeg gemmer dine oplysninger for at kunne svare dig. Privatlivspolitik