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

Command Reference

Signals

Create LLM classifiers that label spans, traces, or sessions — then inspect labels, distributions, and alerts.

A signal is an LLM classifier that labels a sampled fraction of an agent's spans, traces, or sessions. Use signals to track behavior you care about — refusals, sentiment, error categories — and alert when the label mix drifts.

Use inf signals to define classifiers, backfill labels over a past window, inspect the produced labels and their distribution over time, and manage threshold alerts on them.

How signals work

  • Each signal belongs to one agent (its UUID, not its identity value) and targets one scope: span, trace, or session.
  • A signal has a classifier: binary (true/false) or string (picks one of 2–10 --label values).
  • The classifier samples a percentage of matching items (--sample-rate, integer 0–100) and runs only while the signal is active (activate / disable toggle it).
  • Editing creates a new version of the signal; the current version drives classification.

Quickstart

# 1. Find the agent that owns the signal
inf agent list

# 2. Create a binary classifier sampling 25% of spans
inf signals create \
  --agent-id <agent-uuid> \
  --name "Refusals" \
  --scope span \
  --classifier binary \
  --sample-rate 25 \
  --prompt "Did the assistant refuse the request?"

# 3. Verify the prompt labels a past window correctly before going live
inf signals verify <signal-id> \
  --from 2026-06-01T00:00:00Z \
  --to 2026-06-02T00:00:00Z

# 4. See the signals for an agent and inspect one
inf signals list --agent my-agent
inf signals get <signal-id>

inf signals list prints full signal IDs. Use --json for machine-readable output.

inf signals list

List all signals defined for a single agent identity, with classifier type, scope, sample rate, and recent label counts.

inf signals list --agent my-agent

Alias: inf signals ls

Options

FlagRequiredDescriptionDefault
--agent <identity>YesAgent identity value to list signals for, e.g. my-agent
--include-archivedNoAlso show archived (soft-deleted) signalsOff

inf signals list-by-project

List every signal across all agents in a project, as a lightweight summary with no version detail. Use when you don't know which agent owns a signal.

inf signals list-by-project

Options

FlagRequiredDescriptionDefault
--project <id>NoProject UUID to scanActive project

inf signals get

Show one signal's full config plus its current version — classifier prompt, labels, and sample rate.

inf signals get <signal-id>

Arguments

ArgumentRequiredDescription
signalIdYesSignal UUID (from inf signals list)

inf signals create

Create a signal. Pass exactly one of --prompt or --prompt-file.

inf signals create \
  --agent-id <agent-uuid> \
  --name "Sentiment" \
  --scope trace \
  --classifier string \
  --sample-rate 10 \
  --label positive,neutral,negative \
  --prompt-file ./sentiment.txt

Options

