You commented SETUP. Here's the CLAUDE.md I start every project with, the permissions file that stops the "approve this?" spam, and the seven moves on one screen.
1. The CLAUDE.md starter
Run /init first. It reads your repo and writes a CLAUDE.md with your real commands. Then paste the "How I want you to work" and "Rules" sections from this into it, and fill in the brackets.
# CLAUDE.md
## Project
[One line: what this app does and who uses it.]
Stack: [e.g. Next.js, Supabase, Tailwind]. Deploys to [e.g. Vercel].
## Commands
- Install: npm install
- Dev: npm run dev
- Test: npm test
- Typecheck: npx tsc --noEmit
## How I want you to work
- Plan first for anything that touches more than 3 files. Show me the plan and wait.
- After every change, run the tests and the typecheck. Don't say it works until they pass.
- For any UI change, open the page and screenshot it before you say done.
- Keep diffs small. Don't refactor code I didn't ask you to touch.
- If you're unsure, ask me one question instead of guessing.
## Rules
- Never commit or push unless I say so.
- Never print, copy or edit .env files.
- Use the patterns already in the codebase before adding a new library.
## Gotchas
- [Every time you correct Claude on something, add one line here so it never happens again.]The Gotchas section is the one that pays off. Every correction you make once becomes a rule it reads at the start of every session.
2. The permissions file
Save this as .claude/settings.json in your project (or .claude/settings.local.json if it's just for you). Safe, read-only and test commands run without asking. Anything that changes history or installs things still asks. Secrets and force-pushes are blocked.
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(npm test *)",
"Bash(npm run lint)",
"Bash(npx tsc --noEmit)",
"Bash(git status)",
"Bash(git diff *)",
"Bash(git log *)"
],
"ask": [
"Bash(git commit *)",
"Bash(git push *)",
"Bash(npm install *)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Bash(git push --force *)",
"Bash(rm -rf *)"
]
}
}Swap npm for pnpm, yarn or your own test command. You can also add rules one at a time: type /permissions, pick "Add a new rule", and type something like Bash(npm test).
One honest note: deny rules on shell commands match patterns, so treat them as a seatbelt, not a lock. Keep real secrets out of the repo anyway.
3. The 7 moves on one screen
Give it a memory. Type /init. It writes CLAUDE.md and reads it every session.
Plan first. Press Shift+Tab until it says "plan mode on". It writes the plan before it touches anything. Fix the plan, then let it build.
Make it check its own work. Tell it to run the tests, or open the page and screenshot it.
Undo button. Press Esc twice (or type /rewind) and pick the point before it went wrong. It can restore the code, the chat, or both.
The money one. Every message re-sends the whole chat, so long chats cost more per reply. New task, type /clear. Then type /autocompact 400k so it tidies the chat long before it hits a million tokens. Check where you are any time with /context.
Send a helper to dig. Say "use a sub-agent to find where the login is handled". It searches in its own chat and brings back only the answer, so your main chat stays clean.
Stop clicking yes. Don't use skip-permissions mode. Use the permissions file above, or /permissions, so safe commands stop asking and risky ones still do.
If you only do one thing today, do number five. It's the one your bill notices.
Reply and tell me which move you didn't know about. I read every one.
Mike
PS: I build lead-gen systems for local businesses at OptiMAX, optimax-ai.com.