是怎么识别的,原理是什么
OMC 的关键词识别,原理其实很朴素——不是模型智能判断,是静态映射表 +
我自己做字符串匹配。拆开说:
1. 触发表存在哪里
在 ~/.claude/CLAUDE.md 里有一段固定内容:
Keyword triggers: "autopilot"→autopilot, "ralph"→ralph, "ulw"→ultrawork,
"ccg"→ccg, "ralplan"→ralplan, "deep interview"→deep-interview,
"deslop"/"anti-slop"→ai-slop-cleaner, "deep-analyze"→分析模式,
"tdd"→TDD模式, "deepsearch"→代码库搜索, "ultrathink"→深度推理,
"cancelomc"→cancel
这段内容在每次会话开始时就被加载进我的系统提示词(CLAUDE.md
是"用户全局私有指令",每个项目会话都会带上)。所以我不是运行时去查表,而是这张表
本身就"长在"我的上下文里。
2. 匹配靠谁做
靠我(模型)自己在读用户消息时做语义/字面匹配——本质上和我识别"用户想要我读文件"
还是"用户想要我改代码"是同一种能力,没有额外的规则引擎或正则在背后跑。所以:
- 精确关键词("ralph"、"ulw")命中率高,因为词本身罕见、无歧义。
- 但这也意味着触发不是 100% 确定性的——它依赖我"注意到"了关键词并决定要响应,理论
上如果关键词出现在无关上下文里(比如讨论"ralph
是希腊神话人物"),我应该不触发,但这个判断本身是我推理出来的,不是硬编码开关。
3. 触发后发生了什么
一旦我判定要触发,会调用 Skill 工具,传入 skill:
"<name>"。这一步才是确定性的——Skill 工具接到调用后,会去加载该 skill
目录下的定义文件(类似你刚才看到的 omc-reference
那种),把里面的详细指令注入到我的下一轮上下文,然后我按那份指令继续执行。
你刚才那句里的 "ultrathink" 就是个例子:它没有走 Skill 工具(deep reasoning
不是一个独立 skill
文件,而是直接改变我的推理力度),但系统在检测到这个词后,往对话里插了一条
<system-reminder>:
<system-reminder>:
The user included the keyword "ultrathink", requesting deeper reasoning on this
turn.
这条提醒不是我自己加的,是harness(运行时环境)在处理你的消息时,用更底层、确定
性的字符串检测做的,然后作为系统提醒注入进来——这一层和 CLAUDE.md
里那张"软性"触发表是两套机制:
-CLAUDE.md表:软规则,靠我读到后自己决定要不要调用 Skill 工具。
-Harness检测(如 ultrathink、PreToolUse/PostToolUse hook 提示):硬编码在外部
程序里,命中就无条件注入提醒,我没有选择权,只能"知晓并配合"。
一句话总结:Skill名的触发靠我基于CLAUDE.md里的表做语义识别,是"软"匹配;而像
ultrathink这种影响推理强度的触发,是harness
层做的确定性字符串检测,是"硬"匹配——两者共同构成你看到的"说一个词就变身"的效果。