← Blog
Comparisons

Best Issue Tracker for Coding Agents (2026): 7 Tools Compared, Two Raced Live

The best issue tracker for coding agents depends on who hands out the work. Linear, GitHub Issues, Beads, Jira, Plane, YouTrack and Radial compared on the Assign, Claim, Close test, with feature tables for CLI, MCP, agent pricing, permissions and git, and benchmark data: in live claim races, Linear had more than one claimant in 10 of 10 rounds and Radial in 0 of 10.

Radial30 min read

Updated: 2026-11-04.

The best issue tracker for coding agents depends on one question: do humans assign work to agents, or do agents claim it themselves? If a person or an orchestrator hands each issue to one agent, pick the tracker with the best delegation, which today is Linear. If agents pick their own work from a shared queue, the claim must be atomic. In our live race against Linear on 2026-11-02, 20 workers per round over 10 rounds, more than one worker was told "claimed" in 10 of 10 rounds, with 183 silent overwrites. In the same race against Radial on 2026-11-04, exactly one worker was told "claimed" in each of the 10 rounds, the other 190 got a 409, and nothing was overwritten. To choose, run the Assign, Claim, Close test: atomic claim, read and write from a CLI or MCP, and close with evidence.

What we measured and what we read: two trackers, Linear and Radial, were raced live. The no-tracker baseline (TODO.md in git) was run as a scripted race. Radial's hosted MCP tool list was measured live. Everything else comes from vendor docs and pricing pages, each with its date. Every benchmark number below comes from the public benchmarks folder (evidence.json, runs of 2026-11-02, plus the Radial race of 2026-11-04), with its evidence id. The summary table is also published as CSV.

#The Assign, Claim, Close test

Score each tracker on three criteria. Each one is a thing an agent does on every issue.

  1. Atomic claim. Two agents reach for the same issue at the same moment. Exactly one must win, and the other must be told it lost. A plain assign is last-write-wins: both agents get a success.
  2. Read and write from a CLI or MCP. The agent lists, creates, updates and comments without a human relaying anything: an official CLI with JSON output for agents in a shell, or an MCP server for agents in an MCP client.
  3. Close with evidence. The agent closes the issue with proof a human can check: a comment with test output, a linked PR, or an attached file.

If humans assign every issue, criterion 1 matters less, and delegation (who owns the issue, who gets told) matters more.

#Results

Seven trackers on the Assign, Claim, Close test. Race results only where we measured them (Linear 2026-11-02, Radial 2026-11-04, raw data in evidence.json). Prices and vendor facts verified on vendor pages as of Nov 4, 2026.
TrackerClaim modelOfficial CLIMCPRace resultPricing modelBest for
LinearAssign or delegate; no conditional updateNone for issuesOfficial, mcp.linear.app/mcp, 60 toolsRaced live: more than one claimant in 10 of 10 rounds, 183 silent overwritesPer user; Free up to 250 issues; Basic $10 per user per month billed yearly; agents not billed as seatsHumans delegating issues to agents, Cursor teams
GitHub IssuesAssign; no conditional claim documentedgh issueOfficial, github-mcp-serverNot runPer user; Issues on GitHub Free; Team $4 per user per monthWork that lives next to the PRs
Beadsbd update <id> --claim, documented as atomicbdbeads-mcp, in the Beads repoNot runMIT-licensed; runs in your repoOne agent's memory inside one repo
JiraAssign; no conditional assign documentedacliOfficial, Rovo MCPNot runPer user; Free up to 10 users; Standard $9.70 per user per month; Rovo creditsCompanies already on Jira, agents in a shell
PlaneAssign; no conditional claim documentedNone for issuesOfficial, mcp.plane.soNot runPer user; cloud Free up to 12 users; Pro $6 per user per month billed annually; AGPL-3.0 self-hostingTeams that want to self-host
YouTrackAssign; no conditional claim documentedNone found in its docsBuilt in, <instance>.youtrack.cloud/mcpNot runPer user; Cloud free up to 10 usersJetBrains shops
RadialConditional claim: one winner, every other claimant gets a 409radialOfficial, mcp.radial.build, 45 toolsRaced live: one claimant in each of 10 rounds, 190 rejected with a 409, 0 silent overwrites$50 per human user per year, flat; agents not billed as seatsSeveral agents claiming from one queue, with a board for humans

