Check out the newest way to compare different models for a task/agent harness: AutoEvals

Command Reference

Analyze Harness

Run HALO agent-trace analyses, schedule recurring reports, and pull report markdown from the CLI.

HALO analyzes your agent's traces and produces a markdown report that flags anomalies, errors, inefficiencies, and opportunities to improve reliability, latency, cost, and tool usage. The report is written to read like a brief you can paste straight into a coding agent to apply the fixes.

Use inf analyze-harness to kick off a one-off analysis, schedule recurring ones, watch a run reach completion, and read the resulting report. The old name inf halo remains as an alias.

How HALO is organized

  • A run is one analysis of one agent over one time window. Each completed run produces exactly one report.
  • A conversation is the thread a run lives in. The first assistant message is the original report; any follow-up questions you ask add more runs and more assistant messages to the same conversation.
  • A schedule fires recurring runs for one agent on a cadence (hourly, daily, weekly, or monthly).

The report markdown is the assistant message content inside a conversation. There is no separate "report" artifact to download, so reading a report means reading its conversation.

Quickstart: run an analysis and read the report

# 1. Find the agent you want to analyze
inf analyze-harness agent list

# 2. Start a run for that agent over the last 24h
inf analyze-harness run create --agent-uuid <agent-uuid>

# 3. Wait for it to finish (prints the run id from step 2)
inf analyze-harness run poll <run-id>

# 4. Read the report (the assistant message in the conversation)
inf analyze-harness conversation get <conversation-id>

inf analyze-harness run create prints both the run-id and the conversation-id. The report prints in full from inf analyze-harness conversation get — no --json required. Add --json only when you want the raw structured payload for scripting.

inf analyze-harness agent

List the agents HALO sees in your project's recent traces. You need an agent's UUID to start a run or create a schedule.

inf analyze-harness agent list

Alias: inf analyze-harness agent ls

Options

FlagRequiredDescriptionDefault
--time-range <range>NoTrace window to scan for agents: 1h, 6h, 12h, 1d, 3d, 7d, 14d, 30d, 90d30d

inf analyze-harness run

Create and inspect HALO runs.

inf analyze-harness run create

Start a manual analysis for one agent over a time window.

inf analyze-harness run create --agent-uuid <agent-uuid>

In an interactive terminal you can omit --agent-uuid to pick from recent agents. In non-interactive or --json mode, --agent-uuid is required.

Options

FlagRequiredDescriptionDefault
--agent-uuid <id>No (required non-interactively)Agent UUID from inf analyze-harness agent listInteractive picker
--prompt <text>NoPrompt steering the analysisDefault HALO prompt
--window-start-at <iso>NoWindow start, ISO datetimeDerived from --lookback-hours
--window-end-at <iso>NoWindow end, ISO datetimeNow
--lookback-hours <n>NoWindow length when --window-start-at is omitted24
--model-id <id>NoCatalog HALO model idCatalog default
--span-limit <n>NoPer-run span cap — omit to use the platform defaultPlatform default
--max-subagent-depth <n>NoEngine recursion ceiling (1–5)1
--max-turns <n>NoPer-agent turn ceiling (1–100)20
--reasoning-effort <level>NoReasoning effort for the analysis model: none, minimal, low, medium, high, or xhighmedium
--subagent-model-id <id>NoCatalog model id for subagent executions — omit to run subagents on the analysis modelAnalysis model
--debugNoEnable debug logging for the HALO runtimeOff
--agent-time-range <range>NoTrace window preset used when picking an agent interactively30d

inf analyze-harness run poll

Poll a run until it reaches a terminal state (completed, failed, cancelled, timed_out, or no_traces). Exits 0 only on completed.

inf analyze-harness run poll <run-id>

Options

FlagRequiredDescriptionDefault
--interval <seconds>NoPoll interval5
--timeout <seconds>NoTotal timeout1800 (30 min)

inf analyze-harness run get

Fetch a run's status and its referenced trace dataset. This returns run metadata, not the report text — read the conversation for the report.

inf analyze-harness run get <run-id>

inf analyze-harness run events

List the structured event timeline for a run (started, heartbeat, agent steps, completed, failed).

inf analyze-harness run events <run-id>

Options

FlagRequiredDescriptionDefault
--limit <n>NoMax events to return100

