phoenix/js/packages/phoenix-cli at main · Arize-ai/phoenix
GitHub
- Immediate Debugging: Fetch the most recent trace of a failed or unexpected run with a single command
- Bulk Export: Export large numbers of traces or experiment results to JSON files for offline analysis
- Dataset & Experiment Access: List datasets and retrieve full experiment data including runs, evaluations, and trace IDs
- Prompt Introspection: View and export prompt templates for analysis, optimization, or use with other tools
- Terminal Workflows: Integrate trace and experiment data into your existing tools, piping output to Unix utilities like
jq - AI Coding Assistants: Use with Claude Code, Cursor, Windsurf, or other AI-powered tools to analyze traces, experiments, and optimize prompts
@arizeai/phoenix-cli is open-source! Issues and PRs welcome.
Installation
Quick Start
Environment Variables
| Variable | Description |
|---|---|
PHOENIX_HOST | Phoenix API endpoint (e.g., http://localhost:6006) |
PHOENIX_PROJECT | Project name or ID |
PHOENIX_API_KEY | API key for authentication (if required) |
PHOENIX_CLIENT_HEADERS | Custom headers as JSON string |
Profiles
A profile saves the endpoint, project, API key, and headers for a Phoenix instance under a name likeprod or staging. Activate a profile and every px command picks up those settings without re-exporting environment variables. Environment variables and CLI flags still override the active profile, so existing scripts keep working.
px profile create <name>
Create a new profile.
| Option | Description | Default |
|---|---|---|
<name> | Profile name (alphanumeric, hyphens, underscores) | — |
--endpoint <url> | Phoenix API endpoint | — |
--project <name> | Default project name | — |
--api-key <key> | Phoenix API key | — |
--header <key=value> | Custom HTTP header (repeatable) | — |
--activate | Make this the active profile after creation | Off |
px profile list
List all profiles. The active profile is marked in a current column (kubectl-style).
| Option | Description | Default |
|---|---|---|
--format <format> | Output format: pretty, json, or raw | pretty |
px profile show [name]
Show a profile (defaults to the active one).
| Option | Description | Default |
|---|---|---|
[name] | Profile name | active profile |
--format <format> | Output format: pretty, json, or raw | pretty |
px profile use <name>
Set the active profile. Reports the transition (Switched active profile: staging → prod); a no-op if the profile is already active.
px profile edit <name>
Open a profile in $PHOENIX_EDITOR if set, otherwise $EDITOR, falling back to vi. The CLI validates the JSON on save and re-opens the editor on validation failure. Edits are discarded if the editor exits non-zero.
px profile delete <name>
Delete a profile. Deleting the active profile leaves no profile active — set a new one with px profile use <name>.
| Option | Description | Default |
|---|---|---|
--yes | Skip the confirmation prompt | — |
Editor autocomplete via JSON Schema
@arizeai/phoenix-cli publishes a JSON Schema for the settings file. Add a $schema key to enable autocomplete and validation in editors that support JSON Schema:
Commands
px project list
List all available projects.
| Option | Description | Default |
|---|---|---|
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | Output format: pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
--limit <number> | Maximum projects to fetch per page | 100 |
px trace list [directory]
Fetch recent traces from the configured project.
| Option | Description | Default |
|---|---|---|
[directory] | Save traces as JSON files to directory | stdout |
-n, --limit <number> | Number of traces to fetch (newest first) | 10 |
--last-n-minutes <number> | Only fetch traces from the last N minutes | — |
--since <timestamp> | Fetch traces since ISO timestamp | — |
--endpoint <url> | Phoenix API endpoint | From env |
--project <name> | Project name or ID | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress output | — |
--max-concurrent <number> | Maximum concurrent fetches | 10 |
px trace get <trace-id>
Fetch a specific trace by ID.
| Option | Description | Default |
|---|---|---|
--file <path> | Save to file instead of stdout | stdout |
--format <format> | pretty, json, or raw | pretty |
--endpoint <url> | Phoenix API endpoint | From env |
--project <name> | Project name or ID | From env |
--api-key <key> | Phoenix API key | From env |
--no-progress | Disable progress indicators | — |
px span list [file]
Fetch individual spans from the configured project with comprehensive filtering.
| Option | Description | Default |
|---|---|---|
[file] | Save spans as JSON to file | stdout |
-n, --limit <number> | Maximum spans to fetch (newest first) | 100 |
--last-n-minutes <number> | Only fetch spans from the last N minutes | — |
--since <timestamp> | Fetch spans since ISO timestamp | — |
--span-kind <kinds...> | Filter by span kind (LLM, CHAIN, TOOL, RETRIEVER, EMBEDDING, AGENT, RERANKER, GUARDRAIL, EVALUATOR, UNKNOWN) | — |
--status-code <codes...> | Filter by status code (OK, ERROR, UNSET) | — |
--name <names...> | Filter by span name(s) | — |
--trace-id <ids...> | Filter by trace ID(s) | — |
--parent-id <id> | Filter by parent span ID (use "null" for root spans) | — |
--attribute <filters...> | Filter by attribute key-value pairs. Format: key:value. Repeat to AND multiple filters. Values containing colons are supported (split on first : only). To match a string attribute that looks like a number or boolean, JSON-quote the value (e.g., 'user.id:"12345"'). Requires Phoenix server ≥ 14.9.0. | — |
--include-annotations | Include span annotations in output | Off |
--endpoint <url> | Phoenix API endpoint | From env |
--project <name> | Project name or ID | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
px span add-note <span-id>
Notes are a reserved annotation type. Unlike other annotations, notes are open-ended and multiple notes can be attached to the same span.
| Option | Description | Default |
|---|---|---|
<span-id> | OpenTelemetry span ID | — |
--text <text> | Note text to attach to the span | Required |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
px session list
List sessions (multi-turn conversations) for a project.
| Option | Description | Default |
|---|---|---|
-n, --limit <number> | Maximum number of sessions to return | 10 |
--order <order> | Sort order: asc or desc | desc |
--include-annotations | Include session annotations, excluding notes | — |
--include-notes | Include session notes when present | — |
--endpoint <url> | Phoenix API endpoint | From env |
--project <name> | Project name or ID | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
px session get <session-id>
View a session’s conversation flow, including all traces (turns) in the session.
| Option | Description | Default |
|---|---|---|
--include-annotations | Include session annotations, excluding notes | Off |
--include-notes | Include session notes when present | Off |
--file <path> | Save to file instead of stdout | stdout |
--format <format> | pretty, json, or raw | pretty |
--endpoint <url> | Phoenix API endpoint | From env |
--project <name> | Project name or ID | From env |
--api-key <key> | Phoenix API key | From env |
--no-progress | Disable progress indicators | — |
px session annotate <session-id>
Add or update an annotation on a session. Address the session by GlobalID or by user-provided session_id.
| Option | Description | Default |
|---|---|---|
--name <name> | Annotation name (what is being measured) | Required |
--label <label> | Categorical result (e.g. pass, fail) | — |
--score <number> | Numeric score | — |
--explanation <text> | Free-text justification | — |
--annotator-kind <kind> | HUMAN, LLM, or CODE | HUMAN |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
--label, --score, or --explanation is required.
px session add-note <session-id>
Add a free-text note to a session. Address the session by GlobalID or by user-provided session_id. A session can carry multiple notes; each receives a unique identifier. Requires Phoenix server >= 14.17.0.
| Option | Description | Default |
|---|---|---|
--text <text> | Note text to add | Required |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
px dataset list
List all available datasets.
| Option | Description | Default |
|---|---|---|
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
--limit <number> | Maximum number of datasets | — |
px dataset get <dataset-identifier>
Fetch examples from a dataset.
| Option | Description | Default |
|---|---|---|
--split <name> | Filter by split (can be used repeatedly) | — |
--version <id> | Fetch from specific dataset version | latest |
--file <path> | Save to file instead of stdout | stdout |
--format <format> | pretty, json, or raw | pretty |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--no-progress | Disable progress indicators | — |
px experiment list --dataset <name-or-id>
List experiments for a dataset, optionally exporting full data to files.
| Option | Description | Default |
|---|---|---|
--dataset <name-or-id> | Dataset name or ID (required) | — |
[directory] | Export experiment JSON files to directory | stdout |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
--limit <number> | Maximum number of experiments | — |
px experiment get <experiment-id>
Fetch a single experiment with all run data, including inputs, outputs, evaluations, and trace IDs.
| Option | Description | Default |
|---|---|---|
--file <path> | Save to file instead of stdout | stdout |
--format <format> | pretty, json, or raw | pretty |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--no-progress | Disable progress indicators | — |
px prompt list
List all available prompts.
| Option | Description | Default |
|---|---|---|
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--format <format> | pretty, json, or raw | pretty |
--no-progress | Disable progress indicators | — |
--limit <number> | Maximum number of prompts | — |
px prompt get <prompt_identifier>
Show a Phoenix prompt.
Supports multiple output formats including a text format optimized for piping to AI coding assistants.
| Option | Description | Default |
|---|---|---|
--tag <name> | Get prompt version by tag name | — |
--version <id> | Get specific prompt version by ID | latest |
--format <format> | pretty, json, raw, or text | pretty |
--endpoint <url> | Phoenix API endpoint | From env |
--api-key <key> | Phoenix API key | From env |
--no-progress | Disable progress indicators | — |
text format outputs prompt content with XML-style role tags, ideal for piping to AI assistants:
px api graphql <query>
Make authenticated GraphQL queries against the Phoenix API. Output is {"data": {...}} JSON — pipe with jq '.data.<field>' to extract values. Only queries are permitted; mutations and subscriptions are rejected before hitting the server.
| Argument/Option | Description | Default |
|---|---|---|
<query> | GraphQL query string | — |
--endpoint <url> | Phoenix API endpoint | $PHOENIX_HOST |
--api-key <key> | Phoenix API key | $PHOENIX_API_KEY |
Discover the schema with introspection
Use introspection to explore what fields and types are available without leaving your terminal:Projects
id, name, traceCount, recordCount, tokenCountTotal, tokenCountPrompt, tokenCountCompletion, createdAt, updatedAt.
Datasets
id, name, description, exampleCount, experimentCount, evaluatorCount, createdAt, updatedAt.
Experiments
Experiments are nested under datasets in the GraphQL schema:traceId, output, error, latencyMs, startTime, endTime.
Evaluators
Instance summary
llm.model_name, llm.token_count.*, input.value, output.value, tool.name, and exception.*.
Examples
Debug failed traces
Find slowest traces
Find errored spans
Inspect LLM spans with annotations
Extract LLM models used
Count errors
List datasets and experiments
Analyze experiment results
Work with prompts
Query the GraphQL API directly
Use with AI Coding Assistants
Phoenix CLI is designed to work seamlessly with AI coding assistants like Claude Code, Cursor, and Windsurf.Claude Code
Ask Claude Code:px --help and fetch your traces for analysis.
Prompt Optimization with Claude Code
Pipe your Phoenix prompts directly to Claude Code for analysis and optimization suggestions:Cursor / Windsurf
Run the CLI in the terminal and ask the AI to interpret:Related
Retrieve Traces via CLI
User guide for fetching traces from the command line
@arizeai/phoenix-client
TypeScript client for the Phoenix API

