# ๐Ÿ› ๏ธ Multi-Agent Mux (MAM) ์„ค์น˜ ๋ฐ ์ ์šฉ ๊ฐ€์ด๋“œ MAM์€ ๋‹จ์ผ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์ƒ์—์„œ ๋ณต์ˆ˜์˜ ์—์ด์ „ํŠธ(Claude, Cline, Agy, Hermes ๋“ฑ)๋“ค์ด ์„œ๋กœ์˜ ์ƒํƒœ๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๊ณ  ํ˜‘์—…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ์„ธ์Šค ๊ฒฉ๋ฆฌ ๋ฐ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ€์ด๋“œ๋Š” ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ/๋ ˆํฌ์ง€ํ† ๋ฆฌ์— MAM์„ ์‹ ์†ํ•˜๊ฒŒ ๋„์ž…ํ•˜๊ณ  ์ ์šฉํ•˜๋Š” ์ ˆ์ฐจ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. --- ## 1. โš™๏ธ ์‚ฌ์ „ ์š”๊ตฌ์‚ฌํ•ญ MAM ์Šคํ‚ฌ ๋ฐ ์Šคํฌ๋ฆฝํŠธ๋“ค์€ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ์˜ ๋‹ค์Œ ๋„๊ตฌ๋“ค์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ์ „์— ํ™•์ธํ•ด ์ฃผ์„ธ์š”. * **tmux**: ์—์ด์ „ํŠธ๋ฅผ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ๊ฒฉ๋ฆฌ Pane์—์„œ ๊ตฌ๋™ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ์„ธ์Šค ์ปจํ…Œ์ด๋„ˆ * **python3**: ์„ธ์…˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ(YAML/SQLite DB) ํŒŒ์‹ฑ ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ * **sqlite3**: ํŠธ๋žœ์žญ์…˜ ์•ˆ์ „์„ฑ ๋ฐ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๋ฝ ๋ณด์žฅ * **rsync**: `.agents/` ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ๋ฐ ์Šคํ‚ฌ ํด๋” ๋ณต์ œ ๋ฐ ๋™๊ธฐํ™” * **python3-yaml (pyyaml)**: ์„ธ์…˜ ๋ฐ์ดํ„ฐ YAML ์ €์žฅ ๋ฐ ๋กœ๋“œ ์˜์กด์„ฑ (`pip install pyyaml`) --- ## 2. ๐Ÿš€ ์ž๋™ ์„ค์น˜ ๋ฐฉ๋ฒ• MAM์˜ ์ž๋™ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ(`install_mam.sh`)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 10์ดˆ ๋งŒ์— ํ•„์š”ํ•œ ๊ทœ์น™๊ณผ ๋ผ์ดํ”„์‚ฌ์ดํด ํˆดํ‚ท์„ ํƒ€๊ฒŸ ํ”„๋กœ์ ํŠธ์— ์ด์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ MAM ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋ฃจํŠธ์—์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ```bash # ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ• (ํƒ€๊ฒŸ ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ ์ง€์ •) $ bash scripts/install_mam.sh --target /path/to/your/project # ๋งŒ์•ฝ ์ด๋ฏธ ํƒ€๊ฒŸ์— AGENTS.md ๊ฐ€ ์กด์žฌํ•˜์—ฌ ๊ฐ•์ œ๋กœ ๋ฎ์–ด์“ฐ๊ณ  ์‹ถ๋‹ค๋ฉด: $ bash scripts/install_mam.sh --target /path/to/your/project --force ``` ### ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…: 1. **์˜์กด์„ฑ ์ง„๋‹จ**: ์‹œ์Šคํ…œ์— `tmux`, `python3`, `sqlite3` ๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. 2. **๊ทœ์น™ ๋ฐ ์Šคํ‚ฌ ๋ณต์ œ**: ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ฐ€์ด๋“œ(`.agents/` ํ•˜์œ„ ์ „์ฒด)๋ฅผ ํƒ€๊ฒŸ ํ”„๋กœ์ ํŠธ ํ•˜์œ„๋กœ ์ด์‹ํ•ฉ๋‹ˆ๋‹ค. 3. **์ง€์นจ ์ „ํŒŒ**: ์—์ด์ „ํŠธ๊ฐ€ ๋กœ๋“œํ•˜๊ณ  ๋ณต์ข…ํ•  ํ–‰๋™ ์ง€์นจ ๋ฌธ์„œ(`AGENTS.md`)๋ฅผ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. 4. **ํ˜•์ƒ ์ œ์™ธ ์„ค์ •**: ์„ธ์…˜ DB ๋ฐ ๊ฒฉ๋ฆฌ ์บ์‹œ ์ €์žฅ์†Œ์ธ `.mam/` ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ํƒ€๊ฒŸ ํ”„๋กœ์ ํŠธ์˜ `.gitignore` ์— ์ž๋™ ์ฃผ์ž…ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ํ˜•์ƒ ๊ด€๋ฆฌ๋ฅผ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. --- ## 3. ๐ŸŽฏ ํ•ต์‹ฌ ์‚ฌ์šฉ ์›Œํฌํ”Œ๋กœ์šฐ (Quick Start) ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ํƒ€๊ฒŸ ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์—์„œ ์—์ด์ „ํŠธ๋“ค์„ ๊ธฐ๋™ ๋ฐ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ### 1) ์—์ด์ „ํŠธ ๊ฒฉ๋ฆฌ ์„ธ์…˜ ์ƒ์„ฑ (Create) ์ƒˆ๋กœ์šด ์—์ด์ „ํŠธ๋ฅผ ๋…๋ฆฝ๋œ ๊ฒฉ๋ฆฌ ๊ฐ€์ƒ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋„์›๋‹ˆ๋‹ค. ```bash $ bash .agents/skills/multi-agent-mux-create/scripts/create_session.sh \ --workspace "/path/to/your/project" \ --agent claude \ --role developer \ --session my-project-dev-claude \ --isolate \ --tmux-server multi-agent-mux ``` * `--isolate` ์˜ต์…˜์„ ์ฃผ๋ฉด `.mam/agent_homes//` ํ•˜์œ„์— ๋กœ๊ทธ์ธ ๋ฐ ์„ค์ •์€ ์œ ์ง€ํ•˜๋˜ ๋Œ€ํ™” ๋‚ด์—ญ์€ ๊ฒฉ๋ฆฌ๋˜๋Š” ํ™ˆ์ด ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค. ### 2) ์„ธ์…˜ ์ ‘์† (Attach) ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ๊ตฌ๋™๋œ ์—์ด์ „ํŠธ TUI ํ™”๋ฉด์— ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค. (์„ธ์…˜ ์ƒ์„ฑ ์‹œ ์ง€์ •ํ•œ ๋…๋ฆฝ ๊ฒฉ๋ฆฌ tmux ์„œ๋ฒ„ ์†Œ์ผ“ `-L multi-agent-mux` ๋ฅผ ๊ฒฝ์œ ํ•ด ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.) ```bash $ tmux -L multi-agent-mux attach -t my-project-dev-claude ``` * **ํ™”๋ฉด ํƒˆ์ถœ**: ๋Œ€ํ™” ์ค‘ ์„ธ์…˜์„ ์œ ์ง€ํ•œ ์ฑ„ ํ„ฐ๋ฏธ๋„๋กœ ๋Œ์•„์˜ค๋ ค๋ฉด `Ctrl + B`๋ฅผ ๋ˆ„๋ฅธ ๋’ค `D` ํ‚ค๋ฅผ ์ฐจ๋ก€๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ### 3) ์—์ด์ „ํŠธ ์ƒํƒœ ๋ณต์› (Resume) ์„ธ์…˜์ด ์ค‘์ง€๋˜์—ˆ๊ฑฐ๋‚˜, ํ˜ธ์ŠคํŠธ ์žฌ๊ธฐ๋™์œผ๋กœ tmux๊ฐ€ ์†Œ๋ฉธํ•œ ๊ฒฝ์šฐ์—๋„ ์ด์ „ ๋Œ€ํ™” ID ๋ฐ ๊ฒฉ๋ฆฌ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์›์ž์ ์œผ๋กœ ์ด์–ด๋ฐ›์•„ ๋‹ค์‹œ ๊ธฐ๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ```bash # 1๋‹จ๊ณ„: resume/SKILL.md๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๋ณต์› ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ (YAML/DB์˜ UUID ์ž๋™ ๋กœ๋“œ ๋ฐ T4 ๊ฒฉ๋ฆฌ ์žฌ๋ฐ”์ธ๋”ฉ) $ WORKSPACE="/path/to/your/project" $ AGENT="claude" $ SESSION_NAME="my-project-dev-claude" $ UUID=$(bash .agents/skills/multi-agent-mux-resume/scripts/resolve_session_id.sh \ --workspace "$WORKSPACE" --agent "$AGENT" --session "$SESSION_NAME") # 2๋‹จ๊ณ„: ๋™์  ๊ฒฉ๋ฆฌ ์ธ์ž ์ฃผ์ž… ์Šคํฐ ์ˆ˜ํ–‰ ํ›„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ƒํƒœ running ๋ณต๊ตฌ # (์ƒ์„ธ ์‰˜ ๋ช…๋ น์–ด๋Š” .agents/skills/multi-agent-mux-resume/SKILL.md ์ฐธ์กฐ) ``` ### 4) ์„ธ์…˜ ์ข…๋ฃŒ ๋ฐ ์ •๋ฆฌ (Stop / Purge) ์„ธ์…˜์„ ์ •์ง€์‹œํ‚ค๊ณ  ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ๋ฅผ ๋™๊ฒฐํ•˜๊ฑฐ๋‚˜(default), ์™„์ „ํžˆ ์†Œ๋ฉธ์‹œํ‚ต๋‹ˆ๋‹ค(`--purge-conversation`). ```bash # ๋Œ€ํ™” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฑ์—… ๋ฐ ์˜์†ํ™”ํ•˜๊ณ , ์•ˆ์ „ํ•˜๊ฒŒ ์ข…๋ฃŒ (status=stopped) $ bash .agents/skills/multi-agent-mux-stop/scripts/stop_session.sh \ --session my-project-dev-claude --agent claude # ๋Œ€ํ™” ๋‚ด์šฉ ๋ฐ ๊ฒฉ๋ฆฌ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์™„์ „ํžˆ ์ฒญ์†Œํ•˜๊ณ  ์ข…๋ฃŒ (status=terminated, resumable=false) $ bash .agents/skills/multi-agent-mux-stop/scripts/stop_session.sh \ --session my-project-dev-claude --agent claude --purge-conversation --yes ``` --- ## ๐Ÿ›ก๏ธ ํ˜‘์—… ๋ฐ ๋ณด์•ˆ ๊ฐ€์ด๋“œ๋ผ์ธ * MAM์„ ์‚ฌ์šฉํ•  ๋•Œ ๋ชจ๋“  ์—์ด์ „ํŠธ(๊ฐœ๋ฐœ์ž, ๋ฆฌ๋ทฐ์–ด)๋“ค์€ ๋ฃจํŠธ์˜ `AGENTS.md` ์ง€์นจ์„ ์šฐ์„  ์ˆ™์ง€ํ•˜๋„๋ก ์„ค๊ณ„ํ•ด์•ผ ์˜คํƒ๊ณผ ๋ฌด๋ถ„๋ณ„ํ•œ ๋ฆฌํŒฉํ† ๋ง ๋ฒ”๋žŒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ๊ฐ ์—์ด์ „ํŠธ ์—ญํ• ๋ณ„๋กœ ๋ฆฌ๋ทฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋Œ๋ฆด ์‹œ, ์ตœ์ข… ์Šน์ธ ๊ฒฐ๊ณผ ๋ณด๊ณ ์„œ(.md)๋Š” ํ˜•์ƒ ๊ด€๋ฆฌ๊ฐ€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฒ„์ „ ๊ด€๋ฆฌ ๋Œ€์ƒ ๊ฒฝ๋กœ(๊ตฌ์ฒด์ ์œผ๋กœ `.agents/reports//` ๋˜๋Š” `docs/reports/` ๋“ฑ) ํ•˜์œ„๋กœ ์ด๊ด€ ๋ณต์‚ฌํ•˜์—ฌ ์ปค๋ฐ‹ํ•˜๋Š” ๊ทœ์•ฝ(`.agents/MULTI_AGENT_RULES.md`)์„ ์ค€์ˆ˜ํ•ด ์ฃผ์„ธ์š”.