• AGENTS.md๋Š” OpenAI Codex CLI๊ฐ€ ์ž‘์—… ์ˆ˜ํ–‰ ์ „ ์ฝ๋Š” ์˜์†์  ์ง€์‹œ(instruction) ํŒŒ์ผ
  • ๊ธ€๋กœ๋ฒŒ ๊ฐ€์ด๋“œ๋ผ์ธ๊ณผ ํ”„๋กœ์ ํŠธ๋ณ„ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ **๊ณ„์ธต์ ์œผ๋กœ ๋ณ‘ํ•ฉ(merge)**ํ•˜๋Š” ๊ตฌ์กฐ
  • ~/.codex/AGENTS.md(๊ธ€๋กœ๋ฒŒ)๋ถ€ํ„ฐ ํ”„๋กœ์ ํŠธ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ **๋ฃจํŠธโ†’๋ฆฌํ”„ ์ˆœ์„œ๋กœ ์—ฐ๊ฒฐ(concatenate)**๋˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜
  • Claude Code์˜ CLAUDE.md์— ๋Œ€์‘ํ•˜๋Š” OpenAI Codex์˜ ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ ์‹œ์Šคํ…œ

ํ•ด๋‹น ๊ฐœ๋…์ด ํ•„์š”ํ•œ ์ด์œ 

  • ์—ฌ๋Ÿฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ผ๊ด€๋œ ์ฝ”๋”ฉ ๊ทœ์น™์„ ์œ ์ง€ํ•ด์•ผ ํ•  ๋•Œ
  • ํ”„๋กœ์ ํŠธ/๋””๋ ‰ํ† ๋ฆฌ๋ณ„๋กœ ๋‹ค๋ฅธ ๊ทœ์น™์„ ๊ณ„์ธต์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•  ๋•Œ
  • Codex SDK๋ฅผ ์„œ๋น„์Šค์— ํ†ตํ•ฉํ•  ๋•Œ instruction ์ฃผ์ž… ๋ฐฉ์‹์„ ์ดํ•ดํ•ด์•ผ ํ•  ๋•Œ

AS-IS

sequenceDiagram
    autonumber
    participant Dev as ๊ฐœ๋ฐœ์ž
    participant Codex as Codex CLI
    Dev->>Codex: ์ž‘์—… ์š”์ฒญ
    Note over Codex: ์ง€์‹œ์‚ฌํ•ญ ์—†์Œ
    Codex->>Codex: ๊ธฐ๋ณธ ๋™์ž‘๋งŒ ์ˆ˜ํ–‰
    Codex-->>Dev: ์ผ๊ด€์„ฑ ์—†๋Š” ๊ฒฐ๊ณผ

TO-BE

sequenceDiagram
    autonumber
    participant Dev as ๊ฐœ๋ฐœ์ž
    participant Codex as Codex CLI
    participant Global as ~/.codex/AGENTS.md
    participant Project as {cwd}/AGENTS.md
    participant Sub as {cwd}/sub/AGENTS.md
    Dev->>Codex: ์ž‘์—… ์š”์ฒญ
    Codex->>Global: 1) ๊ธ€๋กœ๋ฒŒ ์ง€์‹œ ๋กœ๋“œ
    Codex->>Project: 2) ํ”„๋กœ์ ํŠธ ์ง€์‹œ ๋กœ๋“œ
    Codex->>Sub: 3) ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ ์ง€์‹œ ๋กœ๋“œ
    Note over Codex: 1+2+3 ์—ฐ๊ฒฐ(concatenate)
    Codex-->>Dev: ์ผ๊ด€๋œ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๊ฒฐ๊ณผ

ํŒŒ์ผ ํƒ์ƒ‰(Discovery) ์ˆœ์„œ

๋””๋ ‰ํ† ๋ฆฌ๋ณ„ ํƒ์ƒ‰ ์šฐ์„ ์ˆœ์œ„

๊ฐ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ตœ๋Œ€ 1๊ฐœ ํŒŒ์ผ๋งŒ ์„ ํƒ๋œ๋‹ค:

