@yjjeong/omg
v0.2.0
Published
Multi-LLM team orchestrator for a single working directory.
Maintainers
Readme
omg
Multi-LLM team orchestrator for a single working directory.
omg coordinates provider CLIs as a team — Claude CLI, Codex CLI,
and agy — while keeping provider and model names separate
(Claude→Opus/Sonnet, Codex→GPT, agy/Antigravity→Gemini). Each agent gets a role
(planner / implementer / reviewer / verifier), a single director resolves
conflicts, and a shared context bus keeps handoffs intact.
A TUI (Ink/React) sits on top, so the team's reasoning, tool calls, and verdicts are visible at a glance.
Why
Most multi-LLM tools either pick one model per task or run them in isolation.
omg treats provider-backed agents as a team with explicit roles and a
consensus mechanism — a Claude/Opus planning step can inform a Codex/GPT
implementation, and an agy/Gemini verdict does not silently stall the
pipeline.
Prerequisites
- Node ≥ 20
- Linux, macOS, or Windows. The internal broker IPC uses a Unix-domain socket on POSIX and a named pipe on Windows. Windows support is experimental in v0.x — verify in your environment; WSL also works.
- At least one provider CLI installed and logged in, OR
--demo/--provider stubfor a no-deps trial. Provider options:
omg never sees your provider tokens; it spawns the CLIs you already
authed.
After install, run omg doctor to verify your providers are installed,
logged in, and (for Gemini) MCP-registered — it prints the exact fix command
for any gap, and only flags the providers your active team preset actually
uses. Add --install (omg doctor --install) to install the missing
required provider CLIs using each provider's installer (npm i -g for
npm-managed CLIs, Google's installer for agy). Add --install-sdk
for API-key SDK paths, or --install-all for both. Then run the printed
omg login <provider> to authenticate each CLI. omg login <provider> also
re-runs a provider CLI's own login when its auth has expired. Use
omg doctor --instructions to audit global/project instruction files for
legacy .omc / .omx guidance without deleting anything.
For a guided first-run checklist, use omg setup. It scaffolds the local
project files idempotently, runs doctor with instruction diagnostics, checks
updates, then prints both setup paths: subscription CLI auth and API-key SDK.
On bare omg startup, the same required-provider check runs before the
Welcome/logo screen. If setup is incomplete, an Ink picker appears first; the
default Enter action is real setup, not a checklist: it runs omg init, installs
missing required provider CLIs with their installers, installs required SDKs,
then re-checks before the normal TUI starts. Provider login stays explicit via
omg login <provider>. A separate option installs optional provider CLIs too.
Set OMG_SKIP_SETUP_GATE=1 (or the legacy OMG_SKIP_PREFLIGHT=1) to suppress
this startup gate.
omg also checks for newer versions of omg, Claude Code, Codex
CLI, and agy on normal startup. The check is advisory,
cached, and written to stderr so headless JSON output stays clean. Run
omg update for a full report, or omg update --install to apply
npm-managed updates (omg, claude, codex). agy uses its
native self-updater; if it remains stale, rerun Google's installer.
Quick Start
npm install -g @yjjeong/omg
omg setup # first-run checklist
omg --demo # no external CLI required
omg --run "hi" --provider stub --headless # stubbed orchestrator turn
omg # full TUI (provider CLI required)omg --demo is the safest first-impression — it runs the full pipeline
against a built-in stub provider, no auth or external binary needed.
Usage examples
# Real provider via OAuth subscription (no API credit consumed).
omg --run "draft a release note" --provider claude-cli
omg --run "draft a release note" --provider codex-cli
omg --run "draft a release note" --provider agy # agy/Antigravity provider, Gemini model family
omg --run "draft a release note" --provider gemini-cli # legacy standalone Gemini CLI
# Real provider via API key (uses official SDK; installs on demand).
omg --run "draft a release note" --provider claude # @anthropic-ai/sdk
omg --run "draft a release note" --provider codex # openai
omg --run "draft a release note" --provider gemini # @google/genai
# Multi-role team with voting consensus.
omg --team-run "ship a python hello world" --provider claude-cli --headless \
--reviewers reviewer,verifier --strategy voting
# Agentic loop — tool results feed back into the next turn.
omg --run "demo" --provider stub --tools --loop --headlessCLI surface
omg [--version] [--help]
omg doctor [--json] [--install] [--install-sdk] [--install-all] [--instructions]
# diagnose install / auth / SDK / instruction leakage
omg setup # guided first-run checklist
omg update [--json] [--install] # check tool versions (+ npm-managed updates)
omg login <claude|codex|agy> # antigravity/gemini remain explicit aliases
# (re)authenticate a provider CLI
omg init # scaffold AGENTS.md/CLAUDE.md/GEMINI.md + .omg/mcp.json here
omg --demo [--headless] [--tools | --write-tools] [--ask]
omg --run <PROMPT> [--role <ROLE>] [--provider <P>] [--headless]
[--tools | --write-tools] [--loop --max-steps N]
omg --team-run <PROMPT> [--reviewers role1,role2,...] [--strategy S]
[--max-iterations N] [--provider <P>] [--headless]
[--tools | --write-tools]Providers: policy (read from src/policy/team.yaml), stub, claude
/ codex / gemini (SDK), claude-cli / codex-cli /
agy / antigravity-cli (recommended subscription CLIs), plus gemini-cli as an
explicit legacy/standalone provider.
Consensus strategies: escalate (default — severity-first veto),
voting (plurality), hierarchy (top reviewer wins).
Interactive TUI
Running omg with no flags opens the Ink TUI. Inside:
/helpshows the full slash command list (/new,/switch,/team,/preset,/auto-commit,/predict,/mcp,/memory,/clear, etc.)/updateshows the same version report inside the TUI. For package updates, runomg update --installfrom a regular shell so npm can own the terminal./team --resume [checkpoint-id]resumes an interrupted team run from durable context in~/.omg/team-runs/. Resume is a new team pass seeded with the original task + captured transcript, not a raw in-memory stack continuation./presetopens a picker for team policy mixes. Available families include single-provider presets, 70/30 provider-led presets, and balanced Claude/Codex/agy three-way presets. The row labels show the provider/model split (for example agy/Gemini);/preset listprints the catalog and/preset <name>remains scriptable.- Plain chat like “팀작업 이어서 진행해줘” / “continue the team work” is
auto-routed to the same
/team --resumepath when no turn is currently running, so users do not need to remember the slash command after Esc. Ctrl-O/Ctrl-Pcycles tabs;Opt-1..9jumps to a tab by indexCtrl-Ropens reverse history searchCtrl-Z/Ctrl-Yundo / redo the current input/quitorCtrl-Cto exit
State lives in ~/.omg/:
team-preset, plan.json, memory.md, tabs/, continuums/, mcp.json.
Troubleshooting
- Not sure what's misconfigured? Run
omg doctor— it reports per-provider install / login / MCP status and the exact command to fix each gap.omg doctor --jsonemits the same as machine-readable JSON. - "binary not found on PATH" — install the provider CLI shown in the
error message, or try
omg --demoto confirm omg itself works. - TUI doesn't render properly — use a modern terminal (iTerm2,
Alacritty, Kitty, Wezterm, recent Terminal.app, recent Windows Terminal
via WSL). Legacy
xtermwith limited ANSI support may misrender. - Doesn't exit on
/quit—Ctrl-Ctwice escalates; please file an issue if you hit this consistently. - "Cannot find module '@anthropic-ai/sdk'" when using
--provider claude(the SDK, notclaude-cli) — install it:npm install -g @anthropic-ai/sdk. Provider SDKs are optional peer dependencies. - Team role runs forever with no visible work — build roles are cancelled
after 20 minutes with no output/tool progress; reviewers after 5 minutes.
Override with
OMG_TEAM_BUILD_IDLE_TIMEOUT_MS,OMG_TEAM_REVIEW_IDLE_TIMEOUT_MS, orOMG_TEAM_IDLE_TIMEOUT_MS. - Update nags are noisy/offline — set
OMG_SKIP_UPDATE_CHECK=1. The default check is cached for 6 hours; override withOMG_UPDATE_CHECK_TTL_MS. - Windows ask/picker path is suspect — run
npm run build && npm run test:windows-pickeron the native Windows machine. It exercises the built hooked-tool proxy, named-pipe broker, and~/.omg/hookedtool.log.
Platform support
| Platform | Status | |---|---| | Linux (x64 / ARM64) | ✅ Supported | | macOS (Intel / Apple Silicon) | ✅ Supported | | Windows (x64) | 🧪 Experimental — named-pipe IPC; verify locally. WSL also works. |
Development
git clone https://github.com/jyj902/omg.git
cd omg
npm install
npm run build # tsc + copy-assets (verifies dist/cli.js --version)
npm test # full vitest suite
npm run test:windows-picker # built hooked-tool picker smoke (named pipe on Windows)
npm run test:pack # npm pack + clean-prefix install smoke
npm link # `omg` global symlink → dist/cli.jsThe repo's full design rationale lives in AGENTS.md (the single source of
truth for all agents; CLAUDE.md is a thin stub that imports it) and
.omg/audit/ (the architectural audit + cleanup queue).
