Skip to content

Latest commit

ย 

History

History
89 lines (63 loc) ยท 7.5 KB

File metadata and controls

89 lines (63 loc) ยท 7.5 KB

AgentOppa ์•„ํ‚คํ…์ฒ˜ (๊ฐœ๋… ๊ฐ€์ด๋“œ)

์ด ๋ฌธ์„œ = AgentOppa์˜ ๊ฐœ๋… ๋ชจ๋ธ(์™œยท๋ฌด์—‡). ๊ฐ™์€ ์„ค๋ช…์„ ๋‘ ๋ฒˆ ์•ˆ ํ•˜๋ ค๊ณ  ํ•œ ๋ฒˆ์— ์ ๋Š”๋‹ค. ์ •๋ฐ€ ์ŠคํŽ™์€ ์Šคํ‚ฌ๋ณ„ references/, ๋Š˜ ์ง€ํ‚ฌ ๊ทœ์น™์€ AGENTS.md, ์‹คํ–‰๋ฒ•์€ README.md. (๋ฌด์—‡์ด ์–ธ์ œ ๋๋‚˜(ํžˆ์Šคํ† ๋ฆฌ)๋Š” git ๋กœ๊ทธยท.agentoppa/hardening-log.md.)

1. ํ•œ ์ค„ โ€” AgentOppa = Maker

์•ˆ ๋Œ๋ฆฐ๋‹ค, ๋งŒ๋“ ๋‹ค. Claude CodeยทCodex ์–‘์ชฝ์—์„œ, ์–ด๋А OS์—์„œ๋“  ๋˜‘๊ฐ™์ด ๋„๋Š” ํ•˜๋„ค์Šค(harness = ์—์ด์ „ํŠธ๊ฐ€ ์ž‘์—…์„ ํ™•์‹คํžˆ ํ•ด๋‚ด๊ฒŒ ์žก์•„์ฃผ๋Š” ๊ณจ๊ฒฉ)๋ฅผ ์ง“๋Š” ๊ณต์žฅ. โ†’ ์ปดํŒŒ์ผ๋Ÿฌยทcreate-react-app ๋ฅ˜. ๋Ÿฐํƒ€์ž„ ํ”„๋ ˆ์ž„์›Œํฌ(React ๊ฐ™์€)๊ฐ€ ์•„๋‹ˆ๋‹ค.

2. ๋ฌด์—‡์„ ๋งŒ๋“œ๋‚˜ โ€” Core(์žฌ์‚ฌ์šฉ ํ”„๋ ˆ์ž„์›Œํฌ) + Project(๊ตฌํ˜„)

AgentOppa(Maker)๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ์‹ฃ๋Š”๋‹ค. ์œ ์ €๊ฐ€ Maker๋กœ ์ž๊ธฐ๋งŒ์˜ ์žฌ์‚ฌ์šฉ ํ•˜๋„ค์Šค ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค๊ณ , ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ทธ๊ฑธ ๊ฐ€๋ฆฌ์ผœ์„œ ์“ด๋‹ค. ํ•œ ์œ ์ € ํ”„๋กœ์ ํŠธ๋Š” ์ด๋ ‡๊ฒŒ ์ƒ๊ธด๋‹ค:

