๐Ÿ“บ ์˜์ƒ ์š”์•ฝ ์•„์นด์ด๋ธŒ
โ† ๋ชฉ๋ก

Building on the Codex Harness โ€” Dominik Kundel, OpenAI

AI Engineer ยท 2026-10-10 00:30 ยท 18:08

ํ•œ ์ค„ ํ•ต์‹ฌ

Codex harness๋ฅผ ๊ฐ์‹ธ๋Š” open source App Server๋ฅผ ํ™œ์šฉํ•ด ๋ชจ๋ธยท๋„๊ตฌยท๊ถŒํ•œยท๋ฐฐํฌ ๋ฐฉ์‹์„ ์ง์ ‘ ์ œ์–ดํ•˜๋ฉด, ๋ณต์žกํ•œ ์—์ด์ „ํŠธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์‹œ๊ฐ„๋ณ„ ์š”์•ฝ

  1. 0:00
    ์†Œ๊ฐœ ์ง์ ‘ ์—์ด์ „ํŠธ ํ•˜๋„ค์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋‹ด์„ ์ค„์ด๊ธฐ ์œ„ํ•ด, Codex harness ์œ„์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์–น๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ๋‹ค. OpenAI์—์„œ Codex ๊ฐœ๋ฐœ์ž ๊ฒฝํ—˜์„ ๋‹ด๋‹นํ•˜๋Š” ๊ด€์ ์—์„œ, ๋” ์‰ฝ๊ฒŒ ์ž์‹ ๋งŒ์˜ ์—์ด์ „ํŠธ ํ™˜๊ฒฝ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ•์กฐํ•œ๋‹ค.
  2. 0:52
    App Server๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Codex app server๋ผ๋Š” ๊ฐœ๋…์ด ์†Œ๊ฐœ๋˜๋ฉฐ, ์ด๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์•„์ง ์ถฉ๋ถ„ํžˆ ์„ค๋ช…๋˜์ง€ ์•Š์•˜์Œ์„ ์งš๋Š”๋‹ค. ๋‹จ์ˆœํ•œ ์•ฑ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ Codex๋ฅผ ๊ฐ์‹ธ๋Š” ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ๋ผ๋Š” ๋ฌธ์ œ์˜์‹์ด ์—ด๋ฆฐ๋‹ค.
  3. 1:12
    Codex ๋’ค์˜ ํ”„๋กœํ† ์ฝœ App Server๋Š” Codex harness๋ฅผ ๊ฐ์‹ธ๋Š” ํ”„๋กœํ† ์ฝœ์ด๋ฉฐ, agent client protocol๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ํ•˜๋„ค์Šค ์œ„์— ์ง์ ‘ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ ๋‹ค. ์ฆ‰, ์ œํ’ˆ ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ ํ•˜๋„ค์Šค์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ ๊ทœ๊ฒฉ์ด ํ•ต์‹ฌ์ด๋‹ค.
  4. 1:37
    ์˜คํ”ˆ ์†Œ์Šค, ์–ด๋–ค ๋ชจ๋ธ ์ œ๊ณต์ž๋“  ๊ฐ€๋Šฅ Codex harness์™€ App Server ๋ชจ๋‘ ์˜คํ”ˆ ์†Œ์Šค์ด๋ฉฐ Apache 2 ๋ผ์ด์„ ์Šค๋กœ ์ œ๊ณต๋œ๋‹ค. responses API ํ˜ธํ™˜๋งŒ ๋˜๋ฉด ๋‹ค๋ฅธ ๋ชจ๋ธ ์ œ๊ณต์ž๋„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ณ , LM Studio๋‚˜ Ollama ์—ฐ๊ฒฐ๋„ ๋น„๊ต์  ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  5. 2:17
    ๋™์ž‘ ๋ฐฉ์‹ App Server๋Š” JSON RPC ์Šคํƒ€์ผ ํ”„๋กœํ† ์ฝœ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, Codex ์•ฑยทIDE ํ™•์žฅยทVS Code ํ™•์žฅ ๊ฐ™์€ 1st-party ์ธํ„ฐํŽ˜์ด์Šค์™€ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๋ชจ๋‘ ๊ตฌ๋™ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ€ ๋ฉ”์‹œ์ง€์™€ ์ด๋ฒคํŠธ๋ฅผ ์ฃผ๊ณ ๋ฐ›์•„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ตฌ์กฐ๋‹ค.
  6. 3:32
    ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์‚ดํŽด๋ณด๊ธฐ ๋ฐ๋ชจ ์‹ค์ œ Codex ์•ฑ๊ณผ App Server ์‚ฌ์ด๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” ์ธ์ŠคํŽ™ํ„ฐ๋ฅผ ํ†ตํ•ด ์ด๋ฒคํŠธ ํ๋ฆ„์„ ๋ณด์—ฌ์ค€๋‹ค. ์ŠคํŠธ๋ฆฌ๋ฐ ๋ฐ์ดํ„ฐ, ์ƒˆ ์Šค๋ ˆ๋“œ ์‹œ์ž‘, ์„ค์ • ์ฝ๊ธฐ, ํŒŒ์ผ ๊ฒ€์ƒ‰ ๊ฐ™์€ ๋‚ด๋ถ€ ๋™์ž‘์ด ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜์–ด, ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์™ธ๋ถ€ ํด๋ผ์ด์–ธํŠธ์—์„œ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Œ์„ ๋“œ๋Ÿฌ๋‚ธ๋‹ค.
  7. 5:31
    120๊ฐœ ์ด์ƒ์˜ ํด๋ผ์ด์–ธํŠธ ๋ฉ”์‹œ์ง€ ์ดˆ๊ธฐํ™”, ์Šค๋ ˆ๋“œ ์ˆ˜์ •, goal ์„ค์ •, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋‚˜์—ด, ํŒŒ์ผ ๊ฒ€์ƒ‰, ํŒŒ์ผ ์ˆ˜์ • ๋“ฑ 120๊ฐœ๊ฐ€ ๋„˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ๋„˜์–ด์„œ ์—์ด์ „ํŠธ์˜ ์„ธ๋ถ€ ๋™์ž‘๊ณผ ์ƒŒ๋“œ๋ฐ•์Šค ๊ถŒํ•œ๊นŒ์ง€ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  8. 6:31
    ChatGPT๋กœ ๋กœ๊ทธ์ธ ์ด ํ”„๋กœํ† ์ฝœ์„ ์“ฐ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์˜ ChatGPT ๊ตฌ๋…์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€ Codex ์‚ฌ์šฉ๋Ÿ‰ ํ•œ๋„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ธ๋ถ€ ์•ฑ์„ ๋งŒ๋“ค๋”๋ผ๋„ ์ธ์ฆ๊ณผ ๊ณผ๊ธˆ ๊ฒฝํ—˜์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  9. 6:56
    ๊ฐœ๋ฐœ์ž ์ง€์นจ ๊ฐœ๋ฐœ์ž ์ง€์นจ์€ Codex์˜ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ์œ„์— ์ถ”๊ฐ€๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ๊ธฐ๋ณธ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๋Œ€์ฒดํ•˜์ง€ ์•Š๊ณ  ๋ณด๊ฐ•ํ•œ๋‹ค. ๋ชจ๋ธ๋ณ„๋กœ ์ด๋ฏธ ๋‹ค๋“ฌ์–ด์ง„ ํ”„๋กฌํ”„ํŠธ์˜ ์žฅ์ ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ์•ฑ ํŠนํ™” ์š”๊ตฌ๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜๋‹ค.
  10. 7:41
    ๋™์  ๋„๊ตฌ์™€ ์ง€์—ฐ ๋กœ๋”ฉ ๋„๊ตฌ MCP ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ถ”๊ฐ€ ๋„๊ตฌ๋ฅผ ๋…ธ์ถœํ•  ์ˆ˜ ์žˆ๊ณ , ๋„๊ตฌ๋ฅผ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํŠนํžˆ deferred loading์„ ์“ฐ๋ฉด ๋„๊ตฌ๋ฅผ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์— ๋„ฃ์ง€ ์•Š๊ณ  tool search๋กœ ์ฐพ๊ฒŒ ํ•ด ์ปจํ…์ŠคํŠธ ์˜ค์—ผ์„ ์ค„์ด๋ฉฐ, ์Šค๋ ˆ๋“œ๋ณ„๋กœ ๋ชจ๋ธยท์ƒŒ๋“œ๋ฐ•์Šคยท๋„คํŠธ์›Œํฌ ๊ถŒํ•œ๋„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  11. 8:46
    ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐฐํฌ App Server๋Š” Codex CLI์™€ ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ œ๊ณต๋˜์–ด, ์ด๋ฏธ CLI๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ”๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Codex ์•ฑ์—๋„ ๋ฒˆ๋“ค๋กœ ํฌํ•จ๋˜๋ฉฐ, Windows์—์„œ๋Š” WSL์šฉ Linux ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋„ค์ดํ‹ฐ๋ธŒ Windows ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ๋ฐฐํฌํ•œ๋‹ค.
  12. 9:46
    ๋ฐ”์ธ๋”ฉ๊ณผ ์ „์†ก ๋ฐฉ์‹ ๋ฒ„์ „ ๋ณ€ํ™”์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋„๋ก TypeScript bindings์™€ JSON schema๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ „์†ก ๋ฐฉ์‹์€ STDIO์™€ web socket์„ ์ง€์›ํ•˜๋ฉฐ, ์–ด๋–ค ๋ฐฉ์‹์ด ๋งž๋Š”์ง€๋Š” Codex์—๊ฒŒ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค๊ณ  ์ •๋ฆฌํ•œ๋‹ค.
  13. 10:31
    Python SDK ์ตœ๊ทผ ๊ณต๊ฐœ๋œ Python SDK๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด ์ฃผ๊ณ , ChatGPT ๋กœ๊ทธ์ธ ํ†ตํ•ฉ๋„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค. ๋ณต์žกํ•œ ํ•˜๋„ค์Šค ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๊ณ ๋„ ์•ฑ ํ†ตํ•ฉ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ข‹์€ ์ง„์ž…์ ์ด๋‹ค.
  14. 10:51
    ๊ทธ๋ƒฅ Codex์—๊ฒŒ ๋งก๊ธฐ๊ธฐ Codex๋Š” ์ด ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„์— ๊ฐ•ํ•˜๋ฏ€๋กœ ๋ฌธ์„œ๋ฅผ ๋ถ™์—ฌ ์ฃผ๊ธฐ๋งŒ ํ•ด๋„ ๋งŽ์€ ๋ถ€๋ถ„์„ ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค. macOS ์•ฑ ์ƒ์„ฑ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ Visual Basic ํด๋ผ์ด์–ธํŠธ ๊ฐ™์€ ์—‰๋šฑํ•œ ์‹คํ—˜๋„ ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ณ , ์ฑ„ํŒ… UI๊ฐ€ ์•„๋‹Œ ๋‹ค์–‘ํ•œ ์‹คํ–‰ ๋ฐฉ์‹์œผ๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  15. 12:00
    Doom ์•ˆ์˜ Codex Codex๋ฅผ Doom ์•ˆ์—์„œ ์‹คํ–‰ํ•˜๋Š” ์‹คํ—˜์„ ํ†ตํ•ด, ์—์ด์ „ํŠธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ „ํ†ต์ ์ธ ์•ฑ ํ˜•ํƒœ์ผ ํ•„์š”๋Š” ์—†์Œ์„ ๋ณด์—ฌ์ค€๋‹ค. Electron, Doom Wasm, IPC๋ฅผ ํ†ตํ•ด ๊ฒŒ์ž„ ๋‚ด๋ถ€์—์„œ Codex๊ฐ€ ๋™์ž‘ํ•˜๊ณ  ๋Œ€ํ™”๊นŒ์ง€ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  16. 13:40
    Doom์— ๋„๊ตฌ ์ฃผ๊ธฐ ๋ฐ๋ชจ ๋™์  ๋„๊ตฌ๋ฅผ ๋ถ™์—ฌ armor, health, weapons, ammo ๊ฐ™์€ ๊ฒŒ์ž„ ์ƒํƒœ๋ฅผ ์ฝ๊ฒŒ ํ•˜๊ณ , ์‰˜์„ ํ†ตํ•ด ํ˜„์žฌ ๋””๋ ‰ํ„ฐ๋ฆฌ๋„ ํ™•์ธํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค. ๊ฐ™์€ ํ•˜๋„ค์Šค๊ฐ€ ์‹ค์ œ ๋จธ์‹ ์—์„œ ๋Œ์•„๊ฐ€๋ฏ€๋กœ, ๊ฒŒ์ž„ ์•ˆ์—์„œ๋„ ์ฝ”๋“œ๋ฅผ ์“ฐ๊ณ  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  17. 14:50
    App Server์™€ codex exec์˜ ์ฐจ์ด Codex Exec๋Š” ๋น„๋Œ€ํ™”ํ˜• ์ž‘์—…์„ ์Šคํฌ๋ฆฝํŒ…ํ•  ๋•Œ ์œ ์šฉํ•ด CI/CD๋‚˜ PR ์ž๋™ ์ˆ˜์ •์— ์ ํ•ฉํ•˜๋‹ค. ๋ฐ˜๋ฉด App Server๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ๋„์šฐ๊ฑฐ๋‚˜ eval harness, goal ๋ชจ๋“œ ๊ฐ™์€ ๋ณตํ•ฉ ์ธํ„ฐ๋ž™์…˜์„ ๊ตฌ์„ฑํ•  ๋•Œ ๋” ๊ฐ•ํ•˜๋‹ค.
  18. 15:55
    ์„ธ ๊ฐ€์ง€ ํŒ ์ฒซ์งธ, ์‚ฌ์šฉ์ž ์„ค์น˜๋ณธ์— ๊ธฐ๋Œ€์ง€ ๋ง๊ณ  ์ž์‹ ์˜ ํ•˜๋„ค์Šค ๋ฒ„์ „์„ ํ•จ๊ป˜ ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค. ๋‘˜์งธ, ์ƒˆ ๊ธฐ๋Šฅ์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋…ธ์ถœํ•˜๋˜ deferred๋กœ ๋‘์–ด ์ปจํ…์ŠคํŠธ๋ฅผ ์ง€ํ‚ค๊ณ , ์…‹์งธ, ๊ธฐ๋ณธ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ๋ฅผ ๊ฐˆ์•„์—Ž๊ธฐ๋ณด๋‹ค developer instructions๋ถ€ํ„ฐ ํ™•์žฅํ•˜๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค.

