2026.08.06 (๋ชฉ)
2026.08.07 (๊ธˆ) ์ˆ˜์ •

โœจ GPT-5.6 Sol์˜ ์š”์•ฝ ใ€€

Codex๊ฐ€ ์ปจํ…์ŠคํŠธ ์ž๋™ ์••์ถ• ๋’ค ๊ณผ๊ฑฐ์˜ ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ์ƒˆ ์ง€์‹œ์ฒ˜๋Ÿผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋˜ ๋ฌธ์ œ๋ฅผ ๊ฒช์œผ๋ฉฐ, ํ”Œ๋žœ ๋ณต์‚ฌยทGoalยท๊ฐ•์ œ continueยทSessionStart ํ›…์„ ์ฐจ๋ก€๋กœ ๊ฒ€ํ† ํ•œ ๊ธฐ๋ก.

๊ธด Codex ์ž‘์—…์ด ์ž๋™์œผ๋กœ ์••์ถ•๋œ ๋’ค ์ด์ƒํ•œ ์ผ์ด ๋ฐ˜๋ณต๋๋‹ค.

์••์ถ• ์ง์ „๊นŒ์ง€ ํ•˜๋˜ ์ผ์„ ๊ทธ๋Œ€๋กœ ์ด์–ด๊ฐ€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์••์ถ• ์š”์•ฝ์— ๋‚จ์•„ ์žˆ๋˜ ๊ณผ๊ฑฐ์˜ ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ๋ฐฉ๊ธˆ ์ƒˆ๋กœ ๋ฐ›์€ ์ง€์‹œ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ–ˆ๋‹ค. ์ด๋ฏธ ๋๋‚ธ ์ƒํƒœ ํ™•์ธ์„ ๋‹ค์‹œ ํ•˜๊ณ , ๊ฐ™์€ ํŒŒ์ผ์„ ๋‹ค์‹œ ์ฝ๊ณ , ์ „์ฒด ์ž‘์—…์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์žฌ๊ตฌ์„ฑํ–ˆ๋‹ค. ๋‚ด๊ฐ€ ์ง์ ‘ ๋ณธ ํ๋ฆ„์€ ๋Œ€์ถฉ ์ด๋žฌ๋‹ค.

์‹ค์ œ ์ž‘์—… ์ง„ํ–‰
โ†’ Context automatically compacted
โ†’ "ํ˜„์žฌ ๋ชฉํ‘œ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค"
โ†’ ์ž‘์—… ํŠธ๋ฆฌยท๊ทœ์น™ยท์ƒํƒœ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ™•์ธ
โ†’ ์ด๋ฏธ ๋๋‚ธ ์ž‘์—…๊นŒ์ง€ ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ์žฌ์‹œ๋„

์ฒ˜์Œ์—๋Š” ์••์ถ• ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๋งฅ๋ฝ์ด ์‚ฌ๋ผ์ง„ ์ •๋„๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๋Ÿฌ ๋ฒˆ ๊ฒช๊ณ  ๋ณด๋‹ˆ ๋” ๊ณจ์น˜ ์•„ํŒ ๋‹ค. ์š”์•ฝ ์† ๊ณผ๊ฑฐ ๋ช…๋ น๊ณผ ํ˜„์žฌ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์˜ ๊ฒฝ๊ณ„๊ฐ€ ๋ฌด๋„ˆ์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๋‹ค. ์••์ถ• ์ „ ์ž‘์—…์„ ์ด์–ด๊ฐ€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ, ์••์ถ•๋ณธ์— ๊ฐ€์žฅ ๊ฐ•ํ•˜๊ฒŒ ๋‚จ์€ ๋ช…๋ น์„ ์ƒˆ ์ถœ๋ฐœ์ ์œผ๋กœ ์‚ผ๋Š” ์‹์ด์—ˆ๋‹ค.

