Skip to content

stijnvanhulle/template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

174 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


Template

A modern TypeScript monorepo template (pnpm workspaces, Turborepo, oxlint, oxfmt, tsdown, Vitest, and Changesets).

About

A drop-in monorepo starter. Fork it, rename a few fields, and you have a production-ready repository with build, test, lint, format, release and CI already wired up.

AI assistant configuration

This template is set up for AI coding agents. It builds on two open formats, AGENTS.md and Agent Skills, and uses symlinks so every tool reads from one source instead of drifting copies.

AGENTS.md is the canonical instruction file. The shared toolset (skills, commands, code-reviewer agent, output styles, and conventions) lives in tools/claude/, which doubles as a Claude Code plugin (installable as toolkit@stijnvanhulle). The workspace paths under .claude/ and .agents/ symlink into that folder, so the template repo and any project that installs the plugin run the same content from a single source of truth. See tools/claude/README.md for install steps.

The cross-provider skills are the canonical shared asset and live in .agents/skills/. Both plugins symlink their skills/ to it, so they never drift. The same toolset ships as a Cursor plugin in tools/cursor/, with the conventions expressed as Cursor rules (rules/*.mdc). The workspace paths under .cursor/ symlink into it, and .cursor-plugin/marketplace.json makes it installable from Cursor's marketplace. See tools/cursor/README.md for install steps.

Folder structure

AGENTS.md                                     # canonical instructions every agent reads
CLAUDE.md → AGENTS.md                         # Claude Code
GEMINI.md → AGENTS.md                         # Gemini CLI
.github/copilot-instructions.md → AGENTS.md   # GitHub Copilot in VS Code
.agents/
└── skills/                                   # canonical cross-provider Agent Skills, one SKILL.md folder each
    ├── changelog, deslop, documentation, humanizer, jsdoc, pr, spec-driven
    └── conventions/                          # always-on rules: code-style, jsdoc, markdown, security, testing, usa-english
tools/claude/                                 # distributable Claude Code plugin
├── .claude-plugin/plugin.json                # plugin manifest
├── README.md                                 # install + usage
├── skills → ../../.agents/skills             # shared skills (canonical home is .agents/skills)
├── commands/                                 # slash commands: /changeset, /deslop, /spec, /plan, /implement, /verify
├── agents/                                   # subagents: code-reviewer
└── output-styles/                            # system-prompt modes: house (default), plan, diagrams-first
tools/cursor/                                 # distributable Cursor plugin (same toolset, Cursor formats)
├── .cursor-plugin/plugin.json                # plugin manifest
├── README.md                                 # install + usage
├── rules/                                    # Cursor rules (.mdc): code-style, jsdoc, markdown, security, testing, usa-english
├── commands/                                 # slash commands: /changeset, /deslop, /spec, /plan, /implement, /verify
├── agents/                                   # subagents: code-reviewer
└── skills → ../../.agents/skills             # shared skills (canonical home is .agents/skills)
.cursor-plugin/marketplace.json               # Cursor marketplace manifest (lists the toolkit plugin)
.claude/                                      # Claude-specific workspace config
├── settings.json                             # permissions and hook registration
├── hooks/                                    # shell hooks: session-start, format-lint, guard-edit
├── skills → ../.agents/skills                # the shared skills, including conventions
├── commands → ../tools/claude/commands
├── agents → ../tools/claude/agents
├── output-styles → ../tools/claude/output-styles
└── rules → ../.agents/skills/conventions/rules # the conventions rule files, exposed as rules
.cursor/                                      # Cursor workspace config, symlinked into tools/cursor/
├── rules → ../tools/cursor/rules
├── commands → ../tools/cursor/commands
├── agents → ../tools/cursor/agents
└── skills → ../.agents/skills
plans/                                        # spec-driven workflow
├── README.md                                 # workflow guide
├── templates/                                # blank docs, copied per feature
│   ├── spec.md                               # requirements and acceptance criteria
│   ├── research.md                           # decisions, open questions, constraints
│   ├── plan.md                               # architecture and numbered slices
│   ├── verification.md                       # end-to-end scenarios, one per AC
│   └── slice.md                              # one implementation slice
└── <feature>/                                # one folder per plan
    ├── spec.md  research.md  plan.md  verification.md
    └── NNN-<slug>.md                         # slices, copied from templates/slice.md

Supported agents:

  • Claude Code reads CLAUDE.md (symlink to AGENTS.md) and .claude/skills (symlink to .agents/skills), plus the Claude-specific extensions below. Other projects can install the same toolset as a marketplace plugin (see tools/claude/README.md).
  • OpenAI Codex / ChatGPT reads AGENTS.md and Agent Skills natively.
  • GitHub Copilot reads AGENTS.md natively, and .github/copilot-instructions.md (symlink to AGENTS.md) in VS Code.
  • Cursor reads AGENTS.md natively, and the toolkit also ships as a Cursor plugin under tools/cursor/ (rules, commands, code-reviewer agent, and the shared skills). This repo wires it in through .cursor/, and other projects install it from the .cursor-plugin/marketplace.json marketplace. See tools/cursor/README.md.
  • OpenCode reads AGENTS.md and Agent Skills natively.
  • Gemini CLI reads GEMINI.md (symlink to AGENTS.md).
  • Windsurf and other AGENTS.md runtimes read AGENTS.md natively.
Entry point Tool Mechanism
AGENTS.md Codex / ChatGPT, Cursor, Copilot, OpenCode, Windsurf Read natively
CLAUDE.mdAGENTS.md Claude Code Symlink
GEMINI.mdAGENTS.md Gemini CLI Symlink
.github/copilot-instructions.mdAGENTS.md Copilot (VS Code) Symlink
.agents/skills/ Any Agent Skills runtime Open SKILL.md format (canonical home)
.claude/skills.agents/skills Claude Code Symlink
.cursor/tools/cursor/ Cursor Symlink
tools/claude/skills, tools/cursor/skills.agents/skills Both plugins Symlink
tools/claude/.claude-plugin/plugin.json Other projects, via marketplace install Claude Code plugin
tools/cursor/.cursor-plugin/plugin.json Other projects, via marketplace install Cursor plugin

Claude-specific extensions layer on top. The pieces, and when each one loads:

Path What it does When it loads
.claude/rules/.agents/skills/conventions/rules/ Always-on conventions: code style, JSDoc, markdown, security, testing Session start, or when a matching file opens for path-scoped rules
.claude/skills/.agents/skills/ Playbooks: changelog, deslop, documentation, humanizer, jsdoc, pr, spec-driven, conventions On demand, when the task matches the skill description
.claude/commands/tools/claude/commands/ Explicit slash-command actions, such as /changeset and /deslop When you type the command
.claude/agents/tools/claude/agents/ Subagents with their own context window, such as code-reviewer When delegated a matching task
.claude/output-styles/tools/claude/output-styles/ System-prompt modes: house (the default, set in settings.json), plan, and diagrams-first At session start (house), or when selected
.claude/hooks/ Scripts that install deps on session start and format files on edit On the matching event
.claude/settings.json Permissions and hook registration Always

The guiding split: rules always apply, skills are optional expertise loaded only when relevant, and commands are actions you trigger yourself.

For larger features, plans/ holds a spec-driven workflow (spec, research, plan, slices, verification) driven by the spec-driven skill and the /spec, /plan, and /verify commands. See plans/README.md. For quick changes, use the plan output style instead.

Using this template

  1. Click Use this template on GitHub.
  2. Update package.json name/namespace, repository.url, and the author block.
  3. Replace packages/core and packages/demo with your own packages (keep internals/utils if useful).
  4. Update oxlint.config.ts / oxfmt.config.ts ignore patterns if needed.
  5. Update .changeset/config.json changelog.repo and fixed/ignore arrays.
  6. Update tsconfig.json paths to match the new packages.
  7. Edit README.md, AGENTS.md, CLAUDE.md, CONTRIBUTING.md, SECURITY.md for the new project.
  8. Push to main. CI runs immediately.

Releasing

This template uses Changesets:

pnpm changeset             # Add a changeset entry describing the change
git commit -am "feat: ..."
git push

When changesets land on main, the release.yml workflow opens a "Version Packages" PR. Merging that PR publishes the affected packages to npm with provenance.

Upgrading dependencies

pnpm upgrade && pnpm install

The upgrade script runs taze with --maturity-period 3 so new releases need at least 3 days of soak time before being adopted.

Contributing

See CONTRIBUTING.md for the project structure, prerequisites, local setup, and commands.

License

MIT © Stijn Van Hulle

About

Monorepo template with TurboRepo and changeset

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

34 stars

Watchers

0 watching

Forks

Sponsor this project

 

Packages

 
 
 

Contributors