AI Task Management Blog for Solo Founders and Small Teams

Multiple AI agents on one board: a field guide

How to run Claude Code, Codex and ChatGPT on one board without duplicate work: task contracts, atomic claims, leases and one review queue.

Weft is the AI task manager for solo founders and small teams.

All articles

By Andrei Finogeev ·

Yes, two or three AI clients can share one board, as long as the board decides who owns each task. In Weft, Claude Code, Codex and ChatGPT all connect to the same MCP endpoint. Each one claims a task with start_task, keeps it alive with heartbeats, and hands back a receipt. If two clients reach for the same card, the second one is told already_claimed, and nobody does the work twice.

We make Weft. Facts about other products come from their official pages, checked on 27 October 2026.

This guide is for a solo founder or a small team running two or three AI clients that keep stepping on each other.

When does a second agent actually help?

More agents do not make work faster by default. They help when the work splits into pieces that do not touch each other, and they hurt when they share files, a test database or a decision nobody has made yet.

SituationOne agent or several?Why
One feature in one repository, finished in one sittingOne agent (with its own subagents if it has them)One context holds everything; a board adds overhead
Two independent fixes in separate areas of the codeTwo agents, separate branches or worktreesNo shared files, so the only risk is picking the same card
Planning and triage in ChatGPT, coding in a terminal agentTwo clients, different jobsChatGPT writes and sorts tasks; the coding agent claims them
Several agents waiting on the same product decisionOne agent, after you decideParallel agents will each guess differently

If you would not hand two pieces of work to two people without talking first, do not hand them to two agents.

What must a task say before an agent can pick it up?

Agents take a task literally and rarely ask. Before a card leaves Backlog, give it:

  • One outcome you can check. Not "improve onboarding", but "add an empty state to the projects page with a create button".
  • Scope. Which files, pages or systems it may touch, and what is out of bounds.
  • A done check. The test, build or URL that shows it worked.
  • The evidence you want back. A pull request link, a commit hash, a deployed URL.
  • Where it stops. Anything irreversible (publishing, production, money) should end in a question to you, not an action.

Weft's default columns are Backlog, Todo, Doing and Done. A simple convention works well: only cards in Todo are ready to claim. Projects keep one repository or client apart from the rest.

What happens when two agents call start_task on the same card?

Moving a card to Doing is not a lock: two agents can read the same Todo card and both start. So in Weft the claim itself is the lock.

A start_task call is one database insert guarded by a unique index, so the database decides who wins. The winner gets a runId and a leaseToken, and the card moves to Doing. The loser gets already_claimed with the task id, the title and a hint not to duplicate the work. It does not matter that one client is a terminal agent and the other a chat app.

For an agent, already_claimed is a normal answer, not an error. The right move is to call get_my_work again and take the next card. We describe the full loop in the claim, heartbeat and receipt loop.

How do heartbeats and the 20-minute lease work?

A claim is a lease, not a permanent assignment. start_task gives a 20-minute lease and tells the agent to renew every 300 seconds. The agent renews it by calling report_progress with its runId and leaseToken. If the agent has lost the lease in the meantime, the call returns lease_lost, and it should stop rather than keep editing.

When a session dies, there is nobody left to say so. Silence is the only signal the board gets, so Weft treats silence as the signal:

  • After 20 minutes with no heartbeat, the run is marked stale, the token is cleared and the task goes back to unassigned.
  • A sweep runs every 10 minutes, and a stale task is also freed at once when another client tries to claim it.
  • While an agent is waiting on a question to you, it keeps the task for 60 minutes. After that the lease drops, but the question stays open.

Heartbeats are tool calls. A 40-minute task with a heartbeat every 5 minutes spends about 8 calls on them, and Free has 200 calls a month, so three daily agents will outgrow it. Pro has no call cap.

How does the board know which agent did what?

Every OAuth client that signs in to Weft is its own actor. Claude Code, Codex and ChatGPT each register separately, and the board shows the name each client registered with. Every history event records which client made it.

Clients without OAuth can use a personal access token; each token is also its own actor, but tokens have no scopes (access tokens). Rights are set per OAuth connection:

  • full (the default): all 32 tools.
  • write: everything except the three destructive tools (trash, archive, complete sprint).
  • read: only the 11 read-only tools.

A sensible split: coding agents on write, anything experimental on read. Disconnecting one client revokes its tokens without touching the others. Weft issues refresh tokens, so a connected client renews its sign-in itself.

Identity on the board is not isolation on disk. Two agents with different names can still overwrite each other in one checkout. Give each coding agent its own branch or worktree.

Where does finished work land, and how much can wait on you?

By default, a completed task goes straight to Done. It stops in your Inbox instead when the task needs review or when a verification check fails. There you choose Accept, Rework, Later or Drop. Rework asks for a note. Questions from request_input land in the same Inbox and on your phone as a push, so you have one place to look, whichever agent asked.

The receipt from complete_task carries an outcome, artifacts you can check, what was not done, unknowns and a nextStep. The nextStep appears above the Accept button, so accepting approves exactly that step. More in what did my AI agent do.

The Inbox has a limit, and with several agents you will meet it. It holds 5 items in a one-person workspace and 10 in a team, or 45 minutes of estimated review, whichever comes first. Questions count toward it. When it is full, start_task refuses with attention_queue_full and tells the agent what it may still do, such as reporting progress or reading the board. Three agents can produce work faster than one person can review it; the limit keeps them from piling up results you will never read.