์šฐ์„ ์ˆœ์œ„ํŒŒ์ผ๋ช…์„ค๋ช…
1AGENTS.override.md์ž„์‹œ ์˜ค๋ฒ„๋ผ์ด๋“œ์šฉ
2AGENTS.md๊ธฐ๋ณธ ์ง€์‹œ ํŒŒ์ผ
3project_doc_fallback_filenames์— ๋“ฑ๋ก๋œ ํŒŒ์ผ์ปค์Šคํ…€ ๋Œ€์ฒด ํŒŒ์ผ

์ „์ฒด ๋ณ‘ํ•ฉ ์ˆœ์„œ

flowchart LR
    A("1 ๊ธ€๋กœ๋ฒŒ: ~/.codex/AGENTS.md") -->|concat| B("2 ํ”„๋กœ์ ํŠธ: root/AGENTS.md") -->|concat| C("3 ํ•˜์œ„: subdir/AGENTS.md")

โ€œCodex concatenates files from the root down, joining them with blank lines. Files closer to your current directory override earlier guidance because they appear later in the combined prompt.โ€

ํ•ต์‹ฌ: ๋‚˜์ค‘์— ๋“ฑ์žฅํ•˜๋Š” ํŒŒ์ผ์ด ๋” ๋†’์€ ์šฐ์„ ๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋Š” LLM์˜ ํ”„๋กฌํ”„ํŠธ ํŠน์„ฑ์ƒ ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š” ์ง€์‹œ๊ฐ€ ์•ž์„  ์ง€์‹œ๋ฅผ ๋ฎ์–ด์“ฐ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ณ‘ํ•ฉ(Merge) ๋ฉ”์ปค๋‹ˆ์ฆ˜ ์ƒ์„ธ

๋™์ž‘ ๋ฐฉ์‹

  1. .git์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ๋กœ ์ธ์‹
  2. ๊ธ€๋กœ๋ฒŒ(~/.codex/) โ†’ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ โ†’ ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ํŠธ๋ฆฌ๋ฅผ ๋‚ด๋ ค๊ฐ€๋ฉฐ ์ˆ˜์ง‘
  3. ์ˆ˜์ง‘๋œ ํŒŒ์ผ์„ ๋นˆ ์ค„๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์—ฐ๊ฒฐ(concatenate)
  4. ํ•ฉ์‚ฐ ํฌ๊ธฐ๊ฐ€ project_doc_max_bytes(๊ธฐ๋ณธ 32 KiB)์— ๋„๋‹ฌํ•˜๋ฉด ์ค‘๋‹จ

๊ธ€๋กœ๋ฒŒ AGENTS.md ๋กœ๋“œ ์›๋ฆฌ

๊ธ€๋กœ๋ฒŒ ~/.codex/AGENTS.md๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋‚˜ CWD์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ, Codex์˜ ๋นŒํŠธ์ธ config_loader๊ฐ€ ์ž๋™ ๋กœ๋“œํ•œ๋‹ค.

// codex-rs/core/src/config_loader โ€” Codex ๋‚ด๋ถ€ ์ดˆ๊ธฐํ™”
let layers = load_config_layers_state(
    &codex_home,    // โ† ~/.codex/ (ํ•ญ์ƒ ๊ณ ์ •, ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ๋ฌด๊ด€)
    Some(cwd),      // โ† thread/start์—์„œ ์ „๋‹ฌํ•œ cwd
    &cli_overrides,
    LoaderOverrides::default(),
    None,
).await?;
  • codex_home์€ ํ•ญ์ƒ ~/.codex/๋กœ ๊ณ ์ • โ€” ์Šคํฐ ์‹œ ์„ค์ •ํ•œ ์ปค์Šคํ…€ ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ๋ณ„๊ฐœ ๋ฉ”์ปค๋‹ˆ์ฆ˜
  • CWD๊ฐ€ git repo๊ฐ€ ์•„๋‹ˆ์–ด๋„ ๊ธ€๋กœ๋ฒŒ AGENTS.md๋Š” ๋กœ๋“œ๋จ (~/.codex/ ์ž์ฒด๊ฐ€ git repo๊ฐ€ ์•„๋‹Œ ๊ฒƒ์ด ๊ทธ ์ฆ๊ฑฐ)
  • model_instructions_file ์„ค์ •๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ๊ธ€๋กœ๋ฒŒ/ํ”„๋กœ์ ํŠธ AGENTS.md๋Š” ํ•ญ์ƒ ๋กœ๋“œ๋จ (์•„๋ž˜ ์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜ ๋ถ„์„ ์ฐธ์กฐ)

