1
00:00:00,100 --> 00:00:05,580
Picture this: your autonomous coding agent
just completely mangled a multi-file

2
00:00:05,640 --> 00:00:06,180
refactor.

3
00:00:07,080 --> 00:00:10,240
You pull up your trace waterfall in Jaeger
or Honeycomb to see what happened,

4
00:00:10,940 --> 00:00:13,240
and you see the tool executed with a green
checkmark.

5
00:00:13,920 --> 00:00:17,360
But the returned payload is totally,
completely blank.

6
00:00:18,438 --> 00:00:20,018
Mate, the classic ghost run.

7
00:00:20,938 --> 00:00:24,458
It is like opening the hood of a car and
finding someone replaced the engine with a

8
00:00:24,518 --> 00:00:26,958
handwritten note saying, yep, it worked.

9
00:00:27,203 --> 00:00:27,903
Exactly!

10
00:00:28,243 --> 00:00:32,443
You have no idea what the model actually
read before it decided to nuke your code.

11
00:00:33,063 --> 00:00:39,263
But in Claude Code version 2.1.283,
Anthropic finally addressed that black box.

12
00:00:40,163 --> 00:00:47,063
Under the changelog for 2.1.283, they
expanded the OTEL LOG TOOL CONTENT flag so

13
00:00:47,163 --> 00:00:53,583
MCP tool, WebFetch, and WebSearch outputs
are now explicitly recorded inside the

14
00:00:53,643 --> 00:00:55,303
tool dot output span event.

15
00:00:55,333 --> 00:00:57,573
Which was a massive blind spot before,
right?

16
00:00:57,673 --> 00:01:01,893
Because earlier versions only captured
local Read and Bash calls.

17
00:01:02,186 --> 00:01:07,653
If Claude was fetching context from a
remote MCP database server or hitting the web

18
00:01:07,713 --> 00:01:10,613
via WebSearch, you were basically flying
blind.

19
00:01:10,725 --> 00:01:11,425
Totally blind.

20
00:01:12,405 --> 00:01:16,645
Now, getting this flowing into something
like Jaeger, Dash0,

21
00:01:16,745 --> 00:01:20,185
or Honeycomb takes a few specific
environment variables.

22
00:01:20,825 --> 00:01:24,585
First, you set CLAUDE CODE ENABLE
TELEMETRY to one.

23
00:01:25,205 --> 00:01:28,685
Then, because distributed tracing is still
technically in beta,

24
00:01:29,145 --> 00:01:33,565
you have to export CLAUDE CODE ENHANCED
TELEMETRY BETA equals one.

25
00:01:33,625 --> 00:01:38,105
Right, and then your standard
OpenTelemetry plumbing: OTEL TRACES EXPORTER set to

26
00:01:38,225 --> 00:01:44,025
otlp, and your OTEL EXPORTER OTLP ENDPOINT
pointing to your local collector,

27
00:01:44,125 --> 00:01:47,945
usually port 4317 over gRPC.

28
00:01:47,958 --> 00:01:54,198
And the key switch: OTEL LOG TOOL CONTENT
set to one, ideally paired with OTEL LOG

29
00:01:54,246 --> 00:01:57,638
TOOL DETAILS equals one so you get the
parameters too.

30
00:01:57,807 --> 00:02:01,467
You know, watching the actual trace
context flow makes it click.

31
00:02:02,447 --> 00:02:07,467
You get that root span, claude code dot
interaction, which spawns the child span,

32
00:02:07,767 --> 00:02:08,927
claude code dot tool.

33
00:02:09,587 --> 00:02:14,967
And then Claude Code injects the standard
W3C TRACEPARENT into the subprocess

34
00:02:15,007 --> 00:02:15,587
environment.

35
00:02:15,947 --> 00:02:19,307
It reminds me of an old midnight database
migration I botched years ago.

36
00:02:20,107 --> 00:02:23,807
If you cannot see what the query actually
returned, you are just guessing in the