์œ ์ € ํ”„๋กœ์ ํŠธ/
โ”œโ”€โ”€ .agentoppa/             โ† Core Layer = ์žฌ์‚ฌ์šฉ ํ”„๋ ˆ์ž„์›Œํฌ (์œ ์ €๊ฐ€ ๋งŒ๋“ค๊ณ  ์†Œ์œ  ยท ์ด์‹ ๊ฐ€๋Šฅ)
โ”‚   โ”œโ”€โ”€ .claude-plugin/ .agents/   ยท  ๋‘ ๋งˆ์ผ“ (AgentOppa ์ž์‹ ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง• โ†’ githubยท๋ณต๋ถ™)
โ”‚   โ””โ”€โ”€ plugins/<core>/            ยท  ์›Œํฌํ”Œ๋กœ์šฐ(๋‹จ๊ณ„ ํ๋ฆ„ยท๊ฒŒ์ดํŠธ) + ๋ฒ”์šฉ ์Šคํ‚ฌยทํ›… + ์ธํ„ฐํŽ˜์ด์Šค(๋นˆ์ž๋ฆฌ) + ๊ฒ€์‚ฌ๊ธฐ
โ”œโ”€โ”€ .harness-main           โ† ํ™œ์„ฑ ํ•˜๋„ค์Šค ํ•˜๋‚˜๋ฅผ ์ง€์ • (gitignore ๋Œ€์ƒ; ํ™˜๊ฒฝ๋ณ€์ˆ˜ HARNESS_MAIN์ด ์šฐ์„ )
โ”œโ”€โ”€ .harness/<ํ•˜๋„ค์Šค>/       โ† Project Layer = ์ด ํ”„๋กœ์ ํŠธ์˜ ๊ตฌํ˜„ยท๋ฐ”์ธ๋”ฉ (ํ•˜๋„ค์Šค ์ด๋ฆ„๋ณ„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค)
โ”‚   โ”œโ”€โ”€ intent.md                  ยท  ์ด ํ”„๋กœ์ ํŠธ ์˜๋„
โ”‚   โ”œโ”€โ”€ config.yaml                ยท  core: ์–ด๋–ค Core + bindings(๋Šฅ๋ ฅโ†’๊ตฌํ˜„) + values
โ”‚   โ””โ”€โ”€ project/                   ยท  ๊ตฌํ˜„ ๋ชจ๋“ˆ(์˜ˆ: playwright) ยท ์ด ํ”„๋กœ์ ํŠธ ๋ณด์กฐ ์—์ด์ „ํŠธ
โ”œโ”€โ”€ CLAUDE.md ยท AGENTS.md   โ† Core ๊ทœ์น™ import (fallback: ํ”Œ๋Ÿฌ๊ทธ์ธ ์—†์ด ๋– ๋„ ํ–‰๋™ ๊ฐ€๋“œ ์ƒ์กด)
โ””โ”€โ”€ .claude/ .codex/        โ† ์–‡์€ ํฌ์ธํ„ฐ (`.agentoppa/`์˜ Core๋ฅผ ๊ฐ€๋ฆฌ์ผœ ์ ์žฌ ยท Core ์‚ฌ๋ณธ ์•„๋‹˜)

(Core ๋‚ด๋ถ€ยท.harness/<ํ•˜๋„ค์Šค>/ ์„ธ๋ถ€ ๋ฐฐ์น˜๋Š” agent-engineer ์Šคํ‚ฌ๊ณผ build-skills.mjs์— ๊ตฌํ˜„๋ผ ์žˆ๋‹ค.)

๋‹จ์ผ ํ™œ์„ฑ ํ•˜๋„ค์Šค: ํ•œ ํ”„๋กœ์ ํŠธ์— ์—ฌ๋Ÿฌ ํ•˜๋„ค์Šค๊ฐ€ .harness/<ํ•˜๋„ค์Šค>/๋กœ ๊ณต์กดํ•ด๋„ ๋„๋Š” ๊ฑด ๋Š˜ ํ•˜๋‚˜๋‹ค. ๋ฃจํŠธ .harness-main(gitignore ๋Œ€์ƒ ยท ์ด๋ฆ„ ํ•˜๋‚˜๋งŒ ์ ์Œ)์ด ํ™œ์„ฑ ํ•˜๋„ค์Šค๋ฅผ ์ •ํ•œ๋‹ค โ€” ํ™˜๊ฒฝ๋ณ€์ˆ˜ HARNESS_MAIN์ด ์žˆ์œผ๋ฉด ๊ทธ๊ฒŒ ์šฐ์„ . ํ›…์€ ์ž๊ธฐ๊ฐ€ ํ™œ์„ฑ์ผ ๋•Œ๋งŒ ์ž‘๋™ํ•˜๊ณ (์•„๋‹ˆ๋ฉด ์กฐ์šฉํžˆ ๋น ์ง), .harness-main์ด ์—†์œผ๋ฉด ํ•˜๋„ค์Šค ํ›…์€ ์•„๋ฌด๊ฒƒ๋„ ๋ง‰์ง€ ์•Š๋Š”๋‹ค.