Download this table as CSV, with a source and a verified date on every row.

Two of the seven were raced live: Linear and Radial. "Not run" means we have no measurement, not that the tracker failed. Beads documents an atomic claim; we have not raced it.

#What the benchmark measured

The benchmark compares Linear, Jira Cloud, Radial and a no-tracker baseline on nine agent tasks, from creating an issue to resuming after a session ends. Each number carries one label: MEASURED (a command in the folder produced it), DOCUMENTED (a vendor page, or Radial's source at commit 9126321), SIMULATED (a scripted agent: git, shell and HTTP, no model) or ESTIMATE. GitHub Issues, Beads, Plane and YouTrack are not in the benchmark; their cells below are from docs.

#The claim race, live against Linear and Radial

Both races have the same shape: 20 workers per round start at a barrier, 10 rounds, one fresh issue per round, and each worker tries to claim the issue once. Linear has no conditional update, so its race used the claim an agent can actually write: read the issue, and if it still says Todo, call issueUpdate to assign and start it (L-LIVE-RACE). Radial's race called POST /api/v1/issues/{id}/claim once per worker, a conditional update that succeeds only if the issue has no assignee or the caller already holds it, and returns a 409 otherwise (R-LIVE-RACE).

Linear vs Radial on the same race. Evidence ids L-LIVE-RACE (claim-race-graphql.json) and R-LIVE-RACE (claim-race-rest.json) in evidence.json.
MeasureLinearRadial
Rounds1010
Workers per round2020
Identities1 API key, shared by 20 threads20 distinct agent API keys, one per worker
Claim methodRead, then issueUpdate if still Todo (assign and start)Conditional POST /claim (sets the assignee only)
Rounds with more than one worker told "claimed"10 of 100 of 10
Workers told "claimed"193 of 20010 of 200 (1 per round, each the final owner)
Rejected0 (7 read the issue as already claimed and stopped)190, each with a 409
Silent overwrites (told "claimed", then overwritten, with no error)1830
Errors00
Date2026-11-022026-11-04
WhereA scratch Linear workspaceProduction, in Radial's own internal workspace
Evidence idL-LIVE-RACER-LIVE-RACE
Terminal render of jq run over two benchmark files. From 2026-11-02/linear-live/claim-race-graphql.json, one line per round for issues RAD-10 to RAD-19: 20 workers each, 17 to 20 believed they claimed the issue, 16 to 19 silent overwrites. From 2026-11-04/radial-live/claim-race-rest.json, one line per round for issues BENCH-54 to BENCH-63: 20 workers each, 1 believed it claimed the issue, 19 rejected with a 409, 0 silent overwrites. A summary line per file: Linear 10 rounds with multiple claimants and 183 total silent overwrites, Radial 0 and 0.

The image is the two raw benchmark files read with jq, rendered on Nov 4, 2026: claim-race-graphql.json (Linear, 2026-11-02) and claim-race-rest.json (Radial, 2026-11-04). The issue keys are from the workspaces each race wrote to. In Linear's race, the lowest "claimed" count in one round was 17 (RAD-15) and the highest was 20 (five rounds).

The two runs differ in method, and the differences matter:

  • Identities. All 20 Linear workers used one API key, so every update set the same assignee; each worker wrote its own marker into the issue, and the 183 overwrites are markers another worker replaced. Separate identities add no precondition to issueUpdate, so we expect the same result, but we have not run it. Radial's race used 20 identities because a re-claim by the current holder is an idempotent success: with one key, every worker would get a success, and the race would test nothing.
  • What the claim writes. Linear's update assigned the issue and moved it to started. Radial's claim sets only the assignee; it does not move the status.
  • A discarded run. On production, an issue created by an agent is auto-assigned to the key's human owner. Our first Radial run did not account for this, so all 200 claims got a 409, and we discarded it. The harness now unassigns each issue and reads it back as unassigned before the round. All test issues were deleted and the keys revoked after the run.

#The no-tracker baseline

The baseline is the setup most agent users start with: a TODO.md in git. Two scripted agents both took "first open task", which is the usual heuristic and the worst case (summary.json).

No-tracker baseline, scripted agents (SIMULATED workflow, MEASURED results), 2026-11-02. Evidence ids E-BASE-RACE-* and E-BASE-MERGE-*.
ScenarioResult
Two agents, one checkout, both claim the first open taskSilent lost claim in 20 of 20 trials; no error to either agent
Two clones pushing to one remoteOne push rejected in 20 of 20; the loser hit a rebase conflict in 20 of 20
Two branches each append a task to TODO.md10 of 10 merges conflict
Two branches close adjacent tasks10 of 10 merges conflict
Two branches close tasks 8+ lines apart0 of 10 merges conflict
Terminal render of jq run over the baseline summary.json: shared checkout race n 20, same task 20, lost update 20; git race n 20, push rejected 20, rebase conflict 20; merge conflicts 10 of 10 for both append, 0 of 10 for far apart closes, 10 of 10 for adjacent closes.

Git beats a shared checkout here: it rejects the second push, so the collision is visible. It still hands the repair to the agent. The file also grows: an agent that reads TODO.md and DECISIONS.md whole reads 7,325 bytes at 50 decisions, 28,916 at 200, and 144,451 at 1,000 (E-BASE-SCALE-*). Resuming after a session ends re-read 7,217 bytes at 50 tasks (E-BASE-T8-bytes).

One real agent ran the baseline too. Claude Code (Sonnet) picking up the next task from TODO.md took a median 5 turns, 125,740 input tokens (112,459 of them cache reads), 664 output tokens, 11.3 seconds and $0.071, and succeeded 3 of 3 times (E-TOK-BASE-T2-*). n=3 is below the benchmark's own bar of 5.

#MCP payload and a scripted Linear flow

An MCP client loads the server's whole tools/list into the agent's context before the first call. We measured two.

MCP tools/list measured on 2026-11-02 (evidence ids L-LIVE-MCP-TOOLS, R-LIVE-MCP-TOOLS, E-RAD-STDIO-*). More bytes is not more capability.
ServerToolstools/list bytesBytes per tool (about)
Linear, mcp.linear.app/mcp (server 1.0.2)60101,4471,690
Radial hosted, mcp.radial.build/mcp4521,020470
Radial local, radial mcp over stdio4112,923315

A scripted flow against Linear's MCP server (create, list next, claim and start, proof comment, done, done note) took 6 calls and a median 3,187 ms per flow (min 2,608, max 3,293), about 9.1 KB read back, over 5 trials with no model time (L-LIVE-T1T4). We have no live Radial task run, so there is no Radial latency to compare it to.

#Capability coverage

The benchmark scores 19 things a coding agent does in a tracker against each official surface: yes = 1, partial = 0.5. Three rows (prototype preview, session logs, done-proof) describe features only Radial ships, so the second score drops them.

Coverage scores from coverage-matrix.md, 2026-11-02. Linear MCP has 8 of 19 cells "unknown" in this matrix because Linear publishes no tool list; they have not been re-scored from the live tool list.
SurfaceScore of 19Without the 3 Radial-only rows
Radial CLI16.013.0
Radial MCP15.513.5
Jira CLI (acli)12.012.0
Jira MCP (Rovo)7.57.5
Linear MCP7.0 (8 cells unknown)7.0
Linear official CLI0 (none exists)0

Read the scores with three caveats. We picked the rows. Radial is scored from its own source, which shows everything it does, while Linear and Jira are scored from docs, which can leave things out. And Linear's low score is mostly unknowns: our Jira vs Linear comparison re-scores those cells from the live tool list. Radial loses or ties on bulk edits in the CLI (Jira's acli has them), webhooks (no Radial surface manages them) and import or export over MCP.

