8.3 KiB
title, summary, description, read_when
| title | summary | description | read_when | ||
|---|---|---|---|---|---|
| Lobster | Typed workflow runtime for Clawdbot with resumable approval gates. | Typed workflow runtime for Clawdbot — composable pipelines with approval gates. |
|
Lobster
Lobster is a workflow shell that lets Clawdbot run multi-step tool sequences as a single, deterministic operation with explicit approval checkpoints.
Hook
Your assistant can build the tools that manage itself. Ask for a workflow, and 30 minutes later you have a CLI plus pipelines that run as one call. Lobster is the missing piece: deterministic pipelines, explicit approvals, and resumable state.
Why
Today, complex workflows require many back-and-forth tool calls. Each call costs tokens, and the LLM has to orchestrate every step. Lobster moves that orchestration into a typed runtime:
- One call instead of many: Clawdbot runs one Lobster tool call and gets a structured result.
- Approvals built in: Side effects (send email, post comment) halt the workflow until explicitly approved.
- Resumable: Halted workflows return a token; approve and resume without re-running everything.
How it works
Clawdbot launches the local lobster CLI in tool mode and parses a JSON envelope from stdout.
If the pipeline pauses for approval, the tool returns a resumeToken so you can continue later.
Pattern: small CLI + JSON pipes + approvals
Build tiny commands that speak JSON, then chain them into a single Lobster call. (Example command names below — swap in your own.)
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
}
If the pipeline requests approval, resume with the token:
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
AI triggers the workflow; Lobster executes the steps. Approval gates keep side effects explicit and auditable.
Example: map input items into tool calls:
gog.gmail.search --query 'newer_than:1d' \
| clawd.invoke --tool message --action send --each --item-key message --args-json '{"provider":"telegram","to":"..."}'
Workflow files (.lobster)
Lobster can run YAML/JSON workflow files with name, args, steps, env, condition, and approval fields. In Clawdbot tool calls, set pipeline to the file path.
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.approved
Notes:
stdin: $step.stdoutandstdin: $step.jsonpass a prior step’s output.condition(orwhen) can gate steps on$step.approved.
Install Lobster
Install the Lobster CLI on the same host that runs the Clawdbot Gateway (see the Lobster repo), and ensure lobster is on PATH.
If you want to use a custom binary location, pass an absolute lobsterPath in the tool call.
Enable the tool
Lobster is an optional plugin tool (not enabled by default). Allow it per agent:
{
"agents": {
"list": [
{
"id": "main",
"tools": {
"allow": ["lobster"]
}
}
]
}
}
You can also allow it globally with tools.allow if every agent should see it.
Note: allowlists are opt-in for optional plugins. If your allowlist only names
plugin tools (like lobster), Clawdbot keeps core tools enabled. To restrict core
tools, include the core tools or groups you want in the allowlist too.
Example: Email triage
Without Lobster:
User: "Check my email and draft replies"
→ clawd calls gmail.list
→ LLM summarizes
→ User: "draft replies to #2 and #5"
→ LLM drafts
→ User: "send #2"
→ clawd calls gmail.send
(repeat daily, no memory of what was triaged)
With Lobster:
{
"action": "run",
"pipeline": "email.triage --limit 20",
"timeoutMs": 30000
}
Returns a JSON envelope (truncated):
{
"ok": true,
"status": "needs_approval",
"output": [{ "summary": "5 need replies, 2 need action" }],
"requiresApproval": {
"type": "approval_request",
"prompt": "Send 2 draft replies?",
"items": [],
"resumeToken": "..."
}
}
User approves → resume:
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
One workflow. Deterministic. Safe.
Tool parameters
run
Run a pipeline in tool mode.
{
"action": "run",
"pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage",
"cwd": "/path/to/workspace",
"timeoutMs": 30000,
"maxStdoutBytes": 512000
}
Run a workflow file with args:
{
"action": "run",
"pipeline": "/path/to/inbox-triage.lobster",
"argsJson": "{\"tag\":\"family\"}"
}
resume
Continue a halted workflow after approval.
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
Optional inputs
lobsterPath: Absolute path to the Lobster binary (omit to usePATH).cwd: Working directory for the pipeline (defaults to the current process working directory).timeoutMs: Kill the subprocess if it exceeds this duration (default: 20000).maxStdoutBytes: Kill the subprocess if stdout exceeds this size (default: 512000).argsJson: JSON string passed tolobster run --args-json(workflow files only).
Output envelope
Lobster returns a JSON envelope with one of three statuses:
ok→ finished successfullyneeds_approval→ paused;requiresApproval.resumeTokenis required to resumecancelled→ explicitly denied or cancelled
The tool surfaces the envelope in both content (pretty JSON) and details (raw object).
Approvals
If requiresApproval is present, inspect the prompt and decide:
approve: true→ resume and continue side effectsapprove: false→ cancel and finalize the workflow
Use approve --preview-from-stdin --limit N to attach a JSON preview to approval requests without custom jq/heredoc glue. Resume tokens are now compact: Lobster stores workflow resume state under its state dir and hands back a small token key.
OpenProse
OpenProse pairs well with Lobster: use /prose to orchestrate multi-agent prep, then run a Lobster pipeline for deterministic approvals. If a Prose program needs Lobster, allow the lobster tool for sub-agents via tools.subagents.tools. See OpenProse.
Safety
- Local subprocess only — no network calls from the plugin itself.
- No secrets — Lobster doesn't manage OAuth; it calls clawd tools that do.
- Sandbox-aware — disabled when the tool context is sandboxed.
- Hardened —
lobsterPathmust be absolute if specified; timeouts and output caps enforced.
Troubleshooting
lobster subprocess timed out→ increasetimeoutMs, or split a long pipeline.lobster output exceeded maxStdoutBytes→ raisemaxStdoutBytesor reduce output size.lobster returned invalid JSON→ ensure the pipeline runs in tool mode and prints only JSON.lobster failed (code …)→ run the same pipeline in a terminal to inspect stderr.
Learn more
Case study: community workflows
One public example: a “second brain” CLI + Lobster pipelines that manage three Markdown vaults (personal, partner, shared). The CLI emits JSON for stats, inbox listings, and stale scans; Lobster chains those commands into workflows like weekly-review, inbox-triage, memory-consolidation, and shared-task-sync, each with approval gates. AI handles judgment (categorization) when available and falls back to deterministic rules when not.