# Open Dynamic Workflows：让 Claude Code 风格的工作流跨平台运行

> 一个零依赖的 TypeScript CLI 运行时，让原本只能在 Claude Code 内部运行的动态工作流脚本可以跨平台执行，支持 Codex、Gemini、Qwen、Kimi 等多种编码智能体 CLI。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-06-01T16:15:46.000Z
- 最近活动: 2026-06-01T16:21:35.841Z
- 热度: 161.9
- 关键词: 动态工作流, Claude Code, 多智能体编排, TypeScript, CLI工具, Codex, Gemini, 跨平台, 工作流运行时
- 页面链接: https://www.zingnex.cn/forum/thread/open-dynamic-workflows-claude-code
- Canonical: https://www.zingnex.cn/forum/thread/open-dynamic-workflows-claude-code
- Markdown 来源: ingested_event

---

## 原作者与来源

- **原作者/维护者**: xz1220
- **来源平台**: GitHub
- **原始标题**: open-dynamic-workflows
- **原始链接**: https://github.com/xz1220/open-dynamic-workflows
- **发布时间**: 2026-06-01

## 问题背景：工作流的平台锁定困境

Claude Code 引入的动态工作流（dynamic workflows）功能让开发者可以用 JavaScript 脚本编排多个编码智能体，实现复杂的任务分解和并行处理。然而，这些工作流脚本只能在 Claude Code 的私有运行时中执行，这造成了严重的平台锁定问题。

当你花费精力编写了一个精巧的「深度研究」工作流——它会并行发起多个网络搜索、进行对抗性事实核查、最后合成一份带引用来源的报告——你却无法将这个工作流迁移到其他编码智能体上使用。这种碎片化阻碍了工作流的复用和生态发展。

## 项目概述：开放的工作流运行时

Open Dynamic Workflows（ODW）是一个 TypeScript / Node CLI 运行时，专门解决上述问题。它让原本只能在 Claude Code 内部运行的动态工作流脚本可以在任何编码智能体 CLI 上执行，包括 Codex、Claude Code、Gemini、Qwen、Kimi，甚至是自定义的 CLI。

### 核心特性

**真正的可移植性**: 同一份工作流脚本可以在不同智能体之间无缝切换，只需更换适配器配置。

**保持 Claude Code 方言**: 完全兼容 Claude Code 的工作流语法——`export const meta`、注入的 `agent` / `parallel` / `pipeline` / `phase` / `log` / `args` / `budget` 全局变量，支持顶层 `await` 和 `return`。

**脱离上下文，规模化运行**: 工作流计划在代码中定义，中间工作不会污染主会话上下文，可以并行启动数十个子智能体。

**可靠的结果传递**: 支持 JSON Schema 结构化输出，经过验证和重试机制，确保多阶段流水线可以可靠组合。

**后台运行与可观察性**: 每次运行都是一个独立的后台工作进程，拥有运行目录，支持 `status`、`logs --follow`、`result`、`pause` / `stop` 等命令。

**零运行时依赖**: 引擎基于纯异步 TypeScript，`parallel` 就是 `Promise.all`，工作流脚本保持纯 `.js` 格式。

## 技术架构：四层抽象设计

ODW 采用清晰的分层架构，将复杂性隔离在不同层级：

### 第一层：适配器层（Adapters）
`src/adapters/` 目录包含统一的 CLI 调用抽象，处理配置解析、占位符替换、运行器实现，以及内置的 Codex、Claude Code、Gemini、Qwen、Kimi 适配器。

### 第二层：桥接层（Bridge）
`src/bridge.ts` 将单个 `agent()` 调用转换为一次 CLI 运行，处理 schema 验证和重试逻辑。

### 第三层：调度层（Scheduler）
`src/scheduler.ts` 实现有界的异步并发控制，默认并发上限为 `min(16, cpus-2)`，同时设有单次运行的总智能体调用上限。

### 第四层：原语层（Primitives）
`src/primitives.ts` 和 `src/schema.ts` 提供注入到工作流脚本中的全局原语和数据契约。

### 加载器（Loader）：关键创新

Claude Code 的方言既不是普通的 ES 模块，也不是纯脚本——它同时包含顶层的 `export const meta`、顶层 `await`、顶层 `return`，以及注入全局变量的引用。

ODW 的加载器通过字符串/注释/正则感知的扫描提取 `meta`，剥离 `export`，将主体包装在一个异步函数中，该函数的参数就是原语——这样主体的 `return` 就变成了工作流的结果。

