{
  "markdown": "<div align=\"center\">\n\n[![Stars][stars-src]][stars-href]\n  <h4>\n    <a href=\"https://github.com/stijnvanhulle/template/issues/\">Report Bug</a>\n    <span> · </span>\n    <a href=\"https://github.com/stijnvanhulle/template/issues/\">Request Feature</a>\n  </h4>\n</div>\n\n<br />\n\n# Template\n\nA modern TypeScript monorepo template (pnpm workspaces, Turborepo, oxlint, oxfmt, tsdown, Vitest, and Changesets).\n\n## About\n\nA drop-in monorepo starter. Fork it, rename a few fields, and you have a\nproduction-ready repository with build, test, lint, format, release and CI\nalready wired up.\n\n## AI assistant configuration\n\nEvery agent reads from the same source: `AGENTS.md` plus the Agent Skills in `.agents/skills/`.\nTool-specific files are symlinks, not copies, so nothing drifts out of sync.\n\n### 30-second setup\n\n[![Install in Claude Code][claude-install-src]][claude-install-href] [![Install in Cursor][cursor-install-src]][cursor-install-href]\n\nThe badges link to the steps below rather than installing anything directly: neither tool has a\nURL scheme yet for installing a plugin from a third-party marketplace. Cursor's one deeplink is\nfor MCP servers, and the Claude Code equivalent is an\n[open feature request](https://github.com/anthropics/claude-code/issues/62481).\n\n<details>\n<summary><strong>Claude Code</strong></summary>\n\n```bash\nclaude plugin marketplace add stijnvanhulle/template\nclaude plugin install toolkit@stijnvanhulle\n```\n\nReads `CLAUDE.md` (a symlink to `AGENTS.md`) and installs the `toolkit` plugin: rules, skills,\nslash commands, and the `code-reviewer` subagent. Other projects can install the same plugin\nwithout cloning this repo — see [tools/claude/README.md](tools/claude/README.md).\n\n</details>\n\n<details>\n<summary><strong>Cursor</strong></summary>\n\n```bash\n# agent is the Cursor CLI\nagent plugin marketplace add https://github.com/stijnvanhulle/template\nagent plugin install toolkit@stijnvanhulle\n```\n\nReads `AGENTS.md` natively and installs the matching Cursor plugin: rules (as `.mdc` files), the\nsame slash commands, and the `code-reviewer` subagent. Other projects install it from\n`.cursor-plugin/marketplace.json` — see [tools/cursor/README.md](tools/cursor/README.md).\n\n</details>\n\n<details>\n<summary><strong>Gemini CLI</strong></summary>\n\n```bash\ngemini extensions install https://github.com/stijnvanhulle/template\n```\n\nInstalls the extension from `gemini-extension.json` at the repo root, which is where Gemini\nlooks. It reads `GEMINI.md` and the seven slash commands in `commands/*.toml`. Gemini has no\non-demand skill loading, so `GEMINI.md` is generated as `AGENTS.md` plus the conventions\ninlined, rather than symlinked like the other agents' instruction files. No subagent concept\neither, so `code-reviewer` has no equivalent. See\n[tools/gemini/README.md](tools/gemini/README.md).\n\n</details>\n\n<details>\n<summary><strong>OpenCode</strong></summary>\n\n```bash\ngit clone https://github.com/stijnvanhulle/template.git\n```\n\nReads `opencode.json` and `AGENTS.md` from the repo root, and picks the toolkit up through\n`.opencode/`, already wired in this repo. OpenCode uses the same command syntax Claude Code\ndoes, so its `commands/` is a symlink to the Claude ones rather than a copy. The\n`code-reviewer` subagent works here too, invoked with `@code-reviewer`. To wire it into another\nproject, see [tools/opencode/README.md](tools/opencode/README.md).\n\n</details>\n\n<details>\n<summary><strong>Codex</strong></summary>\n\n```bash\nmkdir -p ~/.codex/prompts\nln -s \"$PWD/tools/codex/prompts\"/*.md ~/.codex/prompts/\n```\n\nReads `AGENTS.md` natively, so instructions and conventions need no setup. Only the commands\nneed linking, and because Codex discovers prompts from `~/.codex/prompts/` rather than the\nrepo, each person links them once. `.codex-plugin/plugin.json` at the repo root describes the\nsame content for the Codex plugin marketplace. The prompt format matches Claude Code's, so\n`prompts/` is a symlink, not a copy. See [tools/codex/README.md](tools/codex/README.md).\n\n</details>\n\n<details>\n<summary><strong>Other agents</strong></summary>\n\nNothing to install. These read `AGENTS.md` directly, or through a symlink, with no plugin step\nand no slash commands.\n\n- **GitHub Copilot** (VS Code) reads `.github/copilot-instructions.md`.\n- **Kiro** reads `.kiro/steering/` and **Zed** reads `.zed/`. Both are symlinks back to\n  `AGENTS.md`.\n- **Amp**, **Jules**, and anything else that speaks the AGENTS.md convention read it directly.\n  `AGENT.md` is symlinked too, for the tools that look for the singular spelling.\n- **Aider** takes it as an argument: `aider --read AGENTS.md`.\n\n</details>\n\n### Skills and commands\n\nEvery agent shares one toolset, so a skill or command written once works in all of them:\n\n| Path | What it does | When it loads |\n|---|---|---|\n| `.agents/skills/conventions/` | Rules: code style, JSDoc, markdown, plain language, security, testing, USA English | Session start, plus path-scoped rules when a matching file opens |\n| `.agents/skills/` | Playbooks: changelog, deslop, documentation, humanizer, jsdoc, pr, spec-driven | On demand, when a task matches the skill |\n| `tools/*/commands/changeset` | `/changeset` creates a changeset with the right semver bump | When you type the command |\n| `tools/*/commands/deslop` | `/deslop` removes AI-generated code slop from the current branch's changes | When you type the command |\n| `tools/*/commands/humanizer` | `/humanizer` removes AI writing patterns from the prose changed on the current branch | When you type the command |\n| `tools/*/commands/spec` | `/spec` drafts or refines a feature's Phase 0 spec (requirements and acceptance criteria) | When you type the command |\n| `tools/*/commands/plan` | `/plan` turns a feature's spec and research into `plan.md`, then scaffolds its slices | When you type the command |\n| `tools/*/commands/implement` | `/implement` works a feature's slices one at a time, ticking each slice's done criteria | When you type the command |\n| `tools/*/commands/verify` | `/verify` fills a feature's `verification.md` with scenarios mapped to acceptance criteria, then runs them | When you type the command |\n| `tools/{claude,cursor,opencode}/agents/` | Subagents with their own context window (`code-reviewer`). Not supported by Gemini CLI or Codex | When delegated a matching task |\n| `tools/claude/output-styles/` | System-prompt modes: `house` (default), `plan`, `diagrams-first`. Claude Code only | Session start, or when selected |\n\nEach agent's plugin manifest sits at the repo root, where its CLI looks for it, and points back\nat the shared content under `tools/`: `.claude-plugin/`, `.cursor-plugin/`, `.codex-plugin/`,\n`gemini-extension.json`, and `opencode.json`. Gemini also needs its `commands/` beside the\nmanifest, so the root `commands/` symlink points at `tools/gemini/commands`.\n\nCommands live once per format, not once per agent. OpenCode and Codex use Claude Code's command\nsyntax, so their folders are symlinks to `tools/claude/commands/`. Cursor and Gemini CLI need\ntheir own formats (`.mdc` rules, `.toml` commands), so those are real files, and\n`pnpm agent-files` checks in CI that they still expose the same command set. It also regenerates\n`GEMINI.md`, the one generated file, with `pnpm agent-files --write`.\n\n`.claude/`, `.cursor/`, `.gemini/`, and `.opencode/` are workspace config, symlinked into their\n`tools/` folders so this repo runs the same plugins it distributes.\n\nFor larger features, `plans/` holds a spec-driven workflow (spec, research, plan, slices,\nverification) driven by the `spec-driven` skill and the `/spec`, `/plan`, `/implement`, and\n`/verify` commands. See [plans/README.md](plans/README.md). For quick changes, use the `plan`\noutput style instead.\n\n## Using this template\n\n1. Click **Use this template** on GitHub.\n2. Update `package.json` `name`/`namespace`, `repository.url`, and the\n   author block.\n3. Replace `packages/core` and `packages/demo` with your own packages\n   (keep `internals/utils` if useful).\n4. Update `oxlint.config.ts` / `oxfmt.config.ts` ignore patterns if needed.\n5. Update `.changeset/config.json` `changelog.repo` and `fixed`/`ignore` arrays.\n6. Update `tsconfig.json` `paths` to match the new packages.\n7. Edit `README.md`, `AGENTS.md`, `CLAUDE.md`, `CONTRIBUTING.md`, `SECURITY.md`\n   for the new project.\n8. Push to `main`. CI runs immediately.\n\n## Releasing\n\nThis template uses [Changesets](https://github.com/changesets/changesets):\n\n```bash\npnpm changeset             # Add a changeset entry describing the change\ngit commit -am \"feat: ...\"\ngit push\n```\n\nWhen changesets land on `main`, the `release.yml` workflow opens a \"Version\nPackages\" PR. Merging that PR publishes the affected packages to npm with\nprovenance.\n\n## Upgrading dependencies\n\n```bash\npnpm upgrade && pnpm install\n```\n\nThe `upgrade` script runs [taze](https://github.com/antfu-collective/taze)\nwith `--maturity-period 3` so new releases need at least 3 days of soak\ntime before being adopted.\n\n## Contributing\n\nSee [CONTRIBUTING.md](./CONTRIBUTING.md) for the project structure, prerequisites, local setup, and commands.\n\n## License\n\n[MIT](./LICENSE) © Stijn Van Hulle\n\n<!-- Badges -->\n\n[stars-src]: https://shieldcn.dev/github/stars/stijnvanhulle/template.svg?variant=secondary&size=xs&theme=zinc&mode=dark\n[stars-href]: https://github.com/stijnvanhulle/template\n[license-src]: https://shieldcn.dev/npm/license/@stijnvanhulle/template-core.svg?variant=secondary&size=xs&theme=zinc\n[license-href]: https://github.com/stijnvanhulle/template/blob/main/LICENSE\n[coverage-src]: https://shieldcn.dev/codecov/github/stijnvanhulle/template.svg?variant=secondary&size=xs&theme=zinc&mode=dark\n[coverage-href]: https://app.codecov.io/gh/stijnvanhulle/template\n[claude-install-src]: https://img.shields.io/badge/Install%20in-Claude%20Code-D97757?logo=claude&logoColor=white&style=for-the-badge\n[claude-install-href]: tools/claude/README.md#install\n[cursor-install-src]: https://img.shields.io/badge/Install%20in-Cursor-1A1A1A?logo=cursor&logoColor=white&style=for-the-badge\n[cursor-install-href]: tools/cursor/README.md#install\n",
  "bytes": 10096,
  "sha": "62633f2fffbbd7ae23047b781404d0cad8dc7f4f9b7b0b6fd7efcdc5a67f13d9",
  "repo_slug": "stijnvanhulle/template",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_stijnvanhulle_template_adc1edae/readme"
}