Agent skill

CI Triage

by andymai in andymai/brepjs

This skill should be used when a brepjs GitHub Actions job is red or behaving oddly on github.com (a remote CI run, not a local pre-commit/pre-push hook) — "CI failed", "ci-pass is failing", "npm ci…

Apache-2.0Auto-check passedTesting & QA

Install CI Triage

skills CLI
$ npx skills add andymai/brepjs --skill ci-triage -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install andymai/brepjs ci-triage --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ci-triage .claude/skills/ci-triage && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ci-triage
GitHub stars
115
Token cost
~3.8k tokens
SKILL.md length
1,648 words
Files
1
Skills in repo
21
Repo updated
First seen
Licence
Apache-2.0

At a glance

This skill should be used when a brepjs GitHub Actions job is red or behaving oddly on github.com (a remote CI run, not a local pre-commit/pre-push hook) — "CI failed", "ci-pass is failing", "npm ci…

  • Works in 2 steps: release-please re-pin: the… → 0.x caret exclusion: a ^0. range…
  • Tasks that involve Dependency management
  • SKILL.md covers Job map — what runs, when, Symptom → cause → fix, Looks like a failure but isn't and Blind spots — things CI never…, plus 2 more sections
  • Calls npm, gh and cargo

What it does

CI Triage is an agent skill from andymai/brepjs. This skill should be used when a brepjs GitHub Actions job is red or behaving oddly on github.com (a remote CI run, not a local pre-commit/pre-push hook) — "CI failed", "ci-pass is failing", "npm ci failed with EUSAGE/ETARGET in CI", "test shard timed out", "function-lookup.md diff failed in the build job", "check:patterns fails in CI on code I didn't touch", "npm publish workflow failed", "docs deploy didn't run", "playground smoke is red", "OSV scan is red", "release PR won't auto-merge", or npm ci fails in a…

Its SKILL.md is about 3.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Testing & QA, covering Dependency management, Quality gates and CI/CD. It works with npm, Git, GitHub Actions and GitHub. The repository describes itself as: Web CAD library with exact B-Rep geometry. The licence is Apache-2.0.

When your agent uses it

  • Tasks that involve Dependency management
  • Tasks that involve Quality gates
  • Tasks that involve CI/CD

Example prompts

  • “CI failed”
  • “ci-pass is failing”
  • “npm ci failed with EUSAGE/ETARGET in CI”
  • “/ci-triage”

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. release-please re-pin: the node-workspace plugin repins a leaf's brepjs dep to a pending (unmerged) root release version. This is why leaf…
  2. 0.x caret exclusion: a ^0. range excludes the next 0.(x+1) minor, so an internal bump 404s any consumer still on the caret.

What it can do on your machine

Read from SKILL.md and the folder at commit 2907fb1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • npm
    • gh
    • cargo
    • tsc
    • git
    • prettier

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, gh and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

CI Triage loads about 3.8k tokens when it runs. Until then it costs about 183 tokens; SKILL.md has 1,648 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~183
When it runs · the whole SKILL.md, loaded when a task matches
~3.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from andymai/brepjs at commit 2907fb1, republished under its Apache-2.0 licence (© andymai). 1,648 words, ~3,843 tokens.

