Skip to content
Console
Browse documentation
Guide

Investigate agent runs

Ask your agent to triage AI executions by customer, status, cost, tools, and quality evidence, then open the run page to check one.

On this page

An agent run is one AI workflow, read as one execution. It is not a collection of unrelated model spans. Your agent finds the run that matters and reads its steps. You open the run page it links to and check the run yourself.

Person filters include only identifiers Anectico resolved. Unmapped declarations stay in unfiltered event, conversation, turn and cost totals. An unresolved person reference keeps the application’s distinct_id and leaves person_id empty; it does not name a person. Counts are as reliable as your application's customer identification: intake telemetry does not authenticate each end user.

Ask your agent

List the agent runs that failed in production in the last day, with their cost. For the most expensive one, show me the steps, the repeated tool calls, and the customer. Give me a link.

Job MCP tool or action CLI command
List runs, newest first, with outcome, steps, tools, providers, cost, and release coverage list_agent_runs anectico agent-runs list
Read one run: status, steps, tokens, cost, and a bounded transcript get_agent_run anectico agent-runs get
Read a run’s complete execution graph get_agent_run_graph (a read action) anectico agent-runs graph
Read the context events of a run list_context_events (a read action) anectico agent-runs context
Read conversations and their turns list_agent_sessions, list_agent_turns, get_agent_session anectico agent-sessions list, anectico agent-sessions turns, anectico agent-sessions get
Check how complete the agent telemetry is get_telemetry_completeness (a read action) anectico agent-runs completeness
List the agents and their 24-hour run health list_agent_fleet anectico fleet list
Record a human judgment of a run submit_annotation (a write action) anectico evals annotations add
Read the judgments recorded for runs list_eval_annotations (a read action) anectico evals annotations list

list_agent_runs, the conversation tools, and the graph tools need agents:read. get_agent_run needs agents:content:read, because it can return the conversation transcript. Recording a judgment needs scores:write, and reading judgments needs scores:read. MCP calls also need mcp:read or mcp:write.

What your agent gets back

list_agent_runs filters by agent, person, account, environment, release, terminal status, provider, free text, and a relative or exact window. Each row has its own url. A run without a customer link means that no step of the run recorded an identity. get_agent_run and get_agent_run_graph return the run’s link as well.

Omitting the MCP run-list window reads the last 24 hours. MCP returns the resolved absolute start_time and end_time; use those exact values when continuing with a cursor so the window stays fixed. A malformed relative since is refused, including zero, negative and overflowing ages.

Run detail reads return at most the earliest 1,000 spans by start time. MCP get_agent_run extracts messages from those spans, then keeps the first two and last four available messages with each body capped. Check partial, returned_span_count, and total_span_count: when the span read is partial, the envelope has status: partial and the whole-run transcript is unknown. Its selected tail may precede the actual ending. transcript_available counts messages found in the returned span prefix; transcript_count counts the shown messages. transcript_total is present only when the span read is complete. The run header’s separately aggregated steps, tokens, cost and declared outcome still cover the complete selected run. REST and anectico agent-runs get retain the same span completeness fields. There is no detail cursor for the omitted spans.

A customer filter selects whole runs, not individual steps. A run matches when any of its steps carries that identity. An assistant typically records the customer once, on the request that starts the run, and not again on each model call or tool call beneath it. The run’s steps, tool calls, tokens, and cost always cover every step of that run, whether or not the step itself carried the identity. The same run therefore shows the same totals here and on the person page.

Time and environment filters also select whole runs. If a step matches the requested window and environment, Anectico includes the complete run. An earlier root still supplies the real start, the agent release, and the terminal declaration, and every child still contributes to tokens and cost. A long-running execution therefore has the same rollup in the list and in its detail view.

The run is addressed by its exact recorded trace id. Its span ids, parent ids, and causal link trace and span ids are carried as recorded. They are not derived from labels or neighboring spans.

For REST searches, GET /api/v1/agent-runs?q=... matches a case-insensitive literal substring within any one of seven run fields: run ID, agent name, root operation, service name, conversation ID, recorded distinct ID, or model. Text cannot match across two fields. Spaces and characters such as %, _, and backslashes are literal, not wildcards. Release, canonical person ID, and providers are not searched by q. Use their dedicated filters instead. Search selects complete runs, and it also applies to the release-coverage counts that are returned with the list.

