Command Reference
Reference for the current VoiceRun CLI workflow.
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 a release already references the function recorded in .voicerun/agent.lock, the push creates a new function version automatically and updates the lock file. Existing releases continue serving their immutable function version until you create a new release.
| 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 open#
Open the agent's page in the VoiceRun web dashboard.
Development#
vr debug#
Launch the Pipeline Debugger against an existing, completed (released) release. Choose it with --release, narrow the interactive picker with --environment, or pick from the completed-release list. Inside a VoiceRun project, passing --release always uses the release-based flow. Non-interactive runs (--yes, piped stdin, or --script) require --release. If release discovery fails, the command exits without pushing code.
| Flag | Description |
|---|---|
--environment, -e | Filter the release picker to this organization environment |
--release | Completed release ID for the active project or tenant agent; omit to pick interactively, required in non-interactive runs |
--tenant, -t | Tenant name under .voicerun/tenants/; defaults to $VOICERUN_TENANT, otherwise no tenant |
--yes, -y | Disable interactive release selection; requires --release |
--headless | Run without GUI; stream JSONL on stdout, take input on stdin |
--output, -o | Output path for the headless session JSON |
--script | Path to a JSON file containing scripted messages; paces entries using agent-response completion signals, with compatibility timeouts |
vr test [TEST_PATH]#
Run tests for the agent project.
| Flag | Description |
|---|---|
--environment, -e | Environment context used while preparing the test |
--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 organization-scoped environments |
vr get releases [RELEASE_ID] | List releases (filterable by agent and/or environment) |
vr get entrypoints [NAME_OR_ID] | List organization-scoped entrypoints |
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 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).
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 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> | Organization-scoped 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 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 organization <NAME_OR_ID> | Membership-scoped organization details (name, ID, your role, current context, membership ID) |
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.
Resource Creation#
vr create environment <NAME>#
Create an organization-scoped environment.
| Flag | Description |
|---|---|
--description, -d | Description of the environment |
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 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.
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 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 organization-scoped environment |
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 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 template <NAME_OR_ID> | Delete an agent template |
vr delete phonenumber supports --release to release the number back to the telephony provider.
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) |
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 Deployment.spec.mode: relay) |
.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) |
