Lobster
Lobster ist eine Workflow-Shell, mit der OpenClaw mehrstufige Tool-Sequenzen als einzelne, deterministische Operation mit expliziten Freigabe-Checkpoints ausführen kann.
Hook
Dein Assistant kann die Tools bauen, die ihn selbst verwalten. Frag nach einem Workflow, und 30 Minuten später hast du ein CLI plus Pipelines, die als ein einziger Aufruf laufen. Lobster ist das fehlende Teil: deterministische Pipelines, explizite Freigaben und wiederaufnehmbarer Zustand.
Warum
Heute erfordern komplexe Workflows viele Hin-und-Her-Tool-Aufrufe. Jeder Aufruf kostet Token, und das LLM muss jeden Schritt orchestrieren. Lobster verschiebt diese Orchestrierung in eine typisierte Runtime:
- Ein Aufruf statt vieler: OpenClaw führt einen Lobster-Tool-Aufruf aus und erhält ein strukturiertes Ergebnis.
- Freigaben eingebaut: Seiteneffekte (E-Mail senden, Kommentar posten) halten den Workflow an, bis er explizit freigegeben wird.
- Wiederaufnehmbar: Angehaltene Workflows geben einen Token zurück; freigeben und fortsetzen, ohne alles neu auszuführen.
Warum eine DSL statt normaler Programme?
Lobster ist absichtlich klein. Das Ziel ist nicht „eine neue Sprache”, sondern eine vorhersagbare, KI-freundliche Pipeline-Spezifikation mit erstklassigen Freigaben und Resume-Tokens.
- Approve/Resume ist eingebaut: Ein normales Programm kann einen Menschen fragen, aber es kann nicht pausieren und fortsetzen mit einem dauerhaften Token, ohne dass du diese Runtime selbst erfindest.
- Determinismus + Nachvollziehbarkeit: Pipelines sind Daten, daher sind sie einfach zu loggen, zu vergleichen, wiederzugeben und zu überprüfen.
- Eingeschränkte Oberfläche für KI: Eine winzige Grammatik + JSON-Piping reduziert „kreative” Code-Pfade und macht Validierung realistisch.
- Sicherheitsrichtlinie eingebacken: Timeouts, Output-Limits, Sandbox-Checks und Allowlists werden von der Runtime erzwungen, nicht von jedem Skript.
- Trotzdem programmierbar: Jeder Schritt kann jedes CLI oder Skript aufrufen. Wenn du JS/TS willst, generiere
.lobster-Dateien aus Code.
Wie es funktioniert
OpenClaw startet das lokale lobster CLI im Tool-Modus und parst ein JSON-Envelope von stdout.
Wenn die Pipeline für eine Freigabe pausiert, gibt das Tool einen resumeToken zurück, damit du später fortfahren kannst.
Pattern: kleines CLI + JSON-Pipes + Freigaben
Baue winzige Befehle, die JSON sprechen, und verkette sie dann zu einem einzigen Lobster-Aufruf. (Beispiel-Befehlsnamen unten — tausche deine eigenen ein.)
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
}
Wenn die Pipeline eine Freigabe anfordert, setze mit dem Token fort:
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
KI triggert den Workflow; Lobster führt die Schritte aus. Freigabe-Gates halten Seiteneffekte explizit und nachvollziehbar.
Beispiel: Input-Items in Tool-Aufrufe mappen:
gog.gmail.search --query 'newer_than:1d' \
| openclaw.invoke --tool message --action send --each --item-key message --args-json '{"provider":"telegram","to":"..."}'
JSON-only LLM-Schritte (llm-task)
Für Workflows, die einen strukturierten LLM-Schritt brauchen, aktiviere das optionale
llm-task Plugin-Tool und rufe es von Lobster aus auf. Das hält den Workflow
deterministisch, während du trotzdem mit einem Modell klassifizieren/zusammenfassen/entwerfen kannst.
Tool aktivieren:
{
"plugins": {
"entries": {
"llm-task": { "enabled": true }
}
},
"agents": {
"list": [
{
"id": "main",
"tools": { "allow": ["llm-task"] }
}
]
}
}
In einer Pipeline verwenden:
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
}
}'
Siehe LLM Task für Details und Konfigurationsoptionen.
Workflow-Dateien (.lobster)
Lobster kann YAML/JSON-Workflow-Dateien mit name, args, steps, env, condition und approval-Feldern ausführen. In OpenClaw-Tool-Aufrufen setze pipeline auf den Dateipfad.
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
Hinweise:
stdin: $step.stdoutundstdin: $step.jsonübergeben die Ausgabe eines vorherigen Schritts.condition(oderwhen) kann Schritte an$step.approvedbinden.
Lobster installieren
Installiere das Lobster CLI auf dem gleichen Host, auf dem das OpenClaw Gateway läuft (siehe das Lobster-Repo), und stelle sicher, dass lobster im PATH ist.
Wenn du einen benutzerdefinierten Binary-Speicherort verwenden willst, übergib einen absoluten lobsterPath im Tool-Aufruf.
Tool aktivieren
Lobster ist ein optionales Plugin-Tool (standardmäßig nicht aktiviert).
Empfohlen (additiv, sicher):
{
"tools": {
"alsoAllow": ["lobster"]
}
}
Oder pro Agent:
{
"agents": {
"list": [
{
"id": "main",
"tools": {
"alsoAllow": ["lobster"]
}
}
]
}
}
Vermeide tools.allow: ["lobster"], es sei denn, du willst im restriktiven Allowlist-Modus laufen.
Hinweis: Allowlists sind opt-in für optionale Plugins. Wenn deine Allowlist nur
Plugin-Tools (wie lobster) nennt, hält OpenClaw Core-Tools aktiviert. Um Core-Tools
einzuschränken, nimm die Core-Tools oder Gruppen, die du willst, auch in die Allowlist auf.
Beispiel: E-Mail-Triage
Ohne 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)
Mit Lobster:
{
"action": "run",
"pipeline": "email.triage --limit 20",
"timeoutMs": 30000
}
Gibt ein JSON-Envelope zurück (gekürzt):
{
"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 genehmigt → fortsetzen:
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
Ein Workflow. Deterministisch. Sicher.
Tool-Parameter
run
Führe eine Pipeline im Tool-Modus aus.
{
"action": "run",
"pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage",
"cwd": "/path/to/workspace",
"timeoutMs": 30000,
"maxStdoutBytes": 512000
}
Führe eine Workflow-Datei mit Argumenten aus:
{
"action": "run",
"pipeline": "/path/to/inbox-triage.lobster",
"argsJson": "{\"tag\":\"family\"}"
}
resume
Setze einen angehaltenen Workflow nach Freigabe fort.
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
Optionale Eingaben
lobsterPath: Absoluter Pfad zum Lobster-Binary (weglassen, umPATHzu verwenden).cwd: Arbeitsverzeichnis für die Pipeline (Standard: aktuelles Prozess-Arbeitsverzeichnis).timeoutMs: Subprocess beenden, wenn diese Dauer überschritten wird (Standard: 20000).maxStdoutBytes: Subprocess beenden, wenn stdout diese Größe überschreitet (Standard: 512000).argsJson: JSON-String, der anlobster run --args-jsonübergeben wird (nur Workflow-Dateien).
Output-Envelope
Lobster gibt ein JSON-Envelope mit einem von drei Status zurück:
ok→ erfolgreich abgeschlossenneeds_approval→ pausiert;requiresApproval.resumeTokenist erforderlich zum Fortsetzencancelled→ explizit abgelehnt oder abgebrochen
Das Tool zeigt das Envelope sowohl in content (hübsches JSON) als auch details (rohes Objekt).
Freigaben
Wenn requiresApproval vorhanden ist, prüfe den Prompt und entscheide:
approve: true→ fortsetzen und Seiteneffekte ausführenapprove: false→ abbrechen und Workflow finalisieren
Verwende approve --preview-from-stdin --limit N, um eine JSON-Vorschau an Freigabe-Anfragen anzuhängen, ohne eigenen jq/heredoc-Glue. Resume-Tokens sind jetzt kompakt: Lobster speichert Workflow-Resume-State unter seinem State-Verzeichnis und gibt einen kleinen Token-Key zurück.
OpenProse
OpenProse passt gut zu Lobster: Verwende /prose, um Multi-Agent-Vorbereitung zu orchestrieren, dann führe eine Lobster-Pipeline für deterministische Freigaben aus. Wenn ein Prose-Programm Lobster braucht, erlaube das lobster-Tool für Sub-Agents über tools.subagents.tools. Siehe OpenProse.
Sicherheit
- Nur lokaler Subprocess — keine Netzwerk-Aufrufe vom Plugin selbst.
- Keine Secrets — Lobster verwaltet kein OAuth; es ruft OpenClaw-Tools auf, die das tun.
- Sandbox-aware — deaktiviert, wenn der Tool-Kontext sandboxed ist.
- Gehärtet —
lobsterPathmuss absolut sein, wenn angegeben; Timeouts und Output-Caps werden erzwungen.
Troubleshooting
lobster subprocess timed out→ erhöhetimeoutMsoder teile eine lange Pipeline auf.lobster output exceeded maxStdoutBytes→ erhöhemaxStdoutBytesoder reduziere die Output-Größe.lobster returned invalid JSON→ stelle sicher, dass die Pipeline im Tool-Modus läuft und nur JSON ausgibt.lobster failed (code …)→ führe die gleiche Pipeline in einem Terminal aus, um stderr zu inspizieren.
Mehr erfahren
Case Study: Community-Workflows
Ein öffentliches Beispiel: ein “Second Brain” CLI + Lobster-Pipelines, die drei Markdown-Vaults verwalten (persönlich, Partner, geteilt). Das CLI gibt JSON für Stats, Inbox-Listings und Stale-Scans aus; Lobster verkettet diese Befehle zu Workflows wie weekly-review, inbox-triage, memory-consolidation und shared-task-sync, jeweils mit Freigabe-Gates. KI übernimmt Beurteilung (Kategorisierung), wenn verfügbar, und fällt auf deterministische Regeln zurück, wenn nicht.