Command Reference
Complete reference for all VoiceRun CLI commands.
Agent auto-resolution: commands that take an
AGENTargument can infer it automatically when run inside a project directory (one with.voicerun/agent.lock). In those cases theAGENTargument is optional and marked[AGENT].
Global Options#
| Flag | Description |
|---|---|
--version, -V, -v | Show the installed CLI version |
--update, -U | Update the installed CLI itself and refresh skills/MCP configs (distinct from the vr update command tree for resources) |
--context, -c <name> | Run this one command against a named context without switching the active context (the one-off equivalent of vr context switch). The long --context form works anywhere on the line; -c only before the subcommand, since several subcommands use -c for their own options. Unknown context names abort with exit code 2. |
Setup & Authentication#
vr setup#
Configure the CLI environment and install dependencies.
| Flag | Description |
|---|---|
--skip-uv | Skip uv installation |
--skip-helm | Skip Helm installation |
--skip-skills | Skip skills installation |
--skip-mcp | Skip MCP server configuration |
--claude-code | Install skills/MCP to Claude Code only |
--codex | Install skills/MCP to Codex CLI only |
--openclaw | Install skills to OpenClaw only |
--cursor | Configure MCP for Cursor only |
--windsurf | Configure MCP for Windsurf only |
vr signin#
Sign in to VoiceRun. Validates against /v1/auth/principal so the same flow works for user-scoped tokens and organization service account tokens (vrst_…).
| Flag | Description |
|---|---|
--api-key, -k | API key for non-interactive sign-in |
--email, -e | Email for non-interactive sign-in |
--password, -p | Password (requires --email) |
vr signout#
Sign out and clear stored credentials.
Project Lifecycle#
vr init [PROJECT_NAME]#
Create a new voice agent project. Runs an interactive wizard unless --yes is supplied.
| Flag | Description |
|---|---|
--yes, -y | Skip prompts and use defaults |
--force, -f | Overwrite existing files |
--template, -t | Initialize from a remote template (name or ID) |
--var | Template variable as key=value (repeatable) |
vr validate#
Validate project structure, configuration, and (optionally) rendered templates.
| Flag | Description |
|---|---|
--environment, -e | Environment to render templates for |
--quiet, -q | Only output errors |
vr render#
Render .voicerun/templates/ with Helm and print the result. Also runs spec validation on the output.
| Flag | Description |
|---|---|
--values, -f | Custom values file path |
--set, -s | Override values (repeatable, format key=value) |
--output, -o | Output format: yaml (default) or json |
--quiet, -q | Only output rendered templates |
vr push#
Push agent code to VoiceRun. If the function recorded in .voicerun/agent.lock has already been deployed, the push creates a new function version automatically and updates agent.lock; deployed environments continue serving the old immutable version until you release or deploy the new one.
| Flag | Description |
|---|---|
--name | Name for the function version |
--new, -n | Create a new function version |
--yes, -y | Skip confirmation prompts |
vr pull [AGENT_ID]#
Pull agent code from the server.
| Flag | Description |
|---|---|
--output, -o | Output directory |
--yes, -y | Skip confirmation prompt |
vr release [AGENT] <ENVIRONMENT>#
Bind an agent + function to an org-scoped environment with a snapshotted manifest. The latest release for (agent, environment) is implicitly active.
| Flag | Description |
|---|---|
--function, -f | Function ID to release (defaults to agent.lock) |
--values, -v | Values file in .voicerun/ to overlay |
--entrypoint, -e | Entrypoint name or ID to point at the new release after creation |
--weight | Partial-rollout weight (1-100) for the new release on the entrypoint |
--yes, -y | Skip the unpushed-changes confirmation prompt |
vr deploy <ENVIRONMENT> (legacy)#
Deploy a function to a legacy per-agent environment. Preserved for agents created before the release/entrypoint migration — new projects should use vr release. Prints a deprecation warning on every run. The command waits while the API prewarms the sandbox module and shows a Deploying and prewarming sandbox... spinner; if prewarm fails, the first call builds on demand.
| Flag | Description |
|---|---|
--yes, -y | Skip confirmation prompts |
vr open#
Open the agent's page in the VoiceRun web dashboard.
Development#
vr debug#
Launch the Pipeline Debugger, or place an outbound phone call. Behavior depends on the agent's deployment model:
- Legacy (v1) agents — push local code (unless
--skip-push) and debug the per-agentdebugenvironment. - Declarative (v2) agents (deployed with
vr releaseinto org-level environments) — do not push or release. Start a debug session against an existing release: choose it with--release, narrow the interactive picker with-e <environment>, or pick from the list. Non-interactive runs (--yes, piped stdin, or--script) require--release.
| Flag | Description |
|---|---|
--skip-push, -s | (v1) Skip pushing code. Implied for v2 agents. |
--environment, -e | (v1) Environment to debug (default: debug). (v2) Filter the release picker to this org environment. |
--release | (v2 only) Release ID to debug; omit to pick interactively, required in non-interactive runs |
--yes, -y | Non-interactive: never prompt. For v2 agents this requires --release. |
--headless | Run without GUI; stream JSONL on stdout, take input on stdin |
--output, -o | Output file path for headless session JSON |
--script | Path to a JSON file with scripted messages |
--outbound | Start an outbound phone call instead (v1 agents only) |
--to-phone-number | Destination phone number (E.164, required with --outbound) |
--from-phone-number | Caller ID phone number |
vr test [TEST_PATH]#
Run tests for the agent project.
| Flag | Description |
|---|---|
--environment, -e | Environment to fetch secrets from |
--verbose, -v | Run pytest in verbose mode |
--coverage, -c | Run with coverage reporting |
--skip-install | Skip dependency installation |
Pass additional pytest arguments after --:
vr test -- -k "test_greeting" --tb=short
vr simulate [AGENT] <ENVIRONMENT>#
Run a Simulation resource against the active release.
| Flag | Description |
|---|---|
--name | Simulation resource name (omit to list available simulations) |
--release, -r | Release ID to run against |
--values, -v | Values file in .voicerun/ for local preview |
--wait | Block until every spawned session reaches a terminal status |
--yes, -y | Skip the cost-guardrail confirmation prompt |
Outbound Calls#
vr outbound call <ENTRYPOINT>#
Originate an outbound call from a phone-type entrypoint with direction set to outbound or both. The session is created up-front and a TwiML stream is built inline so the call connects straight to the agents service on pickup with no intermediate API round-trip.
The handler reads the task spec via context.input_data and, before session end, builds a structured result via context.set_output(...) / context.update_output(...). The result lives on the session as outputData and is retrievable via vr session info, --wait, or the session-end webhook.
| Flag | Description |
|---|---|
--to | Destination phone number, E.164 (required) |
--input, -i | Input data as a JSON string |
--input-file, -I | Path to a JSON file containing the input payload |
--release | Pin the weighted release pick to a specific releaseId (testing/debug) |
--wait | Poll until the session reaches a terminal status and print outputData |
--timeout | Max seconds to --wait before giving up (default 300) |
--json, -j | Print the raw JSON response instead of a friendly summary |
The from-number is always the entrypoint's configured phoneNumber — the entrypoint is the persona for the number, and the API does not accept a per-call override.
--input and --input-file are mutually exclusive. The payload must be a JSON object at the top level (not an array or scalar) and is capped at 64KB.
# Fire-and-forget — returns immediately with sessionId. vr outbound call ep_outbound_callback \ --to +15553334444 \ --input '{"task_id":"t-7","objective":"Confirm 7pm reservation"}' # Wait for the call to finish and print the handler's outputData. vr outbound call ep_outbound_callback \ --to +15553334444 \ --input-file ./task.json \ --wait --timeout 180 # Pin a specific release for testing. vr outbound call ep_outbound_callback \ --to +15553334444 \ --release rel_abc123 \ --wait
Exit codes:
- 0 — call originated successfully (no
--wait), or session completed (with--wait). - 1 — origination failed, or the session ended in
failedstatus. - 2 —
--waittimed out before the session reached a terminal state.
Resource Queries#
vr get <resource>#
List resources. Every command takes an optional positional filter that narrows the table to one matching row.
| Command | Description |
|---|---|
vr get agents [NAME_OR_ID] | List agents |
vr get functions [AGENT] [NAME_OR_ID] | List functions for an agent |
vr get environments [NAME_OR_ID] | List org-scoped environments |
vr get agentenvironments [AGENT] [NAME_OR_ID] | List legacy per-agent environments (deprecated — prefer vr get environments; prints a warning, still runs) |
vr get releases [RELEASE_ID] | List releases (filterable by agent and/or environment) |
vr get entrypoints [NAME_OR_ID] | List org-scoped entrypoints |
vr get variables [NAME_OR_ID] | List org and (with --environment) agent variables |
vr get secrets [NAME_OR_ID] | List organization secrets |
vr get phonenumbers [PHONE_OR_ID] | List phone numbers (match by ID, phone, or friendly name) |
vr get telephony [NAME_OR_ID] | List telephony providers |
vr get assignments [AGENT] [PHONE_OR_ID] | List phone number assignments |
vr get templates [NAME_OR_ID] | List available templates |
vr get organizations [NAME_OR_ID] | List organizations you belong to |
vr get releases accepts --agent/-a and --environment/-e. vr get entrypoints accepts --type/-t (phone, web, native). vr get variables accepts --agent/-a, --environment/-e, and --org.
All vr get subcommands accept --json/-j and --table/-t for output format (on vr get entrypoints, -t belongs to --type, so use the long form --table). With neither flag, output is a table on an interactive terminal and JSON when piped, redirected, or run by a coding agent. JSON output ({"data": [...]}) carries full, untruncated field values and is the machine-parseable source of truth — tables width-truncate long values such as UUIDs. vr get variables --json returns {"data": {"organizationVariables": [...], "environmentVariables": [...]}}, where environmentVariables is null when the agent-environment scope was not queried. In JSON mode the deprecation warning on agentenvironments is suppressed so stdout stays parseable.
vr describe <resource>#
Show detailed information about a resource.
| Command | Description |
|---|---|
vr describe agent [NAME_OR_ID] | Agent details |
vr describe function [AGENT] <NAME_OR_ID> | Function details |
vr describe environment <NAME_OR_ID> | Org-scoped environment details |
vr describe agentenvironment [AGENT] <NAME_OR_ID> | Legacy per-agent environment details (deprecated — prefer vr describe environment; prints a warning, still runs) |
vr describe release <RELEASE_ID> | Release details (agent + environment + function rendered as Name (id)) |
vr describe entrypoint <NAME_OR_ID> | Entrypoint details with weighted release list |
vr describe variable <NAME_OR_ID> | Variable details (masked values show as ••••••••) |
vr describe secret <NAME_OR_ID> | Secret details |
vr describe phonenumber <PHONE_OR_ID> | Phone number details |
vr describe telephony <NAME_OR_ID> | Telephony provider details |
vr describe assignment <PHONE_NUMBER> | Assignment details |
vr describe organization <NAME_OR_ID> | Membership-scoped organization details (name, ID, your role, current context, membership ID) |
vr describe variable supports --agent/-a, --environment/-e, and --org.
All vr describe subcommands accept --json/-j and --table/-t for output format, with the same auto-detection as vr get. JSON output ({"data": {...}}) always carries complete field values regardless of terminal width; in JSON mode the deprecation warning on agentenvironment is suppressed so stdout stays parseable.
Resource Creation#
vr create environment <NAME>#
Create an org-scoped environment.
| Flag | Description |
|---|---|
--description, -d | Description of the environment |
vr create agentenvironment [AGENT] <NAME> (legacy)#
Create a legacy per-agent environment. Preferred: create an org-scoped environment with vr create environment and bind an agent to it via vr release. Prints a deprecation warning and requires a y/N confirmation before creating; pass --yes/-y to skip it (required in non-interactive shells, which otherwise abort).
| Flag | Description |
|---|---|
--stt-model | Speech-to-text model |
--stt-language | STT language code |
--stt-endpointing | STT endpointing timeout in ms |
--recording / --no-recording | Enable or disable call recording |
--yes, -y | Skip the legacy-deprecation confirmation |
vr create entrypoint phone|web|native|update#
Create an entrypoint that routes traffic to one or more releases. Each create variant accepts --release <releaseId>[:<weight>] (repeatable, optional — defaults to weight 1; omit entirely to create a release-less entrypoint).
vr create entrypoint phone <NAME>
| Flag | Description |
|---|---|
--phone-number, -p | E.164 phone number (required) |
--telephony, -t | Telephony provider ID |
--friendly-name | Friendly name |
--area-code | Area code |
--country-code | Country code |
--direction | inbound, outbound, or both |
vr create entrypoint web <NAME>
| Flag | Description |
|---|---|
--allowed-origin, -o | Allowed origin (repeatable) (required) |
vr create entrypoint native <NAME>
| Flag | Description |
|---|---|
--client-id, -c | Client ID (required) |
--client-secret-secret-id | Secret ID holding the client secret |
--allowed-api-key-id | Allowed API key ID (repeatable) |
vr create entrypoint update <ENTRYPOINT_ID> (deprecated)
Deprecated alias for vr update entrypoint. Prints a warning and forwards to the new command — switch over when you can.
vr create variable <NAME> <VALUE>#
Create a variable readable via context.variables.get(NAME) in agent handlers.
| Flag | Description |
|---|---|
--agent, -a | Agent name or ID (defaults to .voicerun/agent.lock) |
--environment, -e | Environment name or ID (required unless --org) |
--org | Create an organization-level variable |
--masked | Hide the value in listings (runtime still receives the real value) |
vr create secret <NAME> <VALUE>#
Create an organization-scoped secret in GCP Secret Manager. Reference it from .voicerun/templates/ as {{ Secrets.organization.NAME }} — Helm leaves the placeholder intact and the API resolves it at session start. Passing --agent is rejected with a redirect to vr create variable --masked.
vr create phonenumber [TELEPHONY_ID]#
Create or purchase a phone number.
| Flag | Description |
|---|---|
--purchase | Purchase a new number from the provider |
--area-code, -a | Area code |
--country-code, -c | Country code (default: US) |
--friendly-name, -n | Friendly name |
--phone-number, -p | Phone number to register |
vr create assignment [AGENT] <ENVIRONMENT> <PHONE_NUMBER_ID> (legacy)#
Assign a phone number to a legacy per-agent environment. Sets agentId and agentEnvironmentId on the phone number.
| Flag | Description |
|---|---|
--configure | After assigning, configure the number with the telephony provider so incoming calls route to the agent |
vr create telephony#
Create a telephony provider. Missing fields are prompted interactively.
| Flag | Description |
|---|---|
--name, -n | Provider name |
--provider-type, -p | twilio or telnyx |
--account-sid | Twilio Account SID |
--api-key-sid | Twilio API Key SID |
--api-key-secret | Twilio API Key Secret |
--api-key | Telnyx API Key |
--connection-id | Telnyx Connection ID — the TeXML Application outbound calls dial through (see Bring Your Own Telephony) |
vr create template <NAME>#
Create a reusable template from the current project. agent.lock is excluded automatically.
| Flag | Description |
|---|---|
--description, -d | Template description |
--category, -c | Template category |
--public / --private | Visibility (default: public; admin-only) |
--upsert | Update if a template with the same name + visibility exists, else create |
Resource Deletion#
vr delete <resource>#
| Command | Description |
|---|---|
vr delete agent <NAME_OR_ID> | Delete an agent |
vr delete function [AGENT] <NAME_OR_ID> | Delete a function |
vr delete environment <NAME_OR_ID> | Delete an org-scoped environment |
vr delete agentenvironment [AGENT] <NAME_OR_ID> | Delete a legacy per-agent environment (deprecated — prefer vr delete environment; prompts for y/N, use --yes/-y to skip) |
vr delete release <RELEASE_ID> | Delete a release |
vr stop release <RELEASE_ID> [--force] | Stop a dedicated release's pods (standby — image kept, start is seconds). Refused for serving releases without --force |
vr start release <RELEASE_ID> | Start a dedicated release from standby |
vr restart release <RELEASE_ID> | Rolling restart of a dedicated release's pods |
vr delete entrypoint <NAME_OR_ID> | Delete an entrypoint |
vr delete variable <NAME_OR_ID> | Delete a variable |
vr delete secret <NAME_OR_ID> | Delete an organization secret |
vr delete phonenumber <NAME_OR_ID> | Delete or release a phone number |
vr delete telephony <NAME_OR_ID> | Delete a telephony provider |
vr delete assignment <PHONE_NUMBER> | Unassign a phone number from its agent environment |
vr delete template <NAME_OR_ID> | Delete an agent template |
vr delete variable supports --agent/-a, --environment/-e, and --org. vr delete phonenumber supports --release to release back to the telephony provider. vr delete assignment supports --skip-unconfigure to skip the telephony provider unconfigure step.
Resource Updates#
vr update is the home for in-place resource mutations that don't fit a create/delete flow. (The global vr --update flag still upgrades the CLI itself.)
vr update entrypoint <ENTRYPOINT_ID>#
Update an existing entrypoint's routing or metadata in place. Passing --release replaces the entire routing list (it is not an append). At least one of --release, --name, or --status must be provided.
| Flag | Description |
|---|---|
--release, -r | New routing list as <releaseId>[:<weight>] (repeatable). Replaces the existing list. |
--name | Rename the entrypoint |
--status | active or disabled |
vr update telephony <NAME_OR_ID>#
Update a telephony provider's name or credentials in place. Credential updates merge into the stored credentials server-side, so a single-field rotation never wipes the fields you don't pass. Credential flags are validated against the provider's type (e.g. --connection-id on a Twilio row is rejected). At least one option is required.
| Flag | Description |
|---|---|
--name | Rename the provider |
--account-sid | Twilio Account SID |
--api-key-sid | Twilio API Key SID |
--api-key-secret | Twilio API Key Secret |
--api-key | Telnyx API Key |
--connection-id | Telnyx Connection ID (TeXML Application for outbound calls) |
vr update agent <NAME_OR_ID>#
Update an agent's telephony provider — the provider used for agent-initiated outbound calls (vr outbound call and StartSessionEvent spawns). Accepts a provider name or ID; the reserved platform ids (voicerun, voicerun-sbc[:region]) pass through without lookup.
| Flag | Description |
|---|---|
--telephony, -t | Telephony provider name or ID. Pass "" to clear. |
--clear-telephony | Clear the agent's telephony provider (fall back to the platform default) |
Context Management#
vr context with no subcommand prints the current context, signed-in user, organization, and admin status.
A context bundles an API URL, a frontend URL, and an optional pinned organization, stored together in ~/.voicerun/config.json. If you belong to multiple organizations in the same environment, create one context per org with the same URLs and a different --org. A context without a pinned org sends no organization-id header — the API uses your account's default organization.
To run a single command against another context without switching, use the global --context / -c flag instead of vr context switch — e.g. vr --context staging get agents. It leaves current_context untouched.
Session-scoped switching. When the environment identifies a terminal tab or coding-agent session (first of VOICERUN_SESSION_KEY, CLAUDE_CODE_SESSION_ID, ITERM_SESSION_ID, TERM_SESSION_ID, WT_SESSION), vr context switch applies only to that session, so concurrent sessions on one machine never clobber each other's context. Resolution order: --context/VOICERUN_CONTEXT → the session's own switch → the machine-wide current_context. Session entries live in ~/.voicerun/sessions/ and clean themselves up (entries idle >7 days are pruned on the next switch; 100-entry cap). vr context current shows the resolution source: local (session), staging (override), or default (global).
Note: Claude Code subagents share the top-level session's CLAUDE_CODE_SESSION_ID, so they share its pin — a switch inside one subagent changes the context for the parent session and all sibling subagents. Subagents that need their own context should pass --context <name> on every command instead of switching.
| Command | Description |
|---|---|
vr context | Show current context + session info |
vr context list | List all contexts with their URLs and pinned organization |
vr context current | Show current context details, including how it was resolved (session, override, or global) |
vr context switch <name> | Switch to a different context — scoped to the enclosing session when one is identifiable, machine-wide otherwise. Pass --global / -g to force the machine-wide switch (also clears the session's own pin). |
vr context unset | Unset the current context — commands that reach the API then exit with an error until a context is chosen explicitly (via --context, vr context switch, or VOICERUN_CONTEXT). Opt-in fail-closed mode; nothing falls back to the default (production) context implicitly. Clears the enclosing session's own pin too; other sessions' pins are left alone. |
vr context create <name> <api-url> <frontend-url> [--org <name-or-id>] | Create a custom context, optionally pinned to an organization (--org/-o, same name-or-UUID resolution as set-org) |
vr context delete <name> | Delete a custom context. If you delete the context you are currently on, you are left with no context selected (the same state as after vr context unset) instead of being switched to default automatically — run vr context switch <name> to pick a new one. |
vr context set-url <api-url> | Point the CLI at a custom API URL — switches to the reserved custom context (machine-wide, re-pointing the enclosing session's pin so it takes effect where it was run). The frontend URL is derived by swapping api → app. Cleared by vr context unset. |
vr context set-org <name-or-id> | Pin the organization for the current context (empty string to unpin and fall back to your default org). Accepts a name (exact match against your memberships) or a raw UUID (stored as-is with no membership check — how super-admins target an org they aren't a member of). The pin lives on the context definition and survives sign-out. Service-account tokens are bound to their org and cannot be changed. |
vr context switch vs vr context switch --global#
Plain vr context switch <name> picks the narrowest scope available:
- Inside an identifiable session (a Claude Code session, an iTerm/Terminal.app tab, Windows Terminal, or a shell that exports
VOICERUN_SESSION_KEY), the switch pins the context for that session only. The machine-widecurrent_contextis untouched, so nothing changes for any other terminal or agent. - Outside one (no session env var — e.g. a bare SSH shell or CI), the same command sets the machine-wide context, exactly as it always has.
vr context switch <name> --global (or -g) always sets the machine-wide context: the default that every session without its own pin resolves, including sessions opened in the future. It also clears the running session's own pin — otherwise your pin would shadow the global you just set and the switch would appear not to take effect where you ran it.
# Terminal tab A — pins 'local' for this tab only vr context switch local # Terminal tab B, concurrently — pins 'staging'; tab A is unaffected vr context switch staging # Either tab — sets the machine-wide default for everything un-pinned # (new tabs, scripts, cron) and re-points this tab at it too vr context switch development --global # Check which scope your context came from vr context current # e.g. "Context: local (session)" or "development (global)"
Rule of thumb: day-to-day, just use vr context switch — the session scoping makes it safe. Reach for --global when you mean "change the default for this machine," not "change it for me right now."
Unset state. After vr context unset, any command that needs the API prints and exits with code 1:
No context is set.
Pass --context <name>, run 'vr context switch <name>', or set VOICERUN_CONTEXT
Available contexts: local, development, default
This is useful when several sessions or coding agents share one machine and none of them should inherit an ambient context — each invocation must name its target. Fresh installs that never set a context still resolve to default; the fail-closed behavior only applies after an explicit vr context unset.
Session Observability#
vr session list [AGENT]#
List sessions for an agent. Resolves the agent from .voicerun/agent.lock when omitted.
| Flag | Description |
|---|---|
--status, -s | Filter by status |
--direction, -d | Filter by call direction |
--from | Include sessions created at or after this timezone-aware RFC 3339 timestamp (e.g. 2026-07-01T00:00:00Z) |
--to | Include sessions created at or before this timezone-aware RFC 3339 timestamp |
--limit, -l | Limit number of results |
--page, -p | Page number |
--json, -j | Output as JSON |
--table, -t | Force table output |
Both date bounds are inclusive and filter on session creation time. Either can be used alone; when both are provided, --from must be earlier than --to.
vr session info <SESSION_ID>#
Show detailed information for a session.
vr session trace <SESSION_ID>#
Show session trace as a span tree.
vr session span <SESSION_ID> <SPAN_ID>#
Show detailed information for a specific span.
vr session transcript [AGENT] <SESSION_ID>#
Show transcript events for a session. The AGENT argument is optional when run from inside a project directory — the agent is inferred from .voicerun/agent.lock.
vr session events [AGENT] <SESSION_ID>#
Show raw session events. The AGENT argument is optional when run from inside a project directory — the agent is inferred from .voicerun/agent.lock.
| Flag | Description |
|---|---|
--page, -p | Page number |
--limit, -l | Limit number of results |
vr session recording <SESSION_ID>#
Download the WAV recording for a session.
| Flag | Description |
|---|---|
--output, -o | Output file path (default: ./<session_id>.wav) |
--force, -f | Overwrite existing output file |
All vr session subcommands accept --json/-j and --table/-t for output format.
Evaluations#
vr evaluation list [AGENT]#
List evaluations for an agent, or for a specific session via --session.
| Flag | Description |
|---|---|
--session, -S | Session ID to get evaluations for |
--status, -s | Filter by status (pending, complete, error, skipped) — skipped rows are evaluations whose precondition predicate didn't match the session (no LLM call) |
--type, -T | Filter by eval type (judge, extraction, deterministic, script) — deterministic rows assert on the derived session view without an LLM |
--limit, -l | Page size |
--page, -p | Page number |
--json, -j / --table, -t | Output format |
vr evaluation info <EVALUATION_ID>#
Show detailed information about an evaluation. Renders one of four result panels depending on the row:
- Judge Result — success flag, ruling JSON, success criteria
- Extraction Result — the extracted payload
- Deterministic Result — success flag, assertion predicate, structured details (
{ matched, failedPath?, reason? }) - Skipped — the precondition reason; no per-type result panel since the eval never ran
Custom Metrics#
vr metrics names [AGENT]#
List available custom metric names.
vr metrics tags#
Discover available tag keys and their values for filtering.
| Flag | Description |
|---|---|
--metric, -m | Filter tags by metric name |
--agent, -a | Agent name or ID |
vr metrics timeseries <METRIC_NAME>#
Fetch time-series data for a custom metric.
| Flag | Description |
|---|---|
--start, -s | Start date (ISO 8601) (required) |
--end, -e | End date (ISO 8601) (required) |
--step | Aggregation interval (e.g. 30m, 1h, 1d). Default: 1h |
--agent, -a | Agent name or ID |
--environment, -E | Environment ID |
--tags | Tag filters as JSON (e.g. '{"channel":"phone"}') |
vr metrics session <SESSION_ID>#
Fetch all custom metrics for a specific session.
A/B Experiments#
vr experiments list#
List all experiments for an agent.
| Flag | Description |
|---|---|
--agent, -a | Agent name or ID (uses agent.lock if omitted) |
vr experiments describe <EXPERIMENT_NAME>#
Show detailed results for a specific experiment (session count, variants, conversion rates, statistical significance).
vr experiments timeseries <EXPERIMENT_NAME>#
Fetch time-series data for an experiment metric, broken down by variant.
| Flag | Description |
|---|---|
--metric, -m | Metric/outcome name to query (required) |
--start, -s | Start date (ISO 8601) (required) |
--end, -e | End date (ISO 8601) (required) |
--step | Aggregation interval. Default: 1h |
--agent, -a | Agent name or ID |
vr experiments funnel <EXPERIMENT_NAME>#
Show the conversion funnel for an experiment, comparing variants with per-metric lift.
All vr metrics and vr experiments subcommands accept --json / --table.
Usage Reporting#
vr usage report#
Show usage report for a date range (defaults to last 30 days).
| Flag | Description |
|---|---|
--start, -s | Start date (YYYY-MM-DD) |
--end, -e | End date (YYYY-MM-DD) |
--by-tags | Break down usage by session tags |
--tags | Filter by tags as JSON (e.g. '{"team":"sales"}') |
--json, -j | Output as JSON |
--table, -t | Force table output |
vr usage monthly#
Show usage report for a specific month.
| Flag | Description |
|---|---|
--year, -y | Year (defaults to current year) |
--month, -m | Month 1-12 (defaults to current month) |
--by-tags | Break down usage by session tags |
--tags | Filter by tags as JSON |
--json, -j / --table, -t | Output format |
Documentation Browser#
vr docs topics#
List all available documentation topics.
vr docs topic <NAME>#
List pages within a documentation topic.
vr docs read <SLUG>#
Read the full content of a documentation page.
vr docs search "<QUERY>"#
Search documentation using natural language.
| Flag | Description |
|---|---|
--limit, -l | Max results (default 5, max 20) |
All vr docs subcommands accept --json / --table.
Bug Reports#
Submit bug reports and track them from the CLI: see status, read replies from the VoiceRun team, and respond. You are also notified in the web app (and by email, per your notification preferences) when your ticket gets a reply or changes status.
vr report bug#
Submit a bug report to VoiceRun.
| Flag | Description |
|---|---|
--title, -t | Bug title |
--description, -d | Bug description |
--include-system-info / --no-system-info | Include CLI version and OS info (default: yes) |
--dry-run | Show what would be submitted without sending |
vr report list#
List your submitted bug reports.
| Flag | Description |
|---|---|
--status, -s | Filter by status: open, in_progress, resolved, closed |
--limit, -l | Max results |
--page, -p | Page number |
vr report show#
Show one bug report with its full conversation — replies (yours and VoiceRun Support's) interleaved with status-change entries.
vr report show <ticket-id>
JSON output bundles the ticket and its conversation as {data, comments}.
vr report reply#
Reply on one of your bug reports. Prompts for the message when it isn't passed as an argument.
vr report reply <ticket-id> "Still happening on the latest version"
Replying to a resolved or closed ticket re-opens it — the command says so in its output, and JSON output carries a reopened flag plus the current ticketStatus.
All vr report read/reply subcommands accept --json / --table.
Configuration Files#
| File | Description |
|---|---|
handler.py | Agent entry point, must contain async def handler() (skipped automatically for mode: relay deployments) |
.voicerun/agent.yaml | Agent metadata (name, description) |
.voicerun/agent.lock | Auto-generated after vr push (agent/function IDs and project checksum) |
.voicerun/values.yaml | Base values for Helm template rendering |
.voicerun/<env>.yaml | Per-environment values overlays (e.g. prod.yaml) |
.voicerun/templates/*.yaml | Declarative resources — Deployment, Simulation, Webhook, Evaluator |
.vrignore | Files to exclude from vr push and vr create template (gitignore syntax) |
requirements.txt | Python dependencies |
.claude/CLAUDE.md | Instructions auto-scaffolded for Claude Code |
AGENTS.md | Instructions auto-scaffolded for Codex / OpenClaw |
Credentials#
Credentials are stored in ~/.voicerun/:
| File | Description |
|---|---|
~/.voicerun/cookie | Session cookie |
~/.voicerun/apikey | API key |
~/.voicerun/config.json | CLI configuration and contexts |
~/.voicerun/sessions/ | Session-scoped context pins (one file per terminal/agent session; self-pruning) |
