Фоновый Exec и инструмент Process
OpenClaw выполняет shell-команды через инструмент exec и хранит долгоиграющие задачи в памяти. Инструмент process управляет этими фоновыми сессиями.
Инструмент exec
Ключевые параметры:
command(обязательный)yieldMs(по умолчанию 10000): автоматический переход в фон после этой задержкиbackground(bool): перевести в фон немедленноtimeout(секунды, по умолчанию 1800): завершить процесс по истечении этого таймаутаelevated(bool): выполнить на хосте, если включен/разрешен привилегированный режим- Нужен реальный TTY? Установите
pty: true. workdir,env
Поведение:
- Фоновые запуски возвращают вывод напрямую.
- При переводе в фон (явном или по таймауту) инструмент возвращает
status: "running"+sessionIdи короткий хвост вывода. - Вывод хранится в памяти до тех пор, пока сессия не будет опрошена или очищена.
- Если инструмент
processзапрещён,execработает синхронно и игнорируетyieldMs/background. - Запущенные команды exec получают
OPENCLAW_SHELL=execдля контекстно-зависимых правил shell/профиля.
Мост для дочерних процессов
При запуске долгоиграющих дочерних процессов вне инструментов exec/process (например, CLI respawns или помощники шлюза) подключите вспомогательный мост для дочерних процессов, чтобы сигналы завершения передавались, а слушатели отключались при выходе/ошибке. Это позволяет избежать появления процессов-сирот в systemd и обеспечивает согласованное поведение при завершении работы на всех платформах. Переопределения переменных окружения:
PI_BASH_YIELD_MS: задержка по умолчанию (мс)PI_BASH_MAX_OUTPUT_CHARS: ограничение вывода в памяти (символов)OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS: ограничение на ожидающий stdout/stderr для каждого потока (символов)PI_BASH_JOB_TTL_MS: TTL для завершённых сессий (мс, ограничено 1м–3ч)
Конфигурация (предпочтительно):
tools.exec.backgroundMs(по умолчанию 10000)tools.exec.timeoutSec(по умолчанию 1800)tools.exec.cleanupMs(по умолчанию 1800000)tools.exec.notifyOnExit(по умолчанию true): поместить системное событие в очередь + запросить heartbeat, когда фоновый exec завершится.tools.exec.notifyOnExitEmptySuccess(по умолчанию false): если true, также помещать в очередь события завершения для успешных фоновых запусков, которые не произвели вывода.
Инструмент process
Действия:
list: запущенные + завершённые сессииpoll: получить новый вывод для сессии (также сообщает статус выхода)log: прочитать агрегированный вывод (поддерживаетoffset+limit)write: отправить stdin (data, опциональноeof)kill: завершить фоновую сессиюclear: удалить завершённую сессию из памятиremove: завершить, если запущена, иначе очистить, если завершена
Примечания:
- Только фоновые сессии перечислены/сохраняются в памяти.
- Сессии теряются при перезапуске процесса (нет сохранения на диск).
- Логи сессий сохраняются в историю чата только если вы запустите
process poll/logи результат работы инструмента будет записан. processограничен областью действия агента; он видит только сессии, запущенные этим агентом.process listвключает производноеname(глагол команды + цель) для быстрого просмотра.process logиспользует построчныеoffset/limit.- Когда и
offset, иlimitопущены, возвращаются последние 200 строк и включается подсказка о постраничном просмотре. - Когда
offsetуказан, аlimitопущен, возвращаются строки сoffsetдо конца (не ограничивается 200).
Примеры
Запустить длительную задачу и опросить позже:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }
{ "tool": "process", "action": "poll", "sessionId": "<id>" }
Запустить немедленно в фоне:
{ "tool": "exec", "command": "npm run build", "background": true }
Отправить stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }