feat: initial companion repo for CC-010 CLAUDE.md
This commit is contained in:
commit
5e4ce5781e
5 changed files with 719 additions and 0 deletions
40
CLAUDE.md
Normal file
40
CLAUDE.md
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# CLAUDE.md: Give Claude Code Standing Instructions
|
||||
|
||||
## What this project is
|
||||
|
||||
A companion repo for the From AI to Chitta article on **CLAUDE.md**
|
||||
(concept ID: `CC-010`). It contains exercises that let you write,
|
||||
layer, and improve CLAUDE.md files in your own projects.
|
||||
|
||||
Article: https://fromaitochitta.com/claude-code-claude-md
|
||||
|
||||
## How to use this
|
||||
|
||||
1. Open Claude Code in this directory: `cd claude-code-claude-md && claude`
|
||||
2. Work through exercises in order: `exercises/01-write-your-first.md`, then 02, then 03
|
||||
3. Each exercise has a self-contained prompt you paste into Claude Code
|
||||
4. Compare your output to the expected output described in each exercise
|
||||
|
||||
## Code quality expectations
|
||||
|
||||
- This is a learning repo. Clarity over cleverness.
|
||||
- Every exercise must run without modification on a clean clone
|
||||
- No external dependencies unless explicitly listed in the exercise
|
||||
- If something does not work as expected, that is useful information -- note it
|
||||
|
||||
## Project structure
|
||||
|
||||
```
|
||||
exercises/ Numbered exercises with prompts and expected output
|
||||
CLAUDE.md This file -- project instructions
|
||||
README.md Overview for anyone who clones this repo
|
||||
```
|
||||
|
||||
## Domain
|
||||
|
||||
Claude Code Memory and Instructions
|
||||
|
||||
## Memory
|
||||
|
||||
Keep session notes in a local `MEMORY.md` (gitignored). This file
|
||||
(CLAUDE.md) is for instructions. MEMORY.md is for state.
|
||||
70
README.md
Normal file
70
README.md
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# CLAUDE.md: Give Claude Code Standing Instructions
|
||||
|
||||
Every time you open Claude Code, it starts fresh. It does not remember
|
||||
your last session, your preferences, or your project's conventions.
|
||||
CLAUDE.md fixes this. It is a plain text file Claude reads automatically
|
||||
before doing anything, every single session.
|
||||
|
||||
Companion repo for the article
|
||||
[CLAUDE.md: Give Claude Code Standing Instructions](https://fromaitochitta.com/claude-code-claude-md) on From AI to Chitta.
|
||||
|
||||
---
|
||||
|
||||
## What You Will Learn
|
||||
|
||||
By working through the exercises in this repo, you will be able to:
|
||||
|
||||
- Write an effective CLAUDE.md that gives Claude useful context about your project
|
||||
- Use the global, project, and subdirectory hierarchy to scope instructions precisely
|
||||
- Audit an existing CLAUDE.md and improve it so Claude actually follows it
|
||||
|
||||
These are not theoretical outcomes. Complete the exercises and you will
|
||||
have a CLAUDE.md in your own project that saves you time every session.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Claude Code installed (`claude --version` prints a version)
|
||||
- A project of your own you can practice on (any directory with a few files)
|
||||
- Basic comfort with the terminal (cd, ls, opening files)
|
||||
|
||||
No npm install, no Docker, no build step.
|
||||
|
||||
## Exercises
|
||||
|
||||
| # | Exercise | What It Covers |
|
||||
|---|----------|---------------|
|
||||
| 01 | [Write Your First CLAUDE.md](exercises/01-write-your-first.md) | Create a CLAUDE.md from scratch for a real project |
|
||||
| 02 | [Hierarchy in Action](exercises/02-hierarchy-in-action.md) | Global, project, and subdirectory CLAUDE.md files working together |
|
||||
| 03 | [Audit and Improve](exercises/03-audit-and-improve.md) | Diagnose a bad CLAUDE.md and rewrite it |
|
||||
|
||||
Start at `exercises/01-write-your-first.md`. Each exercise links to the next.
|
||||
|
||||
## How to Use This Repo
|
||||
|
||||
**"Show me what it does":** Browse `exercises/` and read through
|
||||
the prompts. Understand the pattern before you run anything.
|
||||
|
||||
**"Let me actually do it":** Open Claude Code in this directory
|
||||
and follow the exercises in order. Each one has an expected output
|
||||
section so you know when you have succeeded.
|
||||
|
||||
```bash
|
||||
git clone https://git.fromaitochitta.com/fromaitochitta/claude-code-claude-md.git
|
||||
cd claude-code-claude-md
|
||||
claude
|
||||
```
|
||||
|
||||
Then open `exercises/01-write-your-first.md` and paste the prompt into Claude Code.
|
||||
|
||||
## Domain
|
||||
|
||||
**Claude Code Memory and Instructions** - This repo is part of the Claude Code Foundation series on
|
||||
From AI to Chitta. See the full series for related concepts.
|
||||
|
||||
## About
|
||||
|
||||
Built by [Kjell Tore Guttormsen](https://fromaitochitta.com) as
|
||||
part of the From AI to Chitta project, exploring the intersection
|
||||
of AI tools and inner development.
|
||||
|
||||
MIT License.
|
||||
124
exercises/01-write-your-first.md
Normal file
124
exercises/01-write-your-first.md
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
# Exercise 01: Write Your First CLAUDE.md
|
||||
|
||||
**Concept:** CLAUDE.md (CC-010)
|
||||
**Level:** Basic
|
||||
**Time:** ~10 minutes
|
||||
|
||||
---
|
||||
|
||||
## Objective
|
||||
|
||||
Write a CLAUDE.md for a real project you own. By the end of this exercise,
|
||||
Claude will know who you are, what the project does, and how you want it
|
||||
to behave -- automatically, every session.
|
||||
|
||||
This is your first hands-on contact with CLAUDE.md. The only requirement
|
||||
is that you have a project directory with a few files in it.
|
||||
|
||||
---
|
||||
|
||||
## Before You Start
|
||||
|
||||
Confirm you have:
|
||||
|
||||
- [ ] Claude Code installed (`claude --version` prints a version)
|
||||
- [ ] A project directory you want to write a CLAUDE.md for
|
||||
- [ ] Claude Code open in that project directory
|
||||
|
||||
This exercise works best in your own project. If you do not have one
|
||||
handy, open Claude Code in any directory that has at least a few files.
|
||||
|
||||
---
|
||||
|
||||
## Instructions
|
||||
|
||||
**Step 1:** Navigate to your project and open Claude Code.
|
||||
|
||||
```bash
|
||||
cd /path/to/your-project
|
||||
claude
|
||||
```
|
||||
|
||||
Confirm there is no CLAUDE.md there yet:
|
||||
|
||||
```bash
|
||||
ls CLAUDE.md
|
||||
```
|
||||
|
||||
Expected output: `ls: CLAUDE.md: No such file or directory`
|
||||
|
||||
If a CLAUDE.md already exists, pick a different project for this exercise
|
||||
or rename the existing one temporarily (`mv CLAUDE.md CLAUDE.md.bak`).
|
||||
|
||||
**Step 2:** Think about three things before you run anything.
|
||||
|
||||
- Who you are and what you care about when working on this project
|
||||
- What the project does in one sentence
|
||||
- Two or three rules that would save time if Claude knew them up front
|
||||
(examples: "always use TypeScript", "never modify files in dist/", "prefer short functions")
|
||||
|
||||
You do not need to write these down. Just have them in mind.
|
||||
|
||||
**Step 3:** Paste this prompt into Claude Code:
|
||||
|
||||
```
|
||||
Look at this project. Read the files here, then write a CLAUDE.md for it.
|
||||
|
||||
The CLAUDE.md should include:
|
||||
1. What this project is (one short paragraph, 2-3 sentences max)
|
||||
2. How to work on it (language, framework, any tools)
|
||||
3. Three specific rules I want you to follow in every session
|
||||
|
||||
For rule 3, use these rules I care about:
|
||||
- [replace this with your first rule, e.g. "Never use var, always use const or let"]
|
||||
- [replace this with your second rule, e.g. "All functions must have a JSDoc comment"]
|
||||
- [replace this with your third rule, e.g. "Do not modify package.json without asking first"]
|
||||
|
||||
Keep it under 60 lines. No headers longer than one line. Plain and direct.
|
||||
```
|
||||
|
||||
Replace the three placeholder rules with your own before pasting.
|
||||
|
||||
**Step 4:** Review what Claude writes and ask for one change.
|
||||
|
||||
Read the CLAUDE.md Claude produced. Find one thing that is off, vague, or
|
||||
missing, then ask Claude to fix it:
|
||||
|
||||
```
|
||||
Change [the part that is wrong] to [what it should say].
|
||||
```
|
||||
|
||||
This is a normal part of the process. CLAUDE.md files are written with
|
||||
Claude, not entirely by it.
|
||||
|
||||
---
|
||||
|
||||
## Expected Output
|
||||
|
||||
After completing the steps above, you should see:
|
||||
|
||||
- A `CLAUDE.md` file in your project root
|
||||
- It has a project description (not generic -- specific to your project)
|
||||
- It has your three rules stated clearly
|
||||
- It is under 60 lines total
|
||||
|
||||
If Claude produced something generic or padded, ask it to be more specific
|
||||
and shorter. Generic CLAUDE.md files provide almost no value.
|
||||
|
||||
---
|
||||
|
||||
## What You Learned
|
||||
|
||||
- **CLAUDE.md is a briefing, not a manual:** Give Claude the context it needs
|
||||
to behave like a new colleague who already knows your project
|
||||
- **It is auto-loaded every session:** You never have to paste it in or say
|
||||
"remember, we use TypeScript" again
|
||||
- **Write it with Claude, not for Claude:** Use Claude to read the project
|
||||
and draft the file, then you correct and sharpen it
|
||||
|
||||
---
|
||||
|
||||
## Next
|
||||
|
||||
Ready to see how CLAUDE.md files stack on top of each other? Move to
|
||||
[Exercise 02: Hierarchy in Action](./02-hierarchy-in-action.md).
|
||||
169
exercises/02-hierarchy-in-action.md
Normal file
169
exercises/02-hierarchy-in-action.md
Normal file
|
|
@ -0,0 +1,169 @@
|
|||
# Exercise 02: Hierarchy in Action
|
||||
|
||||
**Concept:** CLAUDE.md (CC-010)
|
||||
**Level:** Intermediate
|
||||
**Time:** ~15 minutes
|
||||
|
||||
---
|
||||
|
||||
## Objective
|
||||
|
||||
See how global, project, and subdirectory CLAUDE.md files work together.
|
||||
Claude reads all three and applies them simultaneously, with more specific
|
||||
files taking precedence over broader ones.
|
||||
|
||||
Exercise 01 covered a single CLAUDE.md. This exercise shows the full stack.
|
||||
|
||||
---
|
||||
|
||||
## Before You Start
|
||||
|
||||
Confirm you have:
|
||||
|
||||
- [ ] Completed Exercise 01 (or understand what CLAUDE.md does)
|
||||
- [ ] Claude Code open in this repo directory
|
||||
|
||||
**Important:** This exercise creates a file at `~/.claude/CLAUDE.md`, which
|
||||
is your global Claude Code configuration. If you already have one, back it up first:
|
||||
|
||||
```bash
|
||||
cp ~/.claude/CLAUDE.md ~/.claude/CLAUDE.md.bak
|
||||
```
|
||||
|
||||
Restore it after the exercise with:
|
||||
|
||||
```bash
|
||||
mv ~/.claude/CLAUDE.md.bak ~/.claude/CLAUDE.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Instructions
|
||||
|
||||
**Step 1:** Create a global CLAUDE.md with a personal preference.
|
||||
|
||||
This file applies to every project you open with Claude Code, everywhere.
|
||||
|
||||
```bash
|
||||
mkdir -p ~/.claude
|
||||
```
|
||||
|
||||
Then paste this prompt into Claude Code:
|
||||
|
||||
```
|
||||
Create a file at ~/.claude/CLAUDE.md with exactly this content:
|
||||
|
||||
# Global Preferences
|
||||
|
||||
Always respond in British English. Use "colour" not "color",
|
||||
"organise" not "organize", "realise" not "realize".
|
||||
When writing prose, prefer shorter sentences.
|
||||
```
|
||||
|
||||
**Step 2:** Create a project-level CLAUDE.md with a project rule.
|
||||
|
||||
This file applies only when Claude Code is open in this directory.
|
||||
Paste this prompt:
|
||||
|
||||
```
|
||||
Create a CLAUDE.md in the current directory (not ~/.claude/) with exactly this content:
|
||||
|
||||
# Project Rules
|
||||
|
||||
Language: TypeScript only. No JavaScript files.
|
||||
Indentation: 2 spaces. No tabs.
|
||||
Imports: named imports preferred over default imports.
|
||||
```
|
||||
|
||||
**Step 3:** Create a subdirectory CLAUDE.md with test-specific rules.
|
||||
|
||||
```bash
|
||||
mkdir -p tests
|
||||
```
|
||||
|
||||
Then paste:
|
||||
|
||||
```
|
||||
Create a file at tests/CLAUDE.md with exactly this content:
|
||||
|
||||
# Test Rules
|
||||
|
||||
Test framework: vitest only.
|
||||
Pattern: describe/it blocks with descriptive names.
|
||||
Assertions: use expect() with .toBe(), .toEqual(), or .toThrow().
|
||||
No jest, no mocha, no chai.
|
||||
```
|
||||
|
||||
**Step 4:** Ask Claude to create a function and a test, then observe.
|
||||
|
||||
Paste this prompt:
|
||||
|
||||
```
|
||||
Write a TypeScript function called formatDate that takes a Date object
|
||||
and returns a string in the format "DD Month YYYY" (e.g. "04 April 2025").
|
||||
|
||||
Then write a vitest test for it in tests/formatDate.test.ts.
|
||||
```
|
||||
|
||||
Watch the output carefully. Claude should:
|
||||
- Use TypeScript (project rule)
|
||||
- Use 2-space indentation (project rule)
|
||||
- Use named imports (project rule)
|
||||
- Use vitest with describe/it (test rule)
|
||||
- Write in British English where prose appears (global rule)
|
||||
|
||||
---
|
||||
|
||||
## Expected Output
|
||||
|
||||
After completing all four steps, you should see:
|
||||
|
||||
- A `formatDate.ts` file using TypeScript, 2-space indentation, named imports
|
||||
- A `tests/formatDate.test.ts` file using vitest, describe/it pattern
|
||||
- Any comments or prose Claude writes use British English spellings
|
||||
- Claude did not ask which framework to use or what indentation to apply
|
||||
|
||||
**How you know hierarchy worked:**
|
||||
All three levels applied at once. The test file followed both the project
|
||||
rules (TypeScript, 2-space) AND the test-specific rules (vitest, describe/it).
|
||||
The global preference (British English) applied throughout.
|
||||
|
||||
---
|
||||
|
||||
## What You Learned
|
||||
|
||||
- **Global scope:** `~/.claude/CLAUDE.md` applies to every project
|
||||
- **Project scope:** `./CLAUDE.md` applies only in the current directory
|
||||
- **Subdirectory scope:** `tests/CLAUDE.md` applies only when working in `tests/`
|
||||
- **More specific overrides broader:** If a test-specific rule conflicts with
|
||||
a project rule, the test-specific rule wins inside `tests/`
|
||||
- **All levels apply simultaneously:** Claude does not choose one level.
|
||||
It reads all of them and follows all of them
|
||||
|
||||
---
|
||||
|
||||
## Clean Up
|
||||
|
||||
```bash
|
||||
rm -f CLAUDE.md formatDate.ts tests/CLAUDE.md tests/formatDate.test.ts
|
||||
rmdir tests 2>/dev/null || true
|
||||
```
|
||||
|
||||
And if you backed up your global CLAUDE.md:
|
||||
|
||||
```bash
|
||||
mv ~/.claude/CLAUDE.md.bak ~/.claude/CLAUDE.md
|
||||
```
|
||||
|
||||
Or remove the test global file if you created a fresh one:
|
||||
|
||||
```bash
|
||||
rm ~/.claude/CLAUDE.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Next
|
||||
|
||||
Ready to take a bad CLAUDE.md and make it effective? Move to
|
||||
[Exercise 03: Audit and Improve](./03-audit-and-improve.md).
|
||||
316
exercises/03-audit-and-improve.md
Normal file
316
exercises/03-audit-and-improve.md
Normal file
|
|
@ -0,0 +1,316 @@
|
|||
# Exercise 03: Audit and Improve
|
||||
|
||||
**Concept:** CLAUDE.md (CC-010)
|
||||
**Level:** Advanced
|
||||
**Time:** ~20 minutes
|
||||
|
||||
---
|
||||
|
||||
## Objective
|
||||
|
||||
Take a deliberately bad CLAUDE.md, identify what makes it ineffective,
|
||||
and rewrite it so Claude actually follows it. This is the skill you will
|
||||
use on every CLAUDE.md you inherit or write in a hurry.
|
||||
|
||||
---
|
||||
|
||||
## Before You Start
|
||||
|
||||
Confirm you have:
|
||||
|
||||
- [ ] Completed Exercises 01 and 02
|
||||
- [ ] Claude Code open in this repo directory
|
||||
|
||||
---
|
||||
|
||||
## The Scenario
|
||||
|
||||
Your team has been using Claude Code for a few months. Someone wrote
|
||||
a CLAUDE.md at the start and nobody has touched it since. It has grown.
|
||||
It has contradictions. Claude seems to ignore half of it.
|
||||
|
||||
Your job: audit it, identify the problems, and rewrite it.
|
||||
|
||||
---
|
||||
|
||||
## The Bad CLAUDE.md
|
||||
|
||||
Read this carefully before you do anything. This is the file you are going to fix.
|
||||
|
||||
```markdown
|
||||
# Project Instructions for Claude
|
||||
|
||||
## Overview
|
||||
|
||||
This is a very important web application project. Please make sure you
|
||||
understand the full context before making any changes. We use modern
|
||||
web technologies and follow industry best practices throughout the
|
||||
entire codebase.
|
||||
|
||||
## General Coding Guidelines
|
||||
|
||||
- Write good code
|
||||
- Make sure the code is clean and readable
|
||||
- Follow best practices
|
||||
- Use meaningful variable names
|
||||
- Keep functions small and focused
|
||||
- Add comments where necessary
|
||||
- Make sure everything works correctly
|
||||
- Handle errors properly
|
||||
- Write tests for everything
|
||||
- Make sure the UI looks good
|
||||
|
||||
## JavaScript Guidelines
|
||||
|
||||
- Use JavaScript for all frontend code
|
||||
- Always use TypeScript for all files
|
||||
- Use ES6+ features
|
||||
- Avoid using var
|
||||
- Use const and let appropriately
|
||||
- Always use semicolons
|
||||
- Never use semicolons
|
||||
- Use 2-space indentation
|
||||
- Use 4-space indentation
|
||||
- Keep lines under 80 characters
|
||||
- Keep lines under 120 characters
|
||||
|
||||
## Naming Conventions
|
||||
|
||||
- Use camelCase for variables and functions
|
||||
- Use PascalCase for components and classes
|
||||
- Use UPPER_SNAKE_CASE for constants
|
||||
- Use kebab-case for file names
|
||||
- Use camelCase for file names
|
||||
- Use descriptive names that explain the purpose
|
||||
|
||||
## React Guidelines
|
||||
|
||||
- Use functional components with hooks
|
||||
- Avoid class components unless absolutely necessary
|
||||
- Use useState for local state
|
||||
- Use useContext for global state
|
||||
- Never use Redux
|
||||
- Always use Redux for complex state management
|
||||
- Use React Query for data fetching
|
||||
- Keep components small, ideally under 50 lines
|
||||
- Extract logic into custom hooks
|
||||
- Always test components with React Testing Library
|
||||
- Use Enzyme for component testing
|
||||
- Never use Enzyme
|
||||
|
||||
## API and Backend
|
||||
|
||||
- Use REST APIs
|
||||
- Use GraphQL for all API calls
|
||||
- Document all API endpoints
|
||||
- Return consistent error formats
|
||||
- Use async/await everywhere
|
||||
- Use promises instead of async/await for compatibility
|
||||
|
||||
## Testing
|
||||
|
||||
- Write unit tests for all utility functions
|
||||
- Write integration tests for API routes
|
||||
- Write end-to-end tests for critical user flows
|
||||
- Use Jest for all tests
|
||||
- Use Vitest instead of Jest
|
||||
- Aim for 80% code coverage
|
||||
- Tests should be fast
|
||||
- Mock external dependencies
|
||||
- Avoid mocking where possible, prefer real implementations
|
||||
|
||||
## Git Conventions
|
||||
|
||||
- Write meaningful commit messages
|
||||
- Use conventional commits format
|
||||
- Keep commits small and focused
|
||||
- Always squash commits before merging
|
||||
- Never squash commits, keep full history
|
||||
- Branch names should describe the feature
|
||||
|
||||
## Performance
|
||||
|
||||
- Optimize for performance
|
||||
- Avoid premature optimization
|
||||
- Lazy load components where appropriate
|
||||
- Use memoization when needed
|
||||
|
||||
## Security
|
||||
|
||||
- Never commit secrets
|
||||
- Use environment variables for sensitive config
|
||||
- Sanitize all user input
|
||||
- Validate on both client and server
|
||||
- Use HTTPS everywhere
|
||||
- Keep dependencies updated
|
||||
|
||||
## Working With This Codebase
|
||||
|
||||
When I ask you to make changes, please consider all of the above
|
||||
guidelines before writing any code. Also make sure to consider the
|
||||
overall architecture and how your changes might affect other parts
|
||||
of the system. Think about edge cases and error scenarios. Make sure
|
||||
to write tests. Consider performance implications. Consider security
|
||||
implications. Consider accessibility. Consider internationalization.
|
||||
Consider browser compatibility. Make sure the code is maintainable.
|
||||
Make sure other developers will understand it. Think about future
|
||||
requirements that might affect your design decisions.
|
||||
|
||||
## Communication
|
||||
|
||||
- Be concise in your responses
|
||||
- Explain what you are doing and why
|
||||
- Ask clarifying questions when needed
|
||||
- Provide examples when helpful
|
||||
- Never make assumptions without confirming with me first
|
||||
- Use your best judgment when requirements are unclear
|
||||
- Always list every file you plan to change before making changes
|
||||
- Summarize what you changed after each task
|
||||
|
||||
## Important Notes
|
||||
|
||||
- This project is actively developed by a team
|
||||
- Always be careful with production code
|
||||
- Make sure changes are backward compatible
|
||||
- Consider the impact on existing users
|
||||
- The tech lead has final say on architecture decisions
|
||||
- Performance is a top priority
|
||||
- Developer experience is equally important
|
||||
- We value simplicity above all else
|
||||
- We value completeness above all else
|
||||
|
||||
## Final Reminder
|
||||
|
||||
Remember to always follow all the guidelines above in every interaction.
|
||||
Make sure your output is high quality and meets all the requirements
|
||||
listed in this document. When in doubt, err on the side of caution and
|
||||
ask before making significant changes.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Your Task
|
||||
|
||||
**Step 1:** Read the bad CLAUDE.md above and make a list of the problems.
|
||||
|
||||
Before you ask Claude to help, identify the issues yourself. Look for:
|
||||
- Instructions that are too vague to follow (what does "write good code" tell Claude?)
|
||||
- Contradictions (two rules that say opposite things)
|
||||
- Duplicate intent in different sections
|
||||
- Length: CLAUDE.md files over 200 lines see reduced adherence
|
||||
|
||||
Write your list. You do not need Claude for this step.
|
||||
|
||||
**Step 2:** Ask Claude to audit it and list the issues.
|
||||
|
||||
Paste this prompt into Claude Code:
|
||||
|
||||
```
|
||||
Read the following CLAUDE.md file and list every problem you find.
|
||||
For each problem, state:
|
||||
1. What the problem is
|
||||
2. Why it reduces effectiveness
|
||||
3. What the fix is
|
||||
|
||||
Focus on: vague instructions, contradictions, redundancy, and length.
|
||||
Do not rewrite it yet. Just audit.
|
||||
|
||||
[paste the full bad CLAUDE.md from the exercise here]
|
||||
```
|
||||
|
||||
Compare Claude's audit to your own list. Did Claude find anything you missed?
|
||||
|
||||
**Step 3:** Rewrite it.
|
||||
|
||||
Now ask Claude to produce the improved version:
|
||||
|
||||
```
|
||||
Rewrite this CLAUDE.md to fix all the problems you identified.
|
||||
|
||||
Rules for the rewrite:
|
||||
- Under 80 lines total
|
||||
- Every instruction must be specific and verifiable
|
||||
(Claude should be able to check "did I do this?" after each task)
|
||||
- No contradictions -- pick one option where the original was ambiguous
|
||||
- No vague language: "write good code" is not an instruction
|
||||
- Remove anything that duplicates another rule
|
||||
- Assume the project uses TypeScript, React with hooks, Vitest for tests,
|
||||
conventional commits, REST APIs, and 2-space indentation
|
||||
|
||||
Output only the rewritten CLAUDE.md. No commentary.
|
||||
```
|
||||
|
||||
**Step 4:** Evaluate the result against the success criteria below.
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
Check each item:
|
||||
|
||||
- [ ] Under 80 lines (count them)
|
||||
- [ ] Every rule is specific: you could look at code and say "yes, this follows the rule" or "no, it does not"
|
||||
- [ ] No contradictions remain (JavaScript vs TypeScript, semicolons vs no semicolons, etc.)
|
||||
- [ ] No vague instructions ("write good code", "follow best practices" removed)
|
||||
- [ ] A developer reading it for the first time would know exactly what to do
|
||||
|
||||
If any item fails, paste the rewrite back to Claude and point out the
|
||||
specific problem. One round of revision is normal.
|
||||
|
||||
---
|
||||
|
||||
## Reference: Problems in the Original
|
||||
|
||||
Here is what to look for if you want to check your own audit:
|
||||
|
||||
**Contradictions (7 pairs):**
|
||||
- JavaScript for all frontend vs TypeScript for all files
|
||||
- Always use semicolons vs never use semicolons
|
||||
- 2-space indentation vs 4-space indentation
|
||||
- Lines under 80 characters vs lines under 120 characters
|
||||
- Never use Redux vs always use Redux for complex state
|
||||
- Use Jest vs use Vitest
|
||||
- Squash commits vs never squash commits
|
||||
|
||||
**Vague instructions (examples):**
|
||||
- "Write good code"
|
||||
- "Make sure everything works correctly"
|
||||
- "Write meaningful commit messages"
|
||||
- "Optimize for performance"
|
||||
- "Be careful with production code"
|
||||
|
||||
**Redundancy:**
|
||||
- The final "Working With This Codebase" section repeats most of the earlier sections
|
||||
- The "Final Reminder" adds no new information
|
||||
- Performance appears in at least three sections
|
||||
|
||||
**Length:**
|
||||
- The original is over 200 lines. Research on CLAUDE.md adherence shows
|
||||
that shorter files with specific rules outperform long files with vague ones.
|
||||
Claude is more likely to follow 20 specific rules than 200 vague ones.
|
||||
|
||||
---
|
||||
|
||||
## What You Learned
|
||||
|
||||
- **Specific beats vague:** "Use const and let, never var" is a rule Claude can follow.
|
||||
"Write good code" is not
|
||||
- **Contradictions disable rules:** When two instructions conflict, Claude may follow
|
||||
neither rather than guess which one you meant
|
||||
- **Length reduces adherence:** A 200-line CLAUDE.md is not twice as effective as a
|
||||
100-line one. It is less effective. Keep it under 100 lines when possible
|
||||
- **Audit before you ship:** A five-minute audit of any CLAUDE.md catches most of the
|
||||
problems that would otherwise waste hours of back-and-forth
|
||||
|
||||
---
|
||||
|
||||
## What Comes Next
|
||||
|
||||
You now understand CLAUDE.md completely: how to write one from scratch
|
||||
(Exercise 01), how the hierarchy works (Exercise 02), and how to audit
|
||||
and improve an existing one (Exercise 03).
|
||||
|
||||
Next concepts to explore:
|
||||
- **CC-006 Permissions** - Control what Claude Code is allowed to do
|
||||
- **CC-012 Hooks** - Automate actions that trigger before or after Claude acts
|
||||
- **CC-005 Custom Commands** - Create slash commands Claude runs on demand
|
||||
Loading…
Add table
Add a link
Reference in a new issue