Monitor sessions and agents
Operator-side observability for agents, sessions, and the registry in Orca Agent Engine.
This page covers the operator-side view of agent resources: what the registry exposes for inspecting sessions, what session-level signals to watch, and where to look when something goes wrong.
Get your registry endpoint
Registry endpoint
Examples on this page target your registry endpoint - the deployment host root, with no path
suffix. For CLI, set ORCA_REGISTRY_URL and exactly one of ORCA_ACCESS_TOKEN (Bearer) or
ORCA_API_KEY (x-api-key). For TypeScript SDK, set ORCA_BASE_URL / ORCA_API_KEY (Bearer).
To find the endpoint, see Connect to the registry.
Where activity goes
Every Agent Engine operation produces signals you can inspect:
| Signal | Where to find it |
|---|---|
| Session events | GET /v1/sessions/{id}/events and the SSE stream |
| Session status, stats, usage | Fields on the Session record |
| Registry request logs | StreamNative Cloud Console - Workspace activity log |
| Registry, harness, and sandbox service logs | Your deployment logging backend or StreamNative Cloud operator view |
| Provider-side metrics (token usage, latency) | The usage and stats fields on each session |
The registry normalizes and persists provider events before it exposes them. Default list and stream responses keep only the Claude event taxonomy and remove Orca envelope fields. With orca-beta, event lists return the complete indexed public transcript, while streams retain the full envelope only for public events. The list is the durable projected view, while SSE is the live delivery view.
Session-level observability
A session's lifecycle is observable end-to-end through three fields and one endpoint.
Status
The status field on a session reports what the agent is currently doing. See Session statuses for the values. A session record is only idle or running; watch for sessions stuck in idle after work should have started. Provider retries appear as session.status_rescheduled events, not as a persisted rescheduling status.
curl -fsS "$ORCA_REGISTRY_URL/v1/sessions/$SESSION_ID" \
-H "Authorization: Bearer $ORCA_ACCESS_TOKEN" \
| jq '.status'Stats
session.stats reports session-level timing:
| Field | Meaning |
|---|---|
active_seconds | Total time the agent has spent actively running. |
duration_seconds | Wall-clock duration from session creation to now. |
Compare active_seconds to duration_seconds to see how much of a session's lifetime is spent idle versus working.
Usage
session.usage reports token-level usage:
| Field | Meaning |
|---|---|
input_tokens | Tokens consumed from prompts and user messages. |
output_tokens | Tokens produced by the agent. |
cache_read_input_tokens | Tokens served from the provider's prompt cache. |
cache_creation | Tokens written to the prompt cache, by TTL bucket. |
Use these to spot runaway sessions, attribute spend to teams (via metadata), and forecast capacity.
Events
The event list is the highest-fidelity record of what the agent did. Pull a session's full event history with:
curl -fsS "$ORCA_REGISTRY_URL/v1/sessions/$SESSION_ID/events?limit=100&order=asc" \
-H "Authorization: Bearer $ORCA_ACCESS_TOKEN"Look for agent.tool_use and agent.mcp_tool_use events to see what tools the agent invoked, the session.status_* events to follow the lifecycle, and session.error for typed failures.
Agent-level observability
To observe activity across many sessions for a single agent, list the sessions filtered by agent_id and aggregate the usage fields client-side. There is no metadata filter on the list endpoint, so select on metadata with jq after fetching:
curl -fsS "$ORCA_REGISTRY_URL/v1/sessions?agent_id=$AGENT_ID&limit=100" \
-H "Authorization: Bearer $ORCA_ACCESS_TOKEN" \
| jq '[.data[] | select(.metadata.team == "support") | {id, status, input: .usage.input_tokens, output: .usage.output_tokens}]'Tag sessions with agent-specific metadata (for example, team, channel, customer_id) so you can slice usage by dimension without scanning every session.
Alerts
Agent Engine does not ship session-level alerting today. To wire up alerts:
- Forward lifecycle changes to your alerting pipeline by tailing the events stream and matching
session.status_rescheduled,session.error, andsession.deleted. Do not matchsession.status_terminated- it is reserved and never emitted, so an alert keyed to it never fires. - Scrape session
usagefields on a schedule and alert on cost or token-burn anomalies. - For registry, harness, or sandbox process alerts, use the service-level metrics and logs exposed by your deployment.
Permissions
Treat every Workspace API key as full access to its Workspace's resources, and separate access with Workspaces. See Control registry access.