์˜ˆ์‹œ: 3๊ฐœ ๋ ˆ๋ฒจ ๋ณ‘ํ•ฉ

# ์‹ค์ œ Codex๊ฐ€ ๋ฐ›๋Š” combined prompt:

[~/.codex/AGENTS.md ๋‚ด์šฉ]       โ† ๊ธ€๋กœ๋ฒŒ ๊ทœ์น™

[{root}/AGENTS.md ๋‚ด์šฉ]         โ† ํ”„๋กœ์ ํŠธ ๊ทœ์น™ (๊ธ€๋กœ๋ฒŒ ๊ทœ์น™ ๋ฎ์–ด์“ฐ๊ธฐ ๊ฐ€๋Šฅ)

[{root}/services/AGENTS.md ๋‚ด์šฉ] โ† ์„œ๋น„์Šค ๊ทœ์น™ (ํ”„๋กœ์ ํŠธ ๊ทœ์น™ ๋ฎ์–ด์“ฐ๊ธฐ ๊ฐ€๋Šฅ)

AGENTS.override.md

  • ์–ด๋А ๋””๋ ‰ํ† ๋ฆฌ์—๋“  AGENTS.override.md๋ฅผ ๋‘๋ฉด ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์˜ AGENTS.md๋ณด๋‹ค ์šฐ์„  ์ ์šฉ
  • ์šฉ๋„: ์ž„์‹œ ์˜ค๋ฒ„๋ผ์ด๋“œ โ€” ๊ธฐ์กด AGENTS.md๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ๊ทœ์น™์„ ๋ฐ”๊ฟ€ ๋•Œ
  • ์˜ค๋ฒ„๋ผ์ด๋“œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋ฉด ์›๋ž˜ AGENTS.md๋กœ ์ž๋™ ๋ณต์›
# services/payments/AGENTS.override.md
 
## Payments service rules
- Use `make test-payments` instead of `npm test`.
- Never rotate API keys without notifying the security channel.

Codex ๋‚ด๋ถ€ Instruction ๊ตฌ์กฐ (์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜)

Codex ์†Œ์Šค ์ฝ”๋“œ(codex-rs) ๋ถ„์„ ๊ฒฐ๊ณผ, ๋‚ด๋ถ€์—๋Š” 3๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ instruction ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๋‚ด๋ถ€ Instruction ์ „์ฒด ๋งต

