Connect
- Open Observe, select Live, and start a recorder session.
- Copy
src/lib/traces/flight-recorder-client.tsinto the instrumented agent project or expose the same helper from a shared package. - Use the endpoint and channel generated by Engram:
ENGRAM_INGEST_KEYS_JSON is
empty. When ingest keys are configured, every GET and POST requires the raw
token as a Bearer credential. The processor’s injectable fetch can add it:
onTraceStart, onTraceEnd, onSpanStart,
onSpanEnd, forceFlush, and shutdown. It serializes only through the SDK’s
public toJSON() methods and explicitly disables tracing API key persistence.
OpenAI’s Agents SDK documents custom processors as an additive way to receive
traces and spans, and documents Trace.toJSON() and Span.toJSON() as the
serialization surface:
- https://openai.github.io/openai-agents-js/guides/tracing/
- https://openai.github.io/openai-agents-js/openai/agents/interfaces/tracingprocessor/
Evidence boundary
- Generic model, agent, tool, guardrail, and handoff spans appear as execution evidence but do not animate memory.
- Native
engram.memoryevents are labeled observed. - Recognized memory tool calls are translated deterministically and labeled mapped.
- Engram does not infer hidden chain-of-thought or unrecorded memory operations.
Security and runtime limits
- Browser origins receive CORS access only when they exactly match an origin in
ENGRAM_INGEST_ALLOWED_ORIGINS. There is no wildcard CORS fallback. - When
ENGRAM_INGEST_KEYS_JSONis configured, Bearer authentication is mandatory. Authenticated channels are isolated by tenant and project even if two clients choose the same public channel ID. Optional top-level or querytenantIdandprojectIdclaims must match the credential. - In production, the endpoint returns unavailable unless
ENGRAM_LEGACY_LIVE_RECORDER_ENABLED=trueand ingest keys are configured. - The built-in browser recorder uses
EventSource, which cannot attach a Bearer header. Treat that flow as local development functionality; do not place raw ingest tokens in browser code or URL query strings. - Credential-shaped keys and values are redacted before a live item reaches the browser and again before export.
- Live channels are in-memory, capped, and removed after inactivity. On serverless deployments a process restart can end a channel. This is an interactive demo transport, not a durable telemetry backend.
- Do not rely on this endpoint for production telemetry. Use telemetry v2 with durable storage, retention controls, and operational monitoring instead.