Files
openclaw/docs/tools/exec.md

108 lines
3.3 KiB
Markdown
Raw Normal View History

2026-01-03 01:56:43 +00:00
---
summary: "Exec tool usage, stdin modes, and TTY support"
2026-01-03 01:56:43 +00:00
read_when:
- Using or modifying the exec tool
2026-01-03 01:56:43 +00:00
- Debugging stdin or TTY behavior
---
# Exec tool
2026-01-03 01:56:43 +00:00
Run shell commands in the workspace. Supports foreground + background execution via `process`.
If `process` is disallowed, `exec` runs synchronously and ignores `yieldMs`/`background`.
2026-01-07 23:35:04 +01:00
Background sessions are scoped per agent; `process` only sees sessions from the same agent.
2026-01-03 01:56:43 +00:00
## Parameters
- `command` (required)
2026-01-18 04:27:33 +00:00
- `workdir` (defaults to cwd)
- `env` (key/value overrides)
2026-01-03 20:15:02 +00:00
- `yieldMs` (default 10000): auto-background after delay
2026-01-03 01:56:43 +00:00
- `background` (bool): background immediately
- `timeout` (seconds, default 1800): kill on expiry
2026-01-17 04:57:04 +00:00
- `pty` (bool): run in a pseudo-terminal when available (TTY-only CLIs, coding agents, terminal UIs)
2026-01-18 04:27:33 +00:00
- `host` (`sandbox | gateway | node`): where to execute
- `security` (`deny | allowlist | full`): enforcement mode for `gateway`/`node`
- `ask` (`off | on-miss | always`): approval prompts for `gateway`/`node`
- `node` (string): node id/name for `host=node`
- `elevated` (bool): alias for `host=gateway` + `security=full` when sandboxed and allowed
Notes:
- `host` defaults to `sandbox`.
- `elevated` is ignored when sandboxing is off (exec already runs on the host).
- `gateway`/`node` approvals are controlled by `~/.clawdbot/exec-approvals.json`.
- `node` requires a paired node (macOS companion app).
- If multiple nodes are available, set `exec.node` or `tools.exec.node` to select one.
2026-01-03 01:56:43 +00:00
2026-01-17 05:43:27 +00:00
## Config
- `tools.exec.notifyOnExit` (default: true): when true, backgrounded exec sessions enqueue a system event and request a heartbeat on exit.
2026-01-18 04:27:33 +00:00
- `tools.exec.host` (default: `sandbox`)
- `tools.exec.security` (default: `deny`)
- `tools.exec.ask` (default: `on-miss`)
- `tools.exec.node` (default: unset)
2026-01-17 05:43:27 +00:00
2026-01-18 06:11:38 +00:00
## Session overrides (`/exec`)
Use `/exec` to set **per-session** defaults for `host`, `security`, `ask`, and `node`.
Send `/exec` with no arguments to show the current values.
Example:
```
/exec host=gateway security=allowlist ask=on-miss node=mac-1
```
2026-01-18 01:33:52 +00:00
## Exec approvals (macOS app)
2026-01-18 04:27:33 +00:00
Sandboxed agents can require per-request approval before `exec` runs on the gateway or node host.
2026-01-18 01:33:52 +00:00
See [Exec approvals](/tools/exec-approvals) for the policy, allowlist, and UI flow.
2026-01-03 01:56:43 +00:00
## Examples
Foreground:
```json
{"tool":"exec","command":"ls -la"}
2026-01-03 01:56:43 +00:00
```
Background + poll:
```json
{"tool":"exec","command":"npm run build","yieldMs":1000}
2026-01-03 01:56:43 +00:00
{"tool":"process","action":"poll","sessionId":"<id>"}
```
Send keys (tmux-style):
```json
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["C-c"]}
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Up","Up","Enter"]}
```
2026-01-17 06:38:47 +00:00
Submit (send CR only):
```json
{"tool":"process","action":"submit","sessionId":"<id>"}
```
Paste (bracketed by default):
```json
{"tool":"process","action":"paste","sessionId":"<id>","text":"line1\nline2\n"}
```
## apply_patch (experimental)
`apply_patch` is a subtool of `exec` for structured multi-file edits.
Enable it explicitly:
```json5
{
tools: {
exec: {
applyPatch: { enabled: true, allowModels: ["gpt-5.2"] }
}
}
}
```
Notes:
- Only available for OpenAI/OpenAI Codex models.
- Tool policy still applies; `allow: ["exec"]` implicitly allows `apply_patch`.
2026-01-17 05:43:27 +00:00
- Config lives under `tools.exec.applyPatch`.