oh-my-pi:终端里的 AI 编程伙伴

一、为什么你需要一个终端 AI Agent #

AI 编程工具正在经历一场范式分化。一条线走向「编辑器内嵌」——Cursor、GitHub Copilot、Windsurf,核心价值是写代码时实时补全和重构;另一条线走向「终端 Agent」——Claude Code、OpenAI Codex CLI、oh-my-pi(下称 omp),核心价值是你给一个指令,Agent 自主完成多步骤的代码操作

这不是「谁更好」的问题,而是适用场景不同:

维度编辑器内嵌 AI终端 AI Agent
交互模式逐行补全 + 即时对话指令驱动 + 自主执行
擅长写新代码、局部重构跨文件修改、项目级操作
上下文当前文件 + LSP整个代码库 + git 历史
典型场景“帮我补全这个函数”“把所有 API 调用迁移到 v2”

而 omp 在 v17 这一代做了件少有人做的事:把整套工具链用 Rust 100k 行重写并内嵌进进程。ripgrep 不再 fork-exec,glob 不再 fork-exec,连 bash 都是自带的 brush shell(67 个内建命令)。这意味着:

  • Windows 原生支持,无需 WSL——这个以前是终端 Agent 的耻辱柱,现在被 omp 抹掉了
  • 跨平台性能一致:macOS、Linux、Windows 跑同一个 omp 二进制,体验完全一样
  • 工具调用延迟从几十毫秒降到亚毫秒级

而 Claude Code 绑定 Anthropic 生态、Codex CLI 工具链偏简单。omp 走的是另一条路——LSP / DAP / 14 种 provider / 60+ 模型 / 双内核 eval / 8 个内置 subagent / TTSR 流式规则——这些能力凑在一起,才是「终端里的 AI 编程伙伴」应有的样子

我日常用 omp 做编程自动化和办公自动化任务,这篇文章是我三个月的使用指南——不是翻译 README,而是把最有价值的能力、最实用的配置、最容易踩的坑整理出来。对应版本:v17.3.4(2026 年 8 月)。

二、安装与初始配置 #

2.1 安装 #

omp 的运行时是 Bun(不是 Node.js),v17 支持五种安装方式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 方式一:一键脚本(macOS/Linux,最省事)
curl -fsSL https://omp.sh/install | sh

# 方式二:Homebrew(macOS)
brew install can1357/tap/omp

# 方式三:Bun 全局安装(推荐,更新方便)
bun install -g @oh-my-pi/pi-coding-agent

# 方式四:Nix(声明式配置友好)
nix profile install github:can1357/oh-my-pi

# 方式五:mise 版本管理
mise use -g github:can1357/oh-my-pi

Windows 用户(无需 WSL):

1
irm https://omp.sh/install.ps1 | iex

Alpine/musl 注意事项:预编译 musl 二进制动态链接 libstdc++/libgcc,Alpine 默认不带,先装:

1
apk add libstdc++ libgcc

安装后运行 omp 进入交互式 TUI。

2.2 终端适配 #

omp 使用 Kitty 键盘协议 实现可靠的修饰键检测。这直接影响 Shift+Enter 换行、快捷键等核心交互:

终端适配情况
Kitty✅ 开箱即用
iTerm2✅ 开箱即用
Ghostty⚠️ 需配置 keybind(见下)
WezTerm⚠️ 需启用 enable_kitty_keyboard
Windows Terminal✅ 原生支持(v17 改进)

Ghostty 配置(~/.config/ghostty/config):

keybind = alt+backspace=text:\x1b\x7f
keybind = shift+enter=text:\n

WezTerm 配置(~/.wezterm.lua):

1
2
3
4
local wezterm = require 'wezterm'
local config = wezterm.config_builder()
config.enable_kitty_keyboard = true
return config

2.3 API Key 配置(60+ Provider) #

v17 把 provider 数从 8 个扩展到 60+,覆盖几乎所有主流模型服务。

方式一:环境变量(适合多 Provider、CI/CD 场景)

1
2
3
4
5
6
7
8
9
# 在 ~/.config/fish/config.fish 或 ~/.bashrc 中
set -x ANTHROPIC_API_KEY "sk-ant-..."
set -x OPENAI_API_KEY "sk-..."
set -x GEMINI_API_KEY "AIza..."
set -x DEEPSEEK_API_KEY "sk-..."
set -x GROQ_API_KEY "gsk-..."
set -x XAI_API_KEY "xai-..."
set -x MISTRAL_API_KEY "..."
set -x OPENROUTER_API_KEY "sk-or-..."

方式二:/login 交互式认证(适合 OAuth 订阅)

