Skip to content

Commit 61e8a60

Browse files
authored
fix: Fix claude agent SDK tool nesting (#1755)
Resolves #1655 Resolves #1658 Fixes claude agent SDK tool nesting by switching from the hook based events (PreToolUse, PostToolUse) that started and ended the span to using AsyncLocalStorage and having proper execution context. For remote tools we are still using the hooks because we don't have any local tools to wrap. <img width="436" height="676" alt="Screenshot 2026-04-08 at 12 48 47" src="https://github.com/user-attachments/assets/919182fb-c02c-4cf4-b762-7a6e2b484037" />
1 parent d040a2e commit 61e8a60

13 files changed

Lines changed: 1061 additions & 144 deletions

e2e/scenarios/claude-agent-sdk-instrumentation/__snapshots__/claude-agent-sdk-v0.1.span-events.json

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
"root_span_id": "<span:1>",
124124
"span_id": "<span:8>",
125125
"span_parents": [
126-
"<span:6>"
126+
"<span:9>"
127127
],
128128
"type": "tool"
129129
}
@@ -145,9 +145,9 @@
145145
],
146146
"name": "anthropic.messages.create",
147147
"root_span_id": "<span:1>",
148-
"span_id": "<span:9>",
148+
"span_id": "<span:10>",
149149
"span_parents": [
150-
"<span:10>"
150+
"<span:11>"
151151
],
152152
"type": "llm"
153153
},
@@ -160,7 +160,7 @@
160160
"metric_keys": [],
161161
"name": "claude-agent-failure-operation",
162162
"root_span_id": "<span:1>",
163-
"span_id": "<span:11>",
163+
"span_id": "<span:12>",
164164
"span_parents": [
165165
"<span:1>"
166166
],
@@ -175,9 +175,9 @@
175175
"metric_keys": [],
176176
"name": "Claude Agent",
177177
"root_span_id": "<span:1>",
178-
"span_id": "<span:10>",
178+
"span_id": "<span:11>",
179179
"span_parents": [
180-
"<span:11>"
180+
"<span:12>"
181181
],
182182
"type": "task"
183183
},
@@ -192,9 +192,9 @@
192192
"metric_keys": [],
193193
"name": "tool: calculator/calculator",
194194
"root_span_id": "<span:1>",
195-
"span_id": "<span:12>",
195+
"span_id": "<span:13>",
196196
"span_parents": [
197-
"<span:10>"
197+
"<span:14>"
198198
],
199199
"type": "tool"
200200
}
@@ -229,9 +229,9 @@
229229
],
230230
"name": "anthropic.messages.create",
231231
"root_span_id": "<span:1>",
232-
"span_id": "<span:13>",
232+
"span_id": "<span:15>",
233233
"span_parents": [
234-
"<span:14>"
234+
"<span:16>"
235235
],
236236
"type": "llm"
237237
},
@@ -242,9 +242,9 @@
242242
"metric_keys": [],
243243
"name": "Agent: general-purpose",
244244
"root_span_id": "<span:1>",
245-
"span_id": "<span:15>",
245+
"span_id": "<span:17>",
246246
"span_parents": [
247-
"<span:14>"
247+
"<span:16>"
248248
],
249249
"type": "task"
250250
},
@@ -257,7 +257,7 @@
257257
"metric_keys": [],
258258
"name": "claude-agent-subagent-operation",
259259
"root_span_id": "<span:1>",
260-
"span_id": "<span:16>",
260+
"span_id": "<span:18>",
261261
"span_parents": [
262262
"<span:1>"
263263
],
@@ -272,9 +272,9 @@
272272
"metric_keys": [],
273273
"name": "Claude Agent",
274274
"root_span_id": "<span:1>",
275-
"span_id": "<span:14>",
275+
"span_id": "<span:16>",
276276
"span_parents": [
277-
"<span:16>"
277+
"<span:18>"
278278
],
279279
"type": "task"
280280
},
@@ -288,9 +288,9 @@
288288
"metric_keys": [],
289289
"name": "tool: calculator/calculator",
290290
"root_span_id": "<span:1>",
291-
"span_id": "<span:17>",
291+
"span_id": "<span:19>",
292292
"span_parents": [
293-
"<span:15>"
293+
"<span:20>"
294294
],
295295
"type": "tool"
296296
}

