The command
brunvo comes inside the app; Brunvo links it at ~/.brunvo/bin/brunvo each time it opens (the install guide has the PATH line for other terminals). It talks to Brunvo's background service, the same one the window uses, so anything you do from the command line shows in the app, in the background, without moving your focus.
- Most commands take
--jsonfor scripts and agents; the output has a schema version and stays stable. - Inside a Brunvo tab,
brunvoalready knows its session and profile, so an agent can link its own work to an issue or ask another agent without being told where it runs. - Commands that change something important, such as importing a setup file or connecting a GitHub organization, wait for your Y in the Brunvo window.
brunvo helpprints this whole reference;brunvo --versionprints the app's version.
Every command
brunvo status
brunvo status
- service status
brunvo sessions
brunvo sessions [--json]
- running sessions and their labels
brunvo desks
brunvo desks [--json]
- desks, tabs, and panes
brunvo agents
brunvo agents [--all-apps] [--json]
- agents and their state (working, blocked, idle, done); --all-apps: in every Brunvo app on this Mac, with desk, tab, and linked issues
brunvo resume
brunvo resume NAME
- resume the session's last agent exactly, in a new tab
brunvo resume TARGET [--agent A] [--here]
- reopen a parked agent where it ran (a session name: its last agent)
brunvo new
brunvo new [--folder DIR] [--desk NAME] [--agent claude|codex|opencode|grok] [--model ID]
- start a session as a new tab in DIR (default: current folder), in the named desk or the desk holding DIR
brunvo kill
brunvo kill NAME
- end a session
brunvo codex
brunvo codex [ARGS]
- what `codex` typed in a Brunvo pane runs: the interactive terminal on Brunvo's own runtime (status, renames), anything else the real codex
brunvo opencode
brunvo opencode [ARGS]
- the same for `opencode` (status, interrupt, renames, moves)
brunvo grok
brunvo grok [ARGS]
- the same for `grok` (its subcommands, -p and help go to the real grok)
brunvo events
brunvo events [--since N]
- follow session events
brunvo prompts
brunvo prompts [list|show|path|add|new|dir]
- the prompt library: ~/.brunvo/prompts and a checkout's .brunvo/prompts (brunvo prompts help)
brunvo shell-prompt
brunvo shell-prompt [status|script zsh|bash|fish]
- the prompt Brunvo's shells draw (brunvo shell-prompt help)
brunvo worktree
brunvo worktree list|defaults|new|remove|audit|sweep|keep
- worktrees (brunvo worktree help)
brunvo desk
brunvo desk rename NAME [--desk ID|NAME] [--desk-only]
- name a desk; its plain folder is renamed to match (brunvo desk help)
brunvo desk close NAME|ID|FOLDER [--park] [--dry-run]
- close a desk in Brunvo; its folder on disk is never touched
brunvo whoami
brunvo whoami [--repo OWNER/REPO] [--json]
- the session this process runs in (proven by process ancestry): desk, tab, pane, agent, checkout, linked issues; with --repo whether it is linkable to OWNER/REPO (exit 2 when not), managed:, and move:
brunvo issue
brunvo issue list [--repo OWNER/REPO | --desk NAME] [--state open|closed|all|mine|involved] [--search Q] [--refresh] [--json]
brunvo issue view N|OWNER/REPO#N [--repo OWNER/REPO] [--refresh] [--json]
brunvo issue link|unlink N|OWNER/REPO#N [--repo OWNER/REPO] [--session NAME | --provider-session ID]
- link this session (default) or the named one to an issue
brunvo issue unlink N ... [--wrong]
- an agent's unlink keeps the link and stops its time (the issue keeps the agent that worked on it); --wrong removes a mistaken link
brunvo issue links [N|OWNER/REPO#N] [--session NAME] [--json]
brunvo issue link N --session A --session B ...
- link several sessions at once (all or nothing)
brunvo issue rename-repo OLD_OWNER/REPO NEW_OWNER/REPO [--preview] [--json]
- follow a GitHub repository rename in links, references, and figures (waits for your Y in the Brunvo window)
brunvo rename-session
brunvo rename-session "TITLE" [--ask "2-5 WORDS"] [--force] | --status | --clear
- name this session once (keyed to its conversation); a name set first is kept; --ask tells sessions of one thread apart
brunvo gh
brunvo gh status [--json]
- whether the GitHub CLI is installed and signed in
brunvo ask
brunvo ask TARGET "text" [--now] [--no-submit] [--wait idle|done] [--timeout S]
- type into an agent (TARGET: tab number, session, or tab name); queued until it is idle unless --now
brunvo interrupt
brunvo interrupt TARGET
- stop a working Claude Code, Codex, OpenCode, or Grok (Escape, or OpenCode's or Grok's own stop when Brunvo started it)
brunvo wait
brunvo wait TARGET [--until idle|done|blocked|gone] [--timeout S]
brunvo watch
brunvo watch TARGET
- follow the agent's state and input until Ctrl+C
brunvo report
brunvo report [TARGET] [--json]
- each agent's state, since when, and the last thing typed
brunvo screen
brunvo screen TARGET [--lines N] [--json]
- what the agent's terminal shows now (the person and Managers)
brunvo scrollback
brunvo scrollback TARGET [--output FILE]
- save a pane's whole scrollback as text (works in limited mode)
brunvo paths
brunvo paths [--json]
- this channel's socket, folders, and names
brunvo uninstall
brunvo uninstall --dry-run [--json] [--data] [--reset-privacy] [--keep-app]
- what Settings ▸ Advanced ▸ Uninstall would do (nothing changes; without --dry-run: exit 2, uninstalling needs the app)
brunvo doctor
brunvo doctor [--json]
- one read-only health check: service, git and gh, registry modes, agent rules, provider versions, folder access, duplicate agents (exit 1 when a check failed)
brunvo move-current
brunvo move-current --target-workspace DIR [--preview] [--again] [--status] [--cancel]
- move this agent's conversation to another checkout once its turn ends (run by the agent itself, as its last command); --again when it already moved and that tab still runs; --status from either tab
brunvo agent
brunvo agent move SESSION DIR [--keep-old] [--preview] [--no-wait]
- continue an idle agent's conversation in DIR; the old pane closes once the new one has started
brunvo agent fork SESSION [DIR] [--link] [--preview] [--no-wait]
- Start with Context: a new conversation inheriting this one, beside it (or in DIR); the original keeps running
brunvo connections
brunvo connections list|health [ID]|discover|repos|projects|set FILE|remove ID|for O/R [--json]
brunvo views
brunvo views list|run ID [--refresh]|set FILE|remove ID|pins|pin KEY VIEW|unpin KEY [--json]
- connected GitHub organizations and saved views; set, remove, and pin wait for your Y in the Brunvo window
brunvo hours
brunvo hours report [--since D] [--until D] [--by issue,repo,org,label,ref,group,day,provider,connection] [--connection ID] [--repo O/R]... [--label L]... [--issue REF]... [--resolve] [--format table|csv|json] [--out FILE [--force]] [--json]
brunvo hours intervals REF [--since D] [--until D] [--json]
brunvo hours measure OWNER/REPO [--issue N] [--gap MIN] [--since YYYY-MM-DD] [--json]
- every linked agent conversation's transcript activity inside its link periods, per issue and day (--json: the schema 1 intervals an hours meter reads)
brunvo hours set REF HOURS [--day D] [--note TEXT] | hours clear REF [--day D]
brunvo hours settings [--json] | hours settings set [--gap MIN] [--round Q] [--rounding nearest|up|down] [--allocation split|full] [--per-day|--per-row] [--before-first-link on|off] [--tz ZONE]
- measured hours per issue; set, clear, and settings set wait for your Y in the Brunvo window
brunvo workhub
brunvo workhub board [--board ID] [--repo O/R] | boards | rules [--board ID] [--repo O/R] [--json]
brunvo workhub status show OWNER/REPO N [--board ID] [--json]
brunvo workhub status set OWNER/REPO N LANE [--gate G] [--force] [--yes] [--check ID]... [--add] [--board ID] [--json]
- move a card by the board's rules: one fresh read, then the write, then the lane read back (exit 1 refused, 4 unknown, 5 membership unknown)
brunvo workhub check OWNER/REPO N LANE [--gate G] [--json]
- what that move would need, without writing
brunvo workhub stages [--json]
- the board's stage launches (the setup file's, then free)
brunvo workhub launches [--json]
- recent launch/link/lane outcomes, retained across service restarts
brunvo workhub launch OWNER/REPO N STAGE [--provider claude|codex|opencode|grok] [--folder DIR] [--json]
- start the stage's agent in a new tab of the issue's checkout (issue branch for a build stage, then the link and the lane; exit 3: choose a checkout with --folder); never moves a window's focus
brunvo workhub base [OWNER/REPO [BRANCH | --clear]] [--json]
- this Mac's integration branch for a repository that declares none
brunvo setup
brunvo setup preview|import FILE [--strategy merge|replace] [--check-labels] [--accept ID|all-risky]... [--reject ID]... [--confirm NAME]...
brunvo setup export [--name N] [--id ID] [--section S]... [--connection C]... [--out FILE [--force]] | setup list [--json]
- the shareable setup file; import waits for your Y in the Brunvo window
brunvo snapshot
brunvo snapshot save [NAME] | list | show ID | restore ID | delete ID | autosave [--json]
- named snapshots of the open desks; restore only adds desks that are not open
brunvo manager
brunvo manager brief|inbox|choices|designate SESSION [--remove] [--json]
brunvo manager rename "2-5 WORDS" [--force]
- a Manager names its tab after the topic it works on now (again on each new topic); a name you gave the tab is kept unless --force
brunvo manager issues list|add|drop|handoff [--json]
- the issues each Manager handles (its tab leads with them); a Manager's verbs on an issue add them by themselves
brunvo manager workspace open --repo OWNER/REPO [--workspace ID]
brunvo manager workspace start --workspace ID --agent PROVIDER [--model ID] --request-key KEY
brunvo manager workspace status [--workspace ID] [--json]
brunvo manager workspace confirm --manager ID --provider PROVIDER --conversation ID --generation GENERATION
- native Manager terminals; only people can open/start/confirm
brunvo msg
brunvo msg list|show ID|send SESSION TEXT|deliver ID|read ID|ack ID [ID…]|report ID KIND TEXT|archive ID [--json]
- native agent coordination; delivery, read, acknowledgement and report stay separate (ack marks a delivered message read too)
brunvo goto
brunvo goto TARGET [--agent A] [--back]
- show the agent working on an issue (TARGET: OWNER/REPO#N, #N, N, an issue URL, a parked id, or a session or tab name)
brunvo park
brunvo park TARGET [--agent A] [--yes]
- close an idle agent's pane, keeping its conversation to resume
brunvo parked
brunvo parked [ISSUE] [--closed]
- parked agents (--closed: and linked conversations whose tabs closed)
brunvo move
brunvo move TARGET [DIR] [--agent A] [--worktree] [--here] [--preview] [--no-wait]
brunvo fork
brunvo fork TARGET [DIR] [--agent A] [--worktree] [--here] [--preview] [--no-link] [--no-wait]
- continue (or start with the context of) an issue's agent in DIR or the issue's checkout; --worktree makes the issue-N-slug worktree when none is (exit 3: pass --agent, DIR, or --worktree; 4: no session for that issue); a closed or parked conversation forks where it ran, into DIR, or with --worktree into the issue's checkout. A checkout another issue holds (its branch, or its agent) is refused (checkout_busy); --here shares it. It links only an open issue (a closed one starts standalone); --no-link starts standalone beside its source or in DIR. move and fork wait and print the new session (--no-wait: at once); move goes into a checkout of any repository
brunvo versions
brunvo versions [--refresh] [--json]
- installed, running, and app-server versions of Claude Code and Codex against the tested ones (exit 1 when there are warnings)
brunvo license
brunvo license [--reload] [--profile ID] [--json]
- this profile's license and what limited mode pauses; developer builds are never gated (exit 1 in limited mode)
brunvo rules
brunvo rules status|show [--json]
- Brunvo's agent rules block in ~/.claude/CLAUDE.md, ~/AGENTS.md, and the Codex, OpenCode, and Grok AGENTS.md files: current, stale, or missing
brunvo rules install [--with FILE | --without-team-rules] [--retire MARKER]... [--no-retire] [--no-launch-context] [--dry-run] [--json]
- write the block (backups first; only the marked block changes); --with adds a team's own rules kept outside Brunvo; --retire removes another tool's marked block from the same files
brunvo rules remove [--dry-run] | rules restore [BACKUP] [--force] [--json]
- take the block out, or put back the files a backup saved
brunvo ref
brunvo ref link|unlink N|OWNER/REPO#N KIND:ID|URL [--repo OWNER/REPO] [--note TEXT] | ref list [N] [--json]
- an opaque reference (email thread, ticket, request id, URL) on an issue; hours report --by ref groups by it
brunvo lease
brunvo lease acquire NAME [--note TEXT] | lease release NAME [--force] | --mine | lease list [--mine]
- a local resource this session started, held by the session until released
brunvo config
brunvo config path [--json]
- this channel's config.json (the path alone when a script reads it)
brunvo config list [--changed] [--section S] [--all] [--json]
- every setting in Settings order: value, source (file, default, environment), when a change applies, guarded and machine-only keys
brunvo config get KEY [--default] [--json]
brunvo config set KEY VALUE [--json-value] [--explicit] [--force] [--json]
- VALUE by the key's type (true|false, a number, a choice, text, a list as a,b or JSON); the default is removed from the file unless --explicit; manager_typing.claude false sets one entry
brunvo config reset KEY | --all [--yes] [--json]
- back to the default; --all keeps unknown keys, $schema, and workspace_source, asks for your Y, and saves config.json.before-reset-<time>
brunvo config schema [--out FILE [--force]]
- a JSON Schema for editor completion
brunvo config check [--json]
- every problem with its line (exit 1 when one is an error)
brunvo config export [--file FILE [--force]] [--include-machine] [--json]
- a settings bundle (.brunvo-settings.json) of what differs from the defaults; never unknown keys, tokens, or (without --include-machine) this Mac's folders and commands; stdout unless --file
brunvo config import FILE|- [--dry-run] [--include-machine] [--include-unknown] [--skip-guarded] [--json]
- what the bundle changes, then a copy (config.json.before-import-<time>) and one write; keys it does not name stay; a newer bundle is refused Exit 1 invalid value or unreadable file, 2 usage, 3 a guarded key (agents, extensions) without a person's proof: set it in Settings or in config.json, 4 unknown key
brunvo keys
brunvo keys path [--json]
- this channel's keybindings.json (the path alone when a script reads it)
brunvo keys list [--context C] [--changed] [--json]
- every key the app runs: context, key, action id, title, and source (default or keybindings.json:LINE); --changed only the file's keys and the defaults it removed
brunvo keys check [--json]
- every problem in keybindings.json with its line (exit 1 on an error)
brunvo profiles
brunvo profiles [list] [--json]
- this channel's profiles (* the one this command acts in); read from profiles.json when no service answers
brunvo profiles show [ID] [--json]
brunvo profiles create NAME [--color C] [--monogram M] [--json]
brunvo profiles update ID [--name NAME] [--color C] [--monogram M] [--json]
brunvo profiles rename ID NAME
- a profile's name, colour (blue indigo purple pink teal brown graphite), and monogram; people only, never agents
brunvo profiles open ID
- open the profile's window in the app
brunvo profiles remove ID [--yes] [--json]
- what removing it ends and deletes here; with --yes, remove it: its desks, settings, and snapshots go and its sessions end (Default is never removed; people only)
brunvo which-session
brunvo which-session [PID] [--check SESSION] [--json]
- the session PID (default: this shell) runs in, proven by process ancestry: desk, tab, agent, proof (exit 1 not in a session; --check alone: 0 alive, 1 gone)
brunvo memory
brunvo memory [--desk ID|NAME] [--session NAME] [--json]
- footprint and resident memory per desk and session, the largest process, the service, and the total
Options for every command
--channel prod|beta|dev
- the service to talk to (default: the invoked name, then BRUNVO_CHANNEL, then production)
--profile ID
- the profile to act in (default: BRUNVO_PROFILE inside a session of this channel, then Default); people may name any profile, an agent acts in its own session's. Profiles keep work apart; they are not a security boundary
--version
- this app's version and build number
Prompts and profiles in full
Prompts: brunvo prompts help
usage: brunvo prompts [list] [--repo OWNER/REPO] [--checkout DIR] [--json]
brunvo prompts show NAME the prompt's full text
brunvo prompts path NAME the original file's path (an alias resolved)
brunvo prompts add FILE... [--folder SECTION] [--copy]
add files or folders as Finder aliases (--copy: copies)
brunvo prompts new TITLE [--folder SECTION]
a new prompt; its text from standard input
brunvo prompts dir the library folder
NAME is a prompt's title, file name, or id, or words that match one prompt. The library is
Settings ▸ Prompts' folder, else ~/.brunvo/prompts (BRUNVO_PROMPTS_DIR overrides both); a checkout's .brunvo/prompts adds "This
repository" (the current folder's checkout unless --checkout names another). In a profile other than
Default (--profile ID, or a session's BRUNVO_PROFILE) the default library is ~/.brunvo/profiles/ID/prompts.
Profiles: brunvo profiles help
usage: brunvo profiles [list] [--json]
brunvo profiles show [ID] [--json]
brunvo profiles create NAME [--color C] [--monogram M] [--json]
brunvo profiles update ID [--name NAME] [--color C] [--monogram M] [--json]
brunvo profiles rename ID NAME [--json]
brunvo profiles open ID
brunvo profiles remove ID [--yes] [--json]
Some commands are for agents working inside Brunvo (whoami, issue link, rename-session, msg) and some need features you turn on in Settings (GitHub connections, Work Hub, hours). Each says so when it cannot run.
Generated from Brunvo 0.1.0’s own tables, so it matches the app you download.