#12 by GitHub stars

addyosmani/agent-skills

Production-grade engineering skills for AI coding agents.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/api-and-interface-design/SKILL.md

Week of Nov 2, 2026 · +3 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 199   return res.status(422).json({ error: 'idempotency key reused with a different payload' });
+ 199   return res.status(422).json({
+ 200     error: { code: 'IDEMPOTENCY_KEY_REUSED', message: 'Idempotency key reused with a different payload' },
+ 201   });

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/browser-testing-with-devtools/SKILL.md

Week of Nov 2, 2026 · +2 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

+ 139 
+ 140 After a viewport or font change, measure layout only after fonts and resize observers have settled.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/ci-cd-and-automation/SKILL.md

Week of Nov 2, 2026 · +7 / −4 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 187 Lint failure → Agent runs `npm run lint --fix` and commits
+ 187 Lint failure → Agent runs `npm run lint -- --fix` and commits
+ 266         env:
+ 267           VERSION: ${{ inputs.version }}
- 267           # Deploy the specified previous version
- 268           npx vercel rollback ${{ inputs.version }}
+ 269           # Deploy the specified previous version. Pass the input through env,
+ 270           # never interpolate it into the script (shell injection).
+ 271           npx vercel rollback "$VERSION"
- 316 │   └── Use actions/cache or setup-node cache option for node_modules
+ 319 │   └── Use the setup-node cache option (or actions/cache) for the package manager cache, not node_modules

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/code-review-and-quality/SKILL.md

Week of Nov 2, 2026 · +2 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

+ 180 
+ 181 Before reporting a finding, check it against the callers, guards and tests that reach the changed code, and drop it if they rule it out. Label defects that already exist in the base separately from regressions this change introduces. Zero findings is a valid result; do not invent one.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/code-simplification/SKILL.md

Week of Nov 2, 2026 · +1 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 3 description: Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity.
+ 3 description: Simplifies code for clarity. Use when refactoring code for clarity without changing behavior. Use when code works but is harder to read, maintain, or extend than it should be. Use when reviewing code that has accumulated unnecessary complexity. Use when asked to simplify, clean up, or reduce the nesting of a function or module that already works, even when the code is pasted inline and nothing else needs to change.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/constraint-driven-development/SKILL.md

Week of Nov 2, 2026 · +18 / −10 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 116 | Secrets | No secrets in source | `gitleaks detect --redact` | every edit |
+ 116 | Secrets | No secrets in source | `gitleaks dir . --redact` | every edit |
- 118 | Security: code | No high findings | `semgrep scan --config p/default` | CI |
+ 118 | Security: code | Nothing at high or above | `npm run check:security` | CI |
- 120 | Accessibility | Zero critical or serious | `axe $PREVIEW_URL --tags wcag2a,wcag2aa,wcag21aa` | preview deploy |
+ 120 | Accessibility | Zero critical or serious | `npm run check:a11y` | preview deploy |
- 151 | Coverage (JS) | your test runner | already there | `vitest run --coverage` (or `jest --coverage`) | coverage of changed lines |
+ 151 | Coverage (JS) | your test runner | Vitest: `npm i -D @vitest/coverage-v8`; Jest: already there | `vitest run --coverage` (or `jest --coverage`) | coverage of changed lines |
- 153 | Security: code | Semgrep | `pipx install semgrep` | `semgrep scan --config p/default --config p/owasp-top-ten` | any high finding |
- 154 | Security: secrets | gitleaks | `brew install gitleaks` | `gitleaks detect --redact --no-banner` | any finding |
+ 153 | Security: code | Semgrep | `pipx install semgrep` | `npm run check:security` (below) | high or critical, including legacy `ERROR` |
+ 154 | Security: secrets | gitleaks | `brew install gitleaks` | `gitleaks dir . --redact --no-banner` | any finding |
- 158 | Accessibility | axe-core | `npm i -D @axe-core/cli` | `axe $URL --tags wcag2a,wcag2aa,wcag21aa` | zero critical or serious |
+ 158 | Accessibility | axe-core | `npm i -D @axe-core/cli` | `npm run check:a11y` (below) | zero critical or serious |
+ 170 `semgrep scan` and `axe` can exit 0 on findings; copy [scripts/quality-gate.mjs](scripts/quality-gate.mjs) into the project's `scripts/` directory to enforce these thresholds.
+ 171 Keep the scanner before `&&` so a failed scan stops the command.
+ 172 
- 175     "check:fast": "tsc --noEmit && eslint . && gitleaks detect --redact --no-banner",
+ 178     "check:fast": "tsc --noEmit && eslint . && gitleaks dir . --redact --no-banner",
- 177     "check:full": "npm run check:task && semgrep scan --config p/default && osv-scanner scan source -r ."
+ 180     "check:security": "semgrep scan --config p/default --strict --json > semgrep-results.json && node scripts/quality-gate.mjs semgrep semgrep-results.json",
+ 181     "check:a11y": "axe \"$PREVIEW_URL\" --tags wcag2a,wcag2aa,wcag21aa --stdout > axe-results.json && node scripts/quality-gate.mjs axe axe-results.json",
+ 182     "check:full": "npm run check:task && npm run check:security && osv-scanner scan source -r ."
- 182 That mapping matters more than the tools. `check:fast` is what runs after an edit, `check:task` when the agent thinks it's done, `check:full` in CI.
+ 187 That mapping matters more than the tools. `check:fast` is what runs after an edit, `check:task` when the agent thinks it's done, `check:full` in CI. Run `check:a11y` after the preview is reachable, with `PREVIEW_URL` set (the example uses POSIX shell syntax).
+ 188 
+ 189 Before calling any row enforced, run its actual CI command against a known violation and a clean control. Confirm that the violation fails, the control passes, and scanner errors fail too. For a severity threshold, also confirm a below-threshold finding passes. Apply this to every dimension, including coverage and Lighthouse: generating a report alone does not enforce the number in `CONSTRAINTS.md`.
+ 310 - [ ] Each enforced command fails on a deliberate violation and scanner error, passes a clean control, and preserves the agreed severity threshold

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/context-engineering/SKILL.md