e2e/scenarios/claude-agent-sdk-instrumentation/__snapshots__/claude-agent-sdk-v0.2.76.span-events.json

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
"root_span_id": "<span:1>",
124124
"span_id": "<span:8>",
125125
"span_parents": [
126-
"<span:6>"
126+
"<span:9>"
127127
],
128128
"type": "tool"
129129
}
@@ -145,9 +145,9 @@
145145
],
146146
"name": "anthropic.messages.create",
147147
"root_span_id": "<span:1>",
148-
"span_id": "<span:9>",
148+
"span_id": "<span:10>",
149149
"span_parents": [
150-
"<span:10>"
150+
"<span:11>"
151151
],
152152
"type": "llm"
153153
},
@@ -160,7 +160,7 @@
160160
"metric_keys": [],
161161
"name": "claude-agent-failure-operation",
162162
"root_span_id": "<span:1>",
163-
"span_id": "<span:11>",
163+
"span_id": "<span:12>",
164164
"span_parents": [
165165
"<span:1>"
166166
],
@@ -175,9 +175,9 @@
175175
"metric_keys": [],
176176
"name": "Claude Agent",
177177
"root_span_id": "<span:1>",
178-
"span_id": "<span:10>",
178+
"span_id": "<span:11>",
179179
"span_parents": [
180-
"<span:11>"
180+
"<span:12>"
181181
],
182182
"type": "task"
183183
},
@@ -192,9 +192,9 @@
192192
"metric_keys": [],
193193
"name": "tool: calculator/calculator",
194194
"root_span_id": "<span:1>",
195-
"span_id": "<span:12>",
195+
"span_id": "<span:13>",
196196
"span_parents": [
197-
"<span:10>"
197+
"<span:14>"
198198
],
199199
"type": "tool"
200200
}
@@ -229,9 +229,9 @@
229229
],
230230
"name": "anthropic.messages.create",
231231
"root_span_id": "<span:1>",
232-
"span_id": "<span:13>",
232+
"span_id": "<span:15>",
233233
"span_parents": [
234-
"<span:14>"
234+
"<span:16>"
235235
],
236236
"type": "llm"
237237
},
@@ -242,9 +242,9 @@
242242
"metric_keys": [],
243243
"name": "Agent: sub-agent",
244244
"root_span_id": "<span:1>",
245-
"span_id": "<span:15>",
245+
"span_id": "<span:17>",
246246
"span_parents": [
247-
"<span:14>"
247+
"<span:16>"
248248
],
249249
"type": "task"
250250
},
@@ -257,7 +257,7 @@
257257
"metric_keys": [],
258258
"name": "claude-agent-subagent-operation",
259259
"root_span_id": "<span:1>",
260-
"span_id": "<span:16>",
260+
"span_id": "<span:18>",
261261
"span_parents": [
262262
"<span:1>"
263263
],
@@ -272,12 +272,27 @@
272272
"metric_keys": [],
273273
"name": "Claude Agent",
274274
"root_span_id": "<span:1>",
275-
"span_id": "<span:14>",
275+
"span_id": "<span:16>",
276276
"span_parents": [
277-
"<span:16>"
277+
"<span:18>"
278278
],
279279
"type": "task"
280280
},
281-
"tool": null
281+
"tool": {
282+
"has_input": true,
283+
"has_output": true,
284+
"metadata": {
285+
"gen_ai.tool.name": "calculator",
286+
"mcp.server": "calculator"
287+
},
288+
"metric_keys": [],
289+
"name": "tool: calculator/calculator",
290+
"root_span_id": "<span:1>",
291+
"span_id": "<span:19>",
292+
"span_parents": [
293+
"<span:20>"
294+
],
295+
"type": "tool"
296+
}
282297
}
283298
}