#Feature matrix

"Not documented" means we could not find it on the vendor's pages, not that the feature is missing. Dates: vendor facts and prices verified on Nov 4, 2026, except tool and command counts, rate limits and Jira's credit figures, which are from Nov 2, 2026. Radial from its source and its CLI on main, Nov 4, 2026.

#Claim and close-out

How each tracker handles the claim, the close and the human review. Vendor docs, dates as in the section intro.
TrackerClaim model and atomicityEvidence at closeReview UI for humans
LinearDelegate to an agent app, which "sets it as the delegate, not the assignee", or assign. No conditional update; raced live, last write winsComment; PR linked through the GitHub integrationLinear web and desktop app
GitHub IssuesAssign, including to Copilot (gh issue edit 23 --add-assignee "@copilot"). No conditional claim documented; the API adds Copilot "while keeping other assignees"The PR that closes the issue, in the same repogithub.com issues, PRs and Projects
Beadsbd update <id> --claim: "the first claim wins". Over the experimental HTTP backend against older servers, list and claim are two stepsbd close <id>No official UI; community-built UIs
JiraAssign (acli jira workitem assign, editJiraIssue). No conditional assign documentedComment; development panel linksJira web app
PlaneAssign. No conditional claim documentedComment; GitHub and GitLab integrations on Pro and upPlane web app
YouTrackAssign (MCP tool change_issue_assignee: "Assigns an issue to the specified user."). No conditional claim documentedComment; linked VCS commitsYouTrack web app
Radialradial claim, claim_issue, POST /v1/issues/{id}/claim: one conditional write, a 409 naming the holder for every other claimant, CLI exit 3radial close -m; radial build gate --exec records a test result the CLI ran itself; HTML prototypes attach with a Preview URLWeb board, issue threads, build records and previews

