Встроенные инструменты

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.resumeToken
  • cancelled → явно отклонён или отменён

Инструмент показывает конверт как в 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, каждый со шлюзами подтверждения. ИИ обрабатывает суждения (категоризацию), когда это возможно, и возвращается к детерминированным правилам, когда нет.

LLM TaskОбнаружение циклов инструментов