Build1 distinct publisher3 min readUpdated
A developer benchmarked his local agent runner before tuning it and found his instinct was wrong twice over: the event loop was idle, the hardware was half used, and the real work was serialized by a rule.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Follow any of these and your For You feed starts watching them — no settings page required.
A developer building his own agent tooling wanted higher concurrency out of a local runner, assumed the runner process itself was the constraint, and wrote a benchmark before touching a single config value [1][2]. The measurement reassigned blame twice: chat throughput was pinned inside the local model server, and the coding jobs that do the actual work were serialized by one line of scheduler code [9][13].
The bench, described in Andreas Bodin's write-up on dev.to, fires N concurrent chat sessions at the runner, each turn hitting a local hermes3 model through Ollama with a fixed prompt and running the full pipeline: pre-turn intent classification, chat response, and post-reply memory extraction [3]. He instrumented four points rather than one: time to first internal activity, time to the first request reaching the model queue, time to the user's answer, and wall time until the background memory-extraction tail drains [4].
At N=4, wall time came in at 4.80 times the single-session baseline [5]. That is a 20 percent penalty against a perfectly ordered serial queue, which means four concurrent sessions were worse than doing the work one at a time [6][5]. Time to first activity stayed at 0.0s across every run, so the runner's event loop was routing POSTs in milliseconds without queuing [7]. CPU peaked at 63 percent and free RAM never fell below roughly 5.9 GB [8]. The latency was stacking in Ollama's internal request queue for the single loaded model, hermes3 8.0B Q4_0 [9]. The drained metric earned its place: background memory extraction keeps Ollama saturated well after the user has their answer, a cost that request-per-second benchmarks do not see [10].
Chat, though, is the cheap half. The coding jobs talk to the Claude API, not Ollama, and diagnosing those took no load test at all, only reading the scheduler [11][22]. The pump held a MAX_CONCURRENT value sourced from an environment variable with a default of 2, and immediately below it a check that skipped any job whose repository already had one running [12]. Since almost every ticket in the queue targets the same primary repository, the effective limit was one job, whatever MAX_CONCURRENT said [13]. The rule had a real justification, since two agents branching off the same moving HEAD produce messy merge conflicts, but serializing an entire repository by default is a policy choice, not a capability limit [14].
The replacement is a path-overlap predicate: two jobs in the same repo may run together only if both tickets declare target paths that share no files, ancestors, or subdirectories, neither references the other as a hard or soft dependency, and reopened tickets are judged by their previous run's actual git diff file list rather than their prose [15][16][17][18]. A ticket that names no paths is treated as touching everything and stays serial [16]. Ambiguity defaults to serial, on the stated asymmetry that an unnecessary serialization costs a few minutes of queue time while a bad parallelization costs an hour of untangling merges by hand [19].
What to watch: chat concurrency now binds on hardware or multiple inference instances, not TypeScript [20], and job concurrency binds on how honestly tickets declare their file scope [16][21]. No post-change throughput numbers are published yet.
Ranked by verification strength, evidence, and original report placement.
The bench script fires N concurrent chat sessions against the runner. Each turn hits a local model (hermes3 via Ollama) with a fixed prompt, running the full pipeline: pre-turn intent classification, chat response, and post-reply memory extraction.
Four metrics were tracked: ttfa (POST request to first internal event emitted, measuring the runner's event loop before touching Ollama), first-Ollama (POST to first request hitting the model queue), done (POST to user receiving the answer), and wall (drained) (total time until post-reply memory extraction finishes background work in Ollama).
At N=4, wall-clock time scaled to 4.80x the single-session baseline; because 4.8x exceeds 4x, concurrent requests performed worse than a pure, perfectly ordered serial queue.
Hardware was not the limit: CPU peaked at 63 percent and free RAM never dropped below about 5.9 GB.
Latency stacked inside Ollama's internal request queue for the single loaded model, hermes3 8.0B Q4_0.
He replaced the blind one-job-per-repo check with a strict path-overlap predicate; two queued jobs in the same repo can run concurrently only if all three of its conditions are met.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Concrete but single-source and partially instrumented
The findings are unusually specific for a blog post — named metrics, a 4.80x figure at N=4, ttfa 0.0s, CPU 63 percent, ~5.9 GB free RAM, and a verbatim scheduler snippet — and the code-level diagnosis of the per-repo lock is self-evidencing. But everything comes from one self-reported author on one machine, with no harness code, prompt, raw table, repeat runs, or concurrency sweep, and no GPU/VRAM metrics or Ollama parallelism configuration to substantiate the model-server ceiling. No independent source corroborates any number.
One developer's personal tooling
Adoption evidence is limited to a single builder's own agent runner: one benchmark run and one scheduler change shipped into his private system. No third-party users, downloads, repositories, teams, or vendor deployments are reported, and no post-change usage or throughput data is given.
Mostly grounded, with one unmeasured prescription
The article is unusually restrained — its central claim (the cap was scheduler policy, not the runner) is backed by quoted code and instrumented metrics, and it explicitly narrows scope. Overstatement is confined to two places: 'it's not hardware' is generalized from CPU and RAM only, and the takeaway that better GPU hardware or multi-model instances are required to lift chat concurrency is asserted without GPU utilization data or any disclosed Ollama parallelism setting. A single N=4 measurement also carries more rhetorical weight in the framing than one data point supports.
Mild personal-brand incentive, no commercial stake disclosed
The author writes about his own tooling and closes with a self-identification as a CTO plus a portfolio link, giving a modest reputational and personal-brand incentive to present a clean 'measure first' narrative in which his infrastructure turns out to be fine. There is no disclosed vendor relationship, sponsorship, or product being sold; Ollama, hermes3, and the Claude API are named as tools, and the post also reports findings unflattering to the author's own instincts and scheduler code.
Internally coherent, externally unverified
Confidence is moderate: the mechanism described is plausible and internally consistent, the code-level finding is essentially self-proving, and the metric definitions are precise. It is capped by total dependence on one self-reported source with no reproduction artifacts, one measurement point, missing GPU and Ollama-configuration facts, and no post-change results for the new scheduling predicate.
build
Agent reliability is a harness problem, not a prompt problem1 distinct publisher
build
Allow-list the closed set, block-list the open one: 193 thin geo pages, one gate1 distinct publisher
build
A GAN beauty filter is a device budget allocation, not a feature toggle1 distinct publisher
build
Your inference bill is an architecture defect: declare the task before you call the model1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 15, 2026