Use when creating or refactoring CLAUDE.md files - enforces best practices for size, structure, and content organization
npx skills add https://github.com/serejaris/personal-corp-os --skill claude-md-writer
Creates and refactors CLAUDE.md files following official Anthropic best practices (2025).
| Rule | Why |
|------|-----|
| CLAUDE.md < 200 lines | Loads on EVERY request, costs tokens |
| Rules files < 500 lines each | Official recommendation per file |
| Critical rules FIRST | Top = highest priority |
| Modular rules → .claude/rules/ | Conditional loading, organized |
| Use paths: frontmatter | Load rules only for matching files |
| No linting rules | Use ESLint/Prettier/Biome instead |
| Pointers over copies | Files change, references stay valid |
Claude Code loads memory in this order (higher = higher priority):
| Priority | Type | Location |
|----------|------|----------|
| Highest | Enterprise | /Library/Application Support/ClaudeCode/CLAUDE.md |
| ↓ | Project | ./CLAUDE.md or ./.claude/CLAUDE.md |
| ↓ | Rules | ./.claude/rules/*.md (conditional) |
| ↓ | User | ~/.claude/CLAUDE.md |
| Lowest | Local | ./CLAUDE.local.md (gitignored) |
Use /memory command to see currently loaded files.
Official recommendation for large projects:
| Tier | Location | Loads | Target |
|------|----------|-------|--------|
| 1. Foundation | CLAUDE.md | Always | < 200 lines |
| 2. Component | .claude/rules/{component}/ | When working in component | < 500 lines |
| 3. Feature | Co-located with code | When working on feature | As needed |
Example structure:
.claude/
├── CLAUDE.md # Tier 1: always loaded
└── rules/
├── database.md # Tier 2: SQL, migrations
├── api.md # Tier 2: API patterns
└── frontend/ # Tier 2: subdirectory
├── components.md # paths: src/**/*.tsx
├── layout.md # paths: src/pages/**/*.tsx
└── tokens.md # paths: **/*.tsx
# Project Name
One-line description.
## Commands
- `npm run dev` - Development
- `npm run build` - Production
- `npm run test` - Tests
## Architecture
| Path | Purpose |
|------|---------|
| `lib/` | Core logic |
| `app/api/` | API routes |
## Key Patterns
**Pattern Name**: One-line explanation.
## Database (if applicable)
| Table | Key Fields |
|-------|------------|
## Modular Docs
See `.claude/rules/` for:
- `database.md` - queries, schema
- `deploy.md` - deployment
## Tech Stack
One line: Next.js 15, PostgreSQL, TypeScript
Use YAML frontmatter for file-type-specific rules:
---
paths: "src/api/**/*.ts"
---
# API Rules
- All endpoints must validate input
- Use standard error format
| Pattern | Matches |
|---------|---------|
| **/*.ts | All .ts files anywhere |
| src/**/* | All files under src/ |
| *.md | Markdown in project root |
| src/components/*.tsx | Components in specific dir |
# Multiple extensions
paths: "src/**/*.{ts,tsx}"
# Multiple directories
paths: "{src,lib}/**/*.ts, tests/**/*.test.ts"
Note: Wrap patterns in quotes for YAML safety.
Rules with paths: only load when working with matching files → saves tokens.
/init for base CLAUDE.md.claude/rules/ for domain-specific docs.claude/rules/:database.md - queries, schema, connectiondeploy.md - deployment processmessaging.md - integrations (Telegram, etc.)@file references — don't duplicate| Content | Location |
|---------|----------|
| Project description | CLAUDE.md |
| Critical constraints | CLAUDE.md (top!) |
| Quick start (3 commands) | CLAUDE.md |
| Architecture overview | CLAUDE.md |
| Key patterns (1-liners) | CLAUDE.md |
| SQL queries/schema | .claude/rules/database.md |
| Deployment steps | .claude/rules/deploy.md |
| API documentation | .claude/rules/api.md |
| Git workflow | .claude/rules/git.md |
| Personal preferences | CLAUDE.local.md (gitignored) |
| Code style rules | .eslintrc / biome.json (NOT docs) |
Reference files instead of duplicating:
@README.md
@docs/architecture.md
@~/.claude/snippets/common.md
@docs/file.md@~/path/file.mdPersonal project settings (auto-gitignored):
# My Local Settings
- Prefer verbose output
- Run tests after every change
- My worktree location: .trees/
| Mistake | Fix |
|---------|-----|
| 500+ lines | Split into .claude/rules/ |
| SQL examples inline | → rules/database.md |
| "Run prettier" rules | Use tool config files |
| Full API docs | → rules/api.md |
| Deployment instructions | → rules/deploy.md |
| Code in CLAUDE.md | Use @file:line references |
| Negative rules only | Add alternatives: "Don't X; use Y instead" |
Before finishing:
.claude/rules/ for domain-specific docs?paths: frontmatter for conditional loading?@ references instead of duplication?| Command | Purpose |
|---------|---------|
| /init | Generate initial CLAUDE.md |
| /memory | View loaded memory files |
Official:
Community:
Updated: Jan 2026
Take serejaris/claude-md-writer from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.