在 omp TUI 中输入 /login,支持 30+ Provider 的 OAuth 流程,包括:

  • Anthropic(Claude Pro/Max)
  • ChatGPT Plus/Pro
  • GitHub Copilot
  • Google Cloud Code Assist(Antigravity)
  • Cursor
  • OpenAI Codex(含 Cyber policy 多账号轮转)

凭证存储在 ~/.omp/agent/agent.db,同一 Provider 的 API Key 凭证优先于 OAuth。v17 新增 sibling account 轮转——配置多个账号时,限流/拒绝时会自动尝试下一个账号,不会因一个账号被限而整个任务卡住。

2.4 模型角色分配 #

omp 的设计亮点是按角色分配不同模型,而不是一刀切用一个模型。在 TUI 中输入 /model 交互式配置:

角色用途v17 推荐模型
default日常编码、文件操作claude-sonnet-4-6 / gpt-5.5
smol快速探索、轻量任务(省 token)claude-sonnet-4-6 / gpt-4o-mini / deepseek-v4-flash
slow深度推理、复杂 debugclaude-opus-4-6 / gpt-5.5-pro
plan计划模式(/plan)专用claude-opus-4-6:high / o3:high
commitcommit 消息生成同 default 即可
advisor第二审阅模型(v17 新增)用便宜模型即可,e.g. gpt-4o-mini

环境变量快速覆盖:

1
2
3
4
5
set -x PI_DEFAULT_MODEL "anthropic/claude-sonnet-4-6"
set -x PI_SMOL_MODEL "deepseek/deepseek-v4-flash"
set -x PI_SLOW_MODEL "anthropic/claude-opus-4-6"
set -x PI_PLAN_MODEL "anthropic/claude-opus-4-6:high"
set -x PI_ADVISOR_MODEL "openai/gpt-4o-mini"

配置持久化到 ~/.omp/agent/config.yml

2.5 Shell Completions #

v17 起 omp 自动生成 bash/zsh/fish 补全脚本,命令、子命令、模型名(--model / --smol / --slow / --plan)都从 live 元数据生成,永不漂移:

1
2
3
4
5
6
7
8
# zsh — 添加到 ~/.zshrc
eval "$(omp completions zsh)"

# bash — 添加到 ~/.bashrc
eval "$(omp completions bash)"

# fish — 写到 completions 目录
omp completions fish > ~/.config/fish/completions/omp.fish

三、核心能力实战 #

3.1 Hashline 编辑——不再被 str_replace 折磨 #

用过 Claude Code 的人都知道,AI 改代码最令人崩溃的不是改错逻辑,而是 str_replace 找不到目标字符串。多一个空格、少一个缩进、文件已经变了但 AI 还在用旧内容匹配——这些都是日常。

omp 的 Hashline 机制给每一行生成一个短内容哈希锚点(4-hex tag + xxHash32 + whole-file snapshot),AI 引用锚点定位而不是复制原文。v17 在 hashline 上做了进一步加固:anchor 失效(文件被外部修改过)时,patch 在落地前被拒绝,避免静默写入错位位置。

效果(来自 omp 公开的 16 模型 / 180 任务 / 3 轮 benchmark):

模型指标含义
Grok Code Fast 16.7% → 68.3%十倍提升,第一次 edit 就过的概率
Gemini 3 Flash+5 pp比传统 str_replace 高 5 个百分点
Grok 4 Fast−61% 输出 tokens不再浪费在重试循环上
MiniMax2.1× pass rate用你的模型跑出的提升

对你来说,AI 改代码不再因为格式差异而反复失败——一次改对的概率大幅提升,token 消耗同步下降。

3.2 LSP 集成——终端里享受 IDE 级智能 #

这是 omp 区别于其他终端 Agent 最核心的能力之一。通过 Language Server Protocol,omp 在终端里获得了 IDE 级别的代码理解,v17 支持 14 个 LSP 操作 + 53 个 language server

LSP 操作说明
diagnostics实时语法/类型检查
definition跳转到定义
type_definition跳转到类型定义
implementation跳转到实现
references查找所有引用
hover悬停类型信息
symbols工作区符号搜索
rename重命名符号(含 willRenameFiles)
code_actions代码操作(自动修复等)

v17 的 rename 走的是 workspace/willRenameFiles——意思是 AI 要重命名 formatBytes,LSP server 会先拿到所有引用,告诉 omp「这个文件要改、那个文件也要改」,然后 omp 一次性把所有 re-exports / barrel files / aliased imports 一起更新,重命名操作不再需要人工补漏

实际体验中最有用的两个:

  1. Format-on-write:AI 每次写完/改完文件后自动用 LSP 的 formatter 格式化(rustfmt、gofmt、prettier 等)
  2. Diagnostics on write:AI 改完文件立刻跑一遍诊断,语法错误、类型错误当场发现当场修

开箱支持 53 个语言(Rust、Go、Python、TypeScript、Java、Kotlin、Haskell、Ruby……),自动发现项目本地的 LSP Server(node_modules/.bin/.venv/bin/ 等),无需手动配置。

