GitHub - SawyerHood/omegacode: Code based orchestration for any coding agent.

3 min read Original article ↗

omegacode

CI

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.

Install

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 them only with an explicit sandbox: "danger-full-access" (per call or via --sandbox). The default read-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" })).

Use it

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.

What a workflow looks like

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.

CLI

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.