home / skills / ratacat / claude-skills / claude-md-authoring
This skill helps you author and review CLAUDE.md configurations for Claude Code, applying WHAT/WHY/HOW and budget guidance.
npx playbooks add skill ratacat/claude-skills --skill claude-md-authoringReview the files below or copy the command above to add this skill to your agents.
---
name: claude-md-authoring
description: Creates and reviews CLAUDE.md configuration files for Claude Code. Applies HumanLayer guidelines including instruction budgets (~50 user-level, ~100 project-level), WHAT/WHY/HOW framework, and progressive disclosure. Identifies anti-patterns like using Claude as a linter for style rules.
---
# CLAUDE.md Authoring
## Quickstart
1. **Determine scope**: User-level (`~/.claude/`) or project-level (`.claude/`)?
2. **Apply WHAT/WHY/HOW framework** (project-level only)
3. **Keep instructions under budget**: ~50 for user-level, ~100 for project-level
4. **Never use Claude as a linter**: Style rules belong in tooling, not CLAUDE.md
5. **Validate with quality checklist** before finalizing
## Core Principle
> "The only thing that the model knows about your codebase is the tokens you put into it."
CLAUDE.md is the highest-leverage point for context transfer. Every instruction competes for limited attention. Include only what Claude cannot infer and must apply universally.
## Scope Decision
### User-Level (`~/.claude/CLAUDE.md`)
Applies to ALL projects. Include only:
- Personal working style preferences
- Relationship dynamics (pushback, honesty, communication)
- Universal philosophy (YAGNI, root-cause debugging)
- Proactiveness boundaries
Never include:
- Project-specific commands (build, test, lint)
- Tech stack details
- Style rules that vary by project
- Tool/framework references that don't exist everywhere
### Project-Level (`.claude/CLAUDE.md`)
Applies to ONE project. Use the WHAT/WHY/HOW framework:
**WHAT** (2-5 lines)
- Project purpose in one sentence
- Primary language/framework
- Key directories and their purposes
**WHY** (optional, 2-3 lines)
- Non-obvious architectural decisions
- Constraints that affect implementation choices
**HOW** (3-7 lines)
- Essential commands: build, test, lint, run
- Any project-specific workflows
- Where to find more documentation
## Instruction Budget
LLMs reliably follow ~150-200 instructions. Claude Code's system prompt uses ~50, leaving limited budget.
| Scope | Target | Maximum |
|-------|--------|---------|
| User-level | ~30-40 | 60 |
| Project-level | ~50-80 | 120 |
| Combined | ~80-120 | 150 |
**Counting instructions**: Each actionable directive counts as one instruction.
- "NEVER skip tests" = 1 instruction
- "Use TypeScript for new files" = 1 instruction
- A 5-item list = 5 instructions
## Anti-Pattern: Claude as Linter
❌ **Never rely on Claude for style enforcement:**
- Naming conventions with specific examples
- Comment formatting rules
- Whitespace/indentation requirements
- File header requirements (ABOUTME, copyright)
✓ **Use deterministic tools instead:**
- ESLint/Biome for JavaScript/TypeScript style
- Black/Ruff for Python formatting
- Pre-commit hooks for file headers
- Claude Code Hooks to run formatters
**Why this matters**: LLMs follow style rules inconsistently. A linter fails deterministically; Claude fails silently and unpredictably.
**Exception**: High-level philosophy is acceptable:
- ✓ "Names should describe purpose, not implementation"
- ❌ "Never use names like ZodValidator or MCPWrapper"
## Progressive Disclosure
For complex guidance, don't embed everything in CLAUDE.md.
**Pattern**: Reference external docs, let Claude decide relevance.
```markdown
## Reference Documentation
- Code conventions: See `docs/conventions.md`
- API patterns: See `docs/api-design.md`
- Testing philosophy: See `docs/testing.md`
Read these when the task involves the relevant area.
```
**Benefits**:
- Keeps CLAUDE.md focused
- Claude reads docs only when relevant
- Easier to maintain separate concerns
## Structure Template
### User-Level
```markdown
[Opening persona/philosophy - 1-2 lines]
## Working Together
[Relationship dynamics, communication preferences]
## Proactiveness
[When to proceed vs. pause for confirmation]
## Development Philosophy
[Universal principles: YAGNI, debugging approach, etc.]
## Guardrails
[Version control, testing principles - kept brief]
```
### Project-Level
```markdown
## Project Overview
[WHAT: Purpose, stack, structure]
## Development
[HOW: Build, test, lint commands]
## Architecture
[WHY: Key decisions, constraints - if non-obvious]
## Conventions
[Brief pointers to detailed docs if needed]
```
## Quality Checklist
Before finalizing, verify:
### Universal Applicability
- [ ] Every instruction applies to every session (user-level) or every task in project (project-level)
- [ ] No project-specific commands in user-level config
- [ ] No tool references that may not exist
### Instruction Economy
- [ ] Under instruction budget (count them)
- [ ] No redundancy with Claude Code's built-in behaviors
- [ ] Examples trimmed or moved to reference docs
### No LLM-as-Linter
- [ ] No specific naming convention examples
- [ ] No comment formatting rules
- [ ] No file header requirements
- [ ] Style guidance limited to philosophy, not specifics
### Progressive Disclosure
- [ ] Complex topics reference external docs
- [ ] Main file under 100 lines (user) or 150 lines (project)
- [ ] Examples in reference files, not inline
### Clarity
- [ ] Consistent heading hierarchy
- [ ] No conflicting instructions
- [ ] Actionable directives, not vague guidance
## Common Pitfalls
1. **Over-specification**: Including every preference instead of universally critical ones
2. **Style enforcement**: Detailed naming/comment rules that Claude follows inconsistently
3. **Stale commands**: Build/test commands that drift from actual tooling
4. **Auto-generation**: Using `/init` instead of hand-crafting
5. **Tool assumptions**: Referencing MCP servers or tools that aren't always available
6. **Conflicting rules**: "Match surrounding style" + "Never use X pattern"
7. **Instruction inflation**: Adding rules after each frustration instead of fixing root cause
## When to Skip This Skill
- Quick one-off projects (just use defaults)
- Projects with existing, well-maintained CLAUDE.md
- When the team already has established patterns
## Example: Before/After
**Before** (problematic user-level):
```markdown
## Naming
NEVER use names like ZodValidator, MCPWrapper, JSONParser...
[20 more lines of specific examples]
## Comments
All files MUST start with ABOUTME: header...
```
**After** (improved user-level):
```markdown
## Code Style
Names should describe purpose, not implementation details.
Use project linters for formatting; don't rely on manual enforcement.
```
*Why better*: Philosophy over specifics. Linter handles enforcement deterministically.
## Integration
After authoring CLAUDE.md:
- **User-level**: Symlink to `~/.claude/CLAUDE.md` or place directly
- **Project-level**: Commit to `.claude/CLAUDE.md` in repository root
- **Validation**: Start a new Claude Code session and observe if instructions are followed
This skill creates and reviews CLAUDE.md configuration files for Claude Code, applying HumanLayer guidelines like instruction budgets, the WHAT/WHY/HOW framework, and progressive disclosure. It focuses on compact, universally applicable guidance that maximizes context transfer while avoiding fragile patterns like using Claude as a linter.
The skill inspects a repository or user preferences to decide scope (user-level or project-level) and then generates or reviews CLAUDE.md content that fits the chosen scope. It counts actionable directives against instruction budgets, enforces WHAT/WHY/HOW structure for project files, and flags anti-patterns such as style rules that belong to deterministic tooling. It also recommends external references for complex topics and validates the result with a quality checklist.
How do you count instructions?
Each actionable directive counts as one instruction; multi-item lists count per item. Keep totals under the target budgets to avoid exceeding Claude Code's attention limits.
Can CLAUDE.md include formatting rules?
Avoid specific formatting or naming rules in CLAUDE.md. Instead, reference linters and formatters so enforcement is deterministic.