# πŸ“‘ 자율 반볡 μ •μ œ 루프 μŠ€ν‚¬ (`multi-agent-mux-loop`) 개발 κ³„νšμ„œ 이 λ¬Έμ„œλŠ” λ©€ν‹° μ—μ΄μ „νŠΈ 자율 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 루프(`multi-agent-mux-loop`)의 **μ΅œμ’… μ•ˆμ „/κ°€λ“œλ ˆμΌ μ˜΅μ…˜ κ·œκ²©μ„ ν¬ν•¨ν•˜μ—¬ μ™„λ²½ν•˜κ²Œ μ •μ œλœ λ§ˆμŠ€ν„° κ³„νšμ„œ**μž…λ‹ˆλ‹€. 리뷰어 μ—μ΄μ „νŠΈλ“€μ˜ ꡐ차 2μ°¨ ν”Όλ“œλ°±(Verdict νŒŒμ‹±, μžκ°€ 리뷰 λ°©μ§€, νƒ€μž„μ•„μ›ƒ 보강)을 μ™„λ²½ν•˜κ²Œ μˆ˜λ ΄ν•˜μ—¬ μ •κ΅ν•˜κ²Œ κ°±μ‹ λ˜μ—ˆμŠ΅λ‹ˆλ‹€. --- ## 1. βš™οΈ μ΅œμ’… μŠ€ν‚¬ λͺ…λ Ή 및 전체 μ˜΅μ…˜ μ„ΈνŠΈ λͺ…μ„Έ (CLI Spec) ```bash $ bash .agents/skills/multi-agent-mux-loop/scripts/run_loop.sh \ [--plan] \ [--plan-talk N] \ [--reviewer "reviewer-1,reviewer-2"] \ [--all-reviewer] \ [--max-loop N] \ [--verbose] \ [--cleanup] \ --target-agent "" \ --task "μˆ˜ν–‰ν•  μž‘μ—… λͺ©ν‘œ" ``` ### πŸ“₯ μ˜΅μ…˜ 상세 리슀트 및 κ°€λ“œλ ˆμΌ μ œμ•½ | μ˜΅μ…˜λͺ… | κΈ°λ³Έκ°’ | λΆ„λ₯˜ | μ—­ν•  및 μ•ˆμ „ 쑰치 | |---|---|---|---| | `--plan` | λΉ„ν™œμ„± | κΈ°λŠ₯ | Planner μ—μ΄μ „νŠΈλ₯Ό κΈ°λ™ν•˜μ—¬ ν˜‘λ ₯ κ³„νš 수립 및 ν† λ‘  단계 κ°œμ‹œ. (λΉ„ν™œμ„±ν™” μ‹œ κΈ°μ‘΄ κ³„νšμ„œλ₯Ό λ‘œλ“œν•˜λ©°, κ³„νšμ„œκ°€ μ—†λŠ” 경우 Creatorκ°€ 직접 κ³„νš 및 섀계λ₯Ό μˆ˜λ¦½ν•˜μ—¬ ꡬ동) | | `--plan-talk N` | `1` | μ•ˆμ „ | ν”Œλž˜λ„ˆ-μž‘μ—…μž κ°„ ν† λ‘  왕볡 횟수 μƒν•œμ„ . 토큰 λ‚­λΉ„ λ¬΄ν•œ ν† λ‘  차단. | | `--reviewer "A,B"` | λΉ„ν™œμ„± | κΈ°λŠ₯ | μ§€μ •λœ peer 리뷰어 μ—μ΄μ „νŠΈ μ„Έμ…˜(λ“€)에 ν”Όλ“œλ°± 루프 의뒰 (μ£Ό μž‘μ—…μž μ„Έμ…˜μ€ κ°•μ œ μ œμ™Έ). | | `--all-reviewer` | λΉ„ν™œμ„± | κΈ°λŠ₯ | λ ˆμ§€μŠ€νŠΈλ¦¬ μƒμ˜ λͺ¨λ“  `role: reviewer` μ„Έμ…˜λ“€μ„ μ „μˆ˜ μžλ™ μˆ˜μ§‘ν•˜μ—¬ 의뒰 (μ£Ό μž‘μ—…μž μ„Έμ…˜μ€ κ°•μ œ μ œμ™Έ). | | `--max-loop N` | `3` | **μ•ˆμ „ (ν•„μˆ˜)** | 반렀(`NOT PASS`) μ‹œ μ΅œλŒ€ μˆ˜μ • 횟수 μ œν•œ. **토큰 λΉ„μš© 폭주 λ°©μ§€ κ°€λ“œλ ˆμΌ.** | | `--verbose` | λΉ„ν™œμ„± | 편의 | 단계별 νƒ€μž„λΌμΈ μ§„ν–‰ μƒνƒœ 및 작 λ§€ν•‘ 둜그의 μ‹€μ‹œκ°„ 상세 좜λ ₯. | | `--cleanup` | λΉ„ν™œμ„± | 편의 | 루프 μ™„λ£Œ ν›„ μ„±κ³΅ν•œ μž„μ‹œ 작 파일(`.mam/jobs/`)λ“€μ˜ μžλ™ 클린업 μ²­μ†Œ. | | `--target-agent` | (ν•„μˆ˜) | 인프라 | κ΅¬ν˜„μ„ μ²˜λ¦¬ν•  μ£Ό 개발자(Creator) μ„Έμ…˜ 이름 λͺ…μ‹œ. | | `--task` | (ν•„μˆ˜) | 인프라 | 자율 루프에 전달할 μ΅œμ’… κ΅¬ν˜„ μ§€μ‹œμ‚¬ν•­ ν…μŠ€νŠΈ. | --- ## πŸ”„ 2. 자율 μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ 상세 νŒŒμ΄ν”„λΌμΈ (Sequence Flow) ```mermaid sequenceDiagram autonumber actor User as μ‚¬μš©μž / run_loop.sh participant Plan as Planner Agent participant Dev as Creator Agent participant Rev as Reviewer Agents User->>User: run_loop.sh 기동 (μ˜΅μ…˜ μ„ΈνŠΈ 검증 및 λŒ€μƒ μ˜ˆμ™Έ 필터링) %% Planning & Challenge discussion alt --plan μ§€μ • μ‹œ User->>Plan: delegate-job (κ³„νš 수립 μ§€μ‹œ) Plan-->>User: κ³„νšμ„œ λ„μΆœ μ™„λ£Œ loop μ§€μ •λœ --plan-talk 횟수 λ™μ•ˆ 반볡 (κΈ°λ³Έ 1회) User->>Dev: delegate-job (κ³„νšμ„œ λΉ„νŒμ  κ²€ν†  및 이의제기 μ§€μ‹œ) Dev->>Plan: κ³„νšμ„œμ˜ 맹점 1κ°€μ§€ 이상 Challenge 메일 κ΅ν™˜ Plan-->>Dev: μˆ˜μ • 반영 및 μ΅œμ’… κ³„νš ν•©μ˜ end else --plan λ―Έμ§€μ • alt κΈ°μ‘΄ κ³„νš 쑴재 μ‹œ User->>Dev: κΈ°μ‘΄ κ³„νšμ„œ λ‘œλ“œ 및 κ΅¬ν˜„ μ§€μ‹œ else κ³„νš 미쑴재 μ‹œ User->>Dev: Self-planning μ§€μ‹œ (슀슀둜 κ³„νš/섀계 μˆ˜λ¦½ν•˜μ—¬ κ΅¬ν˜„) end end %% Execution User->>Dev: delegate-job (μž‘μ—… μ§€μ‹œ) Dev-->>User: κ΅¬ν˜„ μ™„λ£Œ (git diff λ°œμƒ) %% Peer-Review Loop with Max-Loop constraint loop μ΅œλŒ€ --max-loop 횟수 λ™μ•ˆ 반볡 (κΈ°λ³Έ 3회) alt 리뷰어 μ˜΅μ…˜ μ§€μ • μ‹œ (--reviewer or --all-reviewer) User->>Rev: delegate-job (정식 peer μ½”λ“œ 리뷰 μœ„μž„) Rev-->>User: [VERDICT: PASS] λ˜λŠ” [VERDICT: NOT PASS] νƒœκ·Έ 리포트 제좜 alt 100% PASS μΆ©μ‘± μ‹œ Note over User,Rev: 루프 μ¦‰μ‹œ νƒˆμΆœ (성곡) else NOT PASS κ²€μΆœ μ‹œ User->>Dev: ν”Όλ“œλ°± 전달 및 μˆ˜μ • μ§€μ‹œ (ν”Όλ“œλ°± λ‚œμ΄λ„μ— 따라 Planner 우회 κ³„νš κ°±μ‹  적용) end else 리뷰어 λ―Έμ§€μ • User->>Dev: Self-Review μ§€μ‹œ (μžκ°€ 검증 및 자율 μ’…κ²°) end end %% Cleanup & Final Report alt --cleanup μ§€μ • μ‹œ User->>User: μž„μ‹œ 작 폴더 μ²­μ†Œ end User-->>User: μ΅œμ’… κ²°κ³Ό μš”μ•½ 좜λ ₯ 및 마감 ``` --- ## πŸ› οΈ 3. 개발 둜직 및 μ•ˆμ „ νŒŒμ‹± 체크포인트 ### 1) Verdict νŒμ • νŒŒμ„œ μ•ˆμ „ κ°€μ΄λ“œλΌμΈ (Fail-Closed & Precedence) * **NOT PASS μš°μ„ κΆŒ**: 리뷰 리포트 λ³Έλ¬Έ 내에 `[VERDICT: NOT PASS]` κ°€ 단 ν•œ λ²ˆμ΄λΌλ„ λ“±μž₯ν•˜λ©΄, `[VERDICT: PASS]` 문ꡬ 쑴재 여뢀와 상관없이 무쑰건 **NOT PASS**둜 μ²˜λ¦¬ν•˜μ—¬ μ˜€λ… 필터링을 λ°©μ§€ν•©λ‹ˆλ‹€. * **Fail-Closed κΈ°λ³Έ μ‹€νŒ¨μ£Όμ˜**: νƒœκ·Έ λˆ„λ½μ΄λ‚˜ malformed 리포트둜 인해 두 토큰이 λͺ¨λ‘ μŠ€μΊ”λ˜μ§€ μ•Šμ„ 경우, ν†΅κ³Όμ‹œν‚€μ§€ μ•Šκ³  **NOT PASS(μ‹€νŒ¨)** 둜 μ·¨κΈ‰ν•˜μ—¬ 루프 λ¬΄ν•œ 기동 및 맹점 톡과λ₯Ό μ›μ²œ μ°¨λ‹¨ν•©λ‹ˆλ‹€. * **ν…œν”Œλ¦Ώ λͺ…μ‹œ**: 리뷰어 μœ„μž„ 작 λ°œν–‰ μ‹œ, μ΅œμ’… κ²°κ³Ό μš”μ•½ 행에 μ •ν˜•ν™”λœ νƒœκ·Έ `[VERDICT: PASS]` ν˜Ήμ€ `[VERDICT: NOT PASS]`λ₯Ό 리포트 λ³Έλ¬Έ ν•˜λ‹¨μ— λ°˜λ“œμ‹œ κΈ°μž¬ν•˜λ„λ‘ ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώμ— λͺ…μ‹œμ μœΌλ‘œ μΆ”κ°€ν•©λ‹ˆλ‹€. ### 2) μžκ°€ 리뷰 λ°©μ§€ κ°€λ“œ (Exclusion Rule) * `--all-reviewer` ν˜Ήμ€ `--reviewer` λͺ©λ‘μ„ μ†Œμ§‘ν•  λ•Œ, ν•΄λ‹Ή μž‘μ—…μ„ μˆ˜ν–‰ν•œ λŒ€μƒ 개발자 μ„Έμ…˜μΈ `$TARGET_AGENT` λŠ” **리뷰어 λ§€ν•‘ λͺ©λ‘μ—μ„œ κ°•μ œλ‘œ 배제(Exclude)** ν•˜λ„λ‘ νŒŒμ‹± μ‰˜ μŠ€ν¬λ¦½νŠΈμ—μ„œ 필터링을 μ μš©ν•©λ‹ˆλ‹€. ### 3) μ‰˜ μ˜ˆμ™Έ 처리 및 λŒ€κΈ° νƒ€μž„μ•„μ›ƒ (Error Guard & Timeout) * `grep -oP` λ‚˜ `find | head` μ‹œ 맀칭이 없을 λ•Œ `set -eo pipefail`에 μ˜ν•΄ μ‰˜ 슀크립트 전체가 λΉ„λͺ…νš‘μ‚¬ν•˜μ§€ μ•Šλ„λ‘ `|| true` κ°€λ“œ 및 곡백 체크문을 μ—„λ°€νžˆ μ μš©ν•©λ‹ˆλ‹€. * `wait_for_job` ν•¨μˆ˜ μ‹€ν–‰ μ‹œ νƒ€μž„μ•„μ›ƒ κ°€λ“œλ ˆμΌ(`WAIT_TIMEOUT`, κΈ°λ³Έκ°’ 3600초)을 λͺ…μ‹œμ μœΌλ‘œ μ„€κ³„ν•˜μ—¬ λ¬΄ν•œ 루프 ν–‰(Hang) ν˜„μƒμ„ μ°¨λ‹¨ν•©λ‹ˆλ‹€.