An agent-agnostic implementation of Claude Code's Workflows. omegacode runs JavaScript workflow
files that orchestrate fleets of coding agents with a small deterministic DSL — agent()
/
parallel()
/ pipeline()
/ phase()
— and the workers are pluggable: the same workflow can drive Claude Code, Codex, OpenCode, and pi in a single run.
npm install -g omegacode
omegacode install-skill
install-skill
teaches your agents how to author and run workflows by copying the skill into
~/.claude/skills/
(Claude Code) and ~/.agents/skills/
(Codex and other agents). Pass
--claude
or --agents
to install to just one.
You'll need Node 20+ and at least one worker installed: codex
(the default provider), claude
,
opencode
(≥ 1.16.2), and/or pi
(≥ 0.79.1, npm i -g @earendil-works/pi-coding-agent
). Run
omegacode doctor
to check — it flags binaries below the minimum versions, which the workers refuse at runtime.
Note on opencode/pi sandboxing:neither CLI can enforce a confined sandbox, so omegacode accepts themonlywith an explicitsandbox: "danger-full-access"
(per call or via--sandbox
). The defaultread-only
sandbox is rejected with an error naming the remedy — a deliberate fail-closed choice. Model strings pass through verbatim to the backend (e.g.agent("…", { provider: "opencode", model: "openrouter/anthropic/claude-sonnet-4.5", sandbox: "danger-full-access" })
).
With the skill installed, just ask your agent:
use omegacode to adversarially review this PR with both claude code and codex
It will author a workflow — finders fan out in parallel, a cross-provider skeptic pass tries to
refute each finding, a synthesizer merges what survives — then run it and report back. Runs are
journaled and resumable, and omegacode serve
opens a live dashboard of every agent as it works.
export const meta = { name: "adversarial-review", description: "find bugs, cross-examine them" }
// FINDINGS and VERDICT are plain JSON Schemas, elided here
phase("Find")
const findings = await parallel(
["correctness", "security", "performance"].map((lens) => () =>
agent(`Review the diff through the ${lens} lens. List concrete issues.`, { schema: FINDINGS })),
)
phase("Verify")
return await pipeline(
findings.filter(Boolean).flatMap((f) => f.issues),
(issue) => agent(`Try to refute: ${issue.desc}`, { provider: "claude-code", model: "claude-fable-5", schema: VERDICT }),
)
Plain JavaScript, no imports — the DSL is injected. Each agent()
spawns a real Codex, Claude
Code, OpenCode, or pi agent; omit provider
/model
to inherit whatever the run was started with
(--provider --model
, default codex
), or pin them per call when you want cross-provider
diversity. Provider and model are both-or-neither at every site (per-call, meta defaults,
CLI flags): a lone provider:
or model:
is rejected, so a model meant for one provider can never silently ride another provider's call.
omegacode run <file.workflow.js | name> # run a workflow (auto-starts the live viewer)
omegacode serve # read-only dashboard over all runs
omegacode run <name> --resume <runId> # resume — only the changed suffix re-runs
omegacode doctor # check codex/claude/opencode/pi availability + versions
omegacode guide # print the full authoring guide
run
also accepts saved workflow names. Six built-ins ship with the package:
deep-research
, code-review
, and four multi-provider workflows that put the two
models' decorrelated errors to work — multi-provider-review
(both review the same
branch independently, then a synthesis merges both), bake-off
(both implement the
same task in isolated worktrees, blind cross-provider judges pick a winner),
provider-debate
(propose → attack → rebut for N rounds, then a judge rules), and
second-opinion
(both answer cheap; agreement returns merged, disagreement escalates
to deep effort and adjudicates). Try omegacode run deep-research --args '"your question"'
, or omegacode workflows
to list them. See omegacode guide
for the complete authoring reference.