What breaks, and how do you recover?

FailureWhat you seeWhat Weft doesWhat you do
Two clients start the same taskOne card in Doing, one client told already_claimedThe database lets one claim win; the other is refusedNothing, if the losing agent moves on. If it kept working anyway, tighten its instructions
A session crashes or the laptop sleepsA card in Doing with no progressAfter 20 minutes without a heartbeat the run goes stale and the task returns to unassignedCheck the branch for partial work before another agent picks it up
An agent finishes but never calls complete_taskWork merged, card still in DoingThe lease expires; the task is freed, not closedClose it yourself or ask an agent to complete it with the evidence
An agent needs a decision only you can makeA question in your Inbox, maybe a pushThe claim is kept for 60 minutes; the answer reaches the agent at its next start_task or get_my_workAnswer with one of the options it gave
Too much is waiting on youA full Inboxstart_task refuses with attention_queue_fullReview or drop items; agents can start again as the queue drains
Two agents edit one checkoutUnrelated changes mixed in one diffNothing; Weft does not see your filesSeparate worktrees or branches before running agents in parallel

How do you set up two or three clients?

All three connect to the same endpoint and sign in through the browser, with no key to copy.

# 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 weft

ChatGPT connects through the Weft app in its directory, on every plan including Free. Step-by-step pages: Claude Code, Codex, ChatGPT, Cursor (one-click install). The sign-in follows the MCP authorization spec.

ChatGPT works in turns: it acts while you are in the conversation. It suits planning, writing tasks and answering questions. Long coding runs fit a terminal agent better, because a heartbeat every few minutes needs a session that keeps running.

What does a one-week trial look like?

  1. Day 1: connect two clients. Claude Code and Codex, or one coding agent plus ChatGPT. Put the coding agents on write rights.
  2. Day 1–2: write five to ten tasks to the contract above. One outcome, scope, done check, evidence. Leave them in Todo. If you already have tasks in Linear, Jira, Notion or Trello, import them first; import is free on every plan.
  3. Day 2–5: run both agents on the same Todo queue, each in its own worktree, each told to claim with start_task and finish with complete_task and artifacts.
  4. Day 5: test failure on purpose. Point both agents at the same card and watch one get already_claimed. Kill one session mid-task and check the card is free again after 20 minutes.
  5. Day 7: audit from the board alone. Did any task run twice or stay in Doing after it finished? Could you check every result from its artifacts? Fix the task template before adding a third agent.

How does this compare with Hypertask's approach?

Hypertask's lease model is sound: claim, heartbeat, release, with an expiry. The difference is where that model lives. Hypertask's docs list task leases, evidence and escalation as REST endpoints only, by design, and its tools reference has 21 MCP tools with no lease tool (MCP overview). In Weft, the claim, heartbeat, question and receipt are MCP tools, so any MCP client uses them without extra code.

WeftHypertask
Claim and leaseInside MCP: start_task, report_progress (20-minute lease)REST endpoints only, by design (docs)
MCP tools3221 (docs)
Sign-inOAuth in the browser, with refresh tokens; optional personal access tokensDocumented setup is a copied API key that expires after 30 days; a browser-approved connection lasts 90 days without refresh (docs)
Agent identityEach OAuth client or token is its own actorAgents as service accounts with their own identity
ChatGPT routePublished app in ChatGPT's directory, every plan including FreeCustom GPT with OpenAPI Actions, or a developer-mode custom connector, according to Hypertask (docs)
CLI and REST APINoneCLI on npm and a REST API (docs)
Mobile appsiOS and AndroidNo native iOS app (web app on the home screen); no Google Play listing (docs)
Languages27English only
Price per seatFree: 50 tasks, 200 AI calls a month. Pro: $7 a month or $60 a yearFree: 3 boards per person. BYOK $8 yearly / $10 monthly. Pro $16 yearly / $20 monthly (pricing)
AI creditsNone needed: the thinking happens in your own AI clientBuilt-in AI; BYOK plan uses your own model keys

Hypertask is the better choice if your agents run from scripts or CI and you want a CLI and a REST API, if you want agents as service accounts managed like users, or if you want built-in AI (task writing, smart labels, triage), keyboard-first speed and time tracking. Weft has no CLI, no REST API and no webhooks, and no GitHub or Slack integration. Weft fits when your agents are MCP clients you already use, ChatGPT among them, and you want to answer them from your phone.

For a wider comparison, see MCP task managers compared and a Hypertask alternative.

Do my agents need to talk to each other?
No. They coordinate through the board: claims, receipts and questions. Weft never calls an agent; each one pulls its next task with get_my_work.
Will a crashed agent leave a task stuck in Doing forever?
No. After 20 minutes without a heartbeat the run is marked stale and the task returns to unassigned, so another client can claim it. Check the branch for partial work first.
Won't three agents bury me in reviews?
The Inbox is capped at 5 items for one person (10 for a team) or 45 minutes of review; when it is full, agents cannot start new tasks. Most finished tasks go straight to Done.
Does it cost more to run several agents?
Weft charges per seat, not per agent: Pro is $7 a month or $60 a year per person. The Free plan caps AI calls at 200 a month, which heartbeats from several agents use up fast. See pricing.