Opinionated Claude Code starter. Clone, run the install script, answer five questions, start building.
| Category | What's included |
|---|---|
| Memory | CLAUDE.md with canary, error protocol, context rules — committed, teammates see the same thing |
| Token tools | RTK (89% avg CLI output compression) · Caveman (70% response compression) · ctx7 (live library docs) |
| Skills | addyosmani/agent-skills (24 lifecycle skills) · mattpocock/skills (grill-me, handoff, tdd, git-guardrails, write-a-skill) · Ponytail (anti-overengineering) |
| Hooks | session-start · notify · log-bash · pre-deploy-guard (lint + test gate) · privacy-guard (blocks reads of .env/ssh keys/secrets) · git-guard (reasoned block on force-push/reset --hard/git clean/rm -rf) · auto-format · keep-going · statusline (model/dir/branch/context%/rate-limit%) |
| Rules | .claude/rules/ — glob-scoped domain rules, plus agent-output-conventions.md (always-on: no silent truncation, explicit empty states, next-step suggestions on all agent-facing output) |
| Commands | /commit /pr /ship /plan /checkpoint /batch /review /verify |
| Workflows | .claude/workflows/ — dynamic multi-step JS scripts Claude writes, become /<name> commands (empty until you need one) |
| Agents | ReadOnly · BuildValidator · LogAnalyzer · Researcher · CodeReviewer · DocWriter |
| Logs | Decision log · error log · bash audit trail · checkpoint system |
The session-start hook fires automatically. It sets your terminal tab title to the current git branch and surfaces any in-progress checkpoint so you start oriented without re-reading context.
- Before anything non-trivial:
/plan— scaffoldsGoal / Constraints / Acceptance Criteria / Unresolved Questionsin.claude/plans/ - Unfamiliar library: Claude uses
npx ctx7 library <name> <query>before writing any API calls — never guesses from training data - Files are formatted on every write — the
auto-formathook runsPROJECT_FMTin the background, invisible - All bash commands are logged to
.claude/bash.log— full audit trail, no effort required - Context getting long:
/cavemanhalves output verbosity. Before stopping:/checkpointsaves exact state
- Every completed task ends with
[Canary:PROJECT_NAME:TASK_NAME]— thekeep-goinghook checks for it and nudges Claude to continue if it's missing /handoffinstead of/compact— precise surgical session doc, not lossy compression
/ship
That's it. Runs lint → build → test → commits → opens a PR. Stops at the first failure.
Or deploy directly — pre-deploy-guard intercepts the deploy command and runs your lint and test suite first. Blocks with a reason if anything fails.
/review
Invokes the CodeReviewer agent on your current diff. Returns a structured report with severity-tagged issues. You decide what to act on.
Commit .claude/ — your teammates get the same hooks, agents, and commands automatically. They run through ONBOARDING.md to set up their local settings and understand what everything does.
- Node.js 18+
- Rust + Cargo (for RTK)
- Claude Code installed and authenticated
git,gh(GitHub CLI) for/commit,/pr,/ship
macOS / Linux / WSL:
git clone https://github.com/moneytosms/claude-start my-project
cd my-project
chmod +x install.sh && ./install.shWindows:
git clone https://github.com/moneytosms/claude-start my-project
cd my-project
.\install.ps1The script installs all tooling, wipes the template git history, inits a fresh repo, then opens Claude to ask you five questions: project name, description, runtime, formatter, and canary codename. That's the only interactive step.
Already have a repo with its own .git and CLAUDE.md? Don't use install.sh — it wipes git history. Use install-existing instead: it never touches .git, backs up your existing .claude/ before replacing it, and asks Claude to reconcile anything from the backup plus merge CLAUDE.md knowledge into yours (your file stays the base).
macOS / Linux / WSL:
git clone https://github.com/moneytosms/claude-start /tmp/claude-start
cd /tmp/claude-start
chmod +x install-existing.sh
./install-existing.sh /path/to/your/existing/projectWindows (PowerShell):
git clone https://github.com/moneytosms/claude-start C:\temp\claude-start
cd C:\temp\claude-start
.\install-existing.ps1 -Target C:\path\to\your\existing\projectWhat it does:
- If you have an existing
.claude/, backs it up to.claude.backup-<timestamp>/, then writes the template's.claude/(hooks, agents, commands, rules) in its place - Same for
.mcp.json— backed up to.mcp.json.backupif present, then overwritten - Creates
.claude/settings.local.jsonfrom the example if missing chmod +xon hooks (Linux/WSL/macOS directly; on Windows, run that step yourself in WSL/Git Bash afterward)- If you have no
CLAUDE.md, copies the template's in as a starting point - Opens Claude in your project with one prompt that does three things: merges useful template
CLAUDE.mdsections into yours (your file is the base, nothing overwritten or restructured); detects your stack (package.json, pyproject.toml, Cargo.toml, go.mod, Gemfile, pom.xml/build.gradle, *.csproj, etc.) and fills theRTK wrappersline under## Stackwith the realrtksubcommands for what's actually present; and reconciles the.claude.backup-*/— ports back anything project-specific (custom hooks/agents/commands/rules) you had before, then deletes the backup and the reference copy
Nothing is committed for you — review the diff (git status, git diff) and commit when happy.
- Fill in the rest of
CLAUDE.mdas the project takes shape — Test, Lint, Build, Deploy commands - Create
.claude/rules/files as major directories emerge — seerules/example.mdfor the format - Teammates: run through
ONBOARDING.mdto get their local settings configured - Run
/ponytail-auditonce the codebase has real code — finds complexity to cut - Check
rtk gainafter a few sessions — shows your actual token savings
- MCP servers — add to
.mcp.json(team-shared, committed) orsettings.local.json(personal) - CI/CD —
/shiphandles local → remote; pipeline config is project-specific - Issue tracker — add mattpocock's triage skills if needed
MIT — see LICENSE.