Skip to content

Run Observability

Run observability is BMO’s session-facing family for understanding recent run state without opening the full debugger timeline.

It groups three read surfaces that share the same app-owned ledger-backed truth:

  • Session summary — bounded recent-run usage, performance, and adaptive parity
  • Cue ledger — who acts next, what evidence is expected, and which recovery controls are available
  • Trace lens — tool-call-only history for one run

Use it when you need a fast operator read. Use the Agent Debugger when you need the full ordered event history.

SurfaceScopePurpose
bmo config show-run-observabilityconfig onlyHeadless discoverability view of the family and its process-boundary truth contract
/run-observabilitycurrent session familyTUI hub that summarizes recent run state and routes to /debugger, /run_cue_ledger, and trace reads
GET /v1/sessions/{id}/observabilitysession familyBounded session summary
GET /v1/sessions/{id}/run-cue-ledgersession familyCue-oriented next-step ledger
GET /v1/agent-runs/{run_id}/traceone run in one session familyTool-call-only trace lens
session_observabilitysession familyNative agent summary tool
run_cue_ledgersession familyNative agent cue tool
inspect_run_traceone run in one session familyNative agent trace-lens tool
bmo_get_session_observabilitysession familyMCP summary twin
bmo_get_run_cue_ledgersession familyMCP cue twin
bmo_inspect_run_traceone run in one session familyMCP trace-lens twin

The CLI surface is intentionally different from the others: it runs out of process and does not claim live access to the session service or run store.

Use session_observability or GET /v1/sessions/{id}/observability when you need:

  • bounded recent-run usage and token totals
  • recent run latency and throughput
  • aggregate cost state
  • adaptive orchestration parity

This is the cheapest family surface when the question is “what does this session’s recent run history look like right now?”

Use run_cue_ledger or GET /v1/sessions/{id}/run-cue-ledger when the question is “who acts next, with what expected evidence?”

The cue ledger projects the same session-family run rows into:

  • active actors
  • cue state
  • expected next action
  • expected evidence
  • recovery and control references

Use inspect_run_trace or GET /v1/agent-runs/{run_id}/trace when you need a single run’s ordered tool calls without loading the broader event stream. This trace read stays session-scoped: bound callers inherit the current session family, and unbound callers must provide session scope explicitly.

This surface is intentionally narrow:

  • only kind=tool events are returned
  • phase, lifecycle, and other event kinds stay out
  • it is a run-scoped lens, not a session summary

When you need full event history, use /debugger or get_agent_run_events instead.

Every live surface reads app-owned builders in internal/app:

  • SessionObservabilityPayload
  • RunCueLedgerPayload
  • RunTracePayload

That shared seam keeps HTTP, TUI, native tools, and MCP aligned without routing through HTTP as an internal dependency.

The out-of-process CLI reports only what it can truthfully know:

  • the family exists
  • which surfaces are available
  • that live state must be read from the running app

Run observability complements the debugger; it does not replace it.

Use caseBest surface
”What happened, step by step?”/debugger or get_agent_run_events
”What does this session’s recent run window look like?”session_observability
”Who acts next and what evidence should I expect?”run_cue_ledger
”Which tools ran in this one run?”inspect_run_trace