์™œ ๋‘ ์ธต์ธ๊ฐ€ โ€” ์žฌ์‚ฌ์šฉ์˜ ๋น„๊ฒฐ์€ "๊ฐ’์„ ์•ˆ ๋ฐ•๋Š” ๊ฒƒ":

  • Core๋Š” ํ”„๋กœ์ ํŠธ ๊ฐ’({test_command}ยท{e2e-runner})์„ ๊ตณํžˆ์ง€ ์•Š๋Š”๋‹ค. ๋‹จ๊ณ„๊ฐ€ requires:[e2e-runner]๋กœ ๋นˆ์ž๋ฆฌ๋งŒ ์„ ์–ธํ•˜๊ณ , ๊ทธ ๊ฐ’์€ ์‹คํ–‰ ์‹œ์ ์— .harness/<ํ•˜๋„ค์Šค>/์—์„œ ์ฝ๋Š”๋‹ค(์ƒ์ฃผ ์‹คํ–‰๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํ‚ฌ์ด ์ œ ์„ค์ •ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ โ€” ยง3๊ณผ ๋ฌด๊ด€). ๊ทธ๋ž˜์„œ Core๋Š” webยทmobileยทgo ์–ด๋””๋“  ํ†ต์งธ๋กœ ์˜ฎ๊ฒจ๋„ ๋ˆ๋‹ค.
  • Project๋Š” ๊ทธ ๋นˆ์ž๋ฆฌ๋ฅผ ์ด ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„์œผ๋กœ ์ฑ„์šด๋‹ค โ€” bindings:{e2e-runner: playwright} + ๊ตฌํ˜„ ๋ชจ๋“ˆ. ํ”„๋กœ์ ํŠธ ์ฐจ์ด๋Š” ์ „๋ถ€ ์—ฌ๊ธฐ์—๋งŒ. (๋ฏธ๋ฐ”์ธ๋”ฉ ๋นˆ์ž๋ฆฌ๋Š” Core ๊ฒ€์‚ฌ๊ธฐ๊ฐ€ error๋กœ.)

๋„๊ตฌ๋Š” ์–ด๋–ป๊ฒŒ ์ ์žฌํ•˜๋‚˜ โ€” ๊ฐ€๋ฆฌํ‚ค๊ธฐ(by-reference):

  • ๋„๊ตฌ๊ฐ€ ์‹ค์ œ๋กœ ์ฝ๋Š” .claude/.codex๋Š” Core ์‚ฌ๋ณธ์ด ์•„๋‹ˆ๋ผ ์–‡์€ ํฌ์ธํ„ฐ๋‹ค. ์ ์žฌ ๋ฉ”๋‰ด: --plugin-dir ยท marketplace install ยท ์ปค๋ฐ‹ํ•œ .claude/settings.json(Claude) ยท ๋งˆ์ผ“ ์ž๋™๊ฐ์ง€(Codex). ์ •ํ™•ํ•œ ํฌ์ธํ„ฐ ๋ฐฐ์„ (ํŠนํžˆ Codex)์€ ๋นŒ๋“œ ๋‹จ๊ณ„์—์„œ ํ™•์ •. โ†’ .agentoppa/์˜ Core๋Š” ํ•œ ๋ฒŒ๋กœ ๊นจ๋—์ด ๋‚จ๊ณ (๋ณต์ œ ์—†์Œ) ์ด์‹์ด ๊ณต์งœ.
  • ์†Œ๋น„ ํ”„๋กœ์ ํŠธ ์ž๊ธ‰(์„ค์น˜๋งŒ ยท AgentOppa ์—†์ด): ๋นŒ๋“œ๋œ Core๋Š” interface.json(๋นˆ์ž๋ฆฌ ๋ช…์„ธ) + setup ์Šคํ‚ฌ์„ ํ•จ๊ป˜ ์‹ฃ๋Š”๋‹ค. ๋‚จ์ด ๊ทธ Core๋ฅผ ์„ค์น˜ํ•˜๋ฉด setup์ด .harness/<ํ•˜๋„ค์Šค>/config.yaml์„ ์Šค์Šค๋กœ ๊น”๊ณ  ๋Šฅ๋ ฅ ๋นˆ์ž๋ฆฌ๋ฅผ ๋…ธ์ถœ โ†’ ์†Œ๋น„์ž๋Š” bindings๋งŒ ์ฑ„์šด๋‹ค. AgentOppa๋Š” Core๋ฅผ ๋งŒ๋“ค ๋•Œ๋งŒ ํ•„์š”(= ์ปดํŒŒ์ผ๋Ÿฌ). Core๊ฐ€ ๋ฐ”๋€Œ์–ด ๋นˆ์ž๋ฆฌ๊ฐ€ ๋Š˜๋ฉด setup ์žฌ์‹คํ–‰์ด ๋น ์ง„ ์ž๋ฆฌ๋ฅผ ์•Œ๋ฆฐ๋‹ค(= ์ž๋™ ์ „ํŒŒ).
  • Fallback: ํ”„๋กœ์ ํŠธ์˜ CLAUDE.md/AGENTS.md๊ฐ€ Core์˜ ๊ทœ์น™์„ import โ†’ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์•ˆ ์‹ค์–ด๋„ ํ–‰๋™ ๊ฐ€๋“œ๋Š” ์‚ฐ๋‹ค(๊ทœ์น™๋งŒ; ๋‹จ๊ณ„ ์Šคํ‚ฌยท๊ฒŒ์ดํŠธ ๊ฐ™์€ ์‹คํ–‰ ๋ถ€ํ’ˆ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ ์žฌ๊ฐ€ ํ•„์š”). = ์ด repo๊ฐ€ ์ž๊ธฐํ•œํ…Œ ์“ฐ๋Š” always-on ๋ธŒ๋ฆฌ์ง€ ํŒจํ„ด(ยง7)์„ ์ƒ์„ฑ๋ฌผ์—๋„.

