.claude/skills/rounds-explore/SKILL.md
Exploratory querying of telemetry data — search logs by keyword/metadata, search spans by metadata, and build full transaction trees from trace IDs using the rounds adapter interfaces
npx skillsauth add tinkermonkey/rounds rounds-exploreInstall 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.
Explore OTEL data held in the configured telemetry backend (SigNoz by default) using the rounds adapter interfaces. No LLM budget is consumed — these are direct queries.
/rounds-explore [optional natural-language description of what to look for]
If $ARGUMENTS is provided, use it to guide which queries to run first (e.g. "look for
database timeout errors in the last 2 hours" or "show me what the checkout service has
been doing"). If no arguments are given, start with a broad recent-activity scan.
All three commands run via python -m rounds.main cli-run <command> '<json>' from
/workspace/rounds.
cd /workspace/rounds && python -m rounds.main cli-run search-logs '{
"query": "timeout",
"since_minutes": 120,
"services": ["checkout-service"],
"limit": 50
}'
Parameters:
query (string, default "") — keyword to match in log bodies; empty string returns all logssince_minutes (int, default 60) — lookback window from nowuntil_minutes (int, optional) — upper bound in minutes ago (creates a closed time window)services (list of strings, optional) — filter by service namelimit (int, default 50) — max resultsResponse shape:
{
"status": "success",
"operation": "search-logs",
"query": "timeout",
"count": 3,
"logs": [
{
"timestamp": "2024-01-15T10:30:00+00:00",
"severity": "ERROR",
"body": "Connection timeout after 30s",
"trace_id": "abc123...",
"span_id": "def456...",
"attributes": { "service.name": "checkout-service", "http.status_code": "504" }
}
]
}
Log exploration patterns:
Search for a specific error keyword:
python -m rounds.main cli-run search-logs '{"query": "NullPointerException", "since_minutes": 60}'
Search for database-related logs across all services:
python -m rounds.main cli-run search-logs '{"query": "database", "since_minutes": 240, "limit": 100}'
Look at all recent logs from one service (no keyword filter):
python -m rounds.main cli-run search-logs '{"query": "", "since_minutes": 30, "services": ["api-gateway"], "limit": 100}'
Narrow a time window (between 2 and 1 hours ago):
python -m rounds.main cli-run search-logs '{"query": "error", "since_minutes": 120, "until_minutes": 60}'
cd /workspace/rounds && python -m rounds.main cli-run search-spans '{
"since_minutes": 60,
"services": ["payment-service"],
"has_error": true,
"limit": 50
}'
Parameters:
since_minutes (int, default 60) — lookback window from nowuntil_minutes (int, optional) — upper bound in minutes ago from nowservices (list of strings, optional) — filter by service nameoperation (string, optional) — operation name substring filter (e.g. "POST /checkout")has_error (bool, optional) — true for error spans only, false for healthy spans, omit for alllimit (int, default 50) — max resultsResponse shape:
{
"status": "success",
"operation": "search-spans",
"count": 2,
"spans": [
{
"trace_id": "abc123def456...",
"span_id": "789xyz...",
"service": "payment-service",
"operation": "POST /charge",
"duration_ms": 1234.5,
"has_error": true,
"timestamp": "2024-01-15T10:30:00+00:00",
"attributes": { "http.status_code": "500", "rpc.method": "Charge" }
}
]
}
Span exploration patterns:
Find all error spans in the last hour:
python -m rounds.main cli-run search-spans '{"since_minutes": 60, "has_error": true, "limit": 100}'
Find slow operations matching a name pattern:
python -m rounds.main cli-run search-spans '{"since_minutes": 30, "operation": "checkout", "limit": 50}'
Survey recent activity in a service (all spans, no error filter):
python -m rounds.main cli-run search-spans '{"since_minutes": 15, "services": ["inventory-service"], "limit": 100}'
The trace_id values in results can be passed directly to get-trace-tree or
investigate-trace to drill deeper.
cd /workspace/rounds && python -m rounds.main cli-run get-trace-tree '{
"trace_id": "abc123def456789012345678901234ab"
}'
Parameters:
trace_id (string, required) — 32-character hex OpenTelemetry trace IDResponse shape:
{
"status": "success",
"operation": "get-trace-tree",
"trace_id": "abc123...",
"error_span_count": 1,
"tree": {
"span_id": "root-span-id",
"service": "api-gateway",
"operation": "POST /checkout",
"duration_ms": 1500.0,
"status": "error",
"attributes": { "http.method": "POST", "http.url": "/checkout" },
"events": [],
"children": [
{
"span_id": "child-span-id",
"service": "payment-service",
"operation": "ProcessPayment",
"duration_ms": 800.0,
"status": "ok",
"attributes": {},
"events": [],
"children": []
}
]
}
}
Tree exploration patterns:
Get the full transaction tree for a trace ID found via search-spans:
python -m rounds.main cli-run get-trace-tree '{"trace_id": "abc123def456789012345678901234ab"}'
The tree is returned as a nested structure. Walk it to:
"status": "error") and their positions in the treeAfter reviewing the tree, follow up with get-correlated-logs or trigger LLM analysis:
# LLM-powered code-flow explanation (uses diagnosis budget):
python -m rounds.main cli-run investigate-trace '{"trace_id": "abc123..."}'
Broad scan — find recent error spans:
python -m rounds.main cli-run search-spans '{"since_minutes": 60, "has_error": true, "limit": 50}'
Narrow by service or operation — pick an interesting service from step 1:
python -m rounds.main cli-run search-spans '{"since_minutes": 60, "services": ["payment-service"], "has_error": true}'
Look for correlated log messages — search logs around the same time:
python -m rounds.main cli-run search-logs '{"query": "payment", "since_minutes": 60, "services": ["payment-service"]}'
Build the full transaction tree — take a trace_id from step 2:
python -m rounds.main cli-run get-trace-tree '{"trace_id": "<trace_id_from_step_2>"}'
Correlate logs with that trace — use the existing correlated-logs path:
python -m rounds.main cli-run search-logs '{"query": "", "since_minutes": 10, "services": ["payment-service"]}'
Trigger LLM analysis — once you have a trace ID worth diagnosing:
python -m rounds.main cli-run investigate-trace '{"trace_id": "<trace_id>"}'
ManagementService → TelemetryPort (SigNoz adapter by default)search_logs uses SigNoz /api/v3/query_range with dataSource=logs and a body contains filtersearch_spans uses /api/v3/query_range with dataSource=traces and flexible AND-combined filtersget_trace_tree calls GET /api/v1/traces/{id} and builds the full SpanNode hierarchyrounds/adapters/telemetry/signoz.py — search_logs, search_spans methodsrounds/adapters/cli/commands.py — search_logs, search_spans, get_trace_tree handlerstesting
Run pytest with coverage and display results
devops
Mark a rounds error signature as resolved after a fix has been deployed
data-ai
Re-run LLM diagnosis for an existing rounds error signature
development
--- name: rounds-patterns description: Show common coding patterns: frozen dataclasses, async ports, immutable collections user_invocable: true args: generated: true generation_timestamp: 2026-02-13T22:09:52.359861Z generation_version: "2.0" source_project: rounds source_codebase_hash: a44338f108beaf54 --- # Rounds Coding Patterns Quick-reference skill for **rounds** project coding patterns and conventions. ## Usage ```bash /rounds-patterns ``` ## Purpose Displays the core coding patterns