#Agent surfaces: CLI, MCP and API

Official agent surfaces. Tool counts measured live on 2026-11-02 where marked; everything else from vendor docs, dates as in the section intro.
TrackerOfficial CLIMCP serverAPI
LinearNone for issues. linear-release and a CLI Importer only; community CLIs such as schpet/linear-climcp.linear.app/mcp, 60 tools (measured); read-only endpoint at /mcp/readonlyGraphQL; 2,500 requests an hour per API key
GitHub Issuesgh issue (create, list, edit, close, develop, --json)github-mcp-server, hosted at api.githubcopilot.com/mcp/; issue tools include list_issues, issue_write and assign_copilot_to_issueREST and GraphQL
Beadsbd: bd ready, bd show, bd update --claim, bd closebeads-mcp on PyPI, in the Beads repo; the project recommends the CLI where the agent has a shellNone; the CLI reads a local database
Jiraacli: 46 documented commands, --json, bulk edits by JQLRovo MCP at mcp.atlassian.com/v2/mcp: 22 primary tools, 248 documented, the rest behind discoverREST; 100 requests a second for GET and POST
PlaneNone for issues (the Prime CLI manages self-hosted servers)makeplane/plane-mcp-server, hosted at mcp.plane.so/http/mcp; the hosted service cannot reach private instancesREST with an API key; 60 requests a minute
YouTrackNot documented (community CLIs only)Built into Cloud and Server at <base-url>/mcp, Streamable HTTP, no stdioREST with permanent tokens
Radialradial 1.3.0: 32 top-level commands, --json on every commandmcp.radial.build, 45 tools (measured); local radial mcp, 41 toolsREST /v1; 120 requests a minute per credential

#Agent identity, permissions and pricing

Whether agents cost seats, how an agent credential is limited, and list prices, verified as of Nov 4, 2026.
TrackerAgents billed as seatsAgent permissionsPricing
LinearNo: "Agents are not counted as billable seats in Linear." Linear Agent's own work draws AI creditsAgents install as OAuth apps; API keys limited to Read, Write, Admin, Create issues or Create comments, and to teams; read-only MCP endpointFree (250 issues); Basic $10 and Business $16 per user per month billed yearly; Enterprise custom
GitHub IssuesNot documented for agents. GitHub Apps are not on GitHub's list of billed users; organization members areFine-grained personal access tokens, limited to specific repositoriesIssues on GitHub Free; Team $4 per user per month
BeadsNo seats: no service to billNot documented; an actor name (--actor, BEADS_ACTOR) for the audit trailMIT-licensed, no paid tier
JiraNot on a person's token or a service account: 5 service accounts free, more need Atlassian GuardProject permission schemes on paid plansFree up to 10 users; Standard $9.70 per user per month (new purchases); Rovo credits past the pool
PlaneInstalled agents "do not count as billable users" (agents platform, beta)Not documented for agent credentials; workspace API keysFree up to 12 users; Pro $6 and Business $13 per user per month billed annually; 500 and 1,000 AI credits per seat
YouTrackNot documented for agents; "Each unbanned standard user account takes up one user license."A permanent token carries its owner's permissionsCloud free up to 10 users; $5.40 per user per month on monthly billing (JetBrains sales help)
RadialNo: agent members are left out of the seat countKey scopes read, triage or write, workspace-wide (no per-project limit)$50 per human user per year, flat; no free tier, no monthly plan, no meter