inf analyze-harness run cancel

Request cancellation of an in-flight run.

inf analyze-harness run cancel <run-id> --reason "no longer needed"

Options

FlagRequiredDescriptionDefault
--reason <text>NoReason recorded for the cancellationuser-cancelled

inf analyze-harness conversation

Inspect HALO conversations and read their reports.

Alias: inf analyze-harness conv

inf analyze-harness conversation list

List conversations in the active project, newest first.

inf analyze-harness conversation list

Alias: inf analyze-harness conversation ls

Options

FlagRequiredDescriptionDefault
--limit <n>NoMax conversations to return50

inf analyze-harness conversation get

Print a conversation with its messages, runs, and trace datasets. The assistant messages are the report markdown — the first assistant message is the original report; later ones answer follow-up questions in the same thread. Message content prints in full.

inf analyze-harness conversation get <conversation-id>

Add --json to get the raw payload (every message, run, and trace dataset) for scripting.

inf analyze-harness schedule

Manage recurring HALO analyses. Each schedule targets one agent and fires runs on a cadence.

inf analyze-harness schedule list

inf analyze-harness schedule list

Alias: inf analyze-harness schedule ls

FlagRequiredDescriptionDefault
--include-archivedNoInclude archived schedulesfalse

inf analyze-harness schedule get

inf analyze-harness schedule get <schedule-id>

inf analyze-harness schedule runs

List recent runs fired by a schedule.

inf analyze-harness schedule runs <schedule-id>
FlagRequiredDescriptionDefault
--limit <n>NoMax runs to return50

inf analyze-harness schedule create

inf analyze-harness schedule create \
  --title "Daily checkout-agent review" \
  --agent-uuid <agent-uuid> \
  --frequency daily \
  --hours 9 \
  --minutes 0 \
  --timezone America/Los_Angeles
FlagRequiredDescriptionDefault
--title <title>YesHuman-readable schedule title-
--agent-uuid <id>YesAgent the schedule analyzes (from inf analyze-harness agent list)-
--frequency <freq>Yeshourly, daily, weekly, or monthly-
--prompt <text>NoPrompt steering each runDefault HALO prompt
--hours <list>For daily/weekly/monthlyComma-separated hours (0–23)-
--minutes <list>YesComma-separated minutes (0–59)-
--days-of-week <list>For weeklyComma-separated days (0=Sun…6=Sat)-
--days-of-month <list>For monthlyComma-separated days (1–31)-
--timezone <tz>NoIANA timezoneUTC
--model-id <id>NoCatalog HALO model idCatalog default
--span-limit <n>NoPer-run span cap10000
--lookback-hours <n>NoHow far back each run looks, independent of cadence24
--max-subagent-depth <n>NoEngine recursion ceiling (1–5)2
--max-turns <n>NoPer-agent turn ceiling (1–100)20
--enabled <bool>NoWhether the schedule firestrue

inf analyze-harness schedule update

Update mutable fields on a schedule. Accepts the same flags as create (all optional), keyed by <schedule-id>.

# Pause a schedule
inf analyze-harness schedule update <schedule-id> --enabled false

# Repoint it at a different agent and widen the window
inf analyze-harness schedule update <schedule-id> --agent-uuid <other-agent> --lookback-hours 168

inf analyze-harness schedule archive / unarchive

Archive a schedule so it stops firing, or restore it later.

inf analyze-harness schedule archive <schedule-id>
inf analyze-harness schedule unarchive <schedule-id>

archive prompts for confirmation. Pass -y / --yes to skip the prompt.

Common workflows

# Run an analysis end-to-end and capture the report markdown to a file
RUN=$(inf analyze-harness run create --agent-uuid <agent-uuid> --json)
RUN_ID=$(echo "$RUN" | jq -r '.runId')
CONV_ID=$(echo "$RUN" | jq -r '.conversationId')

inf analyze-harness run poll "$RUN_ID"

# Extract just the original report (first assistant message) as markdown
inf analyze-harness conversation get "$CONV_ID" --json \
  | jq -r '.messages | map(select(.role == "assistant"))[0].content' \
  > halo-report.md
  • inf trace and inf span inspect the underlying traces HALO analyzes.
  • The MCP server exposes the same reports to AI coding assistants via list_halo_conversations and get_halo_conversation.

On this page