Built-in stack support
Requires the stacks pack:
npx create-lean-agent-kit@latest . --enable-pack stacksWhat it is
The stacks pack teaches your agent about the frameworks and tools in your repo. It can detect what you already use (Next.js, Hono, Prisma, …) and wire matching skills and conventions into AGENTS.md. On a greenfield project it can also scaffold a new app from a questionnaire, then run detection afterward.
Nothing runs as a Node library. The agent follows Markdown skills — leanagentkit-match-stack and leanagentkit-scaffold — backed by a registry of supported technologies.
Do I need this pack?
- Enable if you are greenfield-scaffolding an app, or you want automatic stack detection + external skill install (Hono, Cloudflare, Tailwind, Svelte MCP, …).
- Skip if your repo is stable, you already wrote stack conventions in
AGENTS.md, and you do not need scaffold recipes.
Use cases
- Greenfield — empty or kit-only repo; pick Next.js / SvelteKit / Hono / etc. from a questionnaire; agent runs a non-interactive generator, then match-stack. May also offer optional commit helpers.
- Brownfield — existing Django + React monorepo; match-stack detects rows, offers skill installs, folds playbook conventions into
AGENTS.md§4 / §7. Does not install commitlint/commitizen (scaffold-only — see below). - Additive — already have a Node app; scaffold Prisma or Tailwind without replacing the base framework. Commit helpers may be offered when the recipe touches a Node
package.json. - Re-run after enable — you enabled Caveman or git-lifecycle; re-run match-stack so
AGENTS.md§7 advertises the new skills.
How it works
| Path | Skill | When |
|---|---|---|
| Detect / wire | leanagentkit-match-stack | Existing app, or after scaffold |
| Create / add | leanagentkit-scaffold | Greenfield base app or additive ORM / UI / platform |
Playbook vs external skill: some registry rows install an upstream skill or MCP (Cloudflare, Hono, Svelte, Tailwind). Others are playbook-only (React, Express, Django, Prisma, Go) — local conventions only, no external install.
Bootstrap offers stacks in Step 0; if chosen, it runs match-stack after conventions (and may offer scaffold first on greenfield).
Optional commit helpers
During leanagentkit-scaffold on Node apps, the agent may ask whether to add commit helpers — Conventional Commits via commitlint, commitizen (cz), husky commit-msg, and commit-and-tag-version for releases. That prompt is scaffold-only (skill-level Step 4.6 in leanagentkit-scaffold, not listed in recipe ## Questions tables). When installed (or already present), leanagentkit-init-conventions / scaffold records in AGENTS.md §4 that subject and body/footer lines must be ≤ 100 chars (@commitlint/config-conventional) and prefers the package manager’s commit script (e.g. pnpm commit).
| Situation | Commit helpers offered? |
|---|---|
Greenfield / additive scaffold that creates or updates a Node package.json | Yes (default yes) |
Existing (occupied) app — bootstrap + match-stack only | No |
| Python/Go-only recipes with no Node manifest | No |
Already configured (commitlint.config.*, .husky/commit-msg, or commitizen in package.json) | Skipped |
On a brownfield Vite + React (or similar) repo, installing the kit and running bootstrap wires stack skills — it does not ask about commitlint or commitizen. To add them later, ask the agent to run the commit-helpers steps from leanagentkit-scaffold Step 5 against your app directory, or install the packages yourself.
Related: Getting Started · Git lifecycle (branch/PR offers, not commit-message tooling) · Caveman (terse message style, not commitlint).
Supported stacks (registry)
Detection rules, install commands, and playbook paths live in the pack registry below. Edit the source file in the kit — do not edit the generated page by hand.
Stack Registry
Single source of truth mapping a detected technology → the external agent skill for it, the correct install method, and the local integration playbook. The
leanagentkit-bootstrapandleanagentkit-match-stackskills read this. Edit here, not in skills.Re-check install commands if a command fails or a year has passed since bootstrap.
How to read a row
- Detect — evidence in the repo that turns this row "on".
- Skill — the upstream repo.
- Install — preferred command.
npx skills add <repo>(the skills.sh CLI) works for all copy-in skills below and is the portable default. Plugin marketplaces are noted as alternatives. - Type —
skill(copy-in files) vsmcp(running server, different setup). - Playbook — the local file with stack-specific conventions to apply.
- Post-install — extra step required before the skill is usable.
Cloudflare (Workers / Pages / Agents SDK)
- Detect:
wrangler.toml/wrangler.jsonc,@cloudflare/*orwranglerin deps,.dev.vars - Skill:
cloudflare/skills - Type: skill (+ optional MCP servers for docs/bindings/observability)
- Install:
npx skills add https://github.com/cloudflare/skills- Claude Code alt:
npx skills add https://github.com/cloudflare/skills -a claude-code - Claude Code alt (plugin):
/plugin marketplace add cloudflare/skills→/plugin install cloudflare@cloudflare - Cursor alt:
npx skills add https://github.com/cloudflare/skills -a cursor --copy - Cursor alt (rules): Settings → Rules → Add Rule → Remote Rule (GitHub) →
cloudflare/skills
- Claude Code alt:
- Provides:
cloudflare,agents-sdk,durable-objects,wrangler,sandbox-sdk,web-perf, MCP-server builders - Optional MCP:
cloudflare-docs,cloudflare-bindings,cloudflare-observability(see upstream.mcp.json) - Playbook:
.agent/stacks/cloudflare.md - Post-install: none
Hono
- Detect:
honoin deps,import { Hono } from 'hono',app.get(/app.route(patterns - Skill:
yusukebe/hono-skill - Type: skill (+ optional
hono-docsMCP) - Install:
npx skills add yusukebe/hono-skill- Claude Code alt:
npx skills add yusukebe/hono-skill -a claude-code - Claude Code alt (plugin):
/plugin marketplace add yusukebe/hono-skill→/plugin install hono-skill@hono - Cursor alt:
npx skills add yusukebe/hono-skill -a cursor --copy
- Claude Code alt:
- Provides:
hono(routing, context, middleware, JSX, validation, RPC, streaming) +hono requesttesting - Requires: Hono CLI as devDep →
npm install -D @hono/cli - Optional MCP:
hono-docs→claude mcp add --transport http hono-docs https://hono-docs-mcp.yusukebe.workers.dev/mcp - Playbook:
.agent/stacks/hono.md - Post-install: install
@hono/clidevDependency
Svelte / SvelteKit
- Detect:
svelte/@sveltejs/kitin deps,svelte.config.js,*.sveltefiles - Skill:
sveltejs/ai-tools— this is an MCP server, not a copy-in skill - Type: mcp (hosted at
mcp.svelte.dev) - Install (MCP, preferred): add the remote MCP server to your agent config:json
{ "mcpServers": { "svelte": { "type": "http", "url": "https://mcp.svelte.dev/mcp" } } }- Claude Code / Cursor: install the plugin from the repo's
.claude-plugin/.cursor-plugin. - Claude Code alt (MCP config): add to root
.mcp.json:json{ "mcpServers": { "svelte": { "type": "http", "url": "https://mcp.svelte.dev/mcp" } } } - Cursor alt (MCP config): add to
.cursor/mcp.json:json{ "mcpServers": { "svelte": { "type": "http", "url": "https://mcp.svelte.dev/mcp" } } }
- Claude Code / Cursor: install the plugin from the repo's
- Provides: live Svelte 5 / SvelteKit docs retrieval, autofix, playground generation via MCP tools
- Playbook:
.agent/stacks/svelte.md - Post-install: confirm the agent lists the
svelteMCP tools; verifymcp.svelte.devreachable - Note: because it's an MCP, there are no files to copy into
.agent/skills/. The playbook still applies (conventions + "prefer the Svelte MCP for API questions").
Astro
- Detect:
astroin deps,astro.config.{mjs,ts},*.astrofiles,src/pages/with.astroroutes,src/content/collections - Skill:
withastro/astro— skills live in the framework monorepo under.agents/skills/(note:.agents, plural), alongside the repo's rootAGENTS.md - Type: skill (copy-in; maintained inside the official framework repo, MIT)
- Install: no
npx skills addpublished — copy the skill folder(s) from the repo into your agent's skills dir:bash(or sparse-checkoutnpx degit withastro/astro/.agents/skills .agent/skills/vendor/astro.agents/skillsand copy.) Point your agent at the copied folder.- Claude Code alt: copy into
.claude/skills/:bashnpx degit withastro/astro/.agents/skills .claude/skills/astro - Cursor alt: copy into
.cursor/skills/or.agents/skills/:bashnpx degit withastro/astro/.agents/skills .cursor/skills/astro - Pin to a tag for stability instead of
main; re-pull to update (these track framework releases).
- Claude Code alt: copy into
- Provides: Astro authoring conventions — content collections,
.astrocomponents, islands/hydration directives, routing, integrations, server/SSR vs static - Related (separate repos): Starlight (
withastro/starlight) for docs sites; Astro DB (@astrojs/db) - Pairs with: UI-framework rows (React/Svelte/Vue) if islands are used, and the Cloudflare/Netlify/Vercel rows via the matching
@astrojs/*adapter - Playbook:
.agent/stacks/astro.md - Post-install: confirm the copied skill is listed by your agent; note the adapter in
astro.config(it sets the deploy target)
shadcn-svelte (UI components)
- Detect:
components.jsonwith a svelte/shadcn config,bits-ui/mode-watcher/formsnapin deps,$lib/components/ui/directory, shadcn-svelte imports - Skill:
antstanley/shadcn-svelte-skill - Type: skill (copy-in; 54 component references + setup/migration guides)
- Install: clone and package into the project skills dir (preferred):
- Cursor:bash
git clone --depth 1 https://github.com/antstanley/shadcn-svelte-skill /tmp/shadcn-svelte-skill cd /tmp/shadcn-svelte-skill && python scripts/package_skill.py shadcn-svelte dist unzip -o dist/shadcn-svelte.zip -d .cursor/skills/ - Claude Code (project):bash
git clone --depth 1 https://github.com/antstanley/shadcn-svelte-skill /tmp/shadcn-svelte-skill cd /tmp/shadcn-svelte-skill && python scripts/package_skill.py shadcn-svelte dist unzip -o dist/shadcn-svelte.zip -d .claude/skills/ - Claude Code (global): curl-piped install (secondary; pinned v1.0.3):
curl -fsSL https://github.com/antstanley/shadcn-svelte-skill/releases/download/v1.0.3/install.sh | bash- Installs to
~/.claude/skills/shadcn-svelte.
- Installs to
- From source: clone, then
python scripts/package_skill.py shadcn-svelte distand unzip into your skills dir.
- Cursor:
- Provides: component recipes (Button, Dialog, Form, Data Table…), Bits UI integration, Superforms/Formsnap forms, dark mode via mode-watcher, Svelte 5 + Tailwind v4 migration notes
- Depends on: Svelte 5 (see svelte row) and Tailwind v4 (see tailwind row) — enable those rows too
- Playbook:
.agent/stacks/shadcn-svelte.md - Post-install: verify the agent lists the
shadcn-svelteskill; ensurecomponents.jsonexists (runnpx shadcn-svelte@latest initif not)
Tailwind CSS v4
- Detect:
tailwindcss(v4.x) in deps,@import "tailwindcss"in CSS,@themeblocks,@tailwindcss/vite - Skill:
Lombiq/Tailwind-Agent-Skills - Type: skill (with a local docs-snapshot generator)
- Install:
npx skills add Lombiq/Tailwind-Agent-Skills- Claude Code alt:
npx skills add Lombiq/Tailwind-Agent-Skills -a claude-code - Cursor alt:
npx skills add Lombiq/Tailwind-Agent-Skills -a cursor --copy - Manual: copy
skills/tailwind-4-docs/into your agent's skills dir
- Claude Code alt:
- Provides:
tailwind-4-docs— gotchas list, implementation playbook, local docs index - Playbook:
.agent/stacks/tailwind.md - Post-install (REQUIRED): the skill does NOT bundle docs (upstream licensing). Initialize the snapshot:
python skills/tailwind-4-docs/scripts/sync_tailwind_docs.py --accept-docs-licenseRe-run ifreferences/docs/is missing or older than one week.
Turborepo
- Detect:
turbo.json/turbo.jsonc,turboin rootdevDependencies, monorepo workspace config (pnpm-workspace.yamlorworkspacesinpackage.json) withapps/+packages/ - Skill:
vercel/turborepo— skill lives in the framework monorepo underskills/turborepo/(note:skills, alongside the repo's rootAGENTS.md) - Type: skill (copy-in; maintained inside the official Turborepo repo, MIT)
- Install: no
npx skills addpublished — vendor the skill folder from the repo into your agent's skills dir:bashnpx degit vercel/turborepo/skills/turborepo .agent/skills/vendor/turborepo- Claude Code alt: copy into
.claude/skills/:bashnpx degit vercel/turborepo/skills/turborepo .claude/skills/turborepo - Cursor alt: copy into
.cursor/skills/or.agents/skills/:bashnpx degit vercel/turborepo/skills/turborepo .cursor/skills/turborepo - Pin to a release tag instead of
mainfor stability; re-pull to update (these track Turborepo releases). - Verify whether
npx skills add vercel/turboreporesolves theskills/turboreposubdir; preferdegitif it does not.
- Claude Code alt: copy into
- Provides:
turboreposkill —turbo.jsontask config (dependsOn,outputs,inputs,env), local/remote caching,--filter/--affected, env modes, CI setup, package/monorepo best practices, boundaries; plus a/turborepocommand - Pairs with: the framework rows for packages inside the monorepo (Next.js, React, Svelte, etc.)
- Playbook:
.agent/stacks/turbo.md - Post-install: confirm the agent lists the
turboreposkill
Python
- Detect:
pyproject.toml,requirements.txt,setup.py, orPipfile;*.pysource files - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: project layout, venv, testing conventions
- Playbook:
.agent/stacks/python.md - Post-install: none
FastAPI
- Detect:
fastapiin deps,from fastapi import,APIRouterpatterns - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: routing, dependency injection, Pydantic models, OpenAPI
- Playbook:
.agent/stacks/fastapi.md - Post-install: none
Django
- Detect:
djangoin deps,manage.py,settings.py,INSTALLED_APPS - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: apps, models, views, URL routing, migrations
- Playbook:
.agent/stacks/django.md - Post-install: none
Node / Express
- Detect:
expressin deps,require('express')orimport express from 'express' - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: routing, middleware, error handling
- Playbook:
.agent/stacks/express.md - Post-install: none
React
- Detect:
reactin deps,*.tsx/*.jsxwith React imports,vite.config+ React plugin - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: components, hooks, state, testing
- Playbook:
.agent/stacks/react.md - Post-install: none
Next.js
- Detect:
nextin deps,next.config.{js,mjs,ts},app/orpages/directory - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: App Router, server components, API routes, metadata
- Playbook:
.agent/stacks/nextjs.md - Post-install: none
PostgreSQL + Prisma
- Detect:
prismain deps,prisma/schema.prisma - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: schema, migrations, client usage
- Playbook:
.agent/stacks/prisma.md - Post-install: none
PostgreSQL + Drizzle
- Detect:
drizzle-ormin deps,drizzle.config.ts,schema.ts/db/schema - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: schema definitions, migrations, query patterns
- Playbook:
.agent/stacks/drizzle.md - Post-install: none
Go
- Detect:
go.mod,*.gofiles - Skill: (none — local playbook)
- Type: playbook
- Install: none
- Provides: packages, modules, testing, error handling
- Playbook:
.agent/stacks/go.md - Post-install: none
Adding your own rows
To extend: add a section above with the same fields, then (optionally) create a matching .agent/stacks/<name>.md playbook. The leanagentkit-match-stack skill auto-discovers any row whose Detect condition is met.
Source: template/packs/stacks/.agent/stacks/registry.md.
Intro: docs/.partials/stacks-intro.md.