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
PERCEPTION
Input processing and understanding failures
REASONING
Cognitive and logic failures
TOOL
Tool and action execution failures
MEMORY
State and context management failures
OUTPUT
Response generation failures
COORDINATION
Multi-agent workflow coordination failures
COMMUNICATION
Inter-agent messaging failures
ORCHESTRATION
Agent lifecycle and management failures
CONSENSUS
Agreement and conflict resolution failures
RESOURCES
Shared resource management failures
Quick Reference
| Module | Categories | Codes | Focus |
|---|---|---|---|
| PERCEPTION | INPUT, PARSING, CONTEXT | 15 | Input processing, validation, context |
| REASONING | LOGIC, HALLUCINATION, PLANNING, DECISION | 20 | Logic, inference, planning, decisions |
| TOOL | INVOCATION, EXECUTION, RESULT | 15 | Tool calling, execution, results |
| MEMORY | STATE, RETRIEVAL, CONTEXT_WINDOW | 14 | State management, retrieval, context window |
| OUTPUT | FORMAT, QUALITY, SAFETY | 15 | Formatting, quality, safety |
| COORDINATION | WORKFLOW, HANDOFF, SYNCHRONIZATION | 15 | Workflow, handoffs, synchronization |
| COMMUNICATION | DELIVERY, CONTENT, ROUTING | 15 | Message delivery, content, routing |
| ORCHESTRATION | LIFECYCLE, SCALING, DELEGATION | 15 | Lifecycle, scaling, delegation |
| CONSENSUS | AGREEMENT, CONFLICT, VOTING | 15 | Agreement, conflict resolution, voting |
| RESOURCES | ACCESS, CONTENTION, QUOTA | 15 | Access 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:
| Level | Name | Description |
|---|---|---|
| 5 | Critical | System failure, data loss, or safety risk |
| 4 | High | Task failure requiring intervention |
| 3 | Medium | Degraded performance or partial failure |
| 2 | Low | Recoverable issue with minimal impact |
| 1 | Info | Informational, 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 metric | Meaning |
|---|---|
error_rate | Errored share of traces in the window |
agent_failure_rate | Errored share of agent spans |
latency_p50 / latency_p95 / latency_p99 | Duration percentiles across the window |
trace_volume | Trace count |
daily_cost_usd | Cost in USD |
total_tokens | Token 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 today — error_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: