Commands use vibeke <noun> <verb> [positionals] [--flag value]. Each command calls a control-API method. See the API reference.
Global flags are --session NAME, --machine NAME, --socket PATH, --timeout MS, --json, --pretty, --quiet, and --no-spawn.
Use --json to print JSON. Non-terminal output also uses JSON.
Main commands
vibekeorvibeke attach: connect the terminal client. Start the server if necessary.vibeke ssh <host>: connect to a remote host.vibeke update: update the binary.vibeke doctor: check the installation.vibeke doctor --rebuild-index: rebuild the scrollback search index. Stop the server first.vibeke forget --pane p|--workspace w|--before t|--all [--yes] [--dry-run]: delete archived scrollback throughscrollback.forget.vibeke --skill: print the agent instructions.vibeke --default-config: print the configuration template.vibeke --version: print the version.
vibeke server
| Verb | Positionals | Method | Description |
|---|---|---|---|
status | - | server.status | server pid, version, panes, clients |
stop | - | server.stop | Stop the server. Holders remain active unless you use --kill-panes. |
reload-config | - | server.reload_config | reload config.toml |
vibeke session
| Verb | Positionals | Method | Description |
|---|---|---|---|
snapshot | - | session.snapshot | full session state |
list | - | session.list | sessions in the runtime and state dirs |
new | <name> | session.create | <name>: start a server for a new session |
stop | <name> | session.stop | <name> [--kill-panes] |
rename | <name> <new_name> | session.rename | <old> <new> (stopped sessions only) |
vibeke config
| Verb | Positionals | Method | Description |
|---|---|---|---|
get | <key> | config.get | [key] effective value and its source (default|user|runtime) |
set | <key> <value> | config.set | <key> <value> [--persist] (null resets; --persist writes config.toml, comments kept) |
reload | - | config.reload | re-read config.toml |
vibeke blob
| Verb | Positionals | Method | Description |
|---|---|---|---|
get | <hash> | blob.get | <hash> [--range '{"offset":0,"length":N}'] [--out file] |
stat | <hash> | blob.stat | <hash> |
put | - | blob.put | --path file | --data-b64 … |
vibeke workspace
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | workspace.list | workspaces with agent summaries |
get | <workspace> | workspace.get | |
create | <cwd> | workspace.create | --cwd DIR [--name N] [--focus] [--layout NAME] [--group G] |
rename | <workspace> <name> | workspace.rename | |
focus | <workspace> | workspace.focus | |
close | <workspace> | workspace.close | |
move | <workspace> | workspace.move | [--group g | --group ''] [--delta n] |
vibeke tab
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | tab.list | [--workspace w] |
create | - | tab.create | [--workspace w] [--cwd d] [--title t] |
rename | <tab> <title> | tab.rename | |
focus | <tab> | tab.focus | |
close | <tab> | tab.close | |
floats | <tab> | tab.floats | show/hide floats [--visible true|false] |
vibeke pane
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | pane.list | [--workspace w] [--tab t] [--has-agent] |
get | <pane> | pane.get | |
current | - | pane.current | the calling pane (needs VIBEKE_PANE_TOKEN) |
split | <pane> | pane.split | [--direction right|down|left|up] [--cwd d] [--command c] [--focus] |
focus | <pane> | pane.focus | [--direction left|right|up|down] |
close | <pane> | pane.close | |
zoom | <pane> | pane.zoom | |
resize | <pane> | pane.resize | --direction d [--percent n] |
rename | <pane> <title> | pane.rename | |
send-text | <pane> <text> | pane.send_text | [--paste auto|bracketed|raw] |
send-keys | <pane> <keys...> | pane.send_keys | keys use the key grammar: enter ctrl+c alt+x y |
run | <pane> <command> | pane.run | [--wait] [--timeout-ms n] |
read | <pane> | pane.read | [--source visible|recent|recent_unwrapped|scrollback|archive] [--lines n] [--from N --to M (archive: absolute lines)] |
wait-output | <pane> <match> | pane.wait_output | [--regex r] [--timeout-ms n] |
wait-idle | <pane> | pane.wait_idle | [--quiet-ms n] [--timeout-ms n] |
mark-unread | <pane> | pane.mark_unread | |
pin | <pane> | pane.pin | |
move | <pane> | pane.move | [pane] --to-tab t | --to-workspace w | --new-tab-in w [--direction right] [--anchor p] [--focus] |
scroll | <pane> <to> | pane.scroll | [pane] bottom|top|line [--line n] | --delta n |
screenshot | <pane> | pane.screenshot | [pane] [--format ansi|text|html] [--source visible|recent] [--out file] |
float | <pane> | pane.float | [pane] float/move it | --tab t [--command c] [--cwd d] [--rect '{"x":15,"y":15,"w":70,"h":70}'] [--focus] |
embed | <pane> | pane.embed | [--target p] [--direction right|down|left|up] |
vibeke agent
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | agent.list | [--workspace w] [--harness h] [--all-machines] |
get | <target> | agent.get | |
start | <name> | agent.start | --harness claude|codex [--pane p] [--args a,b] [--yolo] [--isolate host|sandbox] [--network p] |
spawn | <name> | agent.spawn | --harness h [--split-of p] [--prompt text] [--focus] |
prompt | <target> <text> | agent.prompt | [--wait] [--timeout-ms n] |
wait | <target> | agent.wait | [--until idle,done,needs_approval,...] [--timeout-ms n] |
interrupt | <target> | agent.interrupt | |
send-keys | <target> <keys...> | agent.send_keys | |
read | <target> | agent.read | [--source visible|recent|transcript] [--lines n] |
transcript | <target> | agent.transcript | [--limit n] |
rename | <target> <name> | agent.rename | |
release | <target> | agent.release | |
resume | <run> | agent.resume | [--pane p] |
resumable | - | agent.resumable | ended runs that can be resumed |
harnesses | - | agent.harnesses |
vibeke interaction
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | interaction.list | [--status open] |
get | <interaction> | interaction.get | |
answer | <interaction> | interaction.answer | --allow | --deny | --allow-always | --choice q=o | --text t |
cancel | <interaction> | interaction.cancel |
vibeke ask
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | interaction.list | alias of interaction list |
answer | <interaction> | interaction.answer | alias of interaction answer |
vibeke notification
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | notification.list | |
send | <title> <body> | notification.send | |
config | - | notification.config | channels, native backend, rules |
vibeke events
| Verb | Positionals | Method | Description |
|---|---|---|---|
read | - | events.read | [--after-seq n] [--types agent.*] |
wait | - | events.wait | --types t [--timeout-ms n] |
vibeke search
| Verb | Positionals | Method | Description |
|---|---|---|---|
query | <q> | search.query | [--pane p] [--workspace w] [--since 2h|epoch-ms] [--limit n] [--context n] [--regex] [--sources live,archive] (also: vibeke search <q>) |
vibeke task
| Verb | Positionals | Method | Description |
|---|---|---|---|
new | <title> | task.create | [--repo .] [--agent claude:name] [--base ref] [--root sibling] [--isolation worktree|jj_workspace|none|auto] [--yolo] [--isolate host|sandbox|container] [--network none|harness-apis|package-registries|dev|open] [--image ref] [--code clone|worktree] [--devcontainer] [--build] |
list | - | task.list | |
park | <task> | task.park | <task> stop its agents gracefully, keep the worktree |
resume | <task> | task.resume | <task> restart the parked agents from their sessions |
sync | <task> | task.sync | <task> [--direction pull|push|both] [--force]: host-side fetch of a container task's commits (push = host commits into the box) |
get | <task> | task.get | |
track | - | task.track | [--pane @current|--run r] [--turn N] [--title t] [--criterion text]... [--stop-at draft_pr] — track the agent's work (no send, no spawn) |
sources | - | task.sources | [--pane p|--run r] — recent requests you can track |
show | <task> | task.detail | intent, bindings, baseline, messages |
intent | <task> | task.intent.get | [--revision N] |
edit | <task> | task.intent.update | [--title t] [--add-criterion text] [--stop-at x] [--expected-revision N] — record-only |
bind | <task> | task.bind | [--pane p|--run r] [--role implementation] |
unbind | <task> | task.unbind | [--binding b] |
set | <task> | task.set | [--priority N] [--effort quick|minutes|deep|unknown] [--effort-source heuristic|assistant:<request>] |
snapshot | <task> | task.review.snapshot | <task> — capture uncommitted work as an immutable, accept-capable subject (files, index and branches stay as they are) |
snapshot-gc | <task> | task.review.snapshot.gc | [task] | --repo path [--dry-run] [--include-unrecorded] — Delete unused snapshot refs. Preserve refs used by candidates, accepted reviews, review agents, or active checks. Print deleted refs. |
effort | <task> | task.effort.estimate | <task> — your effort, the deterministic heuristic (model estimate: assist generate effort_estimate --task) |
reviewer | <task> | task.review.request_reviewer | <task> [--harness claude] [--subject s] [--prompt text] — Show the review prompt. Do not start an agent. |
reviewer-start | <request> <prompt_digest> | task.review.start_reviewer | <request> <prompt-digest> [--pane p | --split-of p] — start the confirmed reviewer run (role review) |
notes | <task> | task.review.notes | <task> — reviewer findings (agent opinions, not evidence) and reviewer runs |
note-classify | <note> <classification> | task.review.note.classify | <note> blocking|not_blocking|dismissed [--reason r] |
depend | <task> <depends_on> | task.dependency.add | <task> <depends-on> [--kind blocks|related] — confirm a dependency link (cycles refused) |
undepend | <task> <depends_on> | task.dependency.remove | <task> <depends-on> [--kind k] | --edge e |
deps | <task> | task.dependency.list | [task] — confirmed links and how many open tasks each blocks |
message | <task> <text> | task.message.prepare | [--communicates-intent] — draft only |
send | <message> | task.message.send | send a prepared message (refuses with zero bytes when unsafe) |
message-status | <message> | task.message.get | |
operation | <idempotency_key> | task.operation.get | look up a mutation receipt |
finish | <task> | task.finish | [--remove-worktree] [--force] |
setup | <task> | task.setup | run the task's setup again (after policy trust); shows the setup pane |
pr | <task> | task.pr | [--refresh] pull request status through gh (cached 60 s; needs gh installed and logged in) |
reconcile | - | task.reconcile | [--repo r] compare tasks with the worktrees on disk (marks missing, reports orphans, deletes nothing) |
vibeke sandbox
| Verb | Positionals | Method | Description |
|---|---|---|---|
status | - | sandbox.status | which isolation levels and providers work here (13 §11) |
list | - | sandbox.list | live sandbox contexts, proxies, approvals |
allow | <task> <host> | sandbox.allow | allow a domain for a sandboxed task's egress proxy |
start | <task> | sandbox.start | create or start a container task's box |
stop | <task> | sandbox.stop | Stop the task container. Its pane processes end. |
rm | <task> | sandbox.remove | <task> [--force]: sync, then remove a container box (kept when unsynced unless --force) |
vibeke policy
| Verb | Positionals | Method | Description |
|---|---|---|---|
trust | <path> | policy.trust | Trust repository automation at its current digest. Print the setup script. |
vibeke worktree
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | worktree.list | [--cwd d] |
remove | <path> | worktree.remove | [--force] [--dry-run] (async) |
repo-root | <cwd> | worktree.repo_root |
vibeke layout
| Verb | Positionals | Method | Description |
|---|---|---|---|
export | <tab> | layout.export | [tab] | --workspace w [--format toml|json] |
apply | <name> | layout.apply | <name from [layouts.*] | file.toml|.json> | --file f | --doc text [--workspace w | --cwd d --ws-name n] [--focus] |
list | - | layout.list | named layouts in config |
get | <name> | layout.get |
vibeke group
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | group.list | workspace groups |
create | <name> | group.create | [--parent g] |
rename | <group> <name> | group.rename | |
move | <group> | group.move | [--parent g] [--index n | --delta n] |
delete | <group> | group.delete | members move to the parent |
collapse | <group> | group.collapse | [--collapsed true|false] |
add | <group> <workspace> | group.add | [--index n] |
remove | <workspace> | group.remove |
vibeke theme
| Verb | Positionals | Method | Description |
|---|---|---|---|
get | - | theme.get | effective light/dark theme |
set-mode | <mode> | theme.set_mode | auto|light|dark (runtime, not persisted) |
vibeke client
| Verb | Positionals | Method | Description |
|---|---|---|---|
appearance | - | client.appearance | --dark true|false (host terminal appearance) |
focus | <pane> | client.focus | [--url vibeke://focus?…] [--no-raise] (also: vibeke focus <pane|url>) |
list | - | client.list |
vibeke status
| Verb | Positionals | Method | Description |
|---|---|---|---|
segments | - | status.segments | [--pane p] [--client c] status-bar segment data |
vibeke machine
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | machine.list | saved remote machines |
add | <label> <address> | machine.add | user@host |
remove | <machine> | machine.remove | |
connect | <machine> | machine.connect | |
disconnect | <machine> | machine.disconnect | |
status | <machine> | machine.status | |
show | <machine> | machine.show | [--offline] saved settings, remote version, link state, local artifact trust |
upgrade | <machine> | machine.upgrade | [--from artifact [--version v]] [--stage-only] [--force] verified install/upgrade |
vibeke preview
| Verb | Positionals | Method | Description |
|---|---|---|---|
declare | <port> | preview.declare | --port N [--path /p] [--label l] [--pane p] [--task k] [--tls-origin | --no-tls-origin] (proxy mode: serve this preview over https) |
list | - | preview.list | [--machine m] [--task k] [--pane p] [--all] (suggestions with --all) |
get | <preview> | preview.get | |
open | <preview> | preview.open | <v4|devbox/v4|url> [--split right|down|tab|float | --window | --proxy [--no-open] [--tls-origin | --no-tls-origin]] [--pane p] [--machine m] [--viewport WxH | --device iphone-15] |
url | <preview> | preview.url | |
mirror | <preview> | preview.mirror | <devbox/v4> Bind the remote port to this host's loopback address. This explicit connection is unauthenticated. |
unmirror | <preview> | preview.unmirror | <devbox/v4 | port> stop a mirror |
promote | <preview> | preview.promote | accept a suggestion |
forget | <preview> | preview.forget | |
show | <preview> | screenshot.list | <v4|devbox/v4> [--no-image] the latest screenshot of a preview, inline (kitty graphics, iTerm2) or path + metadata |
trust-ca | - | preview.trust_ca | [--install] [--path] print the CA file, fingerprint and per-OS instructions to trust the tls_origin CA (local; never installs without --install and a typed confirmation) |
profile | <action> <profile> | preview.profile | list | reset <profile> |
status | - | preview.status | SOCKS port, managed browsers, links |
vibeke browser
| Verb | Positionals | Method | Description |
|---|---|---|---|
open | <target> | browser.open | <preview|url> [--viewport 390x844] [--device iphone-15|pixel-8|ipad|desktop-1280|desktop-1440|desktop-1920] [--dark] — headless session on this machine |
navigate | <session> <url> | browser.navigate | <session> <url|/path> [--wait load|domcontentloaded|none] |
click | <session> <selector> | browser.click | <session> <css|text=…> | --x N --y N [--timeout-ms n] |
type | <session> <selector> <text> | browser.type | <session> [selector] <text> [--submit] [--clear] |
press | <session> <key> | browser.press | <session> <key> (enter, tab, ctrl+a, ArrowDown) |
wait | <session> <for> | browser.wait | <session> load|networkidle|selector:<css>|ms:<n> |
eval | <session> <expression> | browser.eval | <session> <js> (from a pane: needs preview.browser_script) |
screenshot | <session> | browser.screenshot | <session|preview|url> [--full-page] [--selector css] [--out f.png] — A preview or URL uses a new context for one capture. Options: [--device d] [--viewport WxH]. |
snapshot | <session> | browser.snapshot | <session> [--format a11y|text|html] [--selector css] |
dom | <session> | browser.dom | alias of snapshot |
console | <session> | browser.console | <session> [--level error|warn|all] [--since 5m] | --pane <browser pane> [--follow] [--console|--network] [--errors] (follow keys: c n e a q) |
console-split | <pane> | browser.pane.console | <browser pane> toggle the console/network split under it (prefix+alt+c) |
viewport | <pane> <viewport> | browser.pane.update | <browser pane> <WxH | fit> | --device iphone-15|pixel-8|ipad|desktop-1280|desktop-1440|desktop-1920 — pin the page size (letterboxed) |
network | <session> | browser.network | <session> [--failed] [--since 5m] |
close | <session> | browser.close | |
list | - | browser.list | sessions you can see + browser status |
status | - | browser.status | |
install | - | browser.install | [--yes] [--sha256 hex] [--url u] — asks before downloading Chrome for Testing |
take-over | <session> | browser.take_over | agent calls fail with human_control until release |
release | <session> | browser.release | |
watch | <session> | browser.watch | <session> [--pane p] [--split right|down|tab] — View an agent session in a read-only browser pane. Press prefix+t to take control. |
pane-status | - | browser.pane.status | browser panes rendered here: browsers, targets, fps |
panes | - | browser.pane.list | browser panes in this server's layout |
pane | <url> | browser.pane.create | <url> [--pane p] [--split right|down|tab] [--viewport WxH | --device iphone-15] |
command | <pane> <cmd> | browser.command | <pane> back|forward|reload|stop|navigate --url u|screenshot|window|pane |
diff | <a> <b> | browser.diff | <shotA> <shotB> [--threshold 0.1] [--force] [--out diff.png] — changed ratio, regions, diff image |
vibeke screenshot
| Verb | Positionals | Method | Description |
|---|---|---|---|
list | - | screenshot.list | [--task t] [--preview v4] [--run r] [--since 1h] [--limit 50] |
get | <id> | screenshot.get | <sN|id> [--out f.png] — environment, code state, running build, binding, path |
open | <id> | screenshot.open | <sN|id> — copy to a local temp file and open it |
diff | <a> <b> | browser.diff | <shotA> <shotB> [--threshold 0.1] [--force] [--out diff.png] |
delete | <id> | screenshot.delete | <sN|id> [--force] Human access only. Use --force for screenshots in an accepted review. |
code-state | <path> | screenshot.code_state | [dir] — Print local code state as JSON. Serve the result at /__vibeke_build. |
vibeke desk
| Verb | Positionals | Method | Description |
|---|---|---|---|
search | <text...> | desk.search | <words> [--repo dir] [--harness h] [--since 7d|YYYY-MM-DD] [--until …] [--limit n] [--sort recent] |
sessions | - | desk.sessions | [--repo dir] [--harness h] — live / resumable / neither |
open | <session> | desk.open | <session> [--turn n] [--focus] — Change focus only with --focus. Otherwise, show resume options. |
resume | <session> | desk.resume | <session> [--pane p] = Resume native session | --mode new_agent [--start --harness h] = Start new agent with context (an unsent draft) |
context | <session> | desk.context | <session> [--turns 3-5] [--objective text] — editable context package |
forget | <session> | desk.forget | <session> | --repo dir | --workspace w | --before date — purge from the conversation index |
status | - | desk.status | indexed sources, selection, exclusions, retention |
index | - | desk.index | run an indexing pass now |
vibeke draft
| Verb | Positionals | Method | Description |
|---|---|---|---|
new | <text> | draft.create | <text|-> [--workspace w | --task t] [--file path]… [--screenshot path]… [--title t] |
list | - | draft.list | [--workspace w | --task t] [--all] |
show | <draft> | draft.get | |
edit | <draft> | draft.update | <draft> [--text t|-] [--title t] [--file path] [--remove-attachment i] [--expected-rev n] |
check | <draft> | draft.check | <draft> --run r — send_path prompt_input | open_pane_only and why |
send | <draft> | draft.send | <draft> --run r [--include-notes] [--keep] [--retry-despite-unknown] (zero bytes when unsafe) |
reconcile | <draft> | draft.reconcile | inspect an uncertain send before retrying |
combine | <ids...> | draft.combine | <draft> <draft>… [--title t] [--delete-sources] |
reorder | <order...> | draft.reorder | <draft>… in their new order |
rm | <draft> | draft.delete |
vibeke notes
| Verb | Positionals | Method | Description |
|---|---|---|---|
get | - | notes.get | [--workspace w] — never sent unless included |
set | <text> | notes.set | <text|-> [--workspace w] |
vibeke assist
| Verb | Positionals | Method | Description |
|---|---|---|---|
status | - | assistant.status | enabled/configured state, coordinator, profile, budgets, consents (no secrets) |
providers | - | assistant.providers | configured connections and profiles (no secrets) |
consent | <workspace> | assistant.consent | [workspace] [--connection c] [--classes selected_text,structured_state,review_package,screen] [--operations op,...] [--auto-send op,...] |
revoke | <workspace> | assistant.revoke | [workspace] [--connection c] — also cancels unfinished requests there |
generate | <operation> | assistant.generate | suggest_task_details|review_summary|pane_title|briefing|handoff|effort_estimate [--run r] [--turns 3,4] [--pane p] [--task t] [--workspace w] [--include-screen] — Show the exact payload. Do not send it. |
confirm | <request> <preview_digest> | assistant.confirm | <request> <preview-digest> — send the previewed payload |
show | <request> | assistant.get | <request> — lifecycle, usage, cost, sources and the generated draft |
list | - | assistant.list | [--workspace w] [--state done] [--limit 50] |
cancel | <request> | assistant.cancel | <request> |
purge | <request> | assistant.purge | <request> | --workspace w | --all — forget generated outputs |
vibeke api
| Verb | Positionals | Method | Description |
|---|---|---|---|
methods | - | api.methods | list API methods |