omp-maestro0.1.0
My oh-my-pi (omp) harness in one command: a curated collection of public plugins and skills, my Jev router, and switchable Claude / ChatGPT / mixed model setups.
Built for omp
The author tagged this package oh-my-pi.
Reports 0
No reports yet.
Readme
The omp setup I use every day — curated public plugins & skills, my own Jev Router,
and three model ensembles you can switch with a single command.
Quick start · Ensembles · Jev Router · Commands · FAQ · Credits
npx omp-maestro
[!NOTE] Maestro is mostly other people's work. It is a collection of public plugins and skills I use in my own harness, packaged together with the one piece I wrote — the Jev Router — so you can try the whole setup in one go. Every plugin and skill is installed from its original source, and every author is credited below. Go star their repos. ⭐
🎼 One commandPlugins, skills, model roles and fallback chains — installed and wired up by a singlenpx. Pick the skill libraries you want from an arrow-key checklist.
|
🎻 Three ensemblesClaude only, ChatGPT only, or a mix where a thinker model leads and a coder model writes the code. Switch any time with/maestro.
|
🧭 Jev RouterEvery prompt and every subagent is judged by TypeSafe Jev and sent to the smallest model that can do it well. Fails open, never down. |
🚀 Quick start
You need omp, Node.js (for npx) or Bun (for bunx), and git.
npx omp-maestro # 🎼 mix — Claude leads, GPT codes (default)
npx omp-maestro anthropic # 🟠 Claude only
npx omp-maestro openai # 🟢 ChatGPT / Codex only
bunx omp-maestro mix # same thing, with bun
The installer first checks what you already have. Missing omp or git? It offers to install them for you — omp through the same tool you launched it with (bunx → bun install -g, npx → npm install -g, or omp's official installer when Bun isn't there), git through your system's package manager (winget, Homebrew, apt, dnf, pacman, …). Nothing is installed without a yes. Then it asks one question, which skill libraries you want, and runs unattended:
🎼 Maestro 0.1.0: checking your setup
✔ omp is installed (omp/18.12.6)
✔ git (2.52.0)
✔ npx (11.19.0)
🎼 Skill libraries (installed into ~/.agents/skills)
↑/↓ move · space select/deselect · enter confirm
❯ ◉ coderabbitai/skills (2) — CodeRabbit code review and auto-fixing of PR review comments
◉ vercel-labs/skills (1) — find-skills: search and install more skills when you need a new capability
◯ expo/skills (25) — Expo / React Native apps: routing, native UI, modules, EAS builds, updates and store releases
◉ heygen-com/hyperframes (7) — HyperFrames: make videos, slideshows and motion graphics from HTML, plus Figma import
◯ sanity-io/agent-toolkit (2) — Sanity CMS: schema/GROQ best practices and migrating content into Sanity
◉ emilkowalski/skills (15) — Emil Kowalski's design engineering: UI polish, web/Expo animation, Apple-style design, Swift
Then, inside omp:
- Log in to the providers your ensemble uses —
/login→ Anthropic and/or OpenAI Codex (ChatGPT plan). - Give the router a key —
export TYPESAFE_API_KEY=…or addTYPESAFE_API_KEY=…to~/.omp/agent/.env. - Play. The status line shows 🧭
jev: ONwhen the router is live.
[!TIP] Re-running the installer is safe. It updates everything and re-applies the ensemble you name — handy on a new machine.
🎻 Three ensembles
Switch inside omp at any time — the live session moves to the new lead model immediately:
/maestro show the active ensemble and the choices
/maestro mix Claude leads, GPT codes, Sonnet designs
/maestro anthropic all Claude
/maestro openai all ChatGPT / Codex
Only the roles an ensemble defines are rewritten; any other roles you've set stay untouched. Every role also gets a fallback chain — single-provider ensembles fall back within that provider, the mix falls back across providers, so hitting a usage limit on one plan doesn't stop the music.
Every role, every ensemble
| Role | anthropic |
openai |
mix |
|---|---|---|---|
default — main agent, the lead |
Claude Opus 5.5 · medium | GPT-6.1 Sol · medium | Claude Opus 5.5 · medium |
plan, slow |
Claude Opus 5.5 · high | GPT-6.1 Sol · high | Claude Opus 5.5 · high |
task — default subagent, writes code |
Claude Sonnet 5.5 | GPT-6.1 Sol | GPT-6.1 Sol |
designer, vision |
Claude Sonnet 5.5 | GPT-6.1 Sol | Claude Sonnet 5.5 |
smol, tiny, memory, commit |
Claude Haiku 5.5 · low | GPT-6 Luna · low | GPT-6 Luna · low |
jev-mechanical |
Claude Haiku 5.5 · low | GPT-6 Luna · low | GPT-6 Luna · low |
jev-bounded |
Claude Haiku 5.5 · medium | GPT-6 Luna · medium | GPT-6 Luna · medium |
jev-reasoning |
Claude Sonnet 5.5 | GPT-6.1 Sol | GPT-6.1 Sol |
jev-architecture |
Claude Opus 5.5 · high | GPT-6.1 Sol · high | GPT-6.1 Sol · high |
judge |
TypeSafe Jev | TypeSafe Jev | TypeSafe Jev |
web |
Exa → DuckDuckGo | Exa → DuckDuckGo | Exa → DuckDuckGo |
Fallback chains for every role live in profiles.json.
How the mix plays
sequenceDiagram
autonumber
actor You
participant Opus as 🎼 Claude Opus<br/>leads & plans
participant Jev as 🧭 Jev Router
participant GPT as 🎻 GPT Sol / Luna<br/>writes the code
You->>Opus: "Add OAuth login"
Opus->>Opus: understand, plan, split the work
Opus->>Jev: task(…) × N
Jev->>GPT: each task → the right worker size
GPT-->>Opus: diffs and results
Opus-->>You: reviewed, verified answer
The thinker reads the request, plans, splits the work and reviews what comes back. The coders do the implementation as subagents. Want the lead to never touch code itself? Turn on omp's built-in /vibe director mode: the main model only reads and directs, fast workers run on @smol and good workers on @task — in the mix that's exactly Opus conducting GPT.
🧭 Jev Router
The one part of Maestro I wrote. An omp extension that asks TypeSafe Jev how much model each piece of work actually needs — before any tokens are spent on it.
flowchart LR
P([Your prompt]) --> G{Layer 0 guards}
G -- "image · huge prompt ·<br/>security / migration words" --> D[["@default"]]
G -- pass --> J[/"Jev judges tier, complexity,<br/>safe downgrade, blast radius"/]
J -- "every gate passes" --> S[["@smol"]]
J -- "otherwise · error · timeout" --> D
T([task tool call]) --> C[/"Jev picks a worker class<br/>and whether to delegate"/]
C --> W[["@jev-mechanical · bounded<br/>reasoning · architecture"]]
C -- "too entangled" --> K([parent keeps it])
classDef lead fill:#2A1E2E,stroke:#E07A5F,color:#F4E9D8
classDef small fill:#10261F,stroke:#19C39C,color:#E9FFF7
classDef jev fill:#1F1A3A,stroke:#8B6CF6,color:#ECE8FF
class D lead
class S,W small
class J,C jev
| Main turns | Before each prompt runs, Jev judges it. Only when every conservative gate passes — economy tier with high confidence, low complexity, safe to downgrade, low blast radius — does the turn run on @smol. Afterwards the session returns to @default. A model you picked by hand is left alone. |
| Subagents | Every proposed task is classified mechanical, bounded, reasoning or architecture and spawned on the matching jev-* role, with that role's fallback chain. Risky changes — auth, migrations, payments, concurrency — are floored to architecture. Work that depends on the parent's unfinished reasoning stays in the parent. |
| Fails open | No key, a 1.8 s timeout, or any Jev error means plain omp behaviour. You never get a weaker model because the router hiccuped. |
Tuning the router
All thresholds live in the CONFIG block at the top of extensions/jev-router.ts:
| Setting | Default | Meaning |
|---|---|---|
timeoutMs |
1800 |
Give up on Jev after this long and stay on @default |
maxPromptChars |
12000 |
Longer prompts skip Jev and stay on @default |
economyChoiceConfidenceMin |
0.88 |
Confidence needed in the "economy" tier |
safeDowngradeMin |
0.90 |
Confidence that a weaker model is safe |
complexityMaxForSmol |
1.25 |
Highest complexity score (0–4) allowed on @smol |
highImpactMaxForSmol |
0.15 |
Highest blast-radius probability allowed on @smol |
subagentClassConfidenceMin |
0.65 |
Below this, a subagent goes to reasoning |
subagentDelegateMin |
0.30 |
Below this, the work stays in the parent |
⌨️ Commands
| Command | What it does |
|---|---|
/maestro |
Show the active ensemble and the choices |
/maestro mix · anthropic · openai |
Switch ensemble; the live session follows |
/jev-route status |
Router counters and the last decision |
/jev-route on · off |
Turn routing on or off for this session |
/jev-route verbose · quiet |
Show or hide each routing decision |
/jev-route test <prompt> |
Dry-run the main-turn router |
/jev-route test-task <task> |
Dry-run the subagent classifier |
/vibe |
omp's director mode — the lead only directs workers |
/ponytail |
Lazy-senior-dev mode from ponytail |
📦 What gets installed
| Piece | Source | What it adds | |
|---|---|---|---|
| 🎼 | omp-maestro | this repo | Jev Router, /maestro, the smart-commit agent |
| 🐴 | ponytail | DietrichGebert/ponytail | "Lazy senior dev" mode — the smallest complete change |
| 🧰 | up to 52 skills | skills.json, via the skills CLI |
the libraries you tick in the checklist |
| 🎚️ | model roles + fallbacks | profiles.json |
written to your omp config.yml — only the roles listed |
Skills come straight from their authors' repositories, so you always get the current versions. A library that fails to install is skipped with a warning; everything else carries on.
🛠️ Make it yours
- Change any role with omp's
/model(Roles view)./maestroshowscustomonce your roles no longer match an ensemble exactly. - Ship your own ensembles — fork, edit
profiles.json. The command, the installer and the router all read it; nothing else changes. - Add or drop skill libraries — edit
skills.json; each entry is a repo, a one-line description and the skills to install.
❓ FAQ
Do I need both a Claude and a ChatGPT subscription?
Only for
mix. anthropic needs just Claude, openai needs just ChatGPT / Codex.
What happens without a TypeSafe key?
Everything works; the router simply stays out of the way and omp uses your model roles as normal. The status line shows 🧭
jev: NO KEY.
Will it overwrite my omp config?
Only the model roles and fallback chains that an ensemble defines. Your other roles, theme, keybindings and settings are left alone.
Can I run it in CI or a script?
Yes. Without an interactive terminal the checklist is skipped and every skill library is installed.
How do I uninstall?
omp plugin uninstall omp-maestro
omp plugin uninstall @dietrichgebert/ponytail # if you don't want ponytail either
npx skills remove -g # pick skills to remove
Your model roles stay as they are — change them with /model.
🙏 Credits
Maestro is the conductor, not the orchestra. The music is made by these people and teams — thank you.
![]() oh-my-pi Can Bölük & contributors the harness itself |
![]() pi-mono Mario Zechner the original pi agent |
![]() ponytail Dietrich Gebert lazy-senior-dev mode |
![]() TypeSafe Jev TypeSafe the judge & SDK behind the router |
![]() skills Vercel Labs skills CLI & find-skills |
![]() expo/skills Expo Expo, EAS & React Native |
![]() HyperFrames HeyGen video & motion graphics |
![]() emilkowalski/skills Emil Kowalski design engineering & animation |
![]() agent-toolkit Sanity schemas & migrations |
![]() coderabbitai/skills CodeRabbit code review & autofix |
![]() Exa Exa Labs web search |
Your plugin? Built something great for omp? Open an issue — I'd love to try it |
Each project keeps its own license. Maestro copies none of their code — it installs everything from the original sources.
📄 License
MIT for the Maestro code — the Jev Router, /maestro, the installer and the ensembles.
Made with 🎼 by hsmoviich & Cinnamon Code — Software with a little more intelligence.










