Skip to main content
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 halo to kick off a one-off analysis, schedule recurring ones, watch a run reach completion, and read the resulting report.

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 halo agent list

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

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

# 4. Read the report (the assistant message in the conversation)
inf halo conversation get <conversation-id>
inf halo run create prints both the run-id and the conversation-id. The report prints in full from inf halo conversation get — no --json required. Add --json only when you want the raw structured payload for scripting.

inf halo 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 halo agent list
Alias: inf halo agent ls

Options

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

inf halo run

Create and inspect HALO runs.

inf halo run create

Start a manual analysis for one agent over a time window.
inf halo 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 halo 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 cap10000
--max-subagent-depth <n>NoEngine recursion ceiling (1–5)3
--max-turns <n>NoPer-agent turn ceiling (1–100)50
--agent-time-range <range>NoTrace window preset used when picking an agent interactively30d

inf halo 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 halo run poll <run-id>

Options

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

inf halo 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 halo run get <run-id>

inf halo run events

List the structured event timeline for a run (started, heartbeat, agent steps, completed, failed).
inf halo run events <run-id>

Options

FlagRequiredDescriptionDefault
--limit <n>NoMax events to return100

inf halo run cancel

Request cancellation of an in-flight run.
inf halo run cancel <run-id> --reason "no longer needed"

Options

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

inf halo conversation

Inspect HALO conversations and read their reports. Alias: inf halo conv

inf halo conversation list

List conversations in the active project, newest first.
inf halo conversation list
Alias: inf halo conversation ls

Options

FlagRequiredDescriptionDefault
--limit <n>NoMax conversations to return50

inf halo 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 halo conversation get <conversation-id>
Add --json to get the raw payload (every message, run, and trace dataset) for scripting.

inf halo schedule

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

inf halo schedule list

inf halo schedule list
Alias: inf halo schedule ls
FlagRequiredDescriptionDefault
--include-archivedNoInclude archived schedulesfalse

inf halo schedule get

inf halo schedule get <schedule-id>

inf halo schedule runs

List recent runs fired by a schedule.
inf halo schedule runs <schedule-id>
FlagRequiredDescriptionDefault
--limit <n>NoMax runs to return50

inf halo schedule create

inf halo 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 halo 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)3
--max-turns <n>NoPer-agent turn ceiling (1–100)50
--enabled <bool>NoWhether the schedule firestrue

inf halo schedule update

Update mutable fields on a schedule. Accepts the same flags as create (all optional), keyed by <schedule-id>.
# Pause a schedule
inf halo schedule update <schedule-id> --enabled false

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

inf halo schedule archive / unarchive

Archive a schedule so it stops firing, or restore it later.
inf halo schedule archive <schedule-id>
inf halo 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 halo run create --agent-uuid <agent-uuid> --json)
RUN_ID=$(echo "$RUN" | jq -r '.runId')
CONV_ID=$(echo "$RUN" | jq -r '.conversationId')

inf halo run poll "$RUN_ID"

# Extract just the original report (first assistant message) as markdown
inf halo 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.