๋‚˜๋งŒ ๊ฒช์€ ์ผ๋„ ์•„๋‹ˆ์—ˆ๋‹ค. Codex Desktop์—์„œ ์ž๋™ ์••์ถ• ๋’ค ๊ฐ™์€ ํŒŒ์ผ๊ณผ Skill์„ ๊ณ„์† ๋‹ค์‹œ ์ฝ์œผ๋ฉฐ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์žƒ์—ˆ๋‹ค๋Š” ๊ณต๊ฐœ ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๊ณ ,1 WSL2์™€ Windows CLI์—์„œ๋„ ํŒŒ์ผ ๋ช…๋ น๊ณผ ์••์ถ•์ด ๋ฐ˜๋ณต๋˜๋Š” ์‚ฌ๋ก€๊ฐ€ ๋ณด๊ณ ๋๋‹ค.2 ๊ณต๊ฐœ ์‚ฌ๋ก€๊ฐ€ ๋‚ด๊ฐ€ ๋ณธ ๋งˆ์ง€๋ง‰ ๋ช…๋ น ์žฌ์‹คํ–‰๊ณผ ์™„์ „ํžˆ ๊ฐ™์€ ์›์ธ์ด๋ผ๊ณ  ๋‹จ์ •ํ•  ์ˆ˜๋Š” ์—†๋‹ค. ๋‹ค๋งŒ ์ž๋™ ์••์ถ• ๋’ค ์ง„ํ–‰์„ ์žƒ๊ณ  ๊ฐ™์€ ํ–‰๋™์„ ๋ฐ˜๋ณตํ•˜๋Š” ํ˜„์ƒ ์ž์ฒด๋Š” ๋งฅ์—์„œ๋งŒ ์ƒ๊ธฐ๋Š” ํŠน์ดํ•œ ๋ฌธ์ œ๋ผ๊ณ  ๋„˜๊ธธ ์ˆ˜ ์—†์—ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 1: ๋งˆ์ง€๋ง‰ ๋ช…๋ น์— ์ „์ฒด ํ”Œ๋žœ์„ ๋‹ค์‹œ ๋„ฃ๊ธฐ

๊ฐ€์žฅ ๋จผ์ € ํ•œ ์ผ์€ ๋‹จ์ˆœํ–ˆ๋‹ค.

ํ˜„์žฌ๊นŒ์ง€์˜ ์ž‘์—… ๋‚ด์šฉ์„ ์ž˜ ํ™•์ธํ•˜๊ณ , ์•„๋ž˜ ํ”Œ๋žœ์— ๋”ฐ๋ผ ๋๊นŒ์ง€ ์ง„ํ–‰ํ•ด.

  1. โ€ฆ
  2. โ€ฆ
  3. โ€ฆ

์••์ถ• ๋’ค ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ๋‹ค์‹œ ์žก์•„ ์‹คํ–‰ํ•œ๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ๋ช…๋ น ์ž์ฒด๋ฅผ ์•ˆ์ „ํ•œ ์žฌ๊ฐœ ์ง€์ ์œผ๋กœ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ์งง์€ ์ž‘์—…์—์„œ๋Š” ๊ฝค ๋จนํ˜”๋‹ค. ์—‰๋šฑํ•œ ๊ณผ๊ฑฐ ๋ช…๋ น๋ณด๋‹ค ํ˜„์žฌ ํ”Œ๋žœ์ด ์š”์•ฝ์— ๊ฐ•ํ•˜๊ฒŒ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๋„ ๋น„์Šทํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์••์ถ• ์š”์•ฝ์— ์ด์ „ ๊ฒฐ์ •๊ณผ ๋‚จ์€ ์ž‘์—…์„ ๋ˆ„์ ์‹œํ‚ค๋Š” ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ๋‹ค. experimental_compact_prompt_file๋กœ ์ด์ „ ์••์ถ•์˜ ํ•ต์‹ฌ ํŒ๋‹จ์„ ๊ณ„์† ๋ณด์กดํ•˜๊ฒŒ ํ–ˆ๋”๋‹ˆ ๋„ค ๋ฒˆ ์ด์ƒ์˜ ์••์ถ• ๋’ค์—๋„ ํฐ ํ๋ฆ„์ด ๋‚จ์•˜๋‹ค๋Š” ์‚ฌ๋ก€๊ฐ€ ์žˆ๋‹ค.3

ํ•˜์ง€๋งŒ ์ด๊ฑด ๊ทผ๋ณธ ํ•ด๊ฒฐ์ด ์•„๋‹ˆ์—ˆ๋‹ค.

  • ๋งค๋ฒˆ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์— ๊ธด ํ”Œ๋žœ์„ ๋ณต์‚ฌํ•ด์•ผ ํ–ˆ๋‹ค.
  • ํ”Œ๋žœ์ด ์ค‘๊ฐ„์— ๋ฐ”๋€Œ๋ฉด ๋งˆ์ง€๋ง‰ ๋ช…๋ น๋„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋‹ค.
  • ์••์ถ• ์š”์•ฝ์ด ํ”Œ๋žœ์€ ๋ณด์กดํ•ด๋„, ๋ฐฉ๊ธˆ ๋๋‚ธ ๋„๊ตฌ ์‹คํ–‰๊ณผ ์•„์ง ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ์ž‘์—…์„ ์ •ํ™•ํžˆ ๊ตฌ๋ถ„ํ•œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์—ˆ๋‹ค.
  • /compact [๋ฉ”์‹œ์ง€]๋กœ ์š”์•ฝ ๋ฐฉํ–ฅ์„ ์ง์ ‘ ์ฃผ๋Š” ๋ฐฉ์‹๋„ ํ˜„์žฌ Codex CLI์—์„œ๋Š” ์ผ๋ฐ˜ ๋ฉ”์‹œ์ง€์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค.4

