프로젝트 규칙 문서
AGENTS.md, CLAUDE.md, path-scoped rules를 충돌 없이 설계하는 법
핵심 요약
- 규칙 파일은 긴 문서 저장소가 아니라 작업 시작 시 읽히는 제어면으로, 프로젝트 고유 규칙만 남깁니다.
- 공통 지침의 원본은
AGENTS.md로 두고, Claude Code는CLAUDE.md에서@AGENTS.md를 import해 드리프트를 막습니다. - Codex는 루트→현재 디렉토리 순으로 지침을 합쳐 가까운 디렉토리가 앞 지침을 덮으며,
AGENTS.override.md가 우선하고 기본 32 KiB 제한이 있습니다. - Claude Code는 하위
CLAUDE.md를 해당 파일을 읽을 때 포함하고, 경로별 규칙은.claude/rules/에pathsfrontmatter로 둡니다. CLAUDE.md는 시작 컨텍스트를 소비하므로 200줄 안팎으로 유지하고 긴 절차는 Skill로 분리합니다.
AI 에이전트가 프로젝트에 들어오면 가장 먼저 "이 저장소에서는 어떻게 일해야 하는가"를 알아야 합니다. 프로젝트 규칙 문서가 그 질문에 답하는 진입점입니다.
2026년 기준으로 규칙 문서는 파일 하나로 끝나지 않고 여러 계층으로 나뉩니다.
- 여러 에이전트가 공유하는 공통 지침:
AGENTS.md - Claude Code 전용 시작 지침:
CLAUDE.md,CLAUDE.local.md - Claude Code의 경로별 규칙:
.claude/rules/*.md - Codex의 디렉토리별 지침과 override:
AGENTS.md,AGENTS.override.md - 레거시/도구별 호환 파일:
.cursorrules,.windsurfrules
핵심 원칙
규칙 파일은 긴 문서를 쌓아 두는 저장소가 아니라 작업 시작 때 읽히는 제어면입니다. 모든 지식을 넣지 말고, 에이전트가 반드시 지켜야 할 프로젝트 고유 규칙만 남깁니다.
왜 중요한가
AI 에이전트는 매번 제한된 컨텍스트에서 출발합니다. 프로젝트의 컨벤션, 검증 명령, 금지사항, 예외를 모르면 일반적인 관행을 따릅니다. 문제는 "일반적으로 맞는 코드"가 이 프로젝트에서는 틀릴 수 있다는 데 있습니다.
규칙 문서 있음 -> 프로젝트 맥락 이해 -> 올바른 파일 탐색 -> 검증까지 수행
규칙 문서 없음 -> 일반적 추측 -> 컨벤션 위반 -> 리뷰/수정 비용 증가도구별 규칙 문서 비교
| 표면 | 주 대상 | 위치 | 현재 권장 용도 |
|---|---|---|---|
AGENTS.md | Codex 및 여러 코딩 에이전트 | repo root, nested directories | 공통 프로젝트 지침, 명령어, 금지사항 |
AGENTS.override.md | Codex | Codex home, repo/subdir | 임시 또는 하위 영역 override |
CLAUDE.md | Claude Code | repo root, subdirectories, home | Claude Code가 세션 시작 시 읽는 지침 |
CLAUDE.local.md | Claude Code | repo root/subdir | gitignore 대상 개인·로컬 설정 |
.claude/rules/*.md | Claude Code | repo .claude/rules/ | 경로·파일 유형별 규칙 |
.cursorrules | Cursor | repo root | 기존 Cursor 호환. 신규 공통 규칙의 1차 표면으로 두지 않음 |
.windsurfrules | Windsurf | repo root | 기존 Windsurf 호환. 핵심 규칙은 공통 파일에서 관리 |
AGENTS.md 설계
AGENTS.md는 에이전트용 README입니다. 사람용 README에 넣으면 복잡해지는 빌드 절차와 검증 명령,
코딩 규칙, 금지사항을 예측 가능한 자리에 모아 둡니다.
Codex의 로딩 방식
Codex는 시작 시 지침 체인을 만듭니다.
- 전역 범위: 기본적으로
~/.codex에서AGENTS.override.md가 있으면 그것을 읽고, 없으면AGENTS.md를 읽습니다. - 프로젝트 범위: Git root 또는 프로젝트 root에서 현재 작업 디렉토리까지 내려오며 각 디렉토리의 지침 파일을 확인합니다.
- 같은 디렉토리에서는
AGENTS.override.md가AGENTS.md보다 우선합니다. - 루트에서 현재 디렉토리 순서로 합쳐지므로, 더 가까운 디렉토리의 지침이 뒤에 와서 앞선 지침을 덮습니다.
- 빈 파일은 건너뛰며, 전체 지침 크기는 기본 32 KiB 제한을 받습니다.
그래서 모노레포에서는 루트 AGENTS.md에 전역 원칙을 두고, 패키지나 서비스 디렉토리마다 하위 AGENTS.md나
AGENTS.override.md를 둡니다.
repo/
├── AGENTS.md # 전체 저장소 공통 규칙
├── apps/
│ └── web/
│ └── AGENTS.md # 웹 앱 전용 규칙
└── services/
└── payments/
└── AGENTS.override.md # 결제 서비스 overrideAGENTS.md 템플릿
# AGENTS.md
## Project
[프로젝트 한 줄 설명. 기술 스택과 실행 환경.]
## Commands
\`\`\`bash
[설치 명령]
[개발 서버 명령]
[타입체크/린트/테스트/빌드 명령]
\`\`\`
## Where to look
| Task | Location | Notes |
|---|---|---|
| [작업] | [경로] | [주의점] |
## Conventions
- [프로젝트 고유 규칙 1]
- [프로젝트 고유 규칙 2]
## Validation
- [변경 후 반드시 실행할 명령]
- [수동 확인이 필요한 항목]
## Do not
- [금지사항 1]
- [금지사항 2]CLAUDE.md 설계
Claude Code는 AGENTS.md가 아니라 CLAUDE.md를 읽습니다. 저장소가 이미 AGENTS.md를 표준으로 삼고 있다면
CLAUDE.md에서 @AGENTS.md를 import하고 Claude 전용 예외만 덧붙입니다.
# CLAUDE.md
@AGENTS.md
## Claude Code
- 큰 변경은 먼저 계획을 제안한다.
- `src/billing/**` 변경은 담당자 리뷰 없이는 커밋하지 않는다.Claude Code의 로딩 방식
Claude Code의 메모리/규칙 로딩은 Codex와 다릅니다.
- 시작 디렉토리에서 위로 올라가며
CLAUDE.md와CLAUDE.local.md를 읽습니다. - 하위 디렉토리의
CLAUDE.md는 시작 시 항상 로드되는 것이 아니라, 해당 디렉토리 파일을 읽을 때 포함됩니다. @path/to/fileimport를 사용할 수 있으며, 상대 경로는 import가 적힌 파일 기준으로 해석됩니다.CLAUDE.local.md는 개인 로컬 설정용으로 두고 gitignore 처리합니다.- 대형 프로젝트는
.claude/rules/로 규칙을 쪼개고, 필요한 경우pathsfrontmatter로 파일 유형별 규칙을 둡니다. CLAUDE.md는 세션 시작 컨텍스트를 소비하므로 200줄 안팎을 목표로 하고, 긴 절차는 Skill로 분리합니다.
.claude/rules 예시
repo/
├── CLAUDE.md
└── .claude/
└── rules/
├── testing.md
├── security.md
└── frontend.md---
paths:
- "src/api/**/*.ts"
- "app/api/**/*.ts"
---
# API rules
- 모든 API 입력은 스키마로 검증한다.
- 오류 응답은 표준 `{ code, message }` 형식을 사용한다.
- 변경 후 `pnpm test api`와 `pnpm openapi:check`를 실행한다.무엇을 어디에 둘 것인가
| 내용 | 둘 곳 | 이유 |
|---|---|---|
| 프로젝트 개요, 핵심 명령, 금지사항 | AGENTS.md | 여러 에이전트가 공유할 공통 지침 |
| Claude Code 전용 선호, import, path-scoped rules 안내 | CLAUDE.md | Claude Code가 실제로 읽는 표면 |
| 경로별 코딩 규칙 | .claude/rules/*.md, 하위 AGENTS.md | 전역 파일 비대화 방지 |
| 반복 절차 | Skill | 필요할 때만 로드하고 스크립트/참고자료를 함께 둠 |
| 긴 API/도메인 레퍼런스 | docs, OpenAPI, MCP Resource | 규칙 파일 컨텍스트 낭비 방지 |
| 개인 로컬 URL, 테스트 계정 | CLAUDE.local.md, 개인 global instructions | 저장소에 커밋하면 안 되는 정보 |
| Cursor/Windsurf 호환 규칙 | .cursorrules, .windsurfrules | 레거시 호환. 원본은 공통 지침에 둠 |
좋은 규칙 문서의 구조
필수 섹션
- Project — 이 저장소가 무엇인지 5줄 이내
- Commands — 설치, 개발, 타입체크, 린트, 테스트, 빌드 명령
- Where to look — 작업별 위치 안내 표
- Conventions — 프로젝트 고유 코딩·문서·커밋 규칙
- Validation — 변경 후 실행할 검증 명령
- Do not — 에이전트가 절대 하면 안 되는 행동
Before/After
Before — README와 대화에 규칙이 흩어져 있음:
# My Project
TypeScript REST API입니다.
테스트는 jest를 사용합니다.
가능하면 타입을 명시해주세요.
any는 쓰지 마세요.
PR 전에 테스트를 돌려주세요.After — 에이전트가 바로 사용할 수 있는 AGENTS.md:
# AGENTS.md
## Project
TypeScript REST API. Yarn Workspaces monorepo.
## Commands
\`\`\`bash
yarn install
yarn dev
yarn test
yarn lint
yarn build
\`\`\`
## Where to look
| Task | Location | Notes |
|---|---|---|
| Route handlers | `src/api/` | Add validation tests |
| Business logic | `src/services/` | Keep DB access out of routes |
| Prisma models | `prisma/schema.prisma` | Run migration check |
## Conventions
- Commit: `<type>: <description>` (`feat`, `fix`, `docs`, `refactor`)
- Types: explicit public types required. Do not use `any`.
- Errors: return `{ code, message }`.
## Validation
- Run `yarn test` after code changes.
- Run `yarn lint` before final response.
## Do not
- Do not commit or push unless the user asks.
- Do not leave `console.log` in production code.
- Do not edit generated files under `dist/`.AI가 실패하는 패턴
| 실수 | 실패 이유 | 수정 방법 |
|---|---|---|
| "깔끔하게 작성" 같은 추상 규칙 | 에이전트마다 해석이 다름 | 린트, 네이밍, 파일 위치를 명시 |
| 명령어를 산문으로 설명 | 실행할 명령을 추출하기 어려움 | 코드 블록으로 명령 제공 |
| 전역 규칙과 하위 규칙 충돌 | 나중에 로드된 지침이 앞 지침을 덮음 | override 의도를 명시하고 중복 제거 |
CLAUDE.md에 긴 절차를 누적 | 시작 컨텍스트를 계속 소비 | Skill 또는 runbook으로 분리 |
AGENTS.md와 CLAUDE.md를 따로 복붙 | 드리프트 발생 | CLAUDE.md에서 @AGENTS.md import |
| 레거시 파일만 유지 | 도구별 동작이 달라짐 | AGENTS.md를 원본으로 두고 호환 파일은 얇게 유지 |
AI 프롬프트 예시
이 저장소의 package.json, 디렉토리 구조, 기존 CI, 테스트 명령을 분석해서
AGENTS.md 초안을 작성해줘.
포함할 것:
1. Project: 5줄 이내
2. Commands: 실제 실행 가능한 명령만 코드 블록으로
3. Where to look: 작업별 위치 표
4. Conventions: 이 저장소에서 발견한 고유 규칙
5. Validation: 변경 유형별 검증 명령
6. Do not: 생성 파일, 커밋/푸시, 보안 관련 금지사항
제외할 것:
- TypeScript, React 같은 범용 개념 설명
- README에 이미 충분한 사용자용 설명
- 추측으로 만든 명령어체크리스트
| 항목 | 확인 |
|---|---|
공통 지침의 원본이 AGENTS.md로 정해져 있는가 | ☐ |
Claude Code용 CLAUDE.md가 @AGENTS.md를 import하거나 의도적으로 분리되어 있는가 | ☐ |
| 명령어가 실제 package/script와 일치하는가 | ☐ |
| 작업별 위치 안내가 표로 정리되어 있는가 | ☐ |
| 검증 명령과 완료 조건이 명시되어 있는가 | ☐ |
| 금지사항이 선언적으로 나열되어 있는가 | ☐ |
| 긴 절차와 레퍼런스가 Skill/docs/MCP로 분리되어 있는가 | ☐ |
| 전역 규칙과 하위 규칙의 충돌이 없는가 | ☐ |