AI · Tutorial
How to Migrate from Claude Code to oh-my-pi (omp)
Everything you need to know to move from running Claude Code inside a terminal to using omp, including what you gain, what you lose, and how to set up permissions.
I've settled on oh-my-pi (omp) as my daily coding harness. It's the best terminal coding agent I've used, and anyone doing serious engineering work should give it a try.
If you haven't heard of it, omp is an open-source coding harness for the terminal, made by Stencil. It works with basically every AI provider and subscription, including your Claude Max and Codex subs.
If you'd like a guided migration, paste this into a fresh Claude Code session:
I'm switching from Claude Code to omp (oh-my-pi), an open-source coding agent for the terminal. Its docs are at https://github.com/can1357/oh-my-pi/tree/main/docs. Help me migrate. Don't change any files until I say so.
1. Look at my Claude Code setup: ~/.claude/ (CLAUDE.md, settings.json, skills, commands, agents, plugins), the MCP servers in ~/.claude.json, and any CLAUDE.md, CLAUDE.local.md or .claude/ folder in this project.
2. Skim my recent sessions in ~/.claude/projects/ to learn how I work: the models I pick, the commands and skills I use most, and the things I keep repeating.
3. Read omp's docs. Work out what carries over as-is, what needs converting (settings.json hooks, permission rules, .claude/agents/*.md, auto memory), and which omp features I'd get the most out of.
4. Give me a checklist. Put the next action first. Number the steps, one action per step. Mark the optional ones. End with the single next thing I should do.
5. Walk me through it one step at a time. Wait for me to finish each step before giving me the next one.Why I switched#
I'm a coding agent power user. For months, I bounced between Claude Code, Codex, Cursor CLI, Devin CLI, OpenCode, and Antigravity - whichever one was appropriate for the task at hand. That got old fast, so I went looking for a harness that could do everything I needed all under one roof.
omp does that. It runs all my subscriptions and models from a single terminal, and it's genuinely hackable in ways most others aren't.
It also has a few things the other harnesses either don't have or don't do well: detailed analytics across every provider and model, novel compaction techniques, cache warming for long sessions, load balancing across multiple subscriptions to the same provider, and deep customizability to match your given working preferences.
Install and log in#
Install omp with one command:
# macOS and Linux
curl -fsSL https://omp.sh/install | sh
# Windows (PowerShell)
irm https://omp.sh/install.ps1 | iexRun omp once it's installed. It drops you straight into an onboarding wizard where you can log in with your Claude Max subscription.

omp opens a claude.ai login page in your browser. Approve it and you're all set. If omp asks for an authorization code, copy it from the browser and paste it into the terminal.

Warning
Anthropic's terms say that Claude subscription logins are meant for Claude Code and Anthropic's own apps, and omp identifies itself as Claude Code when you log in this way. However, on October 7, 2026, Anthropic provided a significant update stating "you can still use ... third-party apps with your subscription limits." If you're not comfortable with that, log in with an Anthropic API key instead.
You'll also pick a default model, a glyph mode, a composer shape, and a theme.

For your glyph mode, I strongly recommend a Nerd Font. If you don't have one, FiraCode Nerd Font is a good pick, and it makes omp's UI much easier to read.

Any composer shape will work fine, but the Claude Code shape will look most familiar.

