CLI Reference
Every verb the jurniti CLI ships — rendered from the binary's own command registry, so it can never drift from what you actually run.
Every verb the CLI ships
This page is for the terminal binary. If you only use the browser, start at Dashboard or Quickstart — you do not need these verbs day to day.
The table below mirrors the CLI's own command tree — the same list
jurniti docs --format=md prints in your terminal and the same set your
agent gets over MCP. The CLI's own output is the authoritative copy: it is
generated from the shipped binary's registry, which is test-locked against
the dispatch table in both directions.
| Command | What it does |
|---|---|
jurniti login | authenticate this machine via the device flow (browser-optional) |
jurniti whoami | show the identity the active API key resolves to |
jurniti harnesses | list the available agent types and each one's auth requirement |
jurniti up --plan <p> --harness <h> [--cycle monthly|annual] | --tier ondemand|spot --harness <h> [--count N --tier spot] [--group NAME] | provision a paid VM (flat plan charges your saved card; a usage tier meters hourly from prepaid credits). --count N fans out N agents at once (a swarm) — swarm agents are Spot-only, so --count requires --tier spot; --group NAME saves the swarm as a cohort for run/cp --group |
jurniti auth <vm> [--set K=V | --login] | show how to make a VM work (set a BYOK key or one-time login). --set writes a BYOK key; --login opens a terminal on the VM and runs the agent's own interactive sign-in (e.g. a Claude subscription), so no credential is ever stored outside the VM |
jurniti shell <vm> [--login] | open an interactive terminal inside your agent (Ctrl-] to leave). --login runs the agent's own sign-in command for you; the browser opens locally and the credential is minted inside the VM |
jurniti stop <id> | pause a VM (persist preserved) |
jurniti start <id> | resume a stopped VM |
jurniti restart <id> | bounce a VM (reset rootfs, keep your data) |
jurniti reprovision <id> | rebuild the guest, preserving your data |
jurniti capture <vm> --public|--private [--name <name>] [--memory <provider>] [--observability <provider>] | snapshot a VM into a template (optional empty companion recipes) |
jurniti publish <tpl> --public|--unlist | flip a template's visibility |
jurniti fork <tpl-id|slug> [--plan <p>] | provision a paid VM from a template (charges card on file; no free fork). Accepts template id or public/owned slug |
jurniti run <vm-id> "<task>" | jurniti run --group <name> [--var K=v1,v2] --model <slug> --provider <p> "<task template>" | dispatch one headless task to a VM's agent, or --group to a whole swarm at once (swarm Dispatch). With --group the task is a template: {placeholder} tokens fill per-agent from --var lists (KEY=v1,v2 or KEY=@file, cycled across the swarm) plus built-ins {index}/{n}/{vm}, so each agent does varied work. --model picks a per-run model (e.g. an OpenRouter slug) for the whole swarm without per-VM config (--provider names its provider, e.g. openrouter) — REQUIRED with --group because swarm slices have no default model; for a single VM, empty = its own configured default. --json (with --group) emits per-agent results for CI. Results land at work/out.txt — collect with cp |
jurniti cp <vm-id>:<remote-path> <local-path> | jurniti cp --group <name> <remote-path> <local-dir> | copy a file out of your VM, or --group to fan a whole swarm's output into a local dir (one file per agent) — swarm Collect. --json (with --group) emits per-agent results for CI |
jurniti wait <vm-id> | jurniti wait --group <name> [--ready] | block until a VM (or every agent in a swarm --group) reaches running, or --ready for harness_ready (dispatch-ready — you can `run` against it). Exits 0 when all are ready, non-zero on timeout. Fills the gap between up and run so you don't hand-roll a watch loop |
jurniti transfer [--vm <id>] [--harness <name>] [--map <local>=<guest>] [--exclude <path>] [--dry-run] [--yes] | move your local agent's sessions, memory, and config into your VM — losslessly, except credentials, which never leave this machine (you re-enter keys in the VM). Detects installed agents, shows a manifest of what's kept and what's scrubbed, rewrites path-keyed session stores so history resumes, and streams the archive straight into your VM (never stored on our servers). --dry-run previews the manifest and exits; with no VM yet, it walks you through checkout first |
jurniti vms ls | list your VMs |
jurniti vms get <id> | show one VM's detail |
jurniti templates ls [--q <text>] [--harness <h>] [--sort recent|stars|forks|trending] [--limit N] [--offset N] | list your templates and the public gallery (optional search/filter). The gallery is paged: `total` is the whole matching catalog, so when the footer says there is more, walk it with --offset |
jurniti templates get <id|slug> | show one template's detail (skills, harness, visibility) |
jurniti usage | show live VM counts and monthly spend (fleet/MRR — not model tokens; use token-usage for BYOK est.) |
jurniti token-usage [--window session|week] [--vm <id>] | advisory model-token meter (BYOK est. spend by provider/model; not a jurniti charge). Distinct from `usage` (fleet/MRR). Optional --vm scopes to one owned box |
jurniti billing <status|add-card> | show whether a card is on file, or add one (opens a browser) |
jurniti credits [buy <usd>|history|refund <usd>] | show your prepaid credit balance/burn/runway, buy credits ($10 minimum, charges your saved card), list the ledger, or refund unused balance |
jurniti keys <list|issue|rotate|revoke> | manage your tenant API keys (mint read-only or read-write keys) |
jurniti env <set|get|ls|unset> <vm> | jurniti env set --group <name> KEY=VALUE | manage in-box env / BYOK config on one VM, or set the same key on every agent in a swarm group (--group). Values are written through to the guest and never echoed back |
jurniti automations <packs|ls|enable|patch|rm|run|runs|reviews|done> | manage curated loop packs on your agents: list packs, enable/pause/remove, run now, history, and review queue |
jurniti memory <ls|grant|revoke> | list memory/MCP connections and grant or revoke them onto agent VMs (same outcomes as the dashboard Memories page) |
jurniti observability <ls|grant|revoke> | list observability sidecar grants and attach or detach a Latitude/Langfuse sidecar onto an agent VM |
jurniti communication <ls|grants|grant|revoke> | list Buzz communication relays and grant or revoke agent attach (buzz-acp inject; buy relay from the dashboard) |
jurniti skills ls | list the bundled agent skill playbooks |
jurniti skills install [--target claude|codex] [--dir <path>] | install the bundled skills into your agent (Claude Code or Codex). Skills ship embedded in the binary (no network); installed copies are version-stamped and recorded so `jurniti upgrade` / `skills sync` keep them fresh |
jurniti skills sync | bring previously installed skills up to this CLI's bundled content (runs automatically after `jurniti upgrade`). Only overwrites files carrying the jurniti version stamp — user-modified skills are left alone; never rolls a newer stamp backward |
jurniti upgrade [--check] [--json] [--yes] | self-update the CLI to the latest signed release (checksum + minisign verified, atomic swap, then re-syncs installed skills). --check only reports status — exit 0 whether up to date, update available, or the check failed (the signal is in the JSON fields, so agents and CI can run it unconditionally). Executing requires an interactive terminal unless --yes is passed. Passive update notices obey JURNITI_NO_UPDATE_CHECK=1 and are suppressed in CI, non-TTY, and --json runs |
jurniti docs [--format=md|llms] | print this CLI's command reference (md) or agent llms.txt index |
jurniti mcp | run an MCP stdio server so your own agent drives your fleet |
Also available offline
Run jurniti docs --format=md for this reference in your terminal, or
jurniti docs --format=llms for an agent-copyable index (also served at
/docs/llms.txt).
The paid verbs
These verbs touch money:
jurniti billing add-card— opens the browser to Stripe (card entry is web-only; the CLI never sees the number).jurniti up/jurniti fork— start a real, billed microVM (flat plan or usage tier). Fork charges the same as a new box at the template's tier (or--plan); there is no free fork.jurniti credits buy/jurniti credits refund— prepaid credit top-up and unused-credit refund (rate-limited).
Everything else — listing, inspecting, stopping, capturing — works as soon as you are authenticated. See the Quickstart for the provisioning gate.
Template gallery from the CLI
Discover public (and your own) templates, inspect one, then fork into a paid VM:
jurniti templates ls --q founder --harness claudecode
jurniti templates get <tpl-id-or-slug> # skills / harness / visibility
jurniti fork <tpl-id-or-slug> [--plan <p>] # charges card on file
jurniti wait <vm-id> --ready
jurniti vms get <vm-id> # may show FORKED_FROMFilters on templates ls: --q (name/description/slug), --harness,
--sort recent|stars|forks|trending. The gallery is paged — --limit and
--offset walk it, and the footer tells you when there is more than one page.
Same path over MCP as templates_list → template_get → template_fork →
vm_get — see MCP.
Token usage (model spend est.)
Advisory BYOK model-token meter — not a jurniti charge, and not the
same as jurniti usage (fleet VM counts / monthly plan spend) or
usage-tier credits.
jurniti token-usage # session window (default)
jurniti token-usage --window week
jurniti token-usage --vm <vm-id> --window week
jurniti token-usage --window week --json # scripts / CIDashboard: Token usage under Fleet (/dashboard/token-usage). MCP:
token_usage / vm_token_usage. Full guide: Token usage.
Agent skills & updates
Install jurniti's agent skills into Claude Code or Codex with jurniti skills install — open SKILL.md format. Keep both current with jurniti upgrade.
MCP
Mount the jurniti CLI as an MCP server so your own agent drives your fleet with the same verbs you use in the terminal. Complements the dashboard.