oh-my-agent 七天连发五个大版本:oma-security 取代 deepsec

oh-my-agent 五版重构:砍兼容、收状态、加审计,升级需显式迁移。
oh-my-agent 在七天内从 15.10.0 连推到 20.0.0,用 81 次提交、840 个文件、净增约 3.8 万行完成一次结构性重构,而非兼容式小修。核心变化有三:安全模块 oma-deepsec 改名 oma-security、命令 /deepsec 变 /security 且不留别名,并要求漏洞确认前必须独立验证;OMA_HOME 统一到全局数据家目录,旧路径不再作为运行时回退,必须执行 oma state migrate --runtime;AgentMemory 按项目和 profile 隔离,Agent 决策被记录为可复核的状态事件。此外提交钩子通过 .githooks/commit-msg.d/ 扩展且 oma 不覆盖用户配置,插件包共享资源树砍掉 471 个重复文件,文档改为源码生成并带 --check 校验。

七天,五个大版本,从 15.10.0 一路推到 20.0.0。oh-my-agent 这波更新没有走兼容层路线,而是直接把旧路径砍掉。官方数据是 81 次提交、840 个文件、+70,280 行 / -32,120 行,光 AgentMemory 重做就跑了 1,095 个测试。这不是小修小补,是一次带迁移成本的结构性重构。
oma-security 取代 deepsec,且不留别名
最值得关注的变化是安全模块改名。oma-deepsec 变成 oma-security,斜杠命令 /deepsec 变成 /security,而且没有任何兼容别名——旧写法直接失效。
新模块的定位比旧版更宽:它把源码、skill、MCP 和受限 web 运行时的工作路由到目标专用引擎,保留引擎的取证证据,并要求在确认漏洞或触发 CI 门禁之前必须经过独立验证。Deepsec 仍是默认的源码扫描引擎。整个 skill 附带 11 个资源文件,其中包括一份 408 行的 findings 契约。
这个设计释放的信号很明确:安全扫描的"确认"动作不再是单引擎自说自话,而是要有独立于检测环节的验证。对用 oma 做 CI 门禁的团队来说,漏报和误报的判定逻辑都跟着变了。
一个全局数据家目录,迁移是复制优先
第二个结构性变化是数据布局。OMA_HOME 现在统一指向全局数据家目录(默认 ~/.oma),定义、状态、调度和备份全部收拢到这里。
迁移策略是复制优先,带冲突检查和运行中状态的检查。关键在于:旧路径不再作为运行时的回退读取。这意味着如果你的项目本地还有历史状态,升级后运行时不会再自动捡起来,必须显式执行 oma state migrate --runtime。
这类"一刀切"在工具链里风险不低——多项目并行、CI 缓存、开发者换机器都会踩坑。但从长期看,把分散状态收敛到单一家目录,确实能减少"为什么我本地能跑 CI 不能跑"这类玄学问题。
AgentMemory 隔离与可验证的 Agent 决策
AgentMemory 的写入、召回、重试和导入现在都按原始项目和 profile 做作用域隔离,共享服务器返回的响应会按归属过滤。安装和更新会自动准备默认的 AgentMemory provider,除非项目明确选择退出或改用其他 provider。
另一条容易被忽略但影响很大的改动:Agent 的决策被记录为状态事件(b4d76a71),一次运行里的选择事后可以复核。配合安全模块的独立验证要求,可以看出 oma 在往"可审计的 agent 编排"方向走,而不是只强调自动化程度。
MCP(Model Context Protocol)在此处指 oma 路由工作负载的三类目标之一,与源码、skill 并列。MCP 是一套让 AI 应用以标准化方式连接外部工具与数据源的协议,Agent 通过它调用被封装为 server 的能力。在 oma-security 的工作流里,扫描目标会被路由到对应的专用引擎,MCP 这一路意味着安全审查的对象不只是静态文件,还包括运行期通过 MCP 接入的外部服务。这也解释了为什么新模块强调"受限 web 运行时"——当 Agent 能主动发起网络或工具调用时,攻击面比纯源码扫描更大,因此需要在检测之外再加一层独立验证,才能确认漏洞真实存在、而不是工具链自身产生的噪声。
提交钩子可扩展,oma 不再覆盖你的配置
托管里的 commit-msg 钩子现在会按文件名顺序执行 .githooks/commit-msg.d/ 下的每个可执行文件,任一非零退出即拒绝提交。
真正的亮点是:oma 从不写入那个目录。所以一次 commitlint 调用能在 oma update 之后存活下来。这解决的是工具链里很典型的一类痛点——自动更新的工具把你精心配置的钩子覆盖掉。oma 把扩展点让给用户,自己只保留调度权。
oma-dev-workflow 还带来了一组工具链 profile:Python、JS/TS、Dart/Flutter、Dockerfile,以及本地 commitlint,并附带复用项目验证任务的指引。
Git 的 commit-msg 钩子是在提交信息写入后、提交真正落库前触发的本地脚本,常用于校验信息格式。.githooks/commit-msg.d/ 这种"目录 + 按文件名顺序执行"的模式是 Unix 配置管理的常见惯例:把可扩展点约定为一个目录,任何按命名规则放入的可执行文件都会被依次调用,任一返回非零即中止。这样用户和第三方工具就能各自投放规则互不干扰。oma 承诺从不写入该目录,实质上把钩子内容的所有权完全交给使用者,自己只负责按序调度,这也是它能与 commitlint 这类外部校验器长期共存、而不被 oma update 冲掉的根本原因。
修掉的坑:JSON 输出、调度同步与钩子去重
修复项里有几个值得单拎出来说:
oma retro --json之前在 JSON 前面会打印 banner 和 spinner。对做脚本解析的人来说,这是直接坏掉输出格式的 bug,现在会输出单一合法文档,空窗口也适用。schedule sync在 manifest 行缺必填字段时会崩溃,结果所有健康任务一起变 stale。现在畸形行会被丢弃并上报,schedule list会点名它们。- 并发钩子去重可能让竞态发布者刚拿到的 claim 过期。修复方式是读取后重新核对时钟,并只在 TTL 内容忍时钟回拨。
- 孤儿清理不再碰 AgentMemory、Serena maintenance 这类内部服务,范围限制在 agent 调度命名空间。
design工作流路由现在必须有视觉目标,所以 "API design" 不会再把 design 工作流误触发。
另外,帮助信息里 --older-than 默认值曾显示成 90ds 这种单位重复的怪值,独立 skill 安装现在会带上它引用的共享指南(#866),固定版本的本地 Serena 桥接条目会被修复且保留用户环境和服务器选项。
瘦身与文档:插件包砍掉 471 个重复文件
体积优化方面,完整插件包现在共享一份包级资源树,直接砍掉 471 个重复文件。代价是根插件 skill 依赖那棵共享树,所以建议用 OMA preset 安装,而不是走 npx skills 或 APM。
命令面也清理了一遍:内部入口从 oma describe 和帮助里隐藏,但仍然可运行;25 个此前没有描述的命令组补上了描述;skills matrix 改名 oma skill matrix,复数写法会被拒绝。
文档改为从源码生成:CLI registry 由 oma describe 渲染,skill 目录由 SKILL.md frontmatter 渲染,两者都有 --check 模式来报告过时块。文档站补了路由、ultrawork、ralph 和配置解析的 mermaid 图,以及决策表和词汇表,11 个语言版本和 12 份 README 翻译也同步了。
有一处"撤回式"修正值得一提:ralph judge 现在被描述为 prompted,而不是 independent,因为没有任何东西在检查 spawn。这类主动纠正自己文档里夸大表述的做法,在开源工具里并不多见。
skill 的 frontmatter 指 SKILL.md 文件顶部用 --- 包裹的元数据块,通常声明 skill 名称、描述、版本与依赖等信息,类似静态站点生成器里的 YAML front matter。oma 让 skill 目录直接由这份 frontmatter 渲染,意味着目录页与 skill 定义共享同一数据源,不再需要人工维护第二份清单。配合 CLI registry 由 oma describe 渲染的做法,文档的两个主要来源都变成可机器生成的产物,--check 模式则用来在 CI 里比对已提交文档与重新生成的结果,一旦源码变更而文档未同步就报出过时块,从而避免文档随版本漂移。
升级要做什么
三条动作,缺一不可:
- 执行
oma state migrate --runtime迁移项目本地状态,运行时读取器已经不再加载它。 - 把脚本和肌肉记忆里的
/deepsec换成/security。 - 把
oma skills matrix换成oma skill matrix。
安装方式不变:
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/first-fluke/oh-my-agent/main/cli/install.ps1 | iex
项目地址:https://github.com/first-fluke/oh-my-agent 。官方也预告了下一步方向:收紧 ralph judge,让 spawn 被验证而不只是被提示。
项目给自己的定位是"给编排多于提示的团队"。从这五个版本的动作看,这个说法不是口号——砍兼容、收状态、加审计,每一步都在往工程化编排的深水区走。代价是升级不再无脑丝滑,回报是运行行为更可预测、更可查。
相关推荐

Agent Harness 已死?Cursor 早期工程师拆解 AI 编程代理真实架构
Cursor 早期工程师 Jediah 拆解 agent harness 的真实架构:为何「harness 已死」只对了一半,数据飞轮如何让 harness 自我淘汰,以及 Grokbot、软件工厂和原语设计如何打开 agent 的新前沿。

Python访问者模式与更优替代方案详解
深入解析Python访问者模式及四种替代方案:方法模式、模式匹配、字典映射与functools.singledispatch单分派。从节点与操作的双轴矩阵出发,帮你根据变化频率选择最合适的解耦设计。

357天深度体验:Omarchy为何让我告别发行版跳槽
连续使用 Omarchy 357 天的深度体验:59 秒安装、开箱即用的音频与 GPU 支持、Quattro 版本 QuickShell 重写带来的配置迁移阵痛,以及它为何值得 Arch 用户尝试。