# Guided onboarding Source: https://docs.calibrate.artpark.ai/agents/onboarding Run /onboard and your agent takes you from nothing to a trustworthy first evaluation on Calibrate The `/onboard` skill guides you through setting up your first Calibrate evaluation step by step. It's an **orchestrator** — each phase delegates to a feature skill and produces a real Calibrate object, so you finish with a working evaluation, not a tutorial. ## Quick start ```bash theme={null} npx skills add dalmia/calibrate-skills ``` See [Agent skills](/agents/skills) for the full pack. Claude Code, Cursor, Codex, Windsurf, or any Agent Skills–compatible agent. ``` /onboard ``` The skill handles everything from there — including installing the CLI and authenticating if you haven't already. The onboarding is **resumable and adaptive**: progress is saved to `.calibrate/onboard.md`, so a later session picks up at the first incomplete phase, and the skill compresses or skips phases you've already answered. ## What it creates By the end you have a real, inspectable evaluation on Calibrate: | Resource | What it is | | ---------------- | ----------------------------------------------------------------------------- | | Agent | Your system under test, connected and verified against its endpoint | | Tests | Test cases turning your goal into falsifiable `tool_call` / `response` checks | | Evaluator | An LLM or audio judge, if any case scores response quality | | Run | The first evaluation run, with pass/fail and judge reasoning | | Calibrated judge | The judge tuned against human labels, so you can trust the scores | | Benchmark | Optional model comparison across the linked tests | ## The workflow `/onboard` walks these phases in order for a first-time user, and lets an expert compress or skip any they've already answered. Confirms the CLI is installed and authenticated (`calibrate whoami`, else `calibrate login`) and scaffolds the resumable state file. Asks what the agent does, who uses it, and where it fails today, then delegates to `/connect-agent` to register and verify the connection. Turns your goal into a falsifiable hypothesis, then delegates to `/build-test-suite` (or `/import-dataset` if you already have a dataset) to author and upload test cases. Only if a case judges response quality — delegates to `/design-evaluator` to create a judge. Skipped entirely when every case is a deterministic `tool_call`. Delegates to `/run-tests` to link the tests, run them, poll for results, and present **failures first**. Offered, not forced — when you care whether the scores are trustworthy, `/calibrate-evaluator` measures human ↔ judge agreement and tunes the judge until it matches humans. This is the step that makes it *Calibrate*, not just a test runner. Delegates to `/benchmark-models` to compare models, and — when you mention PRs, releases, or shipping — proposes wiring `calibrate agent-tests run` into CI in agent mode. ## Evaluation is a loop After the first run, `/onboard` expects one of: expand the test set when a defect surfaces, tune the hypothesis when the bar is too loose or strict, add a model, or tune the judge when agreement is too low. Each pass appends to the state file so prior baselines stay inspectable — stop when you've shipped or wired it into CI. ## Next steps See every skill `/onboard` orchestrates, and invoke them on their own. Give your agent native Calibrate tools alongside the skills. # Overview Source: https://docs.calibrate.artpark.ai/agents/overview Give your AI coding agents the tools and knowledge to evaluate AI agents on Calibrate through skills, MCP, CLI, or API Calibrate meets your AI coding agent where it already works — Claude Code, Cursor, Codex, Windsurf, and others. Install the skills once and your agent learns how to connect an agent, build test sets, run evaluations, and calibrate the LLM judges against human labels — driving Calibrate through the interface that fits your workflow. ## Get started Install evaluation expertise with one command. Your agent learns how to build test suites, design judges, and run evals on Calibrate. Run `/onboard` and your agent walks you through setting up a complete evaluation from scratch — connect, test, run, calibrate. Connect the Calibrate MCP server for native tool access in Claude Code, Cursor, Codex, and other MCP clients. The Calibrate CLI gives agents structured JSON output for scripting evaluations in any terminal. ## How agents use Calibrate Skills are the knowledge layer; the MCP server, CLI, and API are the execution layers underneath. Combine them — skills teach your agent *what* a good evaluation looks like, and the CLI (which the skills drive) *runs* it. | Layer | Purpose | Installation | | ---------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- | | Skills | Teach agents how to design and run evaluations on Calibrate | `npx skills add dalmia/calibrate-skills` | | MCP server | Gives agents native tools to manage agents, tests, and runs | `claude mcp add --transport http calibrate https://mcp.calibrate.artpark.ai/mcp --header "X-API-Key: your_api_key"` | | CLI | Runs evaluations from any terminal with JSON output | `brew install dalmia/tap/calibrate` | | API | Direct HTTPS access for any language or runtime | REST over HTTPS — see the [API reference](/api-reference/introduction) | The [skills](/agents/skills) drive the cloud [CLI](/cli/calibrate/overview), while the [MCP server](/mcp/overview) exposes the same operations as native tools — both wrap the [public API](/api-reference/introduction), so you can mix and match against the same workspace. ## Supported agents | Agent | Skills | MCP | CLI | API | | -------------- | ------ | --- | --- | --- | | Claude Code | ✓ | ✓ | ✓ | ✓ | | Cursor | ✓ | ✓ | ✓ | ✓ | | Codex | ✓ | ✓ | ✓ | ✓ | | Windsurf | ✓ | ✓ | ✓ | ✓ | | Claude Desktop | ✓ | ✓ | — | ✓ | | Any agent | — | — | ✓ | ✓ | All you need is a Calibrate API key — create one under [**Workspace settings → API keys**](https://calibrate.artpark.ai/workspace-settings?tab=api-keys) (see the [API keys guide](/reference/api-keys)). ## Next steps One command to teach your agent the full Calibrate evaluation loop. Go from nothing to a trustworthy first evaluation with `/onboard`. Config file locations for each client and platform. Install, authenticate, and run your first evaluation. # Agent skills Source: https://docs.calibrate.artpark.ai/agents/skills Install evaluation expertise into your AI coding agent — one command teaches it the full Calibrate loop Agent skills are modular knowledge packages that teach your AI coding agent how to evaluate AI agents on Calibrate. They follow the open [Agent Skills](https://agentskills.io) standard, so they work with Claude Code, Cursor, Codex, Windsurf, and other compatible agents. Each skill drives the cloud `calibrate` CLI against Calibrate's public API and covers the full loop: connect an agent, build tests, run them, and — Calibrate's signature move — **calibrate the LLM judges against human labels** so the automated scores are trustworthy. ## Install Install every Calibrate skill with one command. Pass `--agent` to target your specific coding agent — without it, the command defaults to whichever agent it detects, which may not be the one you want: ```bash Claude Code theme={null} npx skills add dalmia/calibrate-skills --agent claude-code -g ``` ```bash Cursor theme={null} npx skills add dalmia/calibrate-skills --agent cursor -g ``` ```bash Windsurf theme={null} npx skills add dalmia/calibrate-skills --agent windsurf -g ``` ```bash Codex theme={null} npx skills add dalmia/calibrate-skills --agent codex -g ``` The `-g` flag installs globally (available in all projects). After installing, **restart your coding agent session** for the new skills to appear. You also need the Calibrate CLI (which the skills drive) and an API key: ```bash theme={null} # Install the Calibrate CLI brew install dalmia/tap/calibrate # Authenticate (API key from Workspace settings → API keys) calibrate login ``` Skills are the knowledge layer — they teach your agent *how* to evaluate. The CLI they drive is the execution layer. See the [overview](/agents/overview#how-agents-use-calibrate) for how skills, MCP, and the CLI fit together. ## Skills versus MCP and CLI | Layer | What it is | Reach for it when | | ---------- | --------------------------------------------- | ------------------------------------------------------------- | | Skills | Knowledge — how to design and run evaluations | Your agent should decide *what* to test and *how* to judge it | | MCP server | Native tools inside your editor | You want the agent to call Calibrate operations as tools | | CLI | Terminal execution with JSON output | You're scripting evals or wiring them into CI/CD | Skills and the CLI work best together: the skills carry the methodology, and the CLI runs the operations they describe. ## Available skills Installing the pack adds the following skills. Invoke any of them by name (e.g. `/connect-agent`), or start with [`/onboard`](/agents/onboarding), which orchestrates the whole set. | Category | Skill | What it does | | ----------- | ------------------------------- | -------------------------------------------------------------------------- | | Overview | `calibrate-resources` | Orientation: the primitives, the CLI, auth, and which skill to reach for | | Onboarding | [`onboard`](/agents/onboarding) | Guided end-to-end first evaluation (orchestrator) | | Agents | `connect-agent` | Connect or create an agent under test and verify its connection | | Tests | `build-test-suite` | Author test cases (`tool_call` / `response`) and bulk-upload them | | Tests | `import-dataset` | Turn a CSV / JSONL / HuggingFace dataset into test cases | | Agent tests | `run-tests` | Link tests to an agent, run them, and read pass/fail with judge reasoning | | Agent tests | `benchmark-models` | Compare models on the agent's tests on a leaderboard | | Evaluators | `design-evaluator` | Create a versioned LLM or audio judge (binary or rating) | | Evaluators | `iterate-evaluator` | Add and tune an evaluator version, then pin it live | | Annotation | `calibrate-evaluator` | Measure human ↔ judge agreement and tune the judge until it matches humans | ## The primitives Every skill maps to one of Calibrate's five public API resources — deliberately, there is no persona, simulation, trace, dashboard, or report resource. | Primitive | CLI group | Skills | | --------------- | ------------------ | --------------------------------------- | | Agent | `agents` | `connect-agent` | | Test | `tests` | `build-test-suite`, `import-dataset` | | Agent test | `agent-tests` | `run-tests`, `benchmark-models` | | Evaluator | `evaluators` | `design-evaluator`, `iterate-evaluator` | | Annotation task | `annotation-tasks` | `calibrate-evaluator` | ## How skills load Skills load progressively, so they stay cheap in context: * **At startup** — only each skill's name and description load (\~100 tokens total), enough for your agent to know one exists. * **On activation** — the full `SKILL.md` instructions load when a skill is triggered. * **On demand** — reference files, assets, and scripts load only when a skill needs them. Each skill lives in `skills///` with a `SKILL.md` entrypoint and optional `references/`, `assets/`, and `scripts/` folders. The full source is on [GitHub](https://github.com/dalmia/calibrate-skills). ## Next steps Kick off `/onboard` to go from nothing to a trustworthy first evaluation. Give your agent native Calibrate tools alongside the skills. # Bulk unlink tests from agent Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/bulk-unlink-tests-from-agent /api-reference/openapi.json post /agent-tests/bulk-unlink Unlink one or more tests from an agent. Tests that are not linked are skipped. # Get benchmark status Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/get-benchmark-status /api-reference/openapi.json get /agent-tests/benchmark/{task_id} Get the results of a benchmark run # Get test case result Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/get-test-case-result /api-reference/openapi.json get /agent-tests/run/{task_id}/results/{test_uuid} Get the full result of one test case in a run # Get test run status Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/get-test-run-status /api-reference/openapi.json get /agent-tests/run/{task_id} Poll a test run for its status and evaluation results. # Link tests to agent Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/link-tests-to-agent /api-reference/openapi.json post /agent-tests Link one or more tests to an agent. Tests that are already linked are skipped. # List test runs for agent Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/list-test-runs-for-agent /api-reference/openapi.json get /agent-tests/agent/{agent_uuid}/runs List an agent's test runs with their results # List tests for agent Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/list-tests-for-agent /api-reference/openapi.json get /agent-tests/agent/{agent_uuid}/tests List the tests linked to an agent. # Run agent benchmark Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/run-agent-benchmark /api-reference/openapi.json post /agent-tests/agent/{agent_uuid}/benchmark Run a multi-model benchmark on an agent's linked tests as a background job. # Run agent tests Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/run-agent-tests /api-reference/openapi.json post /agent-tests/agent/{agent_uuid}/run Run an agent's linked tests as a background job, returning a task ID to poll. # Run agent tests in batch Source: https://docs.calibrate.artpark.ai/api-reference/agent-tests/run-agent-tests-in-batch /api-reference/openapi.json post /agent-tests/run Run agent tests for every agent, or for a selected set. # Create agent Source: https://docs.calibrate.artpark.ai/api-reference/agents/create-agent /api-reference/openapi.json post /agents Create an agent to test inside Calibrate or connect your existing agent to Calibrate # Get agent Source: https://docs.calibrate.artpark.ai/api-reference/agents/get-agent /api-reference/openapi.json get /agents/{agent_uuid} Get one agent by its ID # Link evaluators to agent Source: https://docs.calibrate.artpark.ai/api-reference/agents/link-evaluators-to-agent /api-reference/openapi.json post /agents/{agent_uuid}/evaluators Link one or more existing evaluators to an agent, skipping any already linked # List agent evaluators Source: https://docs.calibrate.artpark.ai/api-reference/agents/list-agent-evaluators /api-reference/openapi.json get /agents/{agent_uuid}/evaluators List evaluators linked to an agent # List agents Source: https://docs.calibrate.artpark.ai/api-reference/agents/list-agents /api-reference/openapi.json get /agents Get the list of all your agents # Resolve agent names to IDs Source: https://docs.calibrate.artpark.ai/api-reference/agents/resolve-agent-names-to-ids /api-reference/openapi.json post /agents/resolve Get the IDs for your agents by their names # Update agent Source: https://docs.calibrate.artpark.ai/api-reference/agents/update-agent /api-reference/openapi.json put /agents/{agent_uuid} Update an agent's configuration # Verify agent connection Source: https://docs.calibrate.artpark.ai/api-reference/agents/verify-agent-connection /api-reference/openapi.json post /agents/{agent_uuid}/verify-connection Verify an agent's connection and persist the result when successful # Bulk create items Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/bulk-create-items /api-reference/openapi.json post /annotation-tasks/{task_uuid}/items Bulk-create annotation items in a task, optionally seeding human annotations # Bulk update items Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/bulk-update-items /api-reference/openapi.json put /annotation-tasks/{task_uuid}/items Bulk-update item payloads in a task # Create annotation task Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/create-annotation-task /api-reference/openapi.json post /annotation-tasks Create an annotation task for annotators to label items against evaluators # Create labelling jobs Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/create-labelling-jobs /api-reference/openapi.json post /annotation-tasks/{task_uuid}/jobs Assign items to annotators, creating one labelling job per annotator # Get annotation task Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/get-annotation-task /api-reference/openapi.json get /annotation-tasks/{task_uuid} Get one annotation task with linked evaluators, items, and labelling jobs # Get evaluator run Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/get-evaluator-run /api-reference/openapi.json get /annotation-tasks/{task_uuid}/evaluator-runs/{job_uuid} Get one evaluator-run job with results and human-agreement summary # Get task agreement Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/get-task-agreement /api-reference/openapi.json get /annotation-tasks/{task_uuid}/agreement Get human-vs-human and human-vs-evaluator agreement metrics for a task # Get task summary Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/get-task-summary /api-reference/openapi.json get /annotation-tasks/{task_uuid}/summary Get a paginated summary table of items, evaluator runs, and human annotations for a task # List annotation tasks Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/list-annotation-tasks /api-reference/openapi.json get /annotation-tasks List annotation tasks with linked evaluators # Run evaluators on items Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/run-evaluators-on-items /api-reference/openapi.json post /annotation-tasks/{task_uuid}/evaluator-runs Run evaluators on task items as a background job # Update task evaluators Source: https://docs.calibrate.artpark.ai/api-reference/annotation-tasks/update-task-evaluators /api-reference/openapi.json put /annotation-tasks/{task_uuid}/evaluators Replace a task's linked evaluators with the given ordered set, linking, unlinking, and reordering as needed # Create annotator Source: https://docs.calibrate.artpark.ai/api-reference/annotators/create-annotator /api-reference/openapi.json post /annotators Create an annotator, a human labeller who can be assigned annotation tasks # List annotators Source: https://docs.calibrate.artpark.ai/api-reference/annotators/list-annotators /api-reference/openapi.json get /annotators List annotators with job counts and agreement stats # Update annotator Source: https://docs.calibrate.artpark.ai/api-reference/annotators/update-annotator /api-reference/openapi.json put /annotators/{annotator_uuid} Update an annotator's name # Create evaluator Source: https://docs.calibrate.artpark.ai/api-reference/evaluators/create-evaluator /api-reference/openapi.json post /evaluators Create an evaluator along with its first version, which is set live # Create evaluator version Source: https://docs.calibrate.artpark.ai/api-reference/evaluators/create-evaluator-version /api-reference/openapi.json post /evaluators/{evaluator_uuid}/versions Add a new version to an evaluator you created # Get evaluator Source: https://docs.calibrate.artpark.ai/api-reference/evaluators/get-evaluator /api-reference/openapi.json get /evaluators/{evaluator_uuid} Get one evaluator with its full version history # List evaluators Source: https://docs.calibrate.artpark.ai/api-reference/evaluators/list-evaluators /api-reference/openapi.json get /evaluators List your evaluators # Overview Source: https://docs.calibrate.artpark.ai/api-reference/introduction Authenticate and call the Calibrate Public API programmatically The Calibrate REST API gives you programmatic access to the full evaluation loop — create and connect agents, author test cases and evaluators, link tests to agents, launch test runs and benchmarks, poll results, and route runs to human reviewers with annotation tasks. ## What you can build | Resource | What it does | | -------------------- | ---------------------------------------------------------------------- | | **Agents** | Create, update, list, and verify-connect the agents under evaluation | | **Tests** | Author test cases one at a time or in bulk, and link them to agents | | **Evaluators** | Define and version the LLM judges that score runs | | **Agent tests** | Launch runs and benchmarks, then poll status and per-test-case results | | **Annotation tasks** | Route run outputs to human reviewers and measure inter-rater agreement | ## Getting started Obtain your API key from the [Calibrate dashboard](https://calibrate.artpark.ai/workspace-settings?tab=api-keys). See the [API keys guide](/reference/api-keys) for detailed setup instructions. Pass your key in the `X-API-Key` header on every request: ```bash theme={null} curl https://api.calibrate.artpark.ai/agents \ -H "X-API-Key: your_api_key" ``` Enumerate every agent in your org: ```bash theme={null} curl https://api.calibrate.artpark.ai/agents \ -H "X-API-Key: your_api_key" ``` Launch a test run for an agent: ```bash theme={null} curl -X POST "https://api.calibrate.artpark.ai/agent-tests/agent/{agent_uuid}/run" \ -H "X-API-Key: your_api_key" \ -H "Content-Type: application/json" \ -d '{}' ``` Since no `test_uuids` were passed, all linked tests for the agent will be run. The response returns a `task_id`: ```json theme={null} { "task_id": "abc123", "status": "queued", "dataset_id": null, "dataset_name": null } ``` Poll the returned `task_id` for status and results: ```bash theme={null} curl "https://api.calibrate.artpark.ai/agent-tests/run/{task_id}" \ -H "X-API-Key: your_api_key" ``` ## Base URL ```bash theme={null} https://api.calibrate.artpark.ai ``` ## OpenAPI specification The public API schema is published at an unauthenticated endpoint. ```bash theme={null} # Fetch the live spec (JSON) curl -s https://api.calibrate.artpark.ai/public-api/openapi.json ``` ## Authentication All API requests require an `X-API-Key` header. # Bulk create tests Source: https://docs.calibrate.artpark.ai/api-reference/tests/bulk-create-tests /api-reference/openapi.json post /tests/bulk Create many test cases at once and link them to your agents # Create test Source: https://docs.calibrate.artpark.ai/api-reference/tests/create-test /api-reference/openapi.json post /tests Create a test that runs your agent against a conversation and evaluates its answer quality or the tools it calls # Get test Source: https://docs.calibrate.artpark.ai/api-reference/tests/get-test /api-reference/openapi.json get /tests/{test_uuid} Get an agent test case by its ID # List tests Source: https://docs.calibrate.artpark.ai/api-reference/tests/list-tests /api-reference/openapi.json get /tests List all the test cases for your agents # Update test Source: https://docs.calibrate.artpark.ai/api-reference/tests/update-test /api-reference/openapi.json put /tests/{test_uuid} Update an agent test case # Create trace Source: https://docs.calibrate.artpark.ai/api-reference/traces/create-trace /api-reference/openapi.json post /traces Store a production agent turn and its conversation history for later review # Chat agent Source: https://docs.calibrate.artpark.ai/cli/agent-connections/chat Connect a text chat agent over a standard HTTP endpoint to evaluate it Connect a text chat agent to evaluate your agent's logic without placing calls by [simulating conversations](/cli/simulations) or [evaluating each turn](/cli/text-to-text). ## Quick start * **`agent_url`** — The URL where your agent receives messages * **`agent_headers`** — (optional) Authentication credentials for your API * **`agent_type`** — (optional) What your agent expects in the request body: `conversation` (default) or `general` ## Chat endpoint (required) The primary URL where Calibrate sends conversation messages during a test or a simulation. Set it as `agent_url`. **Format:** Full HTTP(S) URL ``` https://api.yourdomain.com/chat ``` **Requirements:** * HTTP or HTTPS (use `http://localhost:...` for a local agent) * Reachable from where you run the CLI * Must return a JSON response **Example:** ``` https://api.yourdomain.com/v1/chat ``` ## Authorization header Authentication credentials sent with every request. Add them under `agent_headers`. It is optional, add it only if your agent requires authentication. **Common formats:** **Bearer token** ```json theme={null} { "Authorization": "Bearer your-secret-token-here" } ``` **API key** ```json theme={null} { "X-API-Key": "your-api-key-here" } ``` ## Protocol You must provide an HTTP, JSON-based endpoint. For both LLM tests and simulations, Calibrate sends a `POST` request to your chat endpoint with a list of messages. Your endpoint should reply in the expected response format given below. ### Request format A `conversation` agent, the default, receives the full conversation history so far (including the latest simulated user input for simulations): ```json theme={null} { "messages": [ { "role": "assistant", "content": "Hello! How can I help you?" }, { "role": "user", "content": "Check order ORD-12345" } ] } ``` A `general` agent takes one instruction per call, so it receives only the latest user text: ```json theme={null} { "input": "Check order ORD-12345" } ``` Set this with `agent_type` in your config, or `--agent-type general` when verifying a connection from the CLI. Simulations always send the conversation, so a `general` agent suits [per-turn tests](/cli/text-to-text) rather than [simulations](/cli/simulations). To benchmark across models, Calibrate adds a `model` field to each request (`{ "messages": [...], "model": "..." }`). Your agent must read it and route to the right model — the easiest way is a framework like OpenRouter. For a Calibrate agent, the model is selected directly. ### Expected response format Your agent must return a JSON response with at least one of `response` or `tool_calls`. For simply returning a text reply: ```json theme={null} { "response": "Your order ORD-12345 shipped yesterday and arrives Friday." } ``` #### Tool calls For evaluating tool calls, return a list of `tool_calls`. Each item indicates the `tool` name, the `arguments` passed to the tool, and the tool's `output`: ```json theme={null} { "response": "Let me check that order.", "tool_calls": [ { "tool": "get_order", "arguments": { "order_id": "ORD-12345" }, "output": { "status": "shipped", "eta": "Friday" } } ] } ``` # Outbound voice agent Source: https://docs.calibrate.artpark.ai/cli/agent-connections/outbound-voice Configure Pipecat voice agents deployed over a WebSocket endpoint Simulate your voice agent making a call to a user. ## How it works 1. Set the `agent_url` for your websocket endpoint in your config. 2. Calibrate opens a WebSocket to your agent and connects as a client. 3. The simulated user (persona + scenario) speaks audio streams to your agent. 4. Your agent's audio streams back and Calibrate transcribes it. 5. The conversation is appended and new simulated user audio is sent to your agent. 6. Once the call is complete, metrics are computed over the resulting transcript. ## Configuration | Field | Type | Required | Description | | ----------- | ------ | -------- | ----------------------------------------- | | `agent_url` | string | Yes | WebSocket endpoint, e.g. `ws://host:port` | Your agent must speak Pipecat's WebSocket frame protocol with the same serializer (`protobuf`). A non-pipecat socket won't work. ## Example ```json theme={null} { "agent_url": "ws://localhost:8765" } ``` # Overview Source: https://docs.calibrate.artpark.ai/cli/agent-connections/overview Point the Calibrate CLI at an existing agent over HTTP or WebSocket Instead of defining an agent inside Calibrate, you can point the CLI at an agent you've already deployed. Pick the connection type that matches your agent: Standard HTTP chat, including OpenAI-compatible APIs, for evaluating the agent's logic End-to-end evaluation by simulating real audio calls with the agent ## Verify your connection Confirm Calibrate can verify your agent is reachable and returns the correct response format before running any evaluation. **Chat agent** — checks the agent's reachability and the correctness of its response format. It sends a sample request to the agent and expects a JSON response with at least one of `response` or `tool_calls`: ```bash theme={null} calibrate-agent simulations --verify --agent-url https://your-agent.example.com/chat \ --agent-headers '{"Authorization": "Bearer YOUR_API_KEY"}' ``` **Outbound voice agent** — Calibrate opens the WebSocket and confirms the handshake automatically before each voice run. This is a reachability check only and does not confirm whether the frame protocol or serializer is compatible. Pass `--skip-verify` to a run to bypass the pre-run connection check, which can useful when you've already verified the agent and don't want to run the check again. # Calibrate agent Source: https://docs.calibrate.artpark.ai/cli/calibrate-agent Define your agent within Calibrate Define your agent within Calibrate using the config file. ## Configuration ### `system_prompt` The system prompt that defines your agent's behavior — the same prompt you use in production. ``` You are a helpful customer support assistant for an online store. You help customers with: 1. Checking order status 2. Processing returns 3. Answering product questions ``` ### `tools` A list of tools available to your agent. See [Tools](/guides/tools) for how to set it up, with examples for different tool types. ## Example Refer to [this sample](https://github.com/ARTPARK-SAHAI-ORG/calibrate/blob/main/examples/llm/config-internal-agent.json). Already have a deployed agent? See [Agent Connections](/cli/agent-connections/overview). # Agent mode Source: https://docs.calibrate.artpark.ai/cli/calibrate/agent-mode Run the calibrate CLI from CI and AI coding agents with machine-readable output. Agent mode makes the `calibrate` CLI friendlier for automation and AI coding agents: it returns **structured errors** and defaults output to **TOON** — a compact, token-efficient format — instead of the human `pretty` view. Agent mode turns on automatically when a known agent environment is detected (`CLAUDE_CODE`, `CURSOR_AGENT`, and similar), so you rarely set it by hand. ## When to use it | Use ordinary mode when | Use agent mode when | | ------------------------------------- | ----------------------------------- | | A human is exploring at a terminal | A script or CI job runs the command | | You want spinners, prompts, and color | You want stable, parseable output | | You want a pager or table view | An AI agent consumes the result | ## Toggle it Agent mode is the global `--agent-mode` flag, on by default inside agent environments: ```bash theme={null} # Force it on calibrate agents list --agent-mode # Force it off — get the human "pretty" output calibrate agents list --agent-mode=false ``` ## What changes * **Structured errors** — failures come back as a machine-parseable object instead of loose prose, so an agent can branch on them. * **TOON output by default** — `--output-format` defaults to `toon` (Token- Oriented Object Notation, a compact JSON-like format that uses fewer tokens). Override per command with `--output-format json` (or `yaml`, `table`, `pretty`). * **Non-interactive by default** — pair with `--no-interactive` to disable auto-prompting, the explorer auto-launch, and TUI forms in unattended runs. See the [global flags](/cli/calibrate/overview#global-flags) for the full set of output and automation options. # Agent tests Source: https://docs.calibrate.artpark.ai/cli/calibrate/agent-tests Operations for agent-tests ## Run agent benchmark Run a multi-model benchmark on an agent's linked tests as a background job. ```bash theme={null} calibrate agent-tests benchmark [flags] ``` **Options** | Option | Type | Default | Description | | ----------------------- | ----------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `-a, --agent-uuid` | string | — | **Required.** Agent to benchmark | | `-m, --models` | stringArray | — | **Required.** Model names to benchmark | | `-p, --parallel-models` | true | `true` | How to run the models. true runs several at a time, `false` runs each one only after the one before it has finished. Use `false` to keep the load on your own agent down | | `-t, --test-uuids` | string | — | A subset of the agent's linked tests to benchmark. Each ID must be linked to the agent. Omit to run all linked tests | **Examples** ```bash theme={null} calibrate agent-tests benchmark --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --models '["openai/gpt-4.1","anthropic/claude-sonnet-4"]' ``` ## Bulk unlink tests from agent Unlink one or more tests from an agent. Tests that are not linked are skipped. ```bash theme={null} calibrate agent-tests bulk-unlink [flags] ``` **Options** | Option | Type | Description | | ------------------ | ----------- | -------------------------------------------- | | `-a, --agent-uuid` | string | **Required.** Agent to unlink tests from | | `-t, --test-uuids` | stringArray | **Required.** Tests to unlink from the agent | **Examples** ```bash theme={null} calibrate agent-tests bulk-unlink --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --test-uuids '["b1c2d3e4-f5a6-7890-bcde-f12345678901"]' ``` ## Get benchmark status Get the results of a benchmark run ```bash theme={null} calibrate agent-tests get-benchmark [flags] ``` **Options** | Option | Type | Default | Description | | --------------- | ---------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `-c, --compact` | model\_results.test\_results | — | Return a compact response that omits heavy detail fields (model\_results.test\_results, `evaluators.output_config`), keeping only the lightweight decision fields. Omit for full detail | | `-m, --mode` | full | `full` | How much of each test case to return. full returns every field of every case. `summary` returns one light row per case, with its ID, name, verdict and short reason, leaving out the conversation, the agent's output and the evaluator verdicts. Read those one case at a time from `GET /agent-tests/run/{task_id}/results/{test_uuid}` (options: full, summary) | | `--only-failed` | — | — | Return only failing test cases for each model. Omit to return every case | | `-t, --task-id` | string | — | **Required.** Benchmark run to poll for status and results | **Examples** ```bash theme={null} calibrate agent-tests get-benchmark --task-id a3b2c1d0-e5f4-3210-abcd-ef1234567890 ``` ## Get test run status Poll a test run for its status and evaluation results. ```bash theme={null} calibrate agent-tests get-run [flags] ``` **Options** | Option | Type | Default | Description | | --------------- | -------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `-c, --compact` | results.output | — | Return a compact response that omits heavy detail fields (results.output, `results.test_case`, `results.judge_results`, `results.reasoning`, `evaluators.output_config`), keeping only the lightweight decision fields. Omit for full detail | | `-m, --mode` | full | `full` | How much of each test case to return. full returns every field of every case. `summary` returns one light row per case, with its ID, name, verdict and short reason, leaving out the conversation, the agent's output and the evaluator verdicts. Read those one case at a time from `GET /agent-tests/run/{task_id}/results/{test_uuid}` (options: full, summary) | | `--only-failed` | — | — | Return only failing test cases. Omit to return every case | | `-t, --task-id` | string | — | **Required.** Test run to poll for status and results | **Examples** ```bash theme={null} calibrate agent-tests get-run --task-id a3b2c1d0-e5f4-3210-abcd-ef1234567890 ``` ## Get test case result Get the full result of one test case in a run ```bash theme={null} calibrate agent-tests get-run-case [flags] ``` **Options** | Option | Type | Description | | ------------- | ---------- | -------------------------------------------------------------------------------------------- | | `-m, --model` | string | Which model's answer to read. Required for a benchmark, which runs every test once per model | | `--task-id` | string | **Required.** Test run or benchmark the case was run in | | `--test-uuid` | test\_uuid | **Required.** The test whose result to read, as test\_uuid on the case | **Examples** ```bash theme={null} calibrate agent-tests get-run-case --task-id a3b2c1d0-e5f4-3210-abcd-ef1234567890 --test-uuid b1c2d3e4-f5a6-7890-bcde-f12345678901 ``` ## Link tests to agent Link one or more tests to an agent. Tests that are already linked are skipped. ```bash theme={null} calibrate agent-tests link [flags] ``` **Options** | Option | Type | Description | | ------------------ | ----------- | -------------------------------------------------------------------- | | `-a, --agent-uuid` | string | **Required.** Agent to link tests to | | `-t, --test-uuids` | stringArray | **Required.** Tests to link. Any that are already linked are skipped | **Examples** ```bash theme={null} calibrate agent-tests link --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --test-uuids '["b1c2d3e4-f5a6-7890-bcde-f12345678901"]' ``` ## List tests for agent List the tests linked to an agent. ```bash theme={null} calibrate agent-tests list-for-agent [flags] ``` **Options** | Option | Type | Default | Description | | ------------------ | -------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | | `-a, --agent-uuid` | string | — | **Required.** Agent whose linked tests to list | | `-l, --limit` | string | — | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | — | Number of items to skip before returning results | | `--q` | name | — | Case-insensitive search on name. Blank is a no-op | | `--q-mode` | q | `contains` | How to match q against the searched fields (options: contains, starts\_with, ends\_with, exact) | | `-t, --type` | response | — | Keep only tests of these types. Repeat the parameter or pass one comma-separated value. Accepts response, `tool_call`, `conversation`, `general` | **Examples** ```bash theme={null} calibrate agent-tests list-for-agent --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## List test runs for agent List an agent's test runs with their results ```bash theme={null} calibrate agent-tests list-runs-for-agent [flags] ``` **Options** | Option | Type | Description | | ---------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--agent-uuid` | string | **Required.** Agent whose test runs to list | | `--around` | offset | ID of a run to jump to, returning the page that contains it instead of the page at offset | | `--has-failures` | true | Filter by whether a test in the run did not pass. true returns only runs with a failing test, `false` only runs that got through every test and passed them all. A run that broke, was stopped, or gave up part way with no failing test is in neither: filter by `status` for those. Omit for both | | `-l, --limit` | string | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | Number of items to skip before returning results | | `-s, --status` | string | Filter by run status. Omit for all statuses (options: queued, in\_progress, cancelled, done, failed) | | `-t, --type` | llm-unit-test | Filter by run type. Omit to return both: | **Examples** ```bash theme={null} calibrate agent-tests list-runs-for-agent --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Run agent tests Run an agent's linked tests as a background job, returning a task ID to poll. ```bash theme={null} calibrate agent-tests run [flags] ``` **Options** | Option | Type | Description | | ------------------ | ------ | ------------------------------------------------------- | | `-a, --agent-uuid` | string | **Required.** Agent to test | | `-t, --test-uuids` | string | Tests to run. Omit to run all tests linked to the agent | **Examples** ```bash theme={null} calibrate agent-tests run --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Run agent tests in batch Run agent tests for every agent, or for a selected set. ```bash theme={null} calibrate agent-tests run-batch [flags] ``` **Options** | Option | Type | Description | | ------------------ | ------ | --------------------------------------------------------------------------------------- | | `--body` | string | Request body as JSON (alternative to individual flags). Can also be provided via stdin. | | `-b, --body-param` | string | JSON object | **Examples** ```bash theme={null} calibrate agent-tests run-batch ``` # Agents Source: https://docs.calibrate.artpark.ai/cli/calibrate/agents Operations for agents ## Create agent Create an agent to test inside Calibrate or connect your existing agent to Calibrate ```bash theme={null} calibrate agents create [flags] ``` **Options** | Option | Type | Description | | -------------------- | ---- | ------------------------------------------------- | | `-c, --config-param` | type | Agent behavioral config. The keys depend on type. | **Examples** *Agent within Calibrate* ```bash theme={null} calibrate agents create \ --name "Support Agent" \ --type "agent" \ --config-param '{"system_prompt":"You are a helpful assistant.","llm":{"model":"google/gemini-2.5-flash"},"stt":{"provider":"google"},"tts":{"provider":"google"},"settings":{"agent_speaks_first":false,"max_assistant_turns":10}}' ``` *Connect OpenAI-compatible agent* ```bash theme={null} calibrate agents create \ --name "My Hosted Agent" \ --type "connection" \ --config-param '{"agent_url":"https://api.example.com/v1/chat/completions","agent_headers":{"Authorization":"Bearer "},"benchmark_provider":"openrouter"}' ``` For more details, see [Agent connections](/core-concepts/agent-connections). ## Get agent Get one agent by its ID ```bash theme={null} calibrate agents get [flags] ``` **Options** | Option | Type | Description | | ------------------ | ------ | ----------------------------------- | | `-a, --agent-uuid` | string | **Required.** The agent to retrieve | **Examples** ```bash theme={null} calibrate agents get --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Link evaluators to agent Link one or more existing evaluators to an agent, skipping any already linked ```bash theme={null} calibrate agents link-evaluators [flags] ``` **Options** | Option | Type | Description | | --------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | `-a, --agent-uuid` | string | **Required.** The agent to link the evaluators to | | `-e, --evaluator-ids` | stringArray | **Required.** The evaluators to link to the agent. Ones that are already linked are skipped. Each must be one you created or a built-in default | **Examples** ```bash theme={null} calibrate agents link-evaluators --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --evaluator-ids '["f47ac10b-58cc-4372-a567-0e02b2c3d479"]' ``` ## List agents Get the list of all your agents ```bash theme={null} calibrate agents list [flags] ``` **Options** | Option | Type | Description | | ------------- | ------ | ---------------------------------------------------------------- | | `-l, --limit` | string | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | Number of items to skip before returning results | | `--q` | name | Case-insensitive substring search on name. Blank is a no-op | **Examples** ```bash theme={null} calibrate agents list ``` ## List agent evaluators List evaluators linked to an agent ```bash theme={null} calibrate agents list-evaluators [flags] ``` **Options** | Option | Type | Description | | ------------------ | ------ | ---------------------------------------------------------------- | | `-a, --agent-uuid` | string | **Required.** The agent whose evaluators to list | | `-l, --limit` | string | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | Number of items to skip before returning results | | `--q` | name | Case-insensitive substring search on name. Blank is a no-op | **Examples** ```bash theme={null} calibrate agents list-evaluators --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Resolve agent names to IDs Get the IDs for your agents by their names ```bash theme={null} calibrate agents resolve [flags] ``` **Options** | Option | Type | Description | | ------------- | ----------- | ------------------------------------------- | | `-n, --names` | stringArray | **Required.** Agent names to resolve to IDs | **Examples** ```bash theme={null} calibrate agents resolve --names '["my-agent","support-bot"]' ``` ## Update agent Update an agent's configuration ```bash theme={null} calibrate agents update [flags] ``` **Options** | Option | Type | Description | | -------------------- | ------ | ------------------------------------------------- | | `-a, --agent-uuid` | string | **Required.** The agent to update | | `-c, --config-param` | type | Agent behavioral config. The keys depend on type. | **Examples** ```bash theme={null} calibrate agents update --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Verify agent connection Verify an agent's connection and persist the result when successful ```bash theme={null} calibrate agents verify-connection [flags] ``` **Options** | Option | Type | Description | | ------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------ | | `-a, --agent-uuid` | string | **Required.** The agent whose connection to verify | | `--messages` | string | Sample chat messages to send during verification. Omit to use the default probe | | `--model` | string | Model to verify. Omit for a basic connection check. Provide it for a model-specific check before benchmarking that model | **Examples** ```bash theme={null} calibrate agents verify-connection --agent-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` # Annotation tasks Source: https://docs.calibrate.artpark.ai/cli/calibrate/annotation-tasks Operations for annotation-tasks ## Bulk create items Bulk-create annotation items in a task, optionally seeding human annotations ```bash theme={null} calibrate annotation-tasks add-items [flags] ``` **Options** | Option | Type | Description | | -------------------- | ------ | ----------------------------------------------------------------------------------------- | | `-a, --annotator-id` | string | Annotator these initial annotations belong to. Required when any item carries annotations | | `-i, --items` | string | **Required.** Items to insert. Insertion order is preserved | | `-t, --task-uuid` | string | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks add-items --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --items '[]' ``` ## Create annotation task Create an annotation task for annotators to label items against evaluators ```bash theme={null} calibrate annotation-tasks create [flags] ``` **Options** | Option | Type | Description | | --------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--description` | string | A description for the task. Omit for none | | `-e, --evaluator-ids` | string | IDs of evaluators to link when the task is created, in order. Each must be one you created or a built-in default. Omit to create with no linked evaluators | | `-n, --name` | string | **Required.** Task name, unique within your workspace | | `-t, --type` | stt | Task type. Determines the shape of each item's payload. | **Examples** ```bash theme={null} calibrate annotation-tasks create --name --type tts ``` ## Run evaluators on items Run evaluators on task items as a background job ```bash theme={null} calibrate annotation-tasks create-evaluator-run [flags] ``` **Options** | Option | Type | Description | | ------------------ | ----------------- | ----------------------------------------------------------------------------------------- | | `-e, --evaluators` | string | **Required.** The evaluators to run. Each must be linked to the task | | `-i, --item-ids` | select\_all=false | Item IDs to run on. **Required when select\_all=false**. Ignored when `select_all=true` | | `--q` | payload.name | Case-insensitive substring filter on payload.name. Applies only when `select_all=true` | | `-s, --select-all` | true | When true, run on every item in the task. Set `q` to run only items whose name matches it | | `-t, --task-uuid` | string | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks create-evaluator-run --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --evaluators '[]' ``` ## Create labelling jobs Assign items to annotators, creating one labelling job per annotator ```bash theme={null} calibrate annotation-tasks create-labelling-jobs [flags] ``` **Options** | Option | Type | Default | Description | | ------------------------ | ----------------- | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `-a, --annotator-ids` | stringArray | — | **Required.** Annotator IDs to assign, creating one labelling job for each annotator. Must be in your workspace | | `-c, --comments-enabled` | true | `true` | When true, the labelling form lets the annotator leave a comment on each item | | `-e, --evaluator-ids` | None | — | Subset of the task's linked evaluators to show in these jobs. Must be a subset of the current links, an empty list gives a 400. Applies to every annotator's job. Omit (None) to snapshot every linked evaluator | | `-i, --item-ids` | select\_all=false | — | Item IDs to assign. **Required when select\_all=false**. Ignored when `select_all=true` | | `--q` | payload.name | — | Case-insensitive substring filter on payload.name. Applies only when `select_all=true` | | `-r, --reasoning-mode` | optional | `optional` | How the labelling form treats the reasoning box on each judgement. optional shows it, `required` shows it and asks the annotator to fill it in, `hidden` leaves it out (options: optional, required, hidden) | | `-s, --select-all` | true | — | When true, assign every item in the task and ignore `item_ids`. Set `q` to assign only items whose name matches it | | `-t, --task-uuid` | string | — | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks create-labelling-jobs --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --annotator-ids '["f47ac10b-58cc-4372-a567-0e02b2c3d479"]' ``` ## Get annotation task Get one annotation task with linked evaluators, items, and labelling jobs ```bash theme={null} calibrate annotation-tasks get [flags] ``` **Options** | Option | Type | Description | | ----------------- | ------ | ------------------------------ | | `-t, --task-uuid` | string | **Required.** Task to retrieve | **Examples** ```bash theme={null} calibrate annotation-tasks get --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Get task agreement Get human-vs-human and human-vs-evaluator agreement metrics for a task ```bash theme={null} calibrate annotation-tasks get-agreement [flags] ``` **Options** | Option | Type | Default | Description | | ----------------- | ------ | ------- | --------------------------------------------------------------------- | | `-b, --bucket` | string | `week` | How to bucket points in the trend series (options: week, month, year) | | `--days` | int | `90` | Trailing window in days for the trend series | | `-t, --task-uuid` | string | — | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks get-agreement --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Get evaluator run Get one evaluator-run job with results and human-agreement summary ```bash theme={null} calibrate annotation-tasks get-evaluator-run [flags] ``` **Options** | Option | Type | Description | | ----------------- | ------ | ----------------------------------------- | | `-j, --job-uuid` | string | **Required.** The evaluator run to act on | | `-t, --task-uuid` | string | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks get-evaluator-run --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --job-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## Get task summary Get a paginated summary table of items, evaluator runs, and human annotations for a task ```bash theme={null} calibrate annotation-tasks get-summary [flags] ``` **Options** | Option | Type | Default | Description | | --------------------- | ------------ | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `-c, --compact` | rows.payload | — | Return a compact response that omits heavy detail fields (rows.payload, `rows.evaluator_reasoning`, `rows.annotations.reasoning`, `evaluators.versions.system_prompt`, `evaluators.versions.output_config`, `evaluators.versions.variables`, `item_comments`), keeping only the lightweight decision fields. Omit for full detail | | `--disagreement-only` | — | — | When true, keep only rows where the evaluator disagreed with at least one annotator | | `-i, --item-id` | annotators | — | Filter rows to a single item. The full task-wide annotator union is still returned in annotators | | `--limit` | int | `50` | Maximum number of items to return | | `--live-only` | — | — | When true, emit only one row for each (item, evaluator) pair using the evaluator's live version. Versions other than the live one that have runs are excluded | | `--offset` | int | — | Number of items to skip before returning results | | `--order` | string | `desc` | Sort direction (options: asc, desc) | | `--q` | payload.name | — | Case-insensitive substring search on payload.name. Blank is a no-op | | `-s, --sort-by` | string | `created_at` | Sort key for the results | | `-t, --task-uuid` | string | — | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks get-summary --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## List annotation tasks List annotation tasks with linked evaluators ```bash theme={null} calibrate annotation-tasks list [flags] ``` **Options** | Option | Type | Description | | ------------- | ------ | ---------------------------------------------------------------- | | `-l, --limit` | string | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | Number of items to skip before returning results | | `--q` | name | Case-insensitive substring search on name. Blank is a no-op | **Examples** ```bash theme={null} calibrate annotation-tasks list ``` ## Update task evaluators Replace a task's linked evaluators with the given ordered set, linking, unlinking, and reordering as needed ```bash theme={null} calibrate annotation-tasks set-evaluators [flags] ``` **Options** | Option | Type | Description | | -------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `-e, --evaluator-ids` | stringArray | **Required.** The full ordered set of evaluators the task should end up linked to, in display order. Missing ones are unlinked, new ones are linked, and the order sets their position. Send an empty list to unlink all. Each must be one you created or a built-in default | | `--optional-evaluator-ids` | evaluator\_ids | Which of evaluator\_ids annotators may leave blank. Applied as a whole set, so an ID left out becomes required again. Optional evaluators do not hold a labelling job back from completing. Omit to leave every evaluator as it is | | `-t, --task-uuid` | string | **Required.** Annotation task to act on | **Examples** ```bash theme={null} calibrate annotation-tasks set-evaluators --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --evaluator-ids '["f47ac10b-58cc-4372-a567-0e02b2c3d479"]' ``` ## Bulk update items Bulk-update item payloads in a task ```bash theme={null} calibrate annotation-tasks update-items [flags] ``` **Options** | Option | Type | Description | | ----------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------- | | `-t, --task-uuid` | string | **Required.** Annotation task to act on | | `-u, --updates` | string | **Required.** The new payload for each item you're updating. Entries not in this task, or referencing deleted items, are skipped | **Examples** ```bash theme={null} calibrate annotation-tasks update-items --task-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --updates '[{"uuid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","payload":""}]' ``` # Annotators Source: https://docs.calibrate.artpark.ai/cli/calibrate/annotators Operations for annotators ## Create annotator Create an annotator, a human labeller who can be assigned annotation tasks ```bash theme={null} calibrate annotators create [flags] ``` **Options** | Option | Type | Description | | ------------ | ------ | ---------------------------------------------------------- | | `-n, --name` | string | **Required.** Annotator name, unique within your workspace | **Examples** ```bash theme={null} calibrate annotators create --name ``` ## List annotators List annotators with job counts and agreement stats ```bash theme={null} calibrate annotators list [flags] ``` **Examples** ```bash theme={null} calibrate annotators list ``` ## Update annotator Update an annotator's name ```bash theme={null} calibrate annotators update [flags] ``` **Options** | Option | Type | Description | | ---------------------- | ------ | ------------------------------------------------------------------------- | | `-a, --annotator-uuid` | string | **Required.** Annotator to update | | `-n, --name` | string | New annotator name, unique within your workspace. Omit to leave unchanged | **Examples** ```bash theme={null} calibrate annotators update --annotator-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` # Evaluators Source: https://docs.calibrate.artpark.ai/cli/calibrate/evaluators Operations for evaluators ## Create evaluator Create an evaluator along with its first version, which is set live ```bash theme={null} calibrate evaluators create [flags] ``` **Options** | Option | Type | Description | | ---------------------- | ------ | ------------------------------------------------------------------------------------------ | | `--data-type` | text | The modality the judge reads: | | `--description` | string | Description. Omit to leave blank | | `-e, --evaluator-type` | tts | What the evaluator judges: | | `-n, --name` | string | **Required.** Evaluator name, unique within your workspace | | `--output-type` | binary | How the evaluator scores: | | `-v, --version-param` | string | **Required.** One version of an evaluator: its judge prompt, model, variables, and rubric. | **Examples** ```bash theme={null} calibrate evaluators create --name --version-param '{"judge_model":"","system_prompt":""}' ``` ## Create evaluator version Add a new version to an evaluator you created ```bash theme={null} calibrate evaluators create-version [flags] ``` **Options** | Option | Type | Description | | ---------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `-e, --evaluator-uuid` | string | **Required.** Evaluator to add a version to | | `-j, --judge-model` | openai/gpt-4.1 | **Required.** The model that runs the judge, named the way its provider does, for example openai/gpt-4.1 or `anthropic/claude-sonnet-4` | | `-m, --make-live` | true | When true, immediately point the evaluator's live version at this new version | | `--output-config` | rating | The scale points and their labels. Required for a rating evaluator. A `binary` evaluator uses the default Correct/Wrong labels unless you set your own | | `-s, --system-prompt` | — | **Required.** \{ \{variable} } Judge system prompt. May contain \{ \{variable} } placeholders | | `-v, --variables` | string | Declared prompt variables. Omit if the prompt has none. After the first version the variable names are fixed. You can change a variable's description or default, but not add, remove, or rename one | **Examples** ```bash theme={null} calibrate evaluators create-version --evaluator-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 --judge-model --system-prompt ``` ## Get evaluator Get one evaluator with its full version history ```bash theme={null} calibrate evaluators get [flags] ``` **Options** | Option | Type | Description | | ---------------------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | `-c, --compact` | versions.system\_prompt | Return a compact response that omits heavy detail fields (versions.system\_prompt, `versions.output_config`, `versions.variables`), keeping only the lightweight decision fields. Omit for full detail | | `-e, --evaluator-uuid` | string | **Required.** Evaluator to retrieve | **Examples** ```bash theme={null} calibrate evaluators get --evaluator-uuid f47ac10b-58cc-4372-a567-0e02b2c3d479 ``` ## List evaluators List your evaluators ```bash theme={null} calibrate evaluators list [flags] ``` **Options** | Option | Type | Default | Description | | ------------------------ | ------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | | `--data-type` | string | — | Filter by modality. Omit for all (options: text, audio) | | `-e, --evaluator-type` | string | — | Filter by what the evaluator judges. Omit for all types (options: tts, stt, llm, llm-general, conversation, tool-call) | | `-i, --include-defaults` | — | `true` | Retained for backward compatibility and no longer filters. Your evaluators, including your editable copies of the defaults, are always returned | | `-l, --limit` | string | — | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | — | Number of items to skip before returning results | | `--q` | name | — | Case-insensitive substring search on name. Blank is a no-op | **Examples** ```bash theme={null} calibrate evaluators list ``` # Overview Source: https://docs.calibrate.artpark.ai/cli/calibrate/overview Command-line interface for the Calibrate AI evaluation platform The Calibrate CLI brings the full evaluation loop to your terminal — create and connect agents, author tests and evaluators, launch runs and benchmarks, poll results, and set up annotation tasks — for scripting, automation, and CI/CD integration. It's [agent-mode](/cli/calibrate/agent-mode) aware, emitting structured errors and compact TOON output when an AI coding agent drives it. View source, releases, and contribute ## What you can do * **Manage agents** — create, update, list, and verify-connect agents; resolve friendly names to UUIDs * **Build test suites** — author test cases individually or in bulk, update them, and link them to agents * **Configure evaluators** — create and version the judges that score runs * **Run evaluations** — launch test runs and benchmarks for one agent or many, then poll status and per-test-case results * **Review with humans** — create annotation tasks, run evaluators over them, and measure reviewer agreement * **Script anything** — JSON, YAML, table, or TOON output with `jq` filtering, plus a non-interactive mode built for CI/CD ## Quick start ```bash theme={null} brew install dalmia/tap/calibrate ``` ```bash theme={null} calibrate login ``` Create an API key under [**Workspace settings → API keys**](https://calibrate.artpark.ai/workspace-settings?tab=api-keys) — see the [API keys guide](/reference/api-keys). ```bash theme={null} calibrate agent-tests run \ --agent-uuid \ --test-uuids ``` Returns the evaluation `task_id`. ```bash theme={null} calibrate agent-tests get-run --task-id ``` ## Command reference List agents and resolve names to UUIDs. Link tests, launch runs and benchmarks, and poll their results. Create test cases individually or in bulk, and update them. Create and version the judges that score runs. Route runs to human reviewers and measure agreement. ## Global flags All commands support these flags: | Option | Type | Default | Description | | --------------------- | ----------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `--agent-mode` | — | — | Enable structured errors and default TOON output for AI coding agents. Automatically enabled when a known agent environment is detected (CLAUDE\_CODE, CURSOR\_AGENT, etc.). Use --agent-mode=false to disable. | | `--api-key-auth` | string | — | Workspace API key. Create one under Workspace settings → API keys. | | `--color` | string | `auto` | Control colored output: auto (color when output is a TTY), always, or never. Respects NO\_COLOR and FORCE\_COLOR env vars. | | `-d, --debug` | — | — | Log request and response diagnostics to stderr | | `--dry-run` | — | — | Preview the request that would be sent without executing it (output to stderr) | | `-H, --header` | stringArray | — | Set a custom HTTP request header (format: "Key: Value"). Can be specified multiple times. | | `--include-headers` | — | — | Include HTTP response headers in the output | | `-q, --jq` | string | — | Filter and transform output using a jq expression (e.g., '.name', '.items\[] \| .id') | | `--no-interactive` | — | — | Disable all interactive features (auto-prompting, explorer auto-launch, TUI forms) | | `-o, --output-format` | string | `pretty` | Specify the output format. Options: pretty, json, yaml, table, toon. | | `--server` | string | — | Select a server by index (for indexed servers) or name (for named servers) | | `--server-url` | string | — | Override the default server URL | | `--timeout` | string | — | HTTP request timeout (e.g., 30s, 5m, 100ms) | | `--usage` | — | — | Print the CLI Usage schema in KDL format | ## JSON output Use `--output-format json` to get machine-readable output: ```bash theme={null} # List agent UUIDs calibrate agents list --output-format json | jq '.[].uuid' # Get an evaluation run's status calibrate agent-tests get-run --task-id --output-format json | jq '.status' ``` ## Requirements * macOS or Linux # Tests Source: https://docs.calibrate.artpark.ai/cli/calibrate/tests Operations for tests ## Bulk create tests Create many test cases at once and link them to your agents ```bash theme={null} calibrate tests bulk-create [flags] ``` **Options** | Option | Type | Description | | ------------------- | ------------------------ | ----------------------------------------------------------------------------------------------- | | `-a, --agent-uuids` | string | IDs of agents to link every created test to. Omit to link none | | `-l, --language` | config.settings.language | Language written to each test's config.settings.language. Omit to leave unset | | `--tests` | string | **Required.** Test items to create, at most 500 per request, with names unique within the batch | | `--type` | response | What the test judges: | **Examples** ```bash theme={null} calibrate tests bulk-create --type tool_call --tests '[{"name":"","evaluators":[{"evaluator_uuid":"f47ac10b-58cc-4372-a567-0e02b2c3d479","variable_values":{"criteria":"The reply must cite the refund window"} }]}]' ``` ## Create test Create a test that runs your agent against a conversation and evaluates its answer quality or the tools it calls ```bash theme={null} calibrate tests create [flags] ``` **Options** | Option | Type | Description | | -------------------- | ------- | -------------------------- | | `-c, --config-param` | history | The calibrate test config. | **Examples** ```bash theme={null} calibrate tests create --name --type tool_call ``` ## Get test Get an agent test case by its ID ```bash theme={null} calibrate tests get [flags] ``` **Options** | Option | Type | Description | | ----------------- | ------ | ------------------------------ | | `-t, --test-uuid` | string | **Required.** Test to retrieve | **Examples** ```bash theme={null} calibrate tests get --test-uuid b1c2d3e4-f5a6-7890-bcde-f12345678901 ``` ## List tests List all the test cases for your agents ```bash theme={null} calibrate tests list [flags] ``` **Options** | Option | Type | Description | | ------------- | ------ | ---------------------------------------------------------------- | | `-l, --limit` | string | Maximum number of items to return. Omit for no limit (all items) | | `--offset` | int | Number of items to skip before returning results | | `--q` | name | Case-insensitive substring search on name. Blank is a no-op | **Examples** ```bash theme={null} calibrate tests list ``` ## Update test Update an agent test case ```bash theme={null} calibrate tests update [flags] ``` **Options** | Option | Type | Description | | -------------------- | ------- | -------------------------- | | `-c, --config-param` | history | The calibrate test config. | **Examples** ```bash theme={null} calibrate tests update --test-uuid b1c2d3e4-f5a6-7890-bcde-f12345678901 ``` # Traces Source: https://docs.calibrate.artpark.ai/cli/calibrate/traces Operations for traces ## Create trace Store a production agent turn and its conversation history for later review ```bash theme={null} calibrate traces create [flags] ``` **Options** | Option | Type | Description | | ----------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | | `-a, --agent-id` | string | **Required.** ID of the agent that produced the turn. Must be an agent in your workspace | | `-c, --conversation-id` | string | Your own ID for the conversation this turn belongs to, stored for reference only. Omit if you have none | | `-i, --input` | string | JSON value (one of: string \| array of \{ role: string, content: string, AdditionalProperties: object }) | | `-l, --labels` | stringArray | Your own tags for this turn, such as an environment or a release. Matched exactly when filtering, so keep the spelling stable. Omit if you have none | | `--message-id` | input | Your own ID for the last user message in input, stored for reference only. Omit if you have none | | `--metadata` | gen\_ai.\* | Key-value pairs stored with the trace. Prefer OTel gen\_ai.\* key names where they fit. Omit if you have none | | `--output-param` | string | **Required.** | **Examples** ```bash theme={null} calibrate traces create --agent-id --input '[]' --output-param '{}' ``` # Overview Source: https://docs.calibrate.artpark.ai/cli/overview Command-line interface for evaluating AI agents This is the **local** toolkit (`calibrate-agent`) for benchmarking STT, TTS, and LLM providers and running agent simulations on your own machine. For the hosted CLI that runs agent tests against your deployed agents, see the [CLI](/cli/calibrate/overview) tab. ## Installation ```bash theme={null} pip install calibrate-agent ``` ## Get started The interactive CLI requires [Node.js](https://nodejs.org/) to be installed on your system. ```bash theme={null} calibrate-agent ``` Launches the interactive main menu where you can select from all available options. | Command | Description | | ----------------------------- | ------------------------------------------------- | | `calibrate-agent stt` | Interactive STT evaluation — benchmark providers | | `calibrate-agent tts` | Interactive TTS evaluation — benchmark providers | | `calibrate-agent llm` | Interactive LLM evaluation — test agent responses | | `calibrate-agent simulations` | Interactive text or voice simulations | ## Next steps Benchmark STT providers on your audio dataset Benchmark TTS providers on your text dataset Test agent responses and tool calls Run text or voice simulations # Simulations Source: https://docs.calibrate.artpark.ai/cli/simulations Run simulated conversations to test your agent end-to-end