docs/reference

CLI reference

Every command, flag, and corresponding API method.

The build generates this reference from the source. Automated checks detect differences.

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

  • vibeke or vibeke 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 through scrollback.forget.
  • vibeke --skill: print the agent instructions.
  • vibeke --default-config: print the configuration template.
  • vibeke --version: print the version.

vibeke server

VerbPositionalsMethodDescription
status-server.statusserver pid, version, panes, clients
stop-server.stopStop the server. Holders remain active unless you use --kill-panes.
reload-config-server.reload_configreload config.toml

vibeke session

VerbPositionalsMethodDescription
snapshot-session.snapshotfull session state
list-session.listsessions 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

VerbPositionalsMethodDescription
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.reloadre-read config.toml

vibeke blob

VerbPositionalsMethodDescription
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

VerbPositionalsMethodDescription
list-workspace.listworkspaces 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

VerbPositionalsMethodDescription
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.floatsshow/hide floats [--visible true|false]

vibeke pane

VerbPositionalsMethodDescription
list-pane.list[--workspace w] [--tab t] [--has-agent]
get<pane>pane.get
current-pane.currentthe 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_keyskeys 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

VerbPositionalsMethodDescription
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.resumableended runs that can be resumed
harnesses-agent.harnesses

vibeke interaction

VerbPositionalsMethodDescription
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

VerbPositionalsMethodDescription
list-interaction.listalias of interaction list
answer<interaction>interaction.answeralias of interaction answer

vibeke notification

VerbPositionalsMethodDescription
list-notification.list
send<title> <body>notification.send
config-notification.configchannels, native backend, rules

vibeke events

VerbPositionalsMethodDescription
read-events.read[--after-seq n] [--types agent.*]
wait-events.wait--types t [--timeout-ms n]
VerbPositionalsMethodDescription
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

VerbPositionalsMethodDescription
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.detailintent, 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.sendsend a prepared message (refuses with zero bytes when unsafe)
message-status<message>task.message.get
operation<idempotency_key>task.operation.getlook up a mutation receipt
finish<task>task.finish[--remove-worktree] [--force]
setup<task>task.setuprun 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

VerbPositionalsMethodDescription
status-sandbox.statuswhich isolation levels and providers work here (13 §11)
list-sandbox.listlive sandbox contexts, proxies, approvals
allow<task> <host>sandbox.allowallow a domain for a sandboxed task's egress proxy
start<task>sandbox.startcreate or start a container task's box
stop<task>sandbox.stopStop 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

VerbPositionalsMethodDescription
trust<path>policy.trustTrust repository automation at its current digest. Print the setup script.

vibeke worktree

VerbPositionalsMethodDescription
list-worktree.list[--cwd d]
remove<path>worktree.remove[--force] [--dry-run] (async)
repo-root<cwd>worktree.repo_root

vibeke layout

VerbPositionalsMethodDescription
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.listnamed layouts in config
get<name>layout.get

vibeke group

VerbPositionalsMethodDescription
list-group.listworkspace 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.deletemembers move to the parent
collapse<group>group.collapse[--collapsed true|false]
add<group> <workspace>group.add[--index n]
remove<workspace>group.remove

vibeke theme

VerbPositionalsMethodDescription
get-theme.geteffective light/dark theme
set-mode<mode>theme.set_modeauto|light|dark (runtime, not persisted)

vibeke client

VerbPositionalsMethodDescription
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

VerbPositionalsMethodDescription
segments-status.segments[--pane p] [--client c] status-bar segment data

vibeke machine

VerbPositionalsMethodDescription
list-machine.listsaved remote machines
add<label> <address>machine.adduser@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

VerbPositionalsMethodDescription
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.promoteaccept 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.profilelist | reset <profile>
status-preview.statusSOCKS port, managed browsers, links

vibeke browser

VerbPositionalsMethodDescription
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.domalias 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.listsessions 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_overagent 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.statusbrowser panes rendered here: browsers, targets, fps
panes-browser.pane.listbrowser 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

VerbPositionalsMethodDescription
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

VerbPositionalsMethodDescription
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.statusindexed sources, selection, exclusions, retention
index-desk.indexrun an indexing pass now

vibeke draft

VerbPositionalsMethodDescription
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.reconcileinspect 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

VerbPositionalsMethodDescription
get-notes.get[--workspace w] — never sent unless included
set<text>notes.set<text|-> [--workspace w]

vibeke assist

VerbPositionalsMethodDescription
status-assistant.statusenabled/configured state, coordinator, profile, budgets, consents (no secrets)
providers-assistant.providersconfigured 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.generatesuggest_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

VerbPositionalsMethodDescription
methods-api.methodslist API methods
View page source Documentation from this build