claude-agent-skills-hub / impeccable
AGENTS.md0 starsChanged 54 days agoMITView on GitHub
skill/ is the source of truth for the Impeccable skill: SKILL.src.md, reference/, scripts/, and agents/. Build logic lives in scripts/, with provider configs in scripts/lib/transformers/. The CLI and anti-pattern detector live in cli/, the browser extension in extension/, the Astro website in site/, Cloudflare Pages Functions in functions/, and regression coverage in tests/ with fixtures under tests/fixtures/. dist/ and build/ are generated and gitignored. The root harness folders (.agents/, .claude/, .cursor/, etc.) and plugin/ are generated distribution artifacts that are…
- Reads credentials
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,700 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository55 other files it gives its agents.
- agent-browser/AGENTS.mdAGENTS.md
- caveman/AGENTS.mdAGENTS.md
- find-skills/AGENTS.mdAGENTS.md
- graphify/AGENTS.mdAGENTS.md
- gsap/AGENTS.mdAGENTS.md
- gstack/AGENTS.mdAGENTS.md
- humanizer/AGENTS.mdAGENTS.md
- hyperframes/AGENTS.mdAGENTS.md
- hyperiux-components/AGENTS.mdAGENTS.md
- i-have-adhd/AGENTS.mdAGENTS.md
- last30days-skill/AGENTS.mdAGENTS.md
- marketingskills/AGENTS.mdAGENTS.md
- notebooklm-py/AGENTS.mdAGENTS.md
- ponytail/AGENTS.mdAGENTS.md
- superdesign-skill/AGENTS.mdAGENTS.md
- superpowers/AGENTS.mdAGENTS.md
- caveman/CLAUDE.mdCLAUDE.md
- claude-hud/CLAUDE.mdCLAUDE.md
- gsap/CLAUDE.mdCLAUDE.md
- gstack/CLAUDE.mdCLAUDE.md
- hyperframes/CLAUDE.mdCLAUDE.md
- hyperiux-components/CLAUDE.mdCLAUDE.md
- impeccable/CLAUDE.mdCLAUDE.md
- last30days-skill/CLAUDE.mdCLAUDE.md
- marketingskills/CLAUDE.mdCLAUDE.md
- notebooklm-py/CLAUDE.mdCLAUDE.md
- superdesign-skill/CLAUDE.mdCLAUDE.md
- ui-ux-pro-max/CLAUDE.mdCLAUDE.md
- ui-ux-pro-max-skill/CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- brandkitSkill
- industrial-brutalist-uiSkill
- defuddleSkill
- gpt-tasteSkill
- gstackSkill
- humanizerSkill
- imagegen-frontend-mobileSkill
- imagegen-frontend-webSkill
- image-to-codeSkill
- json-canvasSkill
- last30daysSkill
- llm-councilSkill
- minimalist-uiSkill
- notebooklmSkill
- obsidian-basesSkill
- obsidian-cliSkill
- obsidian-markdownSkill
- full-output-enforcementSkill
- redesign-existing-projectsSkill
- high-end-visual-designSkill
- stitch-design-tasteSkill
- design-taste-frontendSkill
- design-taste-frontend-v1Skill
- ui-ux-design-patternsSkill
- webgpu-threejs-tslSkill
The file
We split this AGENTS.md into the rules it gives an agent
5 rules. About 0 are common, 0 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 20
Run bun run build after changing anything in skill/, transformer code, or user-facing counts.
- Very specific: line 57
Add a fixture at tests/fixtures/antipatterns/{rule-id}.html with two columns (should-flag / should-pass), each case identified by a unique …
- Very specific: line 58
Add a failing test in tests/detect-antipatterns-fixtures.test.mjs using the snippet-substring pattern (regex /"([^"]+)"/ against …
- Very specific: line 59
Add the rule entry to the ANTIPATTERNS array (id, category = slop or quality, name, description, optional skillSection / skillGuideline).
- Very specific: line 62
Verify on a live page at http://localhost:4321/fixtures/antipatterns/{rule-id}.html and on the homepage.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Repository Guidelines
Project Structure & Module Organization
skill/ is the source of truth for the Impeccable skill: SKILL.src.md, reference/, scripts/, and agents/. Build logic lives in scripts/, with provider configs in scripts/lib/transformers/. The CLI and anti-pattern detector live in cli/, the browser extension in extension/, the Astro website in site/, Cloudflare Pages Functions in functions/, and regression coverage in tests/ with fixtures under tests/fixtures/. dist/ and build/ are generated and gitignored. The root harness folders (.agents/, .claude/, .cursor/, etc.) and plugin/ are generated distribution artifacts that are tracked for direct repo installs, not hand-authored source.
Build, Test, and Development Commands
bun run dev- start the local Bun server.bun run build- source-first build: regeneratedist/, derived site assets, and validation output without syncing tracked harness folders.bun run build:release- release/distribution build: run the full build and sync tracked root harness folders plusplugin/.bun run rebuild- clean and rebuild everything from scratch without syncing tracked harness folders.bun run rebuild:release- clean and rebuild everything, including tracked harness output sync.bun test tests/build.test.js- run a focused Bun test.bun run test- run the full Bun + Node test suite.bun run test:live-e2e- opt-in live-mode E2E against framework fixtures (~2 min; needsnpx playwright install chromiumonce).bun run test:skill-behavior- opt-in LLM-backed checks that the SKILL.md Setup flow actually drives the agent (~5 min; runs claude-sonnet-4-6 / gpt-5.5 / gemini-3.1-flash-lite, roughly $0.50-1.50 per run on the production-tier models, needs.envwith provider keys).bun run build:browser/bun run build:extension- rebuild browser-specific bundles.
Run bun run build after changing anything in skill/, transformer code, or user-facing counts. It validates the generated distribution under dist/ without touching tracked root harness outputs. Use bun run build:release only when intentionally refreshing generated provider permutations for release/main-sync or build-system work.
Generated Provider Output Policy
The root harness folders (.agents/skills/, .claude/skills/, .cursor/skills/, .gemini/skills/, .github/skills/, .kiro/skills/, .opencode/skills/, .pi/skills/, .qoder/skills/, .rovodev/skills/, .trae*/skills/) and plugin/ stay tracked so main remains installable for direct GitHub, npx skills, and submodule users. They are still generated artifacts.
Normal development should be source-first: stage changes in skill/, scripts/, cli/, site/, extension/, functions/, and tests/; leave generated harness churn unstaged unless the user asked for it. After source changes land on main, .github/workflows/sync-generated-output.yml runs bun run build:release and commits generated provider output directly back to main. Treat generated harness diffs as release artifacts and keep them out of feature PRs unless they are the point of the PR.
Sandbox gotchas for Codex agents
Some repo workflows need to run outside the sandbox in the desktop app:
- GitHub SSH operations that depend on the 1Password SSH agent, such as
gh pr checkout, may fail in the sandbox withsign_and_send_pubkeyor no 1Password approval prompt. Rerun them outside the sandbox instead of falling back to unrelated workarounds. bun run build:releaserewrites committed harness directories such as.agents/skills/. In the sandbox, Bun can hit filesystem errors while removing/recreating those trees (for exampleEFAULTon.agents/skills). Rerun the release build outside the sandbox before treating it as a real build failure.- Puppeteer/headless-Chrome tests, especially
node --test tests/detect-antipatterns-browser.test.mjsand the browser portion ofbun run test, can hang in the sandbox while launching Chrome. Run them outside the sandbox for authoritative results. - The jsdom fixture suite is intentionally run with Node, not Bun: use
node --test tests/detect-antipatterns-fixtures.test.mjsor thebun run testscript. A directbun test tests/detect-antipatterns-fixtures.test.mjscan time out and is not the supported signal.
Coding Style & Naming Conventions
Use ESM, semicolons, and the existing two-space indentation style in JS, HTML, and CSS. Prefer small, single-purpose modules over large abstractions. Keep filenames descriptive and lowercase with hyphens where needed; skill entrypoints stay as SKILL.md, helper scripts use .js or .mjs. In source frontmatter, use clear kebab-case names and concise descriptions. There is no dedicated formatter or linter configured here, so match surrounding code closely.
Testing Guidelines
Tests use Bun’s test runner plus Node’s built-in --test. Name tests *.test.js or *.test.mjs and place new fixtures near the behavior they cover, usually under tests/fixtures/. Prefer targeted test runs while iterating, then finish with bun run test. If you change generated outputs or provider transforms, verify both source parsing and at least one affected provider path in dist/.
For changes to skill/scripts/live-*.{mjs,js} or skill/scripts/live/**, also run bun run test:live-e2e (kept out of the default suite because it does real npm install per fixture and boots framework dev servers). Scope to one fixture with IMPECCABLE_E2E_ONLY=<fixture-name> while iterating; pass IMPECCABLE_E2E_DEBUG=1 for page-DOM and dev-server-log dumps on failure. Schema and authoring guide for new fixtures live in tests/framework-fixtures/README.md.
Set IMPECCABLE_E2E_AGENT=llm to swap the deterministic fake agent for an API-backed one (tests/live-e2e/agents/llm-agent.mjs). Claude Haiku 4.5 is the primary path whenever ANTHROPIC_API_KEY is set. DeepSeek V4 Flash is the secondary cheap fallback when only DEEPSEEK_API_KEY is set, and can be forced with IMPECCABLE_E2E_LLM_PROVIDER=deepseek or bun run test:live-e2e -- --llm-provider=deepseek; override either model via IMPECCABLE_E2E_LLM_MODEL or --llm-model=<model>. Tests skip cleanly when the selected provider key is unset. This path hits the API — use it for verification, not CI.
For changes to skill/SKILL.src.md's Setup section, skill/scripts/context.mjs, or any Setup-touching reference file (init.md, document.md, brand.md, product.md, sub-command refs), also run bun run test:skill-behavior. The suite spawns real LLMs (claude-sonnet-4-6, gpt-5.5, gemini-3.1-flash-lite, all three, every run) with the source SKILL.md inlined as system prompt and a workspace-scoped tool set, then asserts on the tool-call trace. Provider keys live in repo-root .env; missing keys skip cleanly. Scope to one provider with IMPECCABLE_SKILL_BEHAVIOR_MODELS=<id>; add IMPECCABLE_SKILL_BEHAVIOR_VERBOSE=1 to dump per-scenario traces. Baseline (21-22/24) and per-scenario assertions live in tests/skill-behavior/README.md.
Anti-pattern detection rules
cli/engine/detect-antipatterns.mjs is the source of truth for the rule engine. It feeds the CLI, the site overlay (cli/engine/detect-antipatterns-browser.js, regenerated by bun run build:browser), the Chrome extension (extension/detector/, regenerated by bun run build:extension), and the homepage DETECTION_COUNT in site/public/js/generated/counts.js (regenerated by bun run build). After any rule change run all three builds plus bun run test so nothing drifts.
TDD order is non-negotiable:
- Add a fixture at
tests/fixtures/antipatterns/{rule-id}.htmlwith two columns (should-flag / should-pass), each case identified by a unique heading. ≥4 flag cases and ≥5 false-positive shapes. Use explicit pixel dimensions in CSS — jsdom does no layout. - Add a failing test in
tests/detect-antipatterns-fixtures.test.mjsusing the snippet-substring pattern (regex/"([^"]+)"/againstSHOULD_FLAG/SHOULD_PASSlists). - Add the rule entry to the
ANTIPATTERNSarray (id,category=sloporquality,name,description, optionalskillSection/skillGuideline). - Implement a pure
checkXxx(opts)returning[{ id, snippet }]— no DOM access inside. - Add two adapters that wrap the pure check:
checkElementXxxDOM(el)for the browser (getComputedStyle+getBoundingClientRect) andcheckElementXxx(el, tag, window)for jsdom (parseFloat(style.width)instead of layout). Wire both adapters into both element loops incli/engine/detect-antipatterns.mjs(browser loop ~line 1837, jsdom loop indetectHtml~line 2058). Forgetting one is the most common mistake. - Verify on a live page at
http://localhost:4321/fixtures/antipatterns/{rule-id}.htmland on the homepage. The two adapter paths can disagree.
Conventions: wrap the identifying heading text in straight double quotes inside snippets so the fixture test can extract it. jsdom-specific helpers resolveBackground(), resolveGradientStops(), and parseGradientColors() exist because background: shorthand isn't decomposed and computed colors aren't normalized in jsdom — use them. Reference rules to copy from: side-tab (border), low-contrast (color+gradient), icon-tile-stack (sibling relationship), flat-type-hierarchy (page-level).
Commit & Pull Request Guidelines
Recent history favors short, imperative subjects such as Fix: ..., Add ..., Improve ..., or Bump .... Keep commits focused and explain the user-facing impact when it is not obvious. PRs should summarize what changed, list validation performed, and call out whether generated provider output was intentionally omitted or intentionally refreshed. Include screenshots for visible site/ changes and mention affected providers when transform behavior changes.
Releases
Tags are per-component because the three components ship independently: skill-v (.claude-plugin/plugin.json + .claude-plugin/marketplace.json), cli-v (package.json), ext-v (extension/manifest.json). Flow: bump the relevant manifest, add a changelog entry to site/pages/index.astro (skill = bare vX.Y.Z; CLI = CLI vX.Y.Z; extension = Extension vX.Y.Z — the prefix is how scripts/release.mjs finds the right block), commit, push, then bun run release:<skill|cli|ext> (or --dry-run first). The script refuses on a dirty tree, an unpushed HEAD, a missing changelog entry, or stale build outputs; skill and extension reruns of bun run build:release / bun run build:extension must produce zero diff. Skill releases attach dist/universal.zip; extension releases attach dist/extension.zip. CLI ships to npm via a separate npm publish, and the extension zip uploads to the Chrome Web Store manually — both reminded at the end of the script. Fix already-shipped notes with gh release edit <tag> --notes-file <md>.
Contributor Notes
Do not edit generated provider files directly unless you are intentionally patching generated output as part of a build-system change. Prefer fixing the root source in skill/, scripts/, or cli/, then regenerate artifacts for validation. Stage generated harness artifacts only for release/main-sync or build-system work.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

