.claude/rules/ 디렉터리에 두는 마크다운 파일로, CLAUDE.md를 여러 주제별 파일로 쪼개서 관리할 수 있게 해주는 기능입니다.
paths frontmatter가 없으면 .claude/CLAUDE.md와 같은 우선순위로 항상 로드됩니다 (단순히 CLAUDE.md를 주제별 파일로 분리하는 용도)paths frontmatter가 있으면 그 glob에 매칭되는 파일을 Claude가 읽을 때만 조건부로 로드됩니다 (수정 여부와 무관하게, 읽는 시점에 트리거)이 글에서는 실무에서 더 유용한 path-scoped rules(조건부 로드) 위주로 정리합니다.
~/.claude/rules/*.md — 내 모든 프로젝트에 적용. 프로젝트 rules보다 먼저 로드됨(= 프로젝트 rules가 더 나중에 읽혀서 우선순위가 높음).claude/rules/*.md — 해당 repo에서만 적용, git으로 공유frontend/, backend/ 등)로 나눠도 .md 파일은 재귀적으로 전부 탐색됨.claude/rules/에 symlink로 연결하면 한 곳만 수정해도 전체에 반영됨---
paths:
- 'src/api/**/*.ts'
---
# API 작업 규칙
- 모든 엔드포인트 핸들러는 입력 검증을 거친다
- 에러 응답 포맷은 공통 포맷을 따른다
파일명은 code-style.md, testing.md처럼 다루는 주제를 그대로 드러내는 이름으로 짓고, 한 파일에는 한 주제만 담습니다. 여러 주제를 한 파일에 섞으면 그중 일부 경로에만 해당되는 내용도 같이 로드돼서 노이즈가 늘어납니다.
paths: 적용 대상 glob 목록 (YAML 리스트). glob은 *, ** 같은 와일드카드로 파일 경로를 패턴 매칭하는 표기법(.gitignore에서 쓰는 그 방식). 비워두면(필드 자체를 안 쓰면) 무조건 로드되는 일반 규칙이 됨**/*.ts(전체 TS 파일), src/**/*(특정 디렉터리 전체), *.md(루트의 md 파일만), src/**/*.{ts,tsx}(중괄호로 여러 확장자 한 번에)| CLAUDE.md | Rules (paths 있는 경우) | Skill | |
|---|---|---|---|
| 로드 조건 | 항상 전체 컨텍스트 | 매칭되는 파일을 Claude가 읽을 때 | 작업 의도(description)로 트리거 |
| 단위 | 프로젝트 전체 | 폴더/파일 패턴 단위 | 작업 절차 단위 |
| 트리거 방식 | 자동(항시) | 자동(경로 매칭) | 자동(의도 매칭) 또는 /스킬명 |
| 적합한 용도 | 전역 컨벤션 | 특정 폴더/파일 타입에만 적용되는 예외 규칙 | 반복되는 다단계 작업 절차 |
Rules(paths 있는 경우)의 가장 큰 차이점은 트리거가 "무슨 말을 했는가"가 아니라 "어떤 파일을 읽고 있는가" 라는 것입니다. Skill처럼 description으로 의도를 추론할 필요가 없고, CLAUDE.md처럼 매번 전체에 끼얹을 필요도 없습니다.
paths를 쓰는 이유 / 장점paths로 묶으면 해당 파일을 안 읽는 대화에서는 토큰 비용이 0특정 서비스 안의 한 도메인 폴더(컴포넌트/API 함수/쿼리 훅이 흩어진 영역)를 glob 여러 개로 묶어 적용한 사례입니다.
배경: 이 영역은 외부 프로젝트에서 포팅된 코드라 현재 프로젝트 컨벤션과 어긋나는 부분이 있어, 아래 기준으로 점검 후 수정합니다.
any 금지, 공통 패키지에 정의된 지정 타입(API 요청/응답 타입) 사용. 지정 타입과 실제 요청/응답이 다르면 공통 타입을 고치지 말고 포팅된 쪽 코드를 공통 타입 기준으로 수정→ "공통 타입이 기준, 나머지가 거기에 맞춘다"처럼 방향이 헷갈리기 쉬운 규칙을 경로에 고정해두면, 이 영역을 만질 때마다 매번 설명할 필요가 없어집니다.
apps/**/*.ts) 사실상 CLAUDE.md와 다를 게 없어지고 조건부로 두는 의미가 사라짐 — 정말 예외적인 영역에만 좁게 적용