OMA is an agentic coding system for terminal-first implementation workflows. It ships as a native CLI/TUI runtime with an embedded agent hierarchy, durable .oma/ workspace state, and GitHub Releases-based binary distribution.
curl -fsSL https://raw.githubusercontent.com/vaur94/oma/main/install.sh | shFor a reproducible install, pin an explicit release:
curl -fsSL https://raw.githubusercontent.com/vaur94/oma/main/install.sh | sh -s -- --version v2.1.2curl -fsSL https://raw.githubusercontent.com/vaur94/oma/main/install.sh | sh -s -- --channel alphaYou can also pin an explicit prerelease tag:
curl -fsSL https://raw.githubusercontent.com/vaur94/oma/main/install.sh | sh -s -- --channel alpha --version v2.1.2-alpha.3If you want the latest alpha automatically, keep python3 available. Otherwise, pin --version.
install.sh installs from GitHub Releases assets only.
For Linux x64, OMA ships .deb and .rpm files as GitHub Releases assets.
# .deb (Debian/Ubuntu)
sudo dpkg -i oma_*.deb
# .rpm (Fedora/RHEL)
sudo rpm -i oma_*.rpmPre-built Linux/macOS binaries are attached on the Releases page.
oma upgrade
oma upgrade --channel alpha
oma upgrade --check- default channel: stable
- optional prerelease channel: alpha
bun install
bun run buildFor local source execution, run bun run apps/oma/src/main.ts.
Set at least one provider API key:
export ANTHROPIC_API_KEY=sk-...
# or
export OPENAI_API_KEY=sk-...
# or
export OPENROUTER_API_KEY=sk-...OpenAI OAuth (ChatGPT account):
For OpenAI, you can also use OAuth with your ChatGPT account instead of an API key:
# Web login (opens browser)
oma auth login openai --web
# Device flow (for headless environments)
oma auth login openai --deviceAfter setting the preference, authenticate with the Codex CLI:
codex login
codex login --device-authLaunch the interactive TUI:
omaOr run a one-shot command:
oma plan "add a multiply function to src/math.ts"First run creates .oma/ in the current working directory.
When a one-shot command starts a new conversation, OMA prints the session ID:
[OMA] Session: <session-id>
Continue with:
oma --session <session-id> implement
oma --session <session-id> validatedevis the alpha prerelease lanemainis the stable release lanepackage.json.versionis the release base source of truth- each push to
devcan producev<base>-alpha.<n> - each push to
maincan producev<base> - after a stable release, automation bumps
devto the next patch base
Useful local checks:
bun run release:flow status— show current branch/tag/version statebun run release:flow status --refresh-refs— fetchorigin/main,origin/dev, and tags before reportingbun run release:flow check --lane alpha— validate alpha readinessbun run release:flow check --lane stable— validate stable readinessbun run release:flow check --lane both --json— script-friendly readiness report
| Command | Description |
|---|---|
/plan |
Create an implementation-ready plan |
/implement |
Execute an implementation-ready task |
/validate |
Run the smallest sufficient validation scope |
/roadmap |
Create or revise a roadmap-scale plan |
/roadmap-status |
Summarize current roadmap progress |
/roadmap-continue |
Continue roadmap execution from current phase |
| Command | Description |
|---|---|
/brainstorm |
Structured ideation and contradiction finding |
/prompt |
Turn brainstorm output into a refined prompt artifact |
/loop |
Execute roadmap items through plan → implement → validate |
/review |
Findings-first review of plan, diff, or workspace |
/status |
Summarize current repo, plan, and validation status |
/analyze |
Repository, architecture, or target-area investigation |
Run oma --help for the full command reference.
OMA reads JSONC config from:
~/.config/oma/oma.jsonc(global).oma/oma.jsonc(project-local, overrides global)
Key sections:
agent— per-agent model, temperature, fallbackworkflow.hookProfile—off,standard, orstrictworkflow.orchestration— max parallel agents, timeoutgithub— GitHub integration settingsmcp.context7— Context7 MCP endpoint metadatadisabledTools— global and per-agent tool restrictionscommandSurface— dangerous command policy
Minimal config:
Full reference: docs/config.md
OMA separates project artifacts from runtime state:
Repo-local .oma/ — project-local artifacts and config:
.oma/oma.jsonc— project config (overrides global).oma/plans/— plans and active plan state.oma/roadmap/— roadmap and roadmap items.oma/prompts/— prompt artifacts
XDG state — runtime/app-owned per-project state:
$XDG_STATE_HOME/oma/projects/<project-id>/sessions/(fallback~/.local/state/oma/projects/<project-id>/sessions/)$XDG_STATE_HOME/oma/projects/<project-id>/tasks/$XDG_STATE_HOME/oma/projects/<project-id>/memory/
bun run release:audit
bun run build
bun run lint
bun run typecheck
bun run testLive E2E (requires provider credentials):
OMA_E2E=true bun test ./test/e2e/oma-workflow.e2e.tsSchema and template:
src/ # Agent, tool, and command definitions
packages/
kernel/ # Runtime kernel (session, conversation, routing)
cli/ # Shared CLI helpers
tui/ # Ink-based TUI surface
apps/oma/src/main.ts # Native CLI entrypoint
OMA is on the clean-break dev/main release model. See RELEASE.md for release operations and docs/adr/ for architecture decision history.
{ "$schema": "https://oma.local/schemas/oma.schema.json", "version": 2, "workflow": { "hookProfile": "standard", }, }