Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,7 +45,9 @@ Versioning is per distribution. Claude and Codex plugins carry their version in
their plugin manifests, and `scripts/set-plugin-version.py` updates those
manifests for a release. Antigravity's schema does not expose a version field,
so its distribution is versioned by repository tags and GitHub Releases.
Marketplace manifests are not versioned.
Claude's marketplace manifest carries a separate catalog version; bump it
independently for breaking marketplace changes. The Codex marketplace manifest
is unversioned.

| Agent | Distribution repository |
|---|---|
Expand Down
1 change: 0 additions & 1 deletion src/plugins/claude/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Claude Code marketplace consumes a repo whose ROOT is the marketplace:
# .claude-plugin/marketplace.json marketplace manifest
# plugins/braintrust/ skills plugin (MCP + skills)
# plugins/trace-claude-code/ tracing plugin (thin daemon hook shim)
#
# Everything is plain shell + config — no compiled artifacts — so the whole
Expand Down
10 changes: 2 additions & 8 deletions src/plugins/claude/content/.claude-plugin/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
{
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
"name": "braintrust-claude-plugin",
"version": "1.3.1",
"description": "Braintrust plugins for LLM evaluation, logging, and observability",
"version": "2.0.0",
"description": "Braintrust session tracing for Claude Code",
"owner": {
"name": "Braintrust",
"email": "support@braintrust.dev"
},
"plugins": [
{
"name": "braintrust",
"description": "Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Provides correct API usage, working examples, and helper scripts.",
"source": "./plugins/braintrust",
"category": "development"
},
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust. Captures user messages, assistant responses, and tool calls for observability.",
Expand Down
7 changes: 2 additions & 5 deletions src/plugins/claude/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,7 +2,7 @@

## About this repository

This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code plugins for Braintrust integration.
This is the **Braintrust Claude Code plugin marketplace** - a repository that distributes Claude Code tracing for Braintrust.

### Structure

Expand All@@ -11,23 +11,20 @@ claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # Marketplace catalog (lists available plugins)
├── plugins/
│ ├── braintrust/ # Plugin: Braintrust evaluation & logging
│ └── trace-claude-code/ # Plugin: Session tracing to Braintrust
└── evals/ # Evaluation suite for testing the plugins
└── evals/ # Evaluation suite for Braintrust MCP behavior
```

### Plugins

| Plugin | Description |
|--------|-------------|
| `braintrust` | Enables AI agents to use Braintrust for LLM evaluation, logging, and observability. Includes MCP server config and the `troubleshoot-braintrust-mcp` skill. |
| `trace-claude-code` | Forwards Claude Code lifecycle hooks to `bt trace hook --source claude-code`; the shared daemon builds and delivers traces. |

### Terminology

- **Marketplace**: A repository with a `marketplace.json` that catalogs multiple plugins for distribution
- **Plugin**: An installable unit with its own `.claude-plugin/plugin.json` manifest
- **Skill**: A capability within a plugin (e.g., `troubleshoot-braintrust-mcp` is a skill in the `braintrust` plugin)

## Style conventions

Expand Down
7 changes: 3 additions & 4 deletions src/plugins/claude/content/CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
# Developing the Claude plugins
# Developing the Claude plugin

This distribution tree is generated from the
`braintrustdata/braintrust-coding-agent-plugins` monorepo. Make source changes
Expand All@@ -9,7 +9,6 @@ there rather than editing the generated distribution repository.
Load a plugin directly from the assembled tree:

```bash
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/braintrust
claude --plugin-dir /path/to/repo/src/plugins/claude/content/plugins/trace-claude-code
```

Expand All@@ -29,7 +28,7 @@ cargo test --manifest-path bt-daemon/Cargo.toml --all-features --locked

## Evaluation suite

The `evals/` directory tests the Braintrust skills plugin:
The `evals/` directory tests Braintrust MCP behavior directly:

```bash
cd evals
Expand All@@ -38,6 +37,6 @@ uv run braintrust eval .

## Releases

Versions are stored in each plugin's `.claude-plugin/plugin.json`. Use the
The version is stored in the plugin's `.claude-plugin/plugin.json`. Use the
monorepo's release workflow to bump versions, publish the generated distribution
tree, tag the release, and create release notes.
29 changes: 8 additions & 21 deletions src/plugins/claude/content/README.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -5,7 +5,7 @@
> Don't edit files here — make changes and file issues in that repository, and they
> will be rebuilt into this one.

A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integration - LLM evaluation, logging, observability, and session tracing.
A Claude Code plugin marketplace for tracing Claude Code sessions to [Braintrust](https://braintrust.dev).

## Prerequisites

Expand All@@ -14,14 +14,13 @@ A Claude Code plugin marketplace for [Braintrust](https://braintrust.dev) integr

## Supported Claude surfaces

These marketplace plugins support Claude Code CLI and Claude Code mode in the
desktop app. They do not currently support the Cowork tab, which runs tools and
This marketplace plugin supports Claude Code CLI and Claude Code mode in the
desktop app. It does not currently support the Cowork tab, which runs tools and
hooks inside a separate VM without the host's `bt` installation, Braintrust
configuration, or environment variables.

In Cowork, use the Braintrust connector provided through Claude for MCP access.
The connector is separate from the `braintrust` marketplace plugin. Automatic
Cowork session tracing is not currently supported.
Automatic Cowork session tracing is not currently supported.

## Installation

Expand All@@ -31,22 +30,7 @@ Add the marketplace:
claude plugin marketplace add braintrustdata/braintrust-claude-plugin
```

Then install the plugins you need:

## Plugins

### braintrust

Enables AI agents to use Braintrust for LLM evaluation, logging, and observability.

- Query Braintrust projects, experiments, datasets, and logs
- Instrument your code with the Braintrust SDK and write evals

```bash
claude plugin install braintrust@braintrust-claude-plugin
```

### trace-claude-code
Then enable tracing:

Automatically traces Claude Code conversations to Braintrust through the shared
Braintrust daemon. The plugin contains only a fail-open hook forwarder; `bt`
Expand All@@ -63,6 +47,9 @@ Every registered lifecycle event is forwarded synchronously to
`bt trace hook --source claude-code`, preserving per-session ordering. Hook
failures never fail a Claude Code turn.

This marketplace does not install or configure the Braintrust MCP server. Use
your agent's native connector or MCP configuration when you want MCP access.

#### Additional root metadata

For a persistent route, pass a JSON object to `bt trace enable claude
Expand Down

This file was deleted.

11 changes: 0 additions & 11 deletions src/plugins/claude/content/plugins/braintrust/.mcp.json

This file was deleted.

This file was deleted.

Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
{
"name": "trace-claude-code",
"description": "Automatically trace Claude Code conversations to Braintrust for observability. Captures sessions, conversation turns, and tool calls as hierarchical traces.",
"version": "2.0.1",
"version": "3.0.0",
"author": {
"name": "Braintrust"
}
Expand Down
24 changes: 20 additions & 4 deletions src/plugins/claude/validate.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,7 +3,7 @@
# validate.sh — Sanity-check a built Claude Code dist tree in $1 before publishing.
#
# Fails (non-zero) on the mistakes that would ship a broken marketplace:
# - missing marketplace manifest / plugin manifests / hooks / skill
# - missing marketplace manifest / tracing plugin manifest / hooks
# - malformed JSON in any manifest
# - marketplace entries whose `source` path does not exist in the tree
#
Expand All@@ -30,9 +30,6 @@ check_json "$MARKETPLACE"

# Required files for each shipped plugin.
required=(
"plugins/braintrust/.claude-plugin/plugin.json"
"plugins/braintrust/.mcp.json"
"plugins/braintrust/skills/troubleshoot-braintrust-mcp/SKILL.md"
"plugins/trace-claude-code/.claude-plugin/plugin.json"
"plugins/trace-claude-code/hooks/hooks.json"
"plugins/trace-claude-code/hooks/forward.sh"
Expand All@@ -42,6 +39,25 @@ for rel in "${required[@]}"; do
case "$rel" in *.json) check_json "$TARGET_DIR/$rel";; esac
done

python3 - "$MARKETPLACE" "$TARGET_DIR/plugins" <<'PY' \
|| fail "Claude marketplace must contain only the tracing plugin"
import json
import sys
from pathlib import Path

with open(sys.argv[1]) as f:
plugins = json.load(f)["plugins"]

assert [plugin["name"] for plugin in plugins] == ["trace-claude-code"]
assert sorted(path.name for path in Path(sys.argv[2]).iterdir() if path.is_dir()) == [
"trace-claude-code"
]
PY

if find "$TARGET_DIR" -name '.mcp.json' -print -quit | grep -q .; then
fail "Claude dist still contains an MCP proxy configuration"
fi

python3 - "$TARGET_DIR/plugins/trace-claude-code/hooks/hooks.json" <<'PY' \
|| fail "Claude hooks do not all use the blocking daemon forwarder"
import json
Expand Down
1 change: 0 additions & 1 deletion src/plugins/codex/build.sh
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,7 +4,6 @@
#
# The Codex marketplace consumes a repo whose ROOT is the marketplace:
# .agents/plugins/marketplace.json marketplace manifest
# plugins/braintrust-codex-plugin/ skills plugin (MCP + skills)
# plugins/trace-codex/ tracing plugin (thin daemon hook shims)
#
# The tracing plugin contains no tracing runtime or platform-specific binary;
Expand Down
14 changes: 1 addition & 13 deletions src/plugins/codex/content/.agents/plugins/marketplace.json
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,9 @@
{
"name": "braintrust-codex-plugins",
"interface": {
"displayName": "Braintrust Codex Plugins"
"displayName": "Braintrust Codex Plugin"
},
"plugins": [
{
"name": "braintrust",
"source": {
"source": "local",
"path": "./plugins/braintrust-codex-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer tools"
},
{
"name": "trace-codex",
"source": {
Expand Down
19 changes: 5 additions & 14 deletions src/plugins/codex/content/AGENTS.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,18 +4,11 @@ Guidelines for AI agents working in this repo.

## Repo purpose

This repo is a monorepo of two independent [Codex marketplace plugins](https://developers.openai.com/codex/plugins):
This repo distributes one [Codex marketplace plugin](https://developers.openai.com/codex/plugins):

- `plugins/braintrust-codex-plugin/` — packages the [Braintrust MCP server](https://www.braintrust.dev/docs/integrations/developer-tools/mcp) plus a routing skill.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks. Do **not** merge tracing behavior into the MCP/skills plugin; they are separate, independently installable plugins.
- `plugins/trace-codex/` — an opt-in plugin that traces Codex sessions to Braintrust (session, turn, and tool spans) via Codex lifecycle hooks.

Both plugins are listed as separate entries in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the MCP/skills plugin:

- `plugins/braintrust-codex-plugin/.codex-plugin/plugin.json` — plugin manifest (version, UI metadata, default prompts)
- `plugins/braintrust-codex-plugin/.mcp.json` — MCP server definition
- `plugins/braintrust-codex-plugin/skills/braintrust/` — agent skills exposed through the plugin
The plugin is listed in `.agents/plugins/marketplace.json` (the repo marketplace).

Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/trace-codex/AGENTS.md) for its architecture):

Expand All@@ -26,10 +19,8 @@ Key files for the tracing plugin (see [`plugins/trace-codex/AGENTS.md`](plugins/

## Making changes

- **Skills**: There is only one simple skill in this repo which handles routing and tool definitions, it should not be modified significantly.
- **MCP config**: edit `plugins/braintrust-codex-plugin/.mcp.json` to change the MCP server command or environment variables.
- **Plugin metadata**: edit the relevant `.codex-plugin/plugin.json` for display name, description, brand color, default prompts, etc.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change plugin entries, categories, or install policies.
- **Plugin metadata**: edit `plugins/trace-codex/.codex-plugin/plugin.json`.
- **Marketplace**: edit `.agents/plugins/marketplace.json` to change the plugin entry, category, or install policy.

## Releasing a new version

Expand Down
Loading
Loading