ultraswarm v2.4.0 — Portable Host Runner
Portability release: ultraswarm now runs two co-equal ways — as the Claude Code /ultraswarm skill, or as a standalone CLI hosted from Codex, Grok, or any shell (no Claude Code required). Same orchestration core, identical behaviour; the standalone runner just trades the live /workflows UI for portability.
Added
- Standalone host runner (
bin/ultraswarm.mjs+lib/). A host-supplied (or fallback-decomposed) plan JSON runs through dependency waves → implement → adaptive QA → merge → report. Shares a host-agnostic pure core with the skill (router.mjsreused; QA cascade/competition lifted fromSKILL.md, proven byte-for-byte by a parity harness). Impl wrappers are plain subprocesses — only the brain roles call an LLM.- Flags:
--plan-file <json>·--decompose "<task>"(fallback) ·--yes·--resume <id>(journaled). - Plan contract rejects unknown CLIs, bad tiers, dependency cycles, and unsafe task ids.
hosts/codex/AGENTS.md+hosts/grok/ultraswarm.mdlaunchers.
- Flags:
claude -pbrain adapter — the runner's brain defaults to your local authenticatedclaudeCLI: noANTHROPIC_API_KEY, no separate API billing, reusing your Claude Code auth. Falls back to the raw Anthropic API whenclaudeisn't onPATH. Override withULTRASWARM_BRAIN=claude-cli | anthropic-api. Live-smoked against claude 2.1.175.package.json+ deps (@anthropic-ai/sdk,ajv); CI runsnpm ci;validate.shcheck [12] parsesbin/+lib/.
Fixed
- Command-injection hardening (two security reviews): git plumbing on plan-derived values uses
execFileSync+ argv +--; task ids charset-validated at the boundary. - Brain tier→model-id resolution (caught by the final review): QA/judge/lens calls resolve tier labels to real model ids before hitting the brain.
- README accuracy pass + concrete Codex/Grok/shell run instructions.
Built TDD via subagent-driven development (18 tasks + hardening + 2 review-caught fixes). 83 tests, validate.sh 12/12, proof-of-life verified end-to-end.