#Where the data lives: hosting, offline and git

Hosting model, offline use and git integration. Vendor docs, dates as in the section intro.
TrackerLocal or hostedOfflineGit integration
LinearHostedA failsafe only: "Offline mode is designed as a failsafe and not a full-fledged feature."GitHub integration: "Fixes ENG-123" in a PR links it to the issue
GitHub IssuesHosted; GitHub Enterprise Server to self-hostNot documentedNative: "Fixes #123" in a PR closes the issue
BeadsLocal: a Dolt database in .beads/; sync with bd dolt push and bd dolt pull through your git remoteYes: "beads is offline-first"Optional hooks; a GitHub Issues sync
JiraHosted (Jira Cloud)Not documentedDevelopment panel: GitHub for Atlassian links branches, commits and PRs that name the work item key
PlaneHosted, or self-hosted Community Edition (AGPL-3.0)Not documentedGitHub and GitLab on Pro and up
YouTrackHosted, or self-hosted YouTrack Server (free up to 10 users)Not documentedGitHub, GitLab and Bitbucket, with commands in commit messages
RadialHosted only; nothing to self-hostNo; the CLI and the local MCP server call the hosted APIGitHub, GitLab and Bitbucket: branches, PRs and commits link to the issue, and status moves forward with the PR

#Linear

Linear is the best of the seven when humans hand work to agents. Delegating an issue to an agent "sets it as the delegate, not the assignee," so the human keeps ownership (Linear agent docs), and agent sessions are built for one agent per issue. The Cursor integration is the clearest example: "Assign any Linear issue to Cursor, and a cloud agent will get to work," and "Once the task is complete, the Cursor agent will update the issue automatically with a PR" (Linear Cursor integration, as of Nov 4, 2026). On the Cursor side, a Cursor admin connects it and usage-based pricing must be on. Linear says "Agents are not counted as billable seats in Linear."

Linear docs page titled Agent platform, showing an issue sidebar with a Delegate to menu where an agent is selected under the human assignee, and the overview text saying Linear maintains an open platform for third party agents.

The screenshot is Linear's agent platform docs, captured headless on Nov 4, 2026: the delegate menu sits under the human assignee.

Its MCP server lists 60 tools in a 101,447-byte tools/list, and a read-only endpoint, /mcp/readonly, suits a reviewer agent that should never write. A scripted create, pick up, prove and close flow took 6 MCP calls, a median 3,187 ms over 5 trials.

The gap is the claim. Linear has no conditional update, so an agent that picks its own work reads the issue and then assigns it, and our race shows what happens next: 10 of 10 rounds with more than one claimant. Linear ships no official issue-management CLI; agents in a shell use the GraphQL API or a community CLI. See the Jira vs Linear comparison for the CLI options, rate limits and credits.

#GitHub Issues

GitHub Issues is the closest tracker to the pull requests. An issue and the PR that closes it sit in the same repo, so "close with evidence" is a linked PR, and "Fixes #123" closes the issue on merge. Agents get an official CLI, gh issue with --json, and an official MCP server, github-mcp-server, with an issues toolset. GitHub's own agent works from the same issues: "Copilot cloud agent is available for all paid Copilot plans," and it can start from issues, the GitHub CLI or the GitHub MCP server.

GitHub Docs page Starting GitHub Copilot sessions, with a box saying Copilot cloud agent is available for all paid Copilot plans and a list of clients that can start it, including GitHub issues, the GitHub CLI and the GitHub MCP Server.

The screenshot is GitHub's Copilot sessions docs, captured headless on Nov 4, 2026.

Issues are on GitHub Free, and GitHub Team is $4 per user per month (pricing, as of Nov 4, 2026). GitHub Apps are not on GitHub's list of billed users, though GitHub does not address agents directly. Copilot cloud agent needs a paid Copilot plan, and assigning an issue to it "always creates a pull request." The limit is the claim: assigning is a plain write, and GitHub documents no conditional claim. Planning views live in GitHub Projects, so the list is flatter than a dedicated tracker.

#Beads

