Native hollow cli …

June 4, 2026 · View on GitHub

The native CLI subcommand talks directly to the running Hollow host's command socket. It does not need a tty, does not need shell integration sourced, and is the fastest option when a Hollow window is already running.

Running it

hollow.exe cli <command> [...]
hollow.exe cli --help

hollow.exe cli … is the same launcher as the GUI; the cli token is intercepted by src/main.zig:guiMain before the GUI is started.

Global options

FlagEffect
--prettyPretty-print JSON output
--quietSuppress success output
--envelopePrint the full reply envelope, not just the payload
--timeout NSeconds to wait for a reply (default 1.5)

get ... commands print JSON payloads. Mutating commands are silent on success; pass --envelope to see the full reply.

Commands

get

Query state. All get commands print JSON.

CommandArgs
hollow cli get pane[--id ID]
hollow cli get pane-text[--id ID]
hollow cli get current-pane
hollow cli get tab[--id ID]
hollow cli get current-tab
hollow cli get tabs
hollow cli get panes[--tag TAG]
hollow cli get workspace[--id ID|--index N]
hollow cli get current-workspace
hollow cli get workspaces
hollow cli get domain
hollow cli get htp <channel>[params-json]

workspace

CommandArgs
hollow cli workspace new[--cwd PATH] [--domain NAME] [--cmd CMD] [--name NAME]
hollow cli workspace close[--id ID|--index N]
hollow cli workspace next
hollow cli workspace prev
hollow cli workspace select <index>
hollow cli workspace rename <name>[--id ID|--index N]

tab

CommandArgs
hollow cli tab new[--cmd CMD] [--domain NAME]
hollow cli tab close[--id ID|--index N]
hollow cli tab next
hollow cli tab prev
hollow cli tab select <index>
hollow cli tab rename <name>[--id ID|--index N]

pane

CommandArgs
hollow cli pane split vertical|horizontal[--cmd CMD] [--cwd PATH] [--domain NAME] [--ratio N]
hollow cli pane popup <cmd>[--cwd PATH] [--domain NAME] [--x N] [--y N] [--width N] [--height N]
hollow cli pane close[--id ID|--tag TAG]
hollow cli pane zoom[--id ID|--tag TAG]
hollow cli pane float[--id ID|--tag TAG]
hollow cli pane tile[--id ID|--tag TAG]
hollow cli pane move <left|right|up|down>[--id ID|--tag TAG] [--amount N]
hollow cli pane resize <left|right|up|down>[--id ID|--tag TAG] [--amount N]
hollow cli pane send-text <text>[--id ID|--tag TAG]
hollow cli pane set-tag <tag>[--id ID|--tag TAG]
hollow cli pane remove-tag <tag>[--id ID|--tag TAG]
hollow cli pane set-tags [tag ...][--id ID|--tag TAG]

focus, scroll, config

CommandArgs
hollow cli focus <left|right|up|down>
hollow cli scroll <top|bottom|page-up|page-down>
hollow cli config reload
hollow cli config theme <name>

run, send-keys, emit

CommandArgs
hollow cli run <cmd>[--domain NAME]
hollow cli send-keys <keys>[--id ID|--tag TAG]
hollow cli emit <channel>[payload-json]

send-keys decodes a kit/kb-style key sequence; for example {Up}{Enter} sends the Up arrow followed by Enter.

Targeting panes: --id vs --tag

Many pane commands accept both --id and --tag. When both are omitted, the active pane is targeted. When --tag is given, the command runs on every pane carrying that tag.

# Send text to the pane tagged "editor"
hollow.exe cli pane send-text "hello" --tag editor

# Zoom the pane tagged "build"
hollow.exe cli pane zoom --tag build

Examples

# Open a new workspace in pwsh at C:/code/backend
hollow.exe cli workspace new --cwd "C:/code/backend" --domain pwsh --name backend

# Split vertical, run npm dev in a WSL pane
hollow.exe cli pane split vertical --domain wsl --cmd "npm run dev"

# Send Ctrl-C to the active pane
hollow.exe cli send-keys "{C-c}"

# Reload the config
hollow.exe cli config reload

# Switch to theme "rose-pine"
hollow.exe cli config theme rose-pine

# Custom HTP emit
hollow.exe cli emit notify '{"text":"build done","ttl":2000}'

# Custom HTP query
hollow.exe cli get htp echo '{"value":42}'

See also