Lobster
Lobster — это оболочка для рабочих процессов, которая позволяет OpenClaw выполнять многошаговые последовательности инструментов как единую детерминированную операцию с явными контрольными точками подтверждения.
Суть
Ваш ассистент может создавать инструменты, которые управляют им самим. Попросите рабочий процесс, и через 30 минут у вас будет CLI и пайплайны, выполняемые одним вызовом. Lobster — это недостающий элемент: детерминированные пайплайны, явные подтверждения и возобновляемое состояние.
Зачем
Сегодня сложные рабочие процессы требуют множества вызовов инструментов туда-обратно. Каждый вызов стоит токенов, и LLM приходится оркестрировать каждый шаг. Lobster переносит эту оркестрацию в типизированную среду выполнения:
- Один вызов вместо многих: OpenClaw выполняет один вызов инструмента Lobster и получает структурированный результат.
- Встроенные подтверждения: Побочные эффекты (отправить письмо, оставить комментарий) приостанавливают рабочий процесс до явного подтверждения.
- Возобновляемость: Приостановленные рабочие процессы возвращают токен; подтвердите и продолжите, не перезапуская всё заново.
Зачем DSL вместо обычных программ?
Lobster намеренно мал. Цель — не «новый язык», а предсказуемая, удобная для ИИ спецификация пайплайна с поддержкой подтверждений и токенов возобновления из коробки.
- Подтверждение/возобновление встроены: Обычная программа может запросить подтверждение у человека, но не может приостановиться и возобновиться с устойчивым токеном без того, чтобы вы сами не реализовали такую среду выполнения.
- Детерминизм + аудируемость: Пайплайны — это данные, поэтому их легко логировать, сравнивать, воспроизводить и проверять.
- Ограниченная поверхность для ИИ: Маленькая грамматика + передача JSON уменьшает количество «творческих» путей выполнения кода и делает валидацию реалистичной.
- Встроенная политика безопасности: Таймауты, ограничения вывода, проверки песочницы и списки разрешений обеспечиваются средой выполнения, а не каждым скриптом.
- Остаётся программируемым: Каждый шаг может вызывать любой 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":"..."}'
Шаги только с 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 может запускать файлы рабочих процессов 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.
Установка Lobster
Установите CLI Lobster на том же хосте, где работает OpenClaw Gateway (см. репозиторий Lobster), и убедитесь, что lobster находится в PATH.
Включение инструмента
Lobster — это опциональный инструмент-плагин (по умолчанию не включён). Рекомендуемый способ (аддитивный, безопасный):
{
"tools": {
"alsoAllow": ["lobster"]
}
}
Или для конкретного агента:
{
"agents": {
"list": [
{
"id": "main",
"tools": {
"alsoAllow": ["lobster"]
}
}
]
}
}
Избегайте использования tools.allow: ["lobster"], если не планируете работать в ограничительном режиме со списком разрешений. Примечание: списки разрешений являются опцией для опциональных плагинов. Если ваш список разрешений содержит только инструменты-плагины (например, lobster), OpenClaw оставляет основные инструменты включёнными. Чтобы ограничить основные инструменты, включите в список разрешений также основные инструменты или группы, которые вам нужны.
Пример: Сортировка писем
Без Lobster:
Пользователь: "Проверь мою почту и составь черновики ответов"
→ openclaw вызывает gmail.list
→ LLM суммирует
→ Пользователь: "составь черновики ответов на #2 и #5"
→ LLM составляет черновики
→ Пользователь: "отправь #2"
→ openclaw вызывает gmail.send
(повторять ежедневно, без памяти о том, что было отсортировано)
С 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
}
Один рабочий процесс. Детерминированный. Безопасный.
Параметры инструмента
run
Запустить пайплайн в режиме инструмента.
{
"action": "run",
"pipeline": "gog.gmail.search --query 'newer_than:1d' | email.triage",
"cwd": "workspace",
"timeoutMs": 30000,
"maxStdoutBytes": 512000
}
Запустить файл рабочего процесса с аргументами:
{
"action": "run",
"pipeline": "/path/to/inbox-triage.lobster",
"argsJson": "{\"tag\":\"family\"}"
}
resume
Продолжить приостановленный рабочий процесс после подтверждения.
{
"action": "resume",
"token": "<resumeToken>",
"approve": true
}
Опциональные входные данные
cwd: Относительный рабочий каталог для пайплайна (должен оставаться в пределах текущего рабочего каталога процесса).timeoutMs: Завершить подпроцесс, если он превысит эту длительность (по умолчанию: 20000).maxStdoutBytes: Завершить подпроцесс, если stdout превысит этот размер (по умолчанию: 512000).argsJson: JSON-строка, передаваемая вlobster run --args-json(только для файлов рабочих процессов).
Выходной конверт
Lobster возвращает JSON-конверт с одним из трёх статусов:
ok→ успешно завершёнneeds_approval→ приостановлен; для возобновления требуетсяrequiresApproval.resumeTokencancelled→ явно отклонён или отменён
Инструмент показывает конверт как в content (красивый JSON), так и в details (сырой объект).
Подтверждения
Если присутствует 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.
Безопасность
- Только локальный подпроцесс — никаких сетевых вызовов из самого плагина.
- Без секретов — Lobster не управляет OAuth; он вызывает инструменты OpenClaw, которые это делают.
- Осведомлён о песочнице — отключён, когда контекст инструмента находится в песочнице.
- Усилен — фиксированное имя исполняемого файла (
lobster) вPATH; применяются таймауты и ограничения вывода.
Устранение неполадок
lobster subprocess timed out→ увеличьтеtimeoutMsили разделите длинный пайплайн.lobster output exceeded maxStdoutBytes→ увеличьтеmaxStdoutBytesили уменьшите размер вывода.lobster returned invalid JSON→ убедитесь, что пайплайн запущен в режиме инструмента и выводит только JSON.lobster failed (code …)→ запустите тот же пайплайн в терминале, чтобы проверить stderr.
Узнать больше
Пример из практики: рабочие процессы сообщества
Один публичный пример: CLI «второго мозга» + пайплайны Lobster, которые управляют тремя хранилищами Markdown (личное, партнёрское, общее). CLI выводит JSON для статистики, списков входящих и проверок устаревания; Lobster объединяет эти команды в рабочие процессы, такие как weekly-review, inbox-triage, memory-consolidation и shared-task-sync, каждый со шлюзами подтверждения. ИИ обрабатывает суждения (категоризацию), когда это возможно, и возвращается к детерминированным правилам, когда нет.