Beads is agent memory inside the repo. Its GitHub description reads "A memory upgrade for your coding agent," and it is MIT-licensed with 28,496 stars (github.com/gastownhall/beads, as of Nov 4, 2026). The CLI is bd, and the claim is documented as atomic: "when multiple agents pull from the same ready queue, the first claim wins." That makes Beads the one tool here besides Radial that documents an atomic claim.

GitHub repository page for gastownhall/beads, public, with 28.5k stars and 1.9k forks, an About box reading Beads, a memory upgrade for your coding agent, an MIT license badge, release v1.3.4 marked latest, and folders including cmd/bd, integrations and docs.

The screenshot is the Beads repo, captured headless on Nov 4, 2026.

Beads stores issues in a Dolt database inside .beads/, and syncs between machines with bd dolt push and bd dolt pull through your git remote. It is offline-first. The default embedded mode is a single writer; a server mode allows many. A beads-mcp server ships in the repo, though its README recommends the CLI wherever the agent has a shell. There is no official review UI (community-built ones exist) and no permission model in its docs. Beads fits one agent, or a few on one machine, that need a structured memory next to the code. We have not raced its claim.

#Jira

Jira is the pick when your company already runs on it and your agents work in a shell. It ships an official CLI, acli, with 46 documented commands, --json on create, edit, search and transition, and bulk edits by JQL. In the benchmark's matrix acli scores 12.0 of 19, the best non-Radial surface.

Atlassian Developer reference page for acli jira workitem assign, with the synopsis acli jira workitem assign [flags] and examples that assign a work item by key to @me, by JQL query, by filter ID and from a file.

The screenshot is the acli jira workitem assign reference, captured headless on Nov 4, 2026. Every option is a plain assign; none is conditional.

The Rovo MCP server covers agents in an MCP client, though transitions and attachments take extra round trips through discover and execute* tools, and it scores 7.5 of 19. Jira documents no conditional assign; we have not raced it live. Jira Free covers up to 10 users, Standard is $9.70 per user per month for new purchases, service accounts are not billed (5 free), and a cross-product Rovo search "may consume up to 10 Rovo credits per call" (as of Nov 2, 2026).

#Plane

Plane is the pick if you want to self-host. The Community Edition is AGPL-3.0 with no user limit, and the cloud has an official MCP server at mcp.plane.so; the hosted service "cannot reach private Plane instances," so a self-hosted one runs its own (Plane MCP docs, as of Nov 4, 2026). Plane publishes no CLI for issues, and our sources document no conditional claim.

Plane pricing page with the Cloud and Yearly toggles on: Free at $0 per seat per month, Pro at $6, Business at $13 and Enterprise Grid on quote, with Pro listing 500 AI credits per seat and Business 1000 AI credits per seat.

The screenshot is plane.so/pricing, captured headless on Nov 4, 2026, with cloud and yearly billing selected. Pro is $8 per user per month billed monthly. Installed agents "do not count as billable users" in Plane's agents docs (beta), and Plane's own agents draw from AI credits, none on Free. Self-hosting moves the cost to your server and your time.

#YouTrack

YouTrack serves an MCP server from each instance: "YouTrack exposes its MCP server over the Streamable HTTP transport," at https://<instance-name>.youtrack.cloud/mcp, acting with the permissions of the signed-in account (YouTrack MCP docs, as of Nov 4, 2026). It "doesn't expose an MCP server over stdio."

YouTrack Cloud 2026.2 help page titled MCP Server, last modified 27 October 2026, saying the YouTrack MCP server lets clients read and update YouTrack data through predefined MCP tools, and giving the endpoint URL https://instance-name.youtrack.cloud/mcp over Streamable HTTP.

The screenshot is YouTrack's MCP docs, captured headless on Nov 4, 2026.

We found no official CLI in its docs, and its assign tool is a plain assign. A new Cloud instance is free "for up to 10 users and 3 helpdesk agents"; JetBrains' sales help lists $5.40 per user per month on monthly billing. YouTrack Server, the self-hosted edition, is free up to 10 users. Git integration covers GitHub, GitLab and Bitbucket. YouTrack does not document how an agent with its own account is billed; its user docs say each standard user takes one license.

#Radial

Radial is a hosted issue tracker with a board for humans and a CLI plus an MCP server for agents, over one record. The claim is one conditional write: radial claim ENG-42, claim_issue over MCP, or POST /v1/issues/{id}/claim assigns only if nobody holds the issue. Every other claimant gets a 409 naming the holder, and the CLI exits 3 so the agent takes the next issue.

