The CLI sends its argv as a JSON array over the socket and prints the one-line reply. Queries print an aligned table for a person and are answered by the daemon, which owns the panes — no window has to be attached. Ordinary window actions are acknowledged immediately; automation, API calls, and process waits return their own results. Override the socket path with RAVEN_TERM_SOCK.
Driving it from a script or an agent? Lead with --format json (shorthand --json) and every ordinary control reply — success or failure, including a daemon that isn't running — becomes exactly one line of JSON ready for jq: queries return {"ok":true,"data":…}, actions are acknowledged with {"ok":true}, and failures return {"ok":false,"error":…} with a non-zero exit code.
The JavaScript automation guide covers typed actions, local scripts, events, and timers. ChidoriJS runs in Raven; no separate JavaScript runtime is needed. Use --remote NAME to select a saved daemon. A script still runs on the invoking machine; its API calls reach that daemon.
raven-term api list
raven-term run --wait -- make test
raven-term agent-skill install --client codex --scope project --dry-run
| Command | What it does |
|---|
| actions / keymap | Inspect registered actions and keyboard bindings |
| config check / reload / show | Validate, reload, or inspect JavaScript configuration |
| do <action> [JSON] | Run an installed action with typed arguments |
| do <file.js> / -e <JS> / - | Run a local JavaScript file, expression, or stdin |
| api list / describe <method> | Discover the daemon API and argument schemas |
| api call <method> <JSON> | Call a daemon method with validated arguments |
| events [--filter JSON] [--cursor JSON] | Read events with a resumable cursor |
| run --wait -- <program> [args] | Start a process in a pane and return its exit code |
| wait <pane> [--timeout seconds] | Wait for an existing process; timeout exits 124 |
| agent-skill install / status / remove | Manage the packaged skill for supported agents |
| remote login / logout <name> | Sign in to a Linux login server or revoke the session |
| Command | What it does |
|---|
| list-panes | lsp | Every pane across all spaces |
| list-tabs | lst | Every space with its panes |
| info | status | Full state: mode, active space, spaces |
| agents [--state s] | Panes with a detected agent; filter by idle/working/blocked |
| Command | What it does |
|---|
| new-tab | neww | Open a new space (an agent space in agent mode) |
| next-tab / prev-tab | Cycle spaces |
| select-tab <n> | Activate a space by index |
| Command | What it does |
|---|
| split | splitw | Split focused pane / add agent side pane |
| focus <id> | Focus a pane by id |
| close-pane [id] | Close the focused pane, or one by id |
| move-pane <dest> [id] | Move a pane into another space, or `new` |
| break-pane [id] | Pull a pane out into its own space |
| Command | What it does |
|---|
| mode <agent|default> | Switch the active space's layout mode |
| worktree | wt | Open the worktree picker (no chord — the verb is the way in) |
| worktree up [path] | Run the project's up scripts, one pane each |
| worktree down [path] | Run down scripts, close the env panes |
| Command | What it does |
|---|
| attach | Open a window onto the live session |
| suspend-pane / resume-pane | Park an idle agent, or bring it back |
| restore --previous | Put back the generation a short restore came from |
| memory | Live per-pane memory, naming each pane’s agent |
| Command | What it does |
|---|
| teams login | status | Sign this device in; see the roster |
| teams cover @login | Delegate your approvals for a bounded time |
| teams share <pane> @login | Grant Watch on one pane; --drive adds typing |
| fleet status | Authority, boot epoch, gates, open packets, outbox |
Each word is a tmux-style key name (Enter, Escape, C-c, M-x, F1–F12, arrows, paging) or literal text. --literal forces plain text, --enter appends a carriage return, --pane targets any pane.
raven-term send-keys "git status" Enter
raven-term send-keys C-c
raven-term send-keys --pane 3 --literal "npm run dev" --enter
# a full scripted layout
raven-term split && raven-term split
raven-term send-keys --pane 2 --literal "claude" --enter
raven-term --json agents --state blocked | jq .data