← Swink AgentShore™ Tech
Concurrency over a run

Effort that tracks the backlog

Multiple harnesses run against one backlog at once. How many agents are working, and how hard the session is pushing, rises and falls with the real state of the graph, not a fixed schedule.

Busy timeline · one session Stacked area chart titled Busy Timeline: stacked busy agents over a single session. Three harnesses (Codex, Claude Code, and Antigravity) are stacked at each completion sample, with total busy overlaid as a dark line. The session runs from 21:47 to 05:59 with 267 completion samples across 8.2 hours from a fleet configured for 18 concurrent agents, peaking at 16. Concurrency climbs to several peaks in the mid-teens, with a deep valley back to zero around 01:53.
A single overnight run, 21:47 → 05:59. Each band is one harness; the dark line is total busy. The shape is the policy filling capacity when there's parallel work and backing off when the graph is blocked, with no human in the loop.
Session length
8.2 h
Harnesses
3 enabled
Configured fleet
18 agents
Peak busy
16 agents

Reading the timeline

Every time an LLM Agent finishes a play, the session records how many agents were busy at that moment, split by which harness each one was running on. Those samples stack into bands; the dark line on top is the total busy count.

Codex
Claude Code
Antigravity
Total busy (overlaid line)

Read vertically, a tall stack means many agents were working the backlog in parallel right then. Read horizontally, the rise and fall is the policy responding to the state of the project graph over the night.

The fleet for this run

The fleet is declared in agentshore.yaml and surfaced at session setup. For this run, three runners were enabled (Antigravity, Claude Code, and Codex CLI) and Grok was left off. Each runner is allotted a mix of Small, Medium, and Large agents, the tiers the policy draws from when it sizes a play to the work.

Session setup · agents The AgentShore session setup screen, Agents step. An Agent runners panel sourced from the agentshore.yaml agents block lists Antigravity (S times 1, M times 2, L times 1) enabled, Claude Code (S times 1, M times 3, L times 1) enabled, Codex CLI (S times 1, M times 5, L times 3) enabled, and Grok CLI disabled. A fleet total bar reads S times 3, M times 10, L times 5, total 18.
The agents block, surfaced at setup: Antigravity (S×1 · M×2 · L×1), Claude Code (S×1 · M×3 · L×1), and Codex CLI (S×1 · M×5 · L×3) enabled, Grok left off. Fleet total: 3 small, 10 medium, 5 large, 18 agents.

That fleet total, 18 agents, is the ceiling for the night. The run peaked at 16 because the backlog never had enough size-matched work to fill all 18 slots at once: a Large slot only runs when there's Large-sized work ready for it, so the mix of pickable work topped out two short of the cap.

Why it isn't a flat line

Concurrency is bounded by parallelizable work, not by a fixed worker count. Even with 18 agents available, most of the night runs well below the cap. The level of effort follows the backlog: when issues are groomed and pickable, the policy spins up agents toward the fleet limit; when the graph is blocked (work waiting on review, a merge train, or a backlog that needs grooming before anything else can move), there's nothing safe to dispatch, and concurrency falls away.

The deep valley back to zero around 01:53 is that: a moment where the next move was a single serial play (a reconcile or a groom) before parallel work opened back up. The policy isn't idling on purpose; it's waiting for the graph to give it something it's allowed to run.

Peaks = pickable work Several issues groomed to pickup at once, nothing blocking. The policy fills capacity.
Valleys = blocked graph Work waiting on review, merge, or grooming. Fewer plays are eligible, so fewer agents run.

Three harnesses share the floor

The bands aren't all one model. A single run mixes Codex, Claude Code, and Antigravity agents on the same backlog. That's not for variety; it's the substrate that lets cross-framework review hold: the agent that authors a change and the agent that reviews it run on different families, enforced as identity, not preference.

So a tall stack is also a mix: several harnesses working the same project at once, and the review of any one change is structurally guaranteed to come from a different family than the author. When the stack is short, that mix is still there, just fewer of each, because the backlog asked for less.

What the shape tells you

A flat, always-maxed line would mean the system was ignoring the graph and just keeping workers busy. A line that never rises would mean it couldn't parallelize at all. This shape, climbing when work piles up and collapsing honestly when it runs out, is the PPO policy tracking real eligibility: dispatch when there's safe parallel work, back off when there isn't, and do it for 8.2 hours with no one watching.

You can watch the same thing live in the Dashboard or the TUI. This page is what it looks like after the run, in one frame.

Different runs, different concurrency

No two runs look the same. The shape is a fingerprint of the backlog, the fleet, and how much of the work could run in parallel at the time. Two more sessions, the same read-only chart:

Stacked busy-agents chart for a 15.3-hour session with 468 completion samples and a peak of 23 concurrent agents. Antigravity, Codex, and Claude Code are stacked with total busy overlaid; concurrency rides in the mid-teens through the night and spikes past 20 toward the morning.
15.3 hours, peak 23468 completion samples. A larger fleet on a deep backlog: concurrency holds in the mid-teens overnight and spikes past 20 toward the end.
Stacked busy-agents chart for a 5.6-hour session with 137 completion samples and a peak of 10 concurrent agents. Codex, Claude Code, and Antigravity are stacked with total busy overlaid; concurrency tops out around 10 and tapers to zero by the end.
5.6 hours, peak 10137 completion samples. A shorter run on a smaller fleet, topping out around 10 and tapering off as the backlog drains.

Watch it live, too

This page is the after-the-fact view. The same concurrency is visible in real time in the Dashboard, under the Stats tab: a rolling-window Fleet Concurrency chart stacked by harness, with current and peak busy counts beside the per-agent metrics.

Dashboard · stats The AgentShore Dashboard on the Stats tab. A Fleet Concurrency area chart over a rolling 20-minute window shows current 3 busy and peak 4, stacked by harness (Claude Code, Codex CLI, Grok CLI) with a total concurrency line, beside a per-agent metrics table and the agents roster.
Real-time concurrency is also visible in the Dashboard under the Stats tab: a rolling 20-minute Fleet Concurrency chart, current and peak busy, stacked by harness.