My personal Claude Code kit.
Fork it, rename it, make it yours.
My personal Claude Code conventions + brownfield/greenfield scaffolding CLI — one repo, many stacks, consistent setup across my machines.
The idea: combine a shared Claude Code setup with brownfield onboarding — apply to the projects I already have, not only to greenfield scaffolds. Inspired by Adam Bien’s bce.design and airails.dev.
Vibe-coded personal toolbox, not a product. If it’s useful, copy the pattern — don’t depend on the repo.
# Fork pclshm/pclshm-kit on GitHub, rename it to <you>-kit, then:
git clone git@github.com:<you>/<you>-kit.git ~/<you>-kit
cd ~/<you>-kit && ./bootstrap.sh Why I built this
I didn't want to relearn conventions every time I switched frameworks.
I use different stacks for different projects, but I want the same Claude Code workflow applied consistently across all of them — and most AI-dev tooling I see is greenfield-only. This kit is the opposite: the idea is to combine a shared Claude Code setup with brownfield onboarding, so I can drop it into a project I already have (or one I just forked) and have it preconfigured in one command.
It’s shaped by two things I keep coming back to: Adam Bien’s bce.design (Boundary–Control–Entity as a universal feature layout) and airails.dev (AI-assisted development that respects how real projects are built). This is the kit I built for myself — fork it and shape it into the one you would build.
-
Different stacks, same workflow
Next.js, Expo, Astro, SvelteKit, Python, Quarkus — one mental model for skills, commands, agents, hooks, and rules across all of them.
-
Drop into existing projects
Brownfield-first. `pk init` auto-detects the stack and merges conventions into `.claude/` without clobbering local edits.
-
Reproducible across my machines
Clone my fork, run one bootstrap script, and the `pk` CLI plus my global Claude defaults are ready — macOS, Linux, WSL, or Windows. Fork it yourself to get the same on yours.
How it works
Three layers, merged on init.
Conventions stack like the logo: a shared core at the bottom, your stack in the middle,
project edits on top. A manifest tracks what the kit installed so pk update
can refresh safely without touching your project-specific edits.
- 3
Project
projectWhatever you add or edit inside a project's `.claude/`. Preserved on every update.
- 2
Stack
conventions/stacks/<id>/Stack-specific skills, commands, and a `CLAUDE.md` addendum mapping BCE onto that framework.
- 1
Core
conventions/core/Stack-agnostic skills, commands, and rules — the shared baseline every project gets.
Supported stacks
Six stacks today. Add yours in minutes.
Each stack is a self-describing folder under conventions/stacks/<id>/
with a stack.json manifest — no code edits required to add one.
Next.js
nextjs App Router, Server Actions, Drizzle, shadcn/ui, Tailwind.
Expo (React Native)
expo Expo SDK 52+, Expo Router, EAS Build, expo-secure-store.
Astro
astro Content collections, islands, endpoints, Astro Actions.
SvelteKit
svelte Svelte 5 Runes, form actions, typed `load`.
Python
python 3.12+, uv, Pydantic v2, FastAPI, ruff, pytest.
Quarkus (MicroProfile)
quarkus-microprofile Java 21+, Maven, JAX-RS, CDI, SmallRye Health.
Quickstart
Fork it, then go from zero to a running BCE slice in three commands.
After you’ve forked: the CLI is a tiny Node 18+ / Bun 1.1+ script with one runtime dependency. Distributed only via this repo — no npm package.
0. Fork it first
This repo is opinionated to how I work. Fork it, rename it to <you>-kit, and edit the conventions to match your stack choices before using it. Don’t depend on upstream — there’s no stability contract.
gh repo fork pclshm/pclshm-kit --fork-name <you>-kit --clone=false
# or click "Fork" on github.com/pclshm/pclshm-kit and rename it there 1. Set up your machine
One-shot bootstrap drops the global Claude defaults into ~/.claude/.
pk bootstrap 2. Scaffold a new project
Greenfield: stack-aware scaffolder + BCE layout + a runnable hello slice.
pk new my-app --stack nextjs # uses your default package manager
pk new my-app --stack nextjs --pm bun # force bun
pk new my-api --stack python # ignores --pm; runs `uv init` 3. Or apply to an existing project
Brownfield: interactive wizard auto-detects the stack and merges conventions.
cd ~/projects/existing-app
pk init Want the full walkthrough?
A 10-step CRUD example that validates your setup end-to-end.
CLI reference
Nine commands, one tool.
Everything pk does, in one place. Run pk help for full flag lists.
| Command | Purpose |
|---|---|
pk new <name> [--stack id] | Bootstrap a greenfield project with BCE layout, conventions, and a runnable hello slice. |
pk init | Interactive wizard: detect stack, install global layer, merge conventions into an existing project. |
pk bootstrap | One-shot machine setup. Runs link-global and prints next-step hints. |
pk update | Refresh conventions from pclshm-kit without touching your edits. |
pk sync-back | Promote local .claude/ edits back into pclshm-kit. |
pk link-global | Install pclshm-kit/global/* into ~/.claude/. |
pk list | List available stacks. |
pk stack new <id> | Scaffold a new stack folder with a template stack.json + BCE skill dirs. |
pk stack validate | Lint stack.json manifests. Exits non-zero on failure (CI-friendly). |
Extend it
Add a new stack with zero code edits.
Stacks are data, not code. Drop a folder with a stack.json
manifest under conventions/stacks/, add a few skills, and
pk new picks it up.
pk stack new nuxt --label "Nuxt.js" --description "Nuxt 3, Nitro, auto-imports"
pk stack validate nuxt
pk new my-nuxt-app --stack nuxt {
"id": "nuxt",
"label": "Nuxt.js",
"description": "Nuxt 3, Nitro, auto-imports",
"priority": 35,
"detect": {
"any": [
{ "file": "nuxt.config.ts" },
{ "file": "nuxt.config.js" },
{ "dep": "nuxt" }
]
},
"bootstrap": {
"command": "npx",
"args": ["--yes", "create-nuxt@latest", "{{name}}"],
"srcRoot": "app"
}
}
Lower priority = more specific = evaluated first by
pk init's auto-detection. Detect rules compose via
any / all.