## 核心原语详解

ODW 提供七种核心原语，工作流脚本通过组合这些原语实现复杂逻辑：

| 原语 | 作用 |
|------|------|
| `agent(prompt, opts?)` | 在子任务上运行单个编码智能体，是唯一执行实际工作的动词 |
| `parallel(thunks)` | 批量并发运行并等待全部完成（屏障同步），失败的任务返回 `null` |
| `pipeline(items, ...stages)` | 将每个项目独立流经多个阶段（无屏障），每阶段接收 `(prev, item, index)` |
| `phase(title)` / `log(msg)` | 进度分组和进度日志输出 |
| `schema` (JSON Schema) | 为 `agent` 定义类型化输出契约，回复会被验证并重试直到符合模式 |
| `args` | 工作流的输入参数，原样注入 |
| `budget` | `{ total, spent(), remaining() }`，用于按 token 目标调整深度 |
| `workflow(ref, args?)` | 内联运行另一个工作流（一级嵌套，v1.5+） |

### 使用场景建议

**使用 `parallel` 的场景**: 当下一步需要整个批次的结果时（去重、统计、合成）。

**使用 `pipeline` 的场景**: 多阶段处理工作（默认模式）。

**重要原则**: 保持规约操作与顺序无关——基于「哪个智能体先完成」的分支会破坏可复现性。

## 快速上手

### 安装

**自包含二进制文件（推荐）**: 单个文件嵌入 Node 运行时和 ODW，无需 Node、npm、PATH 配置：

```bash
curl -fsSL https://raw.githubusercontent.com/xz1220/open-dynamic-workflows/main/scripts/install.sh | sh
```

**通过 npm 安装**: 需要 Node ≥20

```bash
npm i -g open-dynamic-workflows
```

### 编写工作流

创建一个 `fan-out-reduce.js` 文件：

```javascript
export const meta = {
  name: 'fan-out-reduce',
  description: '并行起草，然后合成最佳答案。',
}

const drafts = await parallel(
  [1, 2, 3, 4].map((i) => () => agent(`起草 #${i}: ${args.question}`)),
)

return await agent(
  '从这些草稿中合成单一最佳答案：\n\n' +
    drafts.filter(Boolean).join('\n\n---\n\n'),
)
```

### 运行工作流

```bash
odw run fan-out-reduce.js --wait --args '{"question": "设计一个速率限制器。"}'
```

这就是纯 JavaScript，使用与 Claude Code 相同的方言。旗舰示例 `examples/deep-research.js`（并行网络研究 → 对抗性事实核查 → 带引用的报告）就是这样的脚本。

## 观察与调试

ODW 提供完整的运行时观察能力：

```bash
odw run wf.js [--args JSON|@file] [--wait]   # 启动（后台）；--wait 阻塞并打印结果
odw status <id>          # 状态 + 智能体计数
odw logs <id> --follow   # 流式进度事件
odw result <id>          # 最终结果
odw pause|resume|stop <id>
odw list                 # 列出所有运行
```

每次运行在独立的工作进程中执行，并将所有内容持久化到运行目录，因此它超越了启动它的命令的生命周期，可以从任何地方观察。

## 配置适配器

通过 `odw.config.json` 文件配置不同智能体 CLI：

```json
{
  "defaultAdapter": "claude",
  "concurrency": 8,
  "adapters": {
    "my_wrapper": {
      "label": "My custom CLI",
      "command": ["my-agent", "--cwd", "{workspace}", "--prompt-file", "{prompt_file}"]
    }
  }
}
```

ODW 只通过 shell 调用本地命令，从不直接调用模型 API。

## 实际应用价值

### 跨团队协作
不同团队可以使用各自偏好的编码智能体，但共享同一套工作流脚本。

### 工作流市场
工作流脚本成为可移植的 artifacts，可以在社区中共享和复用。

### 自动化集成
可以在 CI/CD 流水线中调用 ODW 执行自动化工作流，无需人工介入。

### 渐进式迁移
从 Claude Code 迁移到其他智能体时，工作流投资得到保护。

## 结语：开放生态的关键拼图

Open Dynamic Workflows 填补了编码智能体生态中的一个关键空白——工作流的可移植性。它让 Claude Code 开创的动态工作流范式成为整个行业的通用能力，而不是某个平台的专有特性。

随着编码智能体的多样化发展，ODW 这样的抽象层将变得越来越重要。它不仅是一个技术工具，更是推动行业标准化和互操作性的重要力量。
