Skip to content
maestro
Esc
  • IntroductionWhat OMP Maestro is, what it installs, and which parts are Maestro's own code.
  • InstallationInstall Maestro with npx or bunx, pick skill libraries, log in to providers and give the router a key.
  • EnsemblesThe three model ensembles — mix, anthropic and openai — and every role they assign.
  • Jev RouterHow Maestro's router uses TypeSafe Jev for main-turn downgrades and subagent worker classes, and how it fails open.
  • SkillsThe skill libraries Maestro can install, who made them, and how to add your own.
  • CommandsEvery command Maestro adds, plus the omp and ponytail commands it leans on.
  • ConfigurationCustomise roles, fallback chains, ensembles and skill libraries — and what Maestro does and doesn't touch.
  • Troubleshooting & FAQFixes for common setup problems and answers to frequent questions.

Open source · MIT · v0.1.2for oh-my-pi

Make every model play its part.

One command to bring your coding-agent setup together. Curated skills, three model ensembles, intelligent routing, and fallbacks — built on oh-my-pi.

npx omp-maestro

Claude thinks. GPT codes. Jev decides. — that's the default mix ensemble. See how it works

Jev routerLeadjev-mechanicalGPT-6 Lunajev-boundedGPT-6 Lunajev-reasoningGPT-6.1 Soljev-architectureGPT-6.1 Sol@planClaude Opus 5.5@designerClaude Sonnet 5.5@taskGPT-6.1 Sol@visionClaude Sonnet 5.5@smolGPT-6 LunaClaude Opus 5.5@default · mix ensemble

Tap a seat.Hover or tab through the seats. Inner row: the worker classes Jev routes delegated tasks to. Outer row: the other roles the ensemble fills.

01The problem

Your models are powerful. Your setup should be too.

omp already gives you model roles, fallback chains, subagents, plugins and skills. The hard part is deciding how to fill them in — and keeping that decision reproducible. Maestro is one opinionated answer, packaged.

  1. 01

    By handChoose a model for each of omp's roles — 17 of them in a full setup — and keep the choices consistent.

    With Maestro3 complete ensembles in profiles.json. Every role filled, switchable with one command.

  2. 02

    By handWrite a fallback chain for every role, so one provider's usage limit doesn't stop the session.

    With MaestroEvery role ships with a chain. Single-provider ensembles fall back within the provider; the mix falls back across them.

  3. 03

    By handFind good skill libraries, vet them, and install them one repository at a time.

    With Maestro6 curated libraries, 52 skills, picked from an arrow-key checklist and installed from the authors' repos.

  4. 04

    By handDecide, turn after turn, whether a small model is good enough — or just pay for the big one every time.

    With MaestroThe Jev Router downgrades a turn only when every conservative gate passes, and sizes each subagent to its task.

  5. 05

    By handDo it all again on the next machine.

    With MaestroRe-run the installer. Re-running is safe: it updates everything and re-applies the ensemble you name.

02Install

One command, fully equipped.

The installer checks what you already have, asks one question — which skill libraries you want — and runs the rest unattended. Try the checklist below: the commands it prints are the ones the installer would run.

Runner

Ensemble

Claude Opus orchestrates and plans, GPT Sol/Luna do the coding, Claude Sonnet does design and vision.

$ npx omp-maestro

Needs omp, git and Node.js (npx) or Bun (bunx). Missing omp or git? The installer offers to install them — nothing without a yes.

Illustrative walkthrough · not a live install

$ npx omp-maestro

🎼 Maestro 0.1.2: checking your setup

✔ omp is installed (omp/18.12.6)

✔ git (2.52.0)

✔ npx

🎼 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

Selected: coderabbitai/skills, vercel-labs/skills, expo/skills, heygen-com/hyperframes, sanity-io/agent-toolkit, emilkowalski/skills

🎼 Installing plugins

> omp plugin install @dietrichgebert/ponytail

> omp plugin install omp-maestro@0.1.2

🎼 Installing skills into ~/.agents/skills

> npx -y skills add coderabbitai/skills -g -y -a codex --skill autofix code-review

> npx -y skills add vercel-labs/skills -g -y -a codex --skill find-skills

