If you use Claude Code regularly, you’ve probably said something like this more than once: “Our project uses TypeScript, we test with vitest, our naming convention is…” Yeah, I’ve been there too.
Drop a single CLAUDE.md file at the project root and add a handful of custom slash commands, and Claude Code will pick up your project context every session and run repetitive tasks with a single keystroke.
📄 1. CLAUDE.md — Project context Claude reads automatically every session
Drop a CLAUDE.md file at your project root and Claude Code reads it automatically when a session starts. No more re-explaining the project every time.
What to put in it
✅ Tech stack (language, framework, package manager)
✅ Coding conventions (naming, folder structure, formatting rules)
✅ Testing tools and how to run them
✅ Common pitfalls and gotchas
✅ Deployment process and where the env vars live
The key is to include only what Claude needs to know all the time. Move task-specific procedures into slash commands. A bloated CLAUDE.md just burns context for nothing.
⚡ 2. Custom slash commands — Turn repetitive work into one-liners
Drop a markdown file into .claude/commands/ and it instantly becomes a slash command.
How to make one
Say you want a code review command:
1. Create .claude/commands/review.md
2. Write the prompt in plain English
3. Run /review inside Claude Code
You can take arguments with $ARGUMENTS. So /review src/api.ts reviews just that file.
Three commands I actually use
| /review | Code review for a given file (security, performance, readability) | review.md |
| /test | Generate test code for a given file | test.md |
| /refactor | Refactor a given file (dedupe, extract, simplify) | refactor.md |
💡 Tip: Custom commands now have a sibling — skills. Drop a SKILL.md inside .claude/skills/ and it runs the same /name way, but Claude can also invoke it autonomously when relevant.
🧠 3. Power-user habits — What works in practice
Here’s what I’ve picked up from r/ClaudeAI and GitHub power users.
Keep always-on context minimal — Put only the essentials in CLAUDE.md, and split repetitive procedures into commands. It’s the single best way to avoid context pollution.
/install-github-app for automatic PR review — Once installed, Claude reviews PRs automatically. The default review prompt is way too verbose, though, so customize it.
/simplify for legacy cleanup — Throw messy legacy code at it and it’ll come back with refactor suggestions. It’s a built-in command, but surprisingly few people know about it.
Combine with Dispatch — On Pro/Max plans, you can hand work off to Dispatch and have it auto-run a workflow defined as slash commands. Kick it off, walk away, come back to a finished job.
💬 Author note
I run this blog itself with CLAUDE.md plus custom commands. Post-writing rules, HTML style guide, publish checklist — all of it lives in files. Now “write the next one” is literally all I have to type, and a post comes out.
CLAUDE.md ends up doubling as your project’s “team culture doc.” It’s not just for Claude — when a new teammate joins, that one file is the “read this and you’re caught up” document. Set it up once and the productivity gap is real.
❓ FAQ
Q. Where do I put CLAUDE.md?
At the project root. Claude Code reads it automatically when a session starts. You can also place one in your home directory (~/.claude/) for a global config that applies everywhere.
Q. What’s the difference between custom slash commands and skills?
Both run via /name. The difference: skills (.claude/skills/) can be invoked autonomously by Claude when context calls for it. Commands (.claude/commands/) only run when you trigger them. Both are written as plain markdown.
Q. What if CLAUDE.md gets too long?
It eats into your context window, so trim it down. Move task-specific procedures and detailed guides into skills or commands. The rule of thumb: CLAUDE.md is for things Claude needs to know every session.
🔗 Further reading
📄 Official docs
→ Claude Code — Extend Claude with Skills
→ Claude API — Slash Commands in the SDK
💡 Community resources
→ GitHub — Awesome Claude Code (skills, hooks, commands)
This post pulls from publicly available official docs and community resources. Claude Code ships updates frequently, so check the official docs for the latest behavior.
This post is part of an English mirror of a Korean dev experiments blog. Cross-posted for the global developer audience.