Download SKILL.mdSave it as .claude/skills/ci-triage/SKILL.md (or your agent's skills folder).
name
ci-triage
description
This skill should be used when a brepjs GitHub Actions job is red or behaving oddly on github.com (a remote CI run, not a local pre-commit/pre-push hook) — "CI failed", "ci-pass is failing", "npm ci failed with EUSAGE/ETARGET in CI", "test shard timed out", "function-lookup.md diff failed in the build job", "check:patterns fails in CI on code I didn't touch", "npm publish workflow failed", "docs deploy didn't run", "playground smoke is red", "OSV scan is red", "release PR won't auto-merge", or npm ci fails in a CI run after a Dependabot bump on a workspace "*" dependency. Maps each CI job's known failure modes to causes and fixes. For a hook blocking a local commit, use quality-gates or git-pr-workflow instead.

CI failure triage

Diagnose a red or stuck brepjs GitHub Actions run. Triage in two moves: first classify which workflow and job failed and on what event (PR vs push-to-main vs manual dispatch vs deployment); then match the symptom to the table below.

Most failure modes are documented in inline comments in the workflow files themselves — cite line refs (e.g. .github/workflows/ci.yml:244-250) rather than re-deriving. This skill is the index and the recovery recipes.

Job map — what runs, when

The single required PR check is ci-pass (ci.yml:431-459). It needs every gate job and fails if any result is failure or cancelled (a skipped result passes). Its needs-list: changes, typecheck, lint, quality, build, playground-build, packages-viewer, packages-verify, packages-sheetmetal, packages-bim, voxel-wasm-rust, test, size, benchmark. Deliberately not in the list: coverage.

The changes job (ci.yml:18-67) path-filters into three outputs — code, playground, voxel — that gate the rest. Branches named release-please--* skip the filter entirely (ci.yml:29-36): release PRs run no code jobs (they touch only CHANGELOG/version/manifest).

JobCommand(s)Event / gate
typechecknpm run typecheckPR+push, code
lintnpm run lint + format:checkPR+push, code
qualitycheck:boundaries + check:patterns + knipPR+push, code
buildnpm run build + docs:api + function-lookup staleness gatePR+push, code
playground-buildbuild root + brepjs-bim + brepjs-sheetmetal + apps/playground (mirrors Vercel)PR+push, playground
packages-viewer / -sheetmetal / -bimtypecheck+lint+test+build per workspace (root build first for -sheetmetal/-bim; viewer builds no root)PR+push, code
packages-verify (brepjs-cad)build root+viewer+cad, then eval, smoke, smoke:standalonePR+push, code
voxel-wasm-rustcargo test + cargo clippy -D warningsPR+push, voxel only
testtest:ci --shard=N/4, matrix [1,2,3,4]PR+push, code
coveragetest:full (maxWorkers=2, timeout 180s)push-only, continue-on-error
sizesize-limit-actionPR-only
benchmarkcompare vs main, 25% regression thresholdPR-only

Consequence: a PR failure can never come from coverage (push-only); a main-only failure can never come from size/benchmark (PR-only).

Concurrency: ci-${{ github.ref }}, cancel-in-progress on non-main refs only (ci.yml:10-12).

Symptom → cause → fix

Ordered roughly by frequency.

npm ci fails with EUSAGE in every job's setup step

Lock file out of sync with package.json ("lock file does not satisfy"). Classic trigger: a Dependabot group bump silently drops the two top-level @emnapi/* peer-dep entries (package-lock.json node_modules/@emnapi/core + node_modules/@emnapi/runtime, ~lines 1180-1201) that satisfy @napi-rs/wasm-runtime's peerDependencies (~lines 2285-2286). Fix: surgically restore the dropped entries — never regenerate the lockfile from scratch. Run --package-lock-only from main to reproduce the correct shape. See the git-pr-workflow and companion-packages skills for lockfile-surgery discipline.

npm ci fails with ETARGET / 404 on an internal package (in a CI run)

An internal workspace package is pinned to a version not yet on npm. Two causes:

  1. release-please re-pin: the node-workspace plugin repins a leaf's brepjs dep to a pending (unmerged) root release version. This is why leaf release PRs are held until root merges+publishes (see auto-merge below).
  2. 0.x caret exclusion: a ^0.<older> range excludes the next 0.(x+1) minor, so an internal bump 404s any consumer still on the caret.

Fix: use an open floor range, not a pin. Main already does this — packages/brepjs-cad/package.json:60 ("brepjs": ">=18.117.1") and packages/brepjs-voxel/package.json:24 ("brepjs-voxel-wasm": ">=0.2.0"). Full mechanics in the release-publishing skill.

Note: for internal workspace devDeps the "*" wildcard is intentional (e.g. brepjs-cad's "brepjs-viewer": "*", package.json:81) — pinning it to a concrete version is what repeatedly broke npm ci when the pin outran what was published. A Dependabot alert on such a "*" spec is a false positive: raise the floor (>=x.y.z) if it must be cleared, don't pin it or bump the lockfile.

build job fails on git diff --exit-code docs/function-lookup.md

A *Fns.ts change added/renamed an exported function but docs/function-lookup.md wasn't regenerated (the gate at ci.yml:112-117 runs docs:generate-lookup → prettier --write → diff; pre-commit only reminds, so it's easy to miss locally). Fix: regenerate + prettier-align + commit the file — full recipe in the adding-operations skill.

quality job fails check:patterns on code the PR didn't touch

An unbaselined pattern violation reached main and now fails the quality job on every open PR at once. Fix: land a tiny baseline-bump PR first, then rebase the others. Mechanism and baseline mechanics live in the quality-gates skill.

test shard times out or stalls

OCCT WASM linear memory grows monotonically across tests; a long run over-commits the 16 GB runner into swap and a fork stalls past the 90s per-test timeout (#1102, rationale at ci.yml:244-250). The 4-way shard exists precisely so each fork exits before accumulation hits that threshold. Do not "fix" by widening the timeout. Check whether one shard is genuinely slower (real leak / new heavy test) or just an infra blip — re-run the single shard. Coverage can't shard (vitest --merge-reports can't recombine v8 coverage here), which is why the coverage job runs single-runner with a raised timeout. Test-authoring details in the writing-tests skill.

packages-verify fails on smoke or smoke:standalone

smoke runs the built brepjs-cad CLI under plain node (catches bin/TS-load breaks that tsx/vitest hide in-repo). smoke:standalone packs the tarball into a clean project with no brepjs present (catches bundling / fallback-resolve breaks invisible in-repo). A green in-repo test with a red standalone smoke means a packaging or resolution regression, not a logic bug. See the companion-packages skill.

playground-build fails but the library builds fine

Type-resolution or bundler regression scoped to apps/playground (this job mirrors what Vercel runs). Historical example: a duplicate @types/three install broke tsc -b only inside the playground (#963, ci.yml:119-137). See the playground-examples skill.

npm publish failed

Publishes are OIDC-bound to the exact workflow filename — inlining npm publish elsewhere fails auth. Never re-run the failed push-event job; re-dispatch the same workflow. Recovery recipes:

  • Root brepjs: gh workflow run release-please.yml -f republish=true (input at release-please.yml:6-12; publish gate at :146-149).
  • A satellite (cad/bim/sheetmetal/viewer/opencascade): gh workflow run publish-<pkg>.yml -f dry_run=false --ref <release-tag> — dry_run defaults to true, and dispatch against the immutable tag, not main.

Full recipe set and the OIDC-binding rationale: the release-publishing skill.

prepack fails: "Too many files" or ".d.ts.map"

scripts/validate-pack.sh (root prepack hook, package.json:216) caps the packed tarball at MAX_FILES=600 and rejects any .d.ts.map sidecars (count must be 0). It fires during pack/publish, not PR CI, so an overflow first shows up as a red publish-brepjs after the release PR merges: the version is tagged and GitHub-released but missing from npm. rollupTypes: false emits one .d.ts per source module, so every new src/ file adds one packed file. Count with npm run build && npm pack --dry-run --ignore-scripts. If the growth is just new modules, raise MAX_FILES (ci: commit, no release) and then gh workflow run release-please.yml -f republish=true. Fix .d.ts.map by keeping declarationMap off in vite.config.ts.

Show full SKILL.md (606 more words)Show less
"Deploy API Docs" didn't run after a main merge

docs.yml triggers on workflow_run of CI completing on main with conclusion == 'success'. A red CI on main blocks the docs deploy. This is exactly why coverage is continue-on-error (ci.yml:260-266): an informational threshold dip must not flip CI's conclusion to failure and starve the docs gate. Emergency redeploy: gh workflow run docs.yml (workflow_dispatch bypasses the CI gate, main-only).

"Playground Smoke" is red

playground-smoke.yml runs on deployment_status from Vercel, loads the deployed playground headless, and requires the WASM kernel to reach Ready within 60s. A red here is a CSP / COEP / COOP / asset-path class regression that blocks engine init — not a build-class failure (the static build already passed).

"OSV Scan" is red

osv-scan.yml scans package-lock.json for known-vulnerable versions. It splits by event: scan-pr ("OSV Scan (report-only)") on pull requests never fails the merge (findings surface in the Security tab only), while scan-main ("OSV Scan (blocking)") on push-to-main and the weekly cron fails closed. So a red OSV check on a PR is informational; a red one on main is a real gate. Fix a genuine finding by bumping the vulnerable transitive dep (lockfile surgery, see git-pr-workflow).

Dependabot flags a security alert on a workspace "*" dependency

False positive. An internal devDep pinned to "*" (e.g. brepjs-cad's "brepjs-viewer": "*") is intentional — pinning it to a concrete version is what repeatedly broke npm ci. Fix: raise the spec floor to >=x.y.z if the alert must be cleared — do not pin the spec or bump the lockfile. Mechanism in the companion-packages skill.

A release PR won't auto-merge

Expected during a release train: while the root brepjs release PR (branch release-please--branches--main--components--brepjs) is open, every leaf PR (cad/bim/sheetmetal) is held; leaves auto-merge only after root merges+publishes. brepjs-opencascade is held permanently (manual, expensive WASM build). Mechanism at release-please.yml:57-133; deep dive in the release-publishing skill.

Looks like a failure but isn't

  • coverage red on main: informational only (continue-on-error, push-only, out of ci-pass). Not a gate.
  • benchmark "main install failed" warning: continue-on-error on the main-baseline install so a broken main can't deadlock the PR that fixes it (ci.yml:323-330). The PR's own benchmark still runs; only the comparison is skipped.
  • benchmark shows ±9-15% noise: shared runners vary run-to-run; the threshold is 25% for that reason (ci.yml:366).
  • held release PRs: opencascade always held; leaves held while root is open. See above.
  • skipped jobs: a skipped needs result passes ci-pass — only failure/cancelled fail it.

Blind spots — things CI never runs

  • alwaysExclude tests never execute in any CI project (vitest.config.ts): tests/brepkit-adapter.test.ts, tests/brepkit-validation.test.ts, tests/kernel-agreement.test.ts, tests/io-stress.test.ts, plus benchmarks/, the cad/viewer packages (own jobs), apps/, and worktree dirs. They rot silently — run them locally when touching that code.
  • The brepkit kernel is not a PR gate: the default gate runs occt-wasm only. Run npm run test:brepkit locally for brepkit-affecting changes (see kernel-abstraction).
  • apps/playground is outside root lint + vitest: only tsc -b (via playground-build) gates it in CI. See playground-examples.

Stale docs — do not inherit

CONTRIBUTING.md (~lines 222-235) lists coverage thresholds as 83/73/64/73 and claims "CI runs the full test suite with coverage enforcement." Both are wrong. Actual thresholds (vitest.config.ts): statements 85, branches 71, functions 91, lines 88. Coverage is main-only, informational, and continue-on-error — never a PR gate. Trust vitest.config.ts, not CONTRIBUTING.md.

Additional resources

Sibling skills (each fact lives in exactly one — link, don't duplicate):

  • release-publishing — release-please serialization (root-before-leaves), OIDC filename binding, per-package dispatch recipes, republish recovery, concurrency/label races.
  • quality-gates — check:patterns / knip / boundary rule details and baseline mechanics.
  • git-pr-workflow — hooks, conventional commits, worktrees, merge / auto-merge, lockfile surgery.
  • companion-packages — workspace deps, ETARGET / build order, workspace "*" specs.
  • writing-tests — test skeleton, shard/coverage authoring, kernel divergence skips.
  • adding-operations — the function-lookup gate and export surfaces.
  • playground-examples — the three playground gates (types, geometry, thumbnail).

© andymai, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/ci-triage of andymai/brepjs.

Open the folder on GitHubat commit 2907fb1

Compare with similar skills

CI Triage next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

CI Triage compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
CI Triage this skillandymai/brepjs115—~3.8kAutomated safety check: PassApache-2.0
Linea Dependency MaintenanceConsensys-Incorporated/linea-attestation-registry1771 repos~3.7kAutomated safety check: WarnMIT
npm Package Publisherklaudworks/universal-skills181—~923Automated safety check: PassMIT
ReleaseSma1lboy/rove168—~3.1kAutomated safety check: WarnMIT
ZCF Release AutomationUfoMiao/zcf6.1k—~3.4kAutomated safety check: PassMIT
Renovate Actions PR Reviewbacknotprop/plannotator9.3k—~640Automated safety check: PassApache-2.0

Similar skills

  • Linea Dependency Maintenance

    Consensys-Incorporated/linea-attestation-registry

    Safely plan and execute dependency maintenance for JavaScript/TypeScript (npm, pnpm) and GitHub Actions, including npm lockfiles, pnpm workspaces, catalogs, overrides, SHA-pinned action versions…

    177 GitHub starsUsed in 1 repo~3.7k tokens
    DevelopmentAuto-check: warnings
  • npm Package Publisher

    klaudworks/universal-skills

    Releases an npm package by committing changes, bumping the version with npm version, pushing the tag and checking the GitHub Actions publish.

    181 GitHub stars~923 tokensUpdated 8 mo ago
    DevelopmentAuto-check passed
  • Release

    Sma1lboy/rove

    Autonomously cut a Rove (@sma1lboy/rove) release end-to-end — detect the semver bump from pending changesets (flagging an upstream minor you didn't intend), run the release gates, dispatch the…

    168 GitHub stars~3.1k tokensUpdated today
    DevOps & CloudAuto-check: warnings
  • Automates a version release with changesets: analyzes code changes, writes a bilingual CHANGELOG, bumps the version and commits through a release branch and pull request.

    6.1k GitHub stars~3.4k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Renovate Actions PR Review

    backnotprop/plannotator

    Reviews Renovate pull requests that bump GitHub Actions by checking pinned SHAs against upstream tags, scanning changelogs and confirming workflows stay compatible.

    9.3k GitHub stars~640 tokensUpdated today
    DevelopmentAuto-check passed
  • Walks through releasing the Cline CLI package to npm: release notes, version bump, matching git tag, and either the GitHub workflow or a local publish.

    70k GitHub stars~3.4k tokensUpdated today
    DevelopmentAuto-check: warnings

More from andymai/brepjs

All 21 skills in this repo
  • Implement

    andymai/brepjs

    A skill your agent uses when authoring or editing a brepjs .brep.ts part — writing the geometry with the functional API (box, cylinder, fuse, cut, fillet, sketch→extrude…), declaring an expected…

    115 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Memory And Disposal

    andymai/brepjs

    This skill should be used when managing WASM handle lifetimes or hunting memory leaks in brepjs — when a task mentions "createHandle() without using keyword risks WASM memory leak"…

    115 GitHub stars~3.1k tokensUpdated today
    Auto-check passed
  • Polish

    andymai/brepjs

    A skill your agent uses when a valid brepjs part should look designed rather than glued-from-primitives (products, toys, mechanisms, anything a human eyeballs), and when exporting/handing off the…

    115 GitHub stars~588 tokensUpdated today
    Auto-check passed
  • Wasm Interop

    andymai/brepjs

    This skill should be used when working across the JS/WASM boundary in brepjs — writing or debugging code in src/kernel/occt, src/kernel/occtWasm, or src/kernel/brepkit, or diagnosing symptoms like…

    115 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Writing Tests

    andymai/brepjs

    This skill should be used when writing, running, or fixing tests in the brepjs repository — when a task says "add a test", "write a regression test", "tests are failing", "test timed out", "coverage…

    115 GitHub stars~4.3k tokensUpdated today
    Auto-check passed
  • Adding Operations

    andymai/brepjs

    This skill should be used when adding or extending a geometric shape operation in brepjs — the end-to-end recipe once the target module is chosen (which is decided by architecture-navigation) — when…

    115 GitHub stars~4.4k tokensUpdated today
    Auto-check passed

Questions about CI Triage

What does CI Triage do?

This skill should be used when a brepjs GitHub Actions job is red or behaving oddly on github.com (a remote CI run, not a local pre-commit/pre-push hook) — "CI failed", "ci-pass is failing", "npm ci…. CI Triage is an agent skill from andymai/brepjs.

When should I use CI Triage?

CI Triage fits situations like: tasks that involve Dependency management; tasks that involve Quality gates; tasks that involve CI/CD.

How do I install CI Triage in Claude Code?

Run `npx skills add andymai/brepjs --skill ci-triage -a claude-code`. Or copy the skill folder (.claude/skills/ci-triage in andymai/brepjs) into .claude/skills/ci-triage in your project. Claude Code loads it when a task matches its description.

How do I install CI Triage in Codex?

Run `npx skills add andymai/brepjs --skill ci-triage -a codex`. Or copy the skill folder (.claude/skills/ci-triage in andymai/brepjs) into .agents/skills/ci-triage in your project. Codex loads it when a task matches its description.

Can I use CI Triage in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add andymai/brepjs --skill ci-triage -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ci-triage, .gemini/skills/ci-triage, .github/skills/ci-triage and .opencode/skills/ci-triage in your project.

What does CI Triage need to run?

Going by SKILL.md and its folder, CI Triage needs the command-line tools its instructions call (npm, gh, cargo, tsc, git and prettier).

Does CI Triage access the network?

SKILL.md contains no URLs. Its commands use npm, gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is CI Triage safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does CI Triage use?

CI Triage is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does CI Triage use?

About 3.8k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to CI Triage?

Skills that share tags, products or a category with CI Triage: Linea Dependency Maintenance (Consensys-Incorporated/linea-attestation-registry, 177 stars), npm Package Publisher (klaudworks/universal-skills, 181 stars), Release (Sma1lboy/rove, 168 stars) and ZCF Release Automation (UfoMiao/zcf, 6.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains CI Triage?

andymai (a GitHub user) maintains it in andymai/brepjs, which has 115 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 9, 2026.

Source: andymai/brepjs on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.