AGENTS.md — AI 에이전트를 위한 npm 패키지 문서화 전략
README가 인간을 위한 문서라면, AGENTS.md는 AI 에이전트를 위한 문서다. 라이브러리에 추가하면 LLM이 정확한 코드를 생성하게 된다.
LLM 기반 코딩 에이전트가 내 라이브러리를 쓸 때 왜 틀린 코드를 내놓을까? 대부분은 README를 제대로 파싱하지 못해서다.
README는 사람을 위해 쓴다. 마케팅 문구, GIF 데모, 설치 안내가 섞여 있다. LLM은 이 안에서 정확한 prop 이름, 유효한 조합, 기본값, 에러 조건을 찾아내야 한다. 놓치면 잘못된 코드가 나온다.
AGENTS.md는 이 문제를 직접 해결한다. AI 에이전트만을 위해 쓴 별도 문서다.
AGENTS.md vs README — 뭐가 다른가
| 항목 | README | AGENTS.md |
|---|---|---|
| 독자 | 사람 | AI 에이전트 |
| 형식 | 자유형, 마케팅 포함 | 구조화된 기계 친화적 형식 |
| 내용 | 설치·개요·소개 | 타입·패턴·의사결정 트리 |
| GIF/이미지 | 있음 | 없음 |
| 사용 실수 | 드물게 언급 | 필수 섹션 |
핵심은 LLM이 참조하기 쉬운 구조로 써야 한다는 것이다. 마케팅이 필요 없고, 애매한 표현이 들어가면 안 된다.
AGENTS.md의 6가지 섹션
1. 한 단락 요약
라이브러리가 무엇을 하는지, 언제 쓰는지 딱 한 단락으로.
## Summary
shimmer-trace는 React 로딩 상태를 위한 Shimmer 컴포넌트 라이브러리다.
데이터 페칭 중 스켈레톤 UI를 표시할 때 사용한다.
React 18+, TypeScript 5+ 지원.2. 모든 공개 export 목록
## Exports
- `Shimmer` — 기본 래퍼 컴포넌트
- `ShimmerText` — 텍스트 전용 스켈레톤
- `ShimmerImage` — 이미지 전용 스켈레톤
- `useShimmer` — 로딩 상태 훅[💡 잠깐! 이 용어는?]
공개 export: 라이브러리 사용자가 import { X } from 'my-lib' 형태로 가져다 쓸 수 있는 함수·컴포넌트·타입의 목록. 내부 구현 파일은 포함하지 않는다.
3. 타입 정의
props, config, enum을 모두 나열한다. 제너릭까지 명시하는 게 좋다.
## Types
interface ShimmerProps {
loading: boolean // 필수. true면 스켈레톤, false면 children 표시
children: React.ReactNode // 필수. 로딩 완료 후 표시할 콘텐츠
width?: string | number // 선택. 기본값: '100%'
height?: string | number // 선택. 기본값: 'auto'
rounded?: boolean // 선택. true면 border-radius: 8px. 기본값: false
duration?: number // 선택. 애니메이션 주기(ms). 기본값: 1500
}4. 번호별 사용 패턴
## Usage Patterns
// Pattern 1: 기본 래핑
import { Shimmer } from 'shimmer-trace'
function UserCard({ userId }: { userId: string }) {
const { data: user, loading } = useFetchUser(userId)
return (
<Shimmer loading={loading}>
<div className="card">
<h2>{user?.name}</h2>
<p>{user?.email}</p>
</div>
</Shimmer>
)
}
// Pattern 2: 고정 크기 스켈레톤
function AvatarSkeleton() {
return <Shimmer loading={true} width={48} height={48} rounded />
}5. 의사 결정 트리
## Decision Tree
Q: 이미지 로딩에 쓸 건가?
→ ShimmerImage 사용
Q: 텍스트 줄 여러 개를 보여줄 건가?
→ ShimmerText + lines prop 사용
Q: 커스텀 레이아웃 전체를 감쌀 건가?
→ Shimmer 기본 컴포넌트 사용
Q: 프로그래밍 방식으로 제어해야 하나?
→ useShimmer 훅 사용6. 일반적인 실수 → 올바른 방법
## Common Mistakes
❌ loading prop 없이 사용
<Shimmer><UserCard /></Shimmer>
✅ loading prop 반드시 전달
<Shimmer loading={isLoading}><UserCard /></Shimmer>
❌ 중첩 Shimmer
<Shimmer loading={outer}>
<Shimmer loading={inner}><Content /></Shimmer>
</Shimmer>
✅ 가장 바깥 Shimmer 하나만 사용
<Shimmer loading={outer || inner}><Content /></Shimmer>npm 패키지에 포함시키는 방법
package.json의 files 배열에 추가하면 된다.
{
"name": "shimmer-trace",
"version": "1.2.0",
"files": [
"dist",
"AGENTS.md"
]
}이렇게 하면 npm install shimmer-trace 후 node_modules/shimmer-trace/AGENTS.md에서 접근 가능하다. AI 에이전트는 node_modules를 탐색할 때 이 파일을 찾아 읽는다.
[💡 잠깐! 이 용어는?]
files 필드: npm에 패키지를 퍼블리시할 때 tarball에 포함할 파일/폴더 목록. 여기 없으면 node_modules에 설치되지 않는다. .npmignore로 제외하는 것과 반대 개념이다.
작성 비용 대비 효과
파일 하나 작성하는 데 2시간 정도면 충분하다. 얻는 것은 이렇다.
- LLM이 잘못된 props 조합으로 이슈를 열지 않는다
- Copilot, Claude, Cursor 등 모든 AI 코딩 도구에서 즉시 효과가 있다
- 버전이 올라갈 때마다 AGENTS.md만 함께 업데이트하면 된다
비유하면 API 문서를 JSON Schema로 명세하는 것과 같다. 사람은 예쁜 문서 사이트를 보고, 기계는 Schema를 읽는다. AGENTS.md는 라이브러리의 AI용 Schema다.
정리
AGENTS.md는 README와 별도로 AI 에이전트 전용 구조화 문서다- 6개 섹션: 요약 → export 목록 → 타입 → 패턴 → 의사결정 트리 → 실수 모음
package.json의files배열에 추가하면node_modules까지 전달된다- 작성 비용 2시간, AI 에이전트가 정확한 코드를 생성하기 시작한다
오픈소스 라이브러리를 관리한다면, 다음 릴리즈에 AGENTS.md를 추가하는 걸 검토할 만하다.
참고:
같은 카테고리 · AI
비슷한 주제의 최신 글
태그가 겹치는 글
공통 태그가 많을수록 위에 보인다