- Trace Claude Code sessions to record session, turn, model call, tool, and subagent spans in Braintrust.
- Trace with OpenTelemetry to send Claude Code’s native OpenTelemetry export to Braintrust without the tracing plugin.
- Connect to Braintrust MCP to work with Braintrust projects, experiments, logs, and other data from Claude Code.
Trace Claude Code sessions
Thetrace-claude-code plugin uses bt to trace your Claude Code sessions to Braintrust.
If you can’t install Claude Code plugins, or you want to route Claude Code telemetry through an existing OpenTelemetry pipeline, trace with OpenTelemetry instead.
Set up tracing
trace-claude-code is already installed, follow Update the tracing plugin.Install Claude Code
Install and authenticate bt
bt CLI quickstart to install bt, authenticate, and set your active context.Enable tracing
- Adds or refreshes the Braintrust plugin marketplace.
- Installs (or updates) and enables
trace-claude-code. - Writes a Claude-specific tracing config file, normally
~/.claude/braintrust.json, which records whether tracing is enabled and which project receives traces.
bt trace enable.Restart Claude Code
Log a test trace
What Braintrust traces
Claude Code traces in Braintrust include:- Session spans with the session ID, workspace, hostname, username, operating system, Claude Code version, model, system prompt when available, Git repository metadata, and the final response of the last completed turn.
- Turn spans with prompts, final responses, and the permission mode.
- Model call spans with prompts, completions, token metrics, and errors.
- Tool spans with inputs, outputs, approval state, and tool names.
- Skill metadata when a turn loads skills.
- Subagent spans nested under the turn that started the subagent.
braintrust.plugin.claude-code. Session and turn spans also record versions in context.span_origin: the plugin version in version, the bt version in bt.version, and the Claude Code version in claude-code.version. These versions are captured when each span is created, and unknown versions are null. Each turn span and every span under it, including subagent spans, records the turn’s span ID in metadata.turn_span_id. The session span also records the plugin version in trace_claude_code_version.
Common workflows
Use different tracing settings for one session
Use different tracing settings for one session
bt trace run to trace a single Claude Code invocation without changing the saved tracing configuration.This workflow launches Claude Code from the terminal.To change the saved destination, profile, or organization, rerun bt trace enable claude with the corresponding options. Running bt switch does not change the saved tracing configuration.To add root-span metadata, pass --additional-metadata '<JSON>' to bt trace run for one invocation or to bt trace enable for future sessions. Standard session metadata takes precedence when keys conflict.With bt v0.19.3 or later, pass --tag ci --tag release-validation to either command to tag session spans.Trace a saved Claude Code session
Trace a saved Claude Code session
bt trace import to import a past session, even if tracing was not enabled when it ran.You can also attach an imported session to an existing span or experiment.Resume a Claude Code session
Resume a Claude Code session
Stop tracing Claude Code sessions
Stop tracing Claude Code sessions
bt trace disable claude to uninstall the tracing plugin and remove its tracing configuration. Saved bt profiles and credentials are preserved. Restart Claude Code afterward.Update the tracing plugin
To update the plugin, follow these steps:claude plugin list --json shows trace-claude-code earlier than v2.0.1, or bt --version shows a version earlier than v0.19.0, follow Migrate from an older plugin version.Update bt
bt to the latest version and complete the applicable migrations.Update the tracing plugin
bt trace update updates the installed plugin without changing your saved tracing configuration.Restart and verify Claude Code
Migrate from an older plugin version
To migrate to the latest version of thetrace-claude-code plugin, follow these steps:
Inspect your Claude plugins
trace-claude-code@braintrust-claude-plugin:version before updating. If your tracing configuration file exists, also record its profile, organization, project, and any custom tracing settings you want to preserve.Install or update bt
bt is installed:- If the command succeeds, migrate to the latest version (unless you’ve already done so).
- Otherwise, install
bt, authenticate, and set organization and project context.
Complete version-specific migration steps
trace-claude-code version, beginning with the oldest. If no sections apply, continue to the next step.trace-claude-code v2.0.1
trace-claude-code v2.0.1
bt trace enable claude.If you don’t know which Braintrust project has been receiving your traces, find the value of the BRAINTRUST_CC_PROJECT variable.To find it, look in the env object in ~/.claude/settings.json or the project’s .claude/settings.local.json, and in your shell configuration. If it is not set, the earlier plugin used the claude-code project.Apply your tracing settings
--profile <profile> and --org <organization> if needed to preserve your tracing account and organization. Otherwise, the command uses your active bt context, not your saved tracing settings.To preserve metadata from an older plugin’s configuration or BRAINTRUST_ADDITIONAL_METADATA, pass it explicitly with --additional-metadata '<JSON>'. Normal-session hooks do not read metadata from this environment variable.The command updates your tracing file, normally ~/.claude/braintrust.json. Check the following settings in that file:- Existing
route.additional_metadatais preserved unless you pass--additional-metadata. - Existing
route.tagsis preserved unless you pass--tagor setBRAINTRUST_TAGS. route.flush_moderesets tofire_and_forget. Restore its previous value if you customized it.- Restore any other custom tracing settings you recorded before updating.
Restart and verify Claude Code
Remove obsolete environment settings
Environment settings used before trace-claude-code v2.0.1
Environment settings used before trace-claude-code v2.0.1
- The
envobject in~/.claude/settings.json - The
envobject in your project’s.claude/settings.local.json - Your shell configuration
bt commands, MCP connections, or integrations still need:TRACE_TO_BRAINTRUSTBRAINTRUST_CC_PROJECTBRAINTRUST_API_KEYBRAINTRUST_API_URLandBRAINTRUST_APP_URLBRAINTRUST_ORG_NAMECC_PARENT_SPAN_ID,CC_ROOT_SPAN_ID, andCC_EXPERIMENT_IDBRAINTRUST_CC_DEBUG,BRAINTRUST_ENVIRONMENT_TYPE, andBRAINTRUST_ENVIRONMENT_NAME
Troubleshooting tracing
First, runbt trace doctor claude. Then, review the following:
The tracing plugin is missing or disabled
The tracing plugin is missing or disabled
claude plugin list and confirm that trace-claude-code@braintrust-claude-plugin is installed and enabled. If it is missing or broken, run:Traces do not appear after setup
Traces do not appear after setup
bt is on the PATH of the environment that launches Claude Code.Run bt trace doctor claude and confirm that tracing is enabled and routed to the intended project.If authentication succeeds but traces do not appear, confirm that your account has permission to write logs to the selected project.For authentication, tracing destination, or endpoint problems, see bt trace troubleshooting and the CLI migration troubleshooting guide.Tracing failures do not interrupt the Claude Code session.Claude Code uses an unexpected configuration directory
Claude Code uses an unexpected configuration directory
CLAUDE_CONFIG_DIR is set in the environment that launches Claude Code. When it’s set, bt trace enable claude and the tracing integration use $CLAUDE_CONFIG_DIR/braintrust.json instead of ~/.claude/braintrust.json.An explicit BRAINTRUST_DAEMON_CONFIG (BT_DAEMON_CONFIG in bt v0.25.0 and earlier) override changes the tracing file path. If you use it, supply the same path when enabling tracing and launching Claude Code.Traces use unexpected settings
Traces use unexpected settings
bt trace run take precedence over the saved tracing configuration. For normal sessions, the integration does not use TRACE_TO_BRAINTRUST, BRAINTRUST_CC_PROJECT, or BRAINTRUST_ADDITIONAL_METADATA from the agent’s environment to override the saved tracing settings.For environment variables accepted by the bt commands themselves, see bt trace.bt reports obsolete tracing environment settings
bt reports obsolete tracing environment settings
bt trace enable claude warns when Claude settings contain environment variables used by an earlier tracing plugin.Trace with OpenTelemetry
Claude Code can export OpenTelemetry traces and events directly to Braintrust’s OTLP endpoint, without the tracing plugin orbt.
Set up tracing
Configure the OTLP exporter
x-bt-parent header sets the Braintrust project that receives the traces. It also accepts project_name:<PROJECT_NAME>. Organizations on the EU data plane use https://api-eu.braintrust.dev/otel, and self-hosted deployments use their data plane’s API URL followed by /otel.Capture prompts and tool content (optional)
Export Claude Code events (optional)
Start Claude Code
x-bt-parent.What Braintrust traces
Braintrust maps Claude Code spans to typed spans:<REDACTED> are never used as input or output.
When you export events, each event becomes a log row. Braintrust sets the prompt as input, the assistant response as output, and populates error for API errors, failed tool results, and internal errors. API request events carry token metrics only when they have no trace ID, so tokens aren’t counted twice when you export both traces and events.
Connect to Braintrust MCP
The Braintrust MCP server lets Claude Code query and update Braintrust data. MCP is configured independently from the tracing plugin.Remove the retired Braintrust MCP plugin (if installed)
Remove the retired Braintrust MCP plugin (if installed)
braintrust MCP plugin for Claude Code in favor of Claude Code’s native MCP configuration. If you installed the plugin, remove it before configuring the direct connection.Check whether the plugin is still installed:braintrust@braintrust-claude-plugin appears in the list, use its scope value to remove it:trace-claude-code tracing plugin.Choose authentication
- OAuth (recommended)
- API key
- No Braintrust API key required
- No OAuth client ID or client secret to configure
/.well-known/oauth-authorization-server on the same host as your MCP endpoint (see next step), so a client can register itself.bt login doesn’t authenticate the MCP server.Choose your endpoint
- Self-hosted: Copy the MCP URL from Settings > Data plane. This is your Braintrust API URL with
/mcpappended. - Transport: If your client asks you to choose a transport, choose HTTP (also called streamable HTTP). SSE-only clients can’t connect.
Add the server to Claude Code
Verify the connection
Start using Braintrust tools
- “Show me my recent Braintrust experiments.”
- “Query the last 10 logged requests with errors.”
- “Compare accuracy scores between my two latest experiments.”
Next steps
- Learn the CLI: See the full
bt tracereference. - Run evaluations: Follow the evaluation guide.
- Explore MCP tools: See the Braintrust MCP tool reference.
- Browse the source: View the coding-agent plugins repository.