๊ฒฐ๊ตญ ์‚ฌ๋žŒ์ด ์••์ถ• ์‹œ์ ์„ ๊ณ„์† ์˜์‹ํ•˜๋ฉด์„œ prompt๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ๊ธฐ๋ณธ ์ƒํƒœ๋ณด๋‹ค ๋‚ซ๊ธฐ๋Š” ํ•œ๋ฐ, ๋ชจ๋“  ์ž‘์—… ๋์— ๊ธด ์ธ๊ณ„์„œ๋ฅผ ๋ถ™์ด๋Š” ๊ฒƒ๋„ ์ •์ƒ์ ์ธ ์‚ฌ์šฉ๊ฐ์€ ์•„๋‹ˆ์—ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 2: ๋ชจ๋“  ์ž‘์—…์— Goal์„ ์„ธ์šฐ๊ธฐ

๊ทธ๋‹ค์Œ์—๋Š” Goal์„ ๋ฐ˜๋“œ์‹œ ๋งŒ๋“ค๊ณ , ์••์ถ• ๋’ค์—๋Š” ๋งˆ์ง€๋ง‰ ๋ช…๋ น๋ณด๋‹ค Goal์„ ์šฐ์„ ํ•ด ์žฌ๊ฐœํ•˜๊ฒŒ ํ•˜๋ฉด ์–ด๋–จ๊นŒ ์ƒ๊ฐํ–ˆ๋‹ค.

๊ธด ์ž‘์—…์—๋Š” ๋ถ„๋ช… ์žฅ์ ์ด ์žˆ๋‹ค. ์ž‘์—… ๋ชฉ์ ๊ณผ ์™„๋ฃŒ ์กฐ๊ฑด์ด ๋Œ€ํ™” ํ•œ๋‘ ๋ฌธ์žฅ๋ณด๋‹ค ์˜ค๋ž˜ ๋‚จ๊ณ , ์ž๋™ continuation๋„ Goal์„ ๊ธฐ์ค€์œผ๋กœ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ด๊ฑธ ์••์ถ• ๋ฒ„๊ทธ์˜ ํ•„์ˆ˜ ์šฐํšŒ์ฑ…์œผ๋กœ ์“ฐ๋Š” ์ˆœ๊ฐ„์ด์—ˆ๋‹ค.

๋ณ„๊ฒƒ ์•„๋‹Œ ์ž‘์—…์—๋„ Goal์„ ์„ธ์›Œ์•ผ ํ–ˆ๋‹ค. Goal์ด ์—†์œผ๋ฉด ์žฅ์• ๊ฐ€ ๋‚˜๊ณ , ์žˆ์œผ๋ฉด ํ•„์š” ์ด์ƒ์œผ๋กœ ๊ณ„์† ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋๋‹ค. ์˜ˆ์ „์— Goal ๋•Œ๋ฌธ์— ์‚ฌ์†Œํ•œ ์ž‘์—…๊นŒ์ง€ ํ† ํฐ์„ ์“ฐ๋Š” ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์ž‘์—…์šฉ Skill์„ ๋”ฐ๋กœ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ์••์ถ• ํ•˜๋‚˜ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋ชจ๋“  ์ž‘์—…์„ Goal๋กœ ๊ฐ์‹ธ๋Š” ๊ผด์ด์—ˆ๋‹ค.

์ด์ฏค ๋˜๋‹ˆ ์ •๋ง โ€œ์ด๋Ÿฌ๋ฉด ๊ทธ๋ƒฅ ์ฐจ๋ผ๋ฆฌ ์ˆœ์ • ์ƒํƒœ๊ฐ€ ๋‚˜์€ ๊ฒƒ ๊ฐ™์€๋ฐโ€๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

