Antfu
oyjt/uniapp-vue3-template
Anthony Fu's {Opinionated} preferences and best practices for web development
This skill should be used when a local brepjs quality gate or npm run validate step fails and the specific rule's fix or escape hatch is needed — ESLint errors like "no-explicit-any" or "Direct .oc…
$ npx skills add andymai/brepjs --skill quality-gates -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install andymai/brepjs quality-gates --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/quality-gates .claude/skills/quality-gates && rm -rf skills-srcUse ~/.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/
Install the "quality-gates" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gates into .claude/skills/quality-gates/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quality-gates", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gatesType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add andymai/brepjs --skill quality-gates -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install andymai/brepjs quality-gates --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/quality-gates .agents/skills/quality-gates && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "quality-gates" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gates into .agents/skills/quality-gates/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quality-gates", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add andymai/brepjs --skill quality-gates -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install andymai/brepjs quality-gates --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/quality-gates .cursor/skills/quality-gates && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "quality-gates" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gates into .cursor/skills/quality-gates/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quality-gates", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/andymai/brepjs.git --path .claude/skills/quality-gates--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add andymai/brepjs --skill quality-gates -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install andymai/brepjs quality-gates --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/quality-gates .gemini/skills/quality-gates && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "quality-gates" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gates into .gemini/skills/quality-gates/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quality-gates", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install andymai/brepjs quality-gatesInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add andymai/brepjs --skill quality-gates -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/quality-gates .github/skills/quality-gates && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "quality-gates" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gates into .github/skills/quality-gates/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quality-gates", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add andymai/brepjs --skill quality-gates -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install andymai/brepjs quality-gates --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/andymai/brepjs.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/quality-gates .opencode/skills/quality-gates && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "quality-gates" agent skill from https://github.com/andymai/brepjs/tree/main/.claude/skills/quality-gates into .opencode/skills/quality-gates/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quality-gates", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
quality-gatesThis skill should be used when a local brepjs quality gate or npm run validate step fails and the specific rule's fix or escape hatch is needed — ESLint errors like "no-explicit-any" or "Direct .oc…
Quality Gates is an agent skill from andymai/brepjs. This skill should be used when a local brepjs quality gate or npm run validate step fails and the specific rule's fix or escape hatch is needed — ESLint errors like "no-explicit-any" or "Direct .oc access is banned", pattern-checker "check:patterns" violations (no-double-cast, max-function-lines, require-using-for-handles), a pattern-baseline update, knip flagging an unused export, or the boundary check printing "Layer boundary violations found". Also covers the pattern-baseline trap where an unbaselined…
Its SKILL.md is about 3.2k 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 Quality gates and Linting and formatting. It works with ESLint, npm and Git. The repository describes itself as: Web CAD library with exact B-Rep geometry. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit 6e20740. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
npmtsceslintFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Quality Gates loads about 3.2k tokens when it runs. Until then it costs about 166 tokens; SKILL.md has 1,148 words of instructions outside code blocks.
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.
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.
The full file from andymai/brepjs at commit 6e20740, republished under its Apache-2.0 licence (© andymai). 1,148 words, ~3,228 tokens.
.claude/skills/quality-gates/SKILL.md (or your agent's skills folder).Pass npm run validate, understand every gate's failure output, and reach for the
right escape hatch instead of --no-verify. CLAUDE.md already lists the headline
rules and hook tiers; this skill adds the failure-output recipes, escape-hatch
mechanics, and the traps those summaries omit.
| Gate | Command | Runs in validate | Runs in pre-commit | Elsewhere |
|---|---|---|---|---|
| Typecheck | npm run typecheck (tsc --noEmit) | 1/5 | Tier 1 (parallel) | CI typecheck |
| ESLint | npm run lint (eslint src/) | 2/5 | Tier 1 via lint-staged | CI lint |
| Boundaries | npm run check:boundaries | 3/5 | Tier 1 (:staged) | CI quality |
| Format | npm run format:check | 4/5 | Tier 1 via lint-staged | CI lint |
| Changed tests | npm run test | 5/5 | Tier 2 | CI test (sharded, full) |
| Pattern checker | npm run check:patterns | — | lint-staged (staged src only) | CI quality |
| knip | npm run knip | — | — | pre-push + CI quality |
validate is scripts/validate-change.sh: five steps, in order, fail-fast
(set -e) — it stops at the first red step and prints nothing after it. Fix
step N before step N+1 is reachable. On success it prints === All checks passed ===.
Pre-commit (.husky/pre-commit) runs Tier 1's three checks in parallel, so
their output interleaves — read carefully to attribute an error to the right gate.
For hook anatomy, FULL_TESTS=1, pre-push, commit-msg, and --no-verify, see the
git-pr-workflow skill. (Note: scripts/pre-commit-help.sh prints "coverage
thresholds enforced at push time" — that line is stale; pre-push runs only knip.)
Full config: eslint.config.js (flat config, strictTypeChecked base). Rules
actually hit in practice and their sanctioned escapes:
| Symptom | Rule | Fix / escape |
|---|---|---|
| "Unexpected any" | no-explicit-any | Type it. Only for a real WASM type gap: // eslint-disable-next-line @typescript-eslint/no-explicit-any -- kernel WASM binding lacks type |
| "Forbidden non-null assertion" | no-non-null-assertion | Narrow with a guard; for noUncheckedIndexedAccess array reads, add a bounds check or disable-comment |
| "must be imported using a type-only import" | consistent-type-imports | Use import type { ... } |
| unused var | no-unused-vars | Prefix with _ (argsIgnorePattern/varsIgnorePattern = ^_) |
| "Unnecessary conditional" | no-unnecessary-condition | The condition is provably always true/false — remove it, don't disable |
| switch not exhaustive | switch-exhaustiveness-check | Handle every union case; a default counts as exhaustive |
| "Do not use '// @ts-ignore'" | ban-ts-comment | Use // @ts-expect-error -- reason (the -- reason suffix is mandatory); @ts-ignore/@ts-nocheck are fully banned |
| console call | no-console | Only console.error/console.warn are allowed |
export let / enum | no-restricted-syntax | Use a getter fn or const; use as const object + literal union |
Two Layer-2+ bans — "Direct .oc access is banned" and "Direct method calls on
.wrapped are banned" — fire in the domain/high-level dirs. The fix for both is
getKernel().method(shape.wrapped), never a disable-comment. The rule mechanics
and the exact directory list live in the architecture-navigation skill; for the
correct kernel-method call pattern see kernel-abstraction.
npm run lint only covers src/. Tests are linted at commit time via lint-staged
(.lintstagedrc.json), not by npm run lint. Prettier config (.prettierrc.json):
semicolons, single quotes, trailingComma: es5, width 100, LF.
scripts/check-patterns.ts — AST checks ESLint can't express. Five rules, all
severity error:
| Rule id | Fires when | Threshold / excusal |
|---|---|---|
no-double-cast | as unknown as T, as any as T, <T><unknown>expr | Use a guard, generic, or branded constructor |
no-async-withkernel | async callback passed to withKernel(id, fn) (bare or member call) | Use getKernel(id) for async code (kernel-abstraction skill) |
require-using-for-handles | createHandle()/createKernelHandle() not bound with using | Excused when: returned, passed directly as a call argument, or placed in an object/array literal (memory-and-disposal skill) |
max-function-lines | function body > 60 effective lines | Blanks, comments, and lone-brace lines don't count; extract helpers |
max-nesting-depth | > 4 levels of if/for/for-in/for-of/while/do/switch/try | Depth resets inside nested function bodies; use early returns |
The rule id is require-using-for-handles (not "missing using") — that exact string
goes in baselines and disable-comments.
Inline disable: // brepjs-patterns-disable: <rule-id> on the line above the
violation or inline on the same line. <rule-id> may be a specific rule or * for
all rules on that line.
Baseline (.pattern-baseline.json, version-2): only new (non-baselined)
violations fail; exit 1 if any. Currently 30 entries (15 max-function-lines,
14 no-double-cast, 1 max-nesting-depth). Fingerprints are content-based
(file|rule|normalized-80char-snippet|#occurrenceIdx), so:
Regenerate after intentionally adding/removing violations:
npm run check:patterns:baseline (= --update-baseline). Other flags:
--no-baseline (report everything, ignore baseline), --json, --sarif.
Only src/**/*.ts is ever scanned (no .d.ts, no src/kernel/wasm/). Console
failure output ends with the two escape hatches printed verbatim: the disable-comment
format and the --update-baseline command.
CI's quality job runs check:patterns over all of src/ and checks out the
PR-merged-with-main commit. So a max-function-lines/no-double-cast violation that
lands on main without a matching baseline entry fails the quality job — and thus
the required ci-pass aggregate — on every open PR at once, even PRs that never
touched that file.
Recovery: land a tiny baseline-bump PR first (npm run check:patterns:baseline,
commit .pattern-baseline.json). That PR passes because its own merge commit contains
the new baseline; once merged, the other PRs go green. This happens because
lint-staged only runs the pattern checker on staged files locally, so a long
function can slip in via a large refactor and only bite in full-src CI. See the
ci-triage skill for other quality-job failure modes.
*Fns.ts exportAdding a *Fns.ts export makes CI's build job flag a docs/function-lookup.md diff unless the file is regenerated and prettier-normalized before commit — full recipe in the adding-operations skill.
Runs on pre-push and in CI's quality job. Config: knip.config.ts.
tests/ (separate tsconfig, @/
alias). Tag it @testOnly in a JSDoc comment — tags: ['-testOnly'] treats it as
used. This is the correct escape, not deleting the export.ignoreExportsUsedInFile: true; duplicates and optionalPeerDependencies are off
(intentional API aliases + the brepjs-opencascade optional peer).src/**/*.ts only. Companion workspaces (brepjs-opencascade,
brepjs-voxel-wasm, brepjs-viewer, brepjs-cad, apps/playground) are fully
ignored; brepjs-bim ignores examples/**. See companion-packages.scripts/check-layer-boundaries.sh enforces downward-only imports (target layer ≤
source layer), handling both @/ alias and relative imports. Violation output:
Layer boundary violations found:
VIOLATION: src/topology/foo.ts (layer 2: topology) imports from '@/sketching/bar.js' (layer 3: sketching)The script's layer map is a superset of the CLAUDE.md table — it also places
csg/voxel/implicit in Layer 2 and gear/ns/lattice in Layer 3. Unrecognized
top-level dirs and root files (src/index.ts) are skipped. --staged mode
(check:boundaries:staged, used by pre-commit) checks only staged files; env
BOUNDARY_SRC_DIR overrides the scan root for fixture testing. For where new code
belongs and how to restructure to fix a violation, see architecture-navigation.
test runs --changed (changed files, no coverage); test:full runs
the whole suite with --coverage. Thresholds run on main pushes only,
continue-on-error — informational, never a PR gate. See writing-tests.test job (test:ci, no coverage) runs
everything. Pre-commit runs --changed only..size-limit.json budgets; benchmark
regression vs main). Not in validate.Adjacent skills own the neighboring facts: git-pr-workflow (hook tiers,
conventional commits, --no-verify), architecture-navigation (layer map, the
.oc/.wrapped rule + directory list), kernel-abstraction (withKernel vs
getKernel), memory-and-disposal (using handles), ci-triage (CI job failure
modes), writing-tests (coverage and the vitest runner config), adding-operations
(function-lookup gate), companion-packages (workspace layout).
© 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
Just SKILL.md in .claude/skills/quality-gates of andymai/brepjs.
Open the folder on GitHubat commit 6e20740
Quality Gates 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Quality Gates this skillandymai/brepjs | 115 | — | ~3.2k | Automated safety check: Pass | Apache-2.0 | |
| Antfuoyjt/uniapp-vue3-template | 627 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Devserithemage/serverless-openclaw | 196 | — | ~714 | Automated safety check: Notes | None | |
| Michel Packmind Engineer ReviewPackmindHub/packmind | 317 | — | ~2.7k | Automated safety check: Pass | Apache-2.0 | |
| Ad HooksCorridorTech/PoseCap | 224 | — | ~2.4k | Automated safety check: Notes | Apache-2.0 | |
| Ad HooksCorridorTech/PoseCap | 224 | — | ~1.7k | Automated safety check: Pass | Apache-2.0 |
oyjt/uniapp-vue3-template
Anthony Fu's {Opinionated} preferences and best practices for web development
serithemage/serverless-openclaw
Development workflow guide. An agent skill from serithemage/serverless-openclaw.
PackmindHub/packmind
Review an implemented GitHub issue the way a senior Packmind engineer would — the human-judgment checks that ESLint, the TypeScript compiler, and e2e tests cannot catch (authorization scoping…
CorridorTech/PoseCap
Scaffold deterministic quality gates per WORKFLOW.md §11 — pre-commit (lint, format, secret-scan), pre-push (build, unit, integration).
CorridorTech/PoseCap
Scaffold deterministic quality gates per WORKFLOW.md §11 — pre-commit (lint, format, secret-scan), pre-push (build, unit, integration).
openshift-eng/ai-helpers
Repeatedly validate and fix a Jira implementation until tests, lint, builds, requirements, production readiness, and repository cleanliness all pass.
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…
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"…
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…
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…
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…
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…
Categories
This skill should be used when a local brepjs quality gate or npm run validate step fails and the specific rule's fix or escape hatch is needed — ESLint errors like "no-explicit-any" or "Direct .oc…. Quality Gates is an agent skill from andymai/brepjs.oc access is banned", pattern-checker "check:patterns" violations (no-double-cast, max-function-lines, require-using-for-handles), a pattern-baseline update, knip flagging an unused export, or the boundary check printing "Layer boundary violations found".
Quality Gates fits situations like: tasks that involve Quality gates; tasks that involve Linting and formatting.
Run `npx skills add andymai/brepjs --skill quality-gates -a claude-code`. Or copy the skill folder (.claude/skills/quality-gates in andymai/brepjs) into .claude/skills/quality-gates in your project. Claude Code loads it when a task matches its description.
Run `npx skills add andymai/brepjs --skill quality-gates -a codex`. Or copy the skill folder (.claude/skills/quality-gates in andymai/brepjs) into .agents/skills/quality-gates in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add andymai/brepjs --skill quality-gates -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/quality-gates, .gemini/skills/quality-gates, .github/skills/quality-gates and .opencode/skills/quality-gates in your project.
Going by SKILL.md and its folder, Quality Gates needs the command-line tools its instructions call (npm, tsc and eslint).
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
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.
Quality Gates 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.
About 3.2k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Quality Gates: Antfu (oyjt/uniapp-vue3-template, 627 stars), Dev (serithemage/serverless-openclaw, 196 stars), Michel Packmind Engineer Review (PackmindHub/packmind, 317 stars) and Ad Hooks (CorridorTech/PoseCap, 224 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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 8, 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.