Repository navigation
I benchmarked 6 agent orchestrators on the same scenarios. Taskplane came out on top (plus a per-task model trick with OMP) #675
kaka-sangi
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Hey all,
I've been trying to pick an orchestrator for running lots of coding agents in parallel, so I set up a test battery and ran the same scenarios against a bunch of tools. Taskplane ended up first, so I figured I'd share the numbers here, including where it lost points, since that's probably more useful to the maintainers than a pat on the back.
How the test worked
claude/codex/pibinaries that behave deterministically, so I could measure the orchestrator itself (scheduling, retry, resume, isolation, concurrency caps) and not model quality or luck.fusionwas blocked because the sandbox couldn't fetch one of its dependencies, and a few need their own build and adapter that I didn't get to. So this is a 6-tool ranking, not a ranking of everything.Results
Observability scored n/a for most of the tools, Taskplane included, so it's left out of the table.
Why Taskplane won
It's not the fastest. It won because it's the only one that behaved well on the boring, painful stuff:
Where it lost points (honest part)
How the others did, quickly
Bonus: per-task models with OMP, no fork needed
Separate from the benchmark, I wanted different models for different tasks (cheap one for easy stuff, strong one for the hard stuff). Right now model choice in Taskplane is per role (
worker.model,reviewer.model,merge.model,supervisor.model,reviewModel). Every worker in a batch gets the same model and there's no model field inPROMPT.md.So I tried running Taskplane on top of OMP (the extended pi) and it worked:
OMP loads the Taskplane extension fine as the
/orchhost.Taskplane looks for
pi-coding-agent/dist/cli.jsto start workers. I dropped a ~40 line shim there that reads a line from the task'sPROMPT.md, picks the model, and launches OMP as the worker:No line means it falls back to
worker.model, and if that's empty OMP's default applies.I ran a real 7-task dependency batch with OMP as host and worker. All 7 completed and the model server logged the requested model per task: two on
fast, one onstrong(from thePROMPT.mdline) and four onmid(from config default).Things to know if you try it:
ls,find,request_segment_expansion) and every worker crashed until I mappedls/findtogloband dropped the rest.request_segment_expansiondoesn't exist in OMP, so segment expansion doesn't work under OMP.pion PATH, so you need a one-line launcher namedpithat runs OMP.set_modelcommand, but that's untested.Suggestion for the project: a first-class optional
**Model:**field parsed by Taskplane itself (and ideally per-task reviewer/merger models too). It looks like a small patch to the task parser and the lane runner's model argument, and it would make the shim unnecessary. Happy to send a PR or share the shim if there's interest.Caveats
Thanks for building this. Curious whether the stall detection for hung agents and a headless approval gate are on the roadmap, since those were the two gaps I hit hardest.
All reactions