On the v12 branch, work focuses on v12, in v12/, until it becomes main. Read v12/AGENTS.md first. Push to v12 directly, with no pull requests against it, from any folder (Landing on v12).
The root is one pnpm workspace, with one lockfile and one turbo.json (one-workspace.md). pnpm install anywhere installs all of it.
v12/: v12, the@trpc12/*packages, and their design docs inv12/.agent-docs/.v11/: v11, the@trpc/*packages and examples, with thev11-*workflows, kept working and released until 12.0.0 (v11-stays-until-12.md). Don't add v12 code there (v11-folder.md).www/: trpc.io's site, serving every version's docs: v12's inwww/v12/docs/, v11's inwww/v11/docs/. v11's, v10's, v9's docs and the blog are edited onmain.tooling/: what v11, v12 and the site share (tooling/ui,tooling/subtree). Tooling for one version is in its own folder'stooling/.examples/: onlyvercel.jsonstubs, so the v11 Vercel projects, whose root directories are still those paths, skip this branch and its branches.mainkeeps the real configs, and the stubs go at the cutover (v11-folder.md). Anything else there in a checkout is an ignored leftover; delete it.
At the root, pnpm build, typecheck, lint and test run every package's through turbo, cached locally and in CI (task-cache.md), and pnpm check:www checks the site and tooling/. Each version's own commands and gates are in its AGENTS.md.
Skills live in .agents/skills/. One we write also needs a .claude/skills/<name> symlink and a ! entry in .oxfmtrc.json; installed ones get their link from npx skills add and stay unformatted. Don't add a .cursor/ folder. Read the matching one before starting:
decision-round: going through v12's open decisions with a human.trpc-conventions: fixing a bug, writing tests or writing TypeScript inv11/packages/. It wins where the skills below disagree.pr-agent-callout: working on a pull request.tdd: fixing a bug.typescript-best-practicesandprinciple-type-system-discipline: writing or reviewing TypeScript.principle-boundary-discipline: validation, error handling or adapters.principle-encode-lessons-in-structure: turning a repeated review comment into a lint, type or check.
tdd, typescript-best-practices and the principle-* skills are Lauren Tan's pstack skills, installed unchanged by the skills CLI and pinned in skills-lock.json; their MIT license is in NOTICE-pstack.md. Don't edit them. To update, rerun at the root with a new commit and update the notice:
npx skills add https://github.com/cursor/plugins/tree/<sha>/pstack/skills --skill tdd typescript-best-practices principle-type-system-discipline principle-boundary-discipline principle-encode-lessons-in-structure -a claude-code codex cursor -y