Skip to content
Create
D9 App

Agent-ready at the first commit

A Turborepo monorepo with a TanStack Start app, every dependency pinned, and the rules your coding agent reads already written.

pnpm create @draekien/d9-app my-app
Initialise a git repository?Yes--no-git
Install dependencies?Yes--no-install
Which agent integrations do you want?shadcn, hugeicons, motion--integrations <names>
my-app/(empty)143 files · 2 workspace packages
  • my-app/
  • ├── apps/web/TanStack Start on Vite
  • ├── packages/ui/shadcn, exported as @workspace/ui
  • ├── .agents/skills/agent skills, upgrade-dependencies among them
  • ├── .claude/rules, skills and hooks for Claude Code
  • ├── .intent/TanStack Intent gate
  • ├── AGENTS.mdproject rules for coding agents
  • └── biome.jsonGritQL plugins for React and TanStack
cd my-app
pnpm dev

Agent setup ships in the scaffold

The generated project configures Claude Code and Codex, and Cursor reads .cursor/mcp.json. Other agents that read AGENTS.md and .agents/skills/ get the rules and the skills without extra setup.

ls -A my-app
.agents .biome .claude .codex .cursor .git .gitignore .intent .mcp.json AGENTS.md CLAUDE.md apps biome.json lefthook.yml node_modules package.json packages pnpm-lock.yaml pnpm-workspace.yaml scripts skills-lock.json tsconfig.json turbo.json
filepurpose
AGENTS.md, CLAUDE.mdproject rules: run tasks from the root, exact pins only
.claude/rules/*.mdpath-scoped rules, loaded only for matching files
.claude/settings.jsonSessionStart and PreToolUse hooks for the Intent gate
.codex/hooks.jsonthe same hooks for Codex
.intent/hooks/denies the first edit until the agent loads a matching skill
.agents/skills/shadcn, turborepo, motion, hugeicons, upgrade-dependencies
.mcp.json, .cursor/mcp.jsonshadcn and hugeicons as pinned npx commands, motion over HTTP
biome.jsonGritQL plugins: no fetch in an effect, no inline query key

Pinned and predictable

Every dependency is pinned to an exact version. The project never receives an upstream release until you run the bundled upgrade-dependencies skill or change a pin yourself. Template pins refresh from the npm registry on the 1st and 15th of each month.

grep saveExact pnpm-workspace.yaml
saveExact: true
/upgrade-dependencies
| Package        | Old   | New   | Type  |
| -------------- | ----- | ----- | ----- |
| @base-ui/react | 1.8.0 | 1.9.0 | minor |

held: major
- @types/node 22.20.5 -> 26.6.4 (apps/web, packages/ui): declined

What you get

One tool per concern, the default stack preselected.

concerntool
App frameworkTanStack Start (Router, Query, Form, Table, Hotkeys)
UIReact 19 with React Compiler
LanguageTypeScript 7
Build and testVite, Vitest
MonorepoTurborepo, pnpm workspaces
Lint and formatBiome
Git hooksLefthook
Componentsshadcn on Base UI, Hugeicons
StylingTailwind 4, Motion

Minimal by default

/ is a minimal page. The query, form, table, hotkeys and motion examples render at /examples and live in one directory. Delete it to remove every example; the next build regenerates the route tree without it.

rm -r apps/web/src/routes/examples
pnpm build
apps/web/src/routeTree.gen.tsregenerated without /examples
commandruns
pnpm devvite dev for apps/web
pnpm buildvite build for apps/web, dependencies first
pnpm checkBiome, the comment check, and every package check task
pnpm typechecktsc --noEmit in every package
pnpm testvitest run in every package
pnpm create @draekien/d9-app my-app
read the docsprompts, flags, errors and the generated project