Terminal render of radial help filtered to the agent loop: list issues with assignee and status filters, claim an issue atomically with exit 3 if someone else has it, close with a message, comment, activity history and build subcommands, then radial list --json with no key returning a JSON not_authenticated error that says to run radial auth or set RADIAL_KEY.

The image is real output from the radial CLI source on main, run offline on Nov 4, 2026. The last command shows what an agent sees with no credential: a JSON error with the fix in the message (E-RAD-CLI-noauth).

The hosted MCP server lists 45 tools in a 21,020-byte tools/list, measured live. Agents close with radial close ENG-42 -m "Fixed in #412", or record a test the CLI ran itself with radial build gate --exec -- pnpm test, and the result shows on the issue. Key scopes (read, triage, write) limit what an agent key can do.

Pricing: $50 per human user per year, flat. Agents are not billed as seats, nothing is metered, and there is nothing to self-host.

In the live race on production on 2026-11-04, 20 agent keys claimed each of 10 issues at once: exactly one worker per round was told "claimed" and was the final owner, the other 190 got a 409, with 0 silent overwrites and 0 errors (R-LIVE-RACE). That is one run of 10 rounds over the REST endpoint; we did not race radial claim or claim_issue separately.

The limits, plainly:

  • No free tier, no trial and no monthly plan.
  • No SAML SSO or SCIM.
  • No push to agents. Agents poll for new work; no webhook wakes them, and webhooks are managed in the settings UI only.
  • No bulk edit in the CLI (MCP and REST have it) and no read-only MCP endpoint, which Linear has.
  • Key scopes are workspace-wide, where Jira has per-project permission schemes. A 429 carries no Retry-After yet.
Radial developers page headed Built to be scripted, saying everything in Radial is reachable from the terminal by you, by CI or by your agents, with the install command npm i -g radial.build and radial auth, and the start of the CLI command table.

The screenshot is radial.build/developers, captured headless on Nov 4, 2026.

#How to choose

  1. Run the race on the tracker you have. Make one scratch issue. Start 20 workers at once; each reads the issue and, if it is still unassigned, assigns it and prints "claimed". If more than one worker prints "claimed", your tracker has no atomic claim. With GitHub Issues:

    bash
    for i in $(seq 1 20); do
      ( if [ "$(gh issue view 42 --json assignees -q '.assignees | length')" = 0 ]; then
          gh issue edit 42 --add-assignee @me >/dev/null && echo "worker $i: claimed"
        fi ) &
    done; wait

    The Linear version we ran is public: ./reproduce.sh linear in the benchmarks folder (it needs a LINEAR_API_KEY for a scratch workspace and writes 15 issues there). The script is scripts/linear_tasks.py. The Radial race is scripts/radial_race.py; it needs 20 agent keys and writes to the workspace behind them, so point it at a test workspace. ./reproduce.sh offline runs the no-tracker baseline with no network and no credentials.

  2. Decide who hands out the work. If a human or an orchestrator assigns each issue to one agent, a failed race does not hurt you: pick for delegation and integrations (Linear, or Jira if you are already on it). If agents claim from a shared queue, you need an atomic claim: Beads inside one repo, Radial for a team, or a lock outside the tracker. The parallel agents guide covers the orchestrator side.

  3. Check the agent's surface and the close. Agents in a shell need an official CLI with JSON output (gh, acli, bd, radial). Agents in an MCP client need an MCP server (all seven have one). Then close one issue with proof and check that a human can read it without opening the repo.