e2e/scenarios/claude-agent-sdk-instrumentation/__snapshots__/claude-agent-sdk-v0.2.79.span-events.json

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@
123123
"root_span_id": "<span:1>",
124124
"span_id": "<span:8>",
125125
"span_parents": [
126-
"<span:6>"
126+
"<span:9>"
127127
],
128128
"type": "tool"
129129
}
@@ -145,9 +145,9 @@
145145
],
146146
"name": "anthropic.messages.create",
147147
"root_span_id": "<span:1>",
148-
"span_id": "<span:9>",
148+
"span_id": "<span:10>",
149149
"span_parents": [
150-
"<span:10>"
150+
"<span:11>"
151151
],
152152
"type": "llm"
153153
},
@@ -160,7 +160,7 @@
160160
"metric_keys": [],
161161
"name": "claude-agent-failure-operation",
162162
"root_span_id": "<span:1>",
163-
"span_id": "<span:11>",
163+
"span_id": "<span:12>",
164164
"span_parents": [
165165
"<span:1>"
166166
],
@@ -175,9 +175,9 @@
175175
"metric_keys": [],
176176
"name": "Claude Agent",
177177
"root_span_id": "<span:1>",
178-
"span_id": "<span:10>",
178+
"span_id": "<span:11>",
179179
"span_parents": [
180-
"<span:11>"
180+
"<span:12>"
181181
],
182182
"type": "task"
183183
},
@@ -192,9 +192,9 @@
192192
"metric_keys": [],
193193
"name": "tool: calculator/calculator",
194194
"root_span_id": "<span:1>",
195-
"span_id": "<span:12>",
195+
"span_id": "<span:13>",
196196
"span_parents": [
197-
"<span:10>"
197+
"<span:14>"
198198
],
199199
"type": "tool"
200200
}
@@ -229,9 +229,9 @@
229229
],
230230
"name": "anthropic.messages.create",
231231
"root_span_id": "<span:1>",
232-
"span_id": "<span:13>",
232+
"span_id": "<span:15>",
233233
"span_parents": [
234-
"<span:14>"
234+
"<span:16>"
235235
],
236236
"type": "llm"
237237
},
@@ -242,9 +242,9 @@
242242
"metric_keys": [],
243243
"name": "Agent: sub-agent",
244244
"root_span_id": "<span:1>",
245-
"span_id": "<span:15>",
245+
"span_id": "<span:17>",
246246
"span_parents": [
247-
"<span:14>"
247+
"<span:16>"
248248
],
249249
"type": "task"
250250
},
@@ -257,7 +257,7 @@
257257
"metric_keys": [],
258258
"name": "claude-agent-subagent-operation",
259259
"root_span_id": "<span:1>",
260-
"span_id": "<span:16>",
260+
"span_id": "<span:18>",
261261
"span_parents": [
262262
"<span:1>"
263263
],
@@ -272,12 +272,27 @@
272272
"metric_keys": [],
273273
"name": "Claude Agent",
274274
"root_span_id": "<span:1>",
275-
"span_id": "<span:14>",
275+
"span_id": "<span:16>",
276276
"span_parents": [
277-
"<span:16>"
277+
"<span:18>"
278278
],
279279
"type": "task"
280280
},
281-
"tool": null
281+
"tool": {
282+
"has_input": true,
283+
"has_output": true,
284+
"metadata": {
285+
"gen_ai.tool.name": "calculator",
286+
"mcp.server": "calculator"
287+
},
288+
"metric_keys": [],
289+
"name": "tool: calculator/calculator",
290+
"root_span_id": "<span:1>",
291+
"span_id": "<span:19>",
292+
"span_parents": [
293+
"<span:20>"
294+
],
295+
"type": "tool"
296+
}
282297
}
283298
}

0 commit comments

Comments
 (0)