Runs shell commands on the local machine (where Navi's server is running).
The tool supports two modes:
run) — execute a command and wait for the result. Classic behaviour.open/close/list/status/send_input) — create named terminal sessions that survive across tool calls. Use this for long-running processes (dev servers, build pipelines) or interactive workflows (programs that read stdin).run — one-shot executionRun a command and return the full output immediately.
Parameters:
action: "run"command (string, required) — the shell commandworking_dir (string, optional) — directory to run intimeout (integer, optional, default 20, max 300) — seconds to waitExample:
{
"action": "run",
"command": "ls -la",
"working_dir": "/home/gmikcon/Projects/navi-1"
}
open — start a persistent terminal sessionCreate a named terminal that keeps running in the background.
Parameters:
action: "open"terminal_name (string, required) — unique name for this terminaldescription (string, required) — why you opened it (shown in list)command (string, required) — the command to runbackground (boolean, optional, default false) — if true, returns immediately; if false, waits for completion but still creates a persistent sessionworking_dir (string, optional)timeout (integer, optional)Example — background dev server:
{
"action": "open",
"terminal_name": "dev_server",
"description": "Local HTTP dev server",
"command": "python -m http.server 8765",
"background": true
}
Important:
terminal_name must be unique per Navi session. Opening with an existing name will fail.background: false) terminals automatically close after the command finishes.close — stop a persistent terminalKill the process and remove the session.
Parameters:
action: "close"terminal_name (string, required)list — show active terminalsReturns all running/persistent terminals for the current Navi session with status (busy/idle), PID, and uptime.
Parameters:
action: "list"status — detailed info about one terminalReturns command, PID, CWD, uptime, and the last 20 lines of output.
Parameters:
action: "status"terminal_name (string, required)send_input — write to a terminal's stdinSend text to a background terminal that is waiting for input (e.g. cat, python REPL, npm init).
Parameters:
action: "send_input"terminal_name (string, required)input (string, required) — text to send. Include \n for Enter.Example:
{
"action": "send_input",
"terminal_name": "interactive_python",
"input": "print(2 + 2)\n"
}
run| Situation | Use |
|---|---|
| Single command with quick output | run |
| Long-running server or daemon | open with background: true |
| Interactive program needing stdin | open + send_input |
| Sequence of commands sharing state | Not yet supported (each open is a new shell). Use run with ; or write a script. |
user_data/<user_id>/) and a curated allowlist.python -c, node -e, etc.) are blocked for non-admins.TERMINAL_ALLOWED_COMMANDS=*.run defaults to 20s; background terminals are cleaned up after 30 min of inactivity).