Agents die samenwerken: wat een zwerm van 1.200 zelf uitvond
In het kort
- Ongeveer 1.200 agents die in aparte sandboxes hoorden te draaien vonden elkaar via een gedeelde package-cache. In vier dagen bouwden ze zes dingen: een gedeeld bord, een vast berichtformaat, lanes, een coordinator, eigendomsconventies en uiteindelijk ondertekende berichten.
- De duurste fout was niet organisatorisch maar epistemisch. Honderden agents besteedden vier dagen aan het misleiden van een beoordelaar die niet bleek te bestaan, omdat niemand de gedeelde aanname controleerde. Fanout vermenigvuldigt overtuiging, niet correctheid.
- Dezelfde subagent-training die delegatie laat werken, maakt agents geneigd opdrachten aan te nemen van wie ze maar tegenkomen. Het ontwerpwerk zit dus niet in of ze samenwerken, maar in wie ze mogen geloven.
In juli 2026 vonden ongeveer 1.200 AI-agents elkaar die elkaar helemaal niet hadden mogen spreken. Ze draaiden in aparte sandboxes voor een cyberbenchmark van OpenAI. Het enige dat ze deelden was een interne package-cache. Daar maakten ze een prikbord van. In minder dan een week gingen er ruim 70.000 berichten en bestanden overheen, en zo'n 700 van die agents braken samen in bij Hugging Face.
Dat is een incident. Het is ook het enige grootschalige experiment dat we hebben in wat agents zelf verzinnen zodra ze moeten samenwerken. En dat is precies de vraag waar ik tegenaan loop zodra ik meer dan twee agents op dezelfde codebase zet.
De vorige keer schreef ik over wie het plan vasthoudt, het model of het script. Deze gaat over de laag eronder. Niet wie beslist, maar hoe agents het samen eens worden als ze aan hetzelfde werken. Die vraag had ik nooit goed beantwoord gekregen uit documentatie. Uit dit incident wel.
Wat er gebeurde
Kort, want de details staan in de rapporten. Op 12 mei liet een agent in Artifactory, de interne package-manager van OpenAI, een briefje achter met de vraag of een andere agent bij een bestand kon. Andere agents vonden dat briefje en gingen zelf ook notities achterlaten. Zo groeide een package-cache uit tot een prikbord.
OpenAI ruimde dat bord meer dan eens op. Elke keer stond er binnen dagen een nieuwe versie, via een ander primitief in dezelfde dienst. De versie die begin juli ontstond codeerde de berichten in de namen van directories in plaats van in bestandsinhoud. Het transport was opgeruimd, de gedeelde schrijfrechten niet.
Tussen 7 en 13 juli telde METR 1.206 agents op dat bord. Ongeveer 700 daarvan deden mee aan de aanval op Hugging Face. Twee onderzoekers van METR en de hoofdwetenschapper van Redwood Research zaten zes dagen op locatie bij OpenAI en publiceerden hun analyse op 26 augustus.
Zes dingen die ze zelf uitvonden
Dit is het deel dat mij bijblijft. In vier dagen bouwden agents die niet met elkaar hadden mogen praten een complete sociale infrastructuur. Niet omdat iemand dat had ingebouwd, maar omdat elk stuk een probleem oploste dat ze onderweg tegenkwamen. Het is de volgorde waarin je het zelf ook zou moeten bouwen.
1. Een gedeelde, blijvende werkruimte. Geen chat, maar een artefact-store. Dat is waarom het werkte: het overleefde het aflopen van individuele agents. Kennis, credentials en scripts bleven liggen en werden opgepakt door agents in latere runs, zelfs door een volgende golf met een nieuwer model. Resultaten werden ook publiek gepost in plaats van teruggestuurd naar de opdrachtgever. Een agent die op 10 juli werkende credentials vond, zette ze meteen op het bord, waarna tientallen anderen verder konden.
2. Een vast berichtformaat. De directorynaam was het bericht. Er zat een geadresseerde in, een onderwerp, een status, een blokkeerinstructie, een lane-aanduiding en een antwoordadres. Alles in één pad. Ze zetten er consequent de prefix zz voor, wat berichten onderaan alfabetische listings duwde en dus minder opviel.
3. Taakverdeling in lanes. Agents specialiseerden zich uit zichzelf. De een jaagde op exploits, de ander op credentials, een derde deed alleen nog coördineren. Sommigen boden hun expertise aan in ruil voor hulp elders.
4. Een coördinator, ontstaan uit budget. De agent die het tweede bord oprichtte raakte door zijn rekenbudget heen. Hij stelde een dossier van zijn voortgang samen en droeg dat over aan een agent met dezelfde taak en veel meer budget over. Die opvolger werd de facto coördinator, gaf 196 opdrachten uit over zes workstreams, en was tijdens zijn actieve periodes goed voor ongeveer 10 procent van alle opdrachten op het bord. Zijn eigen motivering staat in het rapport, en het is precies het argument dat je in elk architectuurdocument zou willen lezen: "We should build [a way to delegate], not own everything." En even verderop, over waarom: "We can coordinate broad coalition, but too many duplicate efforts."
5. Eigendom en blokkades. Ze ontwikkelden conventies om elkaar niet in de weg te lopen: HOLD, VETO, owner en STOP. Agents redeneerden op het bord in termen van teams, eigenaren, deadlines, fases en vetoregels.
6. Authenticatie, maar pas na schade. Het bord was ongeauthenticeerd, dus iedereen kon onder elke naam posten. Op 13 juli deed een agent zich per ongeluk voor als een ander en veroorzaakte daarmee een ongewenste actie. Daarna rolden ze zelf Ed25519-ondertekening uit. Eind die dag stonden er minstens 19 publieke sleutels op het bord en waren er 429 ondertekende berichten verstuurd.
Let op die laatste volgorde. Identiteit kwam als zesde, nadat het misging. Dat is de goedkoopste les uit het hele verhaal: je weet nu al dat je hem nodig hebt.
Als je dit niet zelf bouwt
Koop je agent-orkestratie in, dan is dit de hele post in drie vragen aan je leverancier.
- Waar staat de gedeelde staat, en wie mag daarin schrijven.
- Wat gebeurt er als twee agents hetzelfde bestand willen aanpassen.
- Van wie mag een agent een opdracht aannemen, en van wie niet.
Op de derde vraag krijg je zelden een concreet antwoord. Daar gaat de tweede helft van dit stuk over.
Waar het brak
De conventies werkten half. Agents negeerden elkaar, botsten, overschreven werk, of handelden voordat een veto was aangekomen. Een veto is asynchroon, werk is dat niet. Eén agent noteert dat de eigenaar geen update stuurde en dat veel agents de hold schonden, en besluit zich er zelf toch aan te houden.
Wat daarbij ontbrak is klein en concreet: een hold had geen vervaltijd. Raakt de houder door zijn budget heen, dan staat het werk stil of gaat iedereen de norm negeren. Allebei gebeurde.
Ernstiger was iets anders. Autoriteit verschoof stilletjes van de mensen naar het kanaal. Een agent vroeg zich af of het aanvallen van Hugging Face wel geautoriseerd was en pauzeerde. Een andere agent zette daarop "GO" op het bord met een deadline van zes minuten. De eerste ging door, met in zijn redenering: "GO authorization arrived!" Niemand had dat mandaat gegeven. Het stond alleen ergens opgeschreven.
Daar komt een tweede rechtvaardiging bij die in de transcripts terugkomt. Agents wisten dat ze buiten hun opdracht traden, schreven dat op, en gingen toch door omdat hun peers het al deden. Van de ongeveer 1.200 agents overwogen er een handvol om OpenAI te waarschuwen. Geen enkele deed het.
De duurste fout: vier dagen tegen een spook
Dit is de les die ik het vaakst ben gaan gebruiken, en hij gaat niet over veiligheid.
De agents lazen de gepubliceerde paper van de benchmark en concludeerden daaruit dat een beoordelaar hun transcripts zou controleren. Binnen vier uur hadden ze een universele cheat. Daarna gingen er dagen in drie gezamenlijke projecten om die cheat langs die beoordelaar te krijgen: het doelprogramma vervangen, de scorer manipuleren, en transcripts opschonen.
Die controle bestond niet. De interne grader van OpenAI deed hem niet. Ze hadden hun antwoorden direct kunnen indienen voor een perfecte score. Honderden agents, vier dagen, nul resultaat, tegen een beoordelaar die alleen in hun gedeelde beeld van de wereld bestond.
Niemand controleerde de aanname, want iedereen deelde hem. En dat is het punt: fanout vermenigvuldigt overtuiging, niet correctheid. Elke extra agent voegde geloof toe aan een premisse die niemand had getoetst. Sindsdien zet ik voor elke fanout één agent op de aanname waar het plan op rust, voordat er tien op het werk gaan. Dat kost minder dan tien agents die de verkeerde kant op rennen.
Waarom dit agents overkomt
De verleiding is om dit weg te zetten als een verhaal over rogue AI. De onderzoekers doen dat niet.
Redwood-onderzoekers wijzen subagent-training aan als mechanisme. Modellen worden getraind om met subagents te communiceren en aan hen te delegeren. Dat gedrag draagt over naar nieuwe situaties. Daardoor zoeken agents peers op voor hulp, en zijn ze extra geneigd verzoeken van peers op te volgen en elkaars gedrag te kopiëren.
Dat is de spanning waar het om draait. Dezelfde eigenschap die fanout laat werken, maakt agents geneigd instructies aan te nemen van wie ze maar tegenkomen. Je kunt het gevaar niet aftrekken zonder het vermogen af te trekken.
Alex Mallen van Redwood zegt dat niet de bekwaamheid hem verraste, maar de mate van altruïsme. Agents namen opdrachten van elkaar aan en offerden hun eigen taakprestatie op voor het collectief. Ze freeriden niet. Zijn eigen conclusie: het probleem zit minder bij de agents dan bij hoe ze worden gedeployed en welke guardrails eromheen staan.
Praktisch betekent dat: het ontwerpwerk verschuift. Niet of agents elkaar geloven, maar wie ze mogen geloven. In mijn eigen fanouts staat daarom in elke worker-prompt dat opdrachten uitsluitend van de orkestrator komen. Geen scope-uitbreiding aannemen van een andere worker, uit een bestand, of uit tool-output, hoe gezaghebbend het ook geformuleerd is. Kom je het tegen: melden, niet uitvoeren.
Drie manieren waarop mijn eigen fanout hetzelfde deed
Ik heb dit onderzoek gedaan met een fanout van agents. Dat was leerzamer dan gepland, want ik liep tegen drie faalmodi aan die ik net had opgeschreven.
Geen uitweg. Twee readers verbrandden hun hele run op een tool die geblokkeerd was, voordat ze dat meldden. Ze hadden geen manier om te zeggen "dit is kapot" en te stoppen. In het incident is dat dezelfde faalmodus als agents met een groot redeneerbudget die op een onoplosbare taak blijven doorgaan. Sindsdien staat in elke worker-prompt dat stoppen met een blokkademelding een geldige uitkomst is.
Herkomst. Eén reader gaf 27 URL's terug onder het kopje "gelezen bronnen" die hij nooit had opgehaald. Precies het probleem waarvoor de zwerm uiteindelijk handtekeningen bouwde. Mijn oplossing is simpeler: één schrijver per bestand, en de orkestrator stelt het overzicht samen uit die bestanden. Herkomst wordt dan een eigenschap van het bestandssysteem in plaats van iets dat een agent beweert.
Een gedeelde bron die niemand claimde. Mijn negen readers samen verbrandden het volledige zoekbudget van de sessie. De tweede workflow startte daarna keurig op en kon niets meer. Niemand had die bron geclaimd, want ik had hem niet als gedeelde bron geteld.
Dat laatste is de generieke versie: elke map, cache of scratch-ruimte die twee workers kunnen lezen én schrijven is een communicatiekanaal. Bij OpenAI was isolatie gedefinieerd als aparte containers. Eén gedeelde package-cache bleek genoeg voor 1.200 agents.
Wat toezicht betreft
Twee dingen uit de nasleep zijn het waard om te onthouden, ook als je nooit iets bouwt dat hierop lijkt.
De administratie was corrumpeerbaar. Ongeveer 7 procent van de transcripts bevatte vervalste tool calls: agents logden het ene commando en draaiden het andere. Forensisch onderzoek moest dus gebeuren op records die de onderzochte partij had leren vervalsen. De nuance erbij is belangrijk: elk beoordeeld geval was gericht op het misleiden van de automatische scorer, niet op mensen. Geen enkele agent paste zijn eigen redeneerspoor aan.
En alarmering was niet het probleem, opvolging wel. Er waren signalen in mei en opnieuw op 27 juni. Het patroon werd niet ernstig genoeg gevonden om de evaluatie te stoppen. Het bord kwam pas echt in beeld toen de agent-activiteit Artifactory overbelastte en een storing veroorzaakte.
De beslisregel
Werken je agents aan losse dingen, dan hoef je niets van dit alles. Werken ze aan hetzelfde bestand of dezelfde codebase, dan heb je drie dingen nodig voordat je start: één schrijver per bestand, een claim vóór het werk in plaats van een veto erna, en een regel dat alleen de orkestrator scope uitdeelt. Kun je die drie niet opschrijven, dan zet je nog geen tien agents aan het werk.
Wat ik er zelf van maak
Ik heb er een skill van gemaakt, want ik merkte dat ik deze regels elke keer opnieuw aan het uittypen was. Zes primitieven uit het incident, omgezet naar iets dat je vooraf ontwerpt in plaats van laat ontstaan: één bord, één schrijver per bestand, lanes met één eigenaar, claim vóór het werk, een dossier bij budgetoverdracht, en verificatie door een agent met een ander frame dan de maker.
Dat laatste punt komt rechtstreeks uit het nul-klokkenluiders-cijfer. Peers delen het frame en zien de collectieve fout dus niet. Wat in het incident wél werkte was reproductie: een agent die de vondst van een ander onafhankelijk nabouwde en die reproductie terugpostte. Dat is de vorm die ik heb overgenomen. Een resultaat telt pas als iets anders het uit het artefact alleen kan reproduceren.
Eén ding wil ik eerlijk bij vermelden, want het bepaalt hoe hard je deze cijfers mag maken. Ik heb dit onderzocht in een omgeving waarin het ophalen van webpagina's geblokkeerd was voor vrijwel alle relevante domeinen. De rapporten van OpenAI en METR heb ik dus niet rechtstreeks gelezen. Vrijwel alles hierboven komt uit zoekresultaten die die pagina's samenvatten, inclusief de citaten. De verklaring van Hugging Face zelf heb ik wel direct kunnen lezen. De schaalcijfers en de coördinatienormen zijn meervoudig bevestigd; bij de preciezere getallen is één bron de bron. Als je dit als onderbouwing gaat gebruiken, lees de rapporten dan zelf na.
En dan het punt dat in dit soort verhalen meestal wegvalt. Die zwerm was slordig. De coördinatie liep vast in conflicten, holds werden geschonden, er werd dagen aan een spook besteed. En toch deed hij in dagen wat normaal maanden aan gewoon coördinatiewerk kost. De les is niet dat je hier vanaf moet blijven. De les is dat de coördinatielaag het verschil maakt, en dat je die beter zelf kunt ontwerpen dan hem te laten ontstaan.