Command Reference

Complete reference for all VoiceRun CLI commands.

Agent auto-resolution: commands that take an AGENT argument can infer it automatically when run inside a project directory (one with .voicerun/agent.lock). In those cases the AGENT argument is optional and marked [AGENT].

Global Options#

FlagDescription
--version, -V, -vShow the installed CLI version
--update, -UUpdate 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.

FlagDescription
--skip-uvSkip uv installation
--skip-helmSkip Helm installation
--skip-skillsSkip skills installation
--skip-mcpSkip MCP server configuration
--claude-codeInstall skills/MCP to Claude Code only
--codexInstall skills/MCP to Codex CLI only
--openclawInstall skills to OpenClaw only
--cursorConfigure MCP for Cursor only
--windsurfConfigure 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_…).

FlagDescription
--api-key, -kAPI key for non-interactive sign-in
--email, -eEmail for non-interactive sign-in
--password, -pPassword (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.

FlagDescription
--yes, -ySkip prompts and use defaults
--force, -fOverwrite existing files
--template, -tInitialize from a remote template (name or ID)
--varTemplate variable as key=value (repeatable)

vr validate#

Validate project structure, configuration, and (optionally) rendered templates.

FlagDescription
--environment, -eEnvironment to render templates for
--quiet, -qOnly output errors

vr render#

Render .voicerun/templates/ with Helm and print the result. Also runs spec validation on the output.

FlagDescription
--values, -fCustom values file path
--set, -sOverride values (repeatable, format key=value)
--output, -oOutput format: yaml (default) or json
--quiet, -qOnly 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.

FlagDescription
--nameName for the function version
--new, -nCreate a new function version
--yes, -ySkip confirmation prompts

vr pull [AGENT_ID]#

Pull agent code from the server.

FlagDescription
--output, -oOutput directory
--yes, -ySkip 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.

FlagDescription
--function, -fFunction ID to release (defaults to agent.lock)
--values, -vValues file in .voicerun/ to overlay
--entrypoint, -eEntrypoint name or ID to point at the new release after creation
--weightPartial-rollout weight (1-100) for the new release on the entrypoint
--yes, -ySkip 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.

FlagDescription
--yes, -ySkip 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.

FlagDescription
--skip-push, -sSkip pushing code
--environment, -eEnvironment to debug (default: debug)
--headlessRun without GUI; stream JSONL on stdout, take input on stdin
--output, -oOutput file path for headless session JSON
--scriptPath to a JSON file with scripted messages
--outboundStart an outbound phone call instead
--to-phone-numberDestination phone number (E.164, required with --outbound)
--from-phone-numberCaller ID phone number

vr test [TEST_PATH]#

Run tests for the agent project.

FlagDescription
--environment, -eEnvironment to fetch secrets from
--verbose, -vRun pytest in verbose mode
--coverage, -cRun with coverage reporting
--skip-installSkip 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.

FlagDescription
--nameSimulation resource name (omit to list available simulations)
--release, -rRelease ID to run against
--values, -vValues file in .voicerun/ for local preview
--waitBlock until every spawned session reaches a terminal status
--yes, -ySkip 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.

FlagDescription
--toDestination phone number, E.164 (required)
--input, -iInput data as a JSON string
--input-file, -IPath to a JSON file containing the input payload
--releasePin the weighted release pick to a specific releaseId (testing/debug)
--waitPoll until the session reaches a terminal status and print outputData
--timeoutMax seconds to --wait before giving up (default 300)
--json, -jPrint 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 failed status.
  • 2--wait timed 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.

CommandDescription
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.

CommandDescription
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.

FlagDescription
--description, -dDescription of the environment

vr create agentenvironment [AGENT] <NAME> (legacy)#

Create a legacy per-agent environment.

FlagDescription
--stt-modelSpeech-to-text model
--stt-languageSTT language code
--stt-endpointingSTT endpointing timeout in ms
--recording / --no-recordingEnable 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>

FlagDescription
--phone-number, -pE.164 phone number (required)
--telephony, -tTelephony provider ID
--friendly-nameFriendly name
--area-codeArea code
--country-codeCountry code
--directioninbound, outbound, or both

vr create entrypoint web <NAME>

FlagDescription
--allowed-origin, -oAllowed origin (repeatable) (required)

vr create entrypoint native <NAME>

FlagDescription
--client-id, -cClient ID (required)
--client-secret-secret-idSecret ID holding the client secret
--allowed-api-key-idAllowed 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.

FlagDescription
--agent, -aAgent name or ID (defaults to .voicerun/agent.lock)
--environment, -eEnvironment name or ID (required unless --org)
--orgCreate an organization-level variable
--maskedHide 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.

FlagDescription
--purchasePurchase a new number from the provider
--area-code, -aArea code
--country-code, -cCountry code (default: US)
--friendly-name, -nFriendly name
--phone-number, -pPhone 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.

FlagDescription
--configureAfter 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.

FlagDescription
--name, -nProvider name
--provider-type, -ptwilio or telnyx
--account-sidTwilio Account SID
--api-key-sidTwilio API Key SID
--api-key-secretTwilio API Key Secret
--api-keyTelnyx API Key

vr create template <NAME>#

Create a reusable template from the current project. agent.lock is excluded automatically.

FlagDescription
--description, -dTemplate description
--category, -cTemplate category
--public / --privateVisibility (default: public; admin-only)
--upsertUpdate if a template with the same name + visibility exists, else create

Resource Deletion#

vr delete <resource>#

CommandDescription
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.

FlagDescription
--release, -rNew routing list as <releaseId>[:<weight>] (repeatable). Replaces the existing list.
--nameRename the entrypoint
--statusactive or disabled

Context Management#

vr context with no subcommand prints the current context, signed-in user, organization, and admin status.

CommandDescription
vr contextShow current context + session info
vr context listList all contexts
vr context currentShow 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.

FlagDescription
--status, -sFilter by status
--direction, -dFilter by call direction
--limit, -lLimit number of results
--page, -pPage number
--json, -jOutput as JSON
--table, -tForce 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.

FlagDescription
--page, -pPage number
--limit, -lLimit number of results

vr session recording <SESSION_ID>#

Download the WAV recording for a session.

FlagDescription
--output, -oOutput file path (default: ./<session_id>.wav)
--force, -fOverwrite 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.

FlagDescription
--session, -SSession ID to get evaluations for
--status, -sFilter by status (pending, complete, error, skipped) — skipped rows are evaluations whose precondition predicate didn't match the session (no LLM call)
--type, -TFilter by eval type (judge, extraction, deterministic, script) — deterministic rows assert on the derived session view without an LLM
--limit, -lPage size
--page, -pPage number
--json, -j / --table, -tOutput 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.

FlagDescription
--metric, -mFilter tags by metric name
--agent, -aAgent name or ID

vr metrics timeseries <METRIC_NAME>#

Fetch time-series data for a custom metric.

FlagDescription
--start, -sStart date (ISO 8601) (required)
--end, -eEnd date (ISO 8601) (required)
--stepAggregation interval (e.g. 30m, 1h, 1d). Default: 1h
--agent, -aAgent name or ID
--environment, -EEnvironment ID
--tagsTag 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.

FlagDescription
--agent, -aAgent 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.

FlagDescription
--metric, -mMetric/outcome name to query (required)
--start, -sStart date (ISO 8601) (required)
--end, -eEnd date (ISO 8601) (required)
--stepAggregation interval. Default: 1h
--agent, -aAgent 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).

