Claude
Skills
Sign in
Back

claude-md-authoring

Included with Lifetime
$97 forever

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.

AI Agents

What this skill does


# 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

Related in AI Agents