78 lines
2.3 KiB
Markdown
78 lines
2.3 KiB
Markdown
---
|
|
summary: "Exec tool usage, stdin modes, and TTY support"
|
|
read_when:
|
|
- Using or modifying the exec tool
|
|
- Debugging stdin or TTY behavior
|
|
---
|
|
|
|
# Exec tool
|
|
|
|
Run shell commands in the workspace. Supports foreground + background execution via `process`.
|
|
If `process` is disallowed, `exec` runs synchronously and ignores `yieldMs`/`background`.
|
|
Background sessions are scoped per agent; `process` only sees sessions from the same agent.
|
|
|
|
## Parameters
|
|
|
|
- `command` (required)
|
|
- `yieldMs` (default 10000): auto-background after delay
|
|
- `background` (bool): background immediately
|
|
- `timeout` (seconds, default 1800): kill on expiry
|
|
- `pty` (bool): run in a pseudo-terminal when available (TTY-only CLIs, coding agents, terminal UIs)
|
|
- `elevated` (bool): run on host if elevated mode is enabled/allowed (only changes behavior when the agent is sandboxed)
|
|
- Need a fully interactive session? Use `pty: true` and the `process` tool for stdin/output.
|
|
Note: `elevated` is ignored when sandboxing is off (exec already runs on the host).
|
|
|
|
## Config
|
|
|
|
- `tools.exec.notifyOnExit` (default: true): when true, backgrounded exec sessions enqueue a system event and request a heartbeat on exit.
|
|
|
|
## Examples
|
|
|
|
Foreground:
|
|
```json
|
|
{"tool":"exec","command":"ls -la"}
|
|
```
|
|
|
|
Background + poll:
|
|
```json
|
|
{"tool":"exec","command":"npm run build","yieldMs":1000}
|
|
{"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"]}
|
|
```
|
|
|
|
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`.
|
|
- Config lives under `tools.exec.applyPatch`.
|