๋” ์ค‘์š”ํ•œ ๋ฌธ์ œ๋„ ์žˆ๋‹ค. Goal์€ ๋ฌด์—‡์„ ๋๋‚ด์•ผ ํ•˜๋Š”๊ฐ€๋ฅผ ๋ณด์กดํ•˜๋Š” ์žฅ์น˜์ด์ง€, ์••์ถ• ์ด๋ฒคํŠธ๊ฐ€ ์ƒˆ ์‚ฌ์šฉ์ž ๋ช…๋ น์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ์žฅ์น˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ฐพ์€ ๊ณต๊ฐœ ์ž๋ฃŒ์—์„œ๋„ Goal์„ ์ž๋™ ์••์ถ• ๋ณต๊ตฌ์˜ ๊ณต์‹ ์ˆ˜๋‹จ์œผ๋กœ ์„ค๋ช…ํ•œ ๊ทผ๊ฑฐ๋Š” ์—†์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ Goal์€ ์›๋ž˜ ์šฉ๋„๋กœ๋งŒ ๋‚จ๊ธฐ๊ธฐ๋กœ ํ–ˆ๋‹ค.

  • ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์ž๋™์œผ๋กœ ๊ณ„์†ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์ฒด์ ์ธ ์ž‘์—…์—๋Š” ์‚ฌ์šฉํ•œ๋‹ค.
  • ์งง์€ ์งˆ๋ฌธ, ์กฐ์‚ฌ, ๊ธ€ ์ˆ˜์ •๊นŒ์ง€ ์˜๋ฌด์ ์œผ๋กœ Goal๋กœ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.
  • ์••์ถ• ํ›„ ๊ณผ๊ฑฐ ๋ช…๋ น ์žฌ์‹คํ–‰ ๋ฌธ์ œ๋Š” Goal๊ณผ ๋ณ„๋„ ๊ณ„์ธต์—์„œ ๋ง‰๋Š”๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 3: ์••์ถ• prompt๋ฅผ ์ง์ ‘ ๋ฐ”๊พธ๊ธฐ

์••์ถ• ์š”์•ฝ์˜ ํ’ˆ์งˆ ์ž์ฒด๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ์•ž์„œ ๋ณธ ๊ณต๊ฐœ ์‚ฌ๋ก€์ฒ˜๋Ÿผ ์ด์ „ ์••์ถ•์˜ ๊ฒฐ์ •๊ณผ ๊ฒฐ๊ณผ๋ฅผ Historical Context์— ๋ˆ„์ ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ์••์ถ•๋ผ๋„ ํฐ ๋ฐฉํ–ฅ์„ ๋œ ์žƒ๋Š”๋‹ค.3

์ด ๋ฐฉ๋ฒ•์€ ์œ ์šฉํ•˜๋‹ค. ํŠนํžˆ ๊ธด ์„ธ์…˜์—์„œ ์•„๋ž˜ ์ •๋ณด๊ฐ€ ๊ณ„์† ์‚ฌ๋ผ์ง„๋‹ค๋ฉด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค.

  • ์ด๋ฏธ ๋ฒ„๋ฆฐ ์ ‘๊ทผ๊ณผ ๊ทธ ์ด์œ 
  • ํ˜„์žฌ๊นŒ์ง€ ํ™•์ •๋œ ๊ฒฐ์ •
  • ๋๋‚ธ ์ž‘์—…๊ณผ ๋‚จ์€ ์ž‘์—…
  • ๋‹ค์Œ์— ํ™•์ธํ•ด์•ผ ํ•  ๋‹จ์ผ ์ง€์ 

๋‹ค๋งŒ ์ด๊ฒƒ๋„ ์ด๋ฒˆ ๋ฌธ์ œ์™€๋Š” ์ธต์œ„๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์š”์•ฝ ํ’ˆ์งˆ์„ ๋†’์ด๋Š” ๊ฒƒ๊ณผ ์š”์•ฝ ์† ๊ณผ๊ฑฐ ์‚ฌ์šฉ์ž ๋ช…๋ น์„ ์ƒˆ ์ž…๋ ฅ์œผ๋กœ ์˜คํ•ดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์€ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ข‹์€ ์š”์•ฝ์„ ๋งŒ๋“ค์–ด๋„ ๋ชจ๋ธ์ด ๊ทธ ์•ˆ์˜ ๋ช…๋ น์„ ํ˜„์žฌ ์ง€์‹œ์ฒ˜๋Ÿผ ์ฝ์œผ๋ฉด ๋‹ค์‹œ ๊ผฌ์ผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด ๋ฐฉ์‹์€ ๋ณด์กฐ์ฑ…์œผ๋กœ๋Š” ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งˆ์ง€๋ง‰ ๋ช…๋ น ์žฌ์‹คํ–‰ ๋ฐฉ์ง€์ฑ… ํ•˜๋‚˜๋กœ ๋ณด๊ธฐ๋Š” ์–ด๋ ค์› ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 4: Stop ํ›…์œผ๋กœ continue๋ฅผ ๊ฐ•์ œํ•˜๊ธฐ

