Skip to content
dots
Esc
↑↓navigate↵open⌘Jpreview
On this page

omp

omp agent config, keybindings, MCP servers, cyberdream theme, custom commands, and the scheduled research loops under ~/.omp.

omp (oh-my-pi) is a terminal coding agent. The repo manages its agent directory (~/.omp/agent) and a set of prompt loops in ~/.omp/loops. chezmoi does not install the omp binary; install it yourself. topgrade keeps it current with the custom command "Omp Update" = "omp update".

Files

Source in repo Target Notes
dot_omp/private_agent/ ~/.omp/agent/ Directory mode 0700
dot_omp/private_agent/private_config.yml ~/.omp/agent/config.yml Mode 0600
dot_omp/private_agent/keybindings.yml ~/.omp/agent/keybindings.yml
dot_omp/private_agent/private_mcp.json ~/.omp/agent/mcp.json Mode 0600
dot_omp/private_agent/themes/cyberdream.json ~/.omp/agent/themes/cyberdream.json Custom theme
dot_omp/private_agent/commands/*.md ~/.omp/agent/commands/*.md Slash commands
dot_omp/loops/bin/executable_run-loop.sh ~/.omp/loops/bin/run-loop.sh Loop runner
dot_omp/loops/<name>/private_loop.md ~/.omp/loops/<name>/loop.md One prompt per loop, mode 0600
dot_omp/loops/goals/private_templates.md ~/.omp/loops/goals/templates.md Unscheduled /goal templates

No omp file is role-gated. In chezmoi’s symlink mode, private_ and executable_ entries are written as regular files, not symlinks.

config.yml

theme:
  dark: titanium
  light: light
symbolPreset: nerd
setupVersion: 2
hideThinkingBlock: false
modelRoles:
  plan: anthropic/claude-fable-5
composer:
  shape: rule
Key Value Effect
theme.dark titanium Theme on a dark terminal background (omp’s default, pinned explicitly)
theme.light light Theme on a light terminal background (omp’s default)
symbolPreset nerd Nerd Font glyphs instead of the default unicode set; the repo’s font is Victor Mono Nerd Font
hideThinkingBlock false Thinking blocks stay visible
modelRoles.plan anthropic/claude-fable-5 Model for the plan role; other roles use omp defaults
composer.shape rule Built-in rule composer style instead of the default box
setupVersion 2 Internal settings version marker

No API keys are stored in config.yml.

Keybindings

app.editor.external: Ctrl+E
app.exit: Ctrl+Q
Key Action
Ctrl E Open the current prompt in the external editor (app.editor.external)
Ctrl Q Quit omp (app.exit)

All other bindings are omp defaults.

MCP servers

mcp.json declares three remote MCP servers over HTTP. No credential values are stored in the file.

Server Transport Endpoint Auth
exa http https://mcp.exa.ai/mcp none
cloudflare-api http https://mcp.cloudflare.com/mcp OAuth; omp stores the token in its own credential store under a profile credential id
github http https://api.githubcopilot.com/mcp/ Authorization header built at request time by a ! shell command that reads the token from gh auth token

The GitHub server therefore needs the GitHub CLI to be logged in. The $schema key points at omp’s mcp-schema.json for editor validation.

Theme

themes/cyberdream.json ports the cyberdream palette to omp’s theme schema. It installs the theme, but config.yml currently selects titanium for dark mode. To use cyberdream, set theme.dark: cyberdream.

Var Hex Used for
bg #16181a base background
bgAlt #1e2124 user/custom message, tool, and status-line backgrounds
bgHighlight #3c4048 selection
fg #ffffff message and tool output text
grey #7b8496 muted, dim, thinking text, comments, quotes, borders
blue #5ea1ff accent, borders, links, functions, status-line path
cyan #5ef1ff accent borders, tool titles, inline code, types, context meter
green #5eff6c success, diff additions, strings, clean git
red #ff6e5e errors, diff removals, untracked files
yellow #f1ff5e warnings, variables, bash mode, dirty git
magenta #ff5ef1 keywords, subagent count
pink #ff5ea0 operators, spend
orange #ffbd5e Markdown headings, cost
purple #bd5eff numbers, python mode, model name

The thinking-level indicator runs grey (off) → blue → cyan → green → yellow → orange → red (max).

Commands

Command Invocation Purpose
/leetcode-docs /leetcode-docs <file> [extra instructions] Converts a LeetCode solution file into a Fumadocs MDX page at content/docs/leetcode/<difficulty>/<category>/<number>-<slug>.mdx. The page has a difficulty callout, problem, examples, constraints, a derived intuition paragraph, the solution copied verbatim (multiple approaches become tabs), and a complexity callout. Prints only the output path.
/leetcode-eli5 /leetcode-eli5 <file> [extra instructions] Adds beginner-level line-by-line comments and a // ==== banner to a LeetCode solution. Leaves the header, JSDoc, and code byte-for-byte unchanged. Prints the path and the number of comment lines added.

Both expect the on-disk format of the LeetCode solutions repo: a /* ... */ problem header, a JSDoc block, then the solution function(s).

