// agents

Sessions, runs and observability

When an agent does something surprising, the answer is almost always in the transcript. Everything an agent runs is recorded as a session, and the inspector shows the whole thing, including the parts the chat window hides.

01// sessions

Every execution is a session

A session is one conversation or one triggered execution. It is stamped at creation with the surface that started it, and that stamp is what the inspector groups and badges by. It never changes afterwards, so provenance survives even when a conversation runs for weeks.

OriginWhat started it
dashboardThe floating chat window in the app.
wizardA session the Agnt Wizard started while building.
slackA Slack channel, thread or DM.
imessageA text from a confirmed phone binding.
scheduleA scheduled fire. Background work.
webhookAn inbound webhook. Background work.
queueA queue item being drained. Background work.
inboxEmail triage escalating, or a reminder sweep. Background work.
agentAnother agent dispatching work down. Background work.
mcp_probeAn MCP client driving the agent with the session tools.

Sessions split into two kinds. Conversations have a human on the other end and deliver their reply back to the surface they came from. Work sessions are headless: they run and bill but never post anywhere, which is why a schedule firing overnight does not text you its output. No work session appears in the conversation list; the ones started by a schedule or a webhook also get a row on the Runs tab.

conversation: dashboard, slack, imessage, wizardwork: schedule, webhook, queue, inbox, agent
02// the session inspector is read-only by design

Everything, including what chat hides

The Sessions tab shows every event in a session, not the cleaned-up version. That includes the runtime context the chat surface suppresses: the session preamble, memory retrieved at the start of a turn, the responses to approval requests, and results injected back from sub-agents. This is usually where a confusing answer becomes obvious, because you can see what the agent was actually given.

read-only on purpose

You cannot talk to the agent from the inspector. Chat happens in the floating chat window, which keeps the investigation surface a record of what happened rather than something you can accidentally add to while reading it.
03// runs

One row per fire

The Runs tab is the audit log for triggered work: one row per schedule or webhook fire, joined to the schedule name so you can tell which one fired. Each row deep-links to the transcript of the work session it produced. Queue, inbox and inter-agent work sessions are not trigger runs and do not appear here — read them in the inspector instead.

StatusMeaning
dispatchedThe trigger fired and a session was started.
failedThe dispatch itself failed. The row carries the error.
skippedThe trigger fired but was deliberately not dispatched.

A scheduled run whose schedule was later deleted keeps its row. It still tells you what happened, which is the point of an audit log.

04// observability from an mcp client

The read-only family

Every tool below is read-only. They grant no authority the caller does not already have, which is why they are the family a monitoring agent gets: one agent summarizing the others on a daily schedule, or an agent reading its own past sessions to work out why a tool call failed.

ToolWhat it returns
agnt_observability_list_agentsEnumerate agents before inspecting any of them.
agnt_observability_list_sessionsRecent sessions for an agent, with status and linked trigger metadata.
agnt_observability_search_sessionsSearch by free text, status or tool name, or filter to problematic sessions only: the ones carrying an error event or a failed tool result.
agnt_observability_read_sessionOne session, progressively. A compact per-event index first with errors expanded inline, then grep the bodies, fetch specific events, or page backward from a failure.
agnt_observability_list_trigger_runsRecent schedule and webhook fires with their dispatch status and the session each produced.
agnt_observability_get_session_usageCompute and credits for one session or one agent, broken down by category.
agnt_observability_list_escalationsBlocking human-in-the-loop requests: gated tool-call approvals and escalated questions.
agnt_observability_get_diagnosticsA compact health report: deploy state, dependency checks, recent sessions, trigger failures, escalations, usage and open config requests.
agnt_observability_check_dependenciesWhether the agent actually has what its config implies: integrations, connectors, remote MCP connections, workspace database, code execution.
agnt_observability_read_config_requestA config-change request the runtime raised, with the session context that prompted it.

separate from the session tools

agnt_agents_session_poll returns status only, never message content. Reading the transcript is agnt_observability_read_session, which lives in this family and is enabled independently of the session tools.

Start with the index rather than pulling a whole transcript. A default read_session call returns a per-event index with errors already expanded, which is normally enough to find the failure and then fetch only those events.

05// cost per session

What that run actually cost

Compute is attributed down to the session, so "the agent is expensive" becomes a specific answer: agnt_observability_get_session_usage scopes to one session or one agent, and agnt_usage_sessions ranks sessions across the workspace so the costly ones surface on their own.

Agent compute is paid from the AI wallet, which is separate from the data wallet that pays for data calls. The Usage page in the dashboard shows both. See usage and credits and wallets.