The last step is picking a theme. I use Titanium, which is the default for dark terminals.
Permissions#
Know this before you use omp for real: its default operating mode is YOLO mode (AKA: --dangerously-skip-permissions). Claude Code's auto mode doesn't go that far. In YOLO mode, nothing checks a bash command before omp runs it. omp does know about a handful of catastrophic commands, like rm -rf / and fork bombs, but YOLO mode skips that check too.
omp has three approval modes:
| Mode | Runs without asking | Asks first |
|---|---|---|
always-ask |
Reads | Edits and commands |
write |
Reads and edits | Commands |
yolo (default) |
Everything | Nothing |
If you want Claude Code's old behavior, where it asked before every edit and command, pick always-ask. If you'd rather let it edit files freely but still check with you before running commands (similar to Claude Code's accept-edits mode), go with write.
tools:
approvalMode: always-askYou can also set the mode for a single session by starting omp with omp --approval-mode always-ask.
No matter which mode you choose, you can block specific commands you never want omp to run. omp checks your bash.patterns rules in order and uses the first one that matches, and you can use * as a wildcard:
tools:
approval:
eval: prompt
bash:
patterns:
- match: "rm -rf *"
approval: deny
- match: "git push*"
approval: promptA deny rule applies in every mode, including YOLO mode, and it'll catch a command even when you chain it with &&, ; or |.
That eval: prompt line matters. omp's eval tool runs Python and JavaScript, and those scripts can start their own shell without going through your bash.patterns rules. eval: prompt makes omp ask before it runs one.
One important caveat: subagents always run in YOLO mode. Your deny rules still apply to them, but a prompt rule is refused, since a subagent can't stop midstream and ask you for permission to do something.
If you want something closer to Claude Code's auto mode, there's a community plugin called guard that has a model review each command before it runs:
omp plugin install guard@casonadams-pluginsWhat carries over#
omp reads any CLAUDE.md and AGENTS.md file in your project, including the ones in parent folders up to your repo root. It skips CLAUDE.local.md and AGENTS.override.md by default, but you can add them to your config:
contextFiles:
extra: [CLAUDE.local.md, AGENTS.override.md]If you've been using Claude Code for a while, you've probably accumulated quite a bit in your ~/.claude directory. omp ignores it by default, but you can opt in with enabledProviders:
enabledProviders: [claude]This keeps your user-level CLAUDE.md, skills, slash commands, MCP servers, and Claude plugins working. omp picks up project-level .claude directories either way. If you also have an ~/.omp/agent/AGENTS.md file, omp uses it instead of your ~/.claude/CLAUDE.md.
The one thing that won't carry over is Claude Code's auto-memory. Claude Code stores memory in ~/.claude/projects/<project>/memory, and even though omp has a memory feature, it's disabled by default. If you have anything in there worth keeping, move it into your CLAUDE.md (or just ask omp to do it).
If you have any long-running sessions in Claude Code, you can resume them in omp. Run omp --from-claude and it will open a menu letting you import the Claude Code session into omp (it's similar to claude --resume). You can also do this if you're already in a session by running /resume @claude.
A few things won't work 1:1:
- .claude/agents: omp loads subagents from .omp/agents or ~/.omp/agent/agents and the frontmatter is slightly different.
- Hooks from settings.json: instead of shell commands, omp uses TS/JS files that go in ~/.omp/agent/hooks/pre or ~/.omp/agent/hooks/post.
- Permission rules: omp has its own system for granular permissions (covered above).
That said, you can ask omp to port all of these for you.
Make it feel like Claude Code#
Most of this is covered in the onboarding wizard, but if you need to do it manually:
composer:
shape: claude
symbolPreset: nerdMost keyboard shortcuts should work how you expect, except for these two:
| Key | Claude Code | omp |
|---|---|---|
| Shift+Tab | Cycle permission modes | Cycle thinking level |
| Alt+Shift+P | Toggle plan mode |
You can find all the keyboard shortcuts, as well as instructions for changing them, in the omp keybindings docs.
Claude Code to omp equivalents#
Most slash commands have the same name (/resume, /clear, /compact, /btw, /review, /export, and so on), but a few are different:
| Claude Code | omp |
|---|---|
/rewind |
/rewind (conversation only, not files) |
/cd |
/move |
/cost, /usage |
omp stats, omp usage |
/plugin |
/marketplace, /plugins |
--worktree |
/wt, omp worktree |
| Remote Control | /collab |
| Messaging your other sessions | agent-bus |
Model roles#
Claude Code gives you one model at a time. omp lets you assign different models to different roles. You set the model for each role once, and that's the model that will be used for that role going forward.
Here's what my modelRoles config looks like at the time of this writing:
modelRoles:
default: anthropic/claude-sonnet-5-5:high
plan: anthropic/claude-opus-5-5:high
task: anthropic/claude-opus-5-5:medium
slow: anthropic/claude-opus-5-5:high
advisor: anthropic/claude-opus-5-5:medium
smol: anthropic/claude-haiku-5-5:medium
tiny: anthropic/claude-haiku-5-5:low
commit: anthropic/claude-haiku-5-5:low
web: openai-codex/gpt-5.6-luna
judge: typesafe/jev-latest:auto| Role | What it's for | What I use |
|---|---|---|
default |
Your main conversation | Sonnet 5.5 |
plan |
Plan mode | Opus 5.5 |
task |
Subagents | Opus 5.5 |
slow |
Deep reasoning | Opus 5.5 |
advisor |
Reviews each turn in the background | Opus 5.5 |
smol |
Quick, cheap tasks | Haiku 5.5 |
tiny |
Session titles | Haiku 5.5 |
commit |
Commit messages | Haiku 5.5 |
web |
Web search | GPT-5.6 Luna |
judge |
Quick classification calls that save tokens in the long run, like ranking results for omp's find search tool |
TypeSafe's jev |
The :high, :medium, or :low suffix sets the effort level for that model. You can change it any time from the model picker (Alt+M).
Notice how I'm not limited to just one provider. I use GPT for web searches (since I have a ChatGPT subscription) and TypeSafe's model for the judge role as a classifier.
You can also configure fallback chains per role, so that if one model errors or has a rate limit, omp will try the next.
retry:
fallbackChains:
default:
- opencode-go/muse-spark-1.3-contributor:low
plan:
- opencode-go/muse-spark-1.3-contributor:medium
slow:
- opencode-go/muse-spark-1.3-contributor:medium
web:
- anthropic/claude-opus-5-5
- web/duckduckgo
- web/startpageWhat you can do in omp that you can't in Claude Code#
Prewalk: let an expensive model work until it begins editing files, then immediately hand off to your smol model to follow the pattern. Stencil found this retains 92-97% of the frontier model's pass rate at roughly half the cost. Enable it with --prewalk.
Snapcompact: instead of summarizing the conversation when the context fills up, omp renders it as images in a pixel font. Models with vision (eg: Claude) can read these almost verbatim, often at 1/3 the token cost. Since it's done locally, you don't even need to make a model call for compaction. By default, omp will try to compact with the provider first. If you want to prefer snapcompact, add the following to your config file:
compaction:
methodOrder: [snapcompact, remote, handoff, shake, soft]Cache warming: right before your prompt cache expires, omp will resend your last request with a one-token output limit. This keeps your cache alive through short breaks so your next message doesn't pay the full token price to rebuild it. omp is smart enough to only do this when the savings of this feature outweighs the cost of the cachebust and refresh, and it stops keeping the cache warm after thirty minutes of inactivity. This functionality is enabled by default.
/omfg: did the agent just do something you never want to see again? Run /omfg and omp will create a rule based on the conversation that will interrupt and re-attempt the next time the agent tries the same thing.
omp stats: a local dashboard to view usage, cost, and analytics across all providers and models.
Use multiple accounts for a given provider. Log in with two or more Claude Max (or other) accounts, and omp will automatically load balance usage between them.
What you can do in Claude Code that you can't (yet) in omp#
Most of what's missing is proprietary cloud functionality that runs on Anthropic's servers:
- Cloud session management, routines, Projects, the Claude mobile app. You can open a session in your browser with
/collab, but you won't get push notifications. - The code review GitHub app,
/ultrareview, and@claudein GitHub/GitLab/Slack. omp has/review, which runs locally.
Some local features Claude Code has that omp doesn't yet:
/rewind: in omp, this will only rewind the conversation, not the files. You should probably commit often if you frequently use this feature.- Sandboxing for bash commands: in omp you can set approval rules to control what it's allowed to run, but it will have full access to your machine for anything it's allowed to run.
- Artifacts, scheduling. There are community projects like open-artifacts. If your editor supports ACP, you can use
omp acp. There are also community plugins for VS Code and JetBrains.
If there's a feature you need that omp doesn't have, one power move to try is to just ask omp itself to build a plugin for it. I've had pretty decent success with this.
Should you use omp instead of Claude Code?#
I don't have a benchmark. I just really enjoy using it.
If you're a terminal user with subscriptions to multiple AI providers, or if you like tinkering with your tooling, I think you'll enjoy omp. If you're heavily relying on Claude Code's cloud features, or you're uncomfortable with how omp logs in to your Claude subscription, then you might want to hold off.
Either way, it's quick to try. Paste the prompt at the top of this post into Claude Code and see what it says.