Week of Nov 2, 2026 · +3 / −3 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 53 - Lint: `npm run lint --fix`
+ 53 - Lint: `npm run lint -- --fix`
- 202 **Start trimming at 75% capacity, not 100%.** By the time the window is genuinely full, the model's attention is already fragmented across too many signals. The 75% threshold gives room to compress gracefully rather than cut desperately mid-task.
+ 202 **Compact well before the host's limit; the threshold varies by host.** By the time the window is genuinely full, the model's attention is already fragmented across too many signals. The margin gives room to compress gracefully rather than cut desperately mid-task.
- 324 | Context cliff | Waiting until the window is full before managing it — attention fragments and output quality drops abruptly at the limit | Start trimming at 75% capacity; compress rather than cut |
+ 324 | Context cliff | Waiting until the window is full before managing it — attention fragments and output quality drops abruptly at the limit | Compact well before the host's limit; compress rather than cut |

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/debugging-and-error-recovery/SKILL.md

Week of Nov 2, 2026 · +1 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 84 npm test -- --testPathPattern="specific-file" --runInBand
+ 84 npm test -- specific-file --runInBand

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/deprecation-and-migration/SKILL.md

Week of Nov 2, 2026 · +6 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

+ 148 
+ 149   // Translate the new shape back into what old consumers expect
+ 150   private toOldFormat(task: Task): OldTask {
+ 151     return { id: Number(task.id), title: task.title, done: task.status === 'done' };
+ 152   }
- 160   return new LegacyTaskService();
+ 165   return new OldTaskService();

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/documentation-and-adrs/SKILL.md

Week of Nov 2, 2026 · +3 / −2 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 114 // Rate limit uses a sliding window — reset counter at window boundary,
- 115 // not on a fixed schedule, to prevent burst attacks at window edges
+ 114 // Rate limit uses a fixed window that opens on the first request after the
+ 115 // previous one expires, not on a clock schedule. Known gap: a client can spend
+ 116 // the full limit just before a reset and again just after (2x in a moment)

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/doubt-driven-development/SKILL.md

Week of Nov 2, 2026 · +2 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

+ 84 
+ 85 Strip reasoning, not evidence: if a caller, guard or test contradicts the claim, include it in the unit.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/frontend-ui-engineering/SKILL.md

