Template
A TypeScript monorepo starter with pnpm workspaces, Turborepo, oxlint, oxfmt, tsdown, Vitest, Changesets, CI, and a shared config for AI coding agents.
What it is
A drop-in TypeScript monorepo starter. Fork it, rename a few fields, and you have a repository with build, test, lint, format, release, and CI already wired together, plus a shared setup for AI coding agents.
Why I built it
I kept copying the same config between repos: the linter, the formatter, the test runner, the release flow, the CI workflow. The template collapses that into one fork and keeps the setup consistent across everything I build.
Tooling
pnpm workspaces and Turborepo run the monorepo. oxlint and oxfmt handle linting and formatting, tsdown builds the packages, and Vitest runs the tests with coverage reported to Codecov. A GitHub Actions workflow runs lint, type-check, and test on every push.
Releases go through Changesets: add a
changeset, and when it lands on main a release workflow opens a Version Packages PR that
publishes the affected packages to npm with provenance.
Dependency upgrades run through taze with a
three-day maturity period, so new releases soak before they land.
Set up for AI agents
The template builds on two open formats, AGENTS.md and Agent Skills, with symlinks so
every tool reads from one source instead of drifting copies. AGENTS.md is the canonical
instruction file. Claude Code,
Codex, Copilot,
Cursor, Gemini, and
other AGENTS.md runtimes all read from it.
The shared toolset lives in tools/claude/ and doubles as an installable Claude Code
plugin: always-on convention rules (code style, JSDoc, markdown, security, testing, USA English),
on-demand skills, slash commands like /changeset and /spec, a code-reviewer
subagent, output styles, and hooks that install dependencies and format on edit. For
larger features, plans/ holds a spec-driven workflow of spec, research, plan, slices,
and verification.
Use the Claude Code plugin
You don't need to adopt the whole template to get the agent setup. The tools/claude/
folder ships as a Claude Code plugin, so you can install the same rules, skills, commands,
and code-reviewer subagent in any existing project. Run these in Claude Code:
/plugin marketplace add stijnvanhulle/template
/plugin install plugin@stijnvanhulle/template
The hooks (session-start install, format-on-edit, edit guards) stay in the template's own
.claude/ and don't ship with the plugin, so installing it won't run scripts in your repo.
Start a new project
gh repo create my-project --template stijnvanhulle/template
Fork it, rename the package fields, and start writing code.