> npx -y skills add expo/skills -g -y -a codex --skill eas-app-stores eas-hosting eas-observe eas-simulator eas-update eas-update-insights eas-workflows expo-animation expo-app-clip expo-brownfield expo-data-fetching expo-design-system expo-dev-client expo-dom expo-examples expo-migrate-module expo-module expo-native-ui expo-overview expo-project-structure expo-router expo-skill-eval expo-ui expo-upgrade expo-web-to-native

> npx -y skills add heygen-com/hyperframes -g -y -a codex --skill figma hyperframes hyperframes-cli hyperframes-registry media-use remotion-to-hyperframes slideshow

> npx -y skills add sanity-io/agent-toolkit -g -y -a codex --skill sanity-best-practices sanity-migration

> npx -y skills add emilkowalski/skills -g -y -a codex --skill animate animate-expo animation-performance animation-vocabulary apple-design ask-sonner break-ui emil-design-eng find-animation-opportunities improve-animations mobile-native pick-ui-library prototype review-animations write-swift

🎼 Applying the "mix" model setup

> omp config set modelRoles {…}

> omp config set retry.fallbackChains {…}

✔ Maestro is leading with the "mix" setup — Claude Opus orchestrates and plans, GPT Sol/Luna do the coding, Claude Sonnet does design and vision

03Ensembles

Three ensembles. One workflow.

An ensemble is a complete set of omp model roles plus a fallback chain for each. Claude thinks, GPT codes, Jev decides describes the default mix; the other two keep everything with one provider. Switch any time — the live session moves to the new lead immediately.

/maestro mix

You

“Add OAuth login”

prompt

Lead · @defaultmedium

Claude Opus 5.5

Understands, plans, splits the work, reviews what comes back.

task(…) × N

Jev Router

picks a worker class per task

spawn
  • @jev-mechanicalGPT-6 Lunalow
  • @jev-boundedGPT-6 Lunamedium
  • @jev-reasoningGPT-6.1 Solmedium
  • @jev-architectureGPT-6.1 Solhigh
Diffs and results flow back to the lead, which reviews and answers you.lead and workers on different providers

Plans

Claude Opus 5.5

@plan · high

Writes the code

GPT-6.1 Sol

@task · medium

Design & vision

Claude Sonnet 5.5

@designer · medium

Small parts

GPT-6 Luna

@smol · low

Claude Opus orchestrates and plans, GPT Sol/Luna do the coding, Claude Sonnet does design and vision. Log in to: Anthropic + OpenAI Codex.

Every role, every ensemblefrom profiles.json

Anthropic OpenAI Codex TypeSafe Jev Web search / another role

Model roles and for each Maestro ensemble
Rolemixanthropicopenai
defaultThe main agent you talk to. Reads, plans, delegates and reviews.Claude Opus 5.5· mediumClaude Opus 5.5· mediumGPT-6.1 Sol· medium
planomp's plan mode: read-only exploration before execution.Claude Opus 5.5· highClaude Opus 5.5· highGPT-6.1 Sol· high
slowThe heavyweight slot in omp's model cycle, for hard turns.Claude Opus 5.5· highClaude Opus 5.5· highGPT-6.1 Sol· high
taskThe default subagent — this is who writes most of the code.GPT-6.1 Sol· mediumClaude Sonnet 5.5· mediumGPT-6.1 Sol· medium
designerDesign-focused subagent work.Claude Sonnet 5.5· mediumClaude Sonnet 5.5· mediumGPT-6.1 Sol· medium
visionReads images and describes them for text-only models.Claude Sonnet 5.5· mediumClaude Sonnet 5.5· mediumGPT-6.1 Sol· medium
smolFast, cheap model. Jev's main-turn downgrade target; /vibe's fast workers.GPT-6 Luna· lowClaude Haiku 5.5· lowGPT-6 Luna· low
tinyVery small background jobs such as titles.GPT-6 Luna· lowClaude Haiku 5.5· lowGPT-6 Luna· low
memoryMemory summarisation pipelines.GPT-6 Luna· lowClaude Haiku 5.5· lowGPT-6 Luna· low
commitCommit work — the smart-commit agent runs on @commit.GPT-6 Luna· lowClaude Haiku 5.5· lowGPT-6 Luna· low
jev-mechanicalInventory, grep, enumerate, extract.GPT-6 Luna· lowClaude Haiku 5.5· lowGPT-6 Luna· low
jev-boundedFocused work inside one well-defined subsystem.GPT-6 Luna· mediumClaude Haiku 5.5· mediumGPT-6 Luna· medium
jev-reasoningTracing behaviour across components; the safe middle tier.GPT-6.1 Sol· mediumClaude Sonnet 5.5· mediumGPT-6.1 Sol· medium
jev-architectureCross-cutting design, migrations, security boundaries.GPT-6.1 Sol· highClaude Opus 5.5· highGPT-6.1 Sol· high
judgeJudging and classification inside omp — TypeSafe Jev.TypeSafe JevTypeSafe JevTypeSafe Jev
webWeb search provider.ExaExaExa
advisoromp's optional second model that reviews turns, when enabled.GPT-5.6 Sol· mediumClaude Opus 5.5· mediumGPT-6 Sol· medium

