Lobster¶
Lobster — это оболочка рабочих процессов, которая позволяет OpenClaw запускать многошаговые последовательности инструментов как одну детерминированную операцию с явными контрольными точками подтверждения.
Назначение¶
Ваш ассистент может создавать инструменты, которые управляют им самим. Попросите рабочий процесс — и через 30 минут у вас есть CLI плюс конвейеры, которые выполняются одним вызовом. Lobster — недостающий элемент: детерминированные конвейеры, явные подтверждения и возобновляемое состояние.
Почему¶
Сегодня сложные рабочие процессы требуют множества возвратно-поступательных вызовов инструментов. Каждый вызов стоит токенов, и LLM должна оркестрировать каждый шаг. Lobster переносит эту оркестрацию в типизированную среду выполнения:
- Один вызов вместо многих: OpenClaw выполняет один вызов инструмента Lobster и получает структурированный результат.
- Подтверждения встроены: Побочные эффекты (отправка письма, публикация комментария) останавливают рабочий процесс до явного подтверждения.
- Возобновляемость: Остановленные рабочие процессы возвращают токен; подтвердите и возобновите без повторного выполнения всего.
Почему DSL вместо обычных программ?¶
Lobster намеренно минималистичен. Цель — не «новый язык», а предсказуемая, дружественная к ИИ спецификация конвейеров с первоклассными подтверждениями и токенами возобновления.
- Подтверждение/возобновление встроены: Обычная программа может запросить человека, но не может поставить на паузу и возобновить с долговечным токеном без самостоятельного изобретения такой среды выполнения.
- Детерминизм + аудитируемость: Конвейеры — это данные, поэтому их легко логировать, сравнивать (diff), воспроизводить и проверять.
- Ограниченная поверхность для ИИ: Минимальная грамматика + JSON‑передача уменьшают «креативные» пути выполнения кода и делают валидацию реалистичной.
- Политики безопасности встроены: Тайм‑ауты, лимиты вывода, проверки sandbox и списки разрешённых применяются средой выполнения, а не каждым скриптом.
- Всё ещё программируемо: Каждый шаг может вызывать любой CLI или скрипт. Если нужен JS/TS, генерируйте файлы
.lobsterиз кода.
Как это работает¶
OpenClaw запускает локальный CLI lobster в режиме инструмента и разбирает JSON‑конверт из stdout.
Если конвейер приостанавливается для подтверждения, инструмент возвращает 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
}
ИИ инициирует рабочий процесс; Lobster выполняет шаги. Шлюзы подтверждений делают побочные эффекты явными и пригодными для аудита.
Пример: сопоставление входных элементов с вызовами инструментов:
gog.gmail.search --query 'newer_than:1d' \
| openclaw.invoke --tool message --action send --each --item-key message --args-json '{"provider":"telegram","to":"..."}'
Шаги LLM только с JSON (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 может выполнять файлы рабочих процессов YAML/JSON с полями name, args, steps, env, condition и approval. В вызовах инструментов 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.approved
Примечания:
stdin: $step.stdoutиstdin: $step.jsonпередают вывод предыдущего шага.condition(илиwhen) может ставить шаги на шлюз по$step.approved.
Install Lobster¶
Установите CLI Lobster на том же хосте, где работает Gateway (шлюз) OpenClaw (см. репозиторий Lobster), и убедитесь, что lobster находится в PATH.
Если вы хотите использовать пользовательское расположение бинарника, передайте абсолютный lobsterPath в вызове инструмента.
Enable the tool¶
Lobster — необязательный плагин‑инструмент (по умолчанию отключён).
Рекомендуется (аддитивно, безопасно):
{
"tools": {
"alsoAllow": ["lobster"]
}
}
Или для каждого агента:
{
"agents": {
"list": [
{
"id": "main",
"tools": {
"alsoAllow": ["lobster"]
}
}
]
}
}
Избегайте использования tools.allow: ["lobster"], если вы не намерены работать в ограничительном режиме списка разрешённых.
Примечание: списки разрешённых являются opt‑in для необязательных плагинов. Если ваш список разрешённых содержит только
плагин‑инструменты (например, lobster), OpenClaw оставляет основные инструменты включёнными. Чтобы ограничить основные
инструменты, включите в список разрешённых также нужные основные инструменты или группы.
Example: Email triage¶
Без 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
}
Один рабочий процесс. Детерминированный. Безопасный.
Tool parameters¶
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
}
Optional inputs¶
lobsterPath: Абсолютный путь к бинарнику Lobster (не указывайте, чтобы использоватьPATH).cwd: Рабочий каталог для конвейера (по умолчанию — текущий рабочий каталог процесса).timeoutMs: Принудительно завершить подпроцесс, если он превышает эту длительность (по умолчанию: 20000).maxStdoutBytes: Принудительно завершить подпроцесс, если stdout превышает этот размер (по умолчанию: 512000).argsJson: JSON‑строка, передаваемая вlobster run --args-json(только для файлов рабочих процессов).
Output envelope¶
Lobster возвращает JSON‑конверт с одним из трёх статусов:
ok→ успешно завершеноneeds_approval→ приостановлено; для возобновления требуетсяrequiresApproval.resumeTokencancelled→ явно отклонено или отменено
Инструмент выводит конверт как в content (красиво отформатированный JSON), так и в details (сырой объект).
Approvals¶
Если присутствует requiresApproval, просмотрите запрос и примите решение:
approve: true→ возобновить и продолжить побочные эффектыapprove: false→ отменить и завершить рабочий процесс
Используйте approve --preview-from-stdin --limit N, чтобы прикреплять JSON‑превью к запросам подтверждения без пользовательского jq/heredoc‑клея. Токены возобновления теперь компактны: Lobster хранит состояние возобновления рабочего процесса в своём каталоге состояния и возвращает небольшой ключ‑токен.
OpenProse¶
OpenProse хорошо сочетается с Lobster: используйте /prose для оркестрации подготовки несколькими агентами, затем запускайте конвейер Lobster для детерминированных подтверждений. Если программе Prose нужен Lobster, разрешите инструмент lobster для подагентов через tools.subagents.tools. См. OpenProse.
Safety¶
- Только локальные подпроцессы — сам плагин не выполняет сетевых вызовов.
- Без секретов — Lobster не управляет OAuth; он вызывает инструменты OpenClaw, которые это делают.
- Совместим с sandbox — отключён, когда контекст инструмента находится в sandbox.
- Укреплённая безопасность — если указан,
lobsterPathдолжен быть абсолютным; тайм‑ауты и лимиты вывода принудительно применяются.
Troubleshooting¶
lobster subprocess timed out→ увеличьтеtimeoutMsили разбейте длинный конвейер.lobster output exceeded maxStdoutBytes→ увеличьтеmaxStdoutBytesили уменьшите размер вывода.lobster returned invalid JSON→ убедитесь, что конвейер запускается в режиме инструмента и печатает только JSON.lobster failed (code …)→ запустите тот же конвейер в терминале, чтобы проверить stderr.
Learn more¶
Case study: community workflows¶
Один публичный пример: CLI «second brain» + конвейеры Lobster, которые управляют тремя хранилищами Markdown (личное, партнёрское, общее). CLI выдаёт JSON со статистикой, списками входящих и сканированием устаревших записей; Lobster связывает эти команды в рабочие процессы вроде weekly-review, inbox-triage, memory-consolidation и shared-task-sync, каждый со шлюзами подтверждений. ИИ выполняет оценочные задачи (категоризация), когда доступен, и возвращается к детерминированным правилам, когда нет.