๋‚ด๋ถ€ ๊ฐ’์˜๋ฏธ๊ธฐ๋ณธ๊ฐ’ (default)model_instructions_file ์˜ํ–ฅ๋กœ๋“œ ์ถœ์ฒ˜์ ์šฉ ๋ฐฉ๋ฒ• (์ฝ”๋“œ)API role์†Œ์Šค ์ฝ”๋“œ ๊ทผ๊ฑฐ
base_instructions๋ชจ๋ธ์˜ ํ•ต์‹ฌ ํ–‰๋™ ๊ทœ์น™ โ€” โ€œ๋„ˆ๋Š” Codex๋ผ๋Š” AI์•ผโ€. AGENTS.md ์ŠคํŽ™, ๋„๊ตฌ ์‚ฌ์šฉ๋ฒ•, ์ƒŒ๋“œ๋ฐ•์Šค ๊ทœ์น™ ๋“ฑ ๋ชจ๋ธ์˜ ์ตœ์ƒ์œ„ ์ง€์‹œOpenAI ์„œ๋ฒ„์—์„œ ๋ชจ๋ธ๋ณ„ ๋นŒํŠธ์ธ ํ”„๋กฌํ”„ํŠธ (instructions_template)์ด ๊ฐ’๋งŒ ๋Œ€์ฒด๋จ โ€” ํŒŒ์ผ ๋‚ด์šฉ์ด ๋นŒํŠธ์ธ ๋Œ€์‹  ์‚ฌ์šฉmodel_info.get_model_instructions()ํŒŒ์ผ: config.toml์— model_instructions_file = "๊ฒฝ๋กœ", ์ฝ”๋“œ: config์— model_instructions_file ํ‚ค ์ถ”๊ฐ€instructions (system)config/mod.rs:2433-2442, codex.rs:553-562, openai_models.rs:316
developer_instructions์„œ๋น„์Šค ์šด์˜์ž์˜ ๋น„๊ณต๊ฐœ ์ง€์‹œ โ€” API ํ˜ธ์ถœ ์„œ๋น„์Šค๊ฐ€ ์„ค์ •. ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ ์•ˆ ๋จ, override ๋ถˆ๊ฐ€. ๋Ÿฐํƒ€์ž„์— sandbox policyยทskillsยทplugins ๋“ฑ์ด developer_sections๋กœ ํ•จ๊ป˜ ํ•ฉ์‚ฐNone. sandbox policyยทskillsยทplugins ๋“ฑ์€ Codex๊ฐ€ ์ž๋™ ์ถ”๊ฐ€์˜ํ–ฅ ์—†์Œconfig.toml์˜ developer_instructions ํ•„๋“œ (string, ํŒŒ์ผ๊ฒฝ๋กœ ์•„๋‹˜)์ฝ”๋“œ๋กœ ์„ค์ •: config์— developer_instructions: "๋‚ด์šฉ" ํ‚ค ์ถ”๊ฐ€ โ†’ --config developer_instructions="..." ์ „๋‹ฌdeveloper role msgconfig/mod.rs:1179-1181, config/mod.rs:2443, codex.rs:3494-3497, updates.rs:161-162
user_instructions์ตœ์ข… ์‚ฌ์šฉ์ž์˜ ์ปค์Šคํ…€ ์ง€์‹œ โ€” ์‚ฌ์šฉ์ž๊ฐ€ AGENTS.md์— ์ง์ ‘ ์ž‘์„ฑ. ํ”„๋กœ์ ํŠธ ๊ทœ์น™, ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜, ์„ ํ˜ธ ๊ธฐ์ˆ  ์Šคํƒ. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ œ์–ด ๊ฐ€๋Šฅ~/.codex/AGENTS.md(๊ธ€๋กœ๋ฒŒ) + {cwd}/AGENTS.md(ํ”„๋กœ์ ํŠธ) ์ž๋™ ๋ณ‘ํ•ฉ, --- project-doc --- ๊ตฌ๋ถ„์ž๋กœ ์—ฐ๊ฒฐ์˜ํ–ฅ ์—†์Œโ‘  load_instructions(codex_home) โ†’ ๊ธ€๋กœ๋ฒŒ โ‘ก read_project_docs() โ†’ ํ”„๋กœ์ ํŠธํŒŒ์ผ ๋ฐฐ์น˜๋งŒ์œผ๋กœ ์ž๋™: ~/.codex/AGENTS.md ๋˜๋Š” {cwd}/AGENTS.md ์ƒ์„ฑuser role msgconfig/mod.rs:2033, config/mod.rs:2769-2782, project_doc.rs:79-119, project_doc.rs:128-178, updates.rs:165-166

์ตœ์ข… ํ”„๋กฌํ”„ํŠธ ๊ตฌ์กฐ (API ํ˜ธ์ถœ ๊ธฐ์ค€)

 โ”Œโ”€ instructions (system) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚  base_instructions                                       โ”‚
 โ”‚  โ† model_instructions_file ์„ค์ • ์‹œ ๋Œ€์ฒด                     โ”‚
 โ”‚  โ† ๋ฏธ์„ค์ • ์‹œ: ์„œ๋ฒ„ ๋นŒํŠธ์ธ ํ”„๋กฌํ”„ํŠธ (๋ชจ๋ธ๋ณ„)                       โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ†“
 โ”Œโ”€ developer role message โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚  sandbox policy + approval policy                        โ”‚
 โ”‚  developer_instructions (config ์„ค์ • ๊ฐ’)                   โ”‚
 โ”‚  memory tool instructions                                โ”‚
 โ”‚  personality, skills, plugins ...                        โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ†“
 โ”Œโ”€ user role message (contextual) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚  user_instructions:                                      โ”‚
 โ”‚    โ”œโ”€ ~/.codex/AGENTS.md (๊ธ€๋กœ๋ฒŒ)                          โ”‚
 โ”‚    โ”œโ”€ --- project-doc ---                                โ”‚
 โ”‚    โ””โ”€ {cwd}/AGENTS.md (ํ”„๋กœ์ ํŠธ ๋ณ‘ํ•ฉ)                       โ”‚
 โ”‚  environment context (cwd, os, shell ...)                โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

