| name | goalgoal |
| description | This skill should be used when the user wants to turn a vague one-line idea into a clear, verifiable goal that Claude Code's `/goal` autonomous loop (or /loop, ouroboros seed) can run without spinning or converging wrong. Triggers โ "๋ชฉํ ์ก์์ค", "goal ์ ์ํด์ค", "/goal ๋๋ฆด ๋ชฉํ ๋ง๋ค์ด์ค", "Loop์ ๋ฃ์ ๋ชฉํ ๋ง๋ค์ด์ค", "์์ด๋์ด ๊ตฌ์ฒดํํด์ค", "goal.json ๋ง๋ค์ด์ค", "๋ญ ๋ง๋ค์ง ์ ๋ฆฌํด์ค", "goalgoal", "make a goal for the loop", "define the objective", "turn this idea into a goal". An ambiguous goal makes a repeating loop waste iterations, so this skill scores the idea, infers what it can, asks only the unanswerable axes (max 4 choices each, typically 4โ8 questions), eliminates ambiguity, and emits a /goal-ready goal.json โ whose `goal_command` completion condition is handed off as a copy-paste `/goal <goal_command>` block. Make sure to use this whenever the user has a fuzzy idea they want to feed into /goal or any autonomous loop, even if they don't name the skill. |
goalgoal
๋ง์ฐํ ํ ๋ฌธ์ฅ ์์ด๋์ด๋ฅผ ์ธํฐ๋ทฐ๋ก ์บ๋ฌผ์ด, Claude Code /goal(์์จ ๋ฐ๋ณต ๋ฃจํ)์ด ํ๋์ง ์๋ ๊ฒ์ฆ ๊ฐ๋ฅํ goal.json ๋ชฉํ๋ก ์ฆ๋ฅํ๋ค. ์ฃผ ์ฐ์ถ๋ฌผ์ goal.json ์์ goal_command โ ์ฌ์ฉ์๊ฐ /goal <goal_command> ํํ๋ก ๋ณต๋ถํด ๊ทธ๋๋ก ํฌ์
ํ๋ค.
์ด ์คํฌ์ ์ฌ์ฉ์๋ ์ฝ๋ฉ์ ๋ชฐ๋ผ๋ ๋๋ ๋ฐ์ด๋ธ์ฝ๋๋ค. ์ ๋ฌธ ์ฉ์ด๋ ํญ์ ์ฌ์ด ๋ง๋ก ํ์ด ์ค๋ช
ํ๋ค.
์ ํ์ํ๊ฐ
Claude Code /goal์ ๋งค ํด ๋์ ๋ณ๋ ํ๊ฐ์(Haiku ๊ณ์ด)๊ฐ ์๋ฃ์กฐ๊ฑด ์ถฉ์กฑ ์ฌ๋ถ๋ฅผ yes/no๋ก ํ์ ํ๋ ์์จ ๋ฃจํ๋ค. ๋ชฉํ๊ฐ ๋ชจํธํ๋ฉด ๋ฌดํ ๋ฐ๋ณตํ๊ฑฐ๋ ์๋ชป๋ ๋ฐฉํฅ์ผ๋ก ์๋ ดํ๋ค. "์ผํ๋ชฐ ๋ง๋ค์ด์ค" ๊ฐ์ ํ ์ค์ ์ฑ๊ณต ๊ธฐ์ค๋, ์๋ฃ ์ ์๋, ๋ฒ์๋ ์์ด ๊ธฐ๊ณ๊ฐ ๋ฐ๋ณต ์คํํ๊ธฐ์ ๋ฏธ์์ฑ ์
๋ ฅ์ด๋ค. goalgoal์ ๊ทธ ๊ฐ๊ทน โ "์ฌ๋์ ๋ชจํธํ ์๋"์ "/goal์ด ๊ทธ๋๋ก ๋๋ฆด ์ ์๋ ๋ชฉํ" โ ๋ฅผ ์ธํฐ๋ทฐ๋ก ๋ฉ์ด๋ค. /goal์ ๊ณ์ฝ์ references/loop-formats.md ์ฐธ์กฐ(์ถ์ ๊ธ์ง).
Iron Law
์ธก์ ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ์ข
๋ฃ ์กฐ๊ฑด์ด ์๋ ๋ชฉํ๋ ์ ๋ status: "ready"๋ก ๋ด๋ณด๋ด์ง ์๋๋ค.
๋ชจํธํ ๋ชฉํ๋ฅผ ํต๊ณผ์ํค๋ฉด /goal์ด ๋ฌดํ ๋ฐ๋ณตํ๊ฑฐ๋ ์๋ฑํ ๊ฒฐ๊ณผ๋ก ์๋ ดํ๊ณ , ๊ทธ ์ฑ
์์ด ์ฌ์ฉ์์๊ฒ ์ ๊ฐ๋๋ค. ์์ ์ด ์์ผ๋ฉด confidence: "low" + status: "needs_review" ๊ฒ์ดํธ๋ฅผ ๊ฑด๋ค.
์ด๊ฑด ๋ง๋ฟ์ธ ๊ท์น์ด ์๋๋ผ ์ฝ๋๋ก ๊ฐ์ ๋๋ค. Step 8์ validate_goal.py๊ฐ ๋จ์ผ ์ง์ค ์์ฒ(SSOT)์ด๋ฉฐ, ์ฐจ๋จ ์ด์(errors)๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด enforced_status๋ฅผ ๊ฐ์ ๋ก needs_review๋ก ๋ด๋ฆฌ๊ณ ์ข
๋ฃ์ฝ๋ 1์ ๋ฐํํ๋ค. ๊ฒ์ฆ์ ํต๊ณผ(pass: true)ํ๊ธฐ ์ ์๋ ์ฌ์ฉ์์๊ฒ "ready"๋ผ๊ณ ๋งํ์ง ์๋๋ค.
Demonstrable-in-conversation (ํต์ฌ ์ฒ ์น)
/goal ํ๊ฐ์๋ ๋๊ตฌ๋ฅผ ๋ชป ๋๋ฆฌ๊ณ ํ์ผ์ ์ง์ ๋ชป ์ฝ๋๋ค โ ๋ํ์ ๋๋ฌ๋ ์ถ๋ ฅ๋ง์ผ๋ก ํ์ ํ๋ค. ๋ฐ๋ผ์ ๋ชจ๋ ์ฑ๊ณต๊ธฐ์ค๊ณผ goal_command ์ฒดํฌ๋ Claude๊ฐ ์ถ๋ ฅ์ผ๋ก ์ฆ๋ช
ํ ์ ์๋ ๊ฒ์ด์ด์ผ ํ๋ค(โ "์ฌ์ฉ์๊ฐ ๋ง์กฑ"ยท"๋ณด๊ธฐ ์ข์" โ โ
"swift build exit 0"ยท"ํ
์คํธ ํต๊ณผ์จ 100%๊ฐ ์ถ๋ ฅ์ ํ์"). ์ฆ๋ช
๋ถ๊ฐํ ๊ธฐ์ค์ ๋ฐ๊ฒฌํ๋ฉด ๊ทธ๋๋ก ๋์ง ๋ง๊ณ "์ด๋ป๊ฒ ์ถ๋ ฅ์ผ๋ก ๋ณด์ฌ์ค ์ ์์๊น?"๋ก ๋ฐ๊ฟ ๋ฌป๋๋ค. ๊ทผ๊ฑฐ์ ์ ์ฒด ์์์ SSOT๋ references/loop-formats.md("๊ฒฐ์ ์ ์ ์ฝ 3๊ฐ์ง").
์ํฌํ๋ก์ฐ
Step 1 โ ๋ช
ํ๋ ์ค์ฝ์ด๋ง + ๋๋ฉ์ธ ๋ถ๋ฅ (prompt)
์ฌ์ฉ์์ ํ ๋ฌธ์ฅ ์์ด๋์ด๋ฅผ ๋ฐ๋๋ค. ์ธ์๋ก ์์ผ๋ฉด AskUserQuestion์ผ๋ก ํ ๋ฌธ์ฅ๋ง ๋ฐ๋๋ค.
์ฌ๊ฐ ํ์ธ (๋จผ์ ): ํ์ฌ ๋๋ ํ ๋ฆฌ์ status: "needs_review"์ธ goal.json์ด ์์ผ๋ฉด, "์ด์ ์ ์ ํ๋ค ๋ง ๋ชฉํ๊ฐ ์์ด์. open_questions๋ง ์ด์ด์ ๋ฌผ์๊น์?"๋ผ๊ณ ์ ์ํ๋ค. ๋์ํ๋ฉด ๊ทธ ํ์ผ์ ์ฝ๊ณ open_questions์ ํด๋นํ๋ ์ง๋ฌธ๋ง ๋ค์ ๋์ง๋ค(๋ณ๋ ์ธ์
ํ์ผ ์์ โ ์ฐ์ถ๋ฌผ ์์ฒด๊ฐ ์ฌ๊ฐ์ ์ด๋ค).
์
๋ ฅ ๊ฒ์ฆ: 10์ ๋ฏธ๋ง์ด๊ฑฐ๋ ์๋ฏธ ์๋ ๋ช
์ฌยท๋์ฌ๊ฐ ์์ผ๋ฉด "ํ ๋ฌธ์ฅ ์ด์์ ์์ด๋์ด๋ฅผ ์ ์ด์ฃผ์ธ์"๋ผ๊ณ ์๋ดํ๊ณ ๋ฉ์ถ๋ค(์ฌ์๋ 3ํ ํ๋). 2,000์ ์ด๊ณผ ์
๋ ฅ(์ฝ๋ ๋ฉ์ด๋ฆฌ ๋ฑ)์ "ํต์ฌ ์์ด๋์ด๋ง ํ ๋ฌธ์ฅ์ผ๋ก ์์ฝํด์ฃผ์ธ์"๋ก ๋ฆฌ๋ค์ด๋ ํธํ๋ค.
๋ค์ 4์ถ์ ๋ช
ํ๋๋ฅผ 0~1๋ก ์ฑ์ ํ๋ค: ๋ชฉํ / ์ฑ๊ณต๊ธฐ์ค / ์ข
๋ฃ์กฐ๊ฑด / ๋ฒ์ยท์คํ. ๊ทธ๋ฆฌ๊ณ ๋๋ฉ์ธ(codeยทdataยทinfraยทautomationยทcreativeยทanalysis), ๊ท๋ชจ(spikeยทmvpยทproduction), ๊ทธ๋ฆฌ๊ณ risk_tier(none/low/elevated)๋ฅผ ํ์ ํ๋ค. ํ์ผ ๋ณ๊ฒฝยท์ญ์ , ์์คํ
ยท๊ถํ ์ ๊ทผ, ์ฌ์ฉ์ ์ฝํ
์ธ ์ฝ๊ธฐ, ์ธ๋ถ ์ ์ก ์ ํธ๊ฐ ์์ผ๋ฉด elevated โ ์ด ๊ฒฝ์ฐ Step 7์์ safety ๋ธ๋ก์ด ํ์๊ฐ ๋๋ค.
์ถ์ ๋จผ์ , ์ง๋ฌธ์ ๋์ค (ํต์ฌ ํจ์จ ์ฅ์น): ์ฌ์ฉ์๋ ์ฝ๋ฉ์ ๋ชจ๋ฅด๋ ๋ฐ์ด๋ธ์ฝ๋๊ณ , ๋งค๋ฒ 4~16๊ฐ๋ฅผ ๋ฌผ์ผ๋ฉด ์ง์น๋ค. ์ข์ ํ ๋ฌธ์ฅ์ ์ด๋ฏธ ์ ๋ฐ์ ํจ์ถํ๋ค โ "๋งค์ผ ์ฐ๋ ์ฌ์ํ ์ผ์ ์๋ํํ๋ macOS ๋ฉ๋ด๋ฐ ์ฑ"์ด๋ฉด ๋๋ฉ์ธ=code, ๊ฒฐ๊ณผ๋ฌผ=๋ฉ๋ด๋ฐ ์ฑ, ์คํโSwift/SwiftUI, ๋งฅ๋ฝโ๊ฐ์ธ์ฉ, ๊ท๋ชจโmvp๊ฐ ๊ฑฐ์ ์๋ช
ํ๋ค. ๊ทธ๋ฌ๋ ์ถ๋ก ๊ฐ๋ฅํ ์ถ์ LLM์ด ๋จผ์ ์ฑ์ "์ ์ ์ถ์ "์ผ๋ก ๋ค๊ณ , ์ธํฐ๋ทฐ๋ ์ถ๋ก ๋ถ๊ฐ๋ฅํ ์ถ(์ฃผ๋ก ์ฑ๊ณต๊ธฐ์คยท์ข
๋ฃ์กฐ๊ฑด โ ์ฌ์ฉ์ ๋จธ๋ฆฟ์์๋ง ์๋ ๊ฒ)์ ์ง์ค์ํจ๋ค. question-pool.md์์ infer_first๋ก ํ์๋ ์ง๋ฌธ์ด ์ถ์ ๋์์ด๋ค.
๋จ, ์ถ์ ์ ๋ฐ๋์ ์ฌ์ฉ์ ํ์ธ์ ๊ฑฐ์น๋ค(Iron Law: 4์ถ์ ์ฌ์ฉ์๊ฐ ํ์ธํด์ผ ํ๋ค). ์ถ์ + ๋ช
์์ ํ์ธ์ "์กฐ์ฉํ ๊ฐ์ "์ด ์๋๋ค โ ํ๋ฆฌ๋ฉด ๋ฐ๋ก ๊ณ ์น๋ค. ์์ ์๋ ์ถ์ ์ confidence๋ฅผ ๋ฎ์ถ๋ ์ ํธ๋ก ์ผ๋๋ค.
4์ถ์ด ๋ชจ๋ ๋ช
ํํ๋ฉด(์ด๋ฏธ ๋๋ ทํ ์์ด๋์ด) ์ธํฐ๋ทฐ๋ฅผ ๊ฑด๋๋ฐ๊ณ "์ด๋ฏธ ์ถฉ๋ถํ ๊ตฌ์ฒด์ ์ด์์. ๋ฐ๋ก goal.json ๋ง๋ค๊น์?"๋ผ๊ณ ํ์ธํ ๋ค Step 7๋ก ๊ฐ๋ค.
Step 2 โ ์ง๋ฌธ ๊ฐ์ง์น๊ธฐ (rag)
references/question-pool.md์ 20๊ฐ ๋ง์คํฐ ์ง๋ฌธ ํ์ ์ฐ๋ค. ์ธ ๋จ๊ณ๋ก ์ค์ธ๋ค: โ infer_first ์ง๋ฌธ ์ค ํ ๋ฌธ์ฅ์์ ์ถ๋ก ๋ ๊ฒ์ ์ถ์ ๊ฐ์ผ๋ก ํก์(1์ฐจ์ ํ์ธ ์ง๋ฌธ์ผ๋ก ํฉ์นจ), โก๋๋ฉ์ธ ๋งคํยทskip_if๋ก ๋ฌด๊ดยท์ค๋ณต ์ ๊ฑฐ, โข๋จ์ ๊ฒ์ ๋ฌถ์์ผ๋ก ๊ตฌ์ฑ. ๊ฒฐ๊ณผ๋ ๋ณดํต 4~8๊ฐ(์ถ์ ์ด ์ ๋จนํ๋ฉด ๋ ์ ๊ฒ). ์ด๋ฏธ ๋๋ ทํ๊ฑฐ๋ ์ถ์ ๋ ์ถ์ ์ง๋ฌธ์ ๋ค์ ๋ฌป์ง ์๋๋ค.
Step 3 โ 1์ฐจ ์ธํฐ๋ทฐ: ์ถ์ ํ์ธ + ํต์ฌ ๋ฏธ์ง์ถ (api_mcp)
1์ฐจ ๋ฌถ์์ ๋ชฉ์ ์ ์ถ์ถ์ด ์๋๋ผ ํ์ธ์ด๋ค. AskUserQuestion ํ ๋ฒ์ ๋ค์์ ๋ด๋๋ค(์ง๋ฌธ โค4, ์ต์
๊ฐ โค4):
- ์ถ์ ํ์ธ ์ง๋ฌธ (1๊ฐ) โ Step 1์์ ์ถ๋ก ํ ์ ์ ๊ฐ์ ํ ๋ฌถ์์ผ๋ก ๋ณด์ฌ์ฃผ๊ณ ๋ง๋์ง ๋ฌป๋๋ค. ์: "์ด๋ ๊ฒ ์ดํดํ์ด์ โ ๊ฒฐ๊ณผ๋ฌผ=macOS ๋ฉ๋ด๋ฐ ์ฑ, ์ธ์ด=Swift, ๊ท๋ชจ=์ต์ ๋์(MVP), ์ฌ์ฉ์=๋ณธ์ธ. ๋ง๋์?" ์ต์
:
๋ค ๋ง์์ / ๊ท๋ชจ๋ง ๋ฌ๋ผ์ / ๊ฒฐ๊ณผ๋ฌผยท์คํ์ด ๋ฌ๋ผ์ / ๋ง์ด ๋ฌ๋ผ์(๋ค์ ์ค๋ช
ํ ๊ฒ์). "๋ง์ด ๋ฌ๋ผ์"๋ฉด Other๋ก ์ฌ์ค๋ช
์ ๋ฐ์ ์ถ์ ์ ๊ฐฑ์ ํ๋ค.
- ์ฑ๊ณต๊ธฐ์ค ์ธก์ (1๊ฐ, ์ ๋ ์ถ์ ๊ธ์ง) โ ์ฑ๊ณต์ ๋ํ ์ถ๋ ฅ์ผ๋ก ์ด๋ป๊ฒ ์ฆ๋ช
ํ ์ง. ์ด๊ฑด ์ฌ์ฉ์ ๋จธ๋ฆฟ์์๋ง ์์ด ์ถ๋ก ๋ถ๊ฐ๋ค. demonstrable ๊ธฐ์ค(์ซ์ยท%ยทํต๊ณผ/์คํจยท
exit 0ยท"๋ฉ๋ด๋ฐ์ ํ์")์ผ๋ก ์ ๋ํ๋ค.
- ์ข
๋ฃ์กฐ๊ฑด (1๊ฐ) โ "์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ์ ๋ vs ์ต์ง๋ก๋ผ๋ ๋ฉ์ถฐ์ผ ํ ๋"๋ฅผ ํ ์ง๋ฌธ์ผ๋ก. JSON์์
done_definition / stop_condition์ผ๋ก ๋ถ๋ฆฌํ๋ค.
- (์ ํ) ๋ฒ์ ๋ฐ (1๊ฐ) โ ์ถ์ ์ด ๊ณผํด ๋ณด์ด๋ฉด "์ด๋ฒ์ ์ ํ ๊ฒ"์ ๋ฌผ์ด ๋ฒ์๋ฅผ ๋ชป ๋ฐ๋๋ค.
์งํ๋ฅ ์ ์ง๋ฌธ ๋จธ๋ฆฌ๋ง์ "1/N"์ฒ๋ผ ๋ณด์ฌ์ฃผ๊ณ , ๊ฐ ์ง๋ฌธ์ "์ ๋ชจ๋ฅด๊ฒ ์ด์" ์ ํ์ง๋ฅผ ํญ์ ๋๋ค("Other" ์์ ์
๋ ฅ์ ์๋ ์ ๊ณต๋จ). ์ถ์ ํ์ธ์ด ๋ค ๋ง์์๋ก ๋จ์ด์ง๋ฉด ๋๋ฉ์ธ ์ถ์ถ ์ง๋ฌธ ๋๋ถ๋ถ์ด ์ฌ๋ผ์ ธ ์ ์ฒด ์ง๋ฌธ ์๊ฐ ํฌ๊ฒ ์ค๋ค.
Step 4 โ ๋ถ๊ธฐ + ์ค๊ฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ (prompt)
1์ฐจ ๋ต๋ณ์ ํ์ฑํ๋ค. ์ถ์ ํ์ธ์ด ํ๋ฆฐ ๊ฒ์ผ๋ก ๋์ค๋ฉด ๊ทธ ์ถ๋ง ๋ณด์ ์ง๋ฌธ์ ๋ผ์ฐ๊ณ (๋ง์ ์ถ์ ๊ทธ๋๋ก ํ์ ), ๋๋จธ์ง ์ฒ๋ฆฌ ๊ท์น์ references/question-pool.md์ "์ด์ ๊ท์น"์ ๋ฐ๋ฅธ๋ค:
- Other ์์ ์
๋ ฅ์ ๋ค์ ๋ฌถ์ ์ฒซ ์ง๋ฌธ์ "๋ง์ํ์ ๋ด์ฉ์ด ์ด ์ค ์ด๋์ ๊ฐ๊น๋์?"๋ก ๋ฐ๊ฟ ์ฌ์ต์ปค๋งํ๋ค.
- "์ ๋ชจ๋ฅด๊ฒ ์ด์" ๋์ ์ ์ผ๋ค(์ฐ์ 3ํ ๋๋ ์ด 10ํ ์ด๊ณผ ์ ์ธํฐ๋ทฐ ์ค๋จ โ ํฉ๋ฆฌ์ ๊ธฐ๋ณธ๊ฐ +
confidence:low).
- ๋ชจ์์ ๊ฐ์งํ๋ค(์: "๋ชจ๋ฐ์ผ ์ฑ" + "CLI ๋ฐฐํฌ"). ๋ฐ๊ฒฌํ๋ฉด ์ข
๋ฃ ์ ์ฌํ์ธ ์ง๋ฌธ์ ๋ผ์ด๋ค.
๊ทธ๋ฆฌ๊ณ "์ง๊ธ๊น์ง ์ด๋ ๊ฒ ์ ๋ฆฌ๋์ด์" ์ค๊ฐ ์ด์์ ์ฌ๋์ด ์ฝ๋ ํ๊ตญ์ด๋ก ์งง๊ฒ ๋ณด์ฌ์ค๋ค โ ์ฌ์ฉ์๊ฐ ์๊ธฐ ์๋๊ฐ ๋ฐ์๋๋์ง ๋ณด๋ฉฐ ๋๊น์ง ์ฐธ์ฌํ๊ฒ ๋ง๋ ๋ค.
Step 5 โ 2์ฐจ ์ธํฐ๋ทฐ: ๋จ์ ๋๋ฉ์ธ ๋ํ
์ผ + ๊ฒ์ฆยท๋ฒ์ (api_mcp, ํ์ ์)
์ถ์ ํ์ธ์ผ๋ก ์ด๋ฏธ ์ฑ์์ง ๋๋ฉ์ธ ์ถ์ ๊ฑด๋๋ด๋ค. ๋จ์ ๋ฏธ์ง ํญ๋ชฉ๋ง AskUserQuestion ํ ๋ฌถ์์ผ๋ก ๋ฌถ๋๋ค: ๋๋ฉ์ธ ํนํ ์ค ์ถ์ ์ ๋ ๊ฒ(0~2๊ฐ) + verification_method 1๊ฐ + out_of_scope/risks 1๊ฐ. ๋๋ฉ์ธ๋ณ ํ๋ณด์ max_iterations ๊ธฐ๋ณธ๊ฐ์ references/question-pool.md. ์ถ์ ์ด ๋ค ๋ง๊ณ 1์ฐจ์์ ๊ฒ์ฆยท๋ฒ์๊น์ง ๋์์ผ๋ฉด ์ด ๋จ๊ณ ์์ฒด๋ฅผ ์๋ตํ๋ค.
Step 6 โ 3์ฐจ ์ธํฐ๋ทฐ: ์กฐ๊ฑด๋ถ (api_mcp)
done_definition ๋๋ constraints๊ฐ ์์ง ๋ชจํธํ ๋๋ง 3์ฐจ ๋ฌถ์์ ํธ์ถํ๋ค. ์ ๋จ๊ณ์์ ์ด๋ฏธ ๋๋ ทํด์ก์ผ๋ฉด ์ด ๋จ๊ณ๋ฅผ ์๋ตํ๋ค โ ์ ํ์ ์ผ๋ก ์ด ์ง๋ฌธ ์๋ 4~8๊ฐ๋ก ์์ถ๋๋ค.
Step 7 โ goal.json ์์ฑ (generate)
์์งํ ๋ต๋ณ์ผ๋ก goal.json์ ๋ง๋ ๋ค. ์คํค๋งยทํ๋ ์ ์๋ references/goal-schema.md, goal_command ์์ฑ๋ฒ์ references/loop-formats.md. ์์:
- ๊ตฌ์กฐํ ํ๋ ์ฑ์ฐ๊ธฐ
success_criteria๋ ๊ฐ ํญ๋ชฉ์ด ๋ํ๋ก ์ฆ๋ช
๋๋ ๊ด์ฐฐ ์ ํธ(์ซ์ยท%ยทํต๊ณผ/์คํจยทexit 0ยท"๋ฉ๋ด๋ฐ์ ํ์")๋ฅผ ํฌํจ. ์ฆ๋ช
๋ถ๊ฐ ๊ธฐ์ค์ ๊ธ์ง.
done_definition(์๋ฃ ์ํ)๊ณผ loop_config.stop_condition(๊ฐ์ ์ค๋จ)์ ๋ถ๋ฆฌํด ์ฑ์ด๋ค. ๋์ผํ๋ฉด ๊ฒ์ฆ๊ธฐ๊ฐ ๋ง๋๋ค.
loop_config.max_iterations๋ ๋๋ฉ์ธ ๊ธฐ๋ณธ๊ฐ์์ ์์(์ฝ๋ MVP 1530, spike 510, ๋ฐ์ดํฐ/๋ถ์ 515, ์๋ํ 520, ์ธํ๋ผ 38, ์ฐฝ์ 25).
risk_tier๋ฅผ ์ธํ
. elevated๋ฉด safety ๋ธ๋ก(permissions_neededยทdestructive_opsยทapproval_gateยทprivacy_notes)์ ๊ธฐ์กด ๋ต๋ณ์์ ํฉ์ฑํ๊ฑฐ๋ ๋ณด๊ฐ ์ง๋ฌธ์ผ๋ก ์ฑ์ด๋ค.
goal_command ํฉ์ฑ (์ด์ 1์์ ํ๋) โ loop-formats.md ํ
ํ๋ฆฟ์ผ๋ก โค4,000์ ์ฐ๋ฌธ ์กฐ๊ฑด์ ๋ง๋ ๋ค: ์ธก์ ๊ฐ๋ฅ ์ข
๋ฃ์ํ + ๋ํ๋ก ์ฆ๋ช
๋๋ ์ฒดํฌ + ๋ถ๋ณ ์ ์ฝ + ํด๋ฐ์ด๋(๋๋ Nํด ํ ๋ฉ์ถ๋ค, N=max_iterations) + 3ํ ์ฐ์ ์คํจ ์ ์ฌ๋ ๋๊ธฐ. ๋ค๋ฅธ ํ๋ ์ฐธ์กฐ ์์ด ํผ์ ์๊ฒฐ๋ผ์ผ ํ๋ค โ ์ฌ์ฉ์๊ฐ /goal ๋ค์ ์ด ๋ฌธ์์ด๋ง ๋ถ์ฌ ๋๋ฆฐ๋ค.
confidence/status ์ธํ
โ ํ์ 4์ถ ์ค 2๊ฐ ์ด์์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋์์ก์ผ๋ฉด confidence: low + status: needs_review + ๋์ด ํญ๋ชฉ์ open_questions์ ๊ธฐ๋ก(question-pool.md์ 4์ถ ์ปค๋ฒ๋ฆฌ์ง ๊ท์น).
์ ์ฅ ์์น๋ ์ฌ์ฉ์์๊ฒ ๋ฌป๊ฑฐ๋ ๊ธฐ๋ณธ ./goal.json. Write ๋๊ตฌ๋ก ์ ์ฅํ๋, ๊ฐ์ ํ์ผ์ด ์์ผ๋ฉด ๋ฎ์ด์ฐ๊ธฐ ์ ํ์ธํ๋ค.
Step 8 โ ์์ฒด๊ฒ์ฆ + ์ต์ข
ํ์ธ (script โ review)
์์ฑ ์งํ ๊ฒ์ฆ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ค. ๊ฒ์ฆ๊ธฐ๋ **์ด SKILL.md๊ฐ ์๋ ๋๋ ํ ๋ฆฌ์ scripts/validate_goal.py**๋ค โ ์คํฌ ๋ก๋ฉ ์ ์๋ด๋ base directory์ ์ ๋๊ฒฝ๋ก๋ฅผ ๊ทธ๋๋ก ์ฐ๋ฉด ํ๋ฌ๊ทธ์ธ/๋จ๋
์ค์น(~/.claude/skillsยท~/.codex/skills)/ํฌํฌ ์ด๋์๋ ๋์ํ๋ค. CLAUDE_PLUGIN_ROOT ๊ฐ์ ํ๊ฒฝ๋ณ์์ ์์กดํ์ง ์๋๋ค(ํ๋ฌ๊ทธ์ธ ์ธ ์ค์น์์ ๋น์ด ์์ด ๊ฒ์ดํธ๊ฐ ํต์งธ๋ก ๊ฑด๋๋ฐ์ด์ง ์ ์๋ค).
python3 "<SKILL_DIR>/scripts/validate_goal.py" <goal.json ๊ฒฝ๋ก>
(๊ฒฝ๋ก๋ฅผ ๋ชจ๋ฅด๋ฉด ์ค์น ์์น ํ๋ณด๋ฅผ ์ฐจ๋ก๋ก ์๋: ~/.claude/skills/goalgoal/scripts/validate_goal.py, ~/.codex/skills/goalgoal/scripts/validate_goal.py, ${CLAUDE_PLUGIN_ROOT}/skills/goalgoal/scripts/validate_goal.py. Windows๋ python.)
์คํฌ๋ฆฝํธ๋ SSOT๋ค. JSON ํ์ ์ stdout์ผ๋ก ๋๋ ค์ค๋ค โ โ ์คํค๋ง โก์ธก์ ๊ฐ๋ฅ์ฑ(๊ฐ์ ํธ=์ซ์ยทํต๊ณผ/์คํจยทexit 0์ด ์์ผ๋ฉด ํต๊ณผ / ๋์ยทํ์๋ง ์์ผ๋ฉด ๊ฒฝ๊ณ / ๋ชจํธ์ด+๋์ยทํ์๋ฉด error / ์ ํธ ์ ๋ฌด๋ฉด error) โขLoop ํธํ์ฑ(doneโ stop, max_iterations>0) โฃ/goal ๊ณ์ฝ(goal_command ์กด์ฌยทโค4000์ยทํด๋ฐ์ด๋ ํ์ยท์คํจ์ค๋จ ๋ฌธ๊ตฌ ๊ถ์ฅยทdemonstrable) โค์์ (risk_tier=elevated๋ฉด safety ํ์). ์ฒ๋ฆฌ (ํ๋ ๊ฒ์ดํธ):
| ํ์ | ์กฐ์น |
|---|
pass: true | ํ๊ตญ์ด ์์ฝ + JSON์ ๋ณด์ฌ์ฃผ๊ณ ํ์ ์ง๋ฌธ |
warnings ์์ | ํด๋น ํ๋ ๊ตฌ์ฒดํ 1ํ ์ฌ์ง๋ฌธ โ ๊ฐ์ ๋๋ฉด ์ฌ๊ฒ์ฆ, ์ ๋๋ฉด ๊ฒฝ๊ณ ๋ฅผ ์ฌ์ฉ์์๊ฒ ๋
ธ์ถํ๊ณ ์งํ ์ฌ๋ถ ํ์ธ |
errors ์์ | ready๋ก ๋ชป ๋๊ฐ๋ค. ํ๋ ๋ณด์ ํ ์ฌ๊ฒ์ฆ. ๊ฒ์ฆ๊ธฐ๊ฐ ์ด๋ฏธ enforced_status: needs_review๋ก ๊ฐ์ ํ์ผ๋ฏ๋ก, ๋๋ด ๋ฏธํด๊ฒฐ์ด๋ฉด ๊ทธ ์ํ๋ก ์ ์ฅํ๊ณ /goal ํฌ์
์ฐจ๋จ์ ์๋ดํ๋ค |
์๊ฒฉ ๊ฒ์ฆ์ด ํ์ํ๋ฉด --strict(๊ฒฝ๊ณ ๋ ์ข
๋ฃ์ฝ๋ 1)๋ก ํ ๋ฒ ๋ ๋๋ฆฐ๋ค.
๋ง์ง๋ง์ ์ฌ๋์ด ์ฝ๋ ํ๊ตญ์ด ํ์ธ ์์ฝ(goal_command / ์ฑ๊ณต๊ธฐ์ค / ์๋ฃ์กฐ๊ฑด / ์ต๋๋ฐ๋ณต / risk_tier)์ ๋จผ์ ๋ณด์ฌ์ฃผ๊ณ , ๊ทธ ์๋ goal.json์ ๋ณด์ฌ์ค๋ค. AskUserQuestion์ผ๋ก "์ด๋๋ก ํ์ / ํน์ ํ๋ ์์ / ๋ค์ ์ธํฐ๋ทฐ"๋ฅผ ๋ฐ๋๋ค.
Step 9 โ /goal ํธ๋์คํ (ํญ์ ์ถ์ฒ)
ํ์ ํ ๋ฐ๋์ ๋ฐ๋ก ์ด์ด ๋๋ฆด ๋ฐฉ๋ฒ์ ์๋ดํ๋ค. goal.json์ ๋ง๋ค๊ธฐ๋ง ํ๊ณ ๋๋ด์ง ์๋๋ค โ ์์จ ๋ฃจํ๋ก ๋๊ธฐ๋ ๊ฒ์ด ์ด ์คํฌ์ ๋ชฉ์ ์ด๋ค.
ํต์ฌ: /goal์ ์์ฐ์ด ์กฐ๊ฑด ๋ฌธ์์ด๋ง ๋ฐ๋๋ค. ํ์ผ ๊ฒฝ๋ก(@goal.json)๋ ๊ณต์ ๋ฌธ์์ ์๋ ๋ฏธ๊ฒ์ฆ ๋ฌธ๋ฒ์ด๊ณ , ์ค๋ น ์ธ๋ผ์ธ๋ผ๋ ํ๊ฐ์(Haiku)๊ฐ JSON ๋ฉํ๊น์ง ์กฐ๊ฑด์ผ๋ก ์ฝ์ด ํ์ ์ ํ๋ฆฐ๋ค(references/loop-formats.md์ "ํธ๋์คํ ํ์"). ๊ทธ๋์ goal_command ์ฐ๋ฌธ ํ ๋ฉ์ด๋ฆฌ๋ฅผ /goal ๋ค์ ๋ถ์ด๋ ๋ณต๋ถ ๋ธ๋ก์ ์ถ๋ ฅํ๋ค โ ์ฌ์ฉ์๊ฐ ํ ๋ฒ์ ๋ณต์ฌํ๊ฒ.
status: "ready"์ผ ๋ โ goal_command ์ ๋ฌธ์ /goal ์ ์ด์ด ๊ทธ๋๋ก ์ถ๋ ฅํ๋ค:
โ
goal.json ์ค๋น ์๋ฃ. ์๋ ์ค์ ํต์งธ๋ก ๋ณต์ฌํด Claude Code์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ์์จ ๋ฃจํ๊ฐ ์์๋ผ์:
/goal <์ฌ๊ธฐ์ goal_command ์ ๋ฌธ์ ๊ทธ๋๋ก>
(`/goal`์ด ์ด ์กฐ๊ฑด์ ์๋ฃ์กฐ๊ฑด์ผ๋ก ์ผ์, ๋งค ํด ๋๋ง๋ค ์ถฉ์กฑ ์ฌ๋ถ๋ฅผ ํ๊ฐํ๋ฉฐ ์๋ ๋ฐ๋ณตํด์. goal.json ํ์ผ์ ๊ธฐ๋กยท์ฌ๊ฒ์ฆยท์ฌ๊ฐ์ฉ์ผ๋ก ํจ๊ป ๋จ๊ฒจ๋ฌ์.)
status: "needs_review"์ผ ๋๋ ์ถ์ฒ ๋์ ๊ฒฝ๊ณ ํ๋ค: "์์ง ๋ชจํธํ ํญ๋ชฉ์ด ๋จ์ ์์ด์(open_questions). ์ง๊ธ /goal์ ๋ฃ์ผ๋ฉด ํ๋ ์ ์์ผ๋ ๋จผ์ ๋ณด๊ฐํ์ธ์." ๊ทธ ๋ค open_questions๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋ณด๊ฐ์ ์ ์ํ๋ค.
ํฉ๋ฆฌํ ์ฐจ๋จ (Excuse โ Reality)
| ๋ ์ค๋ฅด๋ ์๊ฐ | ํ์ค |
|---|
| "์์ด๋์ด๊ฐ ๋๋ ทํ๋ ์ธํฐ๋ทฐ ๊ฑด๋๋ฐ์" | Step 1 ์ค์ฝ์ด๋ง์ผ๋ก ๊ฐ๊ด์ ์ผ๋ก ํ์ ํ๋ค. ๋๋์ผ๋ก ๊ฑด๋๋ฐ์ง ์๋๋ค. |
| "์ฑ๊ณต๊ธฐ์ค์ด ์ข ๋ชจํธํด๋ Loop๊ฐ ์์์ ํ๊ฒ ์ง" | ๋ชจํธํ ๊ธฐ์ค์ ๋ฃจํ๋ฅผ ํ๋๊ฒ ํ๋ค. ์ธก์ ๊ฐ๋ฅํด์ง ๋๊น์ง ์บ๋ฌป๊ฑฐ๋ needs_review๋ก ๋ง๋๋ค. |
| "์ฌ์ฉ์๊ฐ ์ง์น ํ
๋ ์ง๋ฌธ ์ค์ด์" | ์ค์ด๋ ๊ฑด ์ถ์ ํก์ + skip_if ๊ฐ์ง์น๊ธฐ๋ก ํ๋ค. ์ถ์ ์ ํ์ธ์ ๊ฑฐ์น๊ณ , ํ์ 4์ถ(๋ชฉํยท์ฑ๊ณต๊ธฐ์คยท์ข
๋ฃ์กฐ๊ฑดยท๋ฒ์)์ ๋นผ์ง ์๋๋ค. |
| "ํ ๋ฌธ์ฅ์์ ๋ค ์ถ๋ก ํ์ผ๋ ์ ๋ฌผ์ด๋ ๋ผ" | ์ถ๋ก ์ ์ข์ง๋ง ํ์ธ ์์ด ํ์ ๊ธ์ง. ์ฑ๊ณต๊ธฐ์คยท์ข
๋ฃ์กฐ๊ฑด์ ์ถ๋ก ๋์์ด ์๋๋ค โ ๋ฐ๋์ ๋ฌป๋๋ค. |
| "done_definition์ด๋ stop_condition ๊ฐ์ ๊ฑฐ ์๋?" | ๋ค๋ฅด๋ค. ์๋ฃ(์ฑ๊ณต ๋๋ฌ) vs ๊ฐ์ ์ค๋จ(์์ ์ฅ์น). JSON์์ ๋ฐ๋์ ๋ถ๋ฆฌํ๋ค. |
| "๊ฒ์ฆ ์คํฌ๋ฆฝํธ ์ ๋๋ ค๋ ๋ฉ์ฉกํด ๋ณด์ฌ" | ๋ณด์ฌ๋ ๋๋ฆฐ๋ค. ๋ชจํธ์ฑยทํธํ์ฑยทํด๋ฐ์ด๋๋ ๋์ผ๋ก ์ ์กํ๋ค. ์ฆ๊ฑฐ ๋จผ์ . |
| "์ฑ๊ณต๊ธฐ์ค์ด ์ฌ๋์ด ๋ณด๋ฉด ๋์์" | /goal ํ๊ฐ์๋ ์ฌ๋์ด ์๋๋ผ Haiku๊ณ ๋ํ ์ถ๋ ฅ๋ง ๋ณธ๋ค. ์ฆ๋ช
๋ถ๊ฐ ๊ธฐ์ค์ ๋ฃจํ๋ฅผ ๋ชป ๋ฉ์ถ๋ค. |
| "goal.json ๊ตฌ์กฐ๋ง ๋ง์ผ๋ฉด /goal์ด ์์์ ์ฝ๊ฒ ์ง" | /goal์ JSON์ ํ์ฑํ์ง ์๋๋ค. goal_command ์ฐ๋ฌธ์ ์กฐ๊ฑด์ผ๋ก ์ด๋ค. ๊ตฌ์กฐ๋ ๋ณด์กฐ์ผ ๋ฟ. |
Red Flags โ ๋ฉ์ถ๊ณ ์ ๊ฒ
success_criteria์ ์ซ์ยท๊ธฐ์ค์ด ํ๋๋ ์๋ค โ ์ธก์ ๋ถ๊ฐ. ๊ตฌ์ฒดํ ์ฌ์ง๋ฌธ.
done_definition์ด ๋น์ด์๊ฑฐ๋ "์์ฑ๋๋ฉด"์ฒ๋ผ ์๊ธฐ์ฐธ์กฐ๋ค โ Loop๊ฐ ๋์ ๋ชจ๋ฅธ๋ค.
- ์ฌ์ฉ์๊ฐ ๊ฑฐ์ ๋ค "์ ๋ชจ๋ฅด๊ฒ ์ด์"์๋ค โ
confidence:low + needs_review. ready๋ก ๋ด๋ณด๋ด์ง ์๋๋ค.
- ๋ต๋ณ๋ผ๋ฆฌ ๋ชจ์(ํ๋ซํผ/ํ๊น ์ถฉ๋) โ ํ์ ์ ์ฌํ์ธ ์ง๋ฌธ ํ์.
goal_command์ ํด๋ฐ์ด๋("Nํด ํ ๋ฉ์ถ๋ค")๊ฐ ์๋ค โ /goal์ด ๋ฌดํ ๋ฐ๋ณตํ ์ ์๋ค.
- ํ์ผ์ ์ฎ๊ธฐ๊ฑฐ๋ ์์คํ
์ ๊ฑด๋๋ฆฌ๋ ๋ชฉํ์ธ๋ฐ
risk_tier๊ฐ elevated๊ฐ ์๋๋ค โ safety ๋๋ฝ. ์ฌ๋ถ๋ฅ.
References
references/loop-formats.md โ /goal ๊ณต์ ๊ณ์ฝ(4000์ยทํ๊ฐ์ยทํด๋ฐ์ด๋ยทdemonstrable) + goal_command ์์ฑ ํ
ํ๋ฆฟ + ๋ค๋ฅธ Loop ํ๊น ๋งคํ. ์ถ์ ๊ธ์ง, ์ฌ๊ธฐ๋ฅผ ๋ณธ๋ค.
references/question-pool.md โ 20๊ฐ ๋ง์คํฐ ์ง๋ฌธ ํ, ๋๋ฉ์ธ ๋งคํ, skip_if, max_iterations ๊ธฐ๋ณธ๊ฐ, risk_tier/safety/goal_command ์๋์ฒ๋ฆฌ, 4์ถ ์ปค๋ฒ๋ฆฌ์ง ์กฐ๊ธฐ์ข
๋ฃ, Other ์ฌ์ต์ปค๋งยท๋ชจ์ ๊ฒ์ฌ
references/goal-schema.md โ goal.json ํ๋ ์ ์(goal_commandยทrisk_tierยทsafety ํฌํจ), demonstrable ์ฒ ์น, ์ธก์ ๊ฐ๋ฅ์ฑ ์์ฑ ๊ท์น, v2 ์์
Scripts
scripts/validate_goal.py โ goal.json ๊ฒ์ฆ์ ๋จ์ผ ์ง์ค ์์ฒ(SSOT). ์คํค๋งยท์ธก์ ๊ฐ๋ฅ์ฑ(๊ฐ์ ํธ ์ฐ์ ยท์ฝ์ ํธ ๋จ๋
์ ๊ฒฝ๊ณ ยท๋ชจํธ์ด+์ฝ์ ํธ๋ ์๋ฌ)ยทLoopํธํยท/goal๊ณ์ฝ(ํด๋ฐ์ด๋ ํ์ยท์คํจ์ค๋จ ๊ถ์ฅ)ยท์์ ์ ํ๋๊ฒ์ดํธ๋ก ๊ฒ์ฌํ๊ณ JSON ํ์ ์ stdout ์ถ๋ ฅ(ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง, jsonschema ์์ผ๋ฉด 2์ฐจ). --strict ์ง์.
scripts/test_validate_goal.py โ ๊ฒ์ฆ๊ธฐ ํ๊ท ํ
์คํธ(ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง). python3 scripts/test_validate_goal.py๋ก 14๊ฐ ํฝ์ค์ฒ(ํต๊ณผ/๊ฒฝ๊ณ /์๋ฌ)๋ฅผ ๊ฒ์ฌ. ๊ฒ์ฆ๊ธฐ๋ฅผ ์์ ํ๋ฉด ๋ฐ๋์ ๋๋ ค ํ๊ท๋ฅผ ๋ง๋๋ค.
Assets
assets/goal.schema.json โ ๊ฒ์ฆยท์ฐธ์กฐ์ฉ JSON ์คํค๋ง
Settings (๊ฐ๋ณ ์์)
| ์ค์ | ๊ธฐ๋ณธ๊ฐ | ๋ณ๊ฒฝ ๋ฐฉ๋ฒ |
|---|
| ์ง๋ฌธ ์ด์ | 20๊ฐ ํ โ ์ถ์ ํก์ + ๊ฐ์ง์น๊ธฐ(๋ณดํต 4~8) | "๋ค ๋ฌผ์ด๋ด์ค"(์ถ์ ๋๊ธฐ) / "์ต์๋ง ๋ฌผ์ด์ค"๋ก ์์ฒญ |
| ์ถ๋ ฅ ์์น | ./goal.json | ์ธํฐ๋ทฐ ์ค ๊ฒฝ๋ก ์ง์ |
| Loop ํ๊น | Claude Code /goal (goal_command ๊ทธ๋๋ก) | "ouroboros seed๋ก" / "/loop ํ๋กฌํํธํ์ผ๋ก" ์์ฒญ ์ references/loop-formats.md ๋งคํ์ผ๋ก ๋ณํ |