FlagDescription
--start, -sStart date (YYYY-MM-DD)
--end, -eEnd date (YYYY-MM-DD)
--by-tagsBreak down usage by session tags
--tagsFilter by tags as JSON (e.g. '{"team":"sales"}')
--json, -jOutput as JSON
--table, -tForce table output

vr usage monthly#

Show usage report for a specific month.

FlagDescription
--year, -yYear (defaults to current year)
--month, -mMonth 1-12 (defaults to current month)
--by-tagsBreak down usage by session tags
--tagsFilter by tags as JSON
--json, -j / --table, -tOutput 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.

FlagDescription
--limit, -lMax results (default 5, max 20)

All vr docs subcommands accept --json / --table.


Bug Reports#

vr report bug#

Submit a bug report to VoiceRun.

FlagDescription
--title, -tBug title
--description, -dBug description
--include-system-info / --no-system-infoInclude CLI version and OS info (default: yes)
--dry-runShow what would be submitted without sending

Configuration Files#

FileDescription
handler.pyAgent entry point, must contain async def handler() (skipped automatically for mode: relay deployments)
.voicerun/agent.yamlAgent metadata (name, description)
.voicerun/agent.lockAuto-generated after vr push (agent/function IDs and project checksum)
.voicerun/values.yamlBase values for Helm template rendering
.voicerun/<env>.yamlPer-environment values overlays (e.g. prod.yaml)
.voicerun/templates/*.yamlDeclarative resources — Deployment, Simulation, Webhook, Evaluator
.vrignoreFiles to exclude from vr push and vr create template (gitignore syntax)
requirements.txtPython dependencies
.claude/CLAUDE.mdInstructions auto-scaffolded for Claude Code
AGENTS.mdInstructions auto-scaffolded for Codex / OpenClaw

Credentials#

Credentials are stored in ~/.voicerun/:

FileDescription
~/.voicerun/cookieSession cookie
~/.voicerun/apikeyAPI key
~/.voicerun/config.jsonCLI configuration and contexts
clireferencecommands