Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyze gh-aw OpenTelemetry traces from JSONL mirrors or OTLP backends.
.claude/skills/github-otel-queries/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 35% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 99% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 100% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 106% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 74% | 0% |
Use this skill to inspect gh-aw OpenTelemetry/OTLP data and answer telemetry questions without re-deriving trace fields, backend filters, and diagnostics.
Use this skill for requests such as:
Do not use this skill for instrumentation-only tasks that do not require reading telemetry. For pure emit-side work, start with the existing OTLP code and docs.
Reduce a broad telemetry task to one tight loop:
Prefer sources in this order unless the user says otherwise:
/tmp/gh-aw/otel.jsonl for gh-aw spans.github.run_id resource attribute.Use the cheapest source that can disconfirm the current hypothesis.
Always answer these questions in order before expanding scope.
Look for:
traceIdnameservice.namegithub.repositorygithub.run_idIf these are missing, the problem is likely export, filtering, or trace propagation rather than optimization.
Check whether spans that should belong together share the same:
If setup, agent, and conclusion spans are not connected, fix correlation before interpreting latency.
Bucket spans into phases:
Prefer wall-clock duration and count by span name prefix before reading code.
Minimum diagnostic attributes to verify:
service.versiondeployment.environmentgithub.repositorygithub.run_idgithub.event_namegithub.workflow_refgh-aw.workflowgh-aw.engineIf the slow or failing span lacks the attribute needed to group, filter, or explain it, the right next step may be an instrumentation change rather than a runtime change.
Check whether the pattern repeats across:
Do not propose broad architectural changes for a single outlier trace.
Use these backend-agnostic query shapes first. Translate them into the native query language or MCP tool calls for the active backend.
Filter for the last 24 hours and service.name = gh-aw.
Return:
github.run_idgithub.workflow_refGroup by span name and sort by:
Use this to find whether the bottleneck is setup, agent, tool, or conclusion work.
Filter for error status and group by:
Use this to separate exporter failures from workflow logic failures.
Sample recent spans and explicitly record whether each span includes:
service.versiongithub.repositorygithub.run_idgithub.event_namedeployment.environmentIf a backend supports has or exists filters, use them. Otherwise inspect a small sample manually.
Pick one trace ID and inspect the full trace. Record:
For agent-heavy traces, group by:
Then compare count, total duration, and p95 duration.
When telemetry is available as JSONL, prefer shell plus jq over broad file reading.
bashjq -c '.resourceSpans[]?.scopeSpans[]?.spans[]? | {traceId, name, startTimeUnixNano, endTimeUnixNano, status, attributes}' /tmp/gh-aw/otel.jsonl
bashjq -c '.resourceSpans[]?.scopeSpans[]?.spans[]? | select(.name | startswith("gh-aw."))' /tmp/gh-aw/otel.jsonl
bashjq -r '.resourceSpans[]?.scopeSpans[]?.spans[]? as $span | $span.attributes[]? | select(.key == "github.run_id") | .value.stringValue' /tmp/gh-aw/otel.jsonl
bashjq -c '.resourceSpans[]?.scopeSpans[]?.spans[]? | select(any(.attributes[]?; .key == "github.run_id") | not) | {traceId, name}' /tmp/gh-aw/otel.jsonl
bashjq -c '.resourceSpans[]?.scopeSpans[]?.spans[]? | select(.traceId == $traceId)' --arg traceId "TRACE_ID_HERE" /tmp/gh-aw/otel.jsonl
Adapt the same six common queries to the active backend instead of inventing new analysis questions.
service.name="gh-aw" and a short time window.service.name.After answering the telemetry question, choose the next step based on the evidence.
Prioritize in this order:
Prefer the smallest change that unlocks the most operational clarity.
When using this skill, produce findings in this shape:
Start with these files when telemetry indicates an instrumentation or correlation problem:
actions/setup/js/send_otlp_span.cjsactions/setup/js/action_setup_otlp.cjsactions/setup/js/action_conclusion_otlp.cjsactions/setup/js/otlp.cjsactions/setup/js/generate_observability_summary.cjsactions/setup/js/aw_context.cjspkg/workflow/observability_otlp.godocs/src/content/docs/guides/custom-otlp-attributes.mdAvoid these common mistakes:
After using this skill, the agent should be able to move from raw OTel data to a grounded answer without re-deriving the telemetry playbook.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | pass→fail | 19,531 | 5,705 | -71% | 1 | 1 | 0% | 3,392 | 2,520 | -26% | 0 | 0 | — |
case-02 | fail→fail | 15,285 | 6,503 | -57% | 1 | 1 | 0% | 2,789 | 2,560 | -8% | 0 | 0 | — |
case-03 | pass→pass | 8,876 | 6,727 | -24% | 1 | 1 | 0% | 1,546 | 3,412 | +121% | 0 | 0 | — |
case-04 | pass→pass | 7,525 | 8,364 | +11% | 1 | 1 | 0% | 1,257 | 3,562 | +183% | 0 | 0 | — |
case-05 | pass→pass | 12,560 | 6,577 | -48% | 1 | 1 | 0% | 2,197 | 3,479 | +58% | 0 | 0 | — |
case-06 | fail→pass | 17,436 | 8,185 | -53% | 1 | 1 | 0% | 2,678 | 3,605 | +35% | 0 | 0 | — |
case-07 | fail→pass | 11,900 | 9,920 | -17% | 1 | 1 | 0% | 1,945 | 3,862 | +99% | 0 | 0 | — |
case-08 | fail→pass | 12,868 | 9,689 | -25% | 1 | 1 | 0% | 1,873 | 3,741 | +100% | 0 | 0 | — |
case-09 | fail→fail | 16,480 | 7,299 | -56% | 1 | 1 | 0% | 2,792 | 2,568 | -8% | 0 | 0 | — |
case-10 | pass→pass | 14,844 | 9,852 | -34% | 1 | 1 | 0% | 2,630 | 4,059 | +54% | 0 | 0 | — |
case-11 | pass→pass | 9,789 | 7,850 | -20% | 1 | 1 | 0% | 1,788 | 3,657 | +105% | 0 | 0 | — |
case-12 | pass→pass | 14,963 | 10,989 | -27% | 1 | 1 | 0% | 2,267 | 3,923 | +73% | 0 | 0 | — |
case-13 | pass→pass | 14,615 | 8,001 | -45% | 1 | 1 | 0% | 2,265 | 3,559 | +57% | 0 | 0 | — |
case-14 | fail→pass | 10,846 | 8,060 | -26% | 1 | 1 | 0% | 1,669 | 3,442 | +106% | 0 | 0 | — |
case-15 | fail→pass | 13,530 | 11,105 | -18% | 1 | 1 | 0% | 2,378 | 4,144 | +74% | 0 | 0 | — |
case-16 | fail→pass | 18,086 | 7,074 | -61% | 1 | 1 | 0% | 1,365 | 3,344 | +145% | 0 | 0 | — |
case-17 | fail→fail | 17,937 | 6,443 | -64% | 1 | 1 | 0% | 3,015 | 2,488 | -17% | 0 | 0 | — |
case-18 | pass→pass | 12,718 | 9,551 | -25% | 1 | 1 | 0% | 1,977 | 3,809 | +93% | 0 | 0 | — |
case-19 | fail→pass | 17,089 | 11,378 | -33% | 1 | 1 | 0% | 2,614 | 4,196 | +61% | 0 | 0 | — |
case-20 | pass→pass | 12,765 | 4,879 | -62% | 1 | 1 | 0% | 2,104 | 2,977 | +41% | 0 | 0 | — |
case-21 | fail→fail | 18,441 | 4,645 | -75% | 1 | 1 | 0% | 2,722 | 2,405 | -12% | 0 | 0 | — |
case-22 | pass→pass | 10,206 | 5,475 | -46% | 1 | 1 | 0% | 1,735 | 3,191 | +84% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 17 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 17 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/4/2026 | +23% |
Other measured skills in the registry, with their headline benchmark lift.