Week of Nov 2, 2026 · +6 / −6 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 82   const { tasks, isLoading, error, refetch } = useTasks();
+ 82   const { tasks, isLoading, error, refetch, toggleTask, deleteTask } = useTasks();
- 88   return <TaskList tasks={tasks} />;
+ 88   return <TaskList tasks={tasks} onToggle={toggleTask} onDelete={deleteTask} />;
- 92 export function TaskList({ tasks }: { tasks: Task[] }) {
+ 92 export function TaskList({ tasks, onToggle, onDelete }: { tasks: Task[] } & Pick<TaskItemProps, 'onToggle' | 'onDelete'>) {
- 95       {tasks.map(task => <TaskItem key={task.id} task={task} />)}
+ 95       {tasks.map(task => <TaskItem key={task.id} task={task} onToggle={onToggle} onDelete={onDelete} />)}
- 237 function TaskList({ tasks }: { tasks: Task[] }) {
+ 237 function TaskList({ tasks, onCreateTask }: { tasks: Task[]; onCreateTask: () => void }) {
- 275     <div className="space-y-3" aria-busy="true" aria-label="Loading tasks">
+ 275     <div className="space-y-3" role="status" aria-busy="true" aria-label="Loading tasks">

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/git-workflow-and-versioning/SKILL.md

Week of Nov 2, 2026 · +3 / −3 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 3 description: Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, splitting uncommitted work in a messy working tree into clean atomic commits, opening or reviewing a pull request (PR), pushing to a remote, or when you need to organize work across multiple parallel streams. Use when cutting a release, choosing a semantic version bump, tagging, or writing a changelog.
+ 3 description: Structures git workflow practices. Use when making any code change. Use when committing, branching, resolving conflicts, splitting uncommitted work in a messy working tree into clean atomic commits, opening or reviewing a pull request (PR), pushing to a remote, or when you need to organize work across multiple parallel streams. Use when cutting a release, choosing a semantic version bump, tagging, or writing a changelog. Use when asked to write a commit message or a changelog entry for a change, or to split a change into commits, even when the diff is pasted inline and the message seems easy to write from it.
- 219 # 2. Ensure no secrets
- 220 git diff --staged | grep -i "password\|secret\|api_key\|token"
+ 219 # 2. Ensure no secrets (lists matching file names only — any output means review them)
+ 220 git diff --staged -i -G'password|secret|api_key|token' --name-only

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/idea-refine/SKILL.md

Week of Nov 2, 2026 · +4 / −2 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 31 # Optional: Initialize the ideas directory
- 32 bash skills/idea-refine/scripts/idea-refine.sh
+ 31 # Optional. Run from the project root so this creates ./docs/ideas.
+ 32 # <skill-dir> is the directory that contains this SKILL.md
+ 33 # (for example .agents/skills/idea-refine or .cursor/skills/idea-refine).
+ 34 bash <skill-dir>/scripts/idea-refine.sh

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/incremental-implementation/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/interview-me/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/observability-and-instrumentation/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/performance-optimization/SKILL.md

Week of Nov 2, 2026 · +2 / −2 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 208 # Lighthouse CI
- 209 npx lhci autorun
+ 208 # Lighthouse CI. The CLI package is @lhci/cli; unscoped `lhci` on npm is not it.
+ 209 npx --package=@lhci/cli lhci autorun

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/planning-and-task-breakdown/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/security-and-hardening/SKILL.md

Week of Nov 2, 2026 · +1 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 3 description: Hardens code against vulnerabilities. Use when auditing an input handler for vulnerabilities, when handling user input, authentication, data storage, or external integrations, or when checking a login flow is safe against the OWASP Top Ten. Use when building any feature that accepts untrusted data, manages user sessions, or interacts with third-party services. Use when auditing dependencies for known vulnerabilities, triaging package-manager audit findings, or assessing supply-chain risk in a new package. Use when personal data or privacy compliance (GDPR, CCPA) is involved.
+ 3 description: Hardens code against vulnerabilities. Use when auditing an input handler for vulnerabilities, when handling user input, authentication, data storage, or external integrations, or when checking a login flow is safe against the OWASP Top Ten. Use when building any feature that accepts untrusted data, manages user sessions or session cookies, or interacts with third-party services. Use when auditing dependencies for known vulnerabilities, triaging package-manager audit findings, or assessing supply-chain risk in a new package. Use when personal data or privacy compliance (GDPR, CCPA) is involved.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/shipping-and-launch/SKILL.md

Week of Nov 2, 2026 · +1 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 192 class ErrorBoundary extends React.Component {
+ 192 class ErrorBoundary extends React.Component<React.PropsWithChildren> {

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/source-driven-development/SKILL.md

Week of Nov 2, 2026 · +3 / −2 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 161 "useTransition now supports async functions [...] to handle
- 162 pending states automatically"
+ 161 "In React 19, we're adding support for using async functions in
+ 162 transitions to handle pending states, errors, forms, and optimistic
+ 163 updates automatically."

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/spec-driven-development/SKILL.md

Week of Nov 2, 2026 · +1 / −1 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

- 92    Lint: npm run lint --fix
+ 92    Lint: npm run lint -- --fix

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/test-driven-development/SKILL.md

Week of Nov 2, 2026 · +2 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

+ 248 For crash or rollback behavior, exercise the real boundary: an injected exception is not process termination, and a mocked transaction call is not a database rollback.
+ 249 

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

skills/using-agent-skills/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

aeac41d4d005 → 301b02b12bff

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → aeac41d4d005

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 301b02b12bff98e4688e6984af6556802322bbde

git clone --filter=blob:none --no-checkout https://github.com/addyosmani/agent-skills.git .hotskills/addyosmani-agent-skills && git -C .hotskills/addyosmani-agent-skills checkout --detach 301b02b12bff98e4688e6984af6556802322bbde # Copy each selected skill directory from .hotskills/addyosmani-agent-skills into .claude/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/addyosmani/agent-skills.git .hotskills/addyosmani-agent-skills && git -C .hotskills/addyosmani-agent-skills checkout --detach 301b02b12bff98e4688e6984af6556802322bbde # Copy each selected skill directory from .hotskills/addyosmani-agent-skills into .agents/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/addyosmani/agent-skills.git .hotskills/addyosmani-agent-skills && git -C .hotskills/addyosmani-agent-skills checkout --detach 301b02b12bff98e4688e6984af6556802322bbde # Copy each selected skill directory from .hotskills/addyosmani-agent-skills into .gemini/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/addyosmani/agent-skills.git .hotskills/addyosmani-agent-skills && git -C .hotskills/addyosmani-agent-skills checkout --detach 301b02b12bff98e4688e6984af6556802322bbde # Copy each selected skill directory from .hotskills/addyosmani-agent-skills into .opencode/skills/<skill-name>/
113.7kGitHub stars
1.5kstars in 7 days
25skills in this repository
155commits in 30 days

Heat

7.5
  • Star growth, last 7 daysAhead of 88% of tracked repositories
  • Star growth, last 24 hoursAhead of 86% of tracked repositories
  • Rank movement, last 7 daysAhead of 72% of tracked repositories
  • Commits, last 30 daysAhead of 96% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 7, 2026113,742

Individual skills in this repository

How it works

api-and-interface-design

When your agent uses it

Guides stable API and interface design. Use when designing APIs, module boundaries, or any public interface. Use when creating REST or GraphQL endpoints, defining type contracts between modules, or establishing boundaries between frontend and backend.

What it loads into context

Frontmatter

52 tokens

Always available to the agent

SKILL.md

3,311 tokens

When the skill is activated

Reference documents

93,341 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Overview
  2. When to Use
  3. Core Principles
  4. REST API Patterns
  5. TypeScript Interface Patterns
  6. Common Rationalizations
  7. Red Flags
  8. Verification

Scripts executed separately

  • ../constraint-driven-development/scripts/quality-gate.mjs
  • ../idea-refine/scripts/idea-refine.sh

Files

  • ../../.claude-plugin/marketplace.jsonasset857 bytes
  • ../../.claude-plugin/plugin.jsonasset517 bytes
  • ../../.claude/commands/build.mddoc3,990 bytes
  • ../../.claude/commands/code-simplify.mddoc1,099 bytes
  • ../../.claude/commands/constraints.mddoc2,793 bytes
  • ../../.claude/commands/plan.mddoc836 bytes
  • ../../.claude/commands/review.mddoc879 bytes
  • ../../.claude/commands/ship.mddoc4,631 bytes
  • ../../.claude/commands/spec.mddoc944 bytes
  • ../../.claude/commands/test.mddoc696 bytes
  • ../../.claude/commands/webperf.mddoc2,005 bytes
  • ../../.claude/commands/webperf.mddoc2,005 bytes
  • ../../commands/build.tomlasset3,840 bytes
  • ../../commands/code-simplify.tomlasset1,066 bytes
  • ../../commands/constraints.tomlasset2,775 bytes
  • ../../commands/planning.tomlasset804 bytes
  • ../../commands/review.tomlasset846 bytes
  • ../../commands/ship.tomlasset4,711 bytes
  • ../../commands/spec.tomlasset911 bytes
  • ../../commands/test.tomlasset650 bytes
  • ../../commands/webperf.tomlasset2,031 bytes
  • ../../commands/webperf.tomlasset2,031 bytes
  • SKILL.mdcore14,938 bytes
  • ../browser-testing-with-devtools/SKILL.mddoc14,640 bytes
  • ../ci-cd-and-automation/SKILL.mddoc11,512 bytes
  • ../code-review-and-quality/SKILL.mddoc21,263 bytes
  • ../code-simplification/SKILL.mddoc13,719 bytes
  • ../constraint-driven-development/SKILL.mddoc22,216 bytes
  • ../constraint-driven-development/references/floor-guard.mddoc10,701 bytes
  • ../constraint-driven-development/scripts/quality-gate.mjsruns1,927 bytes
  • ../context-engineering/SKILL.mddoc15,514 bytes
  • ../debugging-and-error-recovery/SKILL.mddoc10,893 bytes
  • ../deprecation-and-migration/SKILL.mddoc12,839 bytes
  • ../documentation-and-adrs/SKILL.mddoc10,999 bytes
  • ../doubt-driven-development/SKILL.mddoc16,753 bytes
  • ../frontend-ui-engineering/SKILL.mddoc11,950 bytes
  • ../git-workflow-and-versioning/SKILL.mddoc14,403 bytes
  • ../idea-refine/SKILL.mddoc9,404 bytes
  • ../idea-refine/examples.mddoc20,284 bytes
  • ../idea-refine/frameworks.mddoc5,404 bytes
  • ../idea-refine/refinement-criteria.mddoc5,738 bytes
  • ../idea-refine/scripts/idea-refine.shruns342 bytes
  • ../incremental-implementation/SKILL.mddoc9,629 bytes
  • ../interview-me/SKILL.mddoc15,080 bytes
  • ../observability-and-instrumentation/SKILL.mddoc13,948 bytes
  • ../performance-optimization/SKILL.mddoc16,783 bytes
  • ../performance-optimization/references/optimization-patterns.mddoc9,692 bytes
  • ../planning-and-task-breakdown/SKILL.mddoc10,564 bytes
  • ../security-and-hardening/SKILL.mddoc17,578 bytes
  • ../security-and-hardening/references/hardening-patterns.mddoc13,352 bytes
  • ../shipping-and-launch/SKILL.mddoc11,540 bytes
  • ../source-driven-development/SKILL.mddoc10,104 bytes
  • ../spec-driven-development/SKILL.mddoc13,099 bytes
  • ../test-driven-development/SKILL.mddoc16,845 bytes
  • ../using-agent-skills/SKILL.mddoc10,446 bytes
Read SKILL.md

# API and Interface Design

## Overview

Design stable, well-documented interfaces that are hard to misuse. Good interfaces make the right thing easy and the wrong thing hard. This applies to REST APIs, GraphQL schemas, module boundaries, component props, and any surface where one piece of code talks to another.

## When to Use

- Designing new API endpoints
- Defining module boundaries or contracts between teams
- Creating component prop interfaces
- Establishing database schema that informs API shape
- Changing existing public interfaces
View the complete source on GitHub

Skills included

  • api-and-interface-design
  • browser-testing-with-devtools
  • ci-cd-and-automation
  • code-review-and-quality
  • code-simplification
  • constraint-driven-development
  • context-engineering
  • debugging-and-error-recovery
  • deprecation-and-migration
  • documentation-and-adrs
  • doubt-driven-development
  • frontend-ui-engineering
  • git-workflow-and-versioning
  • idea-refine
  • incremental-implementation
  • interview-me
  • observability-and-instrumentation
  • performance-optimization
  • planning-and-task-breakdown
  • security-and-hardening
  • shipping-and-launch
  • source-driven-development
  • spec-driven-development
  • test-driven-development
  • using-agent-skills

Repository facts

License
MIT
Created
Feb 15, 2026
Last pushed
Nov 1, 2026
Forks
11,865
Open issues
56
Project activity
Active

Rank over the last 12 weeks

Now #12 · best #12 · same as 30 days ago

  1. #13 on Aug 8
  2. #12 from Aug 9 to Aug 16
  3. #13 from Aug 17 to Sep 18
  4. #12 from Sep 19 to Oct 24
  5. #13 on Oct 25
  6. #12 since Oct 28
2 earlier periods
  1. #14 on Aug 2
  2. #14 on Aug 7

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 40 notes
  • .claude/commands/webperf.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • commands/webperf.toml:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/browser-testing-with-devtools/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/ci-cd-and-automation/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .claude/commands/webperf.md:1 Plugin-wide analysis incomplete; see repository notes
  • skills/code-simplification/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/constraint-driven-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/context-engineering/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/context-engineering/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/debugging-and-error-recovery/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/debugging-and-error-recovery/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/debugging-and-error-recovery/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .claude/commands/webperf.md:1 Plugin-wide analysis incomplete; see repository notes
  • skills/documentation-and-adrs/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/doubt-driven-development/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .claude/commands/webperf.md:1 Plugin-wide analysis incomplete; see repository notes
  • skills/git-workflow-and-versioning/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/git-workflow-and-versioning/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/git-workflow-and-versioning/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/git-workflow-and-versioning/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 97 signals by file

.claude-plugin/marketplace.json

  • Network accessline 1
    {   "$schema": "https://json.schemastore.org/claude-code-marketplace.json",
  • Network accessline 2
    "$schema": "https://json.schemastore.org/claude-code-marketplace.json",
  • Network accessline 5
    "owner": {     "name": "Addy Osmani",     "url": "https://github.com/addyosmani"
  • Network accessline 6
    "name": "Addy Osmani",     "url": "https://github.com/addyosmani"   },
  • Network accessline 7
    "url": "https://github.com/addyosmani"
  • Network accessline 16
    },       "description": "Production-grade engineering skills covering every phase of software development: spec, plan, build, verify, review, and ship.",       "homepage": "https://github.com/addyosmani/agent-skills",
  • Network accessline 17
    "description": "Production-grade engineering skills covering every phase of software development: spec, plan, build, verify, review, and ship.",       "homepage": "https://github.com/addyosmani/agent-skills",       "license": "MIT",
  • Network accessline 18
    "homepage": "https://github.com/addyosmani/agent-skills",

.claude-plugin/plugin.json

  • Network accessline 6
    "name": "Addy Osmani"   },   "homepage": "https://github.com/addyosmani/agent-skills",
  • Network accessline 7
    },   "homepage": "https://github.com/addyosmani/agent-skills",   "repository": "https://github.com/addyosmani/agent-skills",
  • Network accessline 8
    "homepage": "https://github.com/addyosmani/agent-skills",
  • Network accessline 9
    "repository": "https://github.com/addyosmani/agent-skills",

.claude/commands/webperf.md

  • Access to secretsline 13
    [Credential-related source omitted]

commands/webperf.toml

  • Access to secretsline 11
    [Credential-related source omitted]

references/accessibility-checklist.md

  • Network accessline 126
    # Automated audit npx --package=@axe-core/cli axe http://localhost:3000
  • Network accessline 126
    # Automated audit npx --package=@axe-core/cli axe http://localhost:3000
  • Network accessline 127
    npx --package=@axe-core/cli axe http://localhost:3000
  • Network accessline 127
    npx --package=@axe-core/cli axe http://localhost:3000

references/performance-checklist.md

  • Network accessline 189
    1. **Field data first** — check [CrUX Vis](https://developer.chrome.com/docs/crux/vis) or your RUM tool for real-user INP before optimising
  • Network accessline 189
    1. **Field data first** — check [CrUX Vis](https://developer.chrome.com/docs/crux/vis) or your RUM tool for real-user INP before optimising
  • Network accessline 189
    1. **Field data first** — check [CrUX Vis](https://developer.chrome.com/docs/crux/vis) or your RUM tool for real-user INP before optimising
  • Network accessline 194
    # Lighthouse CLI npx lighthouse http://localhost:3000 --output json --output-path ./report.json
  • Network accessline 194
    # Lighthouse CLI npx lighthouse http://localhost:3000 --output json --output-path ./report.json
  • Network accessline 194
    # Lighthouse CLI npx lighthouse http://localhost:3000 --output json --output-path ./report.json
  • Network accessline 195
    npx lighthouse http://localhost:3000 --output json --output-path ./report.json
  • Network accessline 195
    npx lighthouse http://localhost:3000 --output json --output-path ./report.json
  • Network accessline 195
    npx lighthouse http://localhost:3000 --output json --output-path ./report.json

references/security-checklist.md

  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Network accessline 122
    // Restrictive (recommended) cors({   origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
  • Network accessline 122
    // Restrictive (recommended) cors({   origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
  • Network accessline 122
    // Restrictive (recommended) cors({   origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
  • Network accessline 123
    cors({   origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],   credentials: true,
  • Network accessline 123
    cors({   origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],   credentials: true,
  • Network accessline 123
    cors({   origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],   credentials: true,
  • Network accessline 124
    origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
  • Network accessline 124
    origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
  • Network accessline 124
    origin: ['https://yourdomain.com', 'https://app.yourdomain.com'],
  • Network accessline 182
    Authoritative checks: [npm install-scripts](https://docs.npmjs.com/cli/v11/commands/npm-install-scripts/), [install policy](https://docs.npmjs.com/cli/v11/commands/npm-install/), and [CLI releases](https://github.com/npm/cli/releases); [pnp
  • Network accessline 182
    Authoritative checks: [npm install-scripts](https://docs.npmjs.com/cli/v11/commands/npm-install-scripts/), [install policy](https://docs.npmjs.com/cli/v11/commands/npm-install/), and [CLI releases](https://github.com/npm/cli/releases); [pnp
  • Network accessline 182
    Authoritative checks: [npm install-scripts](https://docs.npmjs.com/cli/v11/commands/npm-install-scripts/), [install policy](https://docs.npmjs.com/cli/v11/commands/npm-install/), and [CLI releases](https://github.com/npm/cli/releases); [pnp
  • Network accessline 235
    For apps with LLM features. See the [OWASP GenAI Security Project](https://genai.owasp.org/llm-top-10/).
  • Network accessline 235
    For apps with LLM features. See the [OWASP GenAI Security Project](https://genai.owasp.org/llm-top-10/).
  • Network accessline 235
    For apps with LLM features. See the [OWASP GenAI Security Project](https://genai.owasp.org/llm-top-10/).

skills/browser-testing-with-devtools/SKILL.md

  • Access to secretsline 64
    [Credential-related source omitted]
  • Access to secretsline 64
    [Credential-related source omitted]
  • Network accessline 193
    ### Setup 1. Navigate to http://localhost:3000/tasks
  • Network accessline 193
    ### Setup 1. Navigate to http://localhost:3000/tasks
  • Network accessline 194
    1. Navigate to http://localhost:3000/tasks
  • Network accessline 194
    1. Navigate to http://localhost:3000/tasks

skills/ci-cd-and-automation/SKILL.md

  • Access to secretsline 278
    [Credential-related source omitted]
  • Access to secretsline 278
    [Credential-related source omitted]

skills/code-simplification/SKILL.md

  • Network accessline 8
    > Inspired by the [Claude Code Simplifier plugin](https://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md). Adapted here as a model-agnostic, process-driven skill for any AI coding a
  • Network accessline 8
    > Inspired by the [Claude Code Simplifier plugin](https://github.com/anthropics/claude-plugins-official/blob/main/plugins/code-simplifier/agents/code-simplifier.md). Adapted here as a model-agnostic, process-driven skill for any AI coding a

skills/constraint-driven-development/scripts/quality-gate.mjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Executable scriptline 1
    #!/usr/bin/env node

skills/context-engineering/SKILL.md

  • Access to secretsline 65
    [Credential-related source omitted]
  • Access to secretsline 65
    [Credential-related source omitted]

skills/git-workflow-and-versioning/SKILL.md

  • Access to secretsline 220
    [Credential-related source omitted]
  • Access to secretsline 220
    [Credential-related source omitted]

skills/idea-refine/scripts/idea-refine.sh

  • Executable scriptline 1
    #!/bin/bash
  • Executable scriptline 1
    #!/bin/bash

skills/security-and-hardening/SKILL.md

  • Network accessline 156
    Calling an LLM — chatbots, summarizers, agents, RAG — adds a new attack surface; map it to the [OWASP Top 10 for LLM Applications (2025)](https://genai.owasp.org/llm-top-10/):
  • Network accessline 156
    Calling an LLM — chatbots, summarizers, agents, RAG — adds a new attack surface; map it to the [OWASP Top 10 for LLM Applications (2025)](https://genai.owasp.org/llm-top-10/):

skills/security-and-hardening/references/hardening-patterns.md

  • Access to secretsline 36
    [Credential-related source omitted]
  • Access to secretsline 36
    [Credential-related source omitted]
  • Network accessline 105
    // CORS — restrict to known origins app.use(cors({   origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
  • Network accessline 105
    // CORS — restrict to known origins app.use(cors({   origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
  • Network accessline 106
    app.use(cors({   origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',   credentials: true,
  • Network accessline 106
    app.use(cors({   origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',   credentials: true,
  • Network accessline 107
    origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
  • Network accessline 107
    origin: process.env.ALLOWED_ORIGINS?.split(',') || 'http://localhost:3000',
  • Access to secretsline 122
    [Credential-related source omitted]
  • Access to secretsline 122
    [Credential-related source omitted]
  • Access to secretsline 123
    [Credential-related source omitted]
  • Access to secretsline 123
    [Credential-related source omitted]
  • Network accessline 131
    // BAD: fetch whatever the user gives you await fetch(req.body.webhookUrl);
  • Network accessline 131
    // BAD: fetch whatever the user gives you await fetch(req.body.webhookUrl);
  • Network accessline 132
    await fetch(req.body.webhookUrl);
  • Network accessline 132
    await fetch(req.body.webhookUrl);
  • Network accessline 152
    await fetch(await assertSafeUrl(req.body.webhookUrl), { redirect: 'error' });
  • Network accessline 152
    await fetch(await assertSafeUrl(req.body.webhookUrl), { redirect: 'error' });
  • Access to secretsline 281
    [Credential-related source omitted]
  • Access to secretsline 281
    [Credential-related source omitted]
  • Access to secretsline 283
    [Credential-related source omitted]
  • Access to secretsline 283
    [Credential-related source omitted]
  • Access to secretsline 287
    [Credential-related source omitted]
  • Access to secretsline 287
    [Credential-related source omitted]
  • Access to secretsline 299
    [Credential-related source omitted]
  • Access to secretsline 299
    [Credential-related source omitted]

skills/source-driven-development/SKILL.md

  • Network accessline 148
    // React 19 form handling with useActionState // Source: https://react.dev/reference/react/useActionState#usage
  • Network accessline 148
    // React 19 form handling with useActionState // Source: https://react.dev/reference/react/useActionState#usage
  • Network accessline 149
    // Source: https://react.dev/reference/react/useActionState#usage
  • Network accessline 149
    // Source: https://react.dev/reference/react/useActionState#usage
  • Network accessline 160
    Source: https://react.dev/blog/2024/12/05/react-19#actions
  • Network accessline 160
    Source: https://react.dev/blog/2024/12/05/react-19#actions

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 84 facts

and 34 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexNativeManifest AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/api-and-interface-design/SKILL.md.cursor/skills/<skill-name>/
Gemini CLINativePath .gemini/commands/build.toml.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/api-and-interface-design/SKILL.md.github/skills/<skill-name>/
OpenCodeNativePath .opencode/skills.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

addyosmani/agent-skills: #12 on hotskills, 113.7k stars

[![addyosmani/agent-skills on hotskills](https://hotskills.dev/badge/addyosmani-agent-skills.svg)](https://hotskills.dev/skill/addyosmani-agent-skills/)