AGENTS.md 심화
AGENTS.md의 명세 포맷, 도구별 구현 방식, 작성 원칙, 검증 절차를 정리한다. 5장에서 개념적으로 소개한 AGENTS.md를 실무 관점에서 심화한다.
표준 명세: agents.md · 실습 예시: 4장 §2-A / 4장 §2-B
- 에이전트 항목의 필드 구조와 의미
- AGENTS.md(공통 명세)가 Claude 계열·Antigravity 계열·Codex 계열에서 각각 어떻게 "구현"되는지
- 최소 권한 원칙과 handoff 선언
- 검증 도구(
agent:verify)와 생애주기 연결
명세 포맷
AGENTS.md의 각 에이전트 항목은 ## Agent: {이름}으로 시작하는 마크다운 섹션이다. 이 섹션 안에 역할·입력·출력·권한·handoff 등의 필드를 자유 형식으로 기술한다. 표준 명세는 strict schema를 강제하지 않고, 도구가 공통으로 인식하는 관례(convention)에 의존한다.
| 필드 | 의미 | 필수 여부 | 4장 실습 예시 |
|---|---|---|---|
## Agent: {이름} |
에이전트 식별자. Claude 계열에서는 subagent_type 값과 일치해야 호출 가능 |
필수 | ## Agent: reviewer |
역할 |
이 에이전트가 무엇을 하는가 | 필수 | "텍스트 파일의 오탈자, 논리적 허점, 개선점을 검토한다" |
입력 |
어떤 입력을 받는가 | 권장 | "검토 대상 텍스트 파일 경로" |
출력 |
어떤 출력을 내는가 | 권장 | "오탈자 · 논리적 허점 · 개선점 목록" |
권한 |
파일 접근 범위. 최소 권한 원칙 — 필요한 것만 허용 | 권장 | "읽기 전용 — 파일을 직접 수정하지 않는다" |
handoff_to |
완료 후 결과를 넘길 다른 에이전트. 오케스트레이터가 참조하는 선언적 힌트 | 선택 | handoff_to: reviewer |
완성 예시
4장 실습(G-1, D-1)에서 작성한 두 에이전트가 들어간 AGENTS.md 전체 모습이다.
## Agent: reviewer 역할: 텍스트 파일의 오탈자, 논리적 허점, 개선점을 검토한다. 입력: 검토 대상 텍스트 파일 경로 출력: 오탈자 · 논리적 허점 · 개선점 목록 권한: 읽기 전용 — 파일을 직접 수정하지 않는다. ## Agent: writer 역할: 주어진 주제로 3~5문장 분량의 짧은 초안을 작성한다. 입력: 주제, 저장할 파일 경로 출력: 초안 텍스트 파일 권한: 쓰기 허용 — 지정된 파일에만 저장한다. handoff_to: reviewer (초안 완료 후 검토로 이어짐)
.claude/agents/*.md)로 "번역"하고, Antigravity 계열은 등록부 자체를 오케스트레이션이 직접 읽고 해석하며, Codex 계열은 별도 서브에이전트 정의 없이 PM이 등록부를 역할 컨텍스트로 읽고 순차 전환하며 해석한다(4장 §1-C).도구별 구현 매핑
AGENTS.md는 도구 중립적인 공통 명세다. 하지만 실제로 서브에이전트를 "구현"하는 방식은 Claude 계열, Antigravity 계열, Codex 계열에서 서로 다르다.
| 층위 | Claude Desktop App / Claude Code | Antigravity Desktop / CLI | Codex CLI / Desktop App |
|---|---|---|---|
| AGENTS.md 읽기 | 메인 세션이 AGENTS.md를 읽고 에이전트 목록을 파악 |
오케스트레이터가 AGENTS.md를 읽고 동적으로 서브에이전트 생성 |
PM이 AGENTS.md·CODEX.md를 역할 컨텍스트로 읽음 |
| 서브에이전트 정의 | .claude/agents/{name}.md 파일에 YAML frontmatter(name, description, tools, model) + 시스템 프롬프트 |
정의 파일 없음 — 오케스트레이터가 실행 시점에 역할·툴 범위를 자율 판단 | 정의 파일 없음 — PM이 역할 정의를 순차적으로 불러와 해당 역할을 수행 |
| 권한 구현 | .claude/agents/*.md의 tools 필드에 Read, Grep 등 필요한 최소 툴만 나열 |
오케스트레이터가 AGENTS.md의 권한 필드를 해석해 툴 접근을 스스로 제한 |
툴 제한 장치 없음 — PM이 AGENTS.md의 권한 필드를 스스로 준수 |
| handoff | handoff_to는 참고 힌트. 메인 세션이 Agent 툴을 순차 호출해 관계를 조율 |
오케스트레이터가 handoff_to를 읽고 자동으로 순차 파이프라인 구성 |
handoff_to는 힌트 — PM이 역할 순차 전환으로 파이프라인을 재현 |
| 상세 참조 | 4장 §1-A Claude 중심 | 4장 §1-B Antigravity 중심 | 4장 §1-C Codex 중심 |
작성 가이드
1. 섹션으로 시작
## Agent: {이름}으로 에이전트 항목을 시작한다. 이름은 영문 소문자로 하되 여러 단어는 -로 연결한다(code-reviewer, api-tester). 이 이름이 Claude 계열에서는 subagent_type 값으로 사용된다.
2. 역할을 간결하게
역할은 "무엇을 하는가"를 1~2문장으로 명확히 기술한다. 다른 에이전트와의 중복을 피하고, 각 에이전트가 독립적으로 책임지는 영역이 명확하도록 한다.
3. 최소 권한으로 권한 설정
권한 필드는 파일 접근 범위를 제한한다. 이 원칙을 지키지 않으면 서브에이전트가 실수로 중요 파일을 덮어쓰 수 있다. Claude 계열에서는 이 권한이 .claude/agents/*.md의 tools 필드(Read, Grep, Write 등)로 번역된다.
4. handoff로 선후 관계 선언
handoff_to는 "이 에이전트가 작업을 마치면 결과를 어디로 넘길 것인가"를 선언한다. 이것은 명령이 아니라 힌트다. 실제로 순차 파이프라인을 구성하는 것은 메인 세션(오케스트레이터)의 몫이다.
## Agent: draft-writer 역할: 주어진 주제로 초안을 작성한다. handoff_to: reviewer (초안 완료 후 검토로 이어짐) ## Agent: reviewer 역할: 텍스트의 오탈자와 논리를 검토한다. handoff_to: editor (검토 완료 후 최종 편집으로 이어짐) ## Agent: editor 역할: 피드백을 반영해 최종 문서를 완성한다.
editor)는 파이프라인의 종점이다. 오케스트레이터는 에이전트의 결과를 최종 사용자에게 반환한다.5. 검증
작성이 완료되면 bun run agent:verify로 구조를 검증한다. 이 스크립트는 에이전트 frontmatter의 완결성, 필수 섹션 존재, AGENTS.md 로스터와의 정합성을 확인한다.
검증과 생애주기
AGENTS.md에 에이전트를 등록하는 것은 생애주기의 Create 단계에 해당한다(8장 §2 참조). 등록된 에이전트는 다음 단계를 거친다.
| 생애주기 단계 | AGENTS.md에서의 동작 | 검증 |
|---|---|---|
| Create | ## Agent: {이름} 섹션을 AGENTS.md에 추가 |
bun run agent:verify — 구조 완결성 |
| Verify | 등록 내용이 워크스페이스의 다른 파일(CONSTITUTION.md, agents/*.md)과 정합한지 확인 | bun run agent:verify — 무결성 검증 |
| Operate | 실제 세션에서 오케스트레이터가 로스터를 읽고 에이전트를 호출 | 세션 로그에서 에이전트 호출 추적 |
| Improve | 역할 정의, 권한, handoff 관계 수정 | 수정 후 다시 agent:verify |
| Deprecate | AGENTS.md에서 해당 에이전트 항목을 제거하거나 주석 처리 | agent:verify — 참조 무결성 (다른 에이전트의 handoff_to가 deprecated를 가리키지 않는지) |
에이전트를 새로 만들거나 변경할 때마다 agent:verify를 실행하는 것을 습관화하면, "로스터에는 있는데 실제 정의 파일이 없는" 또는 "handoff_to가 가리키는 에이전트가 삭제된" 같은 불일치를 조기에 발견할 수 있다.
이 검증 흐름의 자동화는 8장 §1(배포와 SSOT)에서 다루는 CI/CD 파이프라인에 validate-templates.ts 단계로 통합할 수 있다.
bun run agent:verify 실행 시 "AGENTS.md 표와 실제 agents/*.md 파일 목록이 어긋난다"는 오류가 나면, AGENTS.md의 에이전트 이름과 .claude/agents/ 폴더의 파일명을 대조하고 누락된 항목을 추가하거나 불필요한 파일을 제거한다. → FAQ