model_instructions_file์˜ ์ •ํ™•ํ•œ ์—ญํ•  (๊ณต์‹๋ฌธ์„œ vs ์†Œ์Šค์ฝ”๋“œ)

๊ณต์‹ ๋ฌธ์„œ ์ •์˜:

โ€œReplacement for built-in instructions instead of AGENTS.md.โ€ โ€” Configuration Reference, model_instructions_file ํ•ญ๋ชฉ

์ด ๋ฌธ์žฅ์˜ ์˜ฌ๋ฐ”๋ฅธ ํ•ด์„ (์†Œ์Šค ์ฝ”๋“œ ๊ธฐ๋ฐ˜):

  • โ€œAGENTS.md๋ฅผ ๋Œ€์ฒดํ•œ๋‹คโ€ (X)
  • โ€œAGENTS.md๊ฐ€ ์•„๋‹Œ, ๋นŒํŠธ์ธ ์ง€์‹œ์‚ฌํ•ญ์„ ๋Œ€์ฒดํ•˜๋Š” ํŒŒ์ผโ€ (O)

์†Œ์Šค ์ฝ”๋“œ ๊ทผ๊ฑฐ โ€” model_instructions_file์€ base_instructions์—๋งŒ ๋งคํ•‘:

// config/mod.rs:2433-2442
// Load base instructions override from a file if specified.
let model_instructions_path = config_profile
    .model_instructions_file.as_ref()
    .or(cfg.model_instructions_file.as_ref());
let file_base_instructions =
    Self::try_read_non_empty_file(model_instructions_path, ...)?;
let base_instructions = base_instructions.or(file_base_instructions);
//  ^^^^^^^^^^^^^^^^     โ† base_instructions์—๋งŒ ๋งคํ•‘

AGENTS.md๋ฅผ ๋กœ๋“œํ•˜๋Š” get_user_instructions() (project_doc.rs:79-119)์—๋Š” model_instructions_file์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์ „ํ˜€ ์—†์Œ.

FAQ

Q. developer_instructions์— ์„ค์ •ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌผ์–ด๋ด๋„ ๋‚ด์šฉ์„ ๋‹ตํ•˜์ง€ ์•Š๋Š”๊ฐ€?

๋งž๋‹ค. OpenAI API์˜ developer role ์ŠคํŽ™์— ์˜ํ•ด ๋ชจ๋ธ์€ developer ๋ฉ”์‹œ์ง€ ๋‚ด์šฉ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณต๊ฐœํ•˜์ง€ ์•Š๋„๋ก ํ›ˆ๋ จ๋˜์–ด ์žˆ๋‹ค. โ€œ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋ณด์—ฌ์ค˜โ€๋ผ๊ณ  ๋ฌผ์–ด๋„ ๋ชจ๋ธ์ด ๊ฑฐ๋ถ€ํ•œ๋‹ค. ๋‹จ, ์ด๊ฒƒ์€ ๋ชจ๋ธ ํ–‰๋™ ๋ ˆ๋ฒจ์˜ ๋ณดํ˜ธ์ด์ง€ ์•”ํ˜ธํ™” ๊ฐ™์€ ํ•˜๋“œ ๋ณด์•ˆ์€ ์•„๋‹˜.

์ฝ”๋“œ ๊ทผ๊ฑฐ โ€” developer role๋กœ ์ „์†ก:

// updates.rs:161-162
pub fn build_developer_update_item(text_sections: Vec<String>) -> Option<ResponseItem> {
    build_text_message("developer", text_sections)  // โ† developer role
}

๋ฐ˜๋ฉด user_instructions(AGENTS.md)๋Š” user role๋กœ ์ „์†ก๋˜๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ด์šฉ์„ ๋ฌผ์–ด๋ณด๋ฉด ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค:

// updates.rs:165-166
pub fn build_contextual_user_message(text_sections: Vec<String>) -> Option<ResponseItem> {
    build_text_message("user", text_sections)  // โ† user role
}

Q. developer_instructions๋Š” ํŒŒ์ผ์ด ์•„๋‹Œ ์ฝ”๋“œ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€?

๋งž๋‹ค. developer_instructions๋Š” string ํƒ€์ž…์ด๋ฉฐ ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋‹ค.

