Latest updates
Stay up to date with the latest changes to the Beacon Observe SDK.Unreleased
- Promised async iterators stay traced through consumption · An observed async function returning an async generator or query iterator ended its span before the first item was read. Iterators with their own
next()now keep the same consumption, cancellation and context behavior as directly returned iterators. Platform streams withoutnext()remain unchanged values. - Anthropic
instrumentModulesexample fixed · The documentedimport Anthropic fromexample crashedObserve.initialize(); pass the module namespace (import * as Anthropic) instead, and a clear error now says so. - Empty environment variables are ignored · A declared but empty
ASYMPTOTE_BASE_URLmadeObserve.initialize()throwInvalid URL, and an emptyOTEL_SERVICE_NAMEexported spans with a blank service name. Empty values now fall back to the defaults.
October 2026
v0.2.0 · October 22, 2026
- Early-cancelled streams keep the consumer’s error · Cancelling an observed stream before reading it kept the consumer’s error and exported its span only if the source’s
return()rejected; areturn()that throws synchronously now behaves the same. - Global tracers export after reinitialization · After
Observe.shutdown()andObserve.initialize(), spans fromtrace.getTracer()were dropped because the stopped provider stayed registered globally. New global tracers now use the new provider; a host’s own tracer provider is left untouched. - Observed streams read through their own API keep their span · An observed function returning a stream that has its own reading API, such as the Anthropic SDK’s
client.messages.stream()read withfinalMessage()or events, aReadableStreamread withgetReader(), or a Node stream sent throughpipe(), never exported its span: the SDK replaced the stream with a wrapper that onlyfor awaitwent through, which also madeinstanceofchecks on it fail. Such streams are now returned unchanged and their span ends when the function returns. Async generators and the Claude Agent SDK’squery()are still traced until they are read to the end. - Observe endpoints keep their query string · An endpoint with query parameters, such as a gateway URL carrying a tenant or routing parameter, had
/v1/observeappended after its query, so spans went to the wrong route without any error. The path is now added to the URL’s path, and the query and fragment are kept.Observe.initialize()now throws for an endpoint that is not an absolute URL, instead of exporting to an unusable address. - Spans from an observed stream nest under it · Work an observed async generator does as it is read, such as tool or model calls, was recorded under whoever consumed the stream, so those spans appeared beside the stream’s span instead of inside it. They are now its children, including work in the stream’s cleanup.
- Cancelling a query before reading it closes the query · Calling
return()orthrow()on a query fromwrapClaudeAgentQuerybefore its first message left the Claude Code process the query had already started running, and its span never ended. The query is now closed as the unwrapped one would be, and its span is exported. - API key scoped to Beacon Cloud ·
ASYMPTOTE_API_KEYis now sent only to Beacon Cloud: in hosted mode, or to an explicit OTLP endpoint on the same origin as the base URL. Previously a service with bothASYMPTOTE_API_KEYand a genericOTEL_EXPORTER_OTLP_ENDPOINTsent the key to that collector on every export. Caller-suppliedheadersare unchanged. - HTTPS required for the API key ·
Observe.initialize()now throws when the key would be sent to a non-loopbackhttp://base URL.http://localhost,http://127.0.0.1andhttp://[::1]remain allowed for local stubs.
June 2026
v0.1.0 · June 10, 2026
- Initial TypeScript SDK release · Published
@asymptote/sdkfor instrumenting cloud-hosted agent applications with OpenTelemetry spans compatible with Beacon’s normalized event model. - Hosted and customer-managed export · Added hosted Beacon Observe export through
ASYMPTOTE_API_KEYand customer-managed OTLP export throughOTEL_EXPORTER_OTLP_ENDPOINTorObserve.initialize({ otlpEndpoint }). - AI SDK instrumentation · Enabled OpenAI and Anthropic OpenLLMetry instrumentation by default, with configuration hooks for disabling or tuning provider instrumentation.
- Agent integration helpers · Added
Observe.observe(),Observe.getTracer(),Observe.wrapClaudeAgentQuery(),Observe.flush(), andObserve.shutdown()for custom agent steps, Vercel AI SDK telemetry, Claude Agent SDK query wrapping, and process lifecycle handling. - Beacon compatibility attributes · Exported constants for Beacon-compatible fields such as
beacon.origin,beacon.harness.name,beacon.event.action, andbeacon.prompt.text.