โš  ์ด๋ฆ„ ์ฃผ์˜: Maker(์ด repo ยท ๊ณต์žฅ โ€” ccc-* ๋ถ€ํ’ˆ์œผ๋กœ ์ง“๋Š” ๋Šฅ๋ ฅ) โ‰  Core(์œ ์ €๊ฐ€ ๋งŒ๋“  ์žฌ์‚ฌ์šฉ ํ”„๋ ˆ์ž„์›Œํฌ). AgentOppa๋Š” Core๋ฅผ ์ง“์ง€๋งŒ Core๋ฅผ ์‹ฃ์ง€๋Š” ์•Š๋Š”๋‹ค.

3. ๋Ÿฐํƒ€์ž„ ์—”์ง„ ์•ˆ ๋‘”๋‹ค (ํ•ต์‹ฌ ๋ฒ ํŒ…)

๋‹จ๊ณ„ ์‚ฌ์ด ์ƒํƒœ = ์ปค๋ฐ‹๋œ ๋ฌธ์„œ. ์ „์šฉ ์‹คํ–‰๊ธฐ๋ฅผ ์•ˆ ๋งŒ๋“ ๋‹ค. โ†’ resumeยท๋ณ‘๋ ฌยทํฌ๋กœ์Šคํˆด์ด ๊ณต์งœ. ์ƒ์„ฑ๋ฌผ์ด ๋„๊ตฌ ๋„ค์ดํ‹ฐ๋ธŒ๋ผ ๋…๋ฆฝ.

  • ํ—ˆ์šฉ: ๊ฒ€์‚ฌ ๋Ÿฌ๋„ˆ โ€” ๋Œ๊ณ  ๋๋‚˜๋Š” validate (๋ฆฐํ„ฐยทํ…Œ์ŠคํŠธ ๋ฅ˜).
  • ๊ธˆ์ง€: ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒ์ฃผํ•˜๋ฉฐ ๊ตด๋ฆฌ๋Š” ์‹คํ–‰๊ธฐ (HUD(= ๋Š˜ ๋–  ์žˆ๋Š” ์ƒํƒœํŒ)ยท์›Œ์ปคํŒฌยทauto-resume๋ฅ˜).
  • ๊ทธ๊ฒŒ ์„ ์ด๋‹ค.

4. ๋ถ€ํ’ˆ ๊ณต์žฅ โ€” ccc-* ํŒจ๋ฐ€๋ฆฌ + ์ƒ์„ฑ๊ธฐ

  • ccc-skills / memory / agents / hooks / plugin (ccc = create-claude-codex) โ€” "์—์ด์ „ํŠธ๊ฐ€ X๋ฅผ ํ™•์‹คํžˆ" ํ•œ ์ข…๋ฅ˜์”ฉ(์Šคํ‚ฌยท๋ฉ”๋ชจ๋ฆฌยท์—์ด์ „ํŠธยทํ›…ยทํŒจํ‚ค์ง•).
  • agent-engineer โ€” ๊ทธ ๋ถ€ํ’ˆ์œผ๋กœ ํ•˜๋„ค์Šค๋ฅผ ๋ฉด๋‹ดโ†’์กฐ๋ฆฝ (Maker ๋ณธ์ฒด).
  • intent-interview โ€” ์ง“๊ธฐ ์ „ ์˜๋„๋ฅผ ~95%๊นŒ์ง€ ํ™•์ •.
  • self-harden โ€” ์ •์ •์„ ์˜๊ตฌ ๊ฐ€๋“œ๋กœ (์•„๋ž˜).

5. self-harden โ€” ์“ธ์ˆ˜๋ก ๋‹จ๋‹จํ•ด์ง

