erectl 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
erectl slos # List all SLOs
erectl slos <id> # Show SLO details
erectl slos --summary # Show summary with overall compliance
erectl slos --create --name <n> --metric <m> --target <t>
# Create an SLO
erectl slos <id> --update --name <n> # Update an SLO
erectl slos <id> --delete # Delete an SLO
erectl slos <id> --history # Show compliance history
erectl slos <id> --calculate # Trigger compliance calculation
erectl 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.
erectl slos
erectl slos --limit 50
erectl 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.
erectl slos 11111111-2222-3333-4444-555555555555
erectl 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)
erectl slos --create \
--name "Total Latency" \
--metric total_latency_ms \
--target 500
# Error rate SLO with evaluation window (integer days, 1-90)
erectl slos --create \
--name "Error Rate" \
--metric error_rate \
--target 0.01 \
--window-days 1
# SLO scoped to a specific endpoint (endpoint UUID, not slug)
erectl slos --create \
--name "Endpoint TTFT" \
--metric ttft_ms \
--target 200 \
--window-days 7 \
--endpoint 11111111-2222-3333-4444-555555555555
# Dry run (no changes made)
erectl 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 erectl. |
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
erectl slos 11111111-2222-3333-4444-555555555555 --update --name "Updated Total Latency"
# Tighten the target (milliseconds for latency metrics)
erectl slos 11111111-2222-3333-4444-555555555555 --update --target 300
# Change the evaluation window (integer days, 1-90)
erectl slos 11111111-2222-3333-4444-555555555555 --update --window-days 7
# Update multiple fields
erectl 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
erectl slos 11111111-2222-3333-4444-555555555555 --delete
# Skip confirmation
erectl slos 11111111-2222-3333-4444-555555555555 --delete --force
# Dry run
erectl 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.
erectl slos 11111111-2222-3333-4444-555555555555 --history
erectl slos 11111111-2222-3333-4444-555555555555 --history --limit 20
erectl 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.
erectl slos 11111111-2222-3333-4444-555555555555 --calculate
erectl 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.
erectl slos --summary
erectl 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.
erectl slos --endpoint 11111111-2222-3333-4444-555555555555
erectl 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 erectl commands. Pass the UUID exactly as returned by erectl 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 |
EEM execution agent uptime (lease-renewal based) | Percentage (0, 100) |
exec_duration_ms |
Per-call EEM tool execution duration | Milliseconds |
exec_error_rate |
Fraction of failed EEM 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
erectl 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
erectl 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
erectl slos --endpoint 11111111-2222-3333-4444-555555555555
Monitor Compliance Over Time
# Project-wide summary
erectl slos --summary
# History for a specific SLO
erectl slos 11111111-2222-3333-4444-555555555555 --history --limit 30
# On-demand recalculation
erectl slos 11111111-2222-3333-4444-555555555555 --calculate
Adjust a Target
# Tighten the latency target after infrastructure upgrade
erectl slos 11111111-2222-3333-4444-555555555555 --update --target 300
# Extend the evaluation window to 30 days
erectl slos 11111111-2222-3333-4444-555555555555 --update --window-days 30