Skip to main content
A skill teaches an agent how: patterns, gotchas and the order to decide things in. An MCP server gives it live data: the component list for the installed version, a running app. Both are needed. heroui-react teaches composition, and the HeroUI MCP says which components exist today.

Three kinds, and where each lives

The spec engine

The spec flow is GitHub spec-kit, described on Spec lifecycle. The sdlc plugin no longer applies in this repository (ADR 0121 D3). Its failure-loop and durable-findings skills and eight of its roles are being ported into .agents/ under MIT (D2, D9); until they land, the procedures on Spec lifecycle are the reference.

Vendored upstream skills

Skills are checked into .agents/skills/ so that a clone, a second workspace and CI carry the guidance. Skills installed in a user’s home directory belong to one machine.
skills-lock.json records each source. Install and update through the CLI only. Do not edit an installed skill in place: write a house skill, or open a change upstream. That portability has a price. A vendored copy drifts from its source, silently, and nothing detects it. The mitigation is a rule: re-vendor deliberately, and when a vendored skill and its upstream disagree, upstream is the source. The families to install are listed below. Record each in this page when you add it.

Fenced: the Encore reference

The fourteen encore-* skills from encoredev/skills teach hand-written Encore.ts. Here Encore is only the output of stackra gen in .stackra/encore/ (ADR 0124), so the skills live in .agents/reference/encore/, which is never projected: no session loads them by description match. compiler-engineer reads them on purpose as the reference for what the Encore emitter produces, and guardians may read them to judge generated output (ADR 0258). encore-getting-started, encore-migrate and encore-frontend were removed: they bootstrap, migrate to, or hand-connect a hand-written Encore app.

House skills

A house skill that this repository writes carries a category prefix: backend-, frontend-, mobile-, devops-, security-, db-, ai-, domain-, testing-, docs-, and code- for code conventions (ADR 0258). Upstream skills keep their upstream names, so npx skills update keeps working. The tree is flat on purpose: a skill is one SKILL.md in one top-level folder, so categories live in the name, not in folders.

House skills in this repository

Each is grounded in the ADRs it cites, uses one running example (refunding an invoice, billing.invoice.refund@1), ends with the check that enforces it, and says that the package’s own docs win once the package ships.

What is deliberately not vendored

A skill that is confidently wrong is worse than a missing one, because an agent follows it. The excluded set is not “less useful”. It is “would mislead someone working here”. Every absence has a recorded reason so nobody re-adds it as an oversight. The rule behind the table: this repository must not presume a product domain, a vendor or a technology it ships no configuration for. Anything that contradicts an accepted decision is excluded outright. The same skills were also moved out of the owner’s user-level ~/.claude/skills (ADR 0193 decision 3), so they no longer load into Stackra sessions from there.

The rejected-technology check

pnpm agents:check (and node tools/scripts/agents-sync.mjs --lint) scans every skill in .agents/skills/ for technology the not-built-yet list rejects: other ORMs, Nest, reflect-metadata, encore.dev, expo-router, Next.js, Jest, ESLint, Prettier, Zustand, i18next, class-validator, Express, Fastify, Sanity, Tauri, Better Auth, XState, Storybook, GraphQL, and .spec test files or a root tests/ folder. A hit fails the check unless SKILL_TECH_ALLOWED in tools/scripts/agents-sync.mjs records why the mention is harmless, for example turborepo’s example task names. A vendored skill is never edited in place, so the exception lives in the script, with its reason.

Adding a skill

  1. Is it upstream? Install it with npx skills add and record it here.
  2. Is it a procedure someone re-derived, twice? Write a house skill with a category prefix. This is also where a finding that outlives its fix lands when the class is “procedure”.
  3. Does it contradict an accepted decision or the not-built-yet list? Do not add it, or fence it in .agents/reference/ for the one agent that needs it. Route to architecture-guardian.
  4. Hand the change to dependency-steward, who owns skills alongside catalogs.
Related: Roster, Hooks.