xeroctl slos
Define numeric reliability and latency targets per endpoint, then read live compliance back from the router. Create, update, list, delete, and pull the current breach state from one command surface.
Overview
Service Level Objectives define measurable reliability and performance targets for your inference endpoints. Each SLO specifies a metric, a numeric target value, and an optional evaluation window. The platform continuously evaluates compliance and stores a history of results.
The slos command uses a unified flag-based interface. The action is
determined by which flag is present (--create, --update,
--delete, --history, --calculate,
--summary). Only one action flag may be specified at a time.
Usage Pattern
xeroctl slos # List all SLOs
xeroctl slos <id> # Show SLO details
xeroctl slos --summary # Show summary with overall compliance
xeroctl slos --create --name <n> --metric <m> --target <t>
# Create an SLO
xeroctl slos <id> --update --name <n> # Update an SLO
xeroctl slos <id> --delete # Delete an SLO
xeroctl slos <id> --history # Show compliance history
xeroctl slos <id> --calculate # Trigger compliance calculation
xeroctl slos --endpoint <endpoint-uuid> # List SLOs for an endpoint (UUID)
list
List all SLOs for the project. This is the default action when no ID, --summary, or --endpoint flag is given.
xeroctl slos
xeroctl slos --limit 50
xeroctl slos --after 11111111-2222-3333-4444-555555555555
Options
| Option | Description |
|---|---|
--limit <n> |
Maximum number of results |
--after <cursor> |
Pagination cursor: SLO UUID to start after (e.g., 11111111-2222-3333-4444-555555555555) |
Output columns: ID, NAME, METRIC, TARGET, COMPLIANCE, STATUS. COMPLIANCE renders as a percentage in tabular output; the JSON variant exposes a 0.0-1.0 fraction under compliance and a 0-100 value under compliance_percentage. STATUS uses the three values listed in the summary legend.
get
Show full details of a specific SLO including metric, target, evaluation window, endpoint association, compliance percentage, and status.
xeroctl slos 11111111-2222-3333-4444-555555555555
xeroctl slos 11111111-2222-3333-4444-555555555555 -o json
create
Create a new SLO. The --name, --metric, and --target options are all required.
# Total-latency SLO (target in milliseconds, 500 ms here)
xeroctl slos --create \
--name "Total Latency" \
--metric total_latency_ms \
--target 500
# Error rate SLO with evaluation window (integer days, 1-90)
xeroctl slos --create \
--name "Error Rate" \
--metric error_rate \
--target 0.01 \
--window-days 1
# SLO scoped to a specific endpoint (endpoint UUID, not slug)
xeroctl slos --create \
--name "Endpoint TTFT" \
--metric ttft_ms \
--target 200 \
--window-days 7 \
--endpoint 11111111-2222-3333-4444-555555555555
# Dry run (no changes made)
xeroctl slos --create \
--name "Test SLO" \
--metric error_rate \
--target 0.05 \
--dry-run
Options
| Option | Description |
|---|---|
--name <name> |
SLO display name (required) |
--metric <metric> |
Metric to track (required). See Metric Reference. |
--target <value> |
Target value for the metric (required). Numeric. Latency metrics (ttft_ms, tpot_ms, total_latency_ms, exec_duration_ms, exec_approval_latency_ms) are expressed in milliseconds (e.g., 500 for 500 ms). Ratio metrics (error_rate, exec_error_rate) take a 0.0-1.0 fraction (e.g., 0.01 for 1%). Percentage metrics (availability, exec_availability) take a 0-100 value. Throughput (throughput_rps) takes requests/second. |
--window-days <days> |
Rolling evaluation window in whole days, integer between 1 and 90 (optional, defaults to a server-side window). The server rejects any other shape. |
--endpoint <endpoint-uuid> |
Scope SLO to a specific endpoint (optional). On this command the value is the endpoint UUID, not the slug or external id accepted elsewhere in xeroctl. |
Note: The router API also requires a comparison operator (one of less_than, less_than_or_equal, greater_than, greater_than_or_equal) on every create. The CLI currently does not expose a flag for it; if your create call is rejected for a missing comparison field, use the HTTP API directly via POST /v1/slos until the CLI is updated.
update
Update an existing SLO. At least one of --name, --target, or --window-days must be provided. The metric of an SLO is immutable after creation; to change the tracked metric, delete the SLO and create a new one.
# Rename
xeroctl slos 11111111-2222-3333-4444-555555555555 --update --name "Updated Total Latency"
# Tighten the target (milliseconds for latency metrics)
xeroctl slos 11111111-2222-3333-4444-555555555555 --update --target 300
# Change the evaluation window (integer days, 1-90)
xeroctl slos 11111111-2222-3333-4444-555555555555 --update --window-days 7
# Update multiple fields
xeroctl slos 11111111-2222-3333-4444-555555555555 --update --name "Strict Latency" --target 200 --window-days 1
Options
| Option | Description |
|---|---|
--name <name> |
New SLO display name |
--target <value> |
New target value. Unit follows the SLO's existing metric (milliseconds, ratio, percentage, or requests/second). |
--window-days <days> |
New rolling evaluation window in whole days (1-90) |
delete
Delete an SLO and its compliance history. A confirmation prompt is shown by default.
# With confirmation prompt
xeroctl slos 11111111-2222-3333-4444-555555555555 --delete
# Skip confirmation
xeroctl slos 11111111-2222-3333-4444-555555555555 --delete --force
# Dry run
xeroctl slos 11111111-2222-3333-4444-555555555555 --delete --dry-run
Options
| Option | Description |
|---|---|
--force |
Skip the confirmation prompt |
--dry-run |
Show what would be deleted without making changes |
history
Show the compliance evaluation history for a specific SLO. Each entry represents a single evaluation period with a compliance percentage and pass/fail indicator.
xeroctl slos 11111111-2222-3333-4444-555555555555 --history
xeroctl slos 11111111-2222-3333-4444-555555555555 --history --limit 20
xeroctl slos 11111111-2222-3333-4444-555555555555 --history --after aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
Options
| Option | Description |
|---|---|
--limit <n> |
Maximum number of history entries to return |
--after <cursor> |
Pagination cursor: history entry UUID to start after |
Output columns: ID, COMPLIANCE (percentage), IN_COMPLIANCE (yes/no color-coded), EVALUATED_AT.
calculate
Trigger an on-demand compliance calculation for a specific SLO. Returns the current compliance percentage and evaluation timestamp.
xeroctl slos 11111111-2222-3333-4444-555555555555 --calculate
xeroctl slos 11111111-2222-3333-4444-555555555555 --calculate -o json
Note: The router may run compliance evaluations in the background for active SLOs; the cadence is not contractually guaranteed. Use --calculate to force an immediate evaluation any time you need a current reading.
summary
Show a summary view of all SLOs in the project, with per-SLO status (met, not_met, or unevaluated). Useful for a quick health check across all defined objectives.
xeroctl slos --summary
xeroctl slos --summary -o json
The summary lists every active SLO in the project together with its latest
compliance reading. The router-side response also exposes aggregate counts
(total_active, total_met, total_not_met,
total_unevaluated) via the JSON output.
- metcompliance equal to or above the target on the latest evaluation
- not_metcompliance below the target on the latest evaluation
- unevaluatedno evaluation has run yet, or the window has no data
Endpoint Filter
Filter the SLO list to show only SLOs associated with a specific endpoint.
xeroctl slos --endpoint 11111111-2222-3333-4444-555555555555
xeroctl slos --endpoint 11111111-2222-3333-4444-555555555555 --limit 20
When --endpoint is passed without any other action flag, the command
lists all SLOs scoped to that endpoint rather than the full project list.
Flag overload: On the slos command, --endpoint takes an endpoint UUID, not the slug or external id accepted by other xeroctl commands. Pass the UUID exactly as returned by xeroctl endpoints (the id field).
Metric Reference
The --metric option specifies which signal to evaluate. Common metric identifiers:
| Metric | Description | Target Unit |
|---|---|---|
ttft_ms |
Time to first token, per request | Milliseconds |
tpot_ms |
Time per output token, averaged over the response | Milliseconds |
total_latency_ms |
Total end-to-end request latency | Milliseconds |
availability |
Percentage of successful (non-5xx) responses | Percentage (0, 100) |
error_rate |
Fraction of error responses (inverse of availability) | Ratio (0.0, 1.0) |
throughput_rps |
Average requests per second over the evaluation window | Requests/second |
exec_availability |
XEM execution agent uptime (lease-renewal based) | Percentage (0, 100) |
exec_duration_ms |
Per-call XEM tool execution duration | Milliseconds |
exec_error_rate |
Fraction of failed XEM executions over total executions | Ratio (0.0, 1.0) |
exec_approval_latency_ms |
Time from exec.approval_requested to the terminal exec.approved or exec.rejected transition |
Milliseconds |
Identifiers are case-sensitive. Any value outside the table above is rejected at create time.
Examples
Create a Comprehensive SLO Set
# Total latency SLO, under 500 ms
xeroctl slos --create \
--name "Total Latency" \
--metric total_latency_ms \
--target 500 \
--window-days 1 \
--endpoint 11111111-2222-3333-4444-555555555555
# Error rate SLO, less than 1% errors
xeroctl slos --create \
--name "Error Rate" \
--metric error_rate \
--target 0.01 \
--window-days 7 \
--endpoint 11111111-2222-3333-4444-555555555555
# List SLOs scoped to that endpoint
xeroctl slos --endpoint 11111111-2222-3333-4444-555555555555
Monitor Compliance Over Time
# Project-wide summary
xeroctl slos --summary
# History for a specific SLO
xeroctl slos 11111111-2222-3333-4444-555555555555 --history --limit 30
# On-demand recalculation
xeroctl slos 11111111-2222-3333-4444-555555555555 --calculate
Adjust a Target
# Tighten the latency target after infrastructure upgrade
xeroctl slos 11111111-2222-3333-4444-555555555555 --update --target 300
# Extend the evaluation window to 30 days
xeroctl slos 11111111-2222-3333-4444-555555555555 --update --window-days 30