์ •์ • ํ•œ ๋ฒˆ โ†’ ๊ฐ™์€ ์ข…๋ฅ˜ ์ „์ฒด๋ฅผ ๋ง‰๋Š” ์˜๊ตฌ ๊ฐ€๋“œ. ๊ฐ•ํ•˜๊ณ  ์‹ผ ๊ฒƒ๋ถ€ํ„ฐ: ๊ฒ€์‚ฌ๊ธฐ > ํ›… > ๋ฆฌ๋ทฐ์–ด > Gate > ๋ฌธ์„œ > ํ•ญ์ƒ ์ผœ์ง„ ๊ทœ์น™.

ํ•ต์‹ฌ: LLM์ด ๋˜‘๋˜‘ํ•ด์ง€๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํ™˜๊ฒฝ(repo)์ด ๋‹จ๋‹จํ•ด์ง„๋‹ค. project-committed(= repo์— ์ปค๋ฐ‹๋ผ ํ•จ๊ป˜ ๊ตด๋Ÿฌ๊ฐ)๋ผ ๋‹ค์Œ ์„ธ์…˜ยท๋„๊ตฌยท์‚ฌ๋žŒ์ด ๊ทธ ๊ฐ€๋“œ๋ฅผ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค. (์ •์ •์ด ๋‚  ๋•Œ๋งˆ๋‹ค ๋„๋Š” ๋ฃจํ”„ โ€” ์ •ํ•ด์ง„ ๋‹จ๊ณ„ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ์•„๋ฌด ๋•Œ๋‚˜ ๋ผ์–ด๋“ ๋‹ค.)

6. ์–ด๋””์— ๋ฌด์—‡์ด ์‚ฌ๋‚˜ (๋ฌธ์„œ ์ง€๋„)

๊ฐ™์€ ๊ฑธ ๋‘ ๋ฒˆ ์„ค๋ช… ์•ˆ ํ•˜๋ ค๋ฉด โ€” ์ง€์‹์€ ์ž๋ฆฌ๋งˆ๋‹ค:

์ž๋ฆฌ ๋ฌด์—‡
README.md ์ฒซ ํ™”๋ฉด(์†Œ๊ฐœยท์„ค์น˜) + ์‹คํ–‰๋ฒ•
ARCHITECTURE.md (์ด ๋ฌธ์„œ) ๊ฐœ๋… ๋ชจ๋ธ (์™œยท๋ฌด์—‡)
AGENTS.md ๋Š˜ ์ง€ํ‚ฌ ํšก๋‹จ ๋ถˆ๋ณ€์‹
์Šคํ‚ฌ๋ณ„ references/ ์ •๋ฐ€ ์ŠคํŽ™ โ€” ์Šคํ‚ค๋งˆยท๊ณ„์•ฝยท์˜ต์…˜ ์˜๋ฏธ (๊ฐ€์žฅ ๊นŠ์€ detail)
์Šคํ‚ฌ๋ณ„ examples/ ์›Œํฌ๋“œ ๊ฒฌ๋ณธ
git ๋กœ๊ทธ ยท .agentoppa/hardening-log.md ๋ฌด์—‡์ด ์–ธ์ œยท์™œ ๋๋‚˜ (ํžˆ์Šคํ† ๋ฆฌ)

3์ธต ์ ์ง„ ๋กœ๋”ฉ(ccc-skills): SKILL.md(์งง์€ ์ž…๊ตฌ) โ†’ references/(์ƒ์„ธ) โ†’ examples/(๊ฒฌ๋ณธ).

7. ์ด ์ €์žฅ์†Œ๊ฐ€ ์ž๊ธฐ ๋„๊ตฌ๋ฅผ ์ง์ ‘ ์“ด๋‹ค (์ด repo ์ž์‹ )

  • ์‹คํ–‰: claude --plugin-dir ./plugins/agentoppa ๋กœ ์ž๊ธฐ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฌผ๋ ค /self-harden ๋“ฑ ์‚ฌ์šฉ (โ†’ README "์ด ์ €์žฅ์†Œ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•˜๊ธฐ").
  • ๊ฒ€์‚ฌ: npm test (validator๋ฅผ red/green fixture์— ๋ฌผ๋ฆผ).
  • ๋ฉ”๋ชจ๋ฆฌ: AGENTS.md (= ccc-memory: project-committed > ์„ธ์…˜ ๋ฉ”๋ชจ๋ฆฌ).

๋ฌด์—‡์ด ์–ธ์ œยท์™œ ๋ฐ”๋€Œ์—ˆ๋Š”์ง€(ํžˆ์Šคํ† ๋ฆฌ)๋Š” git ๋กœ๊ทธ์™€ .agentoppa/hardening-log.md์—. ์ด ๋ฌธ์„œ๋Š” *๋ชจ๋ธ(์™œยท๋ฌด์—‡)*์ด๋‹ค.