37
00:02:23,827 --> 00:02:24,167
dark.

38
00:02:24,350 --> 00:02:24,610
Right.

39
00:02:25,190 --> 00:02:29,590
But, before anyone goes throwing OTEL LOG
TOOL CONTENT into their base company

40
00:02:29,690 --> 00:02:32,550
image, there are some serious security
traps here.

41
00:02:32,923 --> 00:02:34,283
Oh, huge traps!

42
00:02:34,883 --> 00:02:37,083
Think about what lives in tool output.

43
00:02:37,943 --> 00:02:42,723
If your MCP server queries an internal
Postgres database, or your agent uses

44
00:02:42,763 --> 00:02:47,223
WebFetch on internal wiki pages, you are
now dumping raw SQL rows,

45
00:02:47,623 --> 00:02:51,783
corporate documentation, and possibly
customer data straight into your telemetry

46
00:02:51,883 --> 00:02:52,383
pipeline.

47
00:02:52,542 --> 00:02:56,942
Yeah, unless your OpenTelemetry collector
has aggressive scrubbers or redaction

48
00:02:57,007 --> 00:03:01,102
processors, that stuff is sitting in
plaintext in your logging backend.

49
00:03:01,246 --> 00:03:03,422
Plus, there is the truncation ceiling.

50
00:03:03,513 --> 00:03:08,782
Claude Code enforces a default limit of
sixty kilobytes, sixty one thousand four

51
00:03:08,822 --> 00:03:13,102
hundred and forty UTF sixteen code units,
on content attributes.

52
00:03:13,125 --> 00:03:18,405
So if your WebFetch grabs a massive page,
it gets chopped unless you dial up CLAUDE

53
00:03:18,501 --> 00:03:20,725
CODE OTEL CONTENT MAX LENGTH.

54
00:03:20,945 --> 00:03:25,925
And, importantly, if you only set up a
logs exporter without tracing enabled,

55
00:03:26,021 --> 00:03:29,365
that tool dot output payload never gets
emitted.

56
00:03:29,498 --> 00:03:32,005
It lives strictly inside span events.

57
00:03:32,162 --> 00:03:33,402
A crucial distinction.

58
00:03:34,162 --> 00:03:39,922
Now, 2.1.283 also packed a few really
welcome operational fixes.

59
00:03:40,422 --> 00:03:45,702
My personal favorite: slash context now
breaks out MCP server instructions into

60
00:03:45,742 --> 00:03:47,222
their own dedicated row.

61
00:03:47,250 --> 00:03:48,850
That is so good.

62
00:03:48,950 --> 00:03:53,250
You plug in two or three MCP servers and
suddenly you are burning ten thousand

63
00:03:53,330 --> 00:03:56,690
tokens on system prompts before you even
type your first prompt.

64
00:03:56,804 --> 00:03:59,250
Seeing that itemized is brilliant.

65
00:03:59,250 --> 00:04:04,290
And MCP progress notifications now
actually stick around on backgrounded tasks

66
00:04:04,340 --> 00:04:06,370
instead of just disappearing into the
void.

67
00:04:06,530 --> 00:04:12,210
Plus, they fixed stdio MCP servers getting
left behind as zombie processes when a

68
00:04:12,250 --> 00:04:14,050
session ends while they are still booting.

69
00:04:14,083 --> 00:04:18,083
No more running killall in the terminal
every Friday afternoon just to clear out

70
00:04:18,140 --> 00:04:19,843
orphaned node processes.

71
00:04:19,976 --> 00:04:24,323
It is a really solid update, pulls back
the curtain on what the agent is actually

72
00:04:24,380 --> 00:04:27,523
seeing, provided you do not leak your keys
doing it.

73
00:04:27,542 --> 00:04:32,342
Sanitize your spans, calibrate your caps,
and you finally have real visibility into

74
00:04:32,358 --> 00:04:32,902
your agent.

