--- title: omp description: 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](/tools/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//private_loop.md` | `~/.omp/loops//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 ```yaml ~/.omp/agent/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 ```yaml ~/.omp/agent/keybindings.yml 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](/tools/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 [extra instructions]` | Converts a LeetCode solution file into a Fumadocs MDX page at `content/docs/leetcode///-.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 [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 ```sh ~/.omp/loops/bin/run-loop.sh ``` Runs one round of a loop: Exits if `~/.omp/loops//loop.md` is missing. Seeds `state.md` with `## queue`, `## done`, and `## blocked` headings if it does not exist. 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`. 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 ` 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. :::note[Scheduling] Cadences are declared in each prompt header; the repo contains no timer for them. `.chezmoiscripts/run_once_after_30-user-services.sh.tmpl` names `omp-loop` among the personal automation units that are enabled by hand on each machine and never automatically. See [scripts](/chezmoi/scripts). ::: ### 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 "` on each | See [scripts](/shell/scripts) and [fish](/shell/fish). The [kitty](/terminal/kitty) tab bar shows a microchip glyph for tabs running `omp`.