docs: remove obsolete Claude Code and omp docs, update references

This commit is contained in:
Prad Nukala committed 2026-10-07 12:48:19 -04:00
1 parent 247b8f9a2f
commit 2196c6983f
20 files changed
+41 -471

No files matched your search

-200
View File
@@ -1,200 +0,0 @@
---
title: Claude Code
description: Claude Code settings, hooks, plugins, and slash commands managed under ~/.claude, plus the skills installed there.
---
Claude Code is Anthropic's terminal coding agent. The repo manages its user-level settings, hook scripts, and custom slash commands. Its skills are installed by the [skills sync](/ai/skills), not stored in the repo. The `claude` binary itself is not installed by chezmoi.
## Files
| Source in repo | Target | Notes |
| --- | --- | --- |
| `dot_claude/settings.json` | `~/.claude/settings.json` | Plain file; in symlink mode the target is a symlink back into the repo |
| `dot_claude/empty_CLAUDE.md` | `~/.claude/CLAUDE.md` | `empty_` keeps the zero-byte file; no global memory instructions |
| `dot_claude/hooks/executable_cmem-to-obsidian.py` | `~/.claude/hooks/cmem-to-obsidian.py` | Executable |
| `dot_claude/hooks/executable_herdr-agent-state.sh` | `~/.claude/hooks/herdr-agent-state.sh` | Executable, generated by herdr |
| `dot_claude/hooks/gitnexus/gitnexus-hook.cjs` | `~/.claude/hooks/gitnexus/gitnexus-hook.cjs` | Present but not wired in `settings.json` |
| `dot_claude/commands/*.md` | `~/.claude/commands/*.md` | User slash commands |
None of these are role-gated. Hook commands in `settings.json` use absolute `/home/prad/...` paths; on a machine with a different home directory, edit them after cloning.
## settings.json
### Model and UI
| Key | Value | Effect |
| --- | --- | --- |
| `model` | `fable` | Default model alias |
| `tui` | `fullscreen` | Full-screen terminal UI |
| `agentPushNotifEnabled` | `true` | Push notifications when the agent needs attention |
| `skipDangerousModePermissionPrompt` | `true` | No confirmation when starting in bypass-permissions mode |
| `skipAutoPermissionPrompt` | `true` | No confirmation when entering auto mode |
No `statusLine` is configured; Claude Code uses its default status line.
### Environment
`env` sets two variables for every session:
| Variable | Purpose |
| --- | --- |
| `CLAUDE_CODE_DISABLE_AUTO_MEMORY` | Turns off Claude Code's built-in auto memory. Session memory comes from the claude-mem plugin instead. |
| `EDITOR` | Points the external editor at `micro`. |
### Permissions
- `defaultMode` is `auto`, so sessions start in auto mode and the classifier approves routine actions.
- The `allow` list pre-approves seven read-only tools from the `codegraph` MCP server: `codegraph_search`, `codegraph_context`, `codegraph_callers`, `codegraph_callees`, `codegraph_impact`, `codegraph_node`, and `codegraph_status`.
- There is no `deny` or `ask` list.
`autoMode.environment` is a list of trust-boundary notes that auto mode reads when judging risk. It declares no org, cloud provider, secrets manager, or CI target. It names one private personal LeetCode repository as the trusted repo and treats routine work there as low risk. It marks `.env*` files as sensitive. Any host, namespace, or container with `prod` or `production` as a whole name segment counts as a sensitive remote target. IaC changes touching IAM, RBAC, networking, quota, and node pools count as protected.
### Hooks
`settings.json` wires six hook commands:
| Command | What it does |
| --- | --- |
| `pixtuoid-hook` | External binary that receives lifecycle events. Matcher `.*`. |
| `~/.orca/agent-hooks/claude-hook.sh` | Orca's agent hook. Runs through `/bin/sh` only if the file exists and is executable, so machines without Orca skip it silently. |
| `atuin hook claude-code` | Records the agent's `Bash` tool calls in [atuin](/shell/atuin) history. Matcher `Bash`. |
| `python3 ~/.claude/hooks/cmem-to-obsidian.py` | Exports the session's claude-mem learnings to Obsidian ([below](#cmem-to-obsidian)). 15 s timeout. |
| `bash ~/.claude/hooks/herdr-agent-state.sh session` | Reports the session to herdr ([below](#herdr-agent-state)). 10 s timeout. |
| `sh ~/skills/tldraw-offline/inject-server-context.sh SubagentStart` | Injects server context when the `tldraw-offline` subagent starts. The script lives outside this repo. |
Event wiring:
| Event | pixtuoid | orca | atuin (`Bash`) | Other |
| --- | :-: | :-: | :-: | --- |
| `SessionStart` | yes | | | herdr-agent-state `session` |
| `UserPromptSubmit` | | yes | | |
| `PreToolUse` | yes | yes | yes | |
| `PermissionRequest` | | yes | | |
| `PostToolUse` | yes | yes | yes | |
| `PostToolUseFailure` | | yes | yes | |
| `Notification` | yes | | | |
| `SubagentStart` | yes | | | tldraw-offline context (matcher `tldraw-offline`) |
| `SubagentStop` | yes | | | |
| `Stop` | | yes | | |
| `StopFailure` | | yes | | |
| `SessionEnd` | yes | | | cmem-to-obsidian |
### Plugins
`enabledPlugins`:
| Plugin | Marketplace | State |
| --- | --- | --- |
| `caveman` | `caveman` | enabled |
| `claude-mem` | `thedotmack` | enabled |
| `context-mode` | `context-mode` | enabled |
| `context7` | `claude-plugins-official` | disabled |
| `council` | `council-of-high-intelligence` | enabled |
| `exa` | `claude-plugins-official` | enabled |
| `frontend-design` | `claude-plugins-official` | enabled |
| `gopls-lsp` | `claude-plugins-official` | enabled |
| `gopls` | `claude-code-lsps` | enabled |
| `lua-lsp` | `claude-plugins-official` | enabled |
| `ponytail` | `ponytail` | enabled |
| `solidity-language-server` | `claude-code-lsps` | enabled |
| `understand-anything` | `understand-anything` | enabled |
| `vtsls` | `claude-code-lsps` | enabled |
| `yaml-lsp` | `zircote-lsp` | enabled |
| `diagram-design` | `diagram-design` | enabled |
The LSP plugins give the agent language-server diagnostics for Go, Lua, Solidity, TypeScript/JavaScript (vtsls), and YAML.
### Marketplaces
`extraKnownMarketplaces` registers eleven plugin sources:
| Name | Source |
| --- | --- |
| `caveman` | GitHub `JuliusBrussee/caveman` |
| `claude-code-lsps` | GitHub `Piebald-AI/claude-code-lsps` |
| `claude-plugins-official` | GitHub `anthropics/claude-plugins-official` |
| `council-of-high-intelligence` | GitHub `0xNyk/council-of-high-intelligence` |
| `mempalace` | GitHub `MemPalace/mempalace` |
| `omc` | git `https://github.com/Yeachan-Heo/oh-my-claudecode.git` |
| `ponytail` | GitHub `DietrichGebert/ponytail` |
| `thedotmack` | GitHub `thedotmack/claude-mem` |
| `understand-anything` | GitHub `Egonex-AI/Understand-Anything` |
| `zircote-lsp` | GitHub `zircote/lsp-marketplace` |
| `diagram-design` | GitHub `cathrynlavery/diagram-design` |
`mempalace` and `omc` are registered but no plugin from them is enabled. `context-mode` is enabled but its marketplace is not declared here; it comes from Claude Code's own marketplace state.
## Hook scripts
### cmem-to-obsidian.py [#cmem-to-obsidian]
A stdlib-only Python script run on `SessionEnd`. It reads the hook JSON from stdin and exports that session's claude-mem observations to an Obsidian note. It fails soft: any error is logged and the script exits 0, so it never blocks the session.
1. Opens the claude-mem SQLite database read-only (`?mode=ro`), so it never locks the live DB or its WAL.
2. Maps the Claude Code `session_id` to claude-mem's memory session via `sdk_sessions.content_session_id`, then loads that session's observations and latest summary.
3. Drops any observation containing `<private>`.
4. Writes `<vault>/<project>/<date> <project> <session-prefix>.md`. The file name is keyed to the session, so re-runs overwrite the same note.
5. Creates `<vault>/<project>.md` as a map-of-content note if it is missing, so the `[[project]]` wikilink resolves.
Note layout: frontmatter (`date`, `project`, `session`, `source: claude-mem`, tags `claude-mem` and `project/<slug>`), an abstract callout from the session summary, then sections by observation type. Each bullet links back to the claude-mem viewer at `http://localhost:<port>/?observation=<id>`.
| Section | Observation types |
| --- | --- |
| Decisions | `decision` (rendered as note callouts) |
| Fixes & gotchas | `bugfix` |
| Insights | `discovery`, `feature`, `change`, `refactor`, plus any unmapped type |
| Variable | Default |
| --- | --- |
| `CLAUDE_MEM_DB` | `~/.claude-mem/claude-mem.db` |
| `CMEM_OBSIDIAN_DIR` | `~/Documents/Vault/90 - Archive/Learnings` |
| `CLAUDE_MEM_WORKER_PORT` | `37700` |
Log file: `~/.claude/hooks/cmem-to-obsidian.log`.
### herdr-agent-state.sh [#herdr-agent-state]
Generated and versioned by [herdr](/terminal/herdr) (integration id `claude`, version 7). The header says reinstalling herdr's integration overwrites it, so put custom hooks in separate files. It runs on `SessionStart` with the `session` action and exits immediately for any other action.
It only acts inside a herdr pane: `HERDR_ENV=1`, `HERDR_SOCKET_PATH`, and `HERDR_PANE_ID` must be set, and `python3` must be on `PATH`. It then sends one `pane.report_agent_session` request over herdr's Unix socket with the pane id, the Claude session id, the transcript path, and the session start source. herdr uses this to link the pane to the agent session. Subagent events and `SubagentStop` are ignored, so a finished subagent cannot mark an idle pane as working again. Socket errors are swallowed and the script has a 0.5 s timeout.
### gitnexus/gitnexus-hook.cjs
A Node `PreToolUse` handler that adds GitNexus code-graph context to searches. `settings.json` does not reference it, so it is inactive until you add a hook entry.
- Runs only when `.gitnexus` exists in the working directory or one of its four nearest ancestors.
- Pulls a search pattern from `Grep` (the pattern), `Glob` (the first identifier-like path segment), or `Bash` commands that call `rg` or `grep` (the first non-flag argument). Patterns under three characters are skipped.
- Runs `gitnexus augment <pattern>`. It tries the bun global install at `~/.bun/install/global/node_modules/gitnexus` first, then `require.resolve`, then `npx -y gitnexus` (8 s or 15 s timeout).
- Returns the CLI's stderr output as `hookSpecificOutput.additionalContext`.
## Slash commands
`dot_claude/commands/` becomes `~/.claude/commands/`, one user-level slash command per file.
| Command | Arguments | Purpose |
| --- | --- | --- |
| `/bd-drain` | optional priority filter (`p0-p2`), epic id, or `dry-run` | Works through every open beads issue until all are closed with tests and builds passing. Records a green baseline first; `dry-run` prints the dependency-sorted plan and stops. Allowed tools: `bd`, `git`, `go`, `pnpm`, `cargo`, `make`, file tools, `Task`. |
| `/cmem-to-beads` | none | Pulls insight, decision, and gotcha learnings out of claude-mem and saves them as beads memories with `bd remember`. Actionable items are skipped. |
| `/cmem-to-linear` | none | Turns actionable claude-mem learnings (bugs, tech debt, follow-ups) into beads tasks, then pushes the new ones to Linear. |
| `/create-task` | `<task description or goal>` | Breaks a task into beads issues with dependencies, acceptance criteria, and priorities. The prompt includes live `bd ready`, in-progress, and recently-closed lists. Allowed tools: `bd`, `git log`, `git status`, `rg`, `Task`. |
| `/rams` | optional file | "Rams" accessibility (WCAG 2.1) and visual design review of a component file. Offers a project scan when no file is given. |
| `/web-interface-guidelines` | `<file-or-pattern>` | Reviews UI code against the Vercel Web Interface Guidelines: accessibility, focus, forms, animation, typography, and more. |
## Skills
`~/.claude/skills/` is not in the repo. The `25-skills` apply script installs into it with the Skills CLI from `.chezmoidata/skills.yaml` (see [Skills](/ai/skills)), and it holds two kinds of entries:
- **Symlinks** for every `universal` skill: `~/.claude/skills/blume` → `../../.agents/skills/blume`, so Claude Code reads the shared library.
- **Real directories** for entries with `agents: [claude-code]`: `absurd`, `agents-sdk`, `cloudflare-email-service`, `cloudflare-one`, `cloudflare-one-migrations`, `create-beads-orchestration`, `durable-objects`, `sandbox-sdk`, `turnstile-spin`, `web-perf`.
`omarchy`, `diagnose-crash`, and `terminal-browser` are installed by other packages and left alone by the sync.
## Repo-local settings
This repo's own `.claude/settings.json` applies only to Claude Code sessions opened inside the chezmoi source directory. chezmoi ignores dot-prefixed source entries, so it is never deployed. It runs `bd prime` on `SessionStart` and `PreCompact`, which reloads beads issue context at session start and before compaction.
## Integrations
- [kitty](/terminal/kitty) tab bar shows a robot glyph for tabs running `claude`.
- The fish `ai` picker launches `claude --dangerously-skip-permissions`; see [fish](/shell/fish).
- The claude-mem plugin feeds both `cmem-to-obsidian.py` and the `/cmem-to-*` commands.
+4 -38
View File
@@ -1,19 +1,13 @@
--- ---
title: AI agents title: AI agents
description: Claude Code, omp, and the shared agent skill library that both read from. description: The shared agent skill library and the shell entry points for coding agents.
sidebar: sidebar:
label: Overview label: Overview
--- ---
The repo manages configuration for two coding agents and a skill library they share. Neither agent binary is installed by chezmoi: `.chezmoidata/packages.yaml` lists no agent CLIs, so install Claude Code and omp yourself. topgrade runs `omp update` as a custom command. The repo manages the agent skill library only. Claude Code (`~/.claude`) and omp (`~/.omp`) configs are not in this repo, and no agent CLI is installed by chezmoi. topgrade runs `omp update` as a custom command.
<CardGroup cols={3}> <CardGroup cols={3}>
<Card title="Claude Code" href="/ai/claude-code" icon="terminal">
Settings, hooks, plugins, slash commands, and skill links under `~/.claude`.
</Card>
<Card title="omp" href="/ai/omp" icon="cpu">
Config, keybindings, MCP servers, theme, commands, and scheduled research loops under `~/.omp`.
</Card>
<Card title="Skills" href="/ai/skills" icon="library"> <Card title="Skills" href="/ai/skills" icon="library">
Agent skills declared in `.chezmoidata/skills.yaml` and installed into `~/.agents/skills` and `~/.claude/skills` by an apply script. Agent skills declared in `.chezmoidata/skills.yaml` and installed into `~/.agents/skills` and `~/.claude/skills` by an apply script.
</Card> </Card>
@@ -23,39 +17,11 @@ The repo manages configuration for two coding agents and a skill library they sh
| Page | Source in repo | Target in `$HOME` | Covers | | Page | Source in repo | Target in `$HOME` | Covers |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| [Claude Code](/ai/claude-code) | `dot_claude/` | `~/.claude/` | `settings.json`, hook scripts, `/commands`, empty `CLAUDE.md` |
| [omp](/ai/omp) | `dot_omp/` | `~/.omp/` | `agent/config.yml`, `keybindings.yml`, `mcp.json`, cyberdream theme, commands, loops |
| [Skills](/ai/skills) | `.chezmoidata/skills.yaml`, `.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` | `~/.agents/skills/`, `~/.claude/skills/` | Skill list and sources; installed by the Skills CLI, not vendored | | [Skills](/ai/skills) | `.chezmoidata/skills.yaml`, `.chezmoiscripts/run_onchange_after_25-skills.sh.tmpl` | `~/.agents/skills/`, `~/.claude/skills/` | Skill list and sources; installed by the Skills CLI, not vendored |
## Layout
<FileTree>
- dot_claude/
- settings.json
- empty_CLAUDE.md
- commands/
- hooks/
- executable_cmem-to-obsidian.py
- executable_herdr-agent-state.sh
- gitnexus/
- dot_omp/
- private_agent/
- private_config.yml
- keybindings.yml
- private_mcp.json
- themes/
- commands/
- loops/
- bin/
- goals/
</FileTree>
None of these files are role-gated: `.chezmoiignore.tmpl` applies them on every machine role (desktop, laptop, mac, server).
## Shell entry points ## Shell entry points
- `ai` (fish function) opens a `gum choose` picker over `claude`, `opencode`, `codex`, `hermes`, and `fractal`. Picking `claude` runs `claude --dangerously-skip-permissions`; the others run the binary of the same name. See [fish](/shell/fish). - `ai` (fish function) opens a `gum choose` picker over `claude`, `opencode`, `codex`, `hermes`, and `fractal`. Picking `claude` runs `claude --dangerously-skip-permissions`; the others run the binary of the same name. See [fish](/shell/fish).
- <kbd>Ctrl</kbd> <kbd>A</kbd> runs [`omp-session`](/shell/scripts#omp-session) from the fish and zsh prompt: on the default branch it resumes a session written in the last 3 hours, else opens the `omp-sessions` television cable; on any other branch it resumes that branch's newest session or starts a new one. `tv agents` still lists every installed agent CLI ([television](/tools/television#agents)). - <kbd>Ctrl</kbd> <kbd>A</kbd> runs [`omp-session`](/shell/scripts#omp-session) from the fish and zsh prompt: on the default branch it resumes a session written in the last 3 hours, else opens the `omp-sessions` television cable; on any other branch it resumes that branch's newest session or starts a new one. `tv agents` still lists every installed agent CLI ([television](/tools/television#agents)).
- `launch_omp_livediff_overlay` and `lc-elir` are omp helpers in `~/.local/bin`; see [omp](/ai/omp#shell-integration) and [scripts](/shell/scripts). - <kbd>Ctrl</kbd> <kbd>N</kbd> starts a new omp session from the fish and zsh prompt, skipping every resume rule. Inside the `omp-sessions` cable, <kbd>ctrl-n</kbd> does the same instead of resuming the selected session.
- `launch_omp_livediff_overlay` and `lc-elir` are omp helpers in `~/.local/bin`; see [scripts](/shell/scripts).
+1 -1
View File
@@ -3,5 +3,5 @@ import { defineMeta } from "blume";
export default defineMeta({ export default defineMeta({
title: "AI agents", title: "AI agents",
icon: "bot", icon: "bot",
pages: ["index", "claude-code", "omp", "skills"], pages: ["index", "skills"],
}); });
-175
View File
@@ -1,175 +0,0 @@
---
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/<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
```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 |
| --- | --- |
| <kbd>Ctrl</kbd> <kbd>E</kbd> | Open the current prompt in the external editor (`app.editor.external`) |
| <kbd>Ctrl</kbd> <kbd>Q</kbd> | 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 <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:
| 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 |
| <kbd>Ctrl</kbd> <kbd>A</kbd> | fish `fish_user_key_bindings`, zsh `keybinds.zsh` → `dot_local/bin/executable_omp-session` | Resumes or starts omp for the current repo: default branch → the session written in the last 3 hours, else the `omp-sessions` tv cable; other branches → that branch's newest session, else a new one. See [omp-session](/shell/scripts#omp-session) |
| `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`.
+1 -1
View File
@@ -104,7 +104,7 @@ Every universal skill gets both a `~/.agents/skills` directory and a `~/.claude/
## Library ## Library
The Description column is the first sentence of each installed skill's `SKILL.md` frontmatter `description`. Source is the `source` from `skills.yaml` (GitHub URLs shortened to `owner/repo/tree/<ref>`). Agents `claude-code` means the skill is installed as a real directory in `~/.claude/skills` only; see [Claude Code](/ai/claude-code#skills). The Description column is the first sentence of each installed skill's `SKILL.md` frontmatter `description`. Source is the `source` from `skills.yaml` (GitHub URLs shortened to `owner/repo/tree/<ref>`). Agents `claude-code` means the skill is installed as a real directory in `~/.claude/skills` only.
| Skill | Source | Agents | Description | | Skill | Source | Agents | Description |
| --- | --- | --- | --- | | --- | --- | --- | --- |
+10 -3
View File
@@ -5,7 +5,7 @@ description: The git repos chezmoi clones into $HOME and every rule in .chezmoii
## .chezmoiexternal.toml [#externals] ## .chezmoiexternal.toml [#externals]
Externals are content chezmoi fetches instead of storing in the repo. Both entries are `git-repo` externals: chezmoi runs `git clone` when the target directory is missing. Because they are real git checkouts, they are never symlinked into the source tree. Externals are content chezmoi fetches instead of storing in the repo. Every entry is a `git-repo` external: chezmoi runs `git clone` when the target directory is missing. Because they are real git checkouts, they are never symlinked into the source tree.
```toml .chezmoiexternal.toml ```toml .chezmoiexternal.toml
[".config/nvim"] [".config/nvim"]
@@ -19,16 +19,23 @@ Externals are content chezmoi fetches instead of storing in the repo. Both entri
url = "https://github.com/tellnobody1/sublime-purescript-syntax.git" url = "https://github.com/tellnobody1/sublime-purescript-syntax.git"
[".config/bat/syntaxes/sublime-purescript-syntax".pull] [".config/bat/syntaxes/sublime-purescript-syntax".pull]
args = ["--ff-only"] args = ["--ff-only"]
[".config/tmux/plugins/tpm"]
type = "git-repo"
url = "https://github.com/tmux-plugins/tpm.git"
[".config/tmux/plugins/tpm".pull]
args = ["--ff-only"]
``` ```
| Target | Repo | Used by | | Target | Repo | Used by |
| --- | --- | --- | | --- | --- | --- |
| `~/.config/nvim` | [prdlk/nvim](https://github.com/prdlk/nvim) | Neovim config, kept in its own repo | | `~/.config/nvim` | [prdlk/nvim](https://github.com/prdlk/nvim) | Neovim config, kept in its own repo |
| `~/.config/bat/syntaxes/sublime-purescript-syntax` | [tellnobody1/sublime-purescript-syntax](https://github.com/tellnobody1/sublime-purescript-syntax) | PureScript syntax for bat, compiled into bat's cache by the [bat cache scripts](/chezmoi/scripts#build-bat-cache) | | `~/.config/bat/syntaxes/sublime-purescript-syntax` | [tellnobody1/sublime-purescript-syntax](https://github.com/tellnobody1/sublime-purescript-syntax) | PureScript syntax for bat, compiled into bat's cache by the [bat cache scripts](/chezmoi/scripts#build-bat-cache) |
| `~/.config/tmux/plugins/tpm` | [tmux-plugins/tpm](https://github.com/tmux-plugins/tpm) | tmux plugin manager, run from the bottom of `tmux.conf` ([tmux](/terminal/tmux)) |
### No refreshPeriod ### No refreshPeriod
Neither entry sets `refreshPeriod`, so it stays at chezmoi's default of never. chezmoi clones each repo on a fresh machine and otherwise leaves it alone: `chezmoi apply` and `chezmoi update` do not pull. The local nvim checkout always wins over the remote, so in-progress Neovim edits and unpushed commits are never disturbed by an apply. No entry sets `refreshPeriod`, so it stays at chezmoi's default of never. chezmoi clones each repo on a fresh machine and otherwise leaves it alone: `chezmoi apply` and `chezmoi update` do not pull. The local nvim checkout always wins over the remote, so in-progress Neovim edits and unpushed commits are never disturbed by an apply.
To update explicitly, run `chezmoi apply --refresh-externals` (`-R`), which pulls with `git pull --ff-only`. `--ff-only` makes the pull fail instead of creating a merge commit when the local checkout has diverged. To update explicitly, run `chezmoi apply --refresh-externals` (`-R`), which pulls with `git pull --ff-only`. `--ff-only` makes the pull fail instead of creating a merge commit when the local checkout has diverged.
@@ -61,7 +68,7 @@ Files at the source root that would otherwise land in `$HOME` as `~/README.md`,
| --- | --- | | --- | --- |
| `.config/lazygit/.omc/**` | Tool state written inside the lazygit config dir | | `.config/lazygit/.omc/**` | Tool state written inside the lazygit config dir |
| `.config/yazi/plugins/**` | Installed by `ya pkg install` from `package.toml` ([script](/chezmoi/scripts#install-yazi-plugins)) | | `.config/yazi/plugins/**` | Installed by `ya pkg install` from `package.toml` ([script](/chezmoi/scripts#install-yazi-plugins)) |
| `.config/tmux/plugins/**` | tpm and the plugins it installs ([40-post](/chezmoi/scripts#40-post)) | | `.config/tmux/plugins/**`, except `!.config/tmux/plugins/tpm` | Plugins tpm installs with `prefix I`; tpm itself is the external above |
| `.config/fish/fish_variables` | fish universal variables, rewritten by fish at runtime | | `.config/fish/fish_variables` | fish universal variables, rewritten by fish at runtime |
| `.config/nvim/lazy-lock.json` | lazy.nvim lockfile inside the nvim external | | `.config/nvim/lazy-lock.json` | lazy.nvim lockfile inside the nvim external |
| `.config/nvim/.git`, `.config/nvim/.git/**` | The external's git metadata | | `.config/nvim/.git`, `.config/nvim/.git/**` | The external's git metadata |
+3 -13
View File
@@ -66,14 +66,6 @@ The repo is a [chezmoi](https://chezmoi.io) source directory. It lives at `~/.lo
- zsh/ - zsh/
- dot_local/ - dot_local/
- bin/ - bin/
- dot_claude/
- commands/
- hooks/
- settings.json
- empty_CLAUDE.md
- dot_omp/
- loops/
- private_agent/
- dot_leetcode/ - dot_leetcode/
- docs/ - docs/
- public/ - public/
@@ -93,8 +85,6 @@ The repo is a [chezmoi](https://chezmoi.io) source directory. It lives at `~/.lo
| `.chezmoiscripts/`, root `run_*` | — | Install and housekeeping scripts. See [Apply scripts](/chezmoi/scripts). | | `.chezmoiscripts/`, root `run_*` | — | Install and housekeeping scripts. See [Apply scripts](/chezmoi/scripts). |
| `dot_config/` | `~/.config/` | Per-tool config. Documented under [Shell](/shell), [Terminal](/terminal), [Tools](/tools), [Desktop](/desktop). | | `dot_config/` | `~/.config/` | Per-tool config. Documented under [Shell](/shell), [Terminal](/terminal), [Tools](/tools), [Desktop](/desktop). |
| `dot_local/bin/` | `~/.local/bin/` | 34 standalone scripts shared by every shell. | | `dot_local/bin/` | `~/.local/bin/` | 34 standalone scripts shared by every shell. |
| `dot_claude/` | `~/.claude/` | Claude Code settings, commands, and hooks. See [AI agents](/ai/claude-code). |
| `dot_omp/` | `~/.omp/` | omp agent config and loops. |
| `dot_leetcode/` | `~/.leetcode/` | leetcode CLI workspace state. | | `dot_leetcode/` | `~/.leetcode/` | leetcode CLI workspace state. |
| `docs/`, `public/`, `blume.config.ts`, `package.json`, `bun.lock`, `README.md` | — | This docs site and the repo README. Listed in `.chezmoiignore.tmpl`, never applied. | | `docs/`, `public/`, `blume.config.ts`, `package.json`, `bun.lock`, `README.md` | — | This docs site and the repo README. Listed in `.chezmoiignore.tmpl`, never applied. |
@@ -107,10 +97,10 @@ chezmoi encodes target names and attributes in source file names. These are the
| Source form | Meaning | Examples here | | Source form | Meaning | Examples here |
| --- | --- | --- | | --- | --- | --- |
| `dot_` | Target name starts with `.` | `dot_config` → `~/.config`, `dot_zshrc` → `~/.zshrc` | | `dot_` | Target name starts with `.` | `dot_config` → `~/.config`, `dot_zshrc` → `~/.zshrc` |
| `private_` | Target has group/world permissions cleared (`0600`/`0700`) | `dot_config/atuin/private_config.toml`, `dot_config/gh/private_config.yml`, `dot_config/hunk/private_state.json`, `dot_omp/private_agent/`, `dot_omp/loops/*/private_loop.md` | | `private_` | Target has group/world permissions cleared (`0600`/`0700`) | `dot_config/atuin/private_config.toml`, `dot_config/gh/private_config.yml`, `dot_config/hunk/private_state.json` |
| `executable_` | Target gets the executable bit | 42 files: every script in `dot_local/bin/`, `dot_config/niri/scripts/`, `dot_config/tmux/executable_niri-title.sh`, Claude hooks, `dot_omp/loops/bin/executable_run-loop.sh` | | `executable_` | Target gets the executable bit | 40 files: every script in `dot_local/bin/`, `dot_config/niri/scripts/`, `dot_config/tmux/executable_niri-title.sh` |
| `exact_` | Directory is exact: entries in the target that are not in the source are deleted | `dot_config/niri/exact_config.d/` (numbered `10-…kdl` through `95-…kdl` fragments) | | `exact_` | Directory is exact: entries in the target that are not in the source are deleted | `dot_config/niri/exact_config.d/` (numbered `10-…kdl` through `95-…kdl` fragments) |
| `empty_` | File is kept even when empty | `dot_claude/empty_CLAUDE.md`, `dot_config/herdr/empty_dot_plugins.lock` | | `empty_` | File is kept even when empty | `dot_config/herdr/empty_dot_plugins.lock` |
| `symlink_` | Target is a symlink; file content is the link destination | `dot_config/kitty/symlink_current-theme.conf` (→ `themes/noctalia.conf`), `dot_config/symlink_television.tmpl` | | `symlink_` | Target is a symlink; file content is the link destination | `dot_config/kitty/symlink_current-theme.conf` (→ `themes/noctalia.conf`), `dot_config/symlink_television.tmpl` |
| `.tmpl` | Rendered with Go templates and chezmoi data | `dot_gitconfig.tmpl`, `dot_config/shell/aliases.sh.tmpl`, `dot_config/yazi/yazi.toml.tmpl`, all scripts, the config and ignore files | | `.tmpl` | Rendered with Go templates and chezmoi data | `dot_gitconfig.tmpl`, `dot_config/shell/aliases.sh.tmpl`, `dot_config/yazi/yazi.toml.tmpl`, all scripts, the config and ignore files |
| `run_once_` / `run_onchange_` + `before_` / `after_` | Script, with run frequency and phase | See [Apply scripts](/chezmoi/scripts) | | `run_once_` / `run_onchange_` + `before_` / `after_` | Script, with run frequency and phase | See [Apply scripts](/chezmoi/scripts) |
+2 -3
View File
@@ -15,7 +15,7 @@ Six scripts run during `chezmoi apply`. Four live in `.chezmoiscripts/`, a direc
<Step title="20-gh-extensions (after, onchange)">Install gh extensions.</Step> <Step title="20-gh-extensions (after, onchange)">Install gh extensions.</Step>
<Step title="25-skills (after, onchange)">Install and prune agent skills.</Step> <Step title="25-skills (after, onchange)">Install and prune agent skills.</Step>
<Step title="30-user-services (after, once)">Enable systemd user units on Linux.</Step> <Step title="30-user-services (after, once)">Enable systemd user units on Linux.</Step>
<Step title="40-post (after, onchange)">tpm clone, bat cache, font cache.</Step> <Step title="40-post (after, onchange)">bat cache, font cache.</Step>
<Step title="build-bat-cache (after, onchange)">Rebuild bat cache when its theme or config changes.</Step> <Step title="build-bat-cache (after, onchange)">Rebuild bat cache when its theme or config changes.</Step>
<Step title="install-yazi-plugins (after, onchange)">Reinstall yazi plugins when the manifest changes.</Step> <Step title="install-yazi-plugins (after, onchange)">Reinstall yazi plugins when the manifest changes.</Step>
</Steps> </Steps>
@@ -103,11 +103,10 @@ Other personal automation units (brain-lens, omp-loop, rclone, hermes, voxtype)
| Step | Condition | Action | | Step | Condition | Action |
| --- | --- | --- | | --- | --- | --- |
| tmux plugin manager | `tmux` installed and `~/.config/tmux/plugins/tpm` missing | `git clone --depth=1 https://github.com/tmux-plugins/tpm ~/.config/tmux/plugins/tpm` |
| bat cache | `bat` installed | `bat cache --build` | | bat cache | `bat` installed | `bat cache --build` |
| Font cache | Linux, `fc-cache` installed | `fc-cache -f` | | Font cache | Linux, `fc-cache` installed | `fc-cache -f` |
Each step ignores failures (`|| true`). `tmux.conf` expects tpm at that path; see [tmux](/terminal/tmux). Each step ignores failures (`|| true`). tpm is cloned by [`.chezmoiexternal.toml`](/chezmoi/externals-and-ignore#externals), not here.
## build-bat-cache [#build-bat-cache] ## build-bat-cache [#build-bat-cache]
+5 -4
View File
@@ -90,6 +90,7 @@ The layout, touchpad, and gesture examples in the file are commented out. Palm r
| --- | --- | | --- | --- |
| `general.layout` | `master` (instead of Omarchy's dwindle; per-workspace layouts saved by `omarchy-hyprland-workspace-layout-toggle` still win) | | `general.layout` | `master` (instead of Omarchy's dwindle; per-workspace layouts saved by `omarchy-hyprland-workspace-layout-toggle` still win) |
| `decoration.rounding` | 0 | | `decoration.rounding` | 0 |
| `decoration.dim_special` | 0.33 (darkens the desktop behind any open scratch workspace) |
| `decoration.blur` | enabled; `size 5`, `passes 2`, `brightness 0.8`, `contrast 1.1`, `vibrancy 0.15`, `noise 0.01`, `new_optimizations`, `popups = false` | | `decoration.blur` | enabled; `size 5`, `passes 2`, `brightness 0.8`, `contrast 1.1`, `vibrancy 0.15`, `noise 0.01`, `new_optimizations`, `popups = false` |
| `decoration.shadow` | disabled | | `decoration.shadow` | disabled |
| `group.groupbar.gradient_rounding` | 0 | | `group.groupbar.gradient_rounding` | 0 |
@@ -113,11 +114,11 @@ Omarchy's stock fade (0.985 active / 0.96 inactive) is kept. Terminals get their
| Output | Mode | Position | Scale | | Output | Mode | Position | Scale |
| --- | --- | --- | --- | | --- | --- | --- | --- |
| any (fallback) | `preferred` | `auto` | 2 | | any (fallback) | `preferred` | `auto` | 3.2 |
| `DP-4` (Apple Studio Display) | `5120x2880@60` | `0x0` | 2 | | `eDP-1` (laptop) | `2560x1600@180` | `0x0` | 2 |
| `eDP-1` (laptop) | `2560x1600@180` | `2560x0` | 2 | | `DP-4` (Apple Studio Display) | `5120x2880@60` | `1280x0` | 2 |
`GDK_SCALE=2` is exported. The Studio Display sits left of the laptop panel. At scale 2 its logical width is 2560, so `eDP-1` starts at x = 2560. `GDK_SCALE=3` is exported. The laptop panel sits left of the Studio Display. At scale 2 its logical width is 1280, so `DP-4` starts at x = 1280.
## hyprsunset and portal ## hyprsunset and portal
+1 -1
View File
@@ -85,7 +85,7 @@ sh -c "$(curl -fsSL https://dots.prd.lk/install)" -- --version
Configs are linked into `$HOME` (symlink mode). The neovim config and a bat syntax are cloned as externals. See [Externals and ignore rules](/chezmoi/externals-and-ignore). Configs are linked into `$HOME` (symlink mode). The neovim config and a bat syntax are cloned as externals. See [Externals and ignore rules](/chezmoi/externals-and-ignore).
</Step> </Step>
<Step title="Post-apply scripts"> <Step title="Post-apply scripts">
gh extensions, tpm, the bat cache, the font cache, yazi plugins, and the niri user service on Linux. gh extensions, the bat cache, the font cache, yazi plugins, and the niri user service on Linux. tpm arrives earlier as an external.
</Step> </Step>
</Steps> </Steps>
+1
View File
@@ -76,6 +76,7 @@ The tv pickers have their own widgets, because `tv --inline` opens on the line b
| <kbd>ctrl-t</kbd> | tv smart autocomplete (from `tv init zsh`) | | <kbd>ctrl-t</kbd> | tv smart autocomplete (from `tv init zsh`) |
| <kbd>down</kbd> | `pj-down`: `PJ_QUIET=1 pj` on an empty prompt, otherwise `down-line-or-history` (bound to `^[[B` and `^[OB`) | | <kbd>down</kbd> | `pj-down`: `PJ_QUIET=1 pj` on an empty prompt, otherwise `down-line-or-history` (bound to `^[[B` and `^[OB`) |
| <kbd>ctrl-a</kbd> | `omp-session`: resume or start omp for the current repo ([Scripts](/shell/scripts#omp-session)) | | <kbd>ctrl-a</kbd> | `omp-session`: resume or start omp for the current repo ([Scripts](/shell/scripts#omp-session)) |
| <kbd>ctrl-n</kbd> | `omp`: always a new omp session (replaces zsh's `down-line-or-history` on that key; <kbd>down</kbd> still walks history) |
| <kbd>ctrl-g</kbd> | `lazygit` | | <kbd>ctrl-g</kbd> | `lazygit` |
| <kbd>ctrl-q</kbd> | `exit` | | <kbd>ctrl-q</kbd> | `exit` |
| <kbd>ctrl-c</kbd> | At the prompt: kill the buffer, clear the screen and kitty scrollback (`ESC[2J ESC[3J`), reset the prompt | | <kbd>ctrl-c</kbd> | At the prompt: kill the buffer, clear the screen and kitty scrollback (`ESC[2J ESC[3J`), reset the prompt |
+1
View File
@@ -186,6 +186,7 @@ The header comment says the file should stay empty, but it holds the following:
| <kbd>ctrl-o</kbd> | `_gho_bind`: `gho` (pick a ghq repo or Obsidian vault from the `ghq-repos` cable and cd into it), then repaint | | <kbd>ctrl-o</kbd> | `_gho_bind`: `gho` (pick a ghq repo or Obsidian vault from the `ghq-repos` cable and cd into it), then repaint |
| <kbd>ctrl-p</kbd> | `_pj_bind`: `pj`, the task runner on the `pj` cable ([Scripts](/shell/scripts#pj)), then repaint | | <kbd>ctrl-p</kbd> | `_pj_bind`: `pj`, the task runner on the `pj` cable ([Scripts](/shell/scripts#pj)), then repaint |
| <kbd>ctrl-a</kbd> | `omp-session`, then repaint: resume or start omp for the current repo by branch and session age, opening the `omp-sessions` cable only when nothing qualifies ([Scripts](/shell/scripts#omp-session)) | | <kbd>ctrl-a</kbd> | `omp-session`, then repaint: resume or start omp for the current repo by branch and session age, opening the `omp-sessions` cable only when nothing qualifies ([Scripts](/shell/scripts#omp-session)) |
| <kbd>ctrl-n</kbd> | `omp`, then repaint: always a new omp session |
| <kbd>ctrl-w</kbd> | `atuin ai inline`: natural-language command overlay | | <kbd>ctrl-w</kbd> | `atuin ai inline`: natural-language command overlay |
| <kbd>ctrl-z</kbd> | `_jobs_bind`: with one background job, `fg` it; with several, pick one from the `jobs` cable ([television](/tools/television#jobs)) and `fg` that; with none, nothing. While a job holds the terminal, ctrl-z is still the tty's suspend, so the key toggles suspend and resume | | <kbd>ctrl-z</kbd> | `_jobs_bind`: with one background job, `fg` it; with several, pick one from the `jobs` cable ([television](/tools/television#jobs)) and `fg` that; with none, nothing. While a job holds the terminal, ctrl-z is still the tty's suspend, so the key toggles suspend and resume |
| <kbd>ctrl-g</kbd> | `lazygit` | | <kbd>ctrl-g</kbd> | `lazygit` |
+3 -3
View File
@@ -247,7 +247,7 @@ Reads lines on stdin and prints them newest-first by the mtime of each line's la
omp-session omp-session
``` ```
Starts or resumes [omp](/ai/omp) for the current git repo by fixed rules, so <kbd>ctrl-a</kbd> never asks when the answer is obvious. Starts or resumes omp for the current git repo by fixed rules, so <kbd>ctrl-a</kbd> never asks when the answer is obvious.
| HEAD | Does | | HEAD | Does |
| --- | --- | | --- | --- |
@@ -256,7 +256,7 @@ Starts or resumes [omp](/ai/omp) for the current git repo by fixed rules, so <kb
| Detached | Opens the `omp-sessions` cable (a new session when there are none) | | Detached | Opens the `omp-sessions` cable (a new session when there are none) |
| Outside a git repo | Plain `omp` | | Outside a git repo | Plain `omp` |
Resuming runs `omp --resume <session file>`; omp switches to the session's own cwd. Resuming runs `omp --resume <session file>`; omp switches to the session's own cwd. `omp-session --new` runs plain `omp`; it is the cable's <kbd>ctrl-n</kbd> action and marks `OMP_SESSION_STATE` like a resume does, so the prompt is not moved after a new session.
**Sessions.** Every `*/*.jsonl` under `$PI_CODING_AGENT_DIR/sessions` (default `~/.omp/agent/sessions`) whose `session` header `cwd` is the worktree root or below it, excluding worktrees nested inside it. Session age is the file's mtime (the last write). **Sessions.** Every `*/*.jsonl` under `$PI_CODING_AGENT_DIR/sessions` (default `~/.omp/agent/sessions`) whose `session` header `cwd` is the worktree root or below it, excluding worktrees nested inside it. Session age is the file's mtime (the last write).
@@ -272,7 +272,7 @@ Resuming runs `omp --resume <session file>`; omp switches to the session's own c
**Prompt redraw.** The launcher runs `tv omp-sessions --inline` with `OMP_SESSION_STATE` set to a temp file. When the picker is cancelled (no `ran`), it prints `\033[A` to `/dev/tty` so the shell redraws the prompt in place; the key bindings just repaint. **Prompt redraw.** The launcher runs `tv omp-sessions --inline` with `OMP_SESSION_STATE` set to a temp file. When the picker is cancelled (no `ran`), it prints `\033[A` to `/dev/tty` so the shell redraws the prompt in place; the key bindings just repaint.
**Launched by:** <kbd>ctrl-a</kbd> in fish and zsh. **Launched by:** <kbd>ctrl-a</kbd> in fish and zsh. <kbd>ctrl-n</kbd> at the prompt runs `omp` directly, not this script.
**Needs:** `python3`, `git`, `omp`, `tv`. **Needs:** `python3`, `git`, `omp`, `tv`.
+3 -2
View File
@@ -17,10 +17,10 @@ Ghostty reads both `config` and `config.ghostty`. `config` holds all settings; `
| Option | Value | | Option | Value |
| --- | --- | | --- | --- |
| `font-family` / `font-size` | `Victor Mono NF` / `12.5` | | `font-family` / `font-size` | `Victor Mono NF` / `13` |
| `background-opacity` / `background-blur` | `0.9` / `true` | | `background-opacity` / `background-blur` | `0.9` / `true` |
| `window-decoration` | `false`; `gtk-titlebar = false` | | `window-decoration` | `false`; `gtk-titlebar = false` |
| `window-padding-x/y` | `12` | | `window-padding-x/y` | `0` (bezelless: text runs to the window edge) |
| `cursor-style` | `underline`, blinking | | `cursor-style` | `underline`, blinking |
| `scrollback-limit` | `3023` | | `scrollback-limit` | `3023` |
| `mouse-hide-while-typing` | `true` | | `mouse-hide-while-typing` | `true` |
@@ -28,6 +28,7 @@ Ghostty reads both `config` and `config.ghostty`. `config` holds all settings; `
| `confirm-close-surface` | `false` | | `confirm-close-surface` | `false` |
| `app-notifications` | `no-clipboard-copy,no-config-reload` | | `app-notifications` | `no-clipboard-copy,no-config-reload` |
| `quit-after-last-window-closed` | `false`, delay `5m` | | `quit-after-last-window-closed` | `false`, delay `5m` |
| `command` | `tmux new-session -A -s main` (every window and tab attaches to tmux session `main`, creating it when missing) |
| `shell-integration` | `detect`, features `cursor,sudo,title,no-cursor` | | `shell-integration` | `detect`, features `cursor,sudo,title,no-cursor` |
| `gtk-single-instance` | `true` | | `gtk-single-instance` | `true` |
-4
View File
@@ -85,10 +85,6 @@ position = "left"
The nvim sidebar opens to the left of existing panes (default is right). The nvim sidebar opens to the left of existing panes (default is right).
## Claude Code integration
`dot_claude/hooks/executable_herdr-agent-state.sh` is installed and managed by herdr (integration id `claude`, version 7) and registered in `dot_claude/settings.json` with the `session` argument. It runs only inside herdr (`HERDR_ENV=1`, `HERDR_SOCKET_PATH`, `HERDR_PANE_ID` set), ignores subagent events, and sends a `pane.report_agent_session` JSON request over herdr's Unix socket with the pane id, Claude session id and transcript path. See [Claude Code](/ai/claude-code).
## herdr/kitty.conf ## herdr/kitty.conf
A legacy kitty config kept in the herdr folder. It runs `tmux new-session -A -s main`, listens on `unix:@mykitty`, includes `current-theme.conf`, maps `super`/`alt` keys to tmux prefix bytes, and has a copy of an older `tmux.conf` appended. The active herdr host is `~/.config/kitty/herdr.conf`. A legacy kitty config kept in the herdr folder. It runs `tmux new-session -A -s main`, listens on `unix:@mykitty`, includes `current-theme.conf`, maps `super`/`alt` keys to tmux prefix bytes, and has a copy of an older `tmux.conf` appended. The active herdr host is `~/.config/kitty/herdr.conf`.
+1 -11
View File
@@ -11,11 +11,7 @@ Terminal multiplexer. Used locally through the kitty tmux host (`super+t` in [ki
| Target | `~/.config/tmux/` | | Target | `~/.config/tmux/` |
| Install | `tmux` in `.chezmoidata/packages.yaml` (pacman, brew) | | Install | `tmux` in `.chezmoidata/packages.yaml` (pacman, brew) |
tpm is cloned to `~/.config/tmux/plugins/tpm` by `.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` when tmux exists and the directory is missing. `.config/tmux/plugins/**` is ignored by chezmoi. Install plugins with `prefix I`. tpm is a `git-repo` external in `.chezmoiexternal.toml`, cloned to `~/.config/tmux/plugins/tpm` when missing. `tmux.conf` ends with `run '~/.config/tmux/plugins/tpm/tpm'`. Plugins tpm installs (`prefix I`) land next to it and are ignored by chezmoi. [Ghostty](/terminal/ghostty) starts every surface in `tmux new-session -A -s main`.
:::note
`tmux.conf` ends with `run '~/.tmux/plugins/tpm/tpm'`, while the script clones to `~/.config/tmux/plugins/tpm`.
:::
## Options ## Options
@@ -68,12 +64,6 @@ The prefix is the default `ctrl+b`.
| --- | --- | | --- | --- |
| `tmux-plugins/tpm` | Plugin manager | | `tmux-plugins/tpm` | Plugin manager |
| `tmux-plugins/tmux-sensible` | Defaults | | `tmux-plugins/tmux-sensible` | Defaults |
| `vaaleyard/tmux-dotbar` | Status line, see below |
| `tmux-plugins/tmux-resurrect` | nvim strategy `session`, captures pane contents, restores `ssh psql mysql sqlite3 purple lazygit lazydocker opencode` and `claude` as `claude --continue` |
| `joshmedeski/tmux-nerd-font-window-name` | Icons from `tmux-nerd-font-window-name.yml` |
| `omerxx/tmux-sessionx` | Bound to `o`, zoxide mode on, transparent fzf colors |
| `tmux-plugins/tmux-continuum` | Save every 10 min; auto-restore `off` (the `kitty-tmux` launcher restores) |
| `eduwass/tmux-palette` | Command palette |
### Status line (dotbar) ### Status line (dotbar)
+1 -1
View File
@@ -60,7 +60,7 @@ bat only sees custom themes and syntaxes after `bat cache --build`. Two scripts
| Script | When it runs | | Script | When it runs |
| --- | --- | | --- | --- |
| `run_onchange_after_build-bat-cache.sh.tmpl` | Embeds SHA-256 hashes of `cyberdream.tmTheme` and `config`, so it re-runs whenever either file changes. Exits quietly if `bat` is missing. | | `run_onchange_after_build-bat-cache.sh.tmpl` | Embeds SHA-256 hashes of `cyberdream.tmTheme` and `config`, so it re-runs whenever either file changes. Exits quietly if `bat` is missing. |
| `.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` | Post-apply housekeeping (also clones tpm and runs `fc-cache` on Linux). Runs `bat cache --build` when its own rendered content changes, which includes the first apply. | | `.chezmoiscripts/run_onchange_after_40-post.sh.tmpl` | Post-apply housekeeping (also runs `fc-cache` on Linux). Runs `bat cache --build` when its own rendered content changes, which includes the first apply. |
:::note :::note
Neither hash covers the PureScript external. If the grammar updates, run `bat cache --build` by hand. Neither hash covers the PureScript external. If the grammar updates, run `bat cache --build` by hand.
+1 -8
View File
@@ -87,11 +87,4 @@ These are runtime files. In chezmoi's symlink mode, non-template, non-private fi
## omp commands ## omp commands
Two prompt commands in `dot_omp/private_agent/commands/` target the solution files. Both expect the same on-disk format: a `/* ... */` header block (number, title, difficulty, URL, description, examples, constraints), a JSDoc `@param`/`@return` block, then one or more solution functions. `lc-elir` runs the `/leetcode-eli5` omp command, which lives in `~/.omp/agent/commands/` and is not managed by this repo.
| Command | File | What it does |
| --- | --- | --- |
| `/leetcode-eli5 <file>` | `leetcode-eli5.md` | Adds beginner-level, line-by-line comments above each statement plus a `// ====` banner with the problem number and title. It must not change the header, the JSDoc, or any code. Prints the path and number of comment lines added. |
| `/leetcode-docs <file>` | `leetcode-docs.md` | Converts a solution into a Fumadocs MDX page at `content/docs/leetcode/<difficulty>/<category>/<number>-<slug>.mdx`: problem, examples, constraints, an intuition paragraph, the verbatim solution, and a derived complexity callout. Multiple approaches become a tab group. Prints the output path. |
See [omp](/ai/omp) for how agent commands are loaded.
+2 -2
View File
@@ -153,9 +153,9 @@ The preview shows the launch command, the path on `PATH`, its `readlink -f` targ
### omp-sessions ### omp-sessions
Source `omp-session --list`: the [omp](/ai/omp) sessions of the current git repo, newest first, as `<age> <branch> <title>[ · <subdir>]<TAB><session file>`. tv shows and matches the display column, so typing a branch name filters to its sessions. The branch is the one HEAD was on when the session was last written, from the reflog; see [omp-session](/shell/scripts#omp-session). Source `omp-session --list`: the omp sessions of the current git repo, newest first, as `<age> <branch> <title>[ · <subdir>]<TAB><session file>`. tv shows and matches the display column, so typing a branch name filters to its sessions. The branch is the one HEAD was on when the session was last written, from the reflog; see [omp-session](/shell/scripts#omp-session).
The preview runs `omp-session --preview`: title, last-write time and cwd, then the text of every user and assistant message. <kbd>enter</kbd> runs `resume` in execute mode, `omp-session --resume <file>`, which `exec`s `omp --resume <file>`. The preview runs `omp-session --preview`: title, last-write time and cwd, then the text of every user and assistant message. <kbd>enter</kbd> runs `resume` in execute mode, `omp-session --resume <file>`, which `exec`s `omp --resume <file>`. <kbd>ctrl-n</kbd> runs `new`, `omp-session --new`, which starts a fresh `omp` session. In this cable <kbd>ctrl-n</kbd> no longer moves to the next entry; <kbd>down</kbd> and <kbd>ctrl-j</kbd> still do.
**Needs:** `omp-session`, `omp`. **Needs:** `omp-session`, `omp`.
+1 -1
View File
@@ -71,7 +71,7 @@ Post-commands run after everything else:
| Shelly Update | `shelly upgrade-all -n` | | Shelly Update | `shelly upgrade-all -n` |
| Cachy Update | `cachy-update` | | Cachy Update | `cachy-update` |
`shelly upgrade-all -n` is also available as the `sua` alias. The post-commands assume CachyOS tooling (`shelly`, `cachy-update`) and the owner's own CLIs (`omp`, `hermes`, `herdr`); on machines without them those steps fail. See [omp](/ai/omp) for the agent CLI. `shelly upgrade-all -n` is also available as the `sua` alias. The post-commands assume CachyOS tooling (`shelly`, `cachy-update`) and the owner's own CLIs (`omp`, `hermes`, `herdr`); on machines without them those steps fail.
:::note :::note
`chezmoi re-add` does not overwrite templates, so edits made directly to rendered files such as `~/.gitconfig` or `~/.config/yazi/yazi.toml` are not captured; change the `.tmpl` source instead. `chezmoi re-add` does not overwrite templates, so edits made directly to rendered files such as `~/.gitconfig` or `~/.config/yazi/yazi.toml` are not captured; change the `.tmpl` source instead.