ํ•œ๋•Œ๋Š” ์•„์˜ˆ ํ›…์œผ๋กœ continue๋ฅผ ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ์ž ๋ช…๋ น์ฒ˜๋Ÿผ ๋„ฃ์ž๋Š” ์ƒ๊ฐ๋„ ํ–ˆ๋‹ค.

๊ฒ‰์œผ๋กœ๋Š” ์ •ํ™•ํ•ด ๋ณด์ธ๋‹ค. ์••์ถ• ๋’ค ๋ฌด์กฐ๊ฑด continue๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ๊ณผ๊ฑฐ ๋ช…๋ น ๋Œ€์‹  ์ง„ํ–‰ ์ค‘์ธ ์ผ์„ ์ด์–ด๊ฐˆ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ณต์‹ ํ›… ๋™์ž‘์„ ํ™•์ธํ•˜๊ณ  ๋ฐ”๋กœ ๋ฒ„๋ ธ๋‹ค.

Codex์˜ Stop ํ›…์—์„œ decision: "block"์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ํ›…์˜ reason์„ ์ƒˆ ์‚ฌ์šฉ์ž prompt์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” continuation prompt๋กœ ๋งŒ๋“ ๋‹ค.5 ๋‚ด๊ฐ€ ๋ง‰๊ณ  ์‹ถ์—ˆ๋˜ ๊ฒƒ์ด ๋ฐ”๋กœ โ€œ์‹ค์ œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋‚ด์ง€ ์•Š์€ ๋ฌธ์žฅ์„ ์ƒˆ ์‚ฌ์šฉ์ž ๋ช…๋ น์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒโ€์ธ๋ฐ, ์ด ๋ฐฉ๋ฒ•์€ ๊ทธ ํ˜„์ƒ์„ ์˜๋„์ ์œผ๋กœ ํ•˜๋‚˜ ๋” ๋งŒ๋“œ๋Š” ์…ˆ์ด๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ continue๋Š” ๋„ˆ๋ฌด ๋ชจํ˜ธํ•˜๋‹ค.

  • ์••์ถ•์ด ํ„ด ์ค‘๊ฐ„์— ์ผ์–ด๋‚ฌ๋‹ค๋ฉด ๋ฌด์—‡์„ ์ด์–ด๊ฐˆ ๊ฒƒ์ธ๊ฐ€?
  • ์ง์ „ ๋„๊ตฌ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋Š”์ง€ ์‹คํŒจํ–ˆ๋Š”์ง€ ๋ชจ๋ฅผ ๋•Œ ์žฌ์‹คํ–‰ํ•  ๊ฒƒ์ธ๊ฐ€?
  • ์‚ฌ์šฉ์ž์˜ ์Šน์ธ์ด๋‚˜ ์™ธ๋ถ€ ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๊ธฐ๋‹ค๋ฆฌ๋˜ ์ค‘์ด์—ˆ๋‹ค๋ฉด ๊ณ„์†ํ•ด๋„ ๋˜๋Š”๊ฐ€?
  • ์ด๋ฏธ ํ„ด์ด ๋๋‚œ ๋’ค ์ˆ˜๋™ ์••์ถ•ํ–ˆ๋‹ค๋ฉด ๋ฌด์—‡์„ ์‹œ์ž‘ํ•  ๊ฒƒ์ธ๊ฐ€?

Goal์ด ์žˆ๋“  ์—†๋“  ๋ฌด์กฐ๊ฑด ๊ณ„์†ํ•˜๋ผ๋Š” ์ƒˆ ์‚ฌ์šฉ์ž prompt๋Š” ์ค‘๋ณต ์‹คํ–‰๊ณผ ๋ฌดํ•œ continuation์„ ๋งŒ๋“ค ๊ฐ€๋Šฅ์„ฑ์ด ์ปธ๋‹ค. ์ด ๋ฌธ์ œ์—๋Š” Stop ํ›…์ด ์•„๋‹ˆ๋ผ, ์••์ถ• ์งํ›„ ๋ชจ๋ธ์ด ์‚ฌ๊ฑด์˜ ์˜๋ฏธ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์ปจํ…์ŠคํŠธ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ์•ˆ 5: SessionStart(source=compact)์— ๋ฌด์ƒํƒœ ์ปจํ…์ŠคํŠธ ๋„ฃ๊ธฐ

๋‹ค์Œ ๋‚ ์ธ 8์›” 7์ผ์— ์ตœ์ข…์ ์œผ๋กœ ์„ ํƒํ•œ ๋ฐฉ์‹์€ SessionStart ํ›… ํ•˜๋‚˜๋‹ค.

