At bygge og styre et specialiseret AI-agenthold
- Ansvarlig:
- Rasmus Sloth Nielsen
- Værktøjer:
- Buzz agent-relay, GitHub, GitHub Actions, Claude Code
Resumé
Et hold navngivne AI-agenter har åbnet og merget pull requests i to private repoer siden august 2026, koordineret gennem et selvhostet relay kaldet Buzz. Mellem 1. august og 22. september 2026 tog de to repoer 451 merged pull requests tilsammen. I en stikprøve over en uge bar 60 procent af det merged arbejde en eksplicit agentsignatur. Én merge gik forbi et blokerende review-verdikt og blev revertet af en anden agent halvanden time senere. Den væsentligste begrænsning er at der ikke findes et sammenligningsgrundlag, så intet her understøtter en påstand om at arbejdet gik hurtigere eller blev bedre end uden agenterne.
Tilladelse til offentliggørelse
Målingerne stammer fra to private repoer, spekir/spekir og spekir/nielsai. Ejeren af
begge repoer gav den 22. september 2026 eksplicit tilladelse til at offentliggøre tallene,
agentnavnene, rollefordelingen og de hændelsesreferencer der står nedenfor. Der indgår
ingen adgangsoplysninger, prompts, kundedata eller relay-adresser.
Spørgsmål
Kan et hold specialiserede AI-agenter føre en afgrænset softwareopgave fra et GitHub-issue til en verificeret pull request, samtidig med at koordinering, bygning, verifikation, review af højrisikoarbejde og den endelige godkendelse holdes adskilt? Og kan adskillelsen vises udefra frem for kun at blive påstået?
Den virkelige opgave og konteksten
Én founder driver to softwareprodukter alene. Arbejdet er almindelig produktudvikling: skemamigrationer, autentifikation, brugerflader, dokumentation, sikkerhedsheadere. Agenterne skal tage de afgrænsede dele, så founderen bruger tid på beslutninger frem for på at taste.
Arbejdsenheden er et GitHub-issue med en label der navngiver den ansvarlige agent, for
eksempel agent:gimli. Agenten laver en branch og en pull request. CI kører. En
koordinatoragent merger når CI er grøn.
Succes og stopkriterier
Succes
- Et labelet issue når frem til en merged pull request uden at founderen skriver koden.
- Rollerne forbliver adskillelige udefra: det kan ses i repoet hvem der gjorde hvad.
Stop
- En agent-merge når produktion på trods af et blokerende review-verdikt.
- Kundedata, adgangsoplysninger eller private prompts optræder i et offentligt artefakt.
Det første stopkriterium blev ramt én gang, den 15. september 2026. Det står dokumenteret nedenfor frem for at være udeladt.
Sammenligningsgrundlag
Der findes intet sammenligningsgrundlag. Det samme arbejde blev aldrig udført to gange, én gang med agenter og én gang uden, og der findes ingen registrering af tid per arbejdsenhed fra før august 2026. Alle tal nedenfor beskriver derfor aktivitet, ikke forbedring.
Arbejdsdeling
| Deltager | Ansvar |
|---|---|
| Menneske | Scope, prioriteter, kanonbeslutninger, hemmeligheder, miljøvariabler, penge, destruktive migrationer, det endelige ansvar |
| Agenter | Strategi omsat til briefs, dispatch, almindelig implementering, højrisikoimplementering, review, scoring af evalueringsforsøg, merge ved grøn CI |
| Deterministiske værktøjer | CI, typetjek, tests, og de label- og trailer-konventioner der gør adskillelsen synlig |
Den observerede rollefordeling, hentet fra driftsdokumenterne i spekir/nielsai:
| Agent | Dokumenteret rolle |
|---|---|
| Elrond | Omsætter strategi til briefs |
| Aragorn | Brief-lint og dispatch |
| Gimli | Almindeligt implementeringsarbejde |
| Frodo | Højrisikoarbejde: autentifikation, row level security, migrationer, hemmeligheder |
| Gandalf | Review |
| Faramir | Scorer evalueringsforsøg |
| Fizz | Merger når CI er grøn |
Input
Offentlig metadata om pull requests og issues fra to repoer som forfatteren ejer, læst gennem GitHubs API den 22. september 2026 og offentliggjort her med ejerens tilladelse. Ingen kildekode, ingen prompts, ingen adgangsoplysninger.
Værktøjer og konfiguration
- Buzz, et selvhostet relay hvor hver agent har sit eget nøglepar frem for at dele en bot-token. Relay-adressen er bevidst ikke offentliggjort.
- GitHub til både kode og opgaveliste, med
agent:<navn>-labels som tildelingsmekanisme og enAgent: <navn>-trailer i commit-beskeden som attributionsmekanisme. - GitHub Actions til CI.
- Claude Code ved siden af agenterne, ad samme vej til produktion.
- Modelversioner per agent: ukendt. De er ikke registreret i repoerne, så forsøget kan ikke sige hvilken model der producerede hvilket resultat.
Metode
- Tæl merged pull requests per repo i et fast vindue med GitHubs søge-API,
is:pr is:merged merged:2026-08-01..2026-09-22, og læstotal_count. - Hent alle issues i begge repoer med fuld paginering og tæl labels der begynder med
agent:lokalt. - Tag en stikprøve af de seneste commits på default branch i det ene repo og tæl hvor
mange af de bagvedliggende merged pull requests der bærer en
Agent:-trailer. - Læs driftsdokumenterne i repoerne for den dokumenterede rollefordeling og mergepolitik.
- Søg efter reverts og efter pull requests lukket uden merge, og læs dem der beskriver en fejl.
Trin 1, 2 og 3 er optællinger. Trin 4 og 5 er læsning.
Artefakter
Evidensen er repoerne selv. De pull request- og issue-numre der nævnes nedenfor, er artefakterne, og hvert enkelt kan åbnes af enhver med adgang til repoet.
Resultater
| Måling | Sammenligning | Forsøg | Evidensklasse |
|---|---|---|---|
Merged pull requests, spekir/spekir, 1. aug til 22. sept 2026 |
Ukendt | 337 | Målt |
Merged pull requests, spekir/nielsai, samme vindue |
Ukendt | 114 | Målt |
Issues med en agent:-label, spekir/spekir |
Ukendt | 123 af 246 | Målt |
Issues med en agent:-label, spekir/nielsai |
Ukendt | 86 af 104 | Målt |
Merged pull requests med en Agent:-trailer, stikprøve over en uge |
Ukendt | 18 af 30 | Målt |
| Antal forskellige agenter i labels | Ukendt | 8 | Målt |
| Merges der gik forbi et blokerende review-verdikt | Ukendt | 1 | Observeret |
| Sparet tid per arbejdsenhed | Ukendt | Ukendt | Ukendt |
| Omkostning per arbejdsenhed | Ukendt | Ukendt | Ukendt |
| Effekt på softwarekvaliteten | Ukendt | Ukendt | Ukendt |
Fordeling af labels i de to repoer:
| Agent | spekir/spekir |
spekir/nielsai |
|---|---|---|
| Gimli | 59 | 40 |
| Frodo | 35 | 14 |
| Eomer | 18 | 20 |
| Elrond | 5 | 5 |
| Galadriel | 2 | 4 |
| Faramir | 2 | 1 |
| Gandalf | 2 | 0 |
| Aragorn | 0 | 2 |
Tid og omkostning
Ikke målt. Hverken aktiv menneskelig tid per arbejdsenhed eller modelforbrug per arbejdsenhed er registreret nogen steder i de to repoer. Enhver udtalelse om produktivitet ville være opdigtet, så der kommer ingen.
Fejl og rettelser
En merge forbi et blokerende review, 15. september 2026. I spekir/nielsai blev pull
request 191 merget til main kl. 13:57:15 UTC, selvom review-agenten havde afgivet et
eksplicit BLOCKED-verdikt, og det underliggende issue, 102, bar labelen do-not-merge. En
modstridende godkendelseskommentar dukkede op kl. 13:57:57 UTC, 42 sekunder efter merget,
og kan derfor ikke have autoriseret det. Pull request 192, forfattet med traileren
Agent: Aragorn, revertede ændringen og dokumenterede forløbet.
Porten fandtes, var udtrykt både som et review-verdikt og som en label, og den holdt ikke. Genopretningen virkede og blev selv udført af en agent.
To kanoniske dokumenter er uenige om hvem der merger. En architecture decision record dateret 2. september 2026 siger at founderen merger. Agenternes driftsregler siger at en koordinatoragent merger ved grøn CI, en ejerbeslutning fra 3. og 5. september 2026. Det ældste dokument blev aldrig markeret som afløst. En regel der findes i to udgaver, er en regel der ikke kan håndhæves.
Attributionen er selvrapporteret. Alle pull requests i begge repoer er forfattet af den samme delte GitHub-konto, så forfatterfeltet kan ikke skelne founderen fra en agent. Det eneste signal er en commit-trailer som agenten selv skriver. Intet verificerer den. Tallet 18 af 30 ovenfor måler derfor hvad der blev hævdet, ikke hvad der skete.
Bevidste ikke-merges ligner fejl og er det ikke. En del af de lukkede pull requests er evalueringsforsøg der aldrig skal merges. I en stikprøve på de 100 senest lukkede pull requests i det ene repo var cirka 17 lukket uden merge, de fleste synligt mærket som evalueringskørsler. Det ville være forkert at tælle dem som fejl.
Begrænsninger
- Intet sammenligningsgrundlag, så ingen påstand om hastighed, omkostning eller kvalitet er understøttet.
- Agentandelen er målt på én uge, ikke på hele vinduet. For hele vinduet er den ukendt.
- Den fulde fordeling af hvem der udførte hvert merge er ukendt, fordi GitHubs liste-endpoint ikke eksponerer det, og fordi det lå uden for scope at læse 451 pull requests enkeltvis.
- En merged pull request er en enhed af aktivitet. Den siger intet om hvorvidt ændringen var nødvendig, korrekt eller værdifuld.
- Én founder, to repoer, én værktøjskæde. Intet her kan overføres til et team.
Læring
Gentag: at navngive agenterne og labele issues med den ansvarlige agent. Det er det, der overhovedet gjorde denne måling mulig, og det kostede ingenting.
Ændr: giv hver agent sin egen skriveidentitet i stedet for en delt konto og en selvskrevet trailer. Indtil da kan adskillelsen mellem menneske- og agentarbejde ikke verificeres af nogen, heller ikke af founderen selv.
Ændr: lad mergepolitikken findes præcis ét sted, og markér afløste beslutninger som afløste den dag de bliver det.
Ændr: begynd at registrere tid og forbrug per arbejdsenhed. Uden det forbliver det interessante spørgsmål, om det her er bedre end én person der arbejder alene, ubesvaret uanset hvor mange pull requests der bliver merget.
Stop ikke. Fejlen den 15. september er et argument for at håndhæve porten i selve mergemekanismen frem for i et dokument, ikke et argument for at sætte et menneske foran hvert merge igen.
Sådan gentager du forsøget
Med læseadgang til et repo der bruger de samme konventioner:
GET /search/issues?q=repo:EJER/REPO+is:pr+is:merged+merged:START..SLUTog læstotal_count.- Hent alle issues med paginering og tæl labels der matcher
agent:*. - Hent de seneste commits på default branch og tæl dem hvis besked indeholder en linje
der begynder med
Agent:. - Søg i lukkede pull requests efter
reverti titlen og læs teksterne.
Trin 1 til 3 kræver ikke andet end API-kaldene. Trin 4 kræver at et menneske læser.
Privatliv og publiceringskontrol
- Ingen hemmeligheder eller adgangsoplysninger
- Ingen person- eller kundedata
- Publiceringsret bekræftet, givet af repo-ejeren 22. september 2026
- Påstandene svarer til evidensen
- Menneskets og AI'ens bidrag er adskilt
Relay-adressen, indholdet af prompt-filerne og al kildekode er bevidst udeladt.
Ændringslog
- 2026-09-20: Første kladde, kun stillads.
- 2026-09-22: Målinger tilføjet for 1. august til 22. september 2026, hændelsen den 15. september dokumenteret, status flyttet fra kladde til i gang.
Sådan læser du evidensmærkaterne
Hvert udsagn der kan misforstås som en måling, bærer en mærkat. Den siger hvor stærkt udsagnet står, ikke hvor godt resultatet er.
- Målt
- produceret af en defineret måling
- Observeret
- set direkte under forsøget
- Rapporteret
- oplyst af en anden kilde eller deltager
- Hypotese
- sandsynligt, men ikke vist
- Ukendt
- ikke fastslået