Gateway
Фоновое выполнение и инструмент управления процессами
OpenClaw выполняет команды оболочки с помощью инструмента exec и хранит длительно выполняющиеся задачи в памяти. Инструмент process управляет этими фоновыми сеансами.
Инструмент exec
Параметры:
| Параметр | Описание |
|---|---|
command |
Обязательный. Команда оболочки для выполнения. |
workdir |
Рабочий каталог; не указывайте, чтобы использовать cwd по умолчанию. |
env |
Дополнительные переменные окружения для команды. |
yieldMs |
Время ожидания в миллисекундах перед переводом в фоновый режим (по умолчанию 10000). |
background |
Немедленно запустить в фоновом режиме. |
timeout |
Тайм-аут в секундах (по умолчанию tools.exec.timeoutSec); по истечении процесс завершается. Установите timeout: 0, чтобы отключить тайм-аут процесса exec для этого вызова. |
pty |
Запустить в псевдотерминале, если он доступен (CLI, требующие TTY, агенты программирования). |
elevated |
Запустить вне песочницы, если режим повышения привилегий включён/разрешён (gateway по умолчанию или node, если целью exec является node). |
host |
Цель exec: auto, sandbox, gateway или node. |
node |
Идентификатор/имя Node, используется с host: "node". |
Поведение:
- Запуски на переднем плане возвращают вывод напрямую.
- При переводе в фоновый режим (явно или по тайм-ауту
yieldMs) инструмент возвращаетstatus: "running"+sessionIdи краткий фрагмент конца вывода. - Запуски в фоновом режиме и с
yieldMsнаследуютtools.exec.timeoutSec, если в вызове явно не переданtimeout. - Вывод остаётся в памяти, пока сеанс не будет опрошен или очищен.
- Если инструмент
processзапрещён,execвыполняется синхронно и игнорируетyieldMs/background. - Порождаемые команды exec получают
OPENCLAW_SHELL=execдля контекстно-зависимых правил оболочки/профиля. - Для длительной работы, начинающейся сейчас: запустите её один раз и полагайтесь на автоматическое уведомление о завершении (если оно включено), когда команда выдаст вывод или завершится с ошибкой.
- Если автоматическое уведомление о завершении недоступно или необходимо подтвердить успешное завершение команды без вывода, выполните опрос с помощью
process. - Не имитируйте напоминания или отложенные последующие действия циклами
sleepлибо повторным опросом — для будущих задач используйте cron.
Переопределения через переменные окружения
| Переменная | Действие |
|---|---|
OPENCLAW_BASH_YIELD_MS |
Время ожидания по умолчанию перед переводом в фоновый режим (мс). По умолчанию 10000, ограничено диапазоном 10-120000. |
OPENCLAW_BASH_MAX_OUTPUT_CHARS |
Ограничение объёма вывода в памяти (символы). |
OPENCLAW_BASH_PENDING_MAX_OUTPUT_CHARS |
Ограничение ожидающих данных stdout/stderr для каждого потока (символы). |
OPENCLAW_BASH_JOB_TTL_MS |
TTL завершённых сеансов (мс), ограничен диапазоном 1m-3h. |
OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS |
Порог отсутствия вывода, после которого фоновые сеансы с доступной записью помечаются как, вероятно, ожидающие ввода. По умолчанию 15000. |
Конфигурация (предпочтительнее переопределений через переменные окружения)
| Ключ | По умолчанию | Действие |
|---|---|---|
tools.exec.backgroundMs |
10000 | То же, что OPENCLAW_BASH_YIELD_MS. |
tools.exec.timeoutSec |
1800 | Тайм-аут по умолчанию для каждого вызова. |
tools.exec.cleanupMs |
1800000 | То же, что OPENCLAW_BASH_JOB_TTL_MS. |
tools.exec.notifyOnExit |
true | Поставить системное событие в очередь и запросить Heartbeat при завершении фонового exec. |
tools.exec.notifyOnExitEmptySuccess |
false | Также ставить в очередь события завершения для успешно выполненных фоновых запусков без вывода. |
Связывание дочерних процессов
При порождении длительно выполняющихся дочерних процессов вне инструментов exec/process (перезапуски CLI, вспомогательные процессы Gateway) подключайте вспомогательный мост дочерних процессов, чтобы сигналы завершения перенаправлялись, а обработчики отсоединялись при выходе/ошибке. Это предотвращает появление осиротевших процессов в systemd и обеспечивает согласованное завершение работы на разных платформах.
Инструмент process
Действия:
| Действие | Результат |
|---|---|
list |
Выполняющиеся и завершённые сеансы. |
poll |
Получить новый вывод сеанса (также сообщает статус завершения). |
log |
Прочитать объединённый вывод и подсказки по восстановлению ввода. Поддерживает offset + limit. |
write |
Отправить данные в stdin (data, необязательный eof). |
send-keys |
Отправить явные токены клавиш или байты в сеанс на базе PTY. |
submit |
Отправить Enter/возврат каретки в сеанс на базе PTY. |
paste |
Отправить буквальный текст, при необходимости обёрнутый в режим bracketed paste. |
kill |
Завершить фоновый сеанс. |
clear |
Удалить завершённый сеанс из памяти. |
remove |
Завершить принудительно, если сеанс выполняется, иначе очистить, если он завершён. |
Примечания:
- В списке сохраняются только фоновые сеансы — исключительно в памяти, не на диске. При перезапуске процесса сеансы теряются.
- Активный фоновый сеанс блокирует совместное приостановление хоста и безопасный перезапуск Gateway, пока владелец процесса не подтвердит его фактическое завершение.
process removeможет скрыть выполняющийся сеанс сразу после запроса завершения; приостановление и перезапуск остаются заблокированными до подтверждения выхода.- Журналы сеансов сохраняются в истории чата, только если выполнить
process poll/logи результат инструмента будет записан. processдействует в рамках отдельного агента; он видит только сеансы, запущенные этим агентом.- Используйте
poll/logдля получения статуса, журналов или подтверждения завершения, когда автоматическое уведомление о завершении недоступно. - Перед восстановлением интерактивного CLI используйте
log, чтобы одновременно видеть текущую расшифровку, состояние stdin и подсказку об ожидании ввода. - Используйте
write/send-keys/submit/paste/kill, когда требуется ввод или вмешательство. process listвключает вычисляемое значениеname(командный глагол + цель) для быстрого просмотра.process list,pollиlogсообщаютwaitingForInput, только когда stdin сеанса всё ещё доступен для записи и сеанс бездействует дольше порога ожидания ввода (по умолчанию 15000 мс,OPENCLAW_PROCESS_INPUT_WAIT_IDLE_MS).process logиспользует построчныеoffset/limit. Если оба параметра не указаны, возвращаются последние 200 строк с подсказкой по постраничному просмотру. Если заданoffset, аlimit— нет, возвращаются строки отoffsetдо конца (без ограничения в 200 строк).timeoutвpollожидает до указанного количества миллисекунд перед возвратом; значения свыше 30000 ограничиваются до 30000.- Опрос предназначен для получения статуса по запросу, а не для планирования циклов ожидания. Если работа должна выполняться позднее, используйте cron.
Примеры
Запустить длительную задачу и опросить её позднее:
{ "tool": "exec", "command": "sleep 5 && echo done", "yieldMs": 1000 }{ "tool": "process", "action": "poll", "sessionId": "<id>" }Проверить интерактивный сеанс перед отправкой ввода:
{ "tool": "process", "action": "log", "sessionId": "<id>" }Немедленно запустить в фоновом режиме:
{ "tool": "exec", "command": "npm run build", "background": true }Отправить данные в stdin:
{ "tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n" }Отправить клавиши PTY:
{ "tool": "process", "action": "send-keys", "sessionId": "<id>", "keys": ["C-c"] }Отправить текущую строку:
{ "tool": "process", "action": "submit", "sessionId": "<id>" }Вставить буквальный текст:
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }