| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| Invoke | /dev:unstuck |
| Category | dev-cycle |
| Complexity | moderate |
/dev:unstuck โ ๋งํ์ ๋ ์๊ฐ์ ๋ฐ๊ฟ์ฃผ๋ "๊ด์ ์ ํ ํ์"#
๊ฐ์ ์์ ์ ๋ฐ๋ณตํ๋ค ๋งํ ์์ ์, ์๋ก ๋ค๋ฅธ 5๋ช ์ ๊ด์ ์ผ๋ก ๋ค์ ๋ฐ๋ผ๋ณด๊ฒ ํด ์ฃผ๋ ์ํฌํ๋ก
ํ๋ง๋๋ก#
์์ ์ด ๊ฐ์ ์๋ฆฌ์์ ๊ณ์ ๋งํ์ ๋ โ ๊ฐ์ ์์ ์ ๋ช ๋ฒ์ด๋ ์๋ํ๋๋ฐ ๋๊ฐ์ด ์คํจํ ๋ โ ์๋ก ๋ค๋ฅธ ์ฌ๊ณ ๋ฐฉ์์ ๊ฐ์ง 5๋ช ์ "๊ด์ ์ ํ๊ฐ"๋ฅผ ๋ถ๋ฌ "๋ค๋ฅด๊ฒ ๋ณด๋ ๋ฒ" ์ ๋ฐ์์ค๋ ๋ช ๋ น์ ๋๋ค. ๋งํ ๋ฌธ์ ์์์ ์น๊ตฌ 5๋ช ์๊ฒ "์ด๊ฑฐ ์ด๋ป๊ฒ ๋ด?"๋ผ๊ณ ๋ฌผ์ด๋ณด๋ ํ์๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ๋จ, ๋ต์ ๋์ ์ ํด์ฃผ์ง๋ ์์ต๋๋ค โ ์ ํ์ ๋น์ ๋ชซ์ ๋๋ค.
๋๊ฐยท์ธ์ ์ฐ๋์#
- ๊ฐ์ ์๋ฌ๋ฅผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก N๋ฒ ๊ณ ์ณค๋๋ฐ๋ ๊ณ์ ๋๊ฐ์ด ์คํจํ ๋
- ๋ ์์ ์ฌ์ด๋ฅผ ์๋ค ๊ฐ๋ค(A ๊ณ ์น๋ฉด B ๊นจ์ง๊ณ , B ๊ณ ์น๋ฉด A ๊นจ์ง๊ณ ) ํ๋ฉฐ ์ง๋ํ ๋
- "๋ญ๊ฐ ์ฌ์ค ํ๋๊ฐ ๋น์ด ์๋๋ฐ ๊ทธ๊ฒ ๋ญ์ง ๋ชจ๋ฅด๊ฒ ๋ค" ์ถ์ ๋
-
์๋ํ ๋ฐฐ์น(
/dev:batch)๊ฐ ํ Story์์ ๊ฐ์ ์คํจ๋ฅผ ๋ฐ๋ณตํด ์ค์ค๋ก ๊ด์ ์ ํ์ ํธ์ถํ ๋ (์ด๋๋ ์ฌ๋์ด ๋ถ๋ฅด์ง ์์๋ ์๋์ผ๋ก ํธ์ถ๋ฉ๋๋ค)
๐ "๋ ์ด์ฌํ ๋ค์ ์๋"๊ฐ ์๋๋ผ "๋ค๋ฅธ ๊ฐ๋๋ก ๋ค์ ๋ณด๊ธฐ" ๊ฐ ํ์ํ ๋ ์ฐ๋ ๋๊ตฌ์ ๋๋ค.
๋ฌด์์ ํด์ฃผ๋์#
5๋ช ์ ๊ด์ (ํ๋ฅด์๋)์ผ๋ก ๋งํ ์ํฉ์ ๋ค์ ๋ฐ๋ผ๋ด ๋๋ค. ๊ฐ ํ๋ฅด์๋๋ ํ ๊ฐ์ง ์ฌ๊ณ ๋ฐฉ์๋ง ๊ฐ์ง๋๋ค.
- HACKER โ ๊ฐ์ ์๋ฆฌ ๊ทธ๋งํ๊ณ , ๋งํ ์ง์ ์ ๋ผ์ด๋ด ์ฐํํ๋ผ
- RESEARCHER โ ๋ ธ๋ ฅ์ด ์๋๋ผ ์ฌ์ค ํ๋๊ฐ ๋น์ด ์๋ค, ๊ฐ์ ์ฐพ์์๋ผ
- SIMPLIFIER โ ๊ณผํ๊ฒ ์ง์ด์ก๋ค, ๋ํ์ง ๋ง๊ณ ๋์ด๋ด๋ผ
- ARCHITECT โ ๊ณ์ ์๋ค ๊ฐ๋ค ํ๋ค, ๊ตฌ์กฐ๊ฐ ํ๋ ธ์ผ๋ ๋ค์ ์ง๋ผ
- CONTRARIAN โ (๊ธฐ๋ณธ ํด๋ฐฑ) ์ ์ ์์ฒด๋ฅผ ์์ฌํ๋ผ
์ด 5๋ช
์ ์ ์ยท์ง๋ฌธ์ ํ ๊ณณ(references/LATERAL_PERSONAS.md)์ ๋ชจ์ฌ ์์ด, ์ด๋์ ๋ถ๋ฅด๋ ๊ฐ์ ํ๋ฅด์๋๊ฐ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค.
์ด๋ป๊ฒ ์ฐ๋์#
# ํ ๋ก ๋ชจ๋ (๊ธฐ๋ณธ) โ 5๋ช
์ ์์ด ๊ฐ์ ๊ด์ ์ ๋ด๊ณ , ์ข
ํฉ ์ ๋ฆฌ
/dev:unstuck
# ์๋ก ๋ชจ๋ โ ํน์ ํ๋ฅด์๋ ํ ๋ช
๋ง ๋ถ๋ฌ ๋น ๋ฅด๊ฒ ๊ด์ ์ ํ
/dev:unstuck solo hacker
/dev:unstuck solo architect
- ์ธ์ ์์ด ๋ถ๋ฅด๋ฉด ํ ๋ก (debate) ๋ชจ๋ ์ ๋๋ค โ 5๋ช ์ด ๋์์ ์๊ฒฌ์ ๋ด๊ณ ๋ง์ง๋ง์ ์ข ํฉํด ์ค๋๋ค.
-
solo <ํ๋ฅด์๋>๋ก ๋ถ๋ฅด๋ฉด ํด๋น ํ๋ฅด์๋ ํ ๋ช ๋ง ๋น ๋ฅด๊ฒ ๊ด์ ์ ์ ํํด ์ค๋๋ค (ํ๋ฅด์๋:hacker/researcher/simplifier/architect/contrarian). - ์ด๋ ๋ชจ๋๋ ๋งํ ์ํฉ ์ ๋ณด(๋ฌด์์ ํ๋ ค ํ๋ / ๋ฌด์์ ๋ฐ๋ณตํ๋ / ๋ฌด์์ ์๋ํ๊ณ ์ด๋ป๊ฒ ์คํจํ๋)๋ฅผ ํจ๊ป ์ฃผ๋ฉด ๋ ์ ํํฉ๋๋ค.
์์์ ๋ฌด์จ ์ผ์ด ๋ฒ์ด์ง๋์#
- ์ํฉ ์ ๋ฆฌ โ "๋ฌด์์ ํ๋ ค๋์ง(problem_context) / ์ด๋ค ๋ฐฉ๋ฒ์ ๋ฐ๋ณตํ๋์ง(current_approach) / ๋ฌด์์ ์๋ํ๊ณ ์ด๋ป๊ฒ ์คํจํ๋์ง(failed_attempts)"๋ฅผ ๋ชจ์๋๋ค.
-
๊ด์ ์ ํ
- ์๋ก ๋ชจ๋: ์ง์ ํ ํ๋ฅด์๋ ์ ์๋ฅผ ์ฝ๊ณ , ๊ทธ ํ ๋ช ์ ์๊ฐ์ผ๋ก ๋งํ ์ง์ ์ ๋ค์ ์ง์ ํฉ๋๋ค.
- ํ ๋ก ๋ชจ๋: 5๋ช ์ ๋์์(๋ณ๋ ฌ) ๋ถ๋ฌ ๊ฐ์ reframing์ ๋ฐ์์ต๋๋ค.
- ์ข ํฉ โ ํ ๋ก ๋ชจ๋๋ 5๋ช ์ ์๊ฒฌ์ ์ ํ์ง(Options) / ์๋ก ์๊ฐ๋ฆฐ ์ง์ (Disagreements) / ์ถ์ฒ(Recommended) ์ผ๋ก ๋ฌถ์ด ๋ณด์ฌ์ค๋๋ค.
- ๋ฉ์ถค โ ์ฌ๊ธฐ์ ๋ฉ์ถฅ๋๋ค. ๊ฒฐ๋ก (verdict)์ ์๋์ผ๋ก ๋ด์ง ์์ต๋๋ค โ ์ด๋ค ์ ํ์ง๋ฅผ ํํ ์ง๋ ์ฌ๋์ด ์ ํฉ๋๋ค.
ํต์ฌ: ์ด ๋ช ๋ น์ ์ ํ์ง๋ฅผ ์ฃผ๋ ๊ฒ์ด์ง ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ด ์๋๋๋ค.
๋๋๋ฉด ๋ค์์?#
- ๋ง์์ ๋๋ ์ ํ์ง๊ฐ ์์ผ๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก ์ง์ ์์ ์ ์ด์ด๊ฐ๋ฉด ๋ฉ๋๋ค.
- ๊ทธ๋๋ ์ ํ๋ฆฌ๋ฉด ๋ค๋ฅธ ํ๋ฅด์๋๋ก ํ ๋ฒ ๋(
solo) ๋๋ฆฌ๊ฑฐ๋, ์ ์ ์์ฒด๊ฐ ์์ฌ๋๋ฉด ์ฌ๊ณ ๋ณต๊ธฐ(/debrief)๋ก ๋์ด๊ฐ๋๋ค. -
๋ฐฐ์น ์๋ํ๊ฐ ํธ์ถํ ๊ฒฝ์ฐ, ๊ด์ ์ ํ์ ๋ค ์จ๋ ์ ํ๋ฆฌ๋ฉด ํด๋น Story๋
BLOCKED('unstuck_exhausted')๋ก ํ์๋๊ณ ๋๋จธ์ง ๋ฐฐ์น๋ ๊ณ์ ์งํ๋ฉ๋๋ค (Epic ์ ์ฒด๊ฐ ๋ฉ์ถ์ง ์์ต๋๋ค).
โ๏ธ ์์ธ ์ต์ ยท์คํ ๋ช ์ธ (๊ฐ๋ฐ์ / AI ์์ด์ ํธ์ฉ)
Triggers#
- ๋์ผ ์ ๋ต์ ๋ฐ๋ณตํ๋๋ฐ ๋์ผํ๊ฒ ์คํจํ๋ stuck loop
/dev:batch/sequential-workflow์ stall budget 2๋จ๊ณ์์ ์๋ ํธ์ถ- ์ฌ๋์ด ๋ช ์์ ์ผ๋ก ๊ด์ ์ ํ์ ์์ฒญ
Usage#
/dev:unstuck # debate ๋ชจ๋ (๊ธฐ๋ณธ): 5 ํ๋ฅด์๋ ๋ณ๋ ฌ
/dev:unstuck solo < persona > # solo ๋ชจ๋: ๋จ์ผ ํ๋ฅด์๋Parameters#
| Parameter | Required | Description |
|---|---|---|
mode | โ | solo ๋๋ ์๋ต(=debate). ๊ธฐ๋ณธ debate |
<persona> | solo์ผ ๋ โ | hacker / researcher / simplifier / architect / contrarian |
Stuck Context (์ ๋ชจ๋ ๊ณตํต ์ ๋ ฅ)#
| ํ๋ | ์๋ฏธ |
|---|---|
problem_context | ๋ฌ์ฑํ๋ ค๋ ๋ชฉํ |
current_approach | ๋ฐ๋ณตํ๊ณ ์๋ ์ ๋ต |
failed_attempts | ์ด๋ฏธ ์๋ํ ๊ฒ + ๊ฐ๊ฐ ์ด๋ป๊ฒ ์คํจํ๋์ง |
Persona Source of Truth#
5 ํ๋ฅด์๋(HACKER / RESEARCHER / SIMPLIFIER / ARCHITECT / CONTRARIAN)์ mindsetยทaffinityยทprobing questions๋ ๋จ์ผ ์ ์ ํ์ผ์ ๋ฐ๋ฅธ๋ค:
plugins/cc-spec-clarity/references/LATERAL_PERSONAS.md
์ด ๋ช
๋ น๊ณผ lateral-thinker ์์ด์ ํธ๋ ๊ทธ ํ์ผ์ READํด์ ์ด๋ค โ ํ๋ฅด์๋ ๋ฌธ์ฅ์ ์ฌ๊ธฐ์ ๋ค์ ์ฐ์ง ์๋๋ค.
LLM-SEMANTIC, never lexical#
"๊ฐ์ ์คํจ๊ฐ ๋ฐ๋ณต๋๋๊ฐ?" ์ "์ด๋ค ์ฆ์ โ ์ด๋ค ํ๋ฅด์๋" ํ์ ์ ์ํฉ์ ์๋ฏธ์ ๋ํ LLM ํ๋จ์ผ๋ก ํ๋ค. ์๋ฌ ํ ์คํธ์ ๋ฌธ์์ด/ํ ํฐ ๊ฒน์นจ์ผ๋ก ๋น๊ตํ์ง ์๋๋ค. ํ๊ตญ์ด๋ ๋์ด์ฐ๊ธฐ ๊ฒฝ๊ณ๊ฐ ์๊ณ ์กฐ์ฌ๊ฐ ๋ถ์ด, ๊ฐ์ ๋ธ๋ก์ปค๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ๋ก๊ทธ๊ฐ ํ ํฐ์ ๊ฑฐ์ ๊ณต์ ํ์ง ์์ ์ ์๋ค("๋น๋๊ฐ ์คํจ" vs "๋น๋๋ ๋ ์คํจ"). ์๋ฏธ๋ก ํ๋จํ๋ผ.
Solo Mode#
1. < persona > ๊ฒ์ฆ (5๊ฐ ์ค ํ๋). ๋ฏธ์ง์ /์คํ โ affinity ๋ผ์ฐํ
์ผ๋ก ์ถ์ (๊ธฐ๋ณธ CONTRARIAN)ํ๊ณ ๋ฌด์์ ๊ณจ๋๋์ง ๋ช
์.
2. LATERAL_PERSONAS.md ์์ ํด๋น ํ๋ฅด์๋ ํ ๋ก๋.
3. stuck context ์ ํ๋ฅด์๋ 3 probing questions ์ ์ฉ.
4. reframing 1๊ฑด ์ถ๋ ฅ (์ฌ์๋ ์๋ โ ์ข
๋ฅ๊ฐ ๋ค๋ฅธ next move).
5. STOP. verdict ์์.๋จ์ผ ํธ์ถ์ lateral-thinker ์์ด์ ํธ๋ก ์์ํ ์๋, ์ธ๋ผ์ธ์ผ๋ก ์ฒ๋ฆฌํ ์๋ ์๋ค:
await Task({
subagent_type: " lateral-thinker " ,
prompt: `
persona: ${persona} // e.g. HACKER
problem_context: ${problem_context}
current_approach: ${current_approach}
failed_attempts: ${failed_attempts}
`
});Debate Mode (default)#
5 ํ๋ฅด์๋๋ฅผ ๋ณ๋ ฌ fan-outํ๋ค. ๊ฐ ํธ์ถ์ subagent_type: "lateral-thinker" (์ ์๋ ์์ด์ ํธ, ํ๋ฅด์๋ ์ธ์ ์ ๋ฌ) ๋๋ ๋นํธ์ธ general-purpose ์ค ํ๋๋ก ๋ณด๋ธ๋ค โ ๋ ๋ค resolve๋๋ค. ์ปค์คํ
๋ฏธ์ ์ ํ์
์ ์ฐ์ง ์๋๋ค. ์ธ๋ถ lateral-thinking MCP ๋๊ตฌ๋ ์ฐธ์กฐํ์ง ์๋๋ค โ Task ๋ง ์ฌ์ฉํ๋ค.
const PERSONAS = [ " HACKER " , " RESEARCHER " , " SIMPLIFIER " , " ARCHITECT " , " CONTRARIAN " ];
// 5๊ฐ ๋์ ์คํ (ํ ๋ฉ์์ง์์ ๋ณ๋ ฌ Task)
const reframings = await Promise.all(
PERSONAS.map((persona) = >
Task({
subagent_type: " lateral-thinker " , // ๋๋ " general-purpose "
prompt: `
persona: ${persona}
problem_context: ${problem_context}
current_approach: ${current_approach}
failed_attempts: ${failed_attempts}
references/LATERAL_PERSONAS.md ์ ${persona} ์ ์๋ฅผ ์ฝ๊ณ ,
์ด stuck context ๋ฅผ ๊ทธ ์๊ฐ์ผ๋ก reframing ํ๋ผ. verdict ๊ธ์ง.
`,
})
)
);
// ์ข
ํฉ (synthesize) โ STOPSynthesis Output#
5๋ช ์ reframing์ ๋ฐ์ ์๋๋ก ๋ฌถ๊ณ ๋ฉ์ถ๋ค:
## /dev:unstuck โ Debate Synthesis
### Options
- [HACKER] {next move}
- [RESEARCHER] {next move}
- [SIMPLIFIER] {next move}
- [ARCHITECT] {next move}
- [CONTRARIAN] {next move}
### Disagreements
- {ํ๋ฅด์๋ ๊ฐ ์ถฉ๋ํ๋ ์ง๋จ/์ ์ โ ์ด๋์ ์๊ฐ๋ฆฌ๋๊ฐ}
### Recommended
- {์ํฉ์ ๊ฐ์ฅ ์ค๋๋ ฅ ์๋ ์ ํ์ง 1โ2๊ฐ + ์ด์ }
> Do not auto-emit a verdict; the verdict is the user ' s.Synthesis๋ ์ถ์ฒ๊น์ง๋ง. ๊ฒฐ๋ก (์ด๋ค ์ต์ ์ ์คํํ ์ง)์ ์๋์ผ๋ก ๋ด์ง ์๋๋ค โ ์ฌ์ฉ์๊ฐ ์ ํ๋ค.
Affinity Routing (solo ํ๋ฅด์๋ ๋ฏธ์ง์ ์)#
references/LATERAL_PERSONAS.md ์ affinity/symptom ํ๋ฅผ ์๋ฏธ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฉ (๊ธฐ๋ณธ CONTRARIAN):
| ์ฆ์ (semantic) | Persona |
|---|---|
| ๊ฐ์ ์๋ฌยท๊ฐ์ ์์ Nํ ๋ฐ๋ณต | HACKER |
| ํ์ธ ์ ๋ ์ฌ์คยท๊ฐ์ ๋๋ฌธ์ ๋งํ | RESEARCHER |
| ๊ณผ์ค๊ณยท๋ณต์ก์ฑ์ ๋ฌปํ ๋ธ๋ก์ปค | SIMPLIFIER |
| ์์ ์ฌ์ด ์ง๋(flip-flop) | ARCHITECT |
| ๋ถ๋ฅ ๋ถ๊ฐยท์ ์ ์์ฒด ์์ฌ (๊ธฐ๋ณธ) | CONTRARIAN |
Key Rules#
- No verdict: ์ ํ์งยท์ถ์ฒ๊น์ง๋ง. ๊ฒฐ์ ์ ์ฌ์ฉ์.
- Reframe, not retry: ๋ชจ๋ next move ๋
failed_attempts์ ์ข ๋ฅ๊ฐ ๋ฌ๋ผ์ผ ํ๋ค. - Semantic matching: stuck/affinity ํ์ ์ ์๋ฏธ ๊ธฐ๋ฐ, ์ดํ ๊ฒน์นจ ๊ธ์ง (Korean-first).
- Shared definitions: ํ๋ฅด์๋ ์ ์๋
references/LATERAL_PERSONAS.md๋จ์ผ ์ถ์ฒ. - Resolvable subagents only:
lateral-thinker๋๋general-purpose๋ง ์ฌ์ฉ.
Related Commands#
/dev:batchโ stall budget 2๋จ๊ณ์์ ์ด ๋ช ๋ น์ ์๋ ํธ์ถ/debriefโ ๊ด์ ์ ํ์ผ๋ก๋ ์ ํ๋ฆฐ ์ฌ๊ณ ์ ์ฌํ ๋ณต๊ธฐreferences/LATERAL_PERSONAS.mdโ 5 ํ๋ฅด์๋ ๊ณต์ ์ ์