// config.schema.json
"developer_instructions": {
  "default": null,
  "description": "Developer instructions inserted as a `developer` role message.",
  "type": "string"    // โ† ํŒŒ์ผ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž์—ด
}

SDK/app-server ํ†ตํ•ฉ ์‹œ config override๋กœ ์„ค์ •:

// Codex SDK ๋˜๋Š” app-server config override
const config = {
  sandbox_mode: "workspace-write",
  developer_instructions: "์„œ๋น„์Šค ๋น„๊ณต๊ฐœ ์ง€์‹œ์‚ฌํ•ญ ๋‚ด์šฉ...",
  // โ†’ --config developer_instructions="..." ๋กœ ์ „๋‹ฌ๋จ
};

Q. developer_instructions vs user_instructions์˜ ์ฐจ์ด๋Š”?

OpenAI API์˜ message role ์ŠคํŽ™ ๊ธฐ๋ฐ˜:

์šฐ์„ ์ˆœ์œ„: system(base) > developer > user

developer = "์„œ๋น„์Šค๋ฅผ ๋งŒ๋“  ๊ฐœ๋ฐœ์ž"์˜ ์ง€์‹œ
 โ†’ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์—†๊ณ , override ๋ถˆ๊ฐ€
 โ†’ e.g. ์„œ๋น„์Šค๊ฐ€ "ํ•ญ์ƒ ํ•œ๊ตญ์–ด๋กœ ๋‹ต๋ณ€" ์„ค์ •

user = "์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์ข… ์‚ฌ์šฉ์ž"์˜ ์ง€์‹œ
 โ†’ ์‚ฌ์šฉ์ž๊ฐ€ AGENTS.md๋กœ ์ง์ ‘ ์ œ์–ด
 โ†’ e.g. ์‚ฌ์šฉ์ž๊ฐ€ "TypeScript ์„ ํ˜ธ, ์ปค๋ฐ‹ ํ•œ๊ธ€" ์„ค์ •

์„œ๋น„์Šค์˜ ์ง€์‹œ์‚ฌํ•ญ์€ developer_instructions์—, ์‚ฌ์šฉ์ž ์ปค์Šคํ…€์€ AGENTS.md(user_instructions)์— ๋„ฃ๋Š” ๊ฒƒ์ด ์˜๋ฏธ์ ์œผ๋กœ ์ •ํ™•ํ•˜๋‹ค.

config.toml ์ฃผ์š” ์„ค์ •

# AGENTS.md ๊ด€๋ จ ์„ค์ •
project_doc_max_bytes = 32768                              # ๊ธฐ๋ณธ 32 KiB
project_doc_fallback_filenames = ["TEAM_GUIDE.md", ".agents.md"]  # ๋Œ€์ฒด ํŒŒ์ผ๋ช…
model_instructions_file = "/path/to/instructions.md"       # AGENTS.md ์ „๋ฉด ๋Œ€์ฒด
 
# ๊ธฐํƒ€ ์ฃผ์š” ์„ค์ •
model = "gpt-5-codex"
sandbox_mode = "workspace-write"     # read-only | workspace-write | danger-full-access
approval_policy = "on-request"       # untrusted | on-request | never

Claude Code์˜ CLAUDE.md์™€ ๋น„๊ต

ํ•ญ๋ชฉCodex AGENTS.mdClaude Code CLAUDE.md
๊ธ€๋กœ๋ฒŒ ๊ฒฝ๋กœ~/.codex/AGENTS.md~/.claude/CLAUDE.md
ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ{cwd}/AGENTS.md{cwd}/CLAUDE.md
๋ณ‘ํ•ฉ ๋ฐฉ์‹๋ฃจํŠธโ†’๋ฆฌํ”„ concatenate๋ฃจํŠธโ†’๋ฆฌํ”„ concatenate
์˜ค๋ฒ„๋ผ์ด๋“œ ํŒŒ์ผAGENTS.override.md์—†์Œ (๋‹จ์ผ ํŒŒ์ผ)
๋Œ€์ฒด ์„ค์ •model_instructions_file์—†์Œ
ํฌ๊ธฐ ์ œํ•œproject_doc_max_bytes (32 KiB)์ž๋™ ๊ด€๋ฆฌ
fallback ํŒŒ์ผproject_doc_fallback_filenames์—†์Œ

์ฐธ๊ณ  ๋ฌธ์„œ