[๐ค] Codex ์ปจํ ์คํธ ์๋ ์์ถ ์ดํ ๋ง์ง๋ง ๋ช ๋ น์ด ๋ค์ ์คํ๋๋ ์ด์ ํด๊ฒฐ ๋ฐฉ์
โจ GPT-5.6 Sol์ ์์ฝ ใ
Codex๊ฐ ์ปจํ ์คํธ ์๋ ์์ถ ๋ค ๊ณผ๊ฑฐ์ ๋ง์ง๋ง ์ฌ์ฉ์ ๋ช ๋ น์ ์ ์ง์์ฒ๋ผ ๋ค์ ์คํํ๋ ๋ฌธ์ ๋ฅผ ๊ฒช์ผ๋ฉฐ, ํ๋ ๋ณต์ฌยทGoalยท๊ฐ์ continueยทSessionStart ํ ์ ์ฐจ๋ก๋ก ๊ฒํ ํ ๊ธฐ๋ก.
๊ธด Codex ์์ ์ด ์๋์ผ๋ก ์์ถ๋ ๋ค ์ด์ํ ์ผ์ด ๋ฐ๋ณต๋๋ค.
์์ถ ์ง์ ๊น์ง ํ๋ ์ผ์ ๊ทธ๋๋ก ์ด์ด๊ฐ๋ ๊ฒ ์๋๋ผ, ์์ถ ์์ฝ์ ๋จ์ ์๋ ๊ณผ๊ฑฐ์ ๋ง์ง๋ง ์ฌ์ฉ์ ๋ช ๋ น์ ๋ฐฉ๊ธ ์๋ก ๋ฐ์ ์ง์์ฒ๋ผ ์ทจ๊ธํ๋ค. ์ด๋ฏธ ๋๋ธ ์ํ ํ์ธ์ ๋ค์ ํ๊ณ , ๊ฐ์ ํ์ผ์ ๋ค์ ์ฝ๊ณ , ์ ์ฒด ์์ ์ ์ฒ์๋ถํฐ ์ฌ๊ตฌ์ฑํ๋ค. ๋ด๊ฐ ์ง์ ๋ณธ ํ๋ฆ์ ๋์ถฉ ์ด๋ฌ๋ค.
์ค์ ์์
์งํ
โ Context automatically compacted
โ "ํ์ฌ ๋ชฉํ๋ฅผ ๊ทธ๋๋ก ์ ์งํฉ๋๋ค"
โ ์์
ํธ๋ฆฌยท๊ท์นยท์ํ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ํ์ธ
โ ์ด๋ฏธ ๋๋ธ ์์
๊น์ง ๋ค์ ์ค๋ช
ํ๊ฑฐ๋ ์ฌ์๋
์ฒ์์๋ ์์ถ ๋๋ฌธ์ ์ผ๋ถ ๋งฅ๋ฝ์ด ์ฌ๋ผ์ง ์ ๋๋ผ๊ณ ์๊ฐํ๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ๋ฌ ๋ฒ ๊ฒช๊ณ ๋ณด๋ ๋ ๊ณจ์น ์ํ ๋ค. ์์ฝ ์ ๊ณผ๊ฑฐ ๋ช ๋ น๊ณผ ํ์ฌ ์ฌ์ฉ์ ์ ๋ ฅ์ ๊ฒฝ๊ณ๊ฐ ๋ฌด๋์ง๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ค. ์์ถ ์ ์์ ์ ์ด์ด๊ฐ๋ ๊ฒ ์๋๋ผ, ์์ถ๋ณธ์ ๊ฐ์ฅ ๊ฐํ๊ฒ ๋จ์ ๋ช ๋ น์ ์ ์ถ๋ฐ์ ์ผ๋ก ์ผ๋ ์์ด์๋ค.
๋๋ง ๊ฒช์ ์ผ๋ ์๋์๋ค. Codex Desktop์์ ์๋ ์์ถ ๋ค ๊ฐ์ ํ์ผ๊ณผ Skill์ ๊ณ์ ๋ค์ ์ฝ์ผ๋ฉฐ ์งํ ์ํฉ์ ์์๋ค๋ ๊ณต๊ฐ ์ด์๊ฐ ์์๊ณ ,1 WSL2์ Windows CLI์์๋ ํ์ผ ๋ช ๋ น๊ณผ ์์ถ์ด ๋ฐ๋ณต๋๋ ์ฌ๋ก๊ฐ ๋ณด๊ณ ๋๋ค.2 ๊ณต๊ฐ ์ฌ๋ก๊ฐ ๋ด๊ฐ ๋ณธ ๋ง์ง๋ง ๋ช ๋ น ์ฌ์คํ๊ณผ ์์ ํ ๊ฐ์ ์์ธ์ด๋ผ๊ณ ๋จ์ ํ ์๋ ์๋ค. ๋ค๋ง ์๋ ์์ถ ๋ค ์งํ์ ์๊ณ ๊ฐ์ ํ๋์ ๋ฐ๋ณตํ๋ ํ์ ์์ฒด๋ ๋งฅ์์๋ง ์๊ธฐ๋ ํน์ดํ ๋ฌธ์ ๋ผ๊ณ ๋๊ธธ ์ ์์๋ค.
ํด๊ฒฐ ๋ฐฉ์ 1: ๋ง์ง๋ง ๋ช ๋ น์ ์ ์ฒด ํ๋์ ๋ค์ ๋ฃ๊ธฐ
๊ฐ์ฅ ๋จผ์ ํ ์ผ์ ๋จ์ํ๋ค.
ํ์ฌ๊น์ง์ ์์ ๋ด์ฉ์ ์ ํ์ธํ๊ณ , ์๋ ํ๋์ ๋ฐ๋ผ ๋๊น์ง ์งํํด.
- โฆ
- โฆ
- โฆ
์์ถ ๋ค ๋ง์ง๋ง ๋ช ๋ น์ ๋ค์ ์ก์ ์คํํ๋ค๋ฉด, ๋ง์ง๋ง ๋ช ๋ น ์์ฒด๋ฅผ ์์ ํ ์ฌ๊ฐ ์ง์ ์ผ๋ก ๋ง๋ค๋ฉด ๋๋ค๊ณ ์๊ฐํ๋ค. ์ค์ ๋ก ์งง์ ์์ ์์๋ ๊ฝค ๋จนํ๋ค. ์๋ฑํ ๊ณผ๊ฑฐ ๋ช ๋ น๋ณด๋ค ํ์ฌ ํ๋์ด ์์ฝ์ ๊ฐํ๊ฒ ๋จ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค๋ฅธ ์ฌ์ฉ์๋ค๋ ๋น์ทํ ๋ฐฉํฅ์ผ๋ก ์์ถ ์์ฝ์ ์ด์ ๊ฒฐ์ ๊ณผ ๋จ์ ์์
์ ๋์ ์ํค๋ ๋ฐฉ์์ ์๋ํ๋ค. 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๋ผ๋ ๋ช
๋ น์ ๋ฃ๋ ๊ฒ ์๋๋ค.
- ์์ถ ์ด๋ฒคํธ๋ ์ ์ฌ์ฉ์ ์ ๋ ฅ์ด ์๋๋ผ๊ณ ๋ชป ๋ฐ๋๋ค.
- ํด์ด ์งํ ์ค์ด์๋ค๋ฉด ๊ฐ์ ์์ฒญ์ ๋ฏธ์๋ฃ ์ง์ ๋ง ์ด์ด๊ฐ๋ค.
- ์งํ ์ค์ธ ์์ฒญ์ด ์๋ค๋ฉด ๊ณผ๊ฑฐ ๊ธฐ๋ก์์ ์ ์ผ์ ์ถ๋ก ํ์ง ์๋๋ค.
- ๋๊ตฌ ์คํ์ด ๋๊ฒจ ๋ณด์ด๋ฉด ์ฌ์คํ ์ ์ ์ค์ ๊ฒฐ๊ณผ๋ถํฐ ํ์ธํ๋ค.
- ๊ธฐ์กด ๋ฒ์ยท๊ถํยท์น์ธยท์ค์ง ์กฐ๊ฑด์ ๊ทธ๋๋ก ๋ณด์กดํ๋ค.
๊ณต์ ๋ฌธ์๋ 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๋ฅผ ์ฌ์ฉ์ ๋ช
๋ น์ผ๋ก ๋ฐ์ด ๋ฃ์ง๋ ์๋๋ค.
์๋ ์์ถ์ ์์ ์ ์ด์ด๊ฐ๊ธฐ ์ํ ๋ด๋ถ ์ฌ๊ฑด์ด๋ค. ์ ์ฌ์ฉ์๊ฐ ๋ํ๋ ๊ณผ๊ฑฐ ๋ช ๋ น์ ๋ค์ ๋ด๋ฆฐ ์ฌ๊ฑด์ด ์๋๋ค. ๊ฒฐ๊ตญ ๋ง์์ผ ํ๋ ๊ฒ์ ๋ง๊ฐ ์์ฒด๋ณด๋ค, ๊ทธ ๋์ ๊ฐ์ ๊ฒ์ผ๋ก ์ทจ๊ธํ๋ ๋์์ด์๋ค.
์ฐธ๊ณ ์๋ฃ
-
openai/codex #35226 โ Context auto-compaction loop repeatedly rereads files, loses progress, and consumes paid Codex creditsย โฉ
-
openai/codex #8481 โ Codex agent is stuck in compaction loopย โฉ
-
openai/codex #14347 โ Extend compaction prompt to reduce loss over multiple compactionsย โฉย โฉ2
-
openai/codex #21468 โ Make /compact summaries visible and support prompt-guided compaction in Codex CLIย โฉ
-
openai/codex #16226 โ Hooks: distinguish subagent events from main agentย โฉ
-
openai/codex #28736 โ SessionStart compact hooks are deferred to later turnsย โฉ
๋๊ธ ๋จ๊ธฐ๊ธฐ