
Claude Code 2.1.283 Finally Reveals Ghost Runs
We dig into Claude Code 2.1.283’s new OTEL logging support, which finally captures MCP, WebFetch, and WebSearch outputs inside trace spans so you can see what your agent actually saw. We also cover the security risks, content limits, and a few welcome MCP quality-of-life fixes like clearer context breakdowns and fewer zombie processes.
Chapter 1
Cracking the Agent Black Box with OTEL LOG TOOL CONTENT in Claude Code 2.1.283
James Turner
Picture this: your autonomous coding agent just completely mangled a multi-file refactor. You pull up your trace waterfall in Jaeger or Honeycomb to see what happened, and you see the tool executed with a green checkmark. But the returned payload is totally, completely blank.
Lachlan Reed
Mate, the classic ghost run. It is like opening the hood of a car and finding someone replaced the engine with a handwritten note saying, yep, it worked.
James Turner
Exactly! You have no idea what the model actually read before it decided to nuke your code. But in Claude Code version 2.1.283, Anthropic finally addressed that black box. Under the changelog for 2.1.283, they expanded the OTEL LOG TOOL CONTENT flag so MCP tool, WebFetch, and WebSearch outputs are now explicitly recorded inside the tool dot output span event.
Lachlan Reed
Which was a massive blind spot before, right? Because earlier versions only captured local Read and Bash calls. If Claude was fetching context from a remote MCP database server or hitting the web via WebSearch, you were basically flying blind.
James Turner
Totally blind. Now, getting this flowing into something like Jaeger, Dash0, or Honeycomb takes a few specific environment variables. First, you set CLAUDE CODE ENABLE TELEMETRY to one. Then, because distributed tracing is still technically in beta, you have to export CLAUDE CODE ENHANCED TELEMETRY BETA equals one.
Lachlan Reed
Right, and then your standard OpenTelemetry plumbing: OTEL TRACES EXPORTER set to otlp, and your OTEL EXPORTER OTLP ENDPOINT pointing to your local collector, usually port 4317 over gRPC.
James Turner
And the key switch: OTEL LOG TOOL CONTENT set to one, ideally paired with OTEL LOG TOOL DETAILS equals one so you get the parameters too.
Lachlan Reed
You know, watching the actual trace context flow makes it click. You get that root span, claude code dot interaction, which spawns the child span, claude code dot tool. And then Claude Code injects the standard W3C TRACEPARENT into the subprocess environment. It reminds me of an old midnight database migration I botched years ago. If you cannot see what the query actually returned, you are just guessing in the dark.
James Turner
Right. But, before anyone goes throwing OTEL LOG TOOL CONTENT into their base company image, there are some serious security traps here.
Lachlan Reed
Oh, huge traps! Think about what lives in tool output. If your MCP server queries an internal Postgres database, or your agent uses WebFetch on internal wiki pages, you are now dumping raw SQL rows, corporate documentation, and possibly customer data straight into your telemetry pipeline.
James Turner
Yeah, unless your OpenTelemetry collector has aggressive scrubbers or redaction processors, that stuff is sitting in plaintext in your logging backend. Plus, there is the truncation ceiling. Claude Code enforces a default limit of sixty kilobytes, sixty one thousand four hundred and forty UTF sixteen code units, on content attributes.
Lachlan Reed
So if your WebFetch grabs a massive page, it gets chopped unless you dial up CLAUDE CODE OTEL CONTENT MAX LENGTH. And, importantly, if you only set up a logs exporter without tracing enabled, that tool dot output payload never gets emitted. It lives strictly inside span events.
James Turner
A crucial distinction. Now, 2.1.283 also packed a few really welcome operational fixes. My personal favorite: slash context now breaks out MCP server instructions into their own dedicated row.
Lachlan Reed
That is so good. You plug in two or three MCP servers and suddenly you are burning ten thousand tokens on system prompts before you even type your first prompt. Seeing that itemized is brilliant.
James Turner
And MCP progress notifications now actually stick around on backgrounded tasks instead of just disappearing into the void. Plus, they fixed stdio MCP servers getting left behind as zombie processes when a session ends while they are still booting.
Lachlan Reed
No more running killall in the terminal every Friday afternoon just to clear out orphaned node processes. It is a really solid update, pulls back the curtain on what the agent is actually seeing, provided you do not leak your keys doing it.
James Turner
Sanitize your spans, calibrate your caps, and you finally have real visibility into your agent.