Chapter 5: Codex에서 하네스 짓기 — AGENTS.md, 설정, 디렉토리 구조
5.1 OpenAI가 자기 자신에게 쓴 AGENTS.md
가장 좋은 AGENTS.md 예시는 OpenAI의 Codex 저장소 자체다 [OpenAI, 2026]. 실제로 어떻게 생겼는지 보면:
- Rust crate 이름은
codex-접두사 (예:codex-core,codex-cli) - 모듈 크기 500줄 이하 (800줄에서 분리)
- Clippy: "항상 if 구문을 한 줄로 접어라"
- 클로저 대신 메서드 참조(method references) 선호
이것이 프로덕션 AGENTS.md가 실제로 어떻게 생겼는지다. 범용 코딩 규칙이 아니라, 이 코드베이스에서 틀리기 쉬운 것들을 구체적으로 명시하는 것이다.
5.2 세 가지를 만들어야 한다
Codex에서 하네스를 짓는다는 것은 세 가지 파일/디렉토리를 만드는 것이다:
- 최상위
AGENTS.md— 프로젝트 전체에 적용되는 도구 독립적 규칙 ~/.codex/config.toml— Codex 전용 설정.codex/agents/— 첫 서브에이전트 정의.toml
순서대로 만들어보자.
5.3 AGENTS.md — 실전 작성법
AGENTS.md의 철학: 새로운 에이전트가 이 코드베이스에 처음 투입됐을 때 알아야 할 것들을 적는다. 일회성 컨텍스트가 아니라 영속적 프로젝트 규칙이다.
AGENTS.md 표준은 현재 60,000+ 오픈소스 프로젝트에서 채택됐다 [Foundation, 2026]. Linux Foundation 산하 Agentic AI Foundation으로 이관된 크로스벤더 표준이다.
좋은 AGENTS.md의 구조 [Code, 2026]:
# Project Rules
## Overview
<2-3 문장으로 이 프로젝트가 무엇을 하는지>
## Stack & Architecture
<핵심 기술 스택, 주요 디렉토리 역할>
## Code Standards
<린터, 포맷터, 네이밍 컨벤션, 함수 길이 등>
## Testing
<테스트 명령어, 커버리지 기대치, 모킹 정책>
## Git Workflow
<브랜치 전략, 커밋 메시지 형식>
## Common Mistakes to Avoid
<에이전트가 자주 틀리는 것들 — 실제 경험 기반>
구체적인 예시 (Node.js / TypeScript 프로젝트):
# Project Rules
## Overview
Express.js REST API for user management. PostgreSQL + TypeORM.
Main entry: src/app.ts. Test: npm test (Jest).
## Stack
- Node.js 20+, TypeScript 5.4 strict
- Express.js 4.18, TypeORM 0.3
- PostgreSQL 16
- Jest 29 for testing
## Code Standards
- ESLint + Prettier enforced (run: npm run lint)
- Functions < 40 lines
- No any type unless absolutely necessary — use unknown + type guards
- Repository pattern for database access (src/repositories/)
## Testing
- Unit: Jest with jest.mock() for external deps
- Integration: supertest against real test DB
- Run before commit: npm test
- No console.log in tests
## Common Mistakes to Avoid
- Don't import directly from TypeORM in controllers — use repositories
- Don't use req.body directly — validate with Zod schemas first
- Don't catch and swallow errors — let them propagate to error middleware
AGENTS.md를 얼마나 자세히 써야 하는가? [Osmani, 2026]의 조언: "AI가 생성한 AGENTS.md는 실패한다. 사람이 직접 쓴 것만이 실제로 작동한다." 에이전트가 자꾸 틀리는 것을 발견할 때마다 그 항목을 추가한다 — 이것이 살아있는 문서가 되는 방식이다.
단, 이와 반대 주장도 있다 [Jagtap, 2026]: GEPA(Generalized Evolutionary Prompt Automation) 방식으로 에이전트 실행 결과를 피드백으로 AGENTS.md/SKILL.md를 자동 튜닝하면 수작업보다 성능이 좋아진다. 두 접근법의 중간점 — 초기 초안은 사람이 쓰고, 반복적인 실패 패턴은 자동화로 보완한다.
5.4 ~/.codex/config.toml — 실전 설정
# ~/.codex/config.toml
model = "gpt-5.5"
model_reasoning_effort = "medium" # minimal / low / medium / high / xhigh
sandbox_mode = "workspace-write" # 권장 시작점 (read-only / workspace-write / danger-full-access)
approval_policy = "on-request" # 요청 시 확인 (untrusted / on-request / never; on-failure는 deprecated)
# 선택 사항
[providers]
[providers.openai]
api_key_env = "OPENAI_API_KEY" # 환경변수에서 읽기
approval_policy 옵션 [OpenAI, 2026]:
untrusted: 신뢰하지 않는 명령 실행 시 매번 확인 (가장 보수적)on-request: 모델이 요청할 때 확인 (interactive 작업의 권장 default; 이전의on-failure를 대체)never: 자동 승인 (CI/CD 등 non-interactive 실행에 적합)
프로덕션 코드를 건드리는 태스크엔 untrusted, 개인 프로젝트나 테스트 작성엔 on-request가 적당하다.
config 파일에 대한 솔직한 주의. config 파일이 항상 권위를 갖는 것은 아니다. Codex GitHub issue #11354 [contributors, 2026]는 config에 subagents = false를 설정해도 /review 명령이 서브에이전트를 다시 활성화한 사례를 기록한다 — config가 조용히 덮어쓰였다. config가 쓸모없다는 뜻이 아니라, config는 기본값을 설정하지만 특정 명령이 그것을 override할 수 있다는 뜻이다. 특히 안전 게이트 역할을 하는 approval_policy 설정이 실제로 의도한 동작을 통제하는지 반드시 테스트하라.
5.5 첫 서브에이전트 — .codex/agents/reviewer.toml
서브에이전트는 특정 역할에 집중하는 전문 에이전트다. 첫 서브에이전트로 코드 리뷰어를 만들어보자 [OpenAI, 2026]:
# .codex/agents/reviewer.toml
name = "reviewer"
description = "Code reviewer focused on security and performance"
developer_instructions = """
You are a code reviewer. When called:
1. Check for SQL injection vulnerabilities
2. Check for missing input validation
3. Check for inefficient database queries (N+1 problems)
4. Check for missing error handling
5. Report findings as a numbered list with file:line references
Be specific and actionable. Don't flag style issues — focus on correctness and security.
"""
이제 메인 에이전트가 이 서브에이전트를 호출한다:
codex exec "implement the create-user endpoint, then have the reviewer check it"
Willison이 기록한 대로, subagents는 2026-03-16에 GA됐다 [Willison, 2026]. 기본 제공 서브에이전트 세 가지: explorer(코드베이스 탐색), worker(코드 실행), default(범용). 커스텀 서브에이전트는 이 위에 추가된다.
5.6 skills — .codex/skills/test-gen/SKILL.md
Skills는 재사용 가능한 태스크 지시 모음이다 [OpenAI, 2026]. Codex가 AGENTS.md에서 skill frontmatter를 읽고, 필요할 때 전체 내용을 로드한다:
---
name: test-gen
description: Generate Jest unit tests for TypeScript functions
triggers:
- "write tests"
- "add unit tests"
- "test coverage"
---
# Test Generation Rules
When generating Jest tests for this project:
1. Import from `@/` aliases (configured in tsconfig paths)
2. Mock external dependencies: `jest.mock('typeorm')` for ORM
3. Use `describe` blocks by function name
4. Test both success and error paths
5. Aim for 80%+ coverage of new code
## Example Structure
\```typescript
describe('UserService.createUser', () => {
it('should create user with valid data', async () => { ... });
it('should throw on duplicate email', async () => { ... });
it('should hash password before saving', async () => { ... });
});
\```
5.7 사람이 직접 쓸 것인가, 자동화할 것인가
이 논쟁을 솔직하게 정리한다.
사람이 직접 써야 한다 (Osmani) [Osmani, 2026]: AI가 생성한 AGENTS.md는 실제 코드베이스 특성이 반영되지 않아 실패한다. 진짜 병목은 무엇인지, 진짜로 피해야 할 패턴이 무엇인지는 사람만이 안다.
자동화로 보완할 수 있다 (Jagtap) [Jagtap, 2026]: 에이전트 실행 로그에서 반복적 실패 패턴을 추출해 AGENTS.md에 자동 추가하면 인간 편향 없이 실제 실패 데이터에서 배운다.
실용적 결론: 초기 초안은 사람이 쓴다. 프로젝트가 성숙해지면 실행 로그 기반 자동 보완을 고려한다. 6장의 멀티에이전트 설계와 9장의 메타하네스가 이 자동화 방향으로 이어진다.
참고문헌
- OpenAI Codex repo, "AGENTS.md example," 2026. [OpenAI, 2026]
- AGENTS.md Open Standard, "60K+ projects," 2026. [Foundation, 2026]
- OpenAI, "AGENTS.md specification," 2026. [OpenAI, 2026]
- OpenAI, "Codex config reference," 2026. [OpenAI, 2026]
- OpenAI, "Codex subagents," 2026. [OpenAI, 2026]
- OpenAI, "Codex skills," 2026. [OpenAI, 2026]
- Willison, Simon, "Codex subagents GA," simonwillison.net, 2026-03-16. [Willison, 2026]
- Augment, "How to build a great AGENTS.md," 2026. [Code, 2026]
- Osmani, Addy, "Code orchestra — multi-model routing," 2026. [Osmani, 2026]
- Jagtap, "Codex AGENTS.md auto-optimization," 2026. [Jagtap, 2026]
- Vjujini, "Codex app — Korean hands-on review," 2026. [velog), 2026]