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) |
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. 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#
Push code and launch the Pipeline Debugger, or place an outbound phone call.
| Flag | Description |
|---|---|
--skip-push, -s | Skip pushing code |
--environment, -e | Environment to debug (default: debug) |
--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 |
--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 |
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.
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 |
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.
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.
| 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 |
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 |
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 |
vr delete release <RELEASE_ID> | Delete a release |
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 |
Context Management#
vr context with no subcommand prints the current context, signed-in user, organization, and admin status.
| Command | Description |
|---|---|
vr context | Show current context + session info |
vr context list | List all contexts |
vr context current | Show current context details |
vr context switch <name> | Switch to a different context |
vr context create <name> <api-url> <frontend-url> | Create a custom context |
vr context delete <name> | Delete a custom context |
vr context set-url <api-url> | Set a custom API URL for the session |
vr context set-org <name-or-id> | Set effective organization (empty string to clear). Accepts a name (matched against your memberships) or a raw UUID. Service-account tokens are bound to their org and cannot be changed. |
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 |
--limit, -l | Limit number of results |
--page, -p | Page number |
--json, -j | Output as JSON |
--table, -t | Force table output |
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#
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 |
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 |
