Lobster
OpenClaw 用の型付きワークフローランタイム、再開可能な承認ゲート付き。
Lobster はワークフローシェルであり、OpenClaw がマルチステップツールシーケンスを明示的な承認チェックポイントを持つ単一の決定論的操作として実行できるようにします。
フック
アシスタントは自分自身を管理するツールを構築できます。ワークフローをリクエストすると、30分後に CLI と単一呼び出しとして実行されるパイプラインが手に入ります。Lobster は欠けていた部分:決定論的パイプライン、明示的承認、再開可能な状態。
なぜ
今日、複雑なワークフローには多くの往復ツール呼び出しが必要です。各呼び出しはトークンを消費し、LLM はすべてのステップを調整する必要があります。Lobster はその調整を型付きランタイムに移動します:
- 多数の代わりに1回の呼び出し:OpenClaw は1回の Lobster ツール呼び出しを実行し、構造化された結果を取得します。
- 承認が組み込み:副作用(メール送信、コメント投稿)は明示的に承認されるまでワークフローを一時停止します。
- 再開可能:一時停止されたワークフローはトークンを返します;すべてを再実行せずに承認して再開できます。
なぜ普通のプログラムの代わりに DSL?
Lobster は意図的に小さく設計されています。目標は「新しい言語」ではなく、ファーストクラスの承認と再開トークンを持つ予測可能で AI フレンドリーなパイプライン仕様です。
- 承認/再開が組み込み:通常のプログラムは人間にプロンプトを表示できますが、自分でそのランタイムを発明しない限り、永続的なトークンで_一時停止と再開_を行うことはできません。
- 決定論性 + 監査可能性:パイプラインはデータなので、ログ、差分、再生、レビューが簡単です。
- AI のための制約されたサーフェス:小さな文法 + JSON パイピングは「創造的な」コードパスを減らし、検証を現実的にします。
- 安全ポリシーが組み込み:タイムアウト、出力上限、サンドボックスチェック、許可リストはランタイムによって強制され、各スクリプトではありません。
- ''まだプログラム可能'':各ステップは任意の CLI またはスクリプトを呼び出せます。JS/TS が必要な場合は、コードから ''.lobster'' ファイルを生成します。
仕組み
OpenClaw は''ツールモード''でローカル ''lobster'' CLI を起動し、stdout から JSON エンベロープを解析します。
パイプラインが承認待ちで一時停止する場合、ツールは ''resumeToken'' を返し、後で続行できます。
パターン:小さな CLI + JSON パイプ + 承認
JSON を話す小さなコマンドを構築し、それらを単一の Lobster 呼び出しにチェーンします。(以下の例のコマンド名 — 自分のものに置き換えてください。)
inbox list --json inbox categorize --json inbox apply --json
{
"action": "run",
"pipeline": "exec --json --shell 'inbox list --json' | exec --stdin json --shell 'inbox categorize --json' | exec --stdin json --shell 'inbox apply --json' | approve --preview-from-stdin --limit 5 --prompt 'Apply changes?'",
"timeoutMs": 30000
}パイプラインが承認を要求する場合、トークンで再開します:
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}AI がワークフローをトリガー;Lobster がステップを実行。承認ゲートは副作用を明示的で監査可能にします。
例:入力アイテムをツール呼び出しにマップ:
gog.gmail.search --query 'newer_than:1d' | openclaw.invoke --tool message --action send --each --item-key message --args-json '{"provider":"telegram","to":"..."}'JSON のみの LLM ステップ (llm-task)
構造化 LLM ステップが必要なワークフローの場合、オプションの
''llm-task'' プラグインツールを有効にし、Lobster から呼び出します。これによりワークフローは
決定論的でありながら、モデルで分類/要約/ドラフトを行うことができます。
ツールを有効にする:
{
"plugins": {
"entries": {
"llm-task": { "enabled": true }
}
},
"agents": {
"list": [
{
"id": "main",
"tools": { "allow": ["llm-task"] }
}
]
}
}パイプラインで使用する:
openclaw.invoke --tool llm-task --action json --args-json '{
"prompt": "Given the input email, return intent and draft.",
"input": { "subject": "Hello", "body": "Can you help?" },
"schema": {
"type": "object",
"properties": {
"intent": { "type": "string" },
"draft": { "type": "string" }
},
"required": ["intent", "draft"],
"additionalProperties": false
}
}'詳細と設定オプションについては ''LLM Task'' を参照してください。
ワークフローファイル (.lobster)
Lobster は ''name''、''args''、''steps''、''env''、''condition''、''approval'' フィールドを持つ YAML/JSON ワークフローファイルを実行できます。OpenClaw ツール呼び出しで ''pipeline'' をファイルパスに設定します。
name: inbox-triage
args:
tag:
default: "family"
steps:
- id: collect
command: inbox list --json
- id: categorize
command: inbox categorize --json
stdin: $collect.stdout
- id: approve
command: inbox apply --approve
stdin: $categorize.stdout
approval: required
- id: execute
command: inbox apply --execute
stdin: $categorize.stdout
condition: $approve.approvedNotes:
- ''stdin: $step.stdout'' と ''stdin: $step.json'' は前のステップの出力を渡します。
- ''condition''(または ''when'')は ''$step.approved'' に基づいてステップを制御できます。
Lobster のインストール
OpenClaw Gateway を実行する''同じホスト''に Lobster CLI をインストールし(''Lobster リポジトリ''を参照)、''lobster'' が ''PATH'' にあることを確認します。
カスタムバイナリの場所を使用する場合は、ツール呼び出しで''絶対'' ''lobsterPath'' を渡します。
ツールを有効にする
Lobster はオプションのプラグインツールです(デフォルトでは有効ではありません)。
Recommended (additive, safe):
{
"tools": {
"alsoAllow": ["lobster"]
}
}またはエージェントごと:
{
"agents": {
"list": [
{
"id": "main",
"tools": {
"alsoAllow": ["lobster"]
}
}
]
}
}制限的な許可リストモードで実行するつもりでない限り、''tools.allow: ["lobster"]'' の使用は避けてください。
注意:許可リストはオプションのプラグインではオプトインです。許可リストが
プラグインツール(''lobster'' など)のみを指定する場合、OpenClaw はコアツールを有効のままにします。コア
ツールを制限するには、許可リストに必要なコアツールまたはグループを含めます。
例:メールトリアージ
Lobster なし:
User: "Check my email and draft replies" → openclaw calls gmail.list → LLM summarizes → User: "draft replies to #2 and #5" → LLM drafts → User: "send #2" → openclaw calls gmail.send (repeat daily, no memory of what was triaged)
Lobster あり:
{
"action": "run",
"pipeline": "email.triage --limit 20",
"timeoutMs": 30000
}JSON エンベロープを返します(切り捨て):
{
"ok": true,
"status": "needs_approval",
"output": [{ "summary": "5 need replies, 2 need action" }],
"requiresApproval": {
"type": "approval_request",
"prompt": "Send 2 draft replies?",
"items": [],
"resumeToken": "..."
}
}ユーザーが承認 → 再開:
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}1つのワークフロー。決定論的。安全。
ツールパラメータ
#
`run`
ツールモードでパイプラインを実行します。
{
"action": "run",
"pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage",
"cwd": "/path/to/workspace",
"timeoutMs": 30000,
"maxStdoutBytes": 512000
}引数付きでワークフローファイルを実行:
{
"action": "run",
"pipeline": "/path/to/inbox-triage.lobster",
"argsJson": "{"tag":"family"}"
}#
`resume`
承認後に停止したワークフローを続行します。
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}#
オプションの入力
- ''lobsterPath'':Lobster バイナリへの絶対パス(省略時は ''PATH'' を使用)。
- ''cwd'':パイプラインの作業ディレクトリ(デフォルトは現在のプロセス作業ディレクトリ)。
- ''timeoutMs'':この期間を超えるとサブプロセスを強制終了(デフォルト:20000)。
- ''maxStdoutBytes'':stdout がこのサイズを超えるとサブプロセスを強制終了(デフォルト:512000)。
- ''argsJson'':''lobster run --args-json'' に渡される JSON 文字列(ワークフローファイルのみ)。
出力エンベロープ
Lobster は3つのステータスのいずれかを持つ JSON エンベロープを返します:
- ''ok'' → finished successfully
- ''needs_approval'' → 一時停止;再開には ''requiresApproval.resumeToken'' が必要
- ''cancelled'' → 明示的に拒否またはキャンセル
ツールは ''content''(整形 JSON)と ''details''(生オブジェクト)の両方でエンベロープを表示します。
Approvals
''requiresApproval'' が存在する場合、プロンプトを確認して決定します:
- ''approve: true'' → 再開して副作用を続行
- ''approve: false'' → キャンセルしてワークフローを完了
''approve --preview-from-stdin --limit N'' を使用して、カスタム jq/heredoc 接着剤なしで承認リクエストに JSON プレビューを添付します。再開トークンは現在コンパクトです:Lobster はワークフロー再開状態をその状態ディレクトリの下に保存し、小さなトークンキーを返します。
OpenProse
OpenProse は Lobster と相性が良い:''/prose'' を使用してマルチエージェントの準備を調整し、決定論的な承認のために Lobster パイプラインを実行します。Prose プログラムが Lobster を必要とする場合、''tools.subagents.tools'' を介してサブエージェントに ''tools.subagents.tools'' ツールを許可します。''OpenProse'' を参照してください。
Safety
- ローカルサブプロセスのみ — プラグイン自体からのネットワーク呼び出しはありません。
- シークレットなし — Lobster は OAuth を管理しません;それを行う OpenClaw ツールを呼び出します。
- サンドボックス対応 — ツールコンテキストがサンドボックス化されている場合は無効になります。
- ''強化済み'' — 指定する場合、''lobsterPath'' は絶対パスである必要があります;タイムアウトと出力上限が強制されます。
トラブルシューティング
- ''''lobster subprocess timed out'''' → ''timeoutMs'' を増やすか、長いパイプラインを分割します。
- ''''lobster output exceeded maxStdoutBytes'''' → ''maxStdoutBytes'' を上げるか、出力サイズを減らします。
- ''''lobster returned invalid JSON'''' → パイプラインがツールモードで実行され、JSON のみを出力していることを確認します。
- ''''lobster failed (code …)'''' → 同じパイプラインをターミナルで実行して stderr を確認します。
Learn more
#