neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
Dotfiles with CLAUDE.md guidelines and agents for AI-assisted TDD and TypeScript development
AI summary · revised during review
Developer toolsJavaScript · TypeScriptGitHub @citypaulSelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
Loading the full README. The saved excerpt is shown below.
Comprehensive CLAUDE.md guidelines + specialized agents for Test-Driven Development, TypeScript strict mode, and functional programming. Works with both Claude Code and OpenCode.
👆 Watch a real coding session showing how CLAUDE.md guides AI pair programming in Claude Code.Read the full README ↗Comprehensive CLAUDE.md guidelines + specialized agents for Test-Driven Development, TypeScript strict mode, and functional programming. Works with both Claude Code and OpenCode.
👆 Watch a real coding session showing how CLAUDE.md guides AI pair programming in Claude Code.
This is my personal dotfiles repository. I use it to manage my shell configurations, git aliases, and development environment setup.
It became unexpectedly popular when I shared the CLAUDE.md file - development guidelines I wrote for AI-assisted programming. That's likely why you're here.
This repository now serves two purposes:
clarity from Addy Osmani + simple-english from Amin Boulegroun + 2 Next.js Cache Components skills from vercel/next.js + 2 React skills from vercel-labs/agent-skills + the optional grill-me planning interview and writing-for-agents skills from mattpocock/skills + skill-creator from anthropics/skills + the seo-audit marketing skill from coreyhaines31/marketingskills + Skill Doctor from Warp, and automated quality guidance (what most visitors want)Most people are here for CLAUDE.md and the agents. This README focuses primarily on those, with dotfiles coverage at the end.
Using another coding agent? Skills install via skills.sh, which supports 40+ coding agents (Claude Code, Cursor, Codex, Copilot, OpenCode, Gemini CLI, Cline, Continue, Windsurf, …). Pass
--agent <name>(repeatable) to target others, or--with-opencodefor the OpenCode config shortcut. Slash commands and Claude-Code agents are Claude-Code-specific;--with-opencodealso copies them into OpenCode's equivalents. See Targeting other agents for details.
→ Read the full CLAUDE.md file
CLAUDE.md is a living working-policy document for this repository. Canonical skills own reusable practices; source, tests, glossaries, accepted decisions, and maintained docs own the facts they can keep current.
Unlike typical style guides, CLAUDE.md provides:
| Section | What It Provides | Detailed Patterns |
|---|---|---|
| Testing Principles | Behavior-driven tests, isolated state, contextual fixtures, and repository-owned coverage diagnostics | → skills/testing |
| Mutation Testing | End-of-phase Stryker full/diff runs, survivor triage, mutator-rule resource | → skills/mutation-testing |
| Test Design Review | Evidence-based qualitative review against Dave Farley's eight properties, with unknowns left unscored | → skills/test-design-reviewer |
| Front-End Testing | Claim-appropriate Browser Mode, Playwright, or DOM Testing Library patterns | → skills/front-end-testing |
| React Testing | Browser Mode or React Testing Library selected by observable claim, repository support, and cost | → skills/react-testing |
| TypeScript Guidelines | Schema-first decision framework, type vs interface clarity, immutability patterns | → skills/typescript-strict |
| TDD Process | RED-GREEN-REFACTOR increments, end-of-phase mutation/alternate-evidence PR gate, quality gates, anti-patterns | → skills/tdd |
v3.0 Architecture: Skills are auto-discovered patterns loaded on-demand when relevant. This reduces always-loaded context from ~3,000+ lines to ~160 lines.
"I'm struggling with..." → Go here:
| Problem | Skill | Key Insight |
|---|---|---|
| Tests that break when I refactor | testing | Test behavior through public APIs, not implementation |
| 100% coverage but bugs still slip through | mutation-testing | Coverage measures execution, mutation testing measures detection |
| Tests break when refactoring UI components | front-end-testing | Match the harness to the claim and query by role |
| Testing React components, hooks, or context | react-testing | Use Browser Mode for browser-observable behavior; keep a lighter stable harness when it proves the contract |
| Don't know when to use schemas vs types | typescript-strict | 5-question decision framework |
| Code that "looks the same" - should I abstract it? | refactoring | Semantic vs structural abstraction guide |
| Refactoring everything vs nothing | refactoring | Priority classification (Critical/High/Nice/Skip) |
| Understanding what "DRY" really means | refactoring | DRY = knowledge, not code structure |
Compatible agents auto-discover skills when relevant:
typescript-strict skill loads automaticallytesting skill provides factory patternsrefactoring skill assesses opportunities while behavior tests stay greenmutation-testing runs once for the accumulated change and drives survivor handlingpanel-review fans out one sub-agent per skill lens and synthesizes one adversarially verified, ranked report (/panel-review)graph-engineering composes installed skills into an orchestrated multi-agent graph, one skill per nodereduce-system-complexity keeps conservation and reduction as separate evidence gatescodebase-design applies deep-module, locality, and Design It Twice lensesimprove-codebase-architecture creates an evidence-backed visual HTML reportevaluate-existing-solutions checks local/platform capabilities and current established options against bespokemutation-testing skill identifies weak testsapi-design skill provides contract-first patternssecure-oauth-oidc applies RFC 9700 plus the relevant identity and extension profilesstory-splitting preserves vertical user-value slicesstack-pull-requests decides whether a hard-/flow-lineage stack earns its coordination costproduction-parity-skill-builder creates an app-specific parity skill from docs, source, tests, config, auth, and infrafinding-seams skill identifies substitution pointscharacterisation-tests skill documents existing behaviorimpeccable skill loads design methodology and anti-slop patternsFor product work, the skills form a requirements-to-code pipeline. Each skill owns a different question and produces a different artifact:
| Stage | Question | Skill | Output |
|---|---|---|---|
| 1. Decide | Do we understand the product/design decision tree? | specification; optional grill-me when installed | Resolved decisions, acceptance examples, and remaining open questions |
| 2. Split | What independently valuable child stories exist? | story-splitting | Child stories with value, scope, deferrals, acceptance examples, and release constraints |
| 3. Tighten | What is missing, ambiguous, unverifiable, or unsafe? | find-gaps | Confirmed artifact updates: AC, plan paragraphs, mock-state specs, or a return to story-splitting |
| 4. Select technology when needed | Should we reuse, adopt, adapt, combine, build, defer, or do nothing? | evaluate-existing-solutions | Current evidence, hard gates, qualitative trade-offs, ownership, and exit strategy |
| 5. Plan | How do we implement the selected child story safely? | planning | Vertical slices in the repository's planning workflow (plans/ fallback), with independent-PR or explicit dependency-stack delivery |
| 6. Build | How do we change code without outrunning tests? | tdd + testing + applicable refactoring, then mutation-testing at PR readiness | RED-GREEN-REFACTOR for behavior change; verified preservation path for pure restructuring; one accumulated-scope mutation gate before PR |
| 7. Accept | Does the final implementation satisfy the authoritative requirement? | acceptance-review | Read-only criterion evidence and an exact satisfies / does-not-satisfy / indeterminate verdict |
Use the earliest stage that matches the uncertainty. Skip the decision interview when intent is already clear. Skip story-splitting for tiny or already-narrow work. Use find-gaps only once there is an artifact to inspect. Use technology selection proportionately for a material generic mechanism or durable new dependency—not domain logic, small glue, routine use of an already-adopted tool, or ordinary fixes. Use planning only after one child story or narrow capability and any consequential technology choice have been selected.
storyboard fits between Split and Tighten when UX spans multiple surfaces: it creates the visual artifact; find-gaps then reviews missing states and flow gaps.
No manual invocation needed - compatible agents detect when skills apply. Impeccable steering commands (/shape, /critique, /polish, etc.) can also be invoked directly. You can explicitly request the optional grill-me interview when it is installed.
Problem it solves: Tests that break on every refactor, unclear what to test, low coverage despite many tests
What's inside:
Concrete example from the docs:
// ❌ BAD - Implementation-focused test (breaks on refactor)
it("should call validateAmount", () => {
const spy = jest.spyOn(validator, 'validateAmount');
processPayment(payment);
expect(spy).toHaveBeenCalled(); // Will break if we rename or restructure
});
// ✅ GOOD - Behavior-focused test (refactor-safe)
it("should reject payments with negative amounts", () => {
const payment = getMockPayment({ amountMinorUnits: -100, currency: 'GBP' });
const result = processPayment(payment);
expect(result.success).toBe(false);
expect(result.error.message).toBe("Invalid amount");
});
Why this matters: The first test will fail if you refactor validateAmount into a different structure. The second test only cares about behavior - refactor all you want, as long as negative amounts are rejected.
Key insight: A separate payment-validator.ts file may be fully exercised through payment-processor behavior tests. Mirror implementation files only when the file itself is the stable public unit under test.
Problem it solves: 100% code coverage but bugs still slip through; tests that don't actually verify behavior; weak assertions that pass regardless of code correctness
What's inside:
The core insight:
Code coverage tells you what code your tests execute. Mutation testing tells you whether the tests would detect meaningful changes to that code. Complete line coverage alone does not prove that assertions protect behavior.
Concrete example from the docs:
// Production code
const calculateArea = (width: number, height: number): number => {
return width * height;
};
// Mutant: width / height
// Question: Would tests fail if * became /?
// ❌ WEAK TEST - Would NOT catch mutant
it('calculates area', () => {
expect(calculateArea(10, 1)).toBe(10); // 10 * 1 = 10, 10 / 1 = 10 (SAME!)
});
// ✅ STRONG TEST - Would catch mutant
it('calculates area', () => {
expect(calculateArea(10, 3)).toBe(30); // 10 * 3 = 30, 10 / 3 = 3.33 (DIFFERENT!)
});
Why this matters: The first test uses an identity value (1) that produces the same result for both multiplication and division. The second test uses values that would produce different results, catching the bug.
Key insight: Avoid identity values (0 for +/-, 1 for */, empty arrays, all true/false for logical ops) in tests - they let mutants survive.
Problem it solves: Overusing schemas everywhere, or not using them when needed; confusion about type vs interface
What's inside:
The boundary framework from the docs:
Ask these in order:
Concrete example from the docs:
// ❌ Schema NOT needed - pure internal type
type Point = { readonly x: number; readonly y: number };
type SearchWindow = { readonly offset: number; readonly limit: number };
// ✅ Schema REQUIRED - API response (trust boundary + validation)
const UserSchema = z.object({
id: z.string().uuid(),
email: z.string().email(),
role: z.enum(["admin", "user", "guest"]),
});
const user = UserSchema.parse(apiResponse);
Key insight: Not all types need schemas. Use schemas at trust boundaries and for validation. For internal types and utilities, plain TypeScript types are sufficient.
Critical rule: When a production schema exists and is relevant to the test's claim, import it rather than redefining the same contract. Do not invent a runtime schema solely for a test factory.
Problem it solves: Writing code before tests, refactoring too much/too little, not knowing when to abstract
What's inside:
The refactoring priority system from the docs:
🔴 Critical (Fix Now): Behavior-changing mutation, divergent copies of one business rule, control flow that obscures a high-risk path
⚠️ High Value (Fix This Session): Unclear names, magic numbers, functions coordinating multiple responsibilities
💡 Nice to Have: Minor improvements
✅ Skip: Code that's already clean, structural similarity without semantic relationship
The semantic vs structural rule (THE BIG ONE):
// ❌ DO NOT ABSTRACT - Structural similarity, DIFFERENT semantics
const validateUploadBytes = (bytes: number): boolean => {
return Number.isSafeInteger(bytes) && bytes > 0 && bytes <= 10_000_000; // Storage rules
};
const validateBatchSize = (items: number): boolean => {
return Number.isSafeInteger(items) && items > 0 && items <= 10_000; // Worker rules
};
// They'll evolve independently - abstracting couples unrelated business rules
// ✅ SAFE TO ABSTRACT - Same semantic meaning
const formatUserDisplayName = (first: string, last: string) => `${first} ${last}`.trim();
const formatCustomerDisplayName = (first: string, last: string) => `${first} ${last}`.trim();
const formatEmployeeDisplayName = (first: string, last: string) => `${first} ${last}`.trim();
// All represent "how we display person names" - same business concept
const formatPersonDisplayName = (first: string, last: string) => `${first} ${last}`.trim();
Key insight: "Duplicate code is far cheaper than the wrong abstraction." Only abstract code that shares the same semantic meaning, not just similar structure.
DRY revelation: DRY means "Don't Repeat Knowledge" not "Don't Repeat Code Structure". The shipping threshold example in the docs shows this perfectly.
Problem it solves: Accidental mutations, nested conditionals, unclear code, when to use FP abstractions
What's inside:
The immutability catalog from the docs:
// Avoid when callers share or rely on the original array
items.push(newItem); // → [...items, newItem]
items.pop(); // → items.slice(0, -1)
items[0] = updatedItem; // → items.map((item, i) => i === 0 ? updatedItem : item)
items.sort(); // → [...items].sort()
// Avoid when the object crosses an ownership boundary
user.name = "New Name"; // → { ...user, name: "New Name" }
delete user.email; // → const { email, ...rest } = user; rest
// Avoid when the nested value is part of an immutable contract
cart.items[0].quantity = 5; // → { ...cart, items: cart.items.map((item, i) => i === 0 ? { ...item, quantity: 5 } : item) }
Options objects pattern:
// Avoid: Unclear at call site
const payment = createPayment(10_000, "GBP", "card_123", "cust_456", undefined, { orderId: "789" });
// Good: Self-documenting
const payment = createPayment({
amountMinorUnits: 10_000,
currency: "GBP",
cardId: "card_123",
customerId: "cust_456",
metadata: { orderId: "789" },
});
Key insight: Prefer immutability at shared boundaries and for declared immutable values. Local mutation is acceptable when ownership is clear, the API contains it, or measurement shows it is the simpler safe implementation.
Problem it solves: Losing context after complex features, forgetting gotchas, unclear expectations
What's inside:
The 7 criteria for documenting learnings:
Document if ANY of these are true:
Documentation template from the docs:
#### Gotcha: [Descriptive Title]
**Context**: When this occurs
**Issue**: What goes wrong
**Solution**: How to handle it
```typescript
// ✅ CORRECT
const example = "correct approach";
// ❌ WRONG
const wrong = "incorrect approach";
**Key insight:** Capture learnings while context is fresh, not during retrospectives when details are lost. Ask "What do I wish I'd known at the start?" after every significant change.
---
### 🧱 Codebase Design → [skills/codebase-design](claude/.claude/skills/codebase-design/SKILL.md)
**Problem it solves:** Modules whose contracts expose their implementation, repeated caller orchestration, shallow pass-through layers, and consequential interface choices made from only one design
**What's inside (main skill + 3 references):**
- **Deep modules without god modules** — hide coherent policy, sequencing, representation, and recovery while respecting ownership, runtime, trust, and failure boundaries
- **Full interface burden** — operations, types, invariants, lifecycle, effects, errors, configuration, ordering, and relevant performance expectations
- **Leverage and locality** — make callers coordinate less and concentrate related knowledge, changes, bugs, and verification in one owner
- **Behavior-preserving inlining test** — distinguish a useful module from a pass-through without pretending its behavior can simply disappear
- **Evidence-justified seams** — retain Michael Feathers' enabling-point definition; do not equate every interface with a seam or port
- **Design It Twice** — compare genuinely different contracts for expensive-to-reverse decisions
- **Safe deepening** — characterize behavior, strengthen mutation detection, redirect callers incrementally, and replace tests only after equivalent behavior has credible preservation evidence
```text
small, stable caller burden
│
▼
cohesive module contract
│ hides
▼
policy · sequencing · representation · recovery · provider mechanics
Depth is coherent capability per unit of caller burden, not lines of code. A deep public module may compose many small private pure functions.
Problem it solves: Architecture reviews that become generic cleanup lists, over-index on file size, consolidate thin adapters, or recommend speculative redesigns without showing why the work matters now
What's inside (main skill + 2 references):
codebase-design, structure-codebase, and the appropriate test/refactoring skillsThe architecture skills deliberately own different questions:
| Question | Owning skill |
|---|---|
| Where would architecture investment pay off now? | improve-codebase-architecture |
| What coherent responsibility and caller-facing contract should the selected module own? | codebase-design |
| Where should that code live, and how should imports/packages enforce the boundary? | structure-codebase |
| How do we conserve agreed behavior while gathering same-scope evidence that total mechanism was removed rather than relocated? | reduce-system-complexity |
| Which existing capability or bespoke approach best satisfies a selected material generic need? | evaluate-existing-solutions |
This keeps candidate discovery, logical module depth, physical topology, mechanism reduction, and technology choice separate while providing deliberate handoffs between them.
Problem it solves: “Simplifications” that shorten one file while exporting branches, state, dependencies, coordination, failure handling, or operational work to another owner
What's inside (main skill + evidence template + source notes):
The skill is an attributed adaptation of Adam Bulmer's reducer, renamed to avoid Redux/functional-reducer ambiguity and narrowed so it does not collide with architecture discovery or ordinary cleanup.
Problem it solves: AI or human designs that reinvent generic machinery without checking established options—or add a popular dependency without accounting for its real lifecycle cost
What's inside (main skill + 2 evidence references + reusable decision template):
Existing software is preferred when it reduces whole-lifecycle ownership and risk. Bespoke wins when the evidence shows better fit, control, security, reliability, performance, differentiation, or lower total mechanism.
Problem it solves: Frontend and backend source trees that either hide product behavior behind technical layers or apply the same architecture template to every project
What's inside (main skill + 5 references):
hexagon/ as the complete provider-free inside, with driving/driven adapters and test interactors outsideThe core insight:
product or capability
├── hexagon/ # inside, only when ports-and-adapters is real
│ └── feature/use-case
├── adapters/ # concrete outside technology
└── testing/ # outside test interactors
Product meaning belongs at the capability root, architectural vocabulary belongs at real seams, and behavior that changes together stays close inside each zone. Folder names make claims; packages and import rules prove them.
folder-structure remains temporarily as a deprecated explicit-invocation redirect for installed users; all new guidance and documentation use structure-codebase.
Problem it solves: Business logic tangled with database queries and HTTP handlers; untestable code; changing a database requires rewriting business rules
What's inside (main skill + 7 resources):
The core insight:
// ❌ Business logic tangled with infrastructure
export async function POST(request: Request) {
const order = await db.select().from(orders).where(eq(orders.id, id)).get();
if (order.itemCount > 100) await requireManagerApproval(order); // business rule in route handler!
...
}
// ✅ Domain stays pure; adapters are thin glue
const placeOrder = (order: Order): PlaceOrderResult => {
if (order.itemCount > 100) return { success: false, reason: 'requires-approval' };
...
};
Key insight: If swapping your database requires changing business logic, the boundary is wrong. The worked example shows the full picture from glossary through domain through adapters to tests.
Problem it solves: Business rules scattered across route handlers and database queries; technical jargon instead of domain language; models that don't evolve as understanding deepens
What's inside (main skill + 7 deep-dive resources):
The decision framework from the docs:
| Question | If yes → |
|---|---|
| Does it enforce a business rule? | Domain policy; physical location follows the selected project structure |
| Does it orchestrate without owning the rule? | Application policy / use case |
| Does it format data for display? | Presentation code — purity is not sufficient |
| Does it talk to an external system? | Integration/infrastructure code; a driven adapter only in a hexagonal system |
| Is it framework glue? | Framework entrypoint; a driving adapter only in a hexagonal system |
Key insight: Domain models evolve as understanding deepens — this is expected and ideal, not a sign of failure. TDD makes this evolution safe: rename a concept, update the glossary, and the tests guide the migration.
Problem it solves: The domain's history is a first-class requirement — audit, temporal queries, replay, multiple read models over the same facts — and current-state storage throws that history away
What's inside (main skill + 8 deep-dive resources + source notes):
decide/evolve/initialState reused from the DDD skill; current state as a left fold of events; the load → rehydrate → decide → append command-handler loopUNIQUE (stream_id, version) is defense in depth, the event envelope with correlation/causation ids, and the TS/Node tooling landscape (Emmett, KurrentDB, message-db)The core insight:
// State is never stored — it is a left fold of the events:
const rehydrate = (events: readonly AccountEvent[]): AccountState =>
events.reduce(evolve, initialState);
// The write path: load → rehydrate → decide → append (with optimistic concurrency)
const decision = decide(command, rehydrate(events));
if (decision.accepted) await store.appendToStream(streamId, decision.events, { expectedVersion });
Key insight: Event sourcing persists the Decider you already have — decide produces events, evolve folds them back into state. It is the top rung of the complexity ladder: adopt it for the one or two bounded contexts whose history is part of the domain, never as a default.
Problem it solves: Inconsistent API contracts, breaking changes that surprise consumers, endpoints returning different shapes, no pagination on list endpoints, duplicate operations from retried requests
What's inside (main skill + 5 deep-dive resources + source notes):
application/problem+json format with security considerations, extension members, validation error patternsRateLimit / RateLimit-Policy), legacy header triplets, Retry-After, 429 responsesresources/api-evolution.md — Versioning strategies (Stripe's date-pinning, URL, header), Postel's Law, Sunset/Deprecation headers, enum evolution, consumer-driven contract testing (Pact)resources/api-security.md — OWASP API Security Top 10 with TypeScript code examples, authentication patterns (API keys, OAuth2+PKCE, JWT tradeoffs), security checklistresources/auth-security.md — JWT best practices (RFC 8725): algorithm allowlisting, claim validation, explicit typing, untrusted header inputs, and routing to the specialist OAuth/OIDC skillAdapted from Addy Osmani's MIT-licensed api-and-interface-design skill. Local commit 05483d71b5d93ce1acc0287e07320b21a6d120b3 records the adaptation but not the upstream revision originally imported; 7676817c12a1317454ae3898a0c5c1eacf5dd3d5 is a pinned audit baseline, not an import-revision claim. The local skill is significantly expanded with RFC 9457, idempotency, rate limiting, OWASP API Security Top 10, versioning strategies, and deprecation patterns, and aligns TypeScript examples with local conventions. See the linked source notes and MIT notice for the complete record.
Problem it solves: OAuth and OIDC systems that pass a happy-path login test while leaving issuer mix-up, code injection, redirect, replay, token-substitution, or identity-binding weaknesses undiscovered
What's inside (main skill + 5 focused references):
state, PKCE, nonce, authorization responses and codes, access and refresh tokens, and ID Tokens across creation, binding, validation, expiry, replay, and revocation(iss, sub) identity, UserInfo subject equality, multi-issuer callbacks, hybrid/JARM distinctions, and logout boundariesPrimary baseline: RFC 9700 / BCP 240 with the applicable OAuth extension and OpenID Connect specifications layered on top.
These two skills are adapted from Michael Feathers' Working Effectively with Legacy Code (2004), one of the most influential books on software testing and design. Feathers provides a specific, deliberate definition of legacy code:
Legacy code is code without tests.
Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.
-- Michael Feathers, Working Effectively with Legacy Code (2004)
This definition matters because it reframes the problem. Legacy code isn't about age, technology, or quality -- it's about the absence of a safety net. Code written yesterday without tests is legacy code. A twenty-year-old system with comprehensive tests is not.
The legacy code dilemma: You need tests to change code safely, but the code wasn't written for testability, so you can't easily write tests. Feathers' two key techniques break this catch-22:
These two skills bridge the gap between untested code and the TDD workflow that the rest of this framework assumes. Once you have seams and characterisation tests in place, the standard cycle takes over: refactor with confidence, then replace characterisation tests with proper behavior-driven tests over time.
How they fit the existing workflow:
Untested code
↓
finding-seams → Break dependencies to make code testable
↓
characterisation-tests → Document actual behavior as a safety net
↓
tdd / testing → Write proper behavior-driven tests for new changes
↓
refactoring → Improve structure while behavior tests stay green
↓
mutation-testing → At PR readiness, verify the accumulated change once
Problem it solves: Code has dependencies you can't test around -- direct construction of collaborators, static/global calls, tight coupling to databases or external services, singleton access patterns
What's inside (main skill + 3 deep-dive resources):
vi.mock() -- last resort), object seams (legacy OOP only)new)Concrete example from the docs:
// BEFORE -- direct dependency, no seam
const scheduleDelivery = (delivery: Delivery): DeliveryPlan => {
const transitDays = fetchTransitDays(delivery.region); // calls external service
return { ...delivery, totalDays: delivery.preparationDays + transitDays };
};
// AFTER -- function parameter seam (enabling point: the argument list)
type TransitDaysResolver = (region: string) => number;
const scheduleDelivery = (
delivery: Delivery,
resolveTransitDays: TransitDaysResolver = fetchTransitDays, // default = production behavior
): DeliveryPlan => {
const transitDays = resolveTransitDays(delivery.region);
return { ...delivery, totalDays: delivery.preparationDays + transitDays };
};
// Test -- pass a fake at the seam
const delivery = { ...testDelivery, preparationDays: 3 };
const result = scheduleDelivery(delivery, () => 2);
expect(result.totalDays).toBe(5);
Key insight: In functional TypeScript, functions-as-values provide natural built-in seams everywhere. Every function parameter that accepts a callable is both a seam and its own enabling point -- no mocking framework required.
Problem it solves: Modifying code with no tests and no specifications; needing to understand what code does before changing it; facing the legacy code dilemma where you need tests to refactor safely
What's inside (main skill + 2 deep-dive resources):
N/A plus proportionate alternate evidencetoMatchInlineSnapshot()), combination testing, approval testing, coverage-guided characterisationConcrete example from the docs:
// Step 1: Write an assertion you know will fail
it('characterises formatPrice', () => {
expect(formatPrice(1999)).toBe('PLACEHOLDER');
});
// Test output: expected 'PLACEHOLDER' but received '$19.99'
// Step 2: Change test to expect actual behavior
it('characterises formatPrice', () => {
expect(formatPrice(1999)).toBe('$19.99');
});
Key insight: Characterisation tests have no moral authority -- they don't assert correctness, they detect change. They are temporary scaffolding: once you understand the code and have proper behavior-driven tests, the characterisation tests can be retired. Like "walking into a forest and drawing a line -- after you own that area, you can develop it."
Problem it solves: Tasks that need several installed skills applied at once — multi-lens reviews, multi-angle audits, migration sweeps — collapsing into one overloaded context where every lens goes blunt
What's inside (main skill + 3 references):
topologies.md) — fan-out/fan-in, pipeline, adversarial verify, dedup barrier, judge panel, loop-until-drynode-design.md) — node brief template, skill-resolution rules, evidence bar, severity taxonomyexecution.md) — Workflow tool, Agent-tool fan-out, or labelled sequential degraded modepanel-review is the flagship instance of this skill; double-check remains the tool for a single independent second opinion.
Problem it solves: code reviews that hardcode one generic checklist instead of composing the architecture skills your project actually uses, that can only run once a PR exists, and readiness evidence checked nowhere in particular
What's inside (main skill + 3 references):
/panel-review [target] [lens skills...] reviews any boundary at any phase: uncommitted work (wip), the current branch, a stacked layer, or a PR (#123); every lens is an installed skill (hexagonal-architecture, domain-driven-design, structure-codebase, ...), each running as its own sub-agent with an isolated contextlenses.md) — defaults (typescript-strict, functional, testing + built-in readiness and quality lenses) plus project-trait auto-detection; add or remove lenses, only, thorough, and post tokenspr-readiness.md) — change-path classification and the mutation-evidence freshness model that gate agent-led PR creationworkflow-template.md) — per-lens verdicts, confirmed findings with file:line evidence, surfaced cross-lens conflicts, one recommendationBuilt on graph-engineering for the generic node/topology/runtime machinery. There is deliberately no /pr command anymore: PR creation is ordinary agent-led work gated by the readiness reference above.
Problem it solves: UI that looks generic or "AI-generated", inconsistent design quality, lack of systematic design methodology
What's inside (1 core skill + 9 reference files + 17 steering commands):
A comprehensive frontend design vocabulary and quality system from Paul Bakaus, replacing the original frontend-design skill with a much deeper methodology. The installer selects the declared skill names from reviewed commit 5d10bc8. Licensed under the Apache 2.0 License. Full documentation at impeccable.style/skills.
Every impeccable skill checks for project design context before doing work. Without it, output is generic. Run this once per project:
/impeccable teach
This interviews you about your target audience, use cases, and brand personality, then saves the context to .impeccable.md in your project root. All design skills read this file automatically.
If you skip this step, any design command will prompt you to run /impeccable teach first.
For new features that need both UX planning and implementation:
/impeccable craft [feature description]
This runs a structured 5-step flow:
Shape (/shape) - Produces a design brief through a discovery interview: purpose, content, design goals, constraints, anti-goals. No code is written. The brief becomes the blueprint for every implementation decision.
Load references - Based on the brief's needs, relevant deep-dive guides are loaded:
typography.md - OpenType features, modular scales, font pairing, web font loadingcolor-and-contrast.md - OKLCH color model, tinted neutrals, dark mode, accessibilityspatial-design.md - 4pt spacing systems, grids, container queries, optical adjustmentsmotion-design.md - Easing curves (no bounce/elastic), staggering, reduced motioninteraction-design.md - 8 interactive states, focus rings, forms, modals, popoversresponsive-design.md - Mobile-first, input method detection, safe areasux-writing.md - Button labels, error formulas, empty states, translation planningBuild - Implements the feature following the brief, working through structure → layout → typography → interactive states → edge cases → motion → responsive.
Visual iteration - Reviews the live result against the brief and the AI Slop Test. Checks every state (empty, error, loading, edge cases). Iterates until the result matches the design intent.
Present - Shows the feature, walks through key states, explains design decisions that connect back to the brief, and asks for feedback.
You can also run /shape independently when you want UX planning without implementation.
Use these any time to make specific improvements. Each one checks for design context first.
Planning & Adaptation:
| Command | What it does |
|---|---|
/shape | Plan UX/UI before code. Produces a structured design brief through a discovery interview. Does NOT write code. |
/adapt | Adapt designs across screen sizes, devices, contexts, or platforms. Covers mobile, tablet, desktop, print, and email. |
Typography & Color:
| Command | What it does |
|---|---|
/typeset | Fix typography: font selection (with a 4-step process that fights AI defaults), hierarchy, readability, OpenType features, weight consistency. |
/colorize | Add strategic color to monochromatic designs using the OKLCH color model. Covers semantic color, accent application, surfaces, data visualization. |
Layout & Motion:
| Command | What it does |
|---|---|
/layout | Fix layout, spacing, and visual rhythm. Covers spacing systems, grid/flexbox selection, card grid monotony, depth/elevation, optical adjustments. |
/animate | Add purposeful animations and micro-interactions. Specific easing curves and timing recommendations. Covers entrance animations, state transitions, feedback, delight moments. |
Content & Copy:
| Command | What it does |
|---|---|
/clarify | Improve UX copy: error messages, form labels, buttons/CTAs, help text, empty states, success messages, loading states, confirmation dialogs. |
Quality & Review:
| Command | What it does |
|---|---|
/critique | Full UX design review. Two-phase assessment using Nielsen's 10 heuristics (scored 0-40), cognitive load analysis, and persona-based testing across 5 user archetypes. Produces a scored report with severity ratings (P0-P3) and actionable recommendations mapped to other steering commands. |
/audit | Technical quality checks. Scores 5 dimensions (Accessibility, Performance, Theming, Responsive, Anti-Patterns) on a 0-4 scale. Produces actionable recommendations. |
/polish | Final quality pass. Comprehensive checklist covering design system consistency, visual alignment, typography refinement, color/contrast, interaction states, micro-interactions, content/copy, edge cases, responsiveness, performance, code quality. |
/harden | Production-ready hardening. Text overflow/wrapping, i18n (RTL, CJK, translations), error handling, edge cases, onboarding/first-run, input validation, accessibility resilience, performance resilience. |
Intensity Tuning:
| Command | What it does |
|---|---|
/bolder | Amplify designs that feel too safe or boring. Typography amplification, color intensification, spatial drama, visual effects, motion, composition boldness. Includes explicit warnings against falling into AI slop traps. |
/quieter | Tone down designs that feel too aggressive. Color refinement, visual weight reduction, simplification, motion reduction, composition refinement. |
Simplification & Personality:
| Command | What it does |
|---|---|
/distill | Strip to essence. Information architecture, visual, layout, interaction, content, and code simplification. |
/delight | Add moments of joy and personality. Micro-interactions, personality in copy, illustrations, satisfying interactions, celebration moments, easter eggs. |
/optimize | Frontend performance improvements. Loading, rendering, animation, framework optimization, network, Core Web Vitals (LCP, INP, CLS). |
/overdrive | Technically extraordinary effects. Shaders, spring physics, scroll-driven reveals, View Transitions API, WebGL/WebGPU, virtual scrolling. Proposes directions before building. |
Once you have established patterns in your codebase:
/impeccable extract [target]
This discovers your design system structure, identifies components used 3+ times, hard-coded values that should be tokens, and inconsistent variations. It then extracts improved, reusable versions with proper TypeScript types, accessibility, and documentation.
/impeccable teach Set up design context (once per project)
│
▼
/shape [feature] Plan UX/UI - produces a design brief
│
▼
/impeccable craft [feature] Build with full methodology (or build manually)
│
▼
/critique UX review with Nielsen's heuristics (scored 0-40)
│
▼
/polish Final quality pass
│
▼
/harden Production hardening (i18n, edge cases, overflow)
│
▼
/impeccable extract Pull reusable components into design system
Use steering commands (/typeset, /colorize, /layout, /animate, etc.) at any point during development for targeted improvements.
Context Gathering Protocol - Every design skill checks for project context before proceeding. It looks for a Design Context section in your loaded instructions, then checks .impeccable.md in the project root, and if neither exists, forces /impeccable teach. This ensures you never get generic output.
AI Slop Test - A structured checklist built into the craft flow to detect generic AI aesthetics: purple-to-blue gradients, Inter/Roboto font defaults, glassmorphism, bounce/elastic easing, dark mode with neon accents, side-stripe borders, gradient text. The skill actively fights these patterns.
Absolute Bans - Two CSS patterns are never acceptable: side-stripe borders (border-left/border-right > 1px on cards/callouts) and gradient text (background-clip: text with gradients). These are treated as hard failures, not style preferences.
Reference Library - 9 deep-dive reference files loaded on-demand when relevant. These contain specific CSS examples, technique catalogs, and decision frameworks for typography (OpenType, font loading, modular scales), color (OKLCH, tinted neutrals, dark mode), spatial design (4pt grid, container queries), motion (easing curves, staggering, reduced motion), interactions (8 states, focus rings, popovers), responsive design (input method detection, safe areas), and UX writing (error formulas, translation planning).
Attribution: impeccable by Paul Bakaus (GitHub), licensed under Apache 2.0. Based on Anthropic's original frontend-design skill. See the pinned NOTICE for full attribution.
Problem it solves: Plans and designs that sound plausible but need ruthless pre-implementation questioning before they become expensive to change
What's inside: A focused external skill from Matt Pocock's skills repo that interviews you one question at a time until the plan, design tree, and decision dependencies are clear.
Use it when you want the assistant to:
Example prompt:
Use grill-me on this checkout refactor plan before I start implementation.
Use find-gaps when you want confirmed answers written back into an existing plan, acceptance criteria, or mock spec. When grill-me is not installed, use the first-party specification skill's one-question protocol.
Unlike typical style guides, these skills provide:
Most valuable insight across all skills: Abstract based on semantic meaning (what code represents), not structural similarity (what code looks like). This single principle prevents most bad abstractions.
One of the most valuable additions is a boundary framework for when runtime schemas are required:
// ✅ Schema REQUIRED - Trust boundary (API response)
const UserSchema = z.object({ id: z.string().uuid(), email: z.string().email() });
const user = UserSchema.parse(apiResponse);
// ❌ Schema OPTIONAL - Pure internal type
type Point = { readonly x: number; readonly y: number };
Ask yourself:
→ Read the agents documentation
Nine specialized sub-agents that run in isolated context windows to enforce CLAUDE.md principles and manage development workflow:
tdd-guardian - TDD Compliance EnforcerUse proactively when planning new or changed behavior, or reactively to verify that behavior followed TDD. Pure preservation work routes to refactor-scan or reduce-system-complexity instead.
What it checks:
Example invocation:
You: "I just implemented payment validation. Can you check TDD compliance?"
Claude Code: [Launches tdd-guardian agent]
Output:
ts-enforcer - TypeScript Strict Mode EnforcerUse before commits or when adding new types/schemas.
What it checks:
any; narrow unavoidable interop is allowedtype/interfaceIncludes the nuanced schema-first framework:
Example invocation:
You: "I've added new TypeScript code. Check for type safety violations."
Claude Code: [Launches ts-enforcer agent]
Output:
refactor-scan - Refactoring Opportunity ScannerUse after GREEN establishes a passing behavior-test baseline (the applicable REFACTOR step in the change workflow). Mutation testing verifies the accumulated result later at PR readiness.
What it analyzes:
What it doesn't recommend:
Example invocation:
You: "My tests are passing, should I refactor anything?"
Claude Code: [Launches refactor-scan agent]
Output:
docs-guardian - Documentation Quality GuardianUse proactively when creating documentation or reactively to review and improve existing docs.
What it ensures:
What it checks:
Example invocation:
You: "I need to write a README for this feature."
Claude Code: [Launches docs-guardian agent]
You: "Can you review the documentation I just wrote?"
Claude Code: [Launches docs-guardian agent]
Output:
technical-writing guidance and page joblearn - Durable Learning RouterUse proactively when discovering gotchas, or reactively after completing complex features.
What it routes:
Example invocation:
You: "I just fixed a tricky timezone bug. Let me document this gotcha."
Claude Code: [Launches learn agent]
Output:
CLAUDE.md only when it is the declared owner of local working policyprogress-guardian - Progress GuardianUse proactively when starting significant vertical-slice work, or reactively to track progress through plan slices.
What it manages:
plans/<name>.md only as the fallback)Example invocation:
You: "I need to implement OAuth with JWT tokens and refresh logic"
Claude Code: [Launches progress-guardian to update the repository plan owner]
You: "Tests are passing now"
Claude Code: [Launches progress-guardian to update plan and ask for commit approval]
Output:
Key distinction: Plan files are temporary. Move lasting truth to its actual owner before closing the plan; Git preserves plan history.
Related skill: Load planning skill for detailed incremental work principles.
adr - Architecture Decision RecordsUse proactively when making significant architectural decisions, or reactively to document decisions already made.
What it documents:
When to use:
Example invocation:
You: "Should we use BullMQ or AWS SQS for our job queue?"
Claude Code: [Launches adr agent to help evaluate and document]
You: "I decided to use PostgreSQL over MongoDB"
Claude Code: [Launches adr agent to document the rationale]
Output:
docs/adr/ only as a fallback when an ADR was requested and no owner existsKey distinction: ADRs record accepted architectural choices and their
trade-offs; learn routes operational knowledge to whatever source owns it.
use-case-data-patterns - Use Case to Data Pattern AnalyzerUse proactively when implementing features, or reactively to understand how features work end-to-end.
What it analyzes:
Example invocation:
You: "How does the checkout flow work from user click to database?"
Claude Code: [Launches use-case-data-patterns agent]
Output:
The current agent is an original rewrite. Its source notes disclose an earlier unlicensed copy and the unresolved published-history issue.
twelve-factor-audit - Twelve-Factor Compliance AuditorUse when onboarding to a service project, assessing deployment readiness, or reviewing infrastructure patterns.
What it audits (all 12 factors):
| Factor | What It Checks |
|---|---|
| I. Codebase | Single repo, multiple deploys |
| II. Dependencies | Explicit declaration, lockfile committed |
| III. Config | External runtime injection, centralized validation, no hardcoded secrets |
| IV. Backing Services | Injected platform resource bindings (URLs are one common form) |
| V. Build/Release/Run | Distinct build, release configuration, and run stages in the declared platform workflow |
| VI. Processes | Disposable execution with durable state externalized where the workload requires it |
| VII. Port Binding | Self-contained service binding or the platform's equivalent handler contract |
| VIII. Concurrency | Scale through the platform's applicable process, function, job, or worker units |
| IX. Disposability | Fast start and bounded graceful shutdown; probes and draining only where the platform owns them |
| X. Dev/Prod Parity | Minimized time, personnel, tooling, and backing-service contract differences |
| XI. Logs | Structured platform-captured process streams, no file transports |
| XII. Admin Processes | One-off processes run from the same release with the same injected config |
Example invocation:
You: "Audit this service for 12-factor compliance"
Claude Code: [Launches twelve-factor-audit agent, produces compliance report]
Output:
Related skill: Load twelve-factor skill for detailed 12-factor patterns.
→ Browse the commands directory
Three slash commands that encode common workflows into single invocations:
| Command | Purpose | When to Use |
|---|---|---|
/setup | Authorized project onboarding — detect tech stack, create project guidance, hooks, and commands | Only when the user explicitly requests onboarding/config generation |
/plan | Create a plan document on a branch with a PR — no code changes | When planning work before implementation |
/continue | Continue after a merged independent PR or advance/sync a stack | Moving to the next slice or dependent layer |
PR review is not a command: the panel-review skill provides /panel-review, and PR creation is ordinary agent-led work gated by that skill's PR-readiness reference.
This is the delivery lifecycle for a feature. Project setup is a separate, one-time action used only when explicitly requested.
/setup → Detects tech stack, creates .claude/CLAUDE.md, hooks, and commands
When explicitly onboarding: /setup replaces Claude Code's built-in /init. With authorization to create project configuration, it analyses the TypeScript config, CI pipeline, DDD patterns, and test runner, then creates:
.claude/CLAUDE.md with exact build/test/lint/typecheck commands.claude/settings.json with PostToolUse hooks (auto-typecheck after file edits)Code reviews need no project-generated automation: /setup points reviews at the global panel-review skill, which auto-detects project traits (hexagonal, DDD, React, ...) and composes matching skill lenses at review time.
/plan → Uses the repository's plan owner; falls back to plans/ + a plan-only PR when none is declared
Why before code: Planning in a separate phase prevents the most common friction point — Claude jumping straight to implementation before the approach is agreed. The plan becomes a PR you can review and approve before any code is written. Each slice defaults to one trunk-based PR; stack-pull-requests may add review layers inside one slice or link hard-/flow-lineage vertical slices when work should proceed before lower reviews merge.
LOAD → Behavior change: tdd + testing + refactoring; preservation: applicable testing/refactoring/reduction skills
RED → For changed behavior, write a failing behavior test (tdd-guardian verifies test-first)
GREEN → Write minimum code to pass (ts-enforcer checks type safety)
REFACTOR / REDUCE → Run only the applicable assessment and any claimed reduction gates
COMMIT → Wait for approval, then commit
Why this order: RED-GREEN-REFACTOR keeps implementation feedback fast. The mutation harness does not run after each test, increment, refactor, or commit; it runs once when the current review boundary is otherwise PR-ready. Pure refactors or reductions enter at a passing proportionate-evidence path rather than inventing RED or structural mutants. Tests stay with the earliest PR boundary that owns their behavior.
Before creating any PR, work through the readiness gate (owned by the panel-review skill's PR-readiness reference), then review:
PR readiness gate →
1. phase complete → Verify implementation and applicable refactoring/reduction work are finished
2. mutation gate → Run mutation testing once against trunk or the immediate stack parent, or record explicit `N/A` plus proportionate alternate evidence
3. survivor handling → Address valuable survivors; re-run focused/diff mutation checks inside the same gate
4. remaining checks → Run typecheck + lint + test + build, then create the PR (ordinary agent-led work — no dedicated command)
/panel-review → Multi-agent review of the boundary — every lens is an installed skill, findings adversarially verified into one ranked report
Why evidence at PR readiness: One focused run per review boundary verifies that the completed implementation and refactoring would catch behavioral faults without taxing every inner TDD loop. A stacked boundary uses its immediate parent as the review base; the top proves the cumulative criteria for every included slice. When the affected mechanism is unreachable, declarative, contractual, integrational, or operational, an explicit N/A plus proportionate alternate evidence is more honest. The /panel-review readiness lens re-checks this same gate adversarially during review.
Independent slice → /continue updates trunk and creates the next independent branch
Stack → /continue adds a dependent layer or slice from the current top, or syncs after lower merges
Why a command for this: Independent slices return to trunk. Stacked PRs keep an explicit parent branch until bottom-up merge and sync, whether a PR owns a whole dependent slice or an intra-slice layer. /continue reads the delivery map before choosing either topology.
learn agent → Routes durable learnings to their actual owners
adr agent → Documents significant architectural decisions
docs-guardian → Updates user-facing documentation
Why at the end: Use learn to route durable facts to their actual owners,
adr for accepted architectural decisions, and docs-guardian only for
maintained pages affected by the change.
Quick navigation by situation:
| Your Situation | Recommended Option |
|---|---|
| "I want this on all my personal projects" | Option 1: Global Install |
| "I'm setting this up for my team" | Option 2: Project-specific install |
| "I just want to try the guidelines first" | Option 3: CLAUDE.md only |
| "I need to customize for my team's standards" | Option 4: Fork and customize |
Once installed, the normal delivery lifecycle is: /plan → single-PR or stack
delivery → fast RED-GREEN-REFACTOR or preservation increments → end-of-boundary
evidence gate from the panel-review skill's PR-readiness reference → agent-led PR
creation and /panel-review for review → /continue → repeat. /setup is
separate and runs only for explicitly authorized project onboarding. See the
Recommended Flow for details.
Agent invocation examples:
Agents are invoked implicitly (Claude detects when to use them) or explicitly:
Now choose your installation method:
Best for: Individual developers who want consistent practices across all projects
Why choose this:
npx [email protected] list -g; reviewed installer reruns back up selected skills before replacement, and git pull updates the checkoutInstall from an inspected, immutable checkout:
git clone https://github.com/citypaul/.dotfiles.git citypaul-dotfiles
cd citypaul-dotfiles
INSTALLER_REF=$(git rev-parse HEAD)
git switch --detach "$INSTALLER_REF"
less install-claude.sh # inspect before execution
./install-claude.sh --version "$INSTALLER_REF"
The checkout is downloaded but not executed until you inspect it. Capturing
HEAD before execution pins first-party downloads and skill installation to
that exact commit. Review source changes before choosing a newer commit; do not
pipe a moving main script into a shell.
Install options:
./install-claude.sh # Install everything (CLAUDE.md + skills + commands + agents)
./install-claude.sh --claude-only # Install only CLAUDE.md
./install-claude.sh --skills-only # Install only skills (via skills.sh)
./install-claude.sh --no-agents # Install without agents
./install-claude.sh --no-external # Skip all external community skills, including clarity and simple-english
./install-claude.sh --no-impeccable # Skip impeccable design skills only
./install-claude.sh --no-ponytail # Skip the ponytail plugin (https://ponytail.dev, Claude Code + Codex)
./install-claude.sh --with-opencode # Also target OpenCode for skills + install OpenCode config
./install-claude.sh --agent codex --agent cursor # Also install skills for Codex and Cursor (repeatable)
./install-claude.sh --skills-only --no-claude-code \ # Install skills ONLY for a non-Claude agent
--agent codex
./install-claude.sh --version <reviewed-tag-or-commit> # Pin first-party artifacts; moving refs are rejected
Targeting other agents:
Skills.sh supports 40+ coding agents (Claude Code, Cursor, Codex, Copilot, OpenCode, Gemini CLI, Cline, Continue, Windsurf, …). Use --agent <name> (repeatable) to add extra targets alongside the default claude-code. Use --no-claude-code with --agent to target only non-Claude agents. After install, npx [email protected] list -g shows which skills each agent can see.
The skills CLI installs the complete skill directory, not just SKILL.md. Companion files such as agents/openai.yaml, references/, scripts/, and assets/ therefore travel with the skill. For structure-codebase, Codex receives its interface metadata at agents/openai.yaml without a separate installation step.
This installer passes --copy to the pinned CLI explicitly. The destination
depends on the selected agents:
.agents/skills) gets a copy under ~/.agents/skills/<name>/; that shared path is the agent's read path.~/.claude/skills/<name>/.All three layouts expose the same complete bundle. Include --agent codex when Codex should discover and use the skill (the installer targets Claude Code only by default).
Repeat installs are recoverable. Before invoking the CLI, the installer
copies every existing selected skill to an adjacent
skills.before-install.<random>/ directory. The pinned CLI can then refresh
those reviewed names without unrelated skills or files blocking the install.
What gets installed:
~/.claude/CLAUDE.md (~160 lines - lean core principles)~/.claude/skills/ — installed via skills.sh with npx [email protected] add; every source revision and selected skill name is explicit:
grill-me one-question-at-a-time plan interrogation, and writing-for-agents for documents agents consumeInspecting skills after install:
npx [email protected] list -g # List installed skills
npx [email protected] find <query> # Discover more skills on skills.sh
The CLI's update and remove commands mutate destinations without this installer's automatic selected-skill backup. Do not run them as routine maintenance: first back up the exact targets, prove they are CLI-owned, and review the resolved source bytes. The conservative path is a reviewed installer rerun. To update a pinned source, review its diff, change the exact commit in this repository, and run the installer tests before release.
Requires Node.js for skills install (so
npxis available). Use--claude-onlyor--agents-onlyif you don't have Node installed.
The installer used to curl every SKILL.md straight from this repo into ~/.claude/skills/. It worked, but it was Claude-Code-only and the file list lived inside the installer. Switching skill installs to the pinned skills.sh CLI changes four things:
Multi-agent portability. The same skills are now installable against 40+ coding agents — Claude Code, Cursor, Codex, GitHub Copilot, OpenCode, Gemini CLI, Cline, Continue, Windsurf, and more — via the -a <agent> flag. Using these skills from a non-Claude tool no longer requires a Claude-specific copy step. --with-opencode is now just an extra -a opencode on the existing install instead of a second duplicated tree.
Inspection and discovery commands. npx [email protected] list -g records what the shared lock knows, and find <query> surfaces skills beyond this repo. Mutating update/remove commands bypass this installer's automatic backup, so they require an explicit backup, ownership check, and source review rather than being advertised as safe routine lifecycle operations.
Explicit target copies. The installer passes --copy, so installation
writes only the selected agents' resolved global targets. The shared lock
records source metadata but does not prove ownership of any destination.
Installer doesn't grow with the skill list. Three curl loops with hard-coded file lists (including every resources/*.md and references/*.md) collapsed to a small set of pinned CLI calls. Adding a new skill to claude/.claude/skills/ no longer requires a matching installer edit — the CLI discovers it.
Recoverable repeat installs. Setup copies existing selected skill names to an adjacent backup before replacement. Unselected content stays untouched, and a failed CLI install leaves the previous copy available for recovery.
Trade-offs:
npx. --claude-only and --agents-only still work without it.[email protected]. Every repository source is pinned to a commit, and the installer hands each pin to the CLI as a GitHub commit-archive URL (the CLI's #<git-ref> syntax clones with git clone --branch, which rejects commit SHAs). Every selected skill name is declared before installation; source changes require an explicit pin update and re-audit. --version pins first-party skills, CLAUDE.md, commands, and agents to the same reviewed release/commit.v3.x tag as everything else in this repo; now they roll independently. Use npx [email protected] list -g --json if you want to snapshot what's installed.CLAUDE.md, slash commands, and Claude-Code agents are still curled directly from this repo — they aren't skills and aren't part of the skills.sh ecosystem.
Optional: Enable GitHub MCP Integration
For enhanced GitHub workflows with native PR/issue integration:
Step 1: Create a GitHub Personal Access Token
Go to https://github.com/settings/tokens and create a token:
For Fine-grained token (recommended):
For Classic token:
repo scope (full control of private repositories)Step 2: Add the MCP Server
claude mcp add --transport http --scope user github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer YOUR_GITHUB_TOKEN"
Replace YOUR_GITHUB_TOKEN with the token you created.
Step 3: Verify Connection
Restart Claude Code and run /mcp to verify the GitHub server shows as connected.
What this enables:
@github:pr://123 - Reference PRs directly in prompts@github:issue://45 - Reference issues directly in promptsThese guidelines also work with OpenCode - an open source AI coding agent. All slash commands, agents, and skills work in both Claude Code and OpenCode.
How OpenCode Integration Works:
OpenCode doesn't automatically read ~/.claude/ files. It uses different discovery paths:
| Component | Claude Code | OpenCode | Integration |
|---|---|---|---|
| Instructions | ~/.claude/CLAUDE.md | ~/.config/opencode/AGENTS.md | opencode.json instructions field |
| Skills | ~/.claude/skills/ | Native compatibility discovery | Loaded on demand; never injected globally through instructions |
| Commands | Pinned repository manifest | ~/.config/opencode/command/ (singular) | Declared files copied with frontmatter converted |
| Agents | Pinned repository manifest | ~/.config/opencode/agent/ (singular) | Declared files copied with frontmatter converted |
The installer projects only its declared command and agent manifests from the pinned repository source. It strips incompatible Claude Code frontmatter fields and backs up every pre-existing OpenCode destination before replacement; it never enumerates unrelated local ~/.claude files. OpenCode discovers skills and projected agents through their native mechanisms rather than injecting every definition into each session.
Installation:
# From the inspected detached checkout in Option 1
INSTALLER_REF=$(git rev-parse HEAD)
./install-claude.sh --version "$INSTALLER_REF" --with-opencode
# OpenCode config only (if CLAUDE.md is already installed)
./install-claude.sh --version "$INSTALLER_REF" --opencode-only
What gets installed:
~/.config/opencode/opencode.json - Configuration that enables built-in LSP servers, including TypeScript for projects with a TypeScript dependency, and loads only ~/.claude/CLAUDE.md as global instructions~/.config/opencode/command/ - Declared slash-command manifest from the pinned source (frontmatter converted)~/.config/opencode/agent/ - Declared agent manifest from the pinned source (frontmatter converted)Manual Installation:
Use the inspected pinned installer above. Do not replace it with a glob-based copy: the explicit manifest, transformation, and per-destination backup are one reviewed operation and prevent unrelated local files from being projected or existing OpenCode files from being silently overwritten.
Learn more:
Best for: Team projects where you want full control and project-specific configuration
Why choose this:
For full enforcement in a specific project, install both CLAUDE.md and the agents:
# From the inspected detached checkout in Option 1, while in your project root
mkdir -p .claude/agents .claude/commands
cp /path/to/citypaul-dotfiles/claude/.claude/CLAUDE.md .claude/
cp /path/to/citypaul-dotfiles/claude/.claude/agents/*.md .claude/agents/
cp /path/to/citypaul-dotfiles/claude/.claude/commands/*.md .claude/commands/
Best for: Quick evaluation or when you want everything in one standalone file
Why choose this:
Important: This downloads the historical v1.0.0 monolithic version. The current package (4.9.0) uses the v3 architecture generation: a self-contained core with skills loaded on demand. For project-level use, prefer an inspected current release or commit rather than the obsolete v3.0.0 tag.
Download the complete single-file version:
# In your project root
mkdir -p .claude
curl -o .claude/CLAUDE.md https://raw.githubusercontent.com/citypaul/.dotfiles/v1.0.0/claude/.claude/CLAUDE.md
This gives you the complete guidelines (1,818 lines) in a single standalone file.
Best for: Teams with specific standards who need full customization control
Why choose this:
How to customize:
Current package release (v4.9.0): Uses the v3 skills-based architecture with lean CLAUDE.md (~160 lines), auto-discovered skills, slash commands, and planning workflow.
The labels below describe historical architecture generations, not the current package version:
Legacy version (v1.0.0): Single monolithic file (1,818 lines, all-in-one)
| Version | Architecture | Context Size | Best For |
|---|---|---|---|
| v3.0.0 | Skills (on-demand) | ~160 lines always | Context-efficient, truly lean |
| v2.0.0 | @docs/ imports | ~3000 lines always | Full docs always loaded |
| v1.0.0 | Single file | ~1800 lines always | Standalone, no dependencies |
The installer derives an exact commit from an inspected checkout, or requires an
explicit reviewed release/commit with --version. It rejects moving refs and
uses exact source revisions plus declared skill names; review and test every pin
change before release.
clarity, simple-english, web quality, Next.js, React, design, planning, skill-authoring, SEO, Herdr, and Skill Doctor workflows — all installed via skills.sh for multi-agent portability.This system is based on several key insights:
AI needs explicit context - Vague principles → inconsistent results. Decision frameworks → reliable outcomes.
Quality gates prevent drift - Automated checking catches violations before they become habits.
Refactoring needs priority - Not all improvements are equal. Critical/High/Nice/Skip classification prevents over-engineering.
Semantic beats structural - Abstract based on meaning (business concepts), not appearance (code structure).
Route learning while fresh - Capture evidence while context is available, then put durable knowledge with the source that can keep it true.
Explicit "no refactoring" - Saying "code is already clean" prevents the feeling that the refactor step was skipped.
evals/skills is a promptfoo
harness that runs the real Claude Code agent (via the Claude Agent SDK provider) with
this bundle mounted and measures two things:
skill-used), which neighbour stays quiet
(not-skill-used), and that trivial asks load nothing. This is where a description
earns its place.COVERAGE.md is the authoritative suite list.cd evals/skills && pnpm install
./run.sh # routing, ~10 minutes, uses your Claude Code login
./run-quality.sh tdd # replace tdd with any suite in COVERAGE.md
pnpm exec promptfoo view # every transcript and per-metric score
Neither is part of npm test: they spend tokens and sample non-deterministic
decisions. The offline guards test/skill-evals-routing.sh and
test/skill-evals-quality.sh keep both harnesses wired to real skills and graders.
When a case fails, the fix is in the skill — a description line for routing, the
body for quality — and the case stays as the regression check.
See the suite's README for how to read a failure, add a case,
and add a quality suite for another skill.
The guidance and its owning sources evolve from real usage. The learn agent
routes valuable evidence instead of building a parallel knowledge dump:
This keeps each fact with one accountable owner while preserving useful learning from completed work.
Personal machine setup is separate from the public skills installer.
Use setup-dotfiles.sh for your shell and application configuration; keep using
install-claude.sh and its existing options for skills. The personal setup does
not install or replace Claude, Codex or OpenCode settings or skills.
Install Homebrew first, then:
brew install git
git clone https://github.com/citypaul/.dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./setup-dotfiles.sh
exec zsh
sudo apt update
sudo apt install git
git clone https://github.com/citypaul/.dotfiles.git ~/.dotfiles
cd ~/.dotfiles
./setup-dotfiles.sh
exec zsh
The script detects macOS with uname -s and Ubuntu/Debian through
/etc/os-release. Other systems are rejected before dependency installation.
On Linux, run it as your normal user: it uses sudo for Apt when needed.
On Apple Silicon, existing Homebrew packages are not upgraded.
Both paths install Git, GNU Stow, Zsh, tmux, GnuPG/Pinentry, Fzf, Jq, Bat,
Python 3 and Zsh autosuggestions/syntax highlighting. Debian/Ubuntu also gets
python3-venv. Package installation requires network access and may prompt
for your sudo password. Then the script links the configuration and prints
exec zsh to start using it. It does not change your login shell automatically.
If you already have this checkout, update it instead of cloning again:
cd ~/.dotfiles
git pull --ff-only
./setup-dotfiles.sh
exec zsh
To skip dependency installation or select individual configurations:
# Dependencies already installed; just link the configurations
./setup-dotfiles.sh --skip-deps
# Only configure the shell and tmux
./setup-dotfiles.sh --skip-deps zsh tmux
# List available packages and options
./setup-dotfiles.sh --help
The checkout can live anywhere; links always target your home directory.
XDG application configurations honour XDG_CONFIG_HOME (default ~/.config).
Keep the checkout in place because the installed files are symlinks into it.
Rerunning setup refreshes links without appending settings or completions.
Setup checks every selected package for conflicts before linking any dotfiles.
It never overwrites or automatically adopts existing configuration files. If
Stow reports a conflict, move the named file to your own backup location and
rerun. For example, if .zshrc conflicts:
# -i asks before overwriting an existing backup
mv -i ~/.zshrc ~/.zshrc.before-dotfiles
./setup-dotfiles.sh
A failed preflight may leave empty configuration directories, but does not move
or replace your files. Existing links from another checkout also need to be
removed or unstowed from that checkout before switching to this one.
The older install.sh is retained unchanged for compatibility; use
setup-dotfiles.sh for the supported macOS/Linux personal setup.
| Package | Configuration |
|---|---|
zsh | Shell aliases, completions and optional tool integrations |
tmux | Terminal multiplexer configuration |
gnupg | Shared GPG preferences, system Pinentry and passphrase caching |
alacritty | Terminal appearance and keybindings |
zellij | Terminal multiplexer keybindings and theme |
ghostty | Shared XDG configuration plus macOS preferences on Macs only |
herdr | Terminal workspace manager preferences |
All seven packages are selected by default. Application configuration does not install the corresponding desktop application. Install Alacritty, Ghostty, Zellij or Herdr separately when you want to use them; Herdr agent integrations also need their own installation.
Starship, Zoxide, Eza, Node/NVM, pnpm, editors and the development tools referenced
by convenience aliases are optional. The shell keeps working without them;
ls and cat use the system tools when replacements are unavailable, and
Debian/Ubuntu's batcat command is recognised. Project/editor aliases still
require their corresponding tools and directories.
An existing Oh My Zsh installation is used, including the vendored
zsh-you-should-use plugin at its standard location. Otherwise the shell uses
Zsh's native completion and history with the packaged plugins. The setup does
not download Oh My Zsh. Machine-specific overrides belong in ~/.zshrc.local.
NVM is loaded lazily from $NVM_DIR/nvm.sh (default ~/.nvm/nvm.sh), with a
fallback for existing Homebrew NVM installations. Existing NVM_DIR and
PNPM_HOME values are preserved. Shell startup does not create or activate a
Python environment: run pyenv-activate explicitly to use ~/pyenv, or use
project-specific environments. pyenv-update activates it before upgrading pip.
GnuPG uses the installed system Pinentry instead of a hardcoded Mac executable;
new installations keep ~/.gnupg private and separate from the checkout.
Ghostty reads shared appearance settings from the XDG location. Its existing
macOS configuration location remains for Mac-specific preferences. Back up any
conflicting files there too when migrating an existing installation.
Alacritty references Hack Nerd Font and the Night Owl theme at
~/.config/alacritty/themes/themes/night_owl.toml; install those separately for
the intended appearance. Its macOS-specific window options do not provide the
same decoration behaviour on Linux. Clipboard behaviour should be checked in
your terminal/desktop session, particularly on Wayland or over SSH.
python3 test/setup-dotfiles.py
This uses temporary homes and a copied checkout with real Stow and Zsh. Package
manager calls and optional completion generators are stubbed: it never installs
software on your machine. CI runs on macOS Apple Silicon, Ubuntu 24.04 and
Debian 13. Every job runs the real dependency installer in a temporary home
and repeats the install. After each installation, assertions
verify all 12 shared config links (plus the macOS Ghostty override on Macs),
their exact source targets, private GnuPG permissions, real runtime directories,
and the absence of AI settings. Linux also asserts that no macOS Library
directory was created. A shell-startup check verifies Git completion without
creating a Python environment.
Run the CI workflow manually from GitHub Actions or open a pull request.
Graphical applications and live GPG prompts still need a manual check on the
target desktop.
This is a personal repository that became unexpectedly popular. Contributions are welcome, especially:
Please open issues or PRs on GitHub.
Paul Hammond
Special thanks to contributors who have shared their work:
Matt Pocock and John Ousterhout - The local codebase-design and improve-codebase-architecture skills are adapted from Matt's MIT-licensed original codebase-design/SKILL.md, DEEPENING.md, DESIGN-IT-TWICE.md, improve-codebase-architecture/SKILL.md, and HTML-REPORT.md at pinned commit 66898f60. Ousterhout's deep-module, information-hiding, complexity, and Design It Twice concepts provide the design foundation. Per-skill source notes and complete MIT notices preserve the detailed attribution chain and local departures. Matt's grill-me and writing-for-agents skills also install unmodified from reviewed commit 84fdeff.
Anthropic - The skill-creator skill installs unmodified from reviewed commit , under the shipped inside the skill bundle.
This repository is open source and available for use. The CLAUDE.md file and agents are designed to be copied and customized for your projects.
If you found CLAUDE.md or the agents valuable, consider:
The more people who adopt these practices, the better the AI-assisted development ecosystem becomes for everyone.
| Refactoring |
| Priority classification, semantic vs structural framework, DRY decision tree |
| → skills/refactoring |
| Reduce System Complexity | Behavior and guarantee conservation ledger, whole-mechanism accounting, first-principles minimum, and separate behavior/mechanism gates | → skills/reduce-system-complexity |
| Codebase Design | Deep, cohesive modules; full caller-facing contract burden; information hiding; leverage and locality; justified seams; Design It Twice | → skills/codebase-design |
| Improve Codebase Architecture | Evidence-led architecture audits that rank bounded candidates and produce self-contained visual HTML reports with before/after diagrams | → skills/improve-codebase-architecture |
| Evaluate Existing Solutions | Local-first, current evidence for adopt/adapt/combine/build decisions across primitives, libraries, tools, applications, frameworks, and services | → skills/evaluate-existing-solutions |
| Functional Programming | Immutability violations catalog, pure functions, composition patterns | → skills/functional |
| Expectations | Routes reusable principles, local policy, vocabulary, decisions, behavior, and temporary delivery knowledge to the artifact that owns each truth | → skills/expectations |
| Planning | Turn a selected child story into vertical implementation slices, or sequence a reducer-defined program, with a delivery shape for each slice | → skills/planning |
| Story Splitting | Turn broad stories, epics, features, and backlog items into independently valuable child stories; based on Tim Ottinger's story-splitting resource list and linked articles | → skills/story-splitting |
| Stack Pull Requests | Decide whether vertical implementation work should use independent PRs or an optional hard-/flow-lineage stack across one or more slices, then deliver it safely | → skills/stack-pull-requests |
| Debugging | Evidence-preserving diagnosis for local and runtime failures: reproduce, localize, and test one falsifiable hypothesis; fix the owning boundary and leave a guard only when a fix was requested | → skills/debugging |
| Graph Engineering | Compose installed skills into orchestrated multi-agent graphs — one sub-agent per skill, stages that fan out, adversarially verify, and synthesize | → skills/graph-engineering |
| Panel Review | Multi-agent code review of any change boundary — working tree, branch, or PR — with installed skills as composable lenses (/panel-review), plus the PR-readiness evidence gate for creating PRs | → skills/panel-review |
| CI Debugging | Systematic CI/CD failure diagnosis, hypothesis-first debugging, environment delta analysis | → skills/ci-debugging |
| Production Parity Skill Builder | Creates app-specific skills that inspect docs, code, tests, CI, deployment, infrastructure, config, auth, and environment setup to catch drift between production and non-production environments | → skills/production-parity-skill-builder |
| Structure Codebase | Selects the lightest honest source-tree shape: first-class frontend structures, visible hexagonal boundaries when earned, and feature-, context-, endpoint-, workflow-, framework-, or shallow forms elsewhere; package/import enforcement and safe migrations | → skills/structure-codebase |
| Hexagonal Architecture | Ports and adapters, driving/driven asymmetry, CQRS-lite, composition roots, cross-cutting concerns, DI patterns, anti-patterns with code examples, full worked example, incremental adoption. 7 resources including source notes | → skills/hexagonal-architecture |
| Domain-Driven Design | Ubiquitous language, value objects, entities, aggregates, domain events (Decider pattern), domain services, specifications, bounded contexts with ACL, error modeling, layer ownership, and focused sources. 7 deep-dive resources | → skills/domain-driven-design |
| Event Sourcing | Events as the source of truth, current state as a left fold (the Decider); event stores with optimistic concurrency, projections and read models, event versioning (tolerant reader/upcasting), snapshots, sagas, GDPR crypto-shredding, and behaviour-driven testing of deciders. Leads with a when-to-use complexity ladder. 8 deep-dive resources + source notes | → skills/event-sourcing |
| Twelve-Factor App | Deploy-time config via environment variables or platform-native injection, stateless processes, graceful shutdown, structured logging, backing services | → skills/twelve-factor |
| XState | Front-end flow logic as XState v5 statecharts and actors. Fires on ordinary React code that hand-rolls a statechart — a submitting/isLoading useState, a promise chain setting state in sequence, a double-submit guard, an error cleared before a retry — because under-modelling, not over-modelling, is how agents actually fail. Classifies state by what changes it rather than what it renders, defers to the repository's own rule for which layer owns machines, and regenerates a Mermaid stateDiagram-v2 render whenever a machine is designed or changed. 6 deep-dive references | → skills/xstate |
| React Performance | Measure-first method for React and Next.js performance: baseline the symptom, attribute the cost with evidence, apply one rule per diff from the pinned Vercel catalogues, then re-measure and revert what does not move the number. Owns the routing across the overlapping perf skills and the reconciliation where general performance advice would trade away behaviour tests, immutability, or type safety | → skills/react-performance |
| Render Code Shape | Read-only render of how code composes — entry points, frame edge, module boundaries, the types crossing them, signatures, and a cited call graph per wiring, with [NEW] for work not yet built. Every name and path is read from source and cited; only bodies are pseudo. Adapted from Adam Bulmer's pseudocode skill with source notes | → skills/render-code-shape |
| Impeccable Design | Comprehensive frontend design vocabulary: distinctive interfaces, systematic typography, OKLCH color, anti-AI-slop methodology + 17 steering commands | → impeccable |
| API Design | Contract-first, Hyrum's Law, RFC 9457 errors, idempotency, rate limiting, REST conventions, pagination, backward compatibility, OWASP API Security Top 10. 5 deep-dive resources + source notes | → skills/api-design |
| Secure OAuth and OIDC | RFC 9700 / BCP 240 security workflow for OAuth 2.0 and OpenID Connect: applicability-aware controls, issuer and transaction binding, ID Token validation, attack catalog, negative tests, migrations, and evidence-based audits | → skills/secure-oauth-oidc |
| BFF Design | The backend-for-frontend pattern itself: adoption signals and honest costs, one-experience-one-BFF granularity with frontend-team ownership, the shape-don't-decide rule, upstream aggregation with partial-failure and resilience budgets, identity-keyed caching, user-identity mediation toward upstreams (token exchange, confused-deputy prevention), and the alternatives (gateway, GraphQL federation, token-mediating backend, meta-framework server). 4 deep-dive references | → skills/bff-design |
| BFF Entry Points | Explicit public/protected access classification for every BFF/backend HTTP entry point, a composition-prepared endpoint registrar that installs session/CSRF/Origin/Fetch Metadata policy by construction, provider-free in-application authorization, protected SSE/WebSocket registration, browser session coordination, and automated enforcement gates. 6 deep-dive references | → skills/bff-entry-points |
| CLI Design | Unix-composable CLI patterns: stdout/stderr stream separation, format flags (--json/--plain), exit codes, TTY detection, composability, error design. Language-agnostic principles with TypeScript implementation patterns. 4 deep-dive resources | → skills/cli-design |
| Finding Seams | Identifying substitution points in untestable code -- function parameter, configuration, module, and object seams for TypeScript/JS. FP-first with OOP patterns in a separate resource for legacy class-based code. Based on Michael Feathers' Working Effectively with Legacy Code. 3 deep-dive resources | → skills/finding-seams |
| Characterisation Tests | Documenting actual behavior of existing code before making changes. The 5-step algorithm, heuristics, modern tooling (Vitest snapshots, combination testing, approval testing). Based on Michael Feathers' Working Effectively with Legacy Code. 2 deep-dive resources | → skills/characterisation-tests |
| Storyboard | Optional working audit for a multi-surface UX when side-by-side mocks and flow gaps materially improve review; delete it after use unless the project maintains it | → skills/storyboard |
| Teach Me | Evidence-based private tutor for any topic. Mission-grounded learning plans, discovery interview, trusted-source curation, Socratic questioning, Bloom's Taxonomy progression, spaced repetition, confidence calibration, learning records, living glossary, self-contained HTML lessons per session, course generation. 5 deep-dive resources. Invoked via /teach-me [topic] | → skills/teach-me |
| Diagrams | Creates renderer-aware, evidence-backed, accessible diagrams with observable validation gates. The current core is an original rewrite; source notes preserve the removed historical import and published-history rights follow-up | → skills/diagrams |
| Find Skills | Coordinates the minimum installed skill set first, then discovers installable skills through skills.sh or the reviewed [email protected] CLI and inspects the full bundle, capabilities, provenance, license, maintenance, compatibility, and overlap. Vendored and locally hardened from vercel-labs/skills at 0b8fb22; source notes distinguish the import-time MIT declaration from the later full upstream notice | → skills/find-skills |
| Find Gaps | Conversational pre-implementation review for written stories, plans, acceptance criteria, specs, and design mocks. Surveys the artifact with a per-type checklist, then walks you through gaps one question at a time, turning each answer into an artifact-native precondition/trigger/outcome criterion, plan paragraph, or mock-state spec written back to the source of truth. Output is the tightened artifact, not a separate gap report. Pairs with storyboard for multi-mock audits | → skills/find-gaps |
| Acceptance Review | Read-only criterion-by-criterion proof of whether a PR, branch, diff, or implementation satisfies its authoritative requirement | → skills/acceptance-review |
| WTF | Explicitly re-explains the immediately previous model response in plain, precise UK English without starting new work. Invoke with /wtf in Claude Code or $wtf in Codex | → skills/wtf |
| Grill Me (optional external) | One-question-at-a-time decision-tree interviews before story splitting, planning, or implementation; omitted by --no-external, with specification as the first-party fallback | → skills.sh/mattpocock/skills/grill-me |
| Writing for Agents | Writing documents an agent consumes — a SKILL.md, CLAUDE.md/AGENTS.md, a doc behind a pointer. Context pointers and trigger wording, the context/cognitive load split, the information hierarchy and progressive disclosure, and completion criteria that resist premature completion. Routes by audience: technical-writing owns human-facing prose | → mattpocock/skills/writing-for-agents |
| Clarity | Co-writes, rewrites, reviews, or diagnoses reader-facing prose at sentence level while preserving facts, attribution, medium, and the author's voice | → addyosmani/clarity |
| Simple English | Writes plain technical prose for lay and non-native readers; explicit STE requests add ASD-STE100 vocabulary discipline | → AminBlg/SimpleEnglish |
| Skill Creator | Anthropic's own skill-authoring loop: draft, write test prompts, run evals, review results qualitatively and quantitatively, rewrite, and tune the description for trigger accuracy | → anthropics/skills/skill-creator |
| Skill Doctor | Scores recent local agent conversations for efficiency, code quality, and skill coverage, then drafts evidence-backed skill edits and a shareable local report. Supports Claude Code, Codex, and Warp without uploading transcripts | → Warp Skill Doctor |
| Next.js Skills | Cache Components optimization and adoption workflows, version-matched with the framework | → vercel/next.js skills |
| React Best Practices | Vercel Engineering's 72 impact-ordered React/Next.js performance rules — waterfalls and bundle size first, micro-optimizations last. The rule catalogue behind the first-party react-performance method | → agent-skills |
| Composition Patterns | Compound components, avoiding boolean-prop proliferation, context providers, and React 19 API changes (ref as a prop, no forwardRef) | → agent-skills |
| Web Quality Audit | Comprehensive Lighthouse-based quality review across all categories | → web-quality-skills |
| Performance | Loading speed, runtime efficiency, resource optimization | → web-quality-skills |
| Core Web Vitals | LCP, INP, CLS specific optimizations | → web-quality-skills |
| Accessibility | WCAG compliance, screen reader support, keyboard navigation | → web-quality-skills |
| SEO | Search engine optimization, crawlability, structured data | → web-quality-skills |
| SEO Audit | Full SEO diagnosis across crawlability, indexation, on-page optimization, content quality, and action planning | → marketingskills/seo-audit |
| Best Practices | Security, modern APIs, code quality patterns | → web-quality-skills |
| A simplification may only be moving complexity elsewhere | reduce-system-complexity | Conserve agreed behavior, measure the complete path before/after, and require both behavior and mechanism gates |
| A module makes callers understand its implementation | codebase-design | Hide coherent decisions behind a smaller complete contract; optimize leverage and locality, not line count |
| Don't know where architecture work would pay off | improve-codebase-architecture | Rank evidence-backed candidates and compare them visually in an offline HTML report |
| About to build generic machinery that may already exist | evaluate-existing-solutions | Inspect local/platform primitives, research current established options, and compare them with a genuine bespoke baseline |
| Accidental shared-state mutation | functional | Ownership-aware immutable alternatives |
| Writing code before tests | tdd | RED-GREEN-REFACTOR with observable evidence, independent of commit choreography |
| Losing context on complex features | expectations | Learning capture framework (7 criteria) |
| Requirement is still fuzzy or decision-heavy | specification | Resolve one question at a time into examples and acceptance criteria; use optional grill-me when installed for extra pressure-testing |
| Turning a broad requirement into stories | story-splitting | Produce independently valuable child stories with scope, deferrals, and acceptance examples |
| Planning significant implementation work | planning | Sequence a selected child story vertically, or a reducer-defined program, and choose each slice's delivery shape |
| One slice is too large, or later slices should start before lower PRs merge | stack-pull-requests | Choose independent PRs or a justified hard-/flow-lineage stack without turning technical layers into stories |
| Need several skills applied to one task at once | graph-engineering | One orchestrator, one sub-agent per skill — fan out, adversarially verify, synthesize one deliverable |
| Want your work reviewed through your architecture skills — before or after opening a PR | review | /panel-review [target] [lens skills...] — working tree, branch, or PR; every lens is an installed skill; findings are verified into one ranked report |
| Tightening a story, plan, AC set, or mock | find-gaps | Find missing decisions and write confirmed answers back into the artifact |
| Checking whether implementation satisfies agreed requirements | acceptance-review | Map every authoritative criterion to implementation and verification evidence, then return an exact verdict |
| Backlog items keep turning into frontend/backend tickets | story-splitting | Reject component stories; split by capability, path, interface, data, rules, quality, or learning |
| A local or runtime failure needs a root cause | debugging | Preserve evidence, reproduce, localize, and test one causal hypothesis; implement only when a fix was requested |
| CI pipeline keeps failing | ci-debugging | Every failure is real until proven otherwise, hypothesis-first diagnosis |
| Local, CI, PR, or staging differs from production | production-parity-skill-builder | Generate an app-specific parity skill that inspects source, infra, config, and auth before asking targeted questions |
| Project folders hide ownership or architecture | structure-codebase | Select the lightest honest shape; make hexagonal inside/outside visible only when real and keep every interior featureful |
| Separating domain from infrastructure | hexagonal-architecture | Ports define contracts, adapters implement them, domain stays pure |
| Complex business rules need modeling | domain-driven-design | Ubiquitous language, glossary enforcement, value objects, aggregates |
| History and audit are part of the domain | event-sourcing | Events are the source of truth; current state is a left fold you can always rebuild |
| Deploy-varying config embedded in source or build artifacts | twelve-factor | Validate injected config at startup and pass it through composition options |
| Service won't scale horizontally | twelve-factor | Stateless processes, external backing services, graceful shutdown |
| UI looks generic or AI-generated | impeccable | /impeccable teach to set context, /impeccable craft to build with design methodology |
| Need to plan UX before coding | impeccable | /shape produces a design brief; /impeccable craft runs the full shape-build-iterate flow |
| Design needs professional polish | impeccable | /critique for UX review, /polish for final pass, /harden for production readiness |
| Typography or color needs work | impeccable | /typeset for font selection and hierarchy, /colorize for strategic OKLCH color |
| Designing REST APIs or consumer-facing contracts | api-design | Contract-first, Hyrum's Law, consistent error semantics, pagination |
| Breaking changes keep surprising consumers | api-design | Additive-only changes, One-Version Rule, input/output separation |
| Designing or auditing OAuth/OIDC login or delegated access | secure-oauth-oidc | Establish the security profile, then prove every issuer, transaction, code, token, and identity binding |
| Debugging token replay, mix-up, or multi-issuer login | secure-oauth-oidc | Trace the attack path and test hostile issuer, callback, redemption, and validation behavior |
| CLI output breaks when piped to jq | cli-design | stdout for data only, stderr for everything else |
| JSON mode includes spinners or progress | cli-design | Format flag contract, TTY detection, stream separation |
| Building a CLI that composes with Unix tools | cli-design | --json/--plain flags, exit codes, NDJSON streaming, stdin support |
| Code has dependencies I can't test around | finding-seams | Find substitution points (seams) without editing at the call site |
| Need to understand what code does before changing it | characterisation-tests | Let failing tests tell you what code actually does, not what it should do |
| Modifying code that has no tests | characterisation-tests | Pin down current behavior as a safety net, then refactor |
| Multiple UX mocks to review before code lands | storyboard | One HTML page with live iframes + flow diagram + gap cards; forces brainstorm questions per gap |
| Want "all the mocks in one place" for a feature | storyboard | Side-by-side embedded mocks + per-mock audit checklist, pairs with /impeccable pipeline |
| Want to learn a topic properly, not just read about it | teach-me | Socratic tutor, Bloom's progression, spaced repetition — invoked via /teach-me [topic] |
| Need a diagram, chart, or visualization in Markdown | diagrams | Decision guide picks Mermaid / Graphviz / Vega-Lite / PlantUML / Canvas / infographic for the job |
| Wishing an agent skill existed for this task | find-skills | Browse the open skills ecosystem first; verify the complete source before recommending or installing |
| Working on a Next.js App Router app | vercel/next.js skills | Cache Components optimizer and adoption workflows (best-practice and upgrade knowledge now ships inside Next.js itself) |
| React or Next.js feels slow | react-performance | Baseline, attribute the cost, then apply one rule per diff from the pinned Vercel catalogue and re-measure |
Writing front-end flow logic, or about to add a submitting/isLoading flag | xstate | Classify by what changes the state, not what it renders; a hand-rolled statechart is the failure this catches |
| Need to understand how an unfamiliar path composes, or pseudocode a change first | render-code-shape | Read-only cited call graph, module boundaries, and the types crossing them |
| Reviewing a plan, spec, or mocks before coding starts | find-gaps | Conversational loop: asks one question at a time and writes each answer back as a new AC / plan paragraph / mock-state spec |
| "What could go wrong?" / "What's missing?" on a design | find-gaps | Forces every gap category end-to-end; each confirmed answer updates the artifact, not a todo list |
| Want a plan interrogated before implementation | specification | Use its one-question protocol, or optional grill-me when installed, before implementation |
| Slow page loads or poor Lighthouse scores | performance | Critical rendering path, code splitting, image optimization |
| Failing Core Web Vitals (LCP, INP, CLS) | core-web-vitals | LCP < 2.5s, INP < 200ms, CLS < 0.1 |
| Accessibility compliance gaps | accessibility | WCAG 2.1 guidelines, perceivable/operable/understandable/robust |
| Poor search engine visibility | seo | Technical SEO, structured data, meta tags, crawlability |
| Need to diagnose rankings, traffic drops, or SEO health | seo-audit | Prioritized audit across technical, on-page, content, and authority signals |
| Reader-facing prose feels generic, hollow, or AI-shaped | clarity | Preserve truth and voice; fix substance before surface patterns |
| Technical prose must be plain, translatable, or ASD-STE100-style | simple-english | Short active sentences, one meaning per term, condition before command |
| Full site quality audit | web-quality-audit | Comprehensive Lighthouse audit across all categories |
claritysimple-english applies plain or strict Simplified Technical Englishspecification asks one focused question at a time; optional grill-me can deepen the interview when installeddebugging preserves evidence and tests one causal hypothesis at a timeacceptance-review returns a read-only criterion-by-criterion verdictdouble-check uses a read-only independent reviewer when available, or a disclosed fresh-context fallback, and re-reviews the final state until findings closeevent-sourcing models current state as a left fold of immutable events (and tells you when not to)resources/http-fundamentals.mdresources/problem-details.md — RFC 9457 deep detail: ProblemDetail type, type-URI semantics, extension members, security considerationsresources/source-notes.md and LICENSE — immutable provenance audit baseline, explicit original-import history gap, local departures, and the applicable upstream MIT notice~/.claude/commands/ (3 slash commands: /setup, /plan, /continue)~/.claude/agents/ (9 specialized workflow agents)f17010cAdam Bulmer - reduce-system-complexity is an attributed adaptation of Adam's MIT-licensed reducer/SKILL.md and companion agents/openai.yaml at pinned commit d698a88f. It retains the conservation ledger, whole-mechanism baseline, first-principles minimum, and dual evidence gates while documenting the rename, narrowed trigger, qualitative ranking, migration safeguards, and local testing/architecture integration. The original MIT license is preserved beside the adaptation. This repository also adapts Adam's wtf/SKILL.md at pinned commit e436942e, adding repository-owned glossary lookup while preserving the original MIT licence and source notes. render-code-shape is likewise an attributed adaptation of Adam's pseudocode/SKILL.md at pinned commit 976d4a0c, retaining the waterline, the cite-or-mark-[NEW] rule, the wiring and path-termination discipline, and the annotated call-graph format, while renaming for trigger accuracy and routing judgement to the skills that own it; the original MIT licence and source notes are preserved beside it. Adam's xstate/SKILL.md was inspected as prior art for the first-party xstate skill (no content vendored), and his practitioner review of a production actor-based front end shaped its two lifetime tests (an external answer changed it, or the interaction has an interruptible middle), the verdict-and-ask-on-ties rule, the functionality-boundary criteria for when a new machine is justified, and the diagram policy of regenerating a Mermaid statechart whenever a machine is designed or changed.
acceptance-review also adapts Adam's MIT-licensed criterion review workflow at pinned commit 976d4a0c, removing its unavailable sibling dependency and adding explicit authority and indeterminate-evidence handling.
Michael Feathers - The finding-seams and characterisation-tests skills are adapted from Working Effectively with Legacy Code (2004). Feathers' concepts of seams, enabling points, and characterization tests are foundational techniques for making untestable code testable. The skills adapt his C++/Java examples to modern TypeScript/JavaScript patterns.
Addy Osmani - The web quality skills install from reviewed commit 95d6e25. clarity installs unmodified from reviewed commit 9e30711, including its standard-library-only prose diagnostics. Both sources use the MIT License. The api-design skill is adapted from Addy's MIT-licensed api-and-interface-design skill. Local history records no original upstream import revision, so 7676817c12a1317454ae3898a0c5c1eacf5dd3d5 is documented only as an immutable audit baseline; detailed source notes, local departures, and the upstream notice live beside the skill.
Amin Boulegroun - simple-english installs unmodified from reviewed commit 080a862, under the pinned MIT License. Its upstream deterministic linter and published eval results were reviewed at the same commit; the installed runtime is the skill and its references.
Corey Haines - The seo-audit skill and its references install from reviewed commit 7868cb9. Licensed under the pinned MIT License.
Warp - skill-doctor installs unmodified from reviewed commit b811c24. It scores recent local Claude Code, Codex, or Warp conversations and drafts evidence-backed skill improvements without uploading transcripts. Licensed under the pinned MIT License.
Vercel - The Next.js skills (next-cache-components-optimizer and next-cache-components-adoption) install from reviewed commit ae1e53a. Their predecessors in vercel-labs/next-skills were retired: best-practice and upgrade knowledge now ships inside Next.js itself. The React skills (vercel-react-best-practices and vercel-composition-patterns) install from reviewed commit b8caa26 of vercel-labs/agent-skills; each skill declares license: MIT in its own frontmatter, and that repository publishes no separate LICENSE file, which is why these install from upstream rather than being vendored here.
Historical use-case-data-patterns provenance: an earlier revision copied
Kieran O'Hara's agent at f735349,
whose repository did not declare a redistribution licence. The current agent
is an original rewrite. Exact evidence and the unresolved older-release
permission gap are recorded in its pinned source notes.
Historical test-design-reviewer provenance: an earlier version copied Andrea Laforgia's file at 278e367, whose repository did not declare a redistribution license. The current skill is a fresh rewrite around Dave Farley's public test properties. Exact evidence and the unresolved older-release permission gap are recorded in the skill's pinned source notes.
@dm - Idea credit for the production-parity-skill-builder skill, inspired by the need to keep local, CI, PR, preview, and staging environments aligned with production-only restrictions such as identity-provider group membership.
Tim Ottinger - The story-splitting skill is based on Tim's Splitting Stories - A Resource Listicle and synthesizes the linked work from Tim Ottinger, Bill Wake, Joshua Kerievsky, Gojko Adzic, Neil Killick, George Dinwiddie, Mike Cohn, Richard Lawrence, Peter Green, J. B. Rainsberger, Rachel Davies, and others. Source-by-source provenance is preserved in the skill's resources/source-notes.md.
Paul Bakaus - The impeccable design skills (core skill + 17 steering commands: shape, critique, audit, polish, harden, typeset, colorize, animate, layout, clarify, adapt, bolder, quieter, distill, delight, optimize, overdrive) install from reviewed commit 5d10bc8. Licensed under its pinned Apache 2.0 License. Impeccable builds on Anthropic's original frontend-design skill; see the pinned NOTICE.