์ด ๋ฌธ์ = AgentOppa์ ๊ฐ๋ ๋ชจ๋ธ(์ยท๋ฌด์). ๊ฐ์ ์ค๋ช ์ ๋ ๋ฒ ์ ํ๋ ค๊ณ ํ ๋ฒ์ ์ ๋๋ค. ์ ๋ฐ ์คํ์ ์คํฌ๋ณ
references/, ๋ ์งํฌ ๊ท์น์AGENTS.md, ์คํ๋ฒ์README.md. (๋ฌด์์ด ์ธ์ ๋๋(ํ์คํ ๋ฆฌ)๋ git ๋ก๊ทธยท.agentoppa/hardening-log.md.)
์ ๋๋ฆฐ๋ค, ๋ง๋ ๋ค. Claude CodeยทCodex ์์ชฝ์์, ์ด๋ OS์์๋ ๋๊ฐ์ด ๋๋ ํ๋ค์ค(harness = ์์ด์ ํธ๊ฐ ์์
์ ํ์คํ ํด๋ด๊ฒ ์ก์์ฃผ๋ ๊ณจ๊ฒฉ)๋ฅผ ์ง๋ ๊ณต์ฅ.
โ ์ปดํ์ผ๋ฌยทcreate-react-app ๋ฅ. ๋ฐํ์ ํ๋ ์์ํฌ(React ๊ฐ์)๊ฐ ์๋๋ค.
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๋ฅผ ์ฃ์ง๋ ์๋๋ค.
๋จ๊ณ ์ฌ์ด ์ํ = ์ปค๋ฐ๋ ๋ฌธ์. ์ ์ฉ ์คํ๊ธฐ๋ฅผ ์ ๋ง๋ ๋ค. โ resumeยท๋ณ๋ ฌยทํฌ๋ก์คํด์ด ๊ณต์ง. ์์ฑ๋ฌผ์ด ๋๊ตฌ ๋ค์ดํฐ๋ธ๋ผ ๋ ๋ฆฝ.
- ํ์ฉ: ๊ฒ์ฌ ๋ฌ๋ โ ๋๊ณ ๋๋๋ validate (๋ฆฐํฐยทํ ์คํธ ๋ฅ).
- ๊ธ์ง: ์ํฌํ๋ก์ฐ๋ฅผ ์์ฃผํ๋ฉฐ ๊ตด๋ฆฌ๋ ์คํ๊ธฐ (HUD(= ๋ ๋ ์๋ ์ํํ)ยท์์ปคํฌยทauto-resume๋ฅ).
- ๊ทธ๊ฒ ์ ์ด๋ค.
- ccc-skills / memory / agents / hooks / plugin (
ccc= create-claude-codex) โ "์์ด์ ํธ๊ฐ X๋ฅผ ํ์คํ" ํ ์ข ๋ฅ์ฉ(์คํฌยท๋ฉ๋ชจ๋ฆฌยท์์ด์ ํธยทํ ยทํจํค์ง). - agent-engineer โ ๊ทธ ๋ถํ์ผ๋ก ํ๋ค์ค๋ฅผ ๋ฉด๋ดโ์กฐ๋ฆฝ (Maker ๋ณธ์ฒด).
- intent-interview โ ์ง๊ธฐ ์ ์๋๋ฅผ ~95%๊น์ง ํ์ .
- self-harden โ ์ ์ ์ ์๊ตฌ ๊ฐ๋๋ก (์๋).
์ ์ ํ ๋ฒ โ ๊ฐ์ ์ข
๋ฅ ์ ์ฒด๋ฅผ ๋ง๋ ์๊ตฌ ๊ฐ๋. ๊ฐํ๊ณ ์ผ ๊ฒ๋ถํฐ:
๊ฒ์ฌ๊ธฐ > ํ
> ๋ฆฌ๋ทฐ์ด > Gate > ๋ฌธ์ > ํญ์ ์ผ์ง ๊ท์น.
ํต์ฌ: LLM์ด ๋๋ํด์ง๋ ๊ฒ ์๋๋ผ ํ๊ฒฝ(repo)์ด ๋จ๋จํด์ง๋ค. project-committed(= repo์ ์ปค๋ฐ๋ผ ํจ๊ป ๊ตด๋ฌ๊ฐ)๋ผ ๋ค์ ์ธ์ ยท๋๊ตฌยท์ฌ๋์ด ๊ทธ ๊ฐ๋๋ฅผ ๋ฌผ๋ ค๋ฐ๋๋ค. (์ ์ ์ด ๋ ๋๋ง๋ค ๋๋ ๋ฃจํ โ ์ ํด์ง ๋จ๊ณ ์์๋ฅผ ๋ฐ๋ฅด์ง ์๊ณ ์๋ฌด ๋๋ ๋ผ์ด๋ ๋ค.)
๊ฐ์ ๊ฑธ ๋ ๋ฒ ์ค๋ช ์ ํ๋ ค๋ฉด โ ์ง์์ ์๋ฆฌ๋ง๋ค:
| ์๋ฆฌ | ๋ฌด์ |
|---|---|
README.md |
์ฒซ ํ๋ฉด(์๊ฐยท์ค์น) + ์คํ๋ฒ |
ARCHITECTURE.md (์ด ๋ฌธ์) |
๊ฐ๋ ๋ชจ๋ธ (์ยท๋ฌด์) |
AGENTS.md |
๋ ์งํฌ ํก๋จ ๋ถ๋ณ์ |
์คํฌ๋ณ references/ |
์ ๋ฐ ์คํ โ ์คํค๋งยท๊ณ์ฝยท์ต์ ์๋ฏธ (๊ฐ์ฅ ๊น์ detail) |
์คํฌ๋ณ examples/ |
์ํฌ๋ ๊ฒฌ๋ณธ |
git ๋ก๊ทธ ยท .agentoppa/hardening-log.md |
๋ฌด์์ด ์ธ์ ยท์ ๋๋ (ํ์คํ ๋ฆฌ) |
3์ธต ์ ์ง ๋ก๋ฉ(ccc-skills): SKILL.md(์งง์ ์
๊ตฌ) โ references/(์์ธ) โ examples/(๊ฒฌ๋ณธ).
- ์คํ:
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์. ์ด ๋ฌธ์๋ *๋ชจ๋ธ(์ยท๋ฌด์)*์ด๋ค.