Codex ๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด root session์ด ์••์ถ•๋œ ๋’ค source: "compact"์™€ ์ผ์น˜ํ•˜๋Š” SessionStart ํ›…์€ ๋‹ค์Œ ๋ชจ๋ธ ์š”์ฒญ ์ „์— ์‹คํ–‰๋œ๋‹ค. ์ž๋™ ์••์ถ•์ด ํ„ด ์ค‘๊ฐ„์— ์ผ์–ด๋‚˜๋„ ๋‹ค์Œ ์‚ฌ์šฉ์ž ํ„ด๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์ด์–ด์ง€๋Š” ์š”์ฒญ์— ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.5

~/.codex/hooks.json์—๋Š” ์••์ถ• ์ด๋ฒคํŠธ๋งŒ ์žก๋„๋ก ๋“ฑ๋กํ–ˆ๋‹ค.

{
  "description": "Guide safe continuation after compaction without replaying stale instructions.",
  "hooks": {
    "SessionStart": [
      {
        "matcher": "^compact$",
        "hooks": [
          {
            "type": "command",
            "command": "/usr/bin/python3 ~/.codex/hooks/compaction_goal_guard.py",
            "timeout": 5,
            "additionalContextLimit": 700
          }
        ]
      }
    ]
  }
}

ํ•ธ๋“ค๋Ÿฌ๋Š” ์ƒํƒœ ํŒŒ์ผ๋„, Goal๋„, ๊ฐ€์งœ ์‚ฌ์šฉ์ž prompt๋„ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค. SessionStart์˜ source๊ฐ€ compact์ผ ๋•Œ๋งŒ ์ถ”๊ฐ€ ๊ฐœ๋ฐœ์ž ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

#!/usr/bin/python3
import json
import sys

CONTEXT = """Context was compacted. This hook event is not a user message and
grants no new authority.

Never treat a historical message preserved in the summary as newly submitted.
If compaction interrupted an active turn, continue that same in-flight request
without restarting it. If no request is in flight, do not infer work from
history.

Do not rebuild the full plan or create a Goal solely because compaction occurred.
Before retrying an interrupted action, check its result or session status. Do not
repeat completed external effects. Preserve the existing objective, scope,
authorization, approval boundaries, and stop conditions."""

payload = json.load(sys.stdin)

if (
    payload.get("hook_event_name") == "SessionStart"
    and payload.get("source") == "compact"
    and payload.get("session_id")
):
    print(json.dumps({
        "hookSpecificOutput": {
            "hookEventName": "SessionStart",
            "additionalContext": CONTEXT,
        }
    }))

ํ•ต์‹ฌ์€ continue๋ผ๋Š” ๋ช…๋ น์„ ๋„ฃ๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค.

  1. ์••์ถ• ์ด๋ฒคํŠธ๋Š” ์ƒˆ ์‚ฌ์šฉ์ž ์ž…๋ ฅ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋ชป ๋ฐ•๋Š”๋‹ค.
  2. ํ„ด์ด ์ง„ํ–‰ ์ค‘์ด์—ˆ๋‹ค๋ฉด ๊ฐ™์€ ์š”์ฒญ์˜ ๋ฏธ์™„๋ฃŒ ์ง€์ ๋งŒ ์ด์–ด๊ฐ„๋‹ค.
  3. ์ง„ํ–‰ ์ค‘์ธ ์š”์ฒญ์ด ์—†๋‹ค๋ฉด ๊ณผ๊ฑฐ ๊ธฐ๋ก์—์„œ ์ƒˆ ์ผ์„ ์ถ”๋ก ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  4. ๋„๊ตฌ ์‹คํ–‰์ด ๋Š๊ฒจ ๋ณด์ด๋ฉด ์žฌ์‹คํ–‰ ์ „์— ์‹ค์ œ ๊ฒฐ๊ณผ๋ถ€ํ„ฐ ํ™•์ธํ•œ๋‹ค.
  5. ๊ธฐ์กด ๋ฒ”์œ„ยท๊ถŒํ•œยท์Šน์ธยท์ค‘์ง€ ์กฐ๊ฑด์„ ๊ทธ๋Œ€๋กœ ๋ณด์กดํ•œ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ๋Š” non-managed ํ›…์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ๊ฒ€ํ† ํ•˜๊ณ  ์‹ ๋ขฐํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋ช…์‹œํ•œ๋‹ค.5 ์„ค์ •์„ ์ €์žฅํ•œ ๋’ค /hooks์—์„œ handler๋ฅผ ํ™•์ธํ•˜๊ณ  trustํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฏธ ์—ด๋ ค ์žˆ๋˜ task๋Š” ์˜ˆ์ „ ํ›… ๋ชฉ๋ก์„ ๋“ค๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ์–ด์„œ ๋‹ค์‹œ ์—ฌ๋Š” ํŽธ์ด ์•ˆ์ „ํ•˜๋‹ค.