04Jev Router · the part Maestro wrote

The right model for the right job.

An omp extension that asks TypeSafe Jev how much model each piece of work needs — before any tokens are spent on it. It is deliberately conservative: it only ever routes down when every check agrees, and when anything goes wrong it steps aside.

Main turns

before_agent_start

01

Your prompt

Before the turn starts. A model you picked by hand is left alone.

02

Layer 0 guards

Image attached · longer than 12,000 chars · high-impact keyword → @default, no Jev call.

03

Jev judges

Tier, complexity, safe-to-downgrade, blast radius.

04

Six gates

All must pass. One miss keeps the lead.

  • @smol

    Every gate passed. This turn only; the session returns to @default after.

  • @default

    Anything else — including a Jev error or timeout.

Subagents

tool_call → before_subagent_spawn

01

task(…) call

The lead proposes work for subagents, single or batched.

02

Jev classifies

Worker class, and whether the task should be delegated at all.

03

Floors & minimums

Risky changes → architecture. Confidence < 0.65 → reasoning. P(delegate) < 0.3 → parent keeps it.

04

Spawn

On the @jev-* role, with that role's fallback chain.

  • @jev-mechanical · bounded · reasoning · architecture

    The smallest class that can reliably do this task.

  • parent

    Work that depends on the lead's unfinished reasoning stays with the lead.

Routing playground

illustrative
Example prompts

Layer 0, the gates, the architecture floor and every threshold run the router's actual logic in your browser. Jev's scores for the examples are made up for illustration — this page never calls TypeSafe.

  1. 1

    Layer 0 guardsrouter logic

    No image, under the length limit, no high-impact keyword. On to Jev.

  2. 2

    Jev judges · six gatesillustrative scores

    • Tiereconomy = economy
    • Tier confidence0.94 ≥ 0.88
    • Complexity (0–4)0.40 ≤ 1.25
    • Complexity confidence0.90 ≥ 0.65
    • Safe to downgrade0.95 ≥ 0.9
    • Blast radius0.04 ≤ 0.15
  3. 3

    Route

    @smolGPT-6 LunaEvery gate passed. This turn only — the session returns to @default afterwards.

No key? No problem.

Without TYPESAFE_API_KEY the router stays out of the way and omp uses your model roles as normal. The status line says jev: NO KEY.

Fails open after 1.8 s

Jev gets 1,800 ms and no retries. A timeout or any error means plain omp behaviour — never a weaker model because the router hiccuped.

Your choice wins

Pick a model by hand and the router leaves that turn alone. /jev-route off disables it for the session.

Gates, thresholds and tuningRead extensions/jev-router.ts

05Skills

Your agent deserves better tools.

6 libraries, 52 skills, chosen by hand and installed straight from their authors' repositories with the skills CLI — so you always get the current versions. Tick the ones you want in the installer's checklist; a library that fails to install is skipped with a warning.