3.3 Eval——双内核 + Tool-Calling Bridge #

v17 把原来的「Python Tool」重塑为 eval:持久化的 Python 内核 持久化的 Bun JS Worker,两个内核都能回调 agent 自己的工具read / write / display / tool.<name>)。这意味着一个数据科学任务里:

1
2
3
4
# 第一个 cell — Python 内核加载 CSV
import pandas as pd
df = pd.read_csv("data.csv")
print(df.describe())
1
2
3
4
5
// 第二个 cell — JS Worker 接着分析
const topScorer = rows.reduce((acc, r) =>
  r.score > acc.score ? r : acc
, rows[0]);
display(`Top scorer: ${topScorer.name}`);

两个内核共享同一个 session——df 还在内存里,JS 这边能拿到(通过 callback bridge)。pandas 在 Python 里读,图表在 JS 里画,永远不需要离开 cell。

eval 还预装了大量 helper:文件 I/O、搜索、行级编辑(lines()insert_at()delete_lines()),以及 magic 命令:

Magic含义
%pip内联 pip install
%time单行计时
%%bashcell 内 bash 执行
!cmdshell shortcut

display() 渲染 HTML、Markdown、图片,Mermaid 图表在 iTerm2/Kitty/Ghostty 中直接渲染(v17 新增 SIXEL 图像协议支持——PNG/JPEG/WebP/GIF 都能在终端内解码)。

安装依赖:

1
omp setup python    # 安装 Jupyter 内核

3.4 Task Subagent——8 Agent + IRC Channel + Schema-Validated Yield #

当你面对大型任务(“审查整个代码库的安全问题”),单 Agent 的上下文窗口撑不住。v17 的 task 工具派生子 Agent 并行执行,并提供结构化的返回值——父 Agent 拿到的是 schema-validated 对象,不是散文。

8 个内置 Agent 角色

Agent专长
explore代码库探索、文件搜索
plan架构规划、任务拆解
designer设计方案
reviewer代码审查(可进一步派生 explore Agent)
task通用任务执行
quick_task轻量快速任务
scout异步侦察,keep-alive 后台运行
advisor第二模型实时审阅(v17 独立成 agent)

关键 v17 新特性

  • IRC channel:subagent 之间通过 channel.send() / channel.broadcast() 通信,可 DM 单个 peer 或 broadcast 给所有 sibling,协作不再只能父 → 子单向
  • Schema-validated yield:子 agent 用 yieldResult(z.object({...})) 返回结构化数据,父 agent 直接拿对象,不需要 parse 散文
  • 8 种隔离后端:默认 CoW-first(APFS clones / btrfs reflinks / zfs reflinks / overlayfs / projfs / rcopy),isolated: true 在隔离 workspace 里运行不影响主工作区
  • 默认并发 32:可设 0 = unlimited,适合大批量侦察任务
  • Keep-alive:scout agent 完成后进入 parked 状态不立即销毁,可被后续任务拉起复用

配置示例(~/.omp/agent/config.yml):

1
2
3
4
5
6
7
8
9
task:
  concurrency: 32           # 默认并发数
  isolation:
    mode: fuse-overlay      # 隔离后端
    merge: patch            # 合并策略:patch 或 branch

async:
  enabled: true             # 允许后台任务
  maxJobs: 100

3.5 Commit——Atomic Splits + Validated Messages #

omp commit 不只是写一条 commit message,而是一套完整的 commit 工作流:

  1. Agentic 分析:用 git-overviewgit-file-diffgit-hunk 三级递进,精细理解每处改动
  2. Atomic 自动拆分(v17 强化):检测到不相关的改动时,自动拆分为多个 atomic commit 并按依赖排序
  3. Hunk 级暂存:改动跨多个关注点时,按 hunk 分别暂存
  4. Changelog 生成:自动为 CHANGELOG.md 追加条目
  5. 格式校验:检测废话词汇、元描述,强制 conventional commit 格式
1
2
3
4
omp commit              # 标准 commit
omp commit --dry-run    # 预览不执行
omp commit --push       # commit 后自动 push
omp commit --no-changelog   # 跳过 changelog

3.6 Web Search——14 Provider Chain + 专用 Extractor #

v17 的 web_search 把搜索结果链式 fallback 到 14 个 provider(Exa、Brave、Jina、Perplexity、Gemini、Codex、Tavily、Serp、Kagi……),并对结果做专用抽取:

站点类型抽取器输出
arxivarxiv extractorPDF → markdown,含锚点
GitHubrepo / issue / PR 解析结构化 markdown
Stack Overflowquestion/answer 抽取干净答案
npm / PyPI / crates.ioregistry 解析包元信息 + README
NVD / OSV / CISACVE 抽取结构化漏洞条目
1
2
# 终端里读 arxiv 论文
> read https://arxiv.org/pdf/2604.10739v1