#Methodology

  • Live Linear, 2026-11-02: tools/list against mcp.linear.app/mcp, server 1.0.2 (L-LIVE-MCP-TOOLS); the 6-call flow over MCP, n=5, scripted with no model time (L-LIVE-T1T4); the claim race, 20 workers x 10 rounds, read then issueUpdate, one API key, in a scratch workspace (L-LIVE-RACE).
  • Live Radial: tools/list against mcp.radial.build/mcp, 2026-11-02 (R-LIVE-MCP-TOOLS); the claim race, 2026-11-04, 20 workers x 10 rounds, one conditional POST /api/v1/issues/{id}/claim per worker, 20 distinct agent keys, on production in Radial's own internal workspace, each issue unassigned and read back before its round (R-LIVE-RACE). A first race run without the unassign step was discarded (all 200 claims got a 409). No live Radial task run.
  • Baseline: python3 scripts/baseline.py runs/2026-11-02/baseline --n 10, scripted agents in temp git repos; token trials with scripts/cc-trials.sh 3, Claude Code on Sonnet, n=3.
  • Coverage: 19 rows from coverage-matrix.md, generated by scripts/build_matrix.py. Radial from source at commit 9126321; Linear and Jira from docs.
  • Docs-only: Jira, GitHub Issues, Beads, Plane and YouTrack. No live run against any of them.
  • Screenshots: terminal images render real command output; page images are headless Chromium captures of public pages on Nov 4, 2026, cookie banners declined. We had no sanctioned test workspace to capture Radial's app UI, so this post shows none.
  • Not measured yet: a live Jira run, a multi-identity Linear race and a live Radial task flow. Nothing here claims one tracker is faster per task than another.

#FAQ

#What is the best issue tracker for coding agents?

It depends on who hands out the work. If humans or an orchestrator assign each issue to one agent, Linear has the best delegation and agent integrations, Cursor included. If agents claim their own work from a shared queue, pick a tracker with an atomic claim: Beads for one repo, Radial for a team that also wants a board. Run the claim race in "How to choose" on your current tracker first.

#Does Linear have a CLI?

No official CLI for issues. Linear ships two narrow official CLIs, linear-release and a CLI Importer. Agents reach Linear issues through its MCP server at mcp.linear.app/mcp (60 tools, measured live on 2026-11-02), the GraphQL API, or a community CLI such as schpet/linear-cli, maintained outside Linear.

#Should agent tasks live as markdown in the repo or in a tracker?

Markdown in the repo works while one agent works alone. It breaks under concurrency: in our scripted runs, two agents claiming the first open task from one shared TODO.md lost a claim silently in 20 of 20 trials, and two branches that both appended a task conflicted in 10 of 10 merges. Move to a tracker when a second agent or a teammate needs the same list. Beads keeps the in-repo feel with a database and a claim command; the git issue tracker post covers that middle ground.

#Can two agents grab the same issue?

Yes, on any tracker where a claim is a plain assign. In our live Linear race, 20 workers per round over 10 rounds, more than one worker was told "claimed" in 10 of 10 rounds, and 183 claims were silently overwritten. GitHub Issues, Jira, Plane and YouTrack document no conditional claim, and we have not raced them. Beads documents bd update <id> --claim as atomic. Radial's claim lets exactly one agent win and returns a 409 to the rest. In our live Radial race on 2026-11-04, 20 agent keys per round over 10 rounds, exactly one worker was told "claimed" in each round, 190 got a 409, and 0 claims were silently overwritten. The two races differ in method: Linear's used one API key with read-then-update, Radial's used 20 identities and a conditional claim that sets only the assignee. For the Radial agent loop, see the issue tracker for AI agents post.

#Are coding agents billed as seats?

Not on Linear ("Agents are not counted as billable seats in Linear"), Radial, or Plane for installed agents. Jira does not bill service accounts (5 free) or an agent on a person's token. GitHub Apps are not on GitHub's list of billed users, though GitHub does not address agents directly. YouTrack does not document it, and each standard user takes a license. Beads has no service to bill. Credits are a separate meter: Jira Rovo, Linear AI credits and Plane AI credits all exist.

#Which trackers work offline for agents?

Beads, which is offline-first: queries run against a local database, and you sync through your git remote when you choose. Linear has an offline mode, but its docs call it "a failsafe and not a full-fledged feature." Radial needs the network for every read and write, and GitHub Issues, Jira Cloud, Plane Cloud and YouTrack Cloud document no offline mode. Plane and YouTrack can be self-hosted, which keeps the data on your network but still needs that server.

#Where to start

If your agents claim their own work, see Radial pricing: $50 per human user per year, agents not billed as seats.

RadialAn issue tracker. That’s it.

The team behind Radial, the fast, CLI-first issue tracker that lets your own agents work for free. We write about plain software, speed as respect, and bringing your own agent.

Ship like it’s 2026.

An issue tracker for coding agents

Keep reading