6 libraries · 52 skills

  1. 2skills
    coderabbitai/skills

    CodeRabbit code review and auto-fixing of PR review comments

    by CodeRabbit

    • autofix
    • code-review
  2. 1skill
    vercel-labs/skills

    find-skills: search and install more skills when you need a new capability

    by Vercel Labs

    • find-skills
  3. 25skills
    expo/skills

    Expo / React Native apps: routing, native UI, modules, EAS builds, updates and store releases

    by Expo

    • eas-app-stores
    • eas-hosting
    • eas-observe
    • eas-simulator
    • eas-update
    • eas-update-insights
    • eas-workflows
    • expo-animation
    • expo-app-clip
    • expo-brownfield
    • expo-data-fetching
    • expo-design-system
    • expo-dev-client
    • expo-dom
    • expo-examples
    • expo-migrate-module
    • expo-module
    • expo-native-ui
    • expo-overview
    • expo-project-structure
    • expo-router
    • expo-skill-eval
    • expo-ui
    • expo-upgrade
    • expo-web-to-native
  4. 7skills
    heygen-com/hyperframes

    HyperFrames: make videos, slideshows and motion graphics from HTML, plus Figma import

    by HeyGen

    • figma
    • hyperframes
    • hyperframes-cli
    • hyperframes-registry
    • media-use
    • remotion-to-hyperframes
    • slideshow
  5. 2skills
    sanity-io/agent-toolkit

    Sanity CMS: schema/GROQ best practices and migrating content into Sanity

    by Sanity

    • sanity-best-practices
    • sanity-migration
  6. 15skills
    emilkowalski/skills

    Emil Kowalski's design engineering: UI polish, web/Expo animation, Apple-style design, Swift

    by Emil Kowalski

    • animate
    • animate-expo
    • animation-performance
    • animation-vocabulary
    • apple-design
    • ask-sonner
    • break-ui
    • emil-design-eng
    • find-animation-opportunities
    • improve-animations
    • mobile-native
    • pick-ui-library
    • prototype
    • review-animations
    • write-swift

Want a different set? Edit skills.json in your fork — each entry is a repo, a one-line description and the skills to install.

06Fallbacks & control

Built for flexibility. Not lock-in.

Every role comes with a fallback chain, written into omp's own retry.fallbackChains. Single-provider ensembles fall back within that provider; the mix falls back across providers, so one plan's usage limit doesn't have to stop the session.

@task — The default subagent — this is who writes most of the code.

  1. 1stGPT-6.1 Solopenai-codex/gpt-6.1-sol:mediumprimary
  2. if unavailable
    2ndGPT-6 Solopenai-codex/gpt-6-sol:medium
  3. if unavailablecrosses to Anthropic
    3rdClaude Sonnet 5.5anthropic/claude-sonnet-5-5:medium
profiles.json → mix · task
{  "modelRoles": {    "task": "openai-codex/gpt-6.1-sol:medium"  },  "retry.fallbackChains": {    "task": [      "openai-codex/gpt-6-sol:medium",      "anthropic/claude-sonnet-5-5:medium"    ]  }}
bin/omp-maestro.mjs — merge, don't replace
// Merge: only the roles this setup defines are replaced, the user's other roles stay.run("omp", ["config", "set", key, JSON.stringify({ ...current, ...profiles[setup][field] })]);

When a provider fails

That's omp's retry logic at work: when a request fails, omp can move to the next model in the role's chain, following its own retry settings. Maestro only supplies the chains.

When the router fails

A missing key, a 1,800 ms timeout or any Jev error makes the Jev Router step aside. Turns run on @default, tasks on omp's normal roles. Nothing else in Maestro depends on it.

When you change your mind

It's your omp config. Change any role with /model, fork profiles.json to ship your own ensemble, or switch back with /maestro. Configuration guide

07Day to day

After installing, you just work.

A handful of commands cover everything Maestro adds. Click one to see what omp prints — switching ensembles moves the session's lead, and turning the router off updates the status line.

Maestrosource ↗

omp built-insource ↗

ponytailsource ↗

omp · illustrative sessionMaestro

Router counters and the last decision.

›/jev-route status

enabled=true | verbose=false | key=yes | smol=3 | default=11 | skip=1 | judgeErrors=0 | child[mech=5,bounded=7,reasoning=4,arch=2,parent=1,errors=0] | last=route=default tier=standard/0.84 complexity=2.10/0.81 downgrade=0.22 impact=0.09 web=0.12 690ms — @default safety gates: tier=standard, tierConfidence=0.84, complexity=2.10, safeDowngrade=0.22

Output format from the source; the counters and scores are examples.

Claude Opus 5.5 · mix🧭 jev: ON

Every flag and subcommand is in the command reference.

08How it fits together

A thin layer, clearly labelled.

omp does the work. Maestro configures it and adds one extension. Everything else is installed from its authors. Here is who owns what.

You

Developer at the terminal

  • omp
  • /maestro
  • /jev-route
  • /vibe

oh-my-pi (native)

The harness: sessions, tools, subagents, settings

  • modelRoles
  • retry.fallbackChains
  • task tool
  • /model
  • /login
  • /vibe
  • plugins
  • skills loader

Maestro · MIT