8์›” 7์ผ ํ›„์† ๊ฒ€์ฆ

๊ธ€์˜ ๋‚ ์งœ๋Š” ์ด ๋ฌธ์ œ๋ฅผ ๋ถ™์žก๊ณ  ํ•ด๊ฒฐ์ฑ…์„ ๊ณ ๋ฅด๊ธฐ ์‹œ์ž‘ํ•œ 8์›” 6์ผ๋กœ ๊ทธ๋Œ€๋กœ ๋’€๋‹ค. ์ตœ์ข… ํ›…์„ ํ™•์ •ํ•˜๊ณ  ์‹ค์ œ ์ž๋™ ์••์ถ•๊นŒ์ง€ ํ™•์ธํ•œ ๊ฒƒ์€ ๋‹ค์Œ ๋‚ ์ด์—ˆ๋‹ค.

์ด์ „์—๋Š” PostCompact์—์„œ marker๋ฅผ ๋‚จ๊ธฐ๊ณ  ๋‹ค์Œ SessionStart๊ฐ€ ์ฝ๋Š” 2๋‹จ๊ณ„ ๊ตฌ์กฐ๋„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ marker๊ฐ€ ๋‚จ์•„ ์ž˜๋ชป๋œ ํ„ด์—์„œ ๋ณต๊ตฌ๋  ๊ฐ€๋Šฅ์„ฑ, root์™€ subagent ์ด๋ฒคํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ค์šด ํ›… ์ž…๋ ฅ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ์—†์•ด๋‹ค. ์‹ค์ œ๋กœ main agent์™€ subagent ํ›… ์ž…๋ ฅ์„ ๊ตฌ๋ถ„ํ•  ๊ณตํ†ต field๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ณต๊ฐœ ์ด์Šˆ๋„ ์—ด๋ ค ์žˆ๋‹ค.6

ํ˜„์žฌ ๋ฐฉ์‹์€ marker๊ฐ€ ์—†๋Š” ๋‹จ์ผ handler๋‹ค. 50๊ฐœ ๋™์‹œ ํ˜ธ์ถœ์—์„œ๋„ ๋ณ„๋„ ์ƒํƒœ ํŒŒ์ผ์„ ๋งŒ๋“ค์ง€ ์•Š์•˜๊ณ , ์ž๋™ ์••์ถ• ์ด๋ฒคํŠธ ๋’ค ์•ฝ 0.25์ดˆ ๋งŒ์— ๊ฐœ๋ฐœ์ž ์ปจํ…์ŠคํŠธ๊ฐ€ ๊ฐ™์€ continuation์— ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ํ˜„์žฌ Runtime์—์„œ ํ™•์ธํ–ˆ๋‹ค.

์ด ํ™•์ธ์ด ์ค‘์š”ํ–ˆ๋˜ ์ด์œ ๊ฐ€ ์žˆ๋‹ค. ๊ณผ๊ฑฐ์—๋Š” SessionStart(compact)๊ฐ€ ์••์ถ• ์งํ›„๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹ค์Œ ์‚ฌ์šฉ์ž ํ„ด์— ๋ชฐ๋ ค ๋“ค์–ด๊ฐ€๋Š” ๋ฒ„๊ทธ๊ฐ€ ์‹ค์ œ๋กœ ๋ณด๊ณ ๋๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.7 ํ•ด๋‹น ์ด์Šˆ๋Š” ์ง€๊ธˆ์€ ๋‹ซํ˜”๊ณ , ํ˜„์žฌ ๊ณต์‹ ๋ฌธ์„œ๋„ mid-turn ์ž๋™ ์••์ถ• ์งํ›„ ์ฆ‰์‹œ ์ „๋‹ฌ๋œ๋‹ค๊ณ  ์„ค๋ช…ํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ์ด๋Ÿฐ lifecycle workaround๋Š” ๋ฌธ์„œ๋งŒ ๋ฏฟ์ง€ ๋ง๊ณ  ์ž๊ธฐ Runtime์—์„œ ํ•œ ๋ฒˆ ์‹ค์ œ ์••์ถ•์œผ๋กœ ํ™•์ธํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค.

