zaxy: Skill for Claude Code

.claude/skills/ci-triage/SKILL.md

ci-triage is a skill for Claude Code from syndicalt/zaxy. It costs 79 tokens per session (1,400 once invoked), scanned A, original, MIT.

A set of instructions for diagnosing and fixing failed continuous-integration (CI) checks in the zaxy project. CI automatically builds and tests code, including several Python versions, an integration test with Neo4j, and a web build.

In plain words
What is it for?
Use it when a pull request check fails, CI is red, the project needs to return to a passing state, or a coverage threshold has failed.
Why use it?
It helps distinguish the real failure from cancelled follow-up jobs and from misleading local results. It also prevents checking the wrong commit or misreading pull-request status.

Skill for Claude Code

Written for Claude Code: installed under .claude/.

This is syndicalt/zaxy's own configuration. It tells Claude Code how to work on zaxy itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything zaxy configures →

Reuse

Borrowing it

Nothing to install: this file belongs to syndicalt/zaxy. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/syndicalt/zaxy/master/.claude/skills/ci-triage/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/syndicalt/zaxy

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for ci-triage

README.md
[![agentmods](https://agentmods.dev/badge/skills/syndicalt/zaxy/ci-triage/github.svg)](https://agentmods.dev/skills/syndicalt/zaxy/ci-triage)
Your own site
<a href="https://agentmods.dev/skills/syndicalt/zaxy/ci-triage"><img src="https://agentmods.dev/badge/skills/syndicalt/zaxy/ci-triage/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for ci-triage

Your own site · 80×15
<a href="https://agentmods.dev/skills/syndicalt/zaxy/ci-triage"><img src="https://agentmods.dev/badge/skills/syndicalt/zaxy/ci-triage.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 79 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,400 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00079 $0.01400
Opus 5 $0.00039 $0.00700
Sonnet 5 $0.00016 $0.00280
Haiku 4.5 $0.00008 $0.00140

Measured 8d ago against content hash da4eacf2a9b8, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-08, from the pricing page.

Security

Grade A, and why

ci-triage scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/ci-triage/SKILL.md · 103 lines

How it starts

The opening of the file, as written. The whole thing — 103 lines — stays where its author put it; the contents beside it link to each section on GitHub.

CI triage for zaxy

CI jobs: lint (ruff+mypy), test (3.11/3.12/3.13) (pytest + coverage ratchet on 3.13 only), integration (Neo4j docker), web (astro build + link gate), package. The authority is CI, not local runs — this machine has known quirks.

1. Identify what actually failed (per-SHA, not "latest")

gh run list --branch <branch> --workflow CI --limit 3 --json databaseId,headSha,conclusion,status
git rev-parse HEAD   # match headSha — a green run for an older SHA proves nothing
gh run view <RUN_ID> --json jobs -q '.jobs[] | "\(.conclusion)\t\(.name)"'

Never pipe gh pr checks through awk/cut column hacks to decide a merge. Job names contain spaces (test (3.13)), so column extraction shows name tokens where you expect statuses — a red matrix once read as green this way and got merged (the 2026-07-06 doctor-map incident). Before any merge, read the FULL untruncated table and require every row to literally say pass: gh pr checks <N> with no pipeline.

Beware fail-fast collateral: matrix jobs showing cancelled were killed by a sibling's failure — they are not independent failures. Find the job that says failure, fix it, and the cancelled ones usually follow.

2. Fetch failure logs (the incantation that works)

gh run view --log-failed is unreliable for grep. Download the job log raw:

jid=$(gh run view <RUN_ID> --json jobs -q '.jobs[] | select(.name=="test (3.13)") | .databaseId')
gh api "repos/<owner>/<repo>/actions/jobs/$jid/logs" > /tmp/job.txt
grep -aE 'FAILED tests/|short test summary|[0-9]+ failed|Coverage ratchet' /tmp/job.txt | tail -30

(-a: logs contain binary escape bytes. If the tail only shows "operation was canceled", it's collateral — go find the real failing job.)

3. Reproduce locally — with the local quirks

ruff check src tests zaxy_benchmarks
mypy src zaxy_benchmarks
pytest -m "not integration" --no-cov -q -p no:randomly \
  --ignore=tests/test_doctor.py --benchmark-disable
  • tests/test_doctor.py hangs/segfaults locally (ladybug native lib); it is fine in CI. Always exclude it locally; never "fix" it locally.
  • --benchmark-disable or the output drowns in perf tables.
  • A native segfault mid-suite is an environment/store problem, not the code — see the store-doctor skill before chasing ghosts.

Read the full file on GitHub · 103 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 8d ago First seen · 103 lines · 79 tokens per session scan A da4eacf2a9b8

Subscribe to this mod's changes

ci-triage is a skill published in the GitHub repository syndicalt/zaxy (17 stars, last pushed 29d ago), licensed MIT. It adds 79 tokens to every session and 1,400 once invoked, about $0.0004 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.