Skip to main content
GitHub

Error Taxonomy

10 modules, 31 categories, 154 error codes.

Risicare classifies agent errors using a hierarchical taxonomy designed for AI systems. The taxonomy covers both single-agent failures (perception, reasoning, tool use, memory, output) and multi-agent failures (coordination, communication, orchestration, consensus, resources).

Taxonomy Structure

Module (10)
└── Category (31)
    └── Error Code (154)
        └── Format: MODULE.CATEGORY.CODE

Modules Overview

Agent Error Taxonomy showing 10 modules organized by Cognitive, Execution, Social, and Infrastructure categories

Quick Reference

ModuleCategoriesCodesFocus
PERCEPTIONINPUT, PARSING, CONTEXT15Input processing, validation, context
REASONINGLOGIC, HALLUCINATION, PLANNING, DECISION20Logic, inference, planning, decisions
TOOLINVOCATION, EXECUTION, RESULT15Tool calling, execution, results
MEMORYSTATE, RETRIEVAL, CONTEXT_WINDOW14State management, retrieval, context window
OUTPUTFORMAT, QUALITY, SAFETY15Formatting, quality, safety
COORDINATIONWORKFLOW, HANDOFF, SYNCHRONIZATION15Workflow, handoffs, synchronization
COMMUNICATIONDELIVERY, CONTENT, ROUTING15Message delivery, content, routing
ORCHESTRATIONLIFECYCLE, SCALING, DELEGATION15Lifecycle, scaling, delegation
CONSENSUSAGREEMENT, CONFLICT, VOTING15Agreement, conflict resolution, voting
RESOURCESACCESS, CONTENTION, QUOTA15Access control, contention, quotas

Error Code Format

TOOL.EXECUTION.TIMEOUT
  │      │        │
  │      │        └── Code (specific error)
  │      └── Category (error type)
  └── Module (system area)

Severity Levels

Each error code has a severity from 1 to 5:

LevelNameDescription
5CriticalSystem failure, data loss, or safety risk
4HighTask failure requiring intervention
3MediumDegraded performance or partial failure
2LowRecoverable issue with minimal impact
1InfoInformational, no action needed

Using Error Codes

In the API

Two list endpoints filter by error code, and the filter is applied:

curl "https://app.risicare.ai/api/v1/diagnoses?error_code=TOOL.EXECUTION.TIMEOUT" \
  -H "Authorization: Bearer rsk-..."
 
curl "https://app.risicare.ai/api/v1/fixes?error_code=TOOL.EXECUTION.TIMEOUT" \
  -H "Authorization: Bearer rsk-..."

Exact matches only — there is no wildcard syntax, so TOOL.* matches nothing.

Traces cannot be filtered by error code

GET /api/v1/traces accepts an error_code parameter and then ignores it — the query builder never applies the condition. You get a full, unfiltered page of traces and no error, so a filter that appears to work is actually doing nothing. Filter diagnoses instead, and join back to traces on trace_id.

In Dashboards

The traces view filters on time window, errored-or-completed status, environment, and a free-text search box. That search matches the root span name and a trace-ID prefix only — typing an error code into it will not find traces carrying that code. There is no error-code filter control and no field:value search syntax.

In Alerts

Alert rules are metric-and-threshold, not per-error-code expressions. A rule names one metric, an operator, and a numeric threshold:

Supported metricMeaning
error_rateErrored share of traces in the window
agent_failure_rateErrored share of agent spans
latency_p50 / latency_p95 / latency_p99Duration percentiles across the window
trace_volumeTrace count
daily_cost_usdCost in USD
total_tokensToken count

Operators are gt, lt, eq, gte, lte, ne. A rule naming any metric outside this list is skipped by the alert worker and logged as unsupported. You cannot alert on a specific error code todayerror_rate counts all errors together.

In Fixes

Each fix targets exactly one error code, in the singular field target_error_code:

{
  "fix_type": "retry",
  "target_error_code": "TOOL.EXECUTION.TIMEOUT",
  "config": { "max_retries": 3, "initial_delay_ms": 1000, "exponential_base": 2.0 }
}

Next Steps

Select a module to see all its error codes: