Skip to content
sigiro[.]com

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.

Free when you install it. sigiro sends no data to us.

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.

  1. Detect
  2. Diagnose
  3. Fix
  4. Verify
  5. Learn
sigiroDetect1 of 5
$ 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 orders

how 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.

  1. Connect
  2. Ask
  3. Correlate
  4. Prove
Connect1 of 4
$ docker run -d -p 4317:4317 -p 4318:4318 -p 9999:9999 ghcr.io/sigiroai/sigiro
a3f1c9e2d7b4
$ 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.

$ docker run -d -p 4317:4317 -p 4318:4318 -p 9999:9999 ghcr.io/sigiroai/sigiro
a3f1c9e2d7b4

$ 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 exceeded

01

Discover. Your agent reads the API description without help.

One public document describes all of the endpoints.

GET /openapi.json · public, no key
[
  "/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

  • OpenTelemetry
  • Node.js
  • Python
  • Go
  • Java
  • .NET
  • Ruby
  • Rust
  • Claude Code
  • Codex
  • Vercel AI SDK
  • LangChain
  • Ollama

Run it on

  • Docker
  • Kubernetes
  • Fly.io
  • Railway
  • Render
  • Cloudflare

Read by

  • Claude Code
  • Cursor
  • Codex
  • Anything that speaks SQL
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 container and two environment variables. You change no code.
Free when you install it
No fees for hosts, seats or data. The hosted service costs approximately $14 each month.
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.

faq

Questions.