返回的是带锚点的 markdown,cite / follow / quote 全套可用,同一个 read 工具同时处理本地文件和远程 URL

3.7 ★ NEW: DAP 调试器——终端里 Attach 真实调试器 #

v17 最大新能力之一。把 28 个 DAP(Debug Adapter Protocol)操作带到终端:

场景Adapter操作
C 二进制 segfaultlldb-dapattach → step → frame 读取
Go 服务 hangdlvattach → goroutines 遍历
Python 进程卡死debugpyattach → pause → evaluate

这是其他终端 Agent 还没有的能力——Claude Code / Codex CLI 还在 print debugging,omp 已经能直接 attach 一个真实的调试器走栈帧。

1
2
3
4
5
# 配置示例
debug:
  enabled: true             # 总开关
  adapter: lldb-dap          # 默认 adapter
  attach: stdio              # stdio / unix / TCP / pid

实际场景:一个 C 程序段错误,AI 不用读源码猜哪里越界——它直接 attach lldb-dap <pid>,跑到段错误位置,读取 frame 里的局部变量,x = 57351 这种「7 ^ (7<<13) 的结果」直接拿到,立刻知道是 xorshift32 的中间态。

3.8 ★ NEW: Advisor——第二模型实时审阅每个 Turn #

v17 的 advisor 角色是一个独立模型,读取主 agent 的每个 turn 并实时插入批注

Severity含义
aside提示性观察,不强制行为
concern问题提示,主 agent 应解释或修正
blocker严重错误,必须停下来

配置示例

1
2
3
modelRoles:
  default: anthropic/claude-sonnet-4-6    # 主 doer
  advisor: openai/gpt-4o-mini             # 便宜的 reviewer

advisor 跑在独立上下文 + 独立模型上,能抓到 doer 赶进度时跳过的细节。比如主 agent 把 catch 改成 catch (e) {} 静默吞错,advisor 立刻插一条 concern:「用户要求是 ENOENT 才吞,不是所有异常都吞」。doer 看到批注,要么修正要么解释为什么不——多模型协同的成本远低于一次返工

3.9 ★ NEW: /review——P0-P3 + Confidence 评分 + Verdict #

/review 是 v17 引入的专用审查命令,针对单个分支、单个 commit 或 uncommitted 工作区:

1
2
3
/review                # 审查当前工作区
/review main..HEAD     # 审查分支差异
/review HEAD~3..HEAD   # 审查最近 3 个 commit

/review 内部派生 reviewer subagent 并行扫,每个发现都打分:

维度取值
PriorityP0(阻塞发布)/ P1 / P2 / P3
Confidence0-100,越高越确定
Verdictcorrect / incorrect

实际用法:先扫 P0/P1——这些是阻塞发布的,必须修;P2/P3 留到空闲时处理;confidence < 50 的条目经常是误报,可以扫一眼就关掉。

3.10 ★ NEW: Collab——分享链接或 QR 码,实时协作 #

/collab 把当前 live session 放到 relay 上,返回一个链接 + 二维码:

1
2
/collab                # read-write 协作
/collab view           # 只读链接,旁观者不能操作 agent

