프로젝트 규칙 문서
CLAUDE.md, AGENTS.md, .cursorrules 작성법
AI 에이전트가 프로젝트에 진입할 때 가장 먼저 읽는 문서가 프로젝트 규칙 문서입니다. CLAUDE.md, AGENTS.md, .cursorrules 등 도구별로 이름은 다르지만, 목적은 같습니다: 프로젝트의 맥락과 규칙을 AI에게 즉시 전달하는 것.
왜 프로젝트 규칙 문서가 AI 시대에 중요한가
AI 에이전트는 매번 새로운 컨텍스트에서 시작합니다. 프로젝트의 컨벤션, 아키텍처, 금지사항을 모릅니다. 규칙 문서가 없으면 AI는 일반적인 관행을 따르고, 프로젝트 고유의 규칙을 위반합니다.
AI 에이전트 진입 → 규칙 문서 있음 → 프로젝트 맥락 이해 → 올바른 코드/문서 생성
AI 에이전트 진입 → 규칙 문서 없음 → 일반적 추측 → 컨벤션 위반 → 수정 비용 발생도구별 규칙 문서 비교
| 도구 | 파일명 | 위치 | 특징 |
|---|---|---|---|
| Claude Code | CLAUDE.md | 프로젝트 루트 | 계층 구조(~/.claude/, .claude/), @import 지원 |
| Codex | AGENTS.md | 프로젝트 루트 | 디렉토리별 override, 탐색 순서 공식 문서화 |
| Cursor | .cursorrules | 프로젝트 루트 | 단일 파일, 프로젝트 규칙 정의 |
| Windsurf | .windsurfrules | 프로젝트 루트 | Cursor와 유사한 형식 |
| 공통 표준 | AGENTS.md | Agentic AI Foundation | 오픈 표준으로 발전 중 |
좋은 규칙 문서의 구조
필수 섹션
- 프로젝트 개요 — 한 문단으로 프로젝트가 무엇인지
- 명령어 — 빌드, 테스트, 린트, 배포 명령 (코드 블록 필수)
- 아키텍처 — 디렉토리 구조, 주요 패턴, WHERE TO LOOK 표
- 컨벤션 — 커밋 형식, 네이밍, 파일 구조 규칙
- 금지사항 — 절대 하지 말아야 할 것 (명확하고 선언적으로)
Before/After
Before — README에 규칙이 산재:
# My Project
이 프로젝트는 TypeScript로 작성된 REST API입니다.
설치하려면 npm install을 실행하세요.
테스트는 jest를 사용합니다.
## 개발 가이드
코드를 작성할 때는 ESLint 규칙을 따라주세요.
커밋 메시지는 Conventional Commits를 사용합니다.
PR을 올리기 전에 테스트를 돌려주세요.
가능하면 타입을 명시해주세요.
any는 쓰지 마세요.After — 구조화된 CLAUDE.md:
# CLAUDE.md
## Project Overview
TypeScript REST API. Yarn Workspaces monorepo.
## Commands
\`\`\`bash
yarn dev # 개발 서버 (http://localhost:3000)
yarn build # 프로덕션 빌드
yarn test # Jest 테스트
yarn lint # ESLint 검사
\`\`\`
## Architecture
\`\`\`
src/
├── api/ # Route handlers
├── services/ # Business logic
├── models/ # DB models (Prisma)
└── utils/ # Shared utilities
\`\`\`
## Conventions
- Commit: `<type>: <description>` (feat, fix, docs, refactor)
- Branch: `feature/<name>`, `fix/<name>`
- Types: 명시적 타입 선언 필수, `any` 금지
## Do NOT
- 테스트 없이 PR 생성하지 않는다
- `console.log`를 프로덕션 코드에 남기지 않는다
- 사용자가 요청하기 전에 커밋/푸시하지 않는다템플릿
CLAUDE.md 템플릿
# CLAUDE.md
## Project Overview
[프로젝트 한 줄 설명. 기술 스택.]
## Commands
\`\`\`bash
[빌드 명령]
[테스트 명령]
[린트 명령]
[개발 서버 명령]
\`\`\`
## Architecture
\`\`\`
[디렉토리 구조 — 핵심만]
\`\`\`
| 작업 | 위치 | 비고 |
|---|---|---|
| [작업1] | [경로] | [참고] |
## Conventions
- Commit: [형식]
- Branch: [형식]
- [추가 컨벤션]
## Do NOT
- [금지사항 1]
- [금지사항 2]
## Language
[응답 언어 규칙]AGENTS.md 템플릿
# AGENTS.md
## OVERVIEW
[프로젝트 한 줄 설명]
## STRUCTURE
\`\`\`text
[디렉토리 구조]
\`\`\`
## WHERE TO LOOK
| Task | Location | Notes |
|---|---|---|
| [작업] | [경로] | [참고] |
## CONVENTIONS
- [규칙 1]
- [규칙 2]
## ANTI-PATTERNS
- [하지 말아야 할 것 1]
- [하지 말아야 할 것 2]
## COMMANDS
\`\`\`bash
[명령어들]
\`\`\`
## VALIDATION
[검증 명령어: lint, typecheck, build, test]AI가 실패하는 패턴
| 실수 | AI가 실패하는 이유 | 수정 방법 |
|---|---|---|
| "코드를 깔끔하게 작성해주세요" | AI가 "깔끔"을 해석 못함 | 구체적 린트 규칙, 네이밍 컨벤션 명시 |
| 명령어를 산문으로 설명 | AI가 실행할 명령을 추출 못함 | 코드 블록으로 명령어 제공 |
| 금지사항 없음 | AI가 일반적 관행을 따라 위반 | "Do NOT" 섹션에 명시적 금지 목록 |
| CLAUDE.md가 500줄 이상 | 컨텍스트 윈도우 낭비 | 핵심만 200줄 이내, 나머지는 @import |
AI 프롬프트 예시
이 프로젝트의 코드 구조, package.json, 설정 파일들을 분석해서
CLAUDE.md를 작성해줘.
포함할 섹션:
1. Project Overview (한 문단)
2. Commands (코드 블록)
3. Architecture (디렉토리 트리 + WHERE TO LOOK 표)
4. Conventions (커밋, 브랜치, 네이밍)
5. Do NOT (금지사항)
원칙:
- 기본지식 설명 생략 (TypeScript가 뭔지 등)
- 선언적 규칙으로 작성
- 이 프로젝트에만 해당하는 고유 규칙에 집중체크리스트
| 항목 | 확인 |
|---|---|
| 프로젝트 개요가 5줄 이내인가 | ☐ |
| 빌드/테스트/린트 명령어가 코드 블록으로 있는가 | ☐ |
| 디렉토리 구조가 포함되어 있는가 | ☐ |
| 금지사항이 명시적으로 나열되어 있는가 | ☐ |
| 기본지식 설명을 생략했는가 | ☐ |
| 규칙이 선언적으로 서술되었는가 | ☐ |
| 검증 명령어가 포함되어 있는가 | ☐ |