omp-maestro plugin + installer

  • extensions/jev-router.ts
  • extensions/maestro.ts
  • agents/smart-commit.md
  • profiles.json
  • skills.json
  • bin/omp-maestro.mjs

Community

Installed from the original sources

  • ponytail
  • skills CLI
  • 6 skill libraries → ~/.agents/skills

TypeSafe

Judges routing decisions

  • Jev (jev-latest)
  • @typesafe-ai/sdk
  • TYPESAFE_API_KEY

Model & search providers

Do the actual work

  • Anthropic
  • OpenAI Codex
  • Exa → DuckDuckGo
Native omp
Roles, chains, subagents and commands like /vibe exist without Maestro.
Maestro
Fills them in, adds the router and /maestro, and installs the rest.
TypeSafe
Answers the router's questions. Optional: no key, no routing.
Community
ponytail and every skill library — each with its own license.

09Why Maestro

Less setup. More building.

Everything Maestro does, you could do by hand in omp. That's the point: it's a reproducible starting point, not a black box. Here's the honest comparison.

Configuring omp by hand compared with installing Maestro
Aspectomp by handomp + Maestro
Model rolesPick a model for each of 17 roles3 ready-made ensembles, one command to switch
Fallback chainsWrite one per roleEvery role has one; the mix crosses providers
SkillsFind and install each repository6 curated libraries, 52 skills, one checklist
Small modelsSwitch by hand, or neverJev Router — only when every gate passes
New machineRepeat the aboveRe-run npx omp-maestro
ControlTotalTotal — Maestro only writes the roles it defines

No benchmarks here, on purpose: how much a router saves depends entirely on your prompts. /jev-route status shows you how your own turns were routed.

10Open source & credits

Maestro is the conductor. The community is the orchestra.

Most of what Maestro installs is other people's work. Every plugin and skill comes from its original source, and nothing is copied. Go star their repositories.

The stage

The skill libraries

Maestro's own code is MIT-licensed

The Jev Router, /maestro, the installer and the ensembles. Each third-party project keeps its own license.

Built something for omp? Suggest it

11FAQ

Questions, answered.

Can't find yours? Troubleshooting has more.

Do I need both a Claude and a ChatGPT subscription?

Only for mix. The anthropic ensemble needs just Claude; openai needs just ChatGPT / Codex. Log in inside omp with /login.

Can I use only one provider?

Yes. Install with npx omp-maestro anthropic or npx omp-maestro openai, or switch later with /maestro anthropic / /maestro openai. Single-provider ensembles also keep their fallback chains within that provider.

Does the Jev Router need a TypeSafe API key?

Yes — set TYPESAFE_API_KEY in your environment or in ~/.omp/agent/.env. Without it everything else still works: the router stays out of the way, omp uses your model roles as normal, and the status line shows jev: NO KEY.

What happens if Jev is unavailable?

The router fails open. A missing key, a 1,800 ms timeout or any Jev error means plain omp behaviour: the turn runs on @default, and subagents use omp's normal roles. You never get a weaker model because the router hiccuped.

Will Maestro overwrite my existing omp configuration?

Only the model roles and fallback chains an ensemble defines. The installer reads your current modelRoles and retry.fallbackChains and merges into them; your other roles, theme, keybindings and settings are left alone.

Can I switch ensembles later?

Any time, with /maestro mix, /maestro anthropic or /maestro openai. The live session moves to the new lead model immediately. Re-running the installer with a different ensemble name works too.

How do I customise roles?

Use omp's /model (Roles view) to change any single role; /maestro then shows custom. To ship your own ensembles, fork the repository and edit profiles.json — the command, the installer and the router all read it.

How do I uninstall it?

Run omp plugin uninstall omp-maestro, optionally omp plugin uninstall @dietrichgebert/ponytail, and npx skills remove -g to pick skills to remove. Your model roles stay as they are — change them with /model.

Does it work in CI or other non-interactive environments?

Yes. Without an interactive terminal the skills checklist is skipped and every skill library is installed. The installer also won't offer to install missing tools — omp has to be present already.

What is Maestro's relationship to oh-my-pi?

Maestro is an omp plugin plus an installer, made by an omp user — not part of the omp project and not a replacement for it. omp, by Can Bölük and contributors, does all the actual work; Maestro configures it and adds the Jev Router and /maestro.

Ready to conduct?

npx omp-maestro

A Cinnamon Code project · software with a little more intelligence