Loops

~/.omp/loops holds scheduled, read-only research prompts. Each loop is a directory with a loop.md prompt. run-loop.sh creates state.md and runs.log beside it at runtime; chezmoi does not manage those.

run-loop.sh

~/.omp/loops/bin/run-loop.sh <loop-name>

Runs one round of a loop:

Prepare state

Exits if ~/.omp/loops/<name>/loop.md is missing. Seeds state.md with ## queue, ## done, and ## blocked headings if it does not exist.

Cheap round

Runs omp -p --no-session --max-time 600 --model kimi-for-coding with the prompt plus the loop directory, state-file path, and round timestamp appended. Output goes to runs.log.

Escalate once

If any output line starts with ESCALATE, re-runs the round once on omp’s default model (Fable) with a 1200 s cap. It logs <loop> escalated to ~/.omp/loops/escalations.log.

At most one round and one escalation per call. Failures from omp are logged and do not abort the script.

Loop catalogue

Every loop follows the same contract: read state.md first, do one pass, make exactly one change (usually a brief or proposal appended under ## queue), and log repeated tool failures under ## blocked. Loops draft only; they never file issues or change repos. The subject is WalletBase, an embedded-wallet project.

Loop Cadence Inputs Output per round Escalates on
intel-refresh (#19) Mon 06:00 Exa search over five beats: ERC-4337/AA, EIP-7702, embedded-wallet competitors, agent-payment protocols, Base chain Up to 5 bullets per beat for the week; proposes swapping a beat that has been quiet for 3 weeks A development that breaks a core assumption
share-of-model (#3) Mon 07:00 Exa answer mode, fixed set of six buyer questions Table of vendors named per answer and whether WalletBase appears; biggest rank shift never
regulatory-digest (#20) Tue 07:00 FinCEN, OFAC, SEC/CFTC, EU MiCA/CASP, Ethereum governance Only material changes; “no material changes” counts as success; a proposed risk-position edit when an item breaks a standing assumption MSB scope or OFAC action touching similar infra
brand-radar (#10) Wed 07:00 HN Algolia API (no key), Exa Mentions grouped into feature asks, pricing pain, security, and integration friction; one drafted bd create issue or positioning note Security discussion of a dependency
answer-gap (#1) Thu 07:00 Exa, rotating developer questions plus ones harvested in earlier rounds One content brief; up to 3 new questions queued never
competitor-watch (#4) Fri 07:00 Exa over six competitor blogs Logs new posts; one content brief for the biggest gap Competitor launches an agent-economy product
repeat-offender (#24) Sun 18:00 bd list across the project’s repos, loop runs.log, ## blocked sections, and escalations.log Failure patterns grouped by root cause; one drafted bd create systemic fix Data loss or security-boundary pattern

Five prompts cap page fetches or API calls per round (15 to 30); share-of-model and repeat-offender are bounded by their fixed question set and sources.

Goal templates

goals/templates.md is not scheduled. It holds two /goal prompts to paste into an interactive omp session when facing a decision:

Template Purpose Cap
kill-criteria (#22) One measurable disqualifying condition per option, cited evidence, verdict ALIVE / KILLED / NEEDS-DATA 40 tool calls
pre-mortem (#23) Writes the post-mortem of a failed decision 12 months out: 3–5 causal chains, each tied to a present-day assumption, with an early warning sign and the cheapest mitigation 30 tool calls

Both count as done only when the full artifact is pasted in the chat.

Shell integration

Entry point Source What it does
fish completions dot_config/fish/completions/omp.fish omp completions fish | source generates completions at load time
Ctrl A fish fish_user_key_bindings, zsh keybinds.zsh Launches omp from the prompt
launch_omp_livediff_overlay dot_local/bin/executable_launch_omp_livediff_overlay, fish function of the same name Opens omp as a kitty overlay on the current window with a livediff vsplit beside it, focus kept on omp. Needs KITTY_LISTEN_ON (kitty remote control).
lc-elir [root] dot_local/bin/executable_lc-elir, fish function fzf multi-picks numbered LeetCode files (1365.slug.js/.ts) with a bat preview and runs omp -p "/leetcode-eli5 <file>" on each

See scripts and fish. The kitty tab bar shows a microchip glyph for tabs running omp.

Was this page helpful?