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"`.
| `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`.
| `/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
```sh
~/.omp/loops/bin/run-loop.sh <loop-name>
```
Runs one round of a loop:
<Steps>
<Step title="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.
</Step>
<Step title="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`.
</Step>
<Step title="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`.
</Step>
</Steps>
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:
| 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 |
| <kbd>Ctrl</kbd> <kbd>A</kbd> | fish `fish_user_key_bindings` → `_agents_bind`, zsh `keybinds.zsh` | fish: the `agents` tv cable, with `omp` first; 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](/shell/scripts) and [fish](/shell/fish). The [kitty](/terminal/kitty) tab bar shows a microchip glyph for tabs running `omp`.