FlagRequiredDescriptionDefault
--agent-id <id>YesAgent UUID that owns this signal (the agent's id, not its identity value)
--name <name>YesHuman-readable signal name, e.g. "Refusals"
--scope <scope>YesWhat each classifier run labels: span, trace, or session
--classifier <type>Yesbinary (true/false, no --label) or string (2–10 --label values)
--sample-rate <percent>YesPercent of matching items to classify (integer 0–100)
--prompt <text>Exactly one of prompt/prompt-fileClassifier prompt text inline
--prompt-file <path>Exactly one of prompt/prompt-fileRead the classifier prompt from a file, e.g. ./refusal-prompt.txt
--label <label>For string classifiersLabel value; repeat 2–10 times or comma-separated[]
--sentiment <outcome=value>NoOutcome sentiment, e.g. true=negative or <label>=positive[]

Examples

# Binary classifier (no labels) sampling 25% of spans
inf signals create --agent-id <agent-uuid> --name "Refusals" \
  --scope span --classifier binary --sample-rate 25 \
  --prompt "Did the assistant refuse the request?"

# String classifier with a fixed label set, prompt read from a file
inf signals create --agent-id <agent-uuid> --name "Sentiment" \
  --scope trace --classifier string --sample-rate 10 \
  --label positive,neutral,negative --prompt-file ./sentiment.txt

inf signals edit

Create a new version of a signal by overriding any of its config fields; unspecified fields keep their current values. Pass at most one of --prompt or --prompt-file.

inf signals edit <signal-id> --sample-rate 50

Arguments

ArgumentRequiredDescription
signalIdYesSignal UUID (from inf signals list)

Options

FlagRequiredDescriptionDefault
--scope <scope>NoNew scope: span, trace, or sessionKeep current
--classifier <type>NoNew classifier type: binary or stringKeep current
--sample-rate <percent>NoNew sample rate (integer 0–100)Keep current
--prompt <text>NoNew classifier prompt text inlineKeep current
--prompt-file <path>NoRead the new classifier prompt from a fileKeep current
--label <labels>NoReplace the string classifier label set entirely, e.g. good,badKeep current
--sentiment <outcome=value>NoOutcome sentiment, e.g. true=negativeKeep current

Examples

# Bump just the sample rate
inf signals edit <signal-id> --sample-rate 50

# Rewrite the prompt and swap the label set
inf signals edit <signal-id> --prompt-file ./v2-prompt.txt --label positive,negative

inf signals activate / disable / archive

Manage a signal's state.

# Resume classifying new sampled items
inf signals activate <signal-id>

# Pause classification (reversible)
inf signals disable <signal-id>

# Archive (soft-delete); hidden from `list` unless --include-archived
inf signals archive <signal-id>

Each takes a single required signalId argument (UUID from inf signals list) and no other options.

inf signals verify

Preview how a signal's current classifier would label a small sample from a past window, without persisting results. Use to sanity-check a prompt before a full run.

inf signals verify <signal-id> \
  --from 2026-06-01T00:00:00Z \
  --to 2026-06-02T00:00:00Z \
  --sample-size 30

Arguments

ArgumentRequiredDescription
signalIdYesSignal UUID (from inf signals list)

Options

FlagRequiredDescriptionDefault
--from <iso>YesWindow start, ISO-8601
--to <iso>YesWindow end, ISO-8601
--sample-size <n>NoNumber of items to classify (integer 1–100)20

inf signals run

Create and inspect manual backfill runs.

inf signals run create

Create a manual signal run over a window.

inf signals run create <signal-id> \
  --from 2026-06-01T00:00:00Z \
  --to 2026-06-02T00:00:00Z \
  --sample-rate 100
FlagRequiredDescriptionDefault
--from <iso>YesStart time, ISO-8601
--to <iso>YesEnd time, ISO-8601
--sample-rate <percent>YesSample rate percent, 0–100

inf signals run list

List manual runs for a signal.

inf signals run poll

Poll a manual signal run until it reaches a terminal state.

inf signals run poll <manual-run-id> --signal-id <signal-id>
FlagRequiredDescriptionDefault
--signal-id <id>YesSignal the run belongs to
--timeout <seconds>NoMax seconds to poll before giving up600
--interval <seconds>NoSeconds between polls10

inf signals backfill

Queue a manual backfill run over a window.

inf signals backfill \
  --signal-id <signal-id> \
  --from 2026-06-01T00:00:00Z \
  --to 2026-06-02T00:00:00Z \
  --sample-rate-percent 100
FlagRequiredDescription
--signal-id <id>YesSignal to backfill
--from <iso>YesWindow start, ISO-8601
--to <iso>YesWindow end, ISO-8601
--sample-rate-percent <n>YesSample rate percent (integer)

inf signals labels list

List the per-item labels a signal produced, with paging, sorting, and filtering by label value.

inf signals labels list <signal-id> --classifier string --string-label negative --limit 100

Arguments

ArgumentRequiredDescription
signalIdYesSignal UUID (from inf signals list)

Options

FlagRequiredDescriptionDefault
--classifier <type>YesClassifier type: binary, string, or regex
--limit <n>NoMax rows to return (integer 1–200)50
--offset <n>NoRows to skip for paging (integer >= 0)0
--sort-by <field>Nocompleted_at, target_start_time, status, or labelcompleted_at
--sort-dir <dir>Noasc or descdesc
--bool-label <bool>NoFilter to one binary outcome (true/false; binary classifiers)
--string-label <label>NoFilter to one string label value, e.g. negative (string classifiers)

inf signals distribution

Show how a signal's labels break down over time, bucketed by hour or day (computed live from raw labels).

inf signals distribution <signal-id> \
  --from 2026-06-01T00:00:00Z \
  --to 2026-06-08T00:00:00Z \
  --bucket day

Options

FlagRequiredDescriptionDefault
--from <iso>YesWindow start, ISO-8601
--to <iso>YesWindow end, ISO-8601
--bucket <b>Nohour or dayhour

Get a materialized-view-backed label distribution for a signal (grid-optimized for larger windows).

inf signals distribution-trends <signal-id> --from <iso> --to <iso> --bucket day

Takes the same --from, --to, and --bucket options as inf signals distribution.

inf signals alerts

Manage alerts on a signal — threshold predicates over a rolling window, Slack delivery, and firing history. The full subtree runs under inf signals alerts.

inf signals alerts create

inf signals alerts create \
  --signal-id <signal-id> \
  --name "true-rate drop" \
  --metric true_rate \
  --operator lte \
  --threshold 0.8 \
  --window 1h
FlagRequiredDescriptionDefault
--signal-id <id>YesSignal to alert on
--name <name>YesAlert name
--metric <metric>Yeslabel_volume, true_rate, value_count, or value_share
--operator <op>YesFire when the value is gte or lte the threshold
--threshold <number>YesThreshold value
--window <window>YesRolling window: 5m, 10m, 15m, 30m, 1h, 3h, 6h, 24h, 48h
--comparison <mode>NoHow the threshold is interpreted: pct_change or absolutepct_change
--string-label <label>For value_count/value_shareTarget value; required for value_* metrics, rejected for label_volume/true_rate
--min-label-count <n>NoMin labels in-window before firing0
--cooldown <minutes>NoCooldown minutes between firings: 0, 15, 60, 360, or 14400
--slack-channel-id <id>NoSlack channel ID (with --slack-channel-name)
--slack-channel-name <name>NoSlack channel name (with --slack-channel-id)

inf signals alerts — other verbs

  • edit <alert-id> --signal-id <id> — change an alert's predicate, Slack target, or enabled toggle (same flags as create).
  • archive <alert-id> --signal-id <id> — archive an alert.
  • get <alert-id> --signal-id <id>, list --signal-id <id> — fetch alerts.
  • list-by-team / list-by-project — list alerts across the active team's signals or within a project.
  • events <alert-id> --signal-id <id> — list an alert's firing history.
  • state <alert-id> --signal-id <id> — get an alert's current state snapshot.
  • backtest --signal-id <id> … — replay a predicate over the last N days (read-only preview).

edit, archive, get, events, and state all require --signal-id in addition to the alert ID.

Run inf signals alerts --help for the full flag list on each.

Common workflows

# Backfill labels over a past window, then poll the manual run
RUN_ID=$(inf signals run create <signal-id> \
  --from 2026-06-01T00:00:00Z --to 2026-06-02T00:00:00Z \
  --sample-rate 100 --json | jq -r '.id')
inf signals run poll "$RUN_ID" --signal-id <signal-id>

# Alert when the true-rate drops to/below 0.8 over the last hour
inf signals alerts create --signal-id <signal-id> --name "true-rate drop" \
  --metric true_rate --operator lte --threshold 0.8 --window 1h

# Preview how that predicate would have fired over the last 7 days (read-only)
inf signals alerts backtest --signal-id <signal-id> \
  --metric true_rate --operator lte --threshold 0.8 --window 1h

On this page