์ง€๊ธˆ์˜ ๊ฒฐ๋ก 

์ˆœ์ • ์ƒํƒœ๊ฐ€ ๋” ๋‚˜์€๊ฐ€ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ, ํ˜„์žฌ ๊ฒฐ๋ก ์€ ๋ชจ๋“  ์ž‘์—…์„ Goal๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ์ด ํ›…์ด ๋‚ซ๋‹ค๋‹ค.

Goal๊ณผ ํ”Œ๋žœ์€ ์ž‘์—… ๋‚ด์šฉ์„ ๋ณด์กดํ•œ๋‹ค. ์ด ํ›…์€ ์••์ถ• ์‚ฌ๊ฑด์˜ ์˜๋ฏธ๋ฅผ ๋ฐ”๋กœ์žก๋Š”๋‹ค. ์—ญํ• ์ด ๋‹ค๋ฅด๋‹ค.

  • ๊ธด ์ž‘์—…์˜ ๋ชฉ์ ๊ณผ ์™„๋ฃŒ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋ฉด Goal์ด๋‚˜ durable plan์„ ์“ด๋‹ค.
  • ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ์••์ถ•๋˜๋ฉฐ ๊ฒฐ์ •์ด ์‚ฌ๋ผ์ง€๋ฉด custom compact prompt๋ฅผ ๋ณด์กฐ๋กœ ์“ด๋‹ค.
  • ๊ณผ๊ฑฐ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์ƒˆ ์ง€์‹œ์ฒ˜๋Ÿผ ์‹คํ–‰ํ•˜๋Š” ๋ฌธ์ œ๋Š” SessionStart(source=compact)์—์„œ ๋ง‰๋Š”๋‹ค.
  • ์•„๋ฌด๊ฒƒ๋„ ์ง„ํ–‰ ์ค‘์ด ์•„๋‹ˆ๋ฉด ํ›…๋„ ์•„๋ฌด ์ž‘์—…์„ ์‹œ์ž‘์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

๋ฌผ๋ก  ์™„๋ฒฝํ•œ ํ•ด๊ฒฐ์€ ์•„๋‹ˆ๋‹ค. ์ด๋ฏธ ์†์‹ค๋œ ์••์ถ• ์š”์•ฝ์„ ๋ณต์›ํ•  ์ˆ˜๋Š” ์—†๊ณ , ๋งŒ๋ฃŒ๋œ terminal session์ด๋‚˜ ์ค‘๊ฐ„์— ๋Š๊ธด ์™ธ๋ถ€ ์š”์ฒญ์„ ๋˜์‚ด๋ฆด ์ˆ˜๋„ ์—†๋‹ค. ๊ฐœ๋ฐœ์ž ์ปจํ…์ŠคํŠธ๋Š” ๋ชจ๋ธ ํ–‰๋™์„ ๊ฐ•ํ•˜๊ฒŒ ์œ ๋„ํ•˜์ง€๋งŒ ์ˆ˜ํ•™์ ์ธ ๋ณด์žฅ๋„ ์•„๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ์ ์–ด๋„ ์ด์ œ ์••์ถ• ๋ฒ„๊ทธ ํ•˜๋‚˜ ๋•Œ๋ฌธ์— ๋ชจ๋“  ๋Œ€ํ™”์— Goal์„ ๋งŒ๋“ค๊ฑฐ๋‚˜, ๋งˆ์ง€๋ง‰ ๋ช…๋ น์— ์ „์ฒด ํ”Œ๋žœ์„ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜, ๊ฐ€์งœ continue๋ฅผ ์‚ฌ์šฉ์ž ๋ช…๋ น์œผ๋กœ ๋ฐ€์–ด ๋„ฃ์ง€๋Š” ์•Š๋Š”๋‹ค.

์ž๋™ ์••์ถ•์€ ์ž‘์—…์„ ์ด์–ด๊ฐ€๊ธฐ ์œ„ํ•œ ๋‚ด๋ถ€ ์‚ฌ๊ฑด์ด๋‹ค. ์ƒˆ ์‚ฌ์šฉ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜ ๊ณผ๊ฑฐ ๋ช…๋ น์„ ๋‹ค์‹œ ๋‚ด๋ฆฐ ์‚ฌ๊ฑด์ด ์•„๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋ง‰์•„์•ผ ํ–ˆ๋˜ ๊ฒƒ์€ ๋ง๊ฐ ์ž์ฒด๋ณด๋‹ค, ๊ทธ ๋‘˜์„ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๋™์ž‘์ด์—ˆ๋‹ค.

์ฐธ๊ณ  ์ž๋ฃŒ

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