The data layer for software that repairs itself.
Send OpenTelemetry to sigiro. When a service fails, you get the cause and the query that proves it.
the loop
Five stages. A repair loop is not complete until all five operate.
Your agent writes the patch. Nothing tells the agent what failed, or if the patch worked. sigiro does two of these five stages.
$ sigiro anomalies
SERVICE SIGNAL BASELINE NOW SHIFT INCIDENT
checkout error_rate 0.4% 19.2% +48σ inc_4a1c
checkout latency_p95 180ms 30.0s +166× inc_4a1c
2 shifts · 1 incident · since 18:35
$
sigiro compares each service with its own history. You set no thresholds.
$ sigiro anomalies
SERVICE SIGNAL BASELINE NOW SHIFT INCIDENT
checkout error_rate 0.4% 19.2% +48σ inc_4a1c
checkout latency_p95 180ms 30.0s +166× inc_4a1c
2 shifts · 1 incident · since 18:35
$ sigiro investigate checkout
suspect deploy 9f2c1ab, landed 18:33
failing POST /api/orders
failure mode timeout 246 · server_error 6
errors_total 1284
drill_down_sql SELECT trace_id, duration, status_message
FROM sigiro_spans WHERE service_name = 'checkout' …
$ claude "checkout times out since 9f2c1ab"
read src/orders/upstream.ts
edit src/orders/upstream.ts +4 −1
test 42 passed
push fix: bound the orders upstream call at 5s
$ sigiro anomalies --service checkout
no open shifts
error_rate 19.2% → 0.5% recovered 19:07
latency_p95 30.0s → 210ms recovered 19:07
inc_4a1c closed · 34 min open
$ cat playbooks/checkout-upstream-timeout.md
## checkout · upstream timeout
detected error_rate +48σ, latency_p95 +166×
cause unbounded upstream call, shipped in 9f2c1ab
fix 5s deadline on the orders client
watch the same shape on any service calling ordershow you use it
Four steps. You connect, ask, correlate, and prove.
You send OpenTelemetry to sigiro. You ask one question. Each step below is one shell session.
$ curl -fsSL https://sigiro.com/install | sh
installed ~/.local/bin/sigiro
$ sigiro serve &
[1] 41802
listening on 4317, 4318, 9999
$ export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
$ export OTEL_SERVICE_NAME=checkout
$ npm start &
[1] 41823
checkout listening on :3000
$ sigiro status
ready · OTLP 4317 and 4318 · service checkout · 18,402 spans in 5 min
$
sigiro uses standard OTLP on the standard ports.
$ curl -fsSL https://sigiro.com/install | sh
installed ~/.local/bin/sigiro
$ sigiro serve &
[1] 41802
listening on 4317, 4318, 9999
$ export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318
$ export OTEL_SERVICE_NAME=checkout
$ npm start &
[1] 41823
checkout listening on :3000
$ sigiro status
ready · OTLP 4317 and 4318 · service checkout · 18,402 spans in 5 min
$ curl -sX POST localhost:9999/v1/investigate -d '{"service":"checkout"}'
{
"summary": "two signals moved together on checkout at 18:35",
"suspect": "deploy 9f2c1ab, landed 18:33",
"failing": "POST /api/orders",
"how": { "timeout": 246, "server_error": 6 },
"errors_total": 1284,
"query": "SELECT * FROM spans WHERE service = 'checkout' AND ..."
}
$ cat models.sql
SELECT model, count(*) AS calls, max(duration) AS slowest
FROM spans JOIN logs USING (trace_id)
WHERE service = 'checkout' AND status = 'error'
GROUP BY model ORDER BY slowest DESC
$ sigiro query --sql-file models.sql
MODEL CALLS SLOWEST
gpt-5.2-mini 246 30.0s
claude-haiku-4.6 31 2.1s
$ curl -s localhost:9999/v1/investigate -d '{"service":"checkout"}' > answer.json
$ jq .operation_summaries[0] answer.json
{
"operation": "POST /api/orders",
"errors": 246,
"error_rate": 0.19,
"drill_down_sql": "SELECT trace_id, duration, status_message FROM …"
}
$ jq -r .operation_summaries[0].drill_down_sql answer.json > drill.sql
$ sigiro query --sql-file drill.sql
TRACE_ID DURATION STATUS_MESSAGE
9f2c1ab4e77d 30012 context deadline exceeded
3b81fe0a2c56 30004 context deadline exceeded
c40d9e73aa18 29997 context deadline exceededDiscover. Your agent reads the API description without help.
One public document describes all of the endpoints.
[
"/v1/anomalies",
"/v1/investigate",
"/v1/query",
"/v1/services",
"/v1/traces/{trace_id}"
]what you get
No migration. sigiro connects to the tools you use.
Send telemetry from
Run it on
Read by
- Proof with each result
- Each result contains the query that made it.
- Nothing to maintain
- You set no thresholds and no rules. sigiro uses the history of each service.
- Installation in five minutes
- One command and two environment variables. You change no code.
- Free when you install it
- No fees for hosts, seats or data. Talk to us if you want us to run it for you.
- Your data stays with you
- You install sigiro on your servers. sigiro sends no data to us.
- sigiro monitors sigiro
- sigiro sends its telemetry to sigiro. This is how we find our own failures.