by fubak
Multi-CLI agent swarm orchestrated by Claude Code: external AI CLIs code in isolated worktrees, Claude verifies and merges
# Add to your Claude Code skills
git clone https://github.com/fubak/ultraswarmLast scanned: 6/22/2026
{
"issues": [
{
"file": "README.md",
"line": 172,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell — review the source before running): \"curl https://cursor.com/install -fsS | bash\"",
"severity": "low"
}
],
"status": "PASSED",
"scannedAt": "2026-06-22T09:53:10.698Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}ultraswarm is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by fubak. Multi-CLI agent swarm orchestrated by Claude Code: external AI CLIs code in isolated worktrees, Claude verifies and merges. It has 77 GitHub stars.
Yes. ultraswarm passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/fubak/ultraswarm" and add it to your Claude Code skills directory (see the Installation section above).
ultraswarm is primarily written in JavaScript. It is open-source under fubak on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh ultraswarm against similar tools.
No comments yet. Be the first to share your thoughts!
Ultraswarm is a durable multi-worker coding orchestrator for Codex, Claude Code, Cursor Agent, Grok, and shell usage. One standalone Node runner owns decomposition, worker routing, process supervision, isolated Git worktrees, adaptive review, transactional integration, approvals, recovery, and reporting.
The run report now ends with an estimated-vs-used token breakdown by CLI, model, and effort, and the CLI gained onboarding/recovery commands:
TOKENS BY CLI / MODEL / EFFORT table closes every report — CLI | model | effort | est. | used | Δ | attempts, plus a total row. est. is a calibration-informed heuristic: ultraswarm
prefers the measured per-(CLI, model, effort) average persisted in .ultraswarm/state.sqlite
(route_calibration, self-correcting across runs) and falls back to a static tier curve (simple
10k / moderate 30k / complex 75k / expert 150k tokens) until enough runs accumulate. used is
ONLY structured usage summed across attempts — — when a CLI reports none, never backfilled from
the estimate (the v3.5.13 honesty invariant still holds).config.intelligence.pricing[model] (USD per million tokens; falls back to built-in Claude
rates, else 0 for an unpriced model) so maxCostUsd can actually bound external worker spend.usage array of { input, output, cost? } dot-path descriptors (with a
* wildcard for keyed maps), evaluated against structured worker output; overrides.<cli>.usage
and aliases.<name>.usage let you add or override a descriptor for a CLI without a built-in
parser. Gemini now runs with --output-format json and its stats.models.*.tokens.* usage is
captured, joining codex and opencode as real-usage CLIs.--decompose planning and doctor now show each worker's measured track
record (codex (backend…; 12 runs, 92% pass)) pulled from worker_metrics, so the brain and the
operator both see what has actually been working, not just declared specialties.doctor --models prints the resolved model per CLI per tier (registry + overrides +
aliases), so a stale model pin is visible without reading config files; an optional
modelListCmd per registry entry/alias warns when a resolved model is missing from the CLI's own
model list.ultraswarm replan <runId> emits a plan JSON of a run's failed/blocked tasks, ready to feed
straight back into run --plan-file - — a partially-failed run's surviving tasks never need to be
retyped by hand.ultraswarm add-cli <name> --binary <bin> [--extends <builtin>] [--model <id>] onboards a new
CLI in one command: probes the binary, builds a valid alias skeleton, and merges + validates it
into ultraswarm.config.json, refusing to clobber an existing alias.[ultraswarm: truncated N chars] marker instead of silently growing; retry feedback is bounded to
the last 10 rejected attempts (500 chars each) and now names the files the rejected attempt
changed, so a retry converges instead of re-exploring from scratch.⚠ LEDGER MISMATCH line if the merged/failed/
blocked task rows don't add up to the plan's task count, instead of printing plausible-looking
numbers that quietly don't reconcile.Run-output polish:
#/**/_ showing as literal chars); pass
--markdown to keep GitHub-markdown for pasting into a PR.NO_COLOR / --no-color.─ separator
and right-aligned numbers, matching the PLAN PREVIEW / WORKER ROSTER style.Per-CLI token breakdown (see the CHANGELOG):
landed (tokens that produced
integrated work) vs spent (all attempts, incl. rejected retries and competition losers) vs
overhead, with a reconciling total. You can see at a glance which worker burned tokens and how
much went to retries/competition (e.g. Workers used ≈ 383,578 tokens — ≈ 274,485 landed, ≈ 109,093 on retries + competition).Real token-usage capture (see the CHANGELOG):
exec --json /
run --format json, and ultraswarm parses the structured JSONL usage events — so the report's
"Work offloaded" section shows the actual token count (e.g. Workers reported ≈ 238,656 tokens)
instead of "not reported". No more scraped guesswork (removed in 3.5.13), and no fabrication when a
CLI doesn't report — a custom invocation without the JSON flag honestly shows "not reported".Honest run-report value section (see the CHANGELOG):
Live-stream readability follow-up to v3.5.11 (see the CHANGELOG):
git worktree add / merge --squash output is captured
instead of inherited, so a big swarm's progress lines aren't buried under "Preparing worktree …".↑/✗/⊘ glyphs as the high-risk competition path, so the whole stream scans uniformly.Readability + accuracy pass on the two human-facing output surfaces (see the CHANGELOG for detail):
≈ N/≈ 0; it
shows the exact figure on full coverage, an explicit floor (x of y tasks reported) on partial, and
"not measurable here" when no worker reports usage. Retried-but-integrated tasks are named.✗ … rejected by QA — retrying instead of silently
jumping to the next attempt.Hardening from a full audit of the orchestrator (each fix shipped as its own patch release; see the CHANGELOG for per-version detail):
contract.commands now reject shell metacharacters (no more npm test; rm -rf ~
reaching the shell); worker env passthrough narrowed from the whole XDG_* namespace to named vars.ok; post-run cleanup deletes only
the current run's branches.resume judges liveness on a persisted orchestrator identity (pid + boot id), so it
can't reap a still-running run or be fooled by PID reuse after a reboot; terminal runs are immutable.--plan-file / package.json fail with a clear USAGE error.preflight runs a cached exec smoke test per CLI (write a file in an
isolated temp dir) and excludes workers that pass --version but can't actually run (dead auth,
no-op). Routing keys off the functional verdict. See Prerequisites.preflight, plan previews, status, and doctor render aligned
tables by defaul