์‹ค๋ฌด ์ธ์‚ฌ์ดํŠธ

  • ์—์ด์ „ํŠธ ์ œํ’ˆ์„ ๋งŒ๋“ค ๋•Œ๋Š” ๋ชจ๋ธ ์„ฑ๋Šฅ๋ณด๋‹ค ํ•˜๋„ค์Šค ๋ฐฐํฌ ์ „๋žต์ด ๋” ํฐ ์•ˆ์ •์„ฑ ์ฐจ์ด๋ฅผ ๋งŒ๋“ ๋‹ค. ์‚ฌ์šฉ์ž ํ™˜๊ฒฝ ์˜์กด์„ฑ์„ ์ค„์ด๋ ค๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋ฒ„์ „์„ ์•ฑ์— ํฌํ•จํ•˜๋Š” ๋ฐฉ์‹์ด ์œ ๋ฆฌํ•˜๋‹ค.
  • ๋„๊ตฌ๋ฅผ ๋งŽ์ด ๋ถ™์ธ๋‹ค๊ณ  ๋Šฅ์‚ฌ๊ฐ€ ์•„๋‹ˆ๋ฉฐ, deferred loading์ฒ˜๋Ÿผ ์ปจํ…์ŠคํŠธ๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๋Š” ์„ค๊ณ„๊ฐ€ ์‹ค์ œ ํ’ˆ์งˆ์„ ์ขŒ์šฐํ•œ๋‹ค.
  • ๋น„๋Œ€ํ™”ํ˜• ์‹คํ–‰ ๋„๊ตฌ์™€ ์ƒํ˜ธ์ž‘์šฉํ˜• ํ•˜๋„ค์Šค๋ฅผ ๊ตฌ๋ถ„ํ•ด ์“ฐ๋ฉด, CI ์ž๋™ํ™”์™€ ๋ณตํ•ฉ ์—์ด์ „ํŠธ UI๋ฅผ ๊ฐ๊ฐ ๋” ์ ํ•ฉํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.