Setting Up and Testing OMP (Oh My Pi) Agent

I wrote about setting up Pi a couple of months ago. I still use Pi, but less than before – my daily driver these days is Grok Build, as noted on my AI stack page. I recently discovered OMP (Oh My Pi) – a different terminal coding agent based on Pi – and I have been liking how it works so far. I am still testing it, but one thing I really like is how it lets my three model services work together instead of competing.

Claude Opus 5 does the thinking, DeepSeek v4 Flash does the cheap heavy lifting, and Grok 4.5 fills in the gaps. And I can switch the whole combination per project with one command.

Here's how it works.

The problem

I use three services:

The problem was never "which model is best". The real problem was using all three without manually switching models every few minutes, and without burning Claude's quota on repetitive tasks.

Model roles

OMP has a model roles feature where instead of configuring one model, you configure a model for each role in the config file:

Role What it does
default The main model that does the actual work
plan Used when a task needs planning first
slow The heaviest model, for the hardest problems
task Subagents – the model used when work is delegated to parallel agents
smol / tiny Lightweight tasks like titles and commit messages
vision Image analysis
designer UI and design work
advisor A second model that watches every turn and can interrupt with concerns

Each role also takes a thinking level: minimal, low, medium, high, xhigh, or max. So "use Claude Opus 5 for everything, but with different thinking effort" is literally a few lines of config. The complete list of roles lives in the settings documentation under modelRoles.

OMP agent model roles for the 'cheap' profile I created

My three profiles

Profiles live in ~/.omp/profiles/ as YAML files. Each one maps roles to models. I have three:

Three OMP profiles I have

1. opus-only (my default)

Everything on Claude Opus 5, graded by thinking effort:

modelRoles:
  default:  anthropic/claude-opus-5:medium
  plan:     anthropic/claude-opus-5:xhigh
  slow:     anthropic/claude-opus-5:max
  task:     anthropic/claude-opus-5:medium
  smol:     anthropic/claude-opus-5:low
  commit:   anthropic/claude-opus-5:low
  vision:   anthropic/claude-opus-5:medium
  designer: anthropic/claude-opus-5:high
  advisor:  anthropic/claude-opus-5:medium

Use this when quality matters most and quota is fine.

2. hybrid

Opus 5 still drives, but DeepSeek v4 Flash takes the volume roles:

modelRoles:
  default:  anthropic/claude-opus-5:medium
  plan:     anthropic/claude-opus-5:xhigh
  slow:     anthropic/claude-opus-5:max
  task:     deepseek/deepseek-v4-flash:max   # subagent fan-out = where tokens vanish
  smol:     deepseek/deepseek-v4-flash:max
  tiny:     xai-oauth/grok-4.5:minimal
  commit:   xai-oauth/grok-4.5:minimal
  vision:   xai-oauth/grok-4.5:medium
  designer: xai-oauth/grok-4.5:high
  advisor:  xai-oauth/grok-4.5:low

Use this for long agentic sessions with wide subagent fan-outs, where Anthropic quota matters.

3. cheap

DeepSeek v4 Flash does the work, Grok plans, Opus supervises:

modelRoles:
  default:  deepseek/deepseek-v4-flash:max   # the workhorse
  task:     deepseek/deepseek-v4-flash:max   # subagents on the same workhorse
  smol:     deepseek/deepseek-v4-flash:max
  commit:   deepseek/deepseek-v4-flash:max
  slow:     deepseek/deepseek-v4-pro:max     # escalation, still DeepSeek
  plan:     xai-oauth/grok-4.5:high          # structuring the work
  tiny:     xai-oauth/grok-4.5:minimal
  vision:   xai-oauth/grok-4.5:medium        # deepseek is text-only
  designer: xai-oauth/grok-4.5:high
  advisor:  anthropic/claude-opus-5:medium   # Claude watches the weaker driver

Use this when Anthropic quota is spent, or the work is high-volume and low-stakes.

Pinning a profile per project

Profiles are just files. The switching mechanism is a tiny shell function I added to my ~/.zshrc:

omp-pin() { mkdir -p .omp && cp ~/.omp/profiles/"$1".yml .omp/config.yml && echo "pinned $1 -> $PWD/.omp/config.yml"; }

Pinning the cheap profile to a project

Run omp-pin cheap inside a project and that project now uses the cheap profile. The project config is an overlay – anything not listed in it falls through to the global config, so a profile only changes what it needs to.

The advisor

My favorite part of this setup is that every profile has an advisor – even the cheap one. In cheap, Claude doesn't do the work; it watches. The advisor role reviews each completed turn and can interrupt with a concern if the main model is about to do something wrong.

The cheap profile tunes it to be stricter:

advisor:
  enabled: true
  syncBacklog: "1"    # primary waits (<=30s) for review to catch up
  immuneTurns: 1      # let Claude interrupt often

So the worst case for a cheap run is DeepSeek v4 Flash doing the work, Grok planning it, and Claude supervising it. For low-stakes tasks that's overkill in a good way.

Approval mode

I run everything in yolo mode – all commands and edits are auto-approved, no permission popups. I know most people would hate this, but it works for me for two reasons: I review every diff before committing, and the sessions are easy to redo if something goes wrong. The approval modes are worth reading before you decide.

Profiles deliberately don't set tools: – approval policy stays whatever the global config says. Only models are set per project, and safety policy stays global.

Fallback chains

Claude's quota runs out if I use it for everything – that's the whole reason for this setup. So I set up fallback chains: if the active model fails or exhausts its limits, the session automatically moves down a chain instead of stopping:

retry:
  fallbackChains:
    default:
      - anthropic/claude-opus-5:medium
      - deepseek/deepseek-v4-pro:high
      - xai-oauth/grok-4.5:high

Rate limits were never really the problem – they are rarely an issue. The chains exist so that when Claude's or Grok's quota is exhausted, the work shifts to the fallback and the session keeps going. And once the primary model is available again, the session switches back.

Final thoughts

OMP is still in its testing phase for me. Pi still has its place, mainly for side projects, and I have been using it regularly. So far, here is what I like about how OMP works:

The best part is that this is all config files – no product decision locked me in. If DeepSeek, Codex, or any other provider releases something better, I can switch to it with one line in one profile. If I want a project to behave differently, I pin a different profile.

I will keep updating this post as the setup changes.

Comment on Mastodon

Webmentions

❤️ 1
What’s this?