The run identity prefers the recorded agent name. For a direct model call without an agent name, Anectico shows the model instead. If neither is present, it falls back to the root operation. The root operation stays visible separately, so an HTTP or job span is not mistaken for an agent name.

Every declared terminal state is one of Completed, Failed, Timed out, Cancelled, or Max steps. Runs without trustworthy terminal evidence show Undeclared. The detail and the person timeline also explain the safe terminal reason code. An explicit outcome on the earliest agent-invocation span is authoritative, so a failed child tool does not turn an explicitly cancelled or max-steps run into a failure. A status attached to another kind of step, or a value outside the five states above, is not treated as a run declaration. Supported frameworks whose own agent root declares a successful or failed span outcome are interpreted from that exact root. Otherwise the run stays visibly Undeclared, and child errors stay available as step evidence. A run can use multiple model providers, so Anectico gives the complete sorted provider set, and the provider filter matches when any step used that provider.

Open the proof

Open the link from the result. It opens the run page at /view/agent-run/:runId, with project_id in the address. The page is read-only. It names its project, and its one action is Copy link. See Proof pages. On the page, review:

  • the execution sequence and the slow or failed steps;
  • repeated model or tool calls;
  • token use and calculated cost;
  • errors and status transitions;
  • human feedback and automatic evaluation results; and
  • connected customer, trace, replay, or Issue evidence.

Interpret quality scores carefully

Human feedback captures reviewer judgment. Automatic scores apply the project’s configured evaluator and sampling rule. Neither explains a failure by itself. Compare the cited run steps, the tool outputs, and the application evidence.

The two are stored separately and shown separately, on purpose. An automatic score names the exact evaluator version that produced it, and it can be reproduced later, which is what a release gate reads. A person’s judgment cannot be reproduced and is never read as evidence. Keeping them apart is what makes "the reviewer said 0.2 and the judge said 0.9" a question you can ask at all.

Agent-run reads are project-scoped. The CLI sends the active project selected by --project, ANECTICO_PROJECT, or the current profile. An organization-level credential must select one. A project-scoped API key can rely on its signed project binding. With MCP, an organization-level credential must provide project_id. A project-scoped credential can omit it, because Anectico pins the call to the project signed into the key. Passing a sibling project cannot widen that key. Missing, foreign-project, and random run IDs return the same not-found response, while list calls for foreign or random projects both return an empty result.

Feedback belongs to the same project as its run. Anectico records the reviewer from your credential. You cannot submit feedback as somebody else, and there is no field to try.

Each reviewer has one judgment per project, run, and metric name. Safe retries return that same judgment instead of creating duplicates. Submitting changed feedback for the same identity edits it in place: the creation time stays stable while the update time advances. Different reviewers and metrics stay separate judgments, and a person’s judgment never merges with an automatic one.

A number is optional. Leaving one off records a label alone. A thumbs-up is a judgment, not a score of 1.0, and a thumbs-down is not a score of 0.

Past feedback shows each judgment’s metric name, recorded label, number when supplied, and comment. A recorded zero is 0. A label-only judgment has no number. Only thumbs_up and thumbs_down labels show their corresponding thumb on the run page. Custom labels such as bad or needs_review are shown as written, without inferring approval from the label or number.

Recording feedback needs scores:write, a permission every member holds. The server enforces it independently. Reading feedback back needs scores:read.

Rating a run and reading what it said are separate capabilities. A project whose content policy closes transcript reads still shows the run’s shape, its scores, and the judgments already recorded, and a member with scores:write can still record one. Withholding the transcript withholds what the run said. It does not remove your ability to judge it.

If a run was not sampled, that is not a passing score. If an evaluation lacks the inputs it needs for a criterion, change the recorded evidence or the criterion before you increase the sample rate. See Quality evaluations for evaluators, sampling rules, and budgets.

Move from run to impact

Open the customer’s person page to see what preceded and followed the run. Compare similar runs for other customers before you treat one expensive or failed execution as systemic. Ask the agent to follow the run outward: the Issues it produced (list_issues), the log lines and service metrics recorded around it (search_logs, get_service_health), and the customer session it was served in (get_session_signals). The run’s own trace is the place to start (get_trace).