Meerdere AI-agents op één bord: een praktijkgids
Zo laat je Claude Code, Codex en ChatGPT op één bord werken zonder dubbel werk: taakafspraken, atomaire claims, leases en één beoordelingswachtrij.
Weft is het AI-takenbeheer voor solo-oprichters en kleine teams.
Door Andrei Finogeev ·
Ja, twee of drie AI-clients kunnen één bord delen, zolang het bord beslist wie eigenaar is van elke taak. In Weft verbinden Claude Code, Codex en ChatGPT allemaal met hetzelfde MCP-endpoint. Elk van hen claimt een taak met start_task, houdt hem in leven met heartbeats en levert een bewijsstuk af. Grijpen twee clients naar dezelfde kaart, dan krijgt de tweede already_claimed te horen, en doet niemand het werk dubbel.
Wij maken Weft. Feiten over andere producten komen van hun officiële pagina's, gecontroleerd op 27 oktober 2026.
Deze gids is voor een solo-oprichter of een klein team met twee of drie AI-clients die elkaar steeds voor de voeten lopen.
Wanneer helpt een tweede agent echt?
Meer agents maken werk niet vanzelf sneller. Ze helpen wanneer het werk uiteenvalt in stukken die elkaar niet raken, en ze schaden wanneer ze bestanden delen, een testdatabase, of een beslissing die nog niemand heeft genomen.
| Situatie | Eén agent of meerdere? | Waarom |
|---|---|---|
| Eén feature in één repository, in één zit af | Eén agent (met zijn eigen subagents als hij die heeft) | Eén context bevat alles; een bord voegt overhead toe |
| Twee onafhankelijke fixes in aparte delen van de code | Twee agents, aparte branches of worktrees | Geen gedeelde bestanden, dus het enige risico is dat ze dezelfde kaart pakken |
| Plannen en triëren in ChatGPT, coderen in een terminalagent | Twee clients, verschillende taken | ChatGPT schrijft en sorteert taken; de codeeragent claimt ze |
| Meerdere agents die op dezelfde productbeslissing wachten | Eén agent, nadat jij hebt beslist | Parallelle agents gokken elk anders |
Zou je twee stukken werk niet aan twee mensen geven zonder eerst te overleggen, geef ze dan ook niet aan twee agents.
Wat moet er in een taak staan voordat een agent hem kan oppakken?
Agents nemen een taak letterlijk en vragen zelden iets. Geef een kaart, voordat hij Backlog verlaat:
- Eén uitkomst die je kunt controleren. Niet "onboarding verbeteren", maar "voeg een lege staat met een knop om aan te maken toe aan de projectenpagina".
- Afbakening. Welke bestanden, pagina's of systemen hij mag aanraken, en wat buiten de grenzen valt.
- Een controle op klaar. De test, build of URL die laat zien dat het werkte.
- Het bewijs dat je terug wilt. Een link naar een pull request, een commit-hash, een gedeployde URL.
- Waar hij stopt. Alles wat onomkeerbaar is (publiceren, productie, geld) hoort te eindigen in een vraag aan jou, niet in een actie.
De standaardkolommen van Weft zijn Backlog, Todo, Doing en Done. Een eenvoudige afspraak werkt goed: alleen kaarten in Todo zijn klaar om geclaimd te worden. Projecten houden één repository of klant gescheiden van de rest.
Wat gebeurt er als twee agents start_task aanroepen op dezelfde kaart?
Een kaart naar Doing verplaatsen is geen slot: twee agents kunnen dezelfde Todo-kaart lezen en er allebei aan beginnen. Daarom is in Weft de claim zelf het slot.
Een start_task-aanroep is één insert in de database, bewaakt door een unieke index, dus de database beslist wie wint. De winnaar krijgt een runId en een leaseToken, en de kaart gaat naar Doing. De verliezer krijgt already_claimed met het id van de taak, de titel en een hint om het werk niet te dupliceren. Het maakt niet uit dat de ene client een terminalagent is en de andere een chatapp.
Voor een agent is already_claimed een normaal antwoord, geen fout. De juiste zet is opnieuw get_my_work aanroepen en de volgende kaart pakken. We beschrijven de hele lus in de lus van claim, heartbeat en bewijsstuk.
Hoe werken heartbeats en de lease van 20 minuten?
Een claim is een lease, geen permanente toewijzing. start_task geeft een lease van 20 minuten en zegt de agent om elke 300 seconden te verlengen. De agent verlengt hem door report_progress aan te roepen met zijn runId en leaseToken. Is de agent de lease intussen kwijtgeraakt, dan geeft de aanroep lease_lost terug, en hoort hij te stoppen in plaats van door te gaan met bewerken.
Wanneer een sessie wegvalt, is er niemand meer om dat te melden. Stilte is het enige signaal dat het bord krijgt, dus Weft behandelt stilte als het signaal:
- Na 20 minuten zonder heartbeat wordt de run als verlopen gemarkeerd, wordt het token gewist en gaat de taak terug naar niet-toegewezen.
- Elke 10 minuten loopt er een opruimronde, en een verlopen taak komt ook meteen vrij zodra een andere client hem probeert te claimen.
- Zolang een agent wacht op een vraag aan jou, houdt hij de taak 60 minuten vast. Daarna vervalt de lease, maar blijft de vraag open.
Heartbeats zijn toolaanroepen. Een taak van 40 minuten met elke 5 minuten een heartbeat besteedt daar zo'n 8 aanroepen aan, en Free heeft 200 aanroepen per maand, dus drie agents die dagelijks draaien groeien er snel uit. Pro heeft geen limiet op aanroepen.
Hoe weet het bord welke agent wat deed?
Elke OAuth-client die zich bij Weft aanmeldt, is een eigen actor. Claude Code, Codex en ChatGPT registreren zich elk apart, en het bord toont de naam waarmee elke client zich registreerde. Elke gebeurtenis in de geschiedenis legt vast welke client hem veroorzaakte.
Clients zonder OAuth kunnen een persoonlijk toegangstoken gebruiken; elk token is ook een eigen actor, maar tokens hebben geen scopes (toegangstokens). Rechten stel je per OAuth-verbinding in:
- full (de standaard): alle 32 tools.
- write: alles behalve de drie destructieve tools (naar de prullenbak, archiveren, sprint afronden).
- read: alleen de 11 tools die alleen lezen.
Een verstandige verdeling: codeeragents op write, alles wat experimenteel is op read. Eén client ontkoppelen trekt zijn tokens in zonder de andere te raken. Weft geeft refresh-tokens uit, dus een verbonden client vernieuwt zijn aanmelding zelf.
Identiteit op het bord is geen isolatie op schijf. Twee agents met verschillende namen kunnen elkaar in één checkout nog steeds overschrijven. Geef elke codeeragent zijn eigen branch of worktree.
Waar komt afgerond werk terecht, en hoeveel kan er op je wachten?
Standaard gaat een afgeronde taak rechtstreeks naar Done. Hij stopt in plaats daarvan in je Inbox wanneer de taak beoordeling nodig heeft of wanneer een verificatiecontrole faalt. Daar kies je Accepteren, Herwerken, Later of Laten vallen. Herwerken vraagt om een notitie. Vragen van request_input komen in dezelfde Inbox terecht en als pushmelding op je telefoon, dus je hebt één plek om te kijken, welke agent ook vroeg.
Het bewijsstuk van complete_task bevat een uitkomst, artifacts die je kunt controleren, wat niet gedaan is, onbekenden en een nextStep. De nextStep staat boven de knop Accepteren, dus accepteren keurt precies die stap goed. Meer in wat heeft mijn AI-agent gedaan.
De Inbox heeft een limiet, en met meerdere agents loop je daar tegenaan. Hij houdt 5 items vast in een werkruimte voor één persoon en 10 in een team, of 45 minuten aan geschatte beoordeling, wat het eerst bereikt wordt. Vragen tellen mee. Is hij vol, dan weigert start_task met attention_queue_full en vertelt de agent wat hij nog wel mag doen, zoals voortgang melden of het bord lezen. Drie agents kunnen sneller werk opleveren dan één persoon kan beoordelen; de limiet voorkomt dat ze resultaten opstapelen die je nooit gaat lezen.
Wat gaat er stuk, en hoe herstel je het?
| Storing | Wat je ziet | Wat Weft doet | Wat jij doet |
|---|---|---|---|
| Twee clients starten dezelfde taak | Eén kaart in Doing, één client krijgt already_claimed te horen | De database laat één claim winnen; de andere wordt geweigerd | Niets, als de verliezende agent doorschuift. Werkte hij toch door, scherp dan zijn instructies aan |
| Een sessie crasht of de laptop gaat in slaapstand | Een kaart in Doing zonder voortgang | Na 20 minuten zonder heartbeat verloopt de run en gaat de taak terug naar niet-toegewezen | Controleer de branch op half werk voordat een andere agent hem oppakt |
| Een agent maakt het af maar roept nooit complete_task aan | Werk gemerged, kaart staat nog in Doing | De lease verloopt; de taak komt vrij, maar wordt niet gesloten | Sluit hem zelf of vraag een agent hem af te ronden met het bewijs |
| Een agent heeft een beslissing nodig die alleen jij kunt nemen | Een vraag in je Inbox, misschien een pushmelding | De claim blijft 60 minuten staan; het antwoord bereikt de agent bij zijn volgende start_task of get_my_work | Antwoord met een van de opties die hij gaf |
| Er wacht te veel op je | Een volle Inbox | start_task weigert met attention_queue_full | Beoordeel items of laat ze vallen; agents kunnen weer beginnen naarmate de wachtrij leegloopt |
| Twee agents bewerken één checkout | Ongerelateerde wijzigingen door elkaar in één diff | Niets; Weft ziet je bestanden niet | Scheid worktrees of branches voordat je agents parallel draait |
Hoe stel je twee of drie clients in?
Alle drie verbinden met hetzelfde endpoint en melden zich aan via de browser, zonder sleutel om te kopiëren.
# Claude Code
claude mcp add --transport http weft https://letsweft.com/api/mcp
# Codex: add to ~/.codex/config.toml, then sign in
[mcp_servers.weft]
url = "https://letsweft.com/api/mcp"
codex mcp login weftChatGPT verbindt via de Weft-app in zijn directory, op elk plan, ook Free. Pagina's met stap-voor-stapuitleg: Claude Code, Codex, ChatGPT, Cursor (installatie met één klik). Het aanmelden volgt de MCP-specificatie voor autorisatie.
ChatGPT werkt in beurten: het handelt terwijl jij in het gesprek bent. Het past bij plannen, taken schrijven en vragen beantwoorden. Lange coderuns passen beter bij een terminalagent, omdat een heartbeat om de paar minuten een sessie nodig heeft die blijft draaien.
Hoe ziet een proefweek eruit?
- Dag 1: verbind twee clients. Claude Code en Codex, of één codeeragent plus ChatGPT. Geef de codeeragents write-rechten.
- Dag 1–2: schrijf vijf tot tien taken volgens de afspraak hierboven. Eén uitkomst, afbakening, controle op klaar, bewijs. Laat ze in Todo staan. Heb je al taken in Linear, Jira, Notion of Trello, importeer die dan eerst; importeren is gratis op elk plan.
- Dag 2–5: laat beide agents op dezelfde Todo-wachtrij draaien, elk in een eigen worktree, elk met de opdracht te claimen met start_task en af te ronden met complete_task en artifacts.
- Dag 5: test bewust een storing. Stuur beide agents op dezelfde kaart af en kijk hoe er één already_claimed krijgt. Breek een sessie midden in een taak af en controleer dat de kaart na 20 minuten weer vrij is.
- Dag 7: controleer alles vanaf het bord. Liep er een taak dubbel, of bleef er een in Doing staan nadat hij af was? Kon je elk resultaat aan de hand van de artifacts controleren? Verbeter het taaksjabloon voordat je een derde agent toevoegt.
Hoe verhoudt dit zich tot de aanpak van Hypertask?
Het lease-model van Hypertask klopt: claimen, heartbeat, vrijgeven, met een vervaltijd. Het verschil zit in waar dat model leeft. De docs van Hypertask noemen taak-leases, bewijs en escalatie bewust alleen als REST-endpoints, en de toolreferentie heeft 21 MCP-tools zonder lease-tool (MCP-overzicht). In Weft zijn de claim, de heartbeat, de vraag en het bewijsstuk MCP-tools, dus elke MCP-client gebruikt ze zonder extra code.
| Weft | Hypertask | |
|---|---|---|
| Claim en lease | Binnen MCP: start_task, report_progress (lease van 20 minuten) | Alleen REST-endpoints, bewust zo gekozen (docs) |
| MCP-tools | 32 | 21 (docs) |
| Aanmelden | OAuth in de browser, met refresh-tokens; optionele persoonlijke toegangstokens | De gedocumenteerde setup is een gekopieerde API-sleutel die na 30 dagen verloopt; een in de browser goedgekeurde verbinding gaat 90 dagen mee zonder vernieuwing (docs) |
| Identiteit van agents | Elke OAuth-client of elk token is een eigen actor | Agents als serviceaccounts met een eigen identiteit |
| Route via ChatGPT | Gepubliceerde app in de directory van ChatGPT, op elk plan, ook Free | Custom GPT met OpenAPI Actions, of een custom connector via developer mode, volgens Hypertask (docs) |
| CLI en REST API | Geen | CLI op npm en een REST API (docs) |
| Mobiele apps | iOS en Android | Geen native iOS-app (webapp op het beginscherm); geen vermelding in Google Play (docs) |
| Talen | 27 | Alleen Engels |
| Prijs per plek | Free: 50 taken, 200 AI-aanroepen per maand. Pro: $7 per maand of $60 per jaar | Free: 3 borden per persoon. BYOK $8 jaarlijks / $10 maandelijks. Pro $16 jaarlijks / $20 maandelijks (prijzen) |
| AI-credits | Niet nodig: het denkwerk gebeurt in je eigen AI-client | Ingebouwde AI; het BYOK-plan gebruikt je eigen modelsleutels |
Hypertask is de betere keuze als je agents vanuit scripts of CI draaien en je een CLI en een REST API wilt, als je agents wilt als serviceaccounts die je als gebruikers beheert, of als je ingebouwde AI wilt (taken schrijven, slimme labels, triage), snelheid met het toetsenbord en tijdregistratie. Weft heeft geen CLI, geen REST API, geen webhooks en geen integratie met GitHub of Slack. Weft past wanneer je agents MCP-clients zijn die je al gebruikt, ChatGPT inbegrepen, en je ze vanaf je telefoon wilt antwoorden.
Voor een bredere vergelijking, zie MCP-taakmanagers vergeleken en een Hypertask-alternatief.
- Moeten mijn agents met elkaar praten?
- Nee. Ze stemmen af via het bord: claims, bewijsstukken en vragen. Weft roept nooit een agent aan; elke agent haalt zijn volgende taak op met get_my_work.
- Laat een gecrashte agent een taak eeuwig in Doing hangen?
- Nee. Na 20 minuten zonder heartbeat wordt de run als verlopen gemarkeerd en gaat de taak terug naar niet-toegewezen, zodat een andere client hem kan claimen. Controleer eerst de branch op half werk.
- Begraven drie agents me niet onder de beoordelingen?
- De Inbox is begrensd op 5 items voor één persoon (10 voor een team) of 45 minuten aan beoordelen; is hij vol, dan kunnen agents geen nieuwe taken beginnen. De meeste afgeronde taken gaan rechtstreeks naar Done.
- Kost het meer om meerdere agents te draaien?
- Weft rekent per plek, niet per agent: Pro kost $7 per maand of $60 per jaar per persoon. Het Free-plan begrenst AI-aanroepen op 200 per maand, en heartbeats van meerdere agents hebben die snel opgebruikt. Zie prijzen.