omp packages

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.

hsmovich Published 3 hours ago MIT ~0 downloads/mo

Built for omp

The author tagged this package oh-my-pi.

Did it work for you?

Result

One report per person. A new report replaces your old one.

Reports 0

No reports yet.

Readme

Maestro — an oh-my-pi harness in one command. Claude thinks, GPT codes, Jev decides who plays.

npm version built for oh-my-pi Claude, GPT and Jev npx or bunx MIT license

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 command

Plugins, skills, model roles and fallback chains — installed and wired up by a single npx. Pick the skill libraries you want from an arrow-key checklist.

🎻 Three ensembles

Claude only, ChatGPT only, or a mix where a thinker model leads and a coder model writes the code. Switch any time with /maestro.

🧭 Jev Router

Every 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:

  1. Log in to the providers your ensemble uses — /login → Anthropic and/or OpenAI Codex (ChatGPT plan).
  2. Give the router a key — export TYPESAFE_API_KEY=… or add TYPESAFE_API_KEY=… to ~/.omp/agent/.env.
  3. Play. The status line shows 🧭 jev: ON when 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

anthropic: Claude Opus leads, Sonnet codes and designs, Haiku takes small parts. openai: GPT-6.1 Sol leads, codes and designs, GPT-6 Luna takes small parts. mix (default): Claude Opus leads, GPT-6.1 Sol codes, Claude Sonnet designs, GPT-6 Luna takes small parts.

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). /maestro shows custom once 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.