队友可以:

  • omp join <token> 从另一个终端加入
  • 或者直接用浏览器打开链接(默认 relay 是 my.omp.sh
维度详情
加密AES-256-GCM,密钥在客户端,relay 看不到
模式read-write(双方都能操作)/ view-only(只旁观)
传输wss(WebSocket Secure)
实用场景pair programming、远程 code review、给同事演示 agent 工作流

安全模型:frames 是 client-side sealed 的,relay 只负责转发密文——这意味着即使 relay 被攻破,攻击者拿到的也是密文。

3.11 ★ NEW: GitHub as Filesystem——read 一把梭 #

其他 harness 都给 agent 单独造 gh_issue_view / gh_pr_view / gh_search 工具,每个都有自己的参数集要学。omp 走了一条不同路:read 工具已经知道怎么处理路径,PR 就是路径

1
2
3
4
5
read issue://123                       # 读 issue #123
read pr://456                          # 读 PR #456 元数据
read pr://456/diff/2                   # 读 PR #456 的第 2 个 diff hunk
read pr://456/files/src/api.ts         # 读 PR 修改后的某个文件
read github://owner/repo               # 整个仓库
Scheme用途
issue://<n>Issue 详情
pr://<n>PR 元数据
pr://<n>/diff/<m>PR 的第 m 个 hunk
github://<owner>/<repo>整个仓库浏览

listing 参数:?state / ?limit / ?author / ?label,sqlite 后端带 soft + hard TTL 缓存,后台 refresh 不阻塞 agent

好处:agent 不需要学习一组新工具,read 一个 scheme 就行;你 debug agent 行为时也不需要追一堆 gh_* 工具的实现。

四、进阶:让 OMP 适配你的工作流 #

4.1 配置文件体系详解 #

omp 的配置遵循用户级全局 + 项目级覆盖的两层结构。理解这套体系是高效使用 omp 的前提。

目录结构总览 #

~/.omp/                           ← 用户级根目录
├── agent/
│   ├── config.yml                ← 全局配置(核心!)
│   ├── models.yml                ← 自定义 Provider/模型定义
│   ├── SYSTEM.md                 ← 自定义系统提示词
│   ├── AGENTS.md                 ← 全局项目指令
│   ├── agent.db                  ← 凭证数据库(/login 产生)
│   ├── sessions/                 ← 会话文件存储
│   ├── memories/                 ← mnemopi 记忆存储(v17)
│   ├── skills/                   ← 用户级 Skills
│   │   └── <skill-name>/
│   │       └── SKILL.md
│   ├── commands/                 ← 用户级自定义 Slash Commands
│   │   ├── <name>.md             ← Markdown 命令
│   │   └── <name>/index.ts       ← TypeScript 命令
│   ├── hooks/                    ← 用户级 Hooks
│   │   ├── pre/*.ts
│   │   └── post/*.ts
│   ├── tools/                    ← 用户级自定义 Tools
│   │   └── <name>/index.ts
│   ├── agents/                   ← 用户级自定义 Agent 定义
│   ├── themes/                   ← 自定义主题
│   │   └── *.json
│   └── logs/                     ← 调试日志(按天轮转)

.omp/                             ← 项目级配置(在项目根目录下)
├── settings.json                 ← 项目级设置覆盖
├── SYSTEM.md                     ← 项目级系统提示词(优先于全局)
├── AGENTS.md                     ← 项目指令(编码规范、架构文档等)
├── skills/                       ← 项目级 Skills
├── commands/                     ← 项目级 Slash Commands
├── hooks/                        ← 项目级 Hooks
├── tools/                        ← 项目级自定义 Tools
└── agents/                       ← 项目级 Agent 定义

config.yml 完整配置参考 #

这是 omp 最核心的配置文件,位于 ~/.omp/agent/config.yml。以下是一个生产级配置的详细注释版:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
# ═══════════════════════════════════════
# 主题与外观
# ═══════════════════════════════════════
theme:
  dark: titanium              # 暗色主题(65+ 内置可选:catppuccin, dracula, nord, tokyo-night...)
  light: light                # 亮色主题
  # omp 支持自动检测终端外观(Mode 2031 / macOS CoreFoundation / COLORFGBG)

display:
  tabWidth: 4                 # Tab 渲染宽度(支持 .editorconfig 集成)

terminal:
  showImages: true            # 在 Kitty/iTerm2/Ghostty 中内联显示图片(含 SIXEL)

# ═══════════════════════════════════════
# 模型与 Provider
# ═══════════════════════════════════════
enabledModels:                  # 白名单
  - "anthropic/*"
  - "gpt-5.5*"
  - "gemini-3.7-flash*"

modelRoles:                     # 角色到模型的路由
  default: claude-sonnet-4-6    # 日常实现
  plan: claude-opus-4-6:high    # /plan 模式
  smol: deepseek/deepseek-v4-flash  # 快速探索
  commit: claude-sonnet-4-6     # commit 生成
  advisor: openai/gpt-4o-mini   # v17 第二审阅

modelProviderOrder:              # 同模型多 Provider 优先级
  - github-copilot
  - openai

defaultThinkingLevel: high      # off/minimal/low/medium/high/xhigh

# ═══════════════════════════════════════
# 采样控制
# ═══════════════════════════════════════
topP: -1
topK: -1
minP: -1

# ═══════════════════════════════════════
# 重试与容错
# ═══════════════════════════════════════
retry:
  enabled: true
  maxRetries: 3
  baseDelayMs: 2000
  fallbackChains:               # 角色级 fallback
    default:
      - "openai/gpt-4o-mini"
      - "openai/gpt-4o"
    plan:
      - "anthropic/claude-sonnet-4-6:high"
      - "openai/o3:high"
  fallbackRevertPolicy: cooldown-expiry

# ═══════════════════════════════════════
# 上下文管理
# ═══════════════════════════════════════
compaction:
  enabled: true
  reserveTokens: 16384
  keepRecentTokens: 20000
  autoContinue: true

# ═══════════════════════════════════════
# 自动记忆(v17 mnemopi)
# ═══════════════════════════════════════
memory:
  backend: mnemopi              # v17 新后端
  scope: per-project            # global / per-project / tagged

# ═══════════════════════════════════════
# Skills 与扩展
# ═══════════════════════════════════════
skills:
  enabled: true
  enableSkillCommands: true

# ═══════════════════════════════════════
# Task / Subagent
# ═══════════════════════════════════════
task:
  concurrency: 32               # v17 默认
  isolation:
    mode: fuse-overlay          # none / worktree / fuse-overlay / fuse-projfs
    merge: patch

async:
  enabled: true
  maxJobs: 100

# ═══════════════════════════════════════
# 交互模式
# ═══════════════════════════════════════
steeringMode: one-at-a-time
followUpMode: one-at-a-time
interruptMode: immediate

# ═══════════════════════════════════════
# Shell 与 Bash
# ═══════════════════════════════════════
shellPath: /bin/bash
hideThinkingBlock: false

todo:
  reminders: true

models.yml 自定义 Provider #

接入 OpenAI 兼容的第三方服务(本地 Ollama、vLLM、中转站等),在 ~/.omp/agent/models.yml 中定义:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
providers:
  # 本地 Ollama
  ollama:
    baseUrl: http://localhost:11434/v1
    apiKey: ***       # 引用环境变量
    api: openai-completions
    models:
      - id: llama-3.1-8b
        name: Llama 3.1 8B (Local)
        reasoning: false
        input: [text]
        cost: {input: 0, output: 0, cacheRead: 0, cacheWrite: 0}
        contextWindow: 128000
        maxTokens: 32000

  # vLLM / llama.cpp 本地推理
  llama.cpp:
    baseUrl: http://127.0.0.1:8080
    api: openai-responses
    auth: none

# 模型等价映射
equivalence:
  overrides:
    my-relay/claude-sonnet-4-6: claude-sonnet-4-6

项目级配置覆盖 #

在项目根目录创建 .omp/settings.json,覆盖全局配置:

1
2
3
4
5
6
7
8
9
{
  "modelRoles": {
    "default": "gemini-3.7-flash:high"
  },
  "disabledExtensions": ["cursor"],
  "compaction": {
    "reserveTokens": 32768
  }
}

AGENTS.md 项目指令 #

AGENTS.md 是 omp 发现项目上下文的核心文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# 项目规范

## 架构
- 后端:Go 标准库 + SQLite
- 前端:Vue 3 + TypeScript

## 编码规范
- Go 代码用 gofmt 格式化
- 提交消息遵循 Conventional Commits
- 测试用 `_test.go` 后缀

## 常用命令
- `make build`:编译
- `make test`:测试
- `make lint`:lint 检查

## 禁止
- 不要修改 migrations/ 目录下的已有文件
- 不要使用 deprecated API

4.2 Skills 系统——能力包按需加载 #

Skill 是一个文件系统目录,包含一个 SKILL.md 描述文件,按需注入 AI 上下文:

~/.omp/agent/skills/
├── brave-search/
│   ├── SKILL.md
│   └── references/tables.md
└── postgres/
    ├── SKILL.md
    └── scripts/

SKILL.md 格式:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
---
name: brave-search
description: Web search via Brave Search API. Use when user asks to search the web.
---

# Brave Search

Use the Brave Search API for web queries. API key is in environment variable BRAVE_API_KEY.

...

关键行为:

  • description 是匹配关键——Agent 根据描述判断是否加载该 Skill
  • Agent 用 read skill://<name> 按需读取 Skill 内容,不浪费上下文
  • /skill:<name> [args] 可手动触发 Skill 注入
  • Skill 目录下的关联文件通过 skill://<name>/references/xxx.md 访问

4.3 Universal Config Discovery——v17 扩展到 8 个工具 #

omp 会自动发现并加载 8 种 AI 编程工具的配置——你团队上季度写的 Cursor rules / Claude Code MCP / Cline rules 不需要迁移,直接复用:

工具发现内容配置目录
Claude CodeMCP servers, rules, skills, hooks, commands.claude/
CursorMDC frontmatter, rules.cursor/
WindsurfRules.windsurf/
CodexAGENTS.md.codex/
Geminisystem.md.gemini/
Cline.clinerules.cline/
GitHub CopilotapplyTo globs.github/
VS CodePrompts, context.vscode/

通过 /extensions 可以查看和管理所有发现的配置项,按 Provider 筛选、按条目启禁用。每个条目带 _source / _shadowed / priority 三个属性,冲突时优先级明确——不用猜谁覆盖谁。

4.4 自定义 Slash Commands #

两种格式:

Markdown 命令(简单模板):

~/.omp/agent/commands/review-staged.md

1
2
3
4
5
6
7
8
9
---
description: Review staged git changes
---

Review the staged changes (`git diff --cached`). Focus on:

- Bugs and logic errors
- Security issues
- Error handling gaps

TypeScript 命令(完整 API 访问):

~/.omp/agent/commands/deploy/index.ts

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import type { CustomCommandFactory } from "@oh-my-pi/pi-coding-agent";

const factory: CustomCommandFactory = () => ({
  name: "deploy",
  description: "Deploy to staging",
  async execute(args, ctx) {
    const confirmed = await ctx.ui.confirm("Deploy to staging?", args);
    if (!confirmed) return;
    await ctx.shell("make deploy-staging");
    return "Deployment complete. Run tests to verify.";
  },
});

export default factory;

参数占位符(Markdown 命令):$1$2 位置参数,$@ / $ARGUMENTS 全部参数。

4.5 Hooks——事件驱动的运行时拦截 #

Hook 是 TypeScript 模块,可以拦截和修改 Agent 的行为:

~/.omp/agent/hooks/pre/sudo-guard.ts

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import type { HookAPI } from "@oh-my-pi/pi-coding-agent/hooks";

export default function (omp: HookAPI) {
  omp.on("tool_call", async (event, ctx) => {
    if (event.toolName === "bash" && /sudo/.test(event.input.command as string)) {
      const ok = await ctx.ui.confirm("Allow sudo?", event.input.command as string);
      if (!ok) return { block: true, reason: "Blocked by user" };
    }
    return undefined;
  });
}

Hook 位置:

  • 全局:~/.omp/agent/hooks/pre/*.ts~/.omp/agent/hooks/post/*.ts
  • 项目:.omp/hooks/pre/*.ts.omp/hooks/post/*.ts
  • CLI:--hook <path>

4.6 自定义 Tools——扩展 Agent 的工具箱 #

~/.omp/agent/tools/greet/index.ts

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
import { Type } from "@sinclair/typebox";
import type { CustomToolFactory } from "@oh-my-pi/pi-coding-agent";

const factory: CustomToolFactory = () => ({
  name: "greet",
  label: "Greeting",
  description: "Generate a greeting",
  parameters: Type.Object({
    name: Type.String({ description: "Name to greet" }),
  }),
  async execute(_toolCallId, params) {
    const { name } = params as { name: string };
    return { content: [{ type: "text", text: `Hello, ${name}!` }] };
  },
});

export default factory;

4.7 ★ Memory——v17 mnemopi 引擎 #

旧版的 memory 是「扫描历史会话 → 提取事实 → 注入 MEMORY.md」,v17 重塑为 mnemopi——一个独立的本地 SQLite + 向量嵌入 + 图(graph)引擎:

维度旧版v17 mnemopi
存储MEMORY.md 文本SQLite + 向量嵌入 + graph
工具自动扫描retain / recall / reflect / memory_edit
作用域全局global / per-project / tagged
跨 subagent不支持delegated subagent 继承父的 memory state

四个工具的语义:

1
2
3
4
retain <fact>               # 写入事实(带 embedding)
recall <query>              # 向量检索 + 图遍历
reflect <topic>             # 综合多个事实,生成结构化结论
memory_edit <id> <new_fact> # 按 id 修订事实

实际体验:agent 在长 session 里学到的项目约定,可以用 retain 显式存下来,下一次启动直接 recall 拿到。subagent 也能继承父的 memory——意味着你派出去的 explorer 看到的事实,planner 也看得到,不再需要把所有上下文塞到 prompt 里

配置:

1
2
3
memory:
  backend: mnemopi
  scope: per-project         # global / per-project / tagged

五、实用技巧与最佳实践 #

5.1 Session 管理 #

Session 是 omp 的核心工作单元,存储为 JSONL 格式的树结构:

1
2
3
4
5
omp                    # 启动新会话
omp -c                 # 继续最近的会话
omp -r                 # 打开会话选择器
omp -r abc123          # 按 ID 前缀恢复
omp --no-session       # 临时模式(不保存)

会话自动保存到 ~/.omp/agent/sessions/(按工作目录分组)。

上下文压缩——长会话上下文窗口不够用时:

1
2
/compact                           # 自动压缩
/compact Focus on the API changes  # 带焦点的压缩

分支——从历史消息分叉出新会话:

  • /tree:浏览会话树,支持搜索和过滤
  • /branch / /fork:从选定消息创建新会话

交接——把当前会话的上下文交接给新会话:

1
/handoff Focus on the database migration

5.2 /plan 模式的正确用法 #

/plan 切换计划模式——让 Agent 先想清楚再做,避免"边做边改"的返工循环:

  1. 输入 /plan 开启
  2. 描述需求,Agent 生成实施方案
  3. 审查方案,提出修改
  4. 满意后关闭 /plan,Agent 按方案执行

计划模式使用的模型由 modelRoles.plan 控制,建议配置为最强的推理模型。

5.3 Bash Mode 快捷执行 #

在提示词中用 ! 前缀直接执行 shell 命令:

1
2
!git status          # 执行并将输出纳入 LLM 上下文
!!git status         # 执行但排除输出(不影响上下文)

实时流式输出,按 Escape 取消。

5.4 TUI 快捷键速查 #

最常用

快捷键功能
Shift+Enter多行输入
Escape取消/中断
Ctrl+P切换模型角色(slow/default/smol)
Ctrl+L打开模型选择器
Ctrl+R搜索历史提示词
Ctrl+T展开/折叠 Todo 面板
Ctrl+O展开/折叠工具输出
Ctrl+G用外部编辑器编辑消息
Ctrl+D保存草稿并退出(v17 修正了 /hotkeys 文案)
Tab路径补全 / @ 文件引用
Shift+Tab切换思考深度

5.5 omp stats 本地用量看板 #

1
omp stats    # 启动本地可观测性 Dashboard

查看 API 请求数、费用、缓存命中率、token 吞吐量等指标——所有数据本地存储,不上传任何信息

5.6 主题切换 #

65+ 内置主题,支持自动暗/亮切换:

1
/settings    # 交互式选择主题

或在 config.yml 中配置:

1
2
3
theme:
  dark: titanium
  light: light

自定义主题放在 ~/.omp/agent/themes/*.json

5.7 omp CLI 子命令 #

子命令功能
omp commitAI 驱动的 git commit(atomic split + validated msg)
omp config管理 settings(list/get/set/reset/path)
omp grep基于 ripgrep 的文件内容搜索(in-process)
omp jupyterJupyter 内核管理(v17 eval 双内核)
omp plugin插件管理(install/enable/configure/doctor)
omp search / omp q快速 Web 搜索(14 provider chain)
omp setup安装可选依赖(如 omp setup python
omp shell非交互式 shell(用 brush bash)
omp sshSSH 主机管理
omp stats本地用量 Dashboard
omp update检查更新
omp acpAgent Client Protocol 模式(Zed 集成)
omp completions <shell>生成 shell 补全脚本

5.8 嵌入式入口(v17 四种 wrapper) #

同一个引擎,v17 提供了四种 wrapper:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 1. 交互式 TUI(默认)
omp

# 2. 单次 prompt 后退出
omp -p "list .ts files"

# 3. RPC 模式(NDJSON over stdio)
omp --mode rpc
# 外部进程通过 NDJSON frames 与 omp 通信
# --mode rpc-ui 加 extension_ui_request 支持

# 4. ACP 模式(编辑器协议)
omp acp
# 在 Zed 等支持 ACP 的编辑器里跑同一个 agent

Node/TypeScript 嵌入 SDK:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
import {
  ModelRegistry, SessionManager,
  createAgentSession, discoverAuthStorage,
} from "@oh-my-pi/pi-coding-agent";

const auth = await discoverAuthStorage();
const models = new ModelRegistry(auth);
await models.refresh();

const { session } = await createAgentSession({
  sessionManager: SessionManager.inMemory(),
  authStorage: auth, modelRegistry: models,
});
await session.prompt("list .ts files");

总结 #

oh-my-pi 的核心价值不是「又一个终端聊天机器人」,而是一套让 AI 真正在终端里完成多步骤工程任务的工具链——Hashline 让编辑精准,LSP + DAP 让 AI 看到类型和诊断,Subagent 让大项目不再撑爆上下文,mnemopi 让知识跨会话积累,TTSR 让规则零成本注入,Collab 让协作者实时加入同一个 session,GitHub-as-FS 让 agent 不需要学一组 gh_* 工具。

v17 这一代最关键的升级

  • 双内核 eval + tool-calling bridge——一个 cell 里 Python 读数据、JS 画图表,内核还能回调 agent 工具
  • DAP 调试器——attach lldb-dap / dlv / debugpy,终端里也能像 IDE 一样 step
  • Advisor 第二模型——便宜 reviewer 实时抓 doer 的细节漏洞
  • /review P0-P3——结构化审查,confidence + verdict 一目了然
  • Collab AES-256-GCM 端到端——协作链接 + QR 码,relay 看不到内容
  • GitHub-as-FS——read pr://456/diff/2 一把梭,agent 不学新工具
  • Windows 原生 + 100k 行 Rust——不用 WSL,跨平台性能一致

适合什么人:

  • 需要处理中大型项目的开发者(LSP + DAP + Subagent 的价值最大)
  • 追求 AI 编程效率的终端重度用户
  • 希望一套配置多工具复用的多 Agent 用户
  • 需要跨平台一致体验的 macOS/Linux/Windows 团队

不适合什么场景:

  • 只需要简单代码补全(用 Copilot 更轻量)
  • 需要图形界面操作的场景(omp 是纯终端工具)

omp 是开源项目(MIT 协议),代码在 GitHub,官方站 omp.sh,Discord 社区活跃。如果你在寻找一个「不只是聊天」的终端 AI Agent,值得一试。