What
OpenTelemetry is the standard Claude Code uses to send usage data to a collector you set up. Plugins can register hooks, small pieces of code that run when certain events happen. Telemetry now runs through that same hook system.
- New built-in plugin
cc-plugin-otlp, registered next to "sec-default", "agents-md" and "telemetry". It registers atelemetry.loghook on the "collector" stream and sends each record from core or built-in origins to the OpenTelemetry log exporter. When it is loaded and hookstelemetry.log, Claude Code's own event records go through that hook; otherwise they take the old path. - It is available only when
CLAUDE_CODE_ENABLE_TELEMETRYis set, a further check is false, and the gatetengu_basalt_ploverpasses. That gate's built-in fallback is off, and nothing has been read about it for this release. - Plugins get a telemetry interface:
$.telemetry.logtakes an entry{ to?, event, props? }or a collector record, and$.telemetry.marktakes{ feature, kind, reason?, props? }. Calls run through the handler chain and can be denied.telemetry.logandtelemetry.markbecome hookable events, and a hook's return value must have avaluekey. - A telemetry hook's
tomust be a plain string, or list of them, from "anthropic" and "collector". Anything else is rejected with a message naming what was written (for example "a template string" or "the variable x"). A hook that changestois rejected as "a changed to (pinned)". - A hook with no
tostands on every stream. The "anthropic" stream is reserved for plugins built into the CLI: a non-built-in plugin on it is refused and told to writeon("telemetry.log", { to: "collector" }, hook). - Wildcard hook patterns from non-built-in plugins no longer match
telemetry.*events unless the pattern itself starts withtelemetry..
Why
Plugin authors who write telemetry hooks must now add { to: "collector" }, and third-party plugins cannot tap Anthropic's telemetry stream through a broad wildcard. The built-in plugin shows telemetry export becoming a plugin rather than fixed code, though it only runs when its gate passes.
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubt
Whether plugin hook modules are available to everyone or sit behind their own switch is not clear.