Skip to content

Live operations — Tower 0.8.0

Tower evaluates locally stored, explicitly attributed telemetry every 30 seconds while the HTTP application's lifespan is running. create_app(detection_interval_seconds=0) disables the worker; a trusted scheduler can instead call POST /alerts/evaluate. The internal actor is tower-detector. Detection creates alerts and incidents, never approvals, runtime controls or recovery execution. No LLM or sibling import is required. Scanner failures are logged and retried on the next interval.

Rules and freshness

api.operations.policy = DetectionPolicy(...) configures trusted host policy; both freshness and heartbeat windows default to 300 seconds (range 1–86400).

Rule Condition Meaning
lens.failed Latest native Lens record is an available failed run, observed within the freshness window and not in the future Critical alert and idempotent recovery incident; cause unconfirmed
heartbeat.stale Last heartbeat, or registration when none exists, is overdue Warning; reported health unchanged
evidence.stale Latest pushed record for a producer is older than the window Warning; native verdict unchanged
evidence.missing An installed producer capability has no pushed records Warning; uninstalled optional packages do not cause alerts

The latest observation per producer/deployment drives each scan. This is a current-posture detector, not a lossless stream processor: a newer run or diagnosis can supersede a failed run before a scan. Delayed pushes older than the window, future timestamps and invalid native artifacts never create recovery incidents. Unavailable projections remain visible in evidence posture. There is no remote polling, arbitrary rule expression evaluation, automatic evidence fetching or external notification delivery. The alert feed and console are the notification surfaces in this release.

Alerts deduplicate by deployment, environment, rule, source and (for failures) observation ID. Repeated scans preserve acknowledgement and first-seen time. Absent conditions clear alerts; cleared warning conditions can reopen with a new acknowledgement lifecycle. Append-only audit events preserve create, acknowledge, clear and reopen history. Older scans cannot regress a newer saved scan. Incident and alert writes commit atomically with the scan watermark; interrupted transactions roll back together and can be retried safely.

Correlation keys group same-source, explicitly same-run alerts across agents within an environment. A shared run ID is a correlation hint, not a causal finding or a cross-environment incident merge. Missing run IDs stay deployment local. Each recovery incident and its approvals remain scoped to one deployment. Clearing an alert never resolves its incident; recovery still requires the existing probe, fresh native Lens success and same-run passing Evals gate.

Operator workflow

export AGENTICOPS_TOKEN=writer-token  # or pass --token explicitly
agenticops-control-tower --token writer-token alerts evaluate
agenticops-control-tower --token reader-token alerts list --active-only --environment staging
agenticops-control-tower --token writer-token alerts acknowledge ALERT_ID
agenticops-control-tower --token reader-token incidents view INCIDENT_ID
uv run python examples/live_operations.py

HTTP reads: GET /alerts?environment=staging&active_only=true, GET /incidents?environment=staging, GET /incidents/{id}/view. Writes: POST /alerts/evaluate, POST /alerts/{id}/acknowledge. Readers cannot evaluate or acknowledge. Incident reads use the existing configured-credential contract; anonymous development inventory remains usable. HTTP identities are server-derived http-reader, http-writer, http-approver; tokens represent deployment-wide roles, not named end users. Trusted Python Operator.agent_ids limits reads, scans, acknowledgements and joined views. Offline inventory snapshots do not contain live alerts or incidents.

Incident console and joined audit

Connect to /console/ with a reader token. Active alerts, acknowledgements and an incident queue refresh every 30 seconds. Select an incident to inspect its inventory, reported health, evidence posture, findings/citations, plan, approval state, execution claims/receipts and recovery checks. All console requests remain GET-only; actions use the same authenticated API/CLI as before.

incident_view joins the original detection (even if evidence was pruned), up to 100 recent same-run native evidence records within that deployment, the incident's durable events, retained deployment configuration/bulk audit, and alert lifecycle audit. The validated native detection run ID drives correlation even when optional link-level metadata was omitted. evidence_truncated explicitly reports omitted older records; the original detection is always retained in addition to the bound. Each timeline entry includes time, actor, source and event. Configuration and alert audit are deployment context and may include changes unrelated to the incident; change_scope labels this explicitly. Policy decisions remain native Sidecar evidence. Requested commands and actual connector acknowledgements retain distinct events; a request is never proof of containment.

Lens integrity is not_verified and coverage is not_assessed, separately from reported health and evidence freshness. Tower does not infer cryptographic integrity, execution completeness or exact root cause from timestamps and links. Native projections omit unsupported raw payloads; use authorized producer tools for deeper inspection. Approval/recovery evidence remains in the embedded incident even when its run differs from the detection run.

Persistence and package boundaries

Use AGENTICOPS_DATABASE / create_app(database_path=...) for registry, evidence, configuration, incidents, scans and alerts in one local SQLite database. Without it all state is process-local. SQLite remains a single-host deployment model; multiple workers may scan, but writes and incident identities deduplicate. Audit is retained without automatic pruning; it is not an independently tamper-evident ledger. No distributed leader election, alert retention policy or remote telemetry subscription is supplied.

All sibling extras keep their current compatible ranges. Lens supplies native runs; Evals supplies report/gate verdicts; Sidecar supplies native decisions and runtime enforcement; Chaos supplies resilience evidence; MCP retains existing tower.* tools. New alert/view endpoints are Tower API/CLI surfaces, not new MCP tools. AIOS remains draft; these are Tower-local contracts. See ecosystem compatibility.