Gateway
Фоновое выполнение и инструмент процессов
OpenClaw выполняет команды оболочки через инструмент exec и хранит длительные задачи в памяти. Инструмент process управляет этими фоновыми сеансами.
Инструмент exec
Ключевые параметры:
command(обязательный)yieldMs(по умолчанию 10000): автоматический перевод в фон после этой задержкиbackground(bool): сразу перевести в фонtimeout(секунды, по умолчаниюtools.exec.timeoutSec): завершить процесс после этого тайм-аута; задавайтеtimeout: 0только чтобы отключить тайм-аут процесса exec для этого вызоваelevated(bool): запускать вне песочницы, если повышенный режим включен/разрешен (gatewayпо умолчанию илиnode, когда целью exec являетсяnode)- Нужен настоящий TTY? Установите
pty: true. workdir,env
Поведение:
- Запуски на переднем плане возвращают вывод напрямую.
- При переводе в фон (явном или по тайм-ауту) инструмент возвращает
status: "running"+sessionIdи короткий хвост вывода. - Фоновые запуски и запуски с
yieldMsнаследуютtools.exec.timeoutSec, если вызов не задает явныйtimeout. - Вывод хранится в памяти, пока сеанс не будет опрошен или очищен.
- Если инструмент
processзапрещен,execвыполняется синхронно и игнорируетyieldMs/background. - Запущенные команды exec получают
OPENCLAW_SHELL=execдля правил оболочки/профиля, учитывающих контекст. - Для длительной работы, которая начинается сейчас, запустите ее один раз и полагайтесь на автоматическое пробуждение при завершении, когда оно включено и команда выводит данные или завершается с ошибкой.
- Если автоматическое пробуждение при завершении недоступно или нужно подтвердить тихий успешный
результат для команды, которая завершилась без ошибок и без вывода, используйте
processдля подтверждения завершения. - Не имитируйте напоминания или отложенные повторные действия циклами
sleepили повторным опросом; используйте cron для будущей работы.
Связка дочерних процессов
При запуске длительных дочерних процессов вне инструментов exec/process (например, перезапуски CLI или вспомогательные процессы gateway) подключайте вспомогательную связку дочернего процесса, чтобы сигналы завершения пересылались, а слушатели отсоединялись при выходе/ошибке. Это предотвращает осиротевшие процессы в systemd и сохраняет единое поведение завершения работы на разных платформах.
Переопределения окружения:
OPENCLAW_BASH_YIELD_MS: задержка yield по умолчанию (мс)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)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)send-keys: отправить явные токены клавиш или байты в сеанс на базе PTYsubmit: отправить Enter / возврат каретки в сеанс на базе PTYpaste: отправить буквальный текст, опционально обернутый в режим bracketed pastekill: завершить фоновый сеансclear: удалить завершенный сеанс из памятиremove: завершить, если выполняется, иначе очистить, если завершен
Примечания:
- Только фоновые сеансы отображаются в списке и сохраняются в памяти.
- Сеансы теряются при перезапуске процесса (без сохранения на диск).
- Журналы сеансов сохраняются в историю чата только если вы запускаете
process poll/log, а результат инструмента записывается. processограничен областью агента; он видит только сеансы, запущенные этим агентом.- Используйте
poll/logдля статуса, журналов, подтверждения тихого успеха или подтверждения завершения, когда автоматическое пробуждение при завершении недоступно. - Используйте
logперед восстановлением интерактивного CLI, чтобы текущий transcript, состояние stdin и подсказка ожидания ввода были видны вместе. - Используйте
write/send-keys/submit/paste/kill, когда нужен ввод или вмешательство. process listвключает производноеname(глагол команды + цель) для быстрого просмотра.process list,pollиlogсообщаютwaitingForInputтолько когда у сеанса все еще есть доступный для записи stdin и он простаивал дольше порога ожидания ввода.process logиспользует построчныеoffset/limit.- Когда и
offset, иlimitопущены, возвращаются последние 200 строк и включается подсказка по страницам. - Когда
offsetуказан, аlimitопущен, возвращаются строки отoffsetдо конца (без ограничения 200). - Опрос предназначен для статуса по требованию, а не для планирования циклов ожидания. Если работа должна произойти позже, используйте 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" }