.claude/skills/observability/SKILL.md
Practical observability guide for this workspace. Includes where traces, logs, and metrics are persisted in SQLite and quick query patterns for debugging. Use when investigating runtime behavior, incidents, or telemetry quality.
npx skillsauth add cedricziel/assistant observabilityInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when you need to diagnose behavior via telemetry in this repository.
Traces: distributed_traces
span_id, trace_id, parent_span_id, name,
service_name, start_time, end_time, duration_ms, attributestool_name, tool_status, tool_observation,
tool_error, conversation_id, turnconversation_id is intentionally not a foreign key to
conversations (telemetry must remain standalone)Logs: logs
id, timestamp, severity_number, severity_text, body,
service_name, target, attributestrace_id, span_idMetrics: metric_points (with resources and metric_scopes)
metric_points stores datapoints for counters, gauges, histogramsmetric_name, metric_kind, value, count, sum, min,
max, recorded_at, attributes, plus denormalized
model/provider/operation/skill/interface/agent_idresources stores deduplicated resource attributes via fingerprintmetric_scopes stores instrumentation scope (name, version)SELECT start_time, service_name, tool_name, tool_status, tool_error, trace_id, span_id
FROM distributed_traces
WHERE tool_status = 'error'
ORDER BY start_time DESC
LIMIT 50;
SELECT timestamp, severity_text, target, body
FROM logs
WHERE trace_id = ?
ORDER BY timestamp ASC;
SELECT recorded_at, metric_kind, value, count, sum, model, provider, operation
FROM metric_points
WHERE metric_name = ?
ORDER BY recorded_at DESC
LIMIT 200;
SELECT mp.recorded_at, mp.metric_name, mp.metric_kind, mp.value,
r.attributes AS resource_attrs, ms.name AS scope_name, ms.version AS scope_version
FROM metric_points mp
JOIN resources r ON r.id = mp.resource_id
JOIN metric_scopes ms ON ms.id = mp.scope_id
WHERE mp.recorded_at >= datetime('now', '-1 day')
ORDER BY mp.recorded_at DESC
LIMIT 200;
SELECT t.start_time, t.name AS span_name, t.tool_name, t.tool_status,
l.timestamp, l.severity_text, l.body
FROM distributed_traces t
LEFT JOIN logs l ON l.trace_id = t.trace_id AND (l.span_id = t.span_id OR l.span_id IS NULL)
WHERE t.trace_id = ?
ORDER BY l.timestamp ASC;
start_time, timestamp,
recorded_at, trace_id, metric_name, service_name).attributes; use denormalized columns
for dashboards and fast predicates.trace_id as the primary pivot when moving between spans and logs.value (scalar) and histogram fields
(count/sum/bounds/bucket_counts) before concluding behavior.u64 metrics are currently skipped by the SQLite metrics exporter; if you
need those series in SQLite dashboards, emit compatible numeric types
(i64/f64) or add u64 handling in the exporter.tools
Enforces OpenAPI spec discipline when working on REST API endpoints in this project. Triggers whenever adding, modifying, or removing HTTP routes, request/response types, or API handlers in the Rust web-ui crate (`crates/web-ui`). Reminds the agent to (1) update the committed `openapi.json` spec, (2) run `make dump-openapi` to re-export the spec from the running server, and (3) run `make generate-flutter-client` to regenerate the Dart/dio client in `app/packages/assistant_api/`. Also applies when changing route parameters, status codes, or authentication on existing endpoints.
tools
Browser automation via @playwright/mcp (Microsoft). Use this when the user wants to navigate websites, fill forms, take screenshots, scrape web content, test web apps, or run any multi-step browser workflow. Requires no display (headless mode supported).
testing
A minimal example WASM skill that returns a greeting. Use to verify that the WASM execution tier is working correctly.
development
Run coding agents (Claude Code, Codex, OpenCode, or others) as background processes for programmatic control. Use when you need non-blocking execution, parallel agents, PR reviews, or long-running coding tasks. Prefer this over direct bash for any task that takes more than ~20 seconds.