Install
openclaw skills install omc-omx-orchestratorClawHub Security found sensitive or high-impact capabilities. Review the scan results before using.
异步派发编码任务到 OMC (claude -p) 或 OMX (omx exec)。触发词:"用omc" "用omx" "派任务" "后台编码" "异步任务" "omc跑" "omx跑" "claude跑" "codex跑" "派发OMC" "派发OMX"。
openclaw skills install omc-omx-orchestratorclaude -p 需要 ANTHROPIC_API_KEY:Claude Code 的 -p/--print 管道模式依赖 API Key 认证,不支持 OAuth 交互登录。设置:export ANTHROPIC_API_KEY="sk-ant-..."claude CLI 已安装omx CLI 已安装| 指令 | 用途 | 示例 |
|---|---|---|
用 OMC <描述> | 用 Claude Code 后台执行任务 | /omc 修复 auth 模块的 token 过期 bug |
用 OMX <描述> | 用 Codex CLI 后台执行任务 | 用 OMX 给 UserService 补全单元测试 |
用 OMC <描述> -d <目录> | 指定工作目录 | /omc 重构 API 层 -d ~/projects/myapp |
用 OMC <描述> -m <模型> | 指定模型 | /omc 分析性能瓶颈 -m claude-opus-4-6 |
task-recovery.py list | 查看任务列表 | task-recovery.py list |
查询任务 <id> | 查看任务详情 | task-recovery.py show fix-auth |
匹配规则:消息匹配到 OMC/OMX 关键词即加载本技能,后续内容直接作为任务描述。 复杂任务自动写入 spec.md,简单任务直接嵌入命令行。
claude -p 和 omx exec 的 stdout/stderr 全部重定向到任务目录下的文件,不依赖主 Agent 的 stdout PIPEos.setsid 创建独立进程组,主 Agent 死亡不影响子进程task-recovery.py recover 还原状态~/.openclaw/workspace/tasks/
├── 2026-04-27-120000-fix-auth/ # 任务ID = 时间戳 + slug
│ ├── task.json # 元数据 + 状态(轻量,只有索引信息)
│ ├── spec.md # 完整任务描述(目标、上下文、约束、验收标准)
│ ├── result.txt # stdout 重定向(最终回答)
│ ├── log.txt # stderr 日志(hook 日志等)
│ └── exit_code # 完成时写入退出码
├── 2026-04-27-130000-add-tests/
│ └── ...
核心字段:id、engine、status、command、cwd、pid、started_at
状态流转:pending → running → completed / failed
重要约束:
cwd 必须是已验证存在的绝对路径,禁止 ~ 简写preflight_ok 标记 Step 0 预检结果sandbox_args 存储 OMX 额外参数详细字段定义和 autopilot 扩展字段见
references/task-schema.md
基础结构:# 任务 → ## 目标 → ## 项目上下文 → ## 详细需求 → ## 约束条件 → ## 验收标准
关键生成规则:
完整模板和复杂任务示例见
references/spec-template.md
在创建任何文件之前,必须验证以下 3 项:
import os, subprocess
cwd = os.path.expanduser(cwd_raw) # 展开 ~
# 检查 1:cwd 必须是存在的目录
if not os.path.isdir(cwd):
# ❌ 直接拒绝,不要猜路径,不要降级到 ~
raise PreflightError(
f"工作目录不存在: {cwd}\n"
f"请用 -d 指定正确路径。常见路径:\n"
f" ~/.openclaw/workspace (工作目录)\n"
f" 项目目录\n"
f" 当前目录: {os.getcwd()}"
)
# 检查 2:CLI 工具必须可用
if engine == "omc":
result = subprocess.run(["which", "claude"], capture_output=True, text=True)
if result.returncode != 0:
raise PreflightError("claude 命令不可用,请检查 PATH")
elif engine == "omx":
result = subprocess.run(["which", "omx"], capture_output=True, text=True)
if result.returncode != 0:
raise PreflightError("omx 命令不可用,请检查 PATH")
# 检查 3:OMX 需要 git repo 或 --skip-git-repo-check
needs_skip_git = False
if engine == "omx":
git_dir = subprocess.run(
["git", "-C", cwd, "rev-parse", "--git-dir"],
capture_output=True, text=True
)
if git_dir.returncode != 0:
needs_skip_git = True # 自动追加 --skip-git-repo-check
预检失败 → 立即告知用户具体原因,不创建任务目录。
生成 task_id(时间戳+slug),创建目录,初始化 task.json(status=pending)。
使用模板生成完整任务描述,包含目标、上下文、需求、约束、验收标准。
统一模式:cat spec.md | claude -p - 或 cat spec.md | omx exec ... -
核心思路:不再用 cat spec.md | claude -p - 裸文本管道,改用 Claude 原生 stream-json 协议——相当于 Chrome CDP 对 Chrome 的关系。
复杂任务:python3 -c "生成JSONL" | claude -p --input-format stream-json --output-format stream-json --verbose --tools default - > result.txt 2> log.txt ; echo $? > exit_code
简单任务:直接内嵌任务描述到 JSONL 命令行。
stream-json 协议说明:
- stdin:JSONL 格式,每行一个
{"type":"user","message":{"role":"user","content":"..."}}- stdout:JSONL 事件流(
system→assistant→ ... →result),最终结果取最后一个type:"result"的.result字段--include-partial-messages:实时输出 partial 块,用于进度追踪--verbose:触发完整 OMC 编排加载(agents/skills/hooks/MCP)
解析 OMC JSONL 输出的正确方法:result.txt 是多行 JSONL,不要直接当纯文本读。提取最终结果的代码:
import json
with open("result.txt") as f:
for line in f:
event = json.loads(line.strip())
if event.get("type") == "result":
final = event.get("result", "")
break
# final 是纯文本结果(去掉 JSONL 包装)
⚠️ 常见错误:cat spec.md | claude -p - < /dev/null 会冲突——两个输入源(stdin 管道 + 重定向)。正确做法是用 python3 生成 JSONL 再管道给 claude(见上面命令模板),或用 cat spec.md | claude -p -(不用 stream-json 时)。
# OMX 支持 -C 参数指定工作目录
# ⚠️ 不用 --full-auto(sandbox 会阻止文件写入和 CLI 调用)
# 用 --dangerously-bypass-approvals-and-sandbox 或 --madmax 关闭沙箱
# 自动追加 --skip-git-repo-check(如果非 git repo)
cat ~/.openclaw/workspace/tasks/TASK_ID/spec.md | \
omx exec --dangerously-bypass-approvals-and-sandbox \
-o ~/.openclaw/workspace/tasks/TASK_ID/result.txt \
-C /absolute/path/to/project \
{sandbox_args} - \
# 注意:不要加 -m 指定模型,OMX 默认使用 GPT 最新模型
2> ~/.openclaw/workspace/tasks/TASK_ID/log.txt ; \
OMX_EXIT=$? ; \
echo $OMX_EXIT > ~/.openclaw/workspace/tasks/TASK_ID/exit_code ; \
# 清理 OMX 遗留的 tmux session(防止进程泄漏) \
tmux ls 2>/dev/null | grep 'omx-.*-detached-' | cut -d: -f1 | xargs -r tmux kill-session -t 2>/dev/null ; \
exit $OMX_EXIT
沙箱策略:OMX 不使用
--full-auto(sandbox 模式会阻止实际操作本机文件和 CLI)。始终使用--dangerously-bypass-approvals-and-sandbox(别名--madmax)关闭沙箱,因为任务由用户明确派发,在用户本机执行。 sandbox_args:非 git 目录自动追加--skip-git-repo-check。
简单任务(一句话描述 < 200 字符)可以直接写命令参数,不需要 spec.md。 复杂任务(多行需求、有约束/验收标准)必须用 spec.md。
可用参数:
--input-format stream-json --output-format stream-json --verbose(双向流模式,必须) --include-partial-messages(复杂任务推荐) --tools default --model claude-opus-4-6 --max-turns N --max-budget-usd X --effort high(提高推理深度) --agent <name>(指定角色 agent)--dangerously-bypass-approvals-and-sandbox(必须,关闭沙箱) --skip-git-repo-check(非 git 目录) -c key=value(覆盖配置,如 -c model="gpt-5.5") --json(JSONL 输出) --ephemeral(不持久化会话)⚠️ OMX 不要指定 -m 模型参数! Codex 默认使用 GPT 最新模型,无需也不应覆盖。指定外部模型名(如 -m o3、-m claude-sonnet-4)会报 400:The 'xxx' model is not supported when using Codex with a ChatGPT account.
更新 task.json(status=running,记录 command),启动后台进程,记录 PID。
通知任务已派发,包含引擎、ID、描述、工作目录、预计耗时。
快速恢复:python3 ~/.openclaw/workspace/skills/omc-omx-orchestrator/scripts/task-recovery.py recover
恢复逻辑:检查 exit_code 文件 → 检查 PID 存活 → 更新状态
建议 cron 每 5 分钟执行,修复 notify 丢失问题。
详细恢复算法、手动操作和自动化部署见
references/recovery-guide.md
用户问 "任务进展如何?" 时:
# 方法1:读 task.json
cat ~/.openclaw/workspace/tasks/TASK_ID/task.json
# 方法2:检查 exit_code
cat ~/.openclaw/workspace/tasks/TASK_ID/exit_code 2>/dev/null || echo "still running"
# 方法3:读 result.txt 的已有内容(可能还在写)
tail -20 ~/.openclaw/workspace/tasks/TASK_ID/result.txt
# 方法4:检查 PID
kill -0 PID 2>/dev/null && echo "alive" || echo "dead"
对于复杂系统重构任务,使用 OMC(审计)→ 数据收集 → OMX(重构)的两阶段模式:
claude -p 审计任务,获取结构化报告omx exec 直接修改文件| 场景 | 引擎 | 命令 |
|---|---|---|
| 通用编码任务 | OMC | claude -p --input-format stream-json --output-format stream-json --verbose |
| 研究/分析/文档创建(OMC 插件限制工具) | OMC text | `cat spec.md |
| TypeScript/Node 生态 | OMX | omx exec --dangerously-bypass-approvals-and-sandbox |
| 需要深度推理 | OMC | 同上, --model claude-opus-4-6 |
| 快速执行 | OMX | omx exec --dangerously-bypass-approvals-and-sandbox |
| 用户指定 | 按指定 | — |
| 轻量问答(非代码) | OMX ask | omx ask "问题" -o result.txt |
| 并行多任务 | OMX team | omx team --yolo(需 tmux) |
omx ask: 轻量问答,调用本地 claude 或 gemini CLI,输出 artifact 文件。适合非代码类任务(分析、总结、翻译)
omx ask "分析这段代码的性能瓶颈" -o analysis.md
omx team: 在 tmux 中并行派发多个 worker pane。每个 worker 独立执行,适合可以拆分的并行任务
omx team --yolo 启动 yolo 模式并行执行omx explore: 只读探索模式,适合代码库浏览和理解omx resume: 恢复之前的交互式会话适用于复杂的代码审计+重构任务(如系统重构、多文件联动修改):
Round 1: OMC 审计(只读)
Round 2(可选): OMC 补充审计
Round 3: OMX 重构(写入)
--skip-git-repo-check(当前目录不是 git repo)关键经验:
OMC 在分析复杂任务时会大量调用 tool call 读文件,容易导致上下文窗口爆满。
症状:API Error: The model has reached its context window limit.
| 维度 | stream-json | text |
|---|---|---|
| 命令 | --input-format stream-json --output-format stream-json --verbose | cat spec.md | claude -p --output-format text - |
| 输出格式 | JSONL 事件流(type: system/assistant/result) | 纯文本 |
| 上下文消耗 | 高(JSONL 元数据占额外空间,易爆) | 低(只传文本内容,不易爆) |
| max-turns | 必须设 30-50 | 不需要设,让 agent 跑完 |
| 解析方式 | 需解析 JSONL 取最后一个 type:"result" 事件 | 直接读取 result.txt |
| 错误追踪 | stderr 有日志,支持 partial messages | 失败时只输出 "Error: Reached max turns (N)" |
| 适用场景 | 需要结构化输出、进度追踪、写文件/执行命令 | 简单执行、省 token、纯分析 |
为什么 stream-json 更容易爆?JSONL 的每条事件都带 type、message wrapper、tool_use/tool_result 结构,同样 25 轮 tool call 下,stream-json 的元数据可能占总上下文的 15-25%。text 模式只传文本本身,没有结构化包装。
--output-format stream-json 必须同时加 --verbose,否则静默失败无输出--input-format stream-json 必须配合 --output-format stream-json,不能混用--max-turns N 每轮 tool call 算 1 turn,30-50 轮适合轻中型任务;复杂任务应切换 text 模式(不设 max-turns)"Error: Reached max turns (N)" 这一行,log.txt 为空No available channel for model o3),备选方案:不指定 -m 或用 OMC (claude) 替代stream-json 模式(轻中型任务 + 需要结构化输出)
JSONL 元数据会加速上下文消耗,必须设 --max-turns 30-50 防爆。必须同时加 --verbose 否则静默失败。适合:需要结构化 JSONL 输出、进度追踪、中等复杂度任务。
text 模式(复杂任务)
纯文本无 JSONL 膨胀,上下文不会轻易爆掉,不需要设 --max-turns,让 agent 跑完为止。适合:需要大量思考和工具调用的复杂任务。⚠️ 注意:--max-turns 1-3 的 text 模式是坑——OMC 内部 prompt 处理也消耗轮次,3 轮以内根本来不及输出。
预收集数据(两种模式通用,最推荐的优化)
编排器先读相关文件,把关键信息嵌入 spec.md,减少 agent 自己读文件的需求。spec 里传数据比让 agent 自己发现数据可靠 10 倍。实测:3.2KB spec → 5.1KB 结构化审计报告。
⚠️ OMC 插件模式下:数据嵌入是必须项,非可选。oh-my-claudecode 的 hooks/plugins 会限制 claude -p 的工具权限,导致 agent 只有 MCP 认证工具和 Context7,无法调用 Read/Bash 读取本地文件。在这种场景下,spec.md 必须自包含所有数据。可以用 --bare 参数绕过 OMC 限制获得完整工具集,但会丢失 OMC 的全部 agent 编排、skills、hooks 能力,需要按场景权衡。
# 轻中型任务(stream-json + max-turns 限制)
python3 -c "import json; print(json.dumps({'type':'user','message':{'role':'user','content':open('spec.md').read()}}))" | \
claude -p --input-format stream-json --output-format stream-json --verbose \
--model claude-opus-4-6 --tools default --max-turns 30 - \
> result.txt 2> log.txt ; echo $? > exit_code
# 复杂任务(text 模式,不设 max-turns)
cat spec.md | claude -p --output-format text --model claude-sonnet-4-20250514 -
| 任务类型 | 推荐模式 | 说明 |
|---|---|---|
| 轻量分析/审计(数据全在 spec) | text,不限轮次 | 让 agent 充分推理 |
| 中等任务(读 1-5 文件) | stream-json + max-turns 30 | 结构化输出 |
| 复杂任务(大量文件/工具调用) | text,不限轮次 | 不用担心上下文爆 |
| 需要结构化 JSONL 输出 | stream-json + max-turns 30-50 | 必须配 --verbose |
OMC/OMX 交互式会话中可通过 $keyword 触发内置 skill:
Tier-0 工作流(OMX 官方推荐链路):
| Keyword | 用途 | 说明 |
|---|---|---|
$deep-interview | 需求澄清 | 苏格拉底式问答,消除歧义 |
$ralplan | 共识规划 | Planner/Architect/Critic 三方迭代直到一致 |
$ralph | 持久完成 | 循环执行直到 architect 验证通过 |
$team | 并行执行 | tmux 多 worker 协调 |
$autopilot | 全自动端到端 | Expansion→Planning→Execution→QA→Validation 6阶段 |
执行辅助:
ultrawork / ulw / uw — 并行执行引擎ultrathink / think — 深度推理ultraqa — QA 循环修复cancelomc — 取消当前执行模式⚠️ $keyword 仅在交互式会话中可用。omx exec 非交互管道模式下,keyword 不触发 skill 系统。如需在 omx exec 中使用,需将 keyword 作为 prompt 内容传入,但效果不如交互式会话。
# 交互式:keyword 直接生效
omx --madmax --high
# 会话内输入: $autopilot "构建 REST API"
# 非交互:keyword 作为 prompt 传入(效果受限)
echo '$autopilot 构建REST API' | omx exec --dangerously-bypass-approvals-and-sandbox -C . -
OMX 内置 Skill 目录(本机 42 个 skill,27 active):autopilot、ralph、ultrawork、team、plan、ralplan、deep-interview、autoresearch、pipeline、ultraqa、code-review、security-review 等。通过 omx list 查看。
--agent <name> 可选值(核心角色):
executor(通用执行)| architect(架构设计)| debugger(调试排查)| code-reviewer(代码审查)| planner(任务规划)| test-engineer(测试编写)| security-reviewer(安全审计)| analyst(分析评估)| critic(批判审查)| designer(UI/前端设计)| writer(文档编写)| verifier(验证确认)| build-fixer(构建修复)| git-master(Git 操作)| researcher(研究调研)
本机安装 219 个 agent(含学术/设计/工程/金融/法务等领域),完整列表见
~/.claude/agents/。--effort控制推理深度:low/medium/high/max。未指定时继承父会话设置。
| 问题 | 解决方案 |
|---|---|
| 任务跑了很久没结果 | cat task.json 查状态 + kill -0 PID 查存活 |
| exit_code 文件为空/不存在 | 进程可能还在跑,或被 SIGKILL |
| result.txt 为空 | 检查 log.txt,可能是 claude/codex 启动失败 |
| OMC agent 说只有 MCP 工具,没有 Read/Bash 权限 | oh-my-claudecode 插件限制工具。OMC hooks 激活时,claude -p 可能只暴露 MCP 认证和 Context7 等有限工具,无法读取本地文件。解决方法:把所有需要的数据直接嵌入 spec.md(不要依赖 agent 自己读文件),再重新派发。如果用 --bare 可绕过限制获得完整工具集,但会丢失 OMC 的全部 agent/skills/hooks 能力。 |
Error: No such file or directory (os error 2) | 工作目录不存在。检查 task.json 的 cwd 是否正确,常见错误是用了 ~/projects/your-project 而非 ~/.openclaw/workspace |
Not inside a trusted directory | OMX 要求 git repo。在 task.json 的 sandbox_args 加 --skip-git-repo-check |
| task.json 状态卡在 running 但已失败 | exit_code 已写入但 task.json 未更新。运行 task-recovery.py recover 或手动修正 |
| 重启后任务丢失 | 运行 task-recovery.py recover |
| OMX tmux session 泄漏 | 运行 tmux ls | grep omx- | xargs -r tmux kill-session -t 手动清理。新版本命令已自动清理 |
| 需要终止任务 | kill PID + 手动更新 task.json status=failed |
claude -p 找不到 | 检查 PATH,确保 which claude 有输出 |
omx exec 找不到 | 检查 PATH,确保 which omx 有输出 |
独立技能
autopilot实现了完整的 PBV 循环编排(最多 5 轮自动收敛)。 触发:autopilot <描述>依赖:本技能提供 OMC/OMX 派发能力,autopilot 负责循环控制和验证。 autopilot 定义了plan.md和verify_report.md的完整格式(详见其references/)。
以下是 PBV 循环的核心格式摘要(完整版见 autopilot 技能):
plan.md 核心结构(OMC 输出):
# Plan: {task description}
> Round: {round} | Task: {task_id}
## 任务概述 / ## 执行步骤 / ## 文件清单 / ## 风险点 / ## 完成标准
verify_report.md 核心结构(编排器输出):
# Verify Report - Round {round}
> Task: {task_id} | Status: PASSED/FAILED
## 总结 / ## 验证详情 / ## 问题汇总(P0/P1) / ## 建议修复方向
退出条件:✅ 通过 / 🛑 5轮上限 / 🛑 连续2轮同错 / 🛑 连续2轮无进展
推荐 cron 配置:
task-recovery.py recover(修复状态不一致)task-recovery.py cleanup --days 7(清理过期任务)完整 cron 配置和清理策略见
references/recovery-guide.md
格式:用 OMC <描述> [-d <目录>] [-m <模型>] 或 用 OMX <描述> [-d <目录>]
解析步骤:引擎 → 工作目录(-d) → 模型(-m) → 任务描述 → 创建 task.json → 后台执行
任务查询:task-recovery.py list 列表,查询任务 <id> 详情
> result.txt 2> log.txt ; echo $? > exit_code< /dev/null——关闭 stdin,防止 claude/codex 卡在读 stdin 等待输入spec.md,管道 cat spec.md | claude -p -