首页 资讯 下载 教程 Skills 社群

OpenClaw Lobster 工作流引擎:确定性管道与审批门控

什么是 Lobster

Lobster 是 OpenClaw 的工作流 Shell,可以将多个工具调用合并为一次确定性执行,并在关键节点插入人工审批门控。

与常规的 AI 对话式工具调用不同,Lobster 的核心优势:

  • 确定性:固定的执行管道,不依赖 LLM 逐步决策
  • 可审批:关键操作前暂停等待人工确认
  • 可恢复:审批后通过 resume token 继续执行
  • 低成本:一次调用替代多次 LLM 往返,节省 Token

启用 Lobster

Lobster 是可选插件工具,需要在配置中显式启用:

{
  "tools": {
    "alsoAllow": ["lobster"]
  }
}

也可以在特定 Agent 配置中单独启用。

内联管道模式

最简单的使用方式是通过 JSON 请求发送内联管道:

{
  "action": "run",
  "pipeline": "inbox list --json | inbox categorize --json",
  "timeoutMs": 30000
}

管道使用 | 连接多个命令,前一步的输出自动作为后一步的输入。

添加审批门控

在管道中插入 approve 命令:

{
  "action": "run",
  "pipeline": "inbox list --json | inbox categorize --json | approve --prompt '确认发送分类结果?'",
  "timeoutMs": 30000
}

执行到 approve 时会暂停,返回 needs_approval 状态和 resume token。

工作流文件模式

对于复杂流程,使用 .lobster 工作流文件(YAML 格式):

# workflows/inbox-triage.lobster
name: inbox-triage
args:
  maxEmails:
    default: 20
    description: "最大处理邮件数"
env:
  INBOX_FOLDER: "INBOX"

steps:
  - id: collect
    command: inbox list --json --limit $maxEmails

  - id: categorize
    command: inbox categorize --json
    stdin: $collect.stdout

  - id: review
    approval: required
    prompt: "以下邮件将被自动处理,请确认"

  - id: execute
    command: inbox process --json
    stdin: $categorize.stdout
    condition: $review.approved

工作流文件特性

特性 说明
args 带默认值的参数定义
env 环境变量注入
stdin 引用前序步骤输出:$step.stdout$step.json
condition / when 条件执行
approval 人工审批门控

运行工作流文件

{
  "action": "run",
  "pipeline": "workflows/inbox-triage.lobster",
  "argsJson": {
    "maxEmails": 50
  },
  "timeoutMs": 60000
}

恢复暂停的工作流

当工作流在审批处暂停时,使用 resume 操作继续:

{
  "action": "resume",
  "token": "<resume-token-from-pause>",
  "approve": true
}

设置 "approve": false 则拒绝并取消工作流。

返回值结构

Lobster 返回 JSON 信封,包含三种状态:

// 成功完成
{ "status": "ok", "content": "...", "details": {...} }

// 等待审批
{ "status": "needs_approval", "requiresApproval": { "resumeToken": "..." } }

// 已取消
{ "status": "cancelled" }

结合 LLM Task

通过 llm-task 插件在工作流中使用 LLM 能力:

steps:
  - id: classify
    tool: llm-task
    action: json
    args:
      prompt: "对以下邮件内容进行意图分类"
      schema:
        type: object
        properties:
          intent:
            type: string
            enum: ["urgent", "normal", "spam"]
          summary:
            type: string
    stdin: $collect.stdout

这在保持确定性的同时,允许在特定步骤使用 AI 分类和摘要能力。

安全机制

Lobster 内置多层安全保护:

  • 超时控制:默认 20 秒超时(timeoutMs
  • 输出限制:默认最大 512KB 输出(maxStdoutBytes
  • 沙箱限制:沙箱上下文中自动禁用
  • 工作目录约束cwd 限制在网关目录内
  • 无外部进程:在网关进程内运行,不生成子进程

实际应用:邮件分拣工作流

将多次 AI 对话交互压缩为一次 Lobster 调用:

name: email-triage
steps:
  - id: fetch
    command: gmail search --json --query "is:unread" --limit 30

  - id: classify
    tool: llm-task
    action: json
    args:
      prompt: "分类邮件:urgent/normal/spam"
      schema: { type: array, items: { type: object } }
    stdin: $fetch.stdout

  - id: preview
    approval: required
    prompt: "以下邮件将被自动处理"

  - id: archive_spam
    command: gmail archive --json --label spam
    stdin: $classify.json
    when: $preview.approved

与其他工具协作

  • OpenProse:用于多 Agent 编排,在 Lobster 确定性执行之前协调
  • Task Flow:流程级编排,Lobster 适合单个流程内的步骤管理
  • Cron:定时触发 Lobster 工作流,实现定时自动化

注意事项

  • Lobster 是可选插件,需显式启用
  • 不管理 OAuth 认证(委托给 OpenClaw 工具层)
  • 工作流文件建议放在 workflows/ 目录下统一管理
  • 复杂场景建议拆分为多个小工作流,通过 Task Flow 编排