Skip to content

feat(server-utils): Emit execute_tool spans for Anthropic's beta.sessions.events.toolRunner() - #25554

Open
RulaKhaled wants to merge 1 commit into
developfrom
feat/anthropic-sessions-tool-runner
Open

RulaKhaled wants to merge 1 commit into
developfrom
feat/anthropic-sessions-tool-runner

Conversation

@RulaKhaled

Copy link
Copy Markdown
Collaborator

beta.sessions.events.toolRunner() runs the user's tools for a Managed Agents session, but its tool calls got no span. The runner turns a throw into an error result for the model, so nobody saw a failing tool either. #25320 only covered beta.messages.toolRunner().

The session runner calls the same run(input, ctx) as the messages runner and keeps its tools on a public tools field, so this reuses the wrapping from #25320. It has no addTools(), so it can only run the tools it was created with. On the orchestrion path the hook sits on the SessionToolRunner constructor instead of toolRunner(), because the SDK's EnvironmentWorker creates runners with new SessionToolRunner() directly. instrumentAnthropicAiClient can only wrap toolRunner(), so it doesn't see those runners. Supported from SDK 0.97.0, the first version with the session runner.

Known limitation. A tool that stops on the session runner's 120s timeout is recorded as cancelled, like a user abort, because the SDK aborts the same signal for both.

Fixes #25446

🤖 Generated with Claude Code

…ions.events.toolRunner()

`beta.sessions.events.toolRunner()` runs the user's tools for a Managed Agents session, but its tool calls got no span. The runner turns a throw into an error result for the model, so nobody saw a failing tool either. #25320 only covered `beta.messages.toolRunner()`.

The session runner calls the same `run(input, ctx)` as the messages runner and keeps its tools on a public `tools` field, so this reuses the wrapping from #25320. It has no `addTools()`, so it can only run the tools it was created with. On the orchestrion path the hook sits on the `SessionToolRunner` constructor instead of `toolRunner()`, because the SDK's `EnvironmentWorker` creates runners with `new SessionToolRunner()` directly. `instrumentAnthropicAiClient` can only wrap `toolRunner()`, so it doesn't see those runners. Supported from SDK 0.97.0, the first version with the session runner.

Fixes #25446

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

size-limit report 📦

Path Size % Change Change
@sentry/browser 29.88 kB - -
@sentry/browser - with treeshaking flags 28.02 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 27.92 kB - -
@sentry/browser (incl. Tracing) 52.07 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 52.07 kB - -
@sentry/browser (incl. Tracing, Profiling) 55.02 kB - -
@sentry/browser (incl. Tracing, Replay) 91.82 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 80.68 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 96.55 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 109.49 kB - -
@sentry/browser (incl. Feedback) 47.4 kB - -
@sentry/browser (incl. sendFeedback) 34.94 kB - -
@sentry/browser (incl. FeedbackAsync) 40.05 kB - -
@sentry/browser (incl. Metrics) 30.9 kB - -
@sentry/browser (incl. Logs) 31.18 kB - -
@sentry/browser (incl. Metrics & Logs) 31.81 kB - -
@sentry/react 31.7 kB - -
@sentry/react (incl. Tracing) 54.39 kB - -
@sentry/vue 38.04 kB - -
@sentry/vue (incl. Tracing) 55.01 kB - -
@sentry/svelte 29.9 kB - -
@sentry/remix (Remix 3 client bundle) 57.08 kB - -
CDN Bundle 31.64 kB - -
CDN Bundle (incl. Tracing) 52.58 kB - -
CDN Bundle (incl. Logs, Metrics) 33.84 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 54.52 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 74.77 kB - -
CDN Bundle (incl. Tracing, Replay) 90.25 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 92.18 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 96.4 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 98.34 kB - -
CDN Bundle - uncompressed 93.18 kB - -
CDN Bundle (incl. Tracing) - uncompressed 156.03 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 99.72 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 161.99 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 229.76 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 276.2 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 282.14 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 289.9 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 295.84 kB - -
@sentry/nextjs (client) 56.84 kB - -
@sentry/sveltekit (client) 52.45 kB - -
@sentry/core/server 41.17 kB - -
@sentry/core/browser 13.81 kB - -
@sentry/node 155.23 kB +0.06% +82 B 🔺
@sentry/node/import (ESM hook with diagnostics-channel injection) 84.09 kB +0.04% +30 B 🔺
@sentry/node - without tracing 96.85 kB +0.05% +42 B 🔺
@sentry/node - without channel injection 133.25 kB +0.07% +80 B 🔺
@sentry/aws-serverless 105.07 kB +0.05% +47 B 🔺
@sentry/cloudflare (withSentry) - minified 210.89 kB - -
@sentry/cloudflare (withSentry) 523.17 kB - -
@sentry/nextjs/cloudflare (withSentry) - minified 228.57 kB - -

View base workflow run

@RulaKhaled

Copy link
Copy Markdown
Collaborator Author

bugbot run

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit da32a71. Configure here.

@RulaKhaled
RulaKhaled marked this pull request as ready for review October 20, 2026 12:59
@RulaKhaled
RulaKhaled requested a review from a team as a code owner October 20, 2026 12:59
@RulaKhaled
RulaKhaled requested review from JPeer264 and isaacs and removed request for a team October 20, 2026 12:59

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(server-utils): Emit execute_tool spans for Anthropic's beta.sessions.events.toolRunner()

1 participant