# ๐Ÿ“œ Multi-Agent Mux ๋ฒ„์ „ ์ด๋ ฅ (`VERSIONS.md`) ์ด ๋ฌธ์„œ๋Š” `multi-agent-mux` ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ฒ„์ „๋ณ„ ์ฃผ์š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€, ์•„ํ‚คํ…์ฒ˜ ๊ฐœ์„ , ๋ฒ„๊ทธ ์ˆ˜์ • ๋ฐ ํ’ˆ์งˆ ๊ฒ€์ฆ ์ด๋ ฅ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ“Œ ํ˜„์žฌ ๋ฒ„์ „ ๊ฐœ์š” (Current Release) - **ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „**: `v2.0.0` - **์ตœ์‹  ๋ฆด๋ฆฌ์Šค ์ผ์‹œ**: 2026-08-17 (KST) - **๊ธฐ์ค€ ๋ธŒ๋žœ์น˜**: `main` - **ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜**: - **A-4 Agent Adapter Layer**: 4๋Œ€ ์—์ด์ „ํŠธ(`claude`, `agy`, `hermes`, `cline`) ์ง€์‹ ๊ณ„์ธต ๋‹จ์ผ ์†Œ์Šค ์ธํ„ฐํŽ˜์ด์Šค - **Universal Herdr Session Isolation**: ๋‹จ์ผ Herdr ์„œ๋ฒ„ ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์„ธ์…˜ ๊ฒฉ๋ฆฌ - **O-3 Orchestrator Scope Guard**: ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ์˜ ์ง์ ‘ ์ฝ”๋“œ ๋ณ€์กฐ ๋ฐฉ์ง€ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์œ„์ž„ ํ†ต์ œ - **Tier-1 Fast-Path Lifecycle**: 0ms ์ง€์—ฐ์˜ ๋Œ€ํ™” UUID ์บก์ฒ˜ ๋ฐ ์ดˆ๊ณ ์† ์žฌ๊ฐœ(Resume) --- ## ๐Ÿงญ ์Šคํ‚ฌ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๋งคํŠธ๋ฆญ์Šค (Skills Version Matrix) ๋ชจ๋“  8๊ฐœ ์Šคํ‚ฌ์€ YAML frontmatter ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(`author`, `version`, `platforms`, `environments`) ํ‘œ์ค€ํ™”๋ฅผ ํ†ตํ•ด `v2.0.0`์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. | ์Šคํ‚ฌ๋ช… | ๋ฒ„์ „ | ์—ญํ•  ๋ฐ ์ฃผ์š” ์ฑ…์ž„ | ์ƒํƒœ | | :--- | :---: | :--- | :---: | | **`multi-agent-mux-create`** | `2.0.0` | ์—์ด์ „ํŠธ ์„ธ์…˜ ์‹ ๊ทœ ์ƒ์„ฑ ๋ฐ Herdr ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ ์Šคํฐ | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-stop`** | `2.0.0` | ๋Œ€ํ™” UUID ์›์ž์  ์บก์ฒ˜ ๋ฐ ์„ธ์…˜ ์•ˆ์ „ ์ข…๋ฃŒ (Graceful Stop) | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-resume`** | `2.0.0` | ์˜จ๋””์Šคํฌ ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ Tier-1 ์ดˆ๊ณ ์† ์„ธ์…˜ ๋ณต์› | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-status`** | `2.0.0` | ์‹ค์‹œ๊ฐ„ Herdr ์„ธ์…˜ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“œ๋ฆฌํ”„ํŠธ ์Šค๋ƒ…์ƒท ์กฐํšŒ | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-monitor`** | `2.0.0` | YAML โ†” ๋Ÿฐํƒ€์ž„ ์ƒํƒœ ๊ฐ„ ์ž์œจ ์กฐ์ •์ž (Reconciler Loop) | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-delegate-job`** | `2.0.0` | MQTT ์ด๋ฒคํŠธ ์ฑ„๋„ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ๋‹จ์œ„ ์ž‘์—… ์œ„์ž„ | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-loop`** | `2.0.0` | Planner-Creator-Reviewer 3์ž ์ž์œจ ๊ณ„ํšยท์‹คํ–‰ยทํ”ผ์–ด๋ฆฌ๋ทฐ ๋ฃจํ”„ | โœ… ๋ฐฐํฌ | | **`multi-agent-mux-orc-onboard`** | `2.0.0` | ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ UUID ๊ฒฉ๋ฆฌ ๋“ฑ๋ก ๋ฐ ์„œ๋ธŒ ์„ธ์…˜ ์˜ค์—ผ ๋ฐฉ์ง€ | โœ… ๋ฐฐํฌ | --- ## ๐Ÿ“‹ ๋ฒ„์ „๋ณ„ ์ƒ์„ธ ๋ณ€๊ฒฝ ๋‚ด์—ญ (Changelog) ### ๐Ÿš€ `v2.0.0` โ€” Unified Agent Adapter Architecture & Herdr Standardization (2026-08-17) > **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: ์—์ด์ „ํŠธ ์ง€์‹ ๊ณ„์ธต ๋‹จ์ผ ์†Œ์Šคํ™”(A-4), ๋ ˆ๊ฑฐ์‹œ ๊ฒฉ๋ฆฌ ์™„์ „ ํ๊ธฐ(Option B), ์…ธ ๋ธŒ๋ฆฌ์ง€ ํ•˜๋“œ๋‹ ๋ฐ ์Šคํ‚ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉํ™” ์™„๋ฃŒ. #### 1. ์—์ด์ „ํŠธ ์ง€์‹ ๊ณ„์ธต ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (A-4 Phase 2 / P3-1) - **`BaseAgentAdapter` ์ถ”์ƒ ํด๋ž˜์Šค ๋ฐ 4๋Œ€ ์–ด๋Œ‘ํ„ฐ ๊ตฌ์ถ•**: - [`.agents/skills/lib_py/agents/base.py`](.agents/skills/lib_py/agents/base.py): `DiscoveryContext` ๋ฐ ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜ (`ready_tokens`, `exit_key`, `delegate_agent_key`, `identity_cache_fields`, `artifact_path`, `verify_artifact`, `purge_artifacts`, `spawn_spec`, `resume_spec`, `auth_ok`, `discover`). - [`.agents/skills/lib_py/agents/adapters/`](.agents/skills/lib_py/agents/adapters/): `ClaudeAgentAdapter`, `AgyAgentAdapter`, `HermesAgentAdapter`, `ClineAgentAdapter` 4๊ฐœ ๊ตฌ์ฒด ํด๋ž˜์Šค ๊ตฌํ˜„. - **`facts` ๋ธŒ๋ฆฌ์ง€ ์…ธ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋“œ๋‹**: - `lib_py.agents` CLI ๋ชจ๋“ˆ์„ ํ†ตํ•ด 8๊ฐœ `MAM_*` ๋ณ€์ˆ˜๋ฅผ `shlex.quote` ์•ˆ์ „ ์ธ์šฉ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฐฉ์ถœ. - `wait_for_tui_ready` ๋นˆ ํ† ํฐ ์‹œ ์ „๋Ÿ‰ ๋งค์นญ ์˜คํƒ ๋ฐฉ์ง€ ๋ฐ ๋ฏธ์ง€ ์—์ด์ „ํŠธ fail-closed ๊ฐ€๋“œ ๋‚ด์žฅ. - **์…ธ ์Šคํฌ๋ฆฝํŠธ ์ „๋ฐ˜ ์–ด๋Œ‘ํ„ฐ ์ด๊ด€**: - `create_session.sh`, `resume_session.sh`, `stop_session.sh`, `reconcile.sh`์— ์‚ฐ์žฌ๋˜์–ด ์žˆ๋˜ 40์—ฌ ๊ฐœ ํ•˜๋“œ์ฝ”๋”ฉ ๋ถ„๊ธฐ๋ฅผ ์–ด๋Œ‘ํ„ฐ ํ˜ธ์ถœ๋กœ ์ผ์›ํ™”. #### 2. ๋ ˆ๊ฑฐ์‹œ `isolation.root` ๋ฐ C-3b ์†Œ๋น„์ž ์™„์ „ ํ๊ธฐ (Option B) - Universal Global Config ์ „ํ™˜ ์ดํ›„ ๋‚จ์•„์žˆ๋˜ 4๊ฐœ ๋ ˆ๊ฑฐ์‹œ ๊ฒฉ๋ฆฌ ์†Œ๋น„์ž ์ฝ”๋“œ(`lib.sh::mam_session_iso_root`, `workspace_uuid.py::iso_root_of`, `verify_session.py`, `stop_session.sh`) ๋ฐ `atomic_yaml.py`์˜ ๋ ˆ๊ฑฐ์‹œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์ ˆ 100% ์‚ญ์ œ. - ์ €์žฅ์†Œ ๋‚ด ๊ฒฉ๋ฆฌ ์ž”์žฌ ์ฐธ์กฐ 0๊ฑด ๋‹ฌ์„ฑ. #### 3. ์…ธ ๋ธŒ๋ฆฌ์ง€ ๋ณด์•ˆ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ•ํ™” (R1, R2, N1 ๊ต์ •) - **R1 (์œ„์ž„ ์—์ด์ „ํŠธ ํ‚ค ํด๋ฐฑ ๋ณด๊ฐ•)**: ๋ธŒ๋ฆฌ์ง€ ๋ฏธ์ž‘๋™ ์‹œ `delegate_agent`๊ฐ€ `antigravity-cli`๋กœ ์ผ๊ด„ ํ‡ดํ™”ํ•˜์ง€ ์•Š๊ณ  `claude-code`, `hermes-agent`, `cline-agent`๋กœ ๋ช…์‹œ์  `case` ํด๋ฐฑํ•˜๋„๋ก ๊ฐœ์„ . - **R2 (`argv` ์„œ๋ธŒ์ปค๋งจ๋“œ ์ „ํ™˜)**: `python -c` ์…ธ ๋ณ€์ˆ˜ ๋ฌธ์ž์—ด ๋ณด๊ฐ„์„ `spawn-spec`, `resume-spec`, `exit-key` ์„œ๋ธŒ์ปค๋งจ๋“œ๋กœ ์ „๋ฉด ์ „ํ™˜ํ•˜์—ฌ ๊ณต๋ฐฑ/์ž‘์€๋”ฐ์˜ดํ‘œ ๊ฒฝ๋กœ ์—๋Ÿฌ ๋ฐ ์ฝ”๋“œ ์ฃผ์ž… ์œ„ํ˜‘ ์›์ฒœ ์ฐจ๋‹จ. - **N1 (ํด๋ฆฐ ํ™˜๊ฒฝ ๊ฒฉ๋ฆฌ ๊ฐ€๋“œ)**: `test_a4_adapter_contract.py` ๋‚ด CLI ํ…Œ์ŠคํŠธ๊ฐ€ ์•ฐ๋น„์–ธํŠธ `PYTHONPATH` ์—†์ด๋„ ๋…๋ฆฝ ํ†ต๊ณผํ•˜๋„๋ก ํ™˜๊ฒฝ ๊ฒฉ๋ฆฌ ๋ณด๊ฐ•. #### 4. ์Šคํ‚ฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ทœ๊ฒฉํ™” ๋ฐ ํ”ผ์–ด ๋ฆฌ๋ทฐ 100% PASS - 8๊ฐœ `SKILL.md` frontmatter `version: 2.0.0` ํ†ต์ผ ๋ฐ ๋ฐฐํฌ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์ฆ. - Reviewer `cline` (Job `e7b9812b`) ๋ฐ Planner/Senior Reviewer `claude` (Job `31730364`) ์ „์› `[VERDICT: PASS]` ํš๋“. #### 5. ๋ ˆ๊ฑฐ์‹œ ์ฃผ์„ ๋ฐ ์‚ฌ์šฉ๋ฒ• ์ •ํ•ฉ์„ฑ ์ตœ์‹ ํ™” (C-6) - `stop_session.sh` ์ƒ๋‹จ ์ฃผ์„ ๋ฐ `usage()` ๋‚ด ํ๊ธฐ๋œ ํ”Œ๋ž˜๊ทธ(`--mode soft|hard`, `--capture-id`, `--graceful`) ์•ˆ๋‚ด ๋ฌธ๊ตฌ๋ฅผ ์™„์ „ ์ œ๊ฑฐํ•˜๊ณ  ํ˜„ํ–‰ 4๋Œ€ ์—์ด์ „ํŠธ(`claude`, `agy`, `hermes`, `cline`) ๋ฐ ํ”Œ๋ž˜๊ทธ ์ฒด๊ณ„๋กœ ๋™๊ธฐํ™”. - ํšŒ๊ท€ ๋ฐฉ์ง€ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ(`test_comp_stop_usage_matches_parser`) ์‹ ์„ค. - ํšŒ๊ท€ ๋ฐ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ: **263/263 PASS (100%)** ๋‹ฌ์„ฑ. #### 6. macOS NFS ๊ฐ์ง€ `df -P` ํด๋ฐฑ ๊ฒ€์ฆ ๋ฐ ์ข…๊ฒฐ (B-5) - `_check_is_nfs`(`lib.sh`)์˜ macOS/BSD ํ™˜๊ฒฝ ๋‚ด GNU ์ „์šฉ `df --output` ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ์‹œ POSIX `df -P` ํด๋ฐฑ ๋™์ž‘์„ ์‹ค์ธก ๋ฐ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ(`test_stop_check_is_nfs_local`)๋กœ ๊ฒ€์ฆ ์™„๋ฃŒํ•˜์—ฌ B-5 ์ด์Šˆ๋ฅผ ์ •์‹ ์ข…๊ฒฐ. #### 7. `agent_identities` tier-3 ์‹ ์› ์บ์‹œ ์™„์ „ ์ œ๊ฑฐ ๋ฐ UUID ํ•ด๊ฒฐ ๊ฒฝ๋กœ PyYAML ํƒˆ์˜์กด (B-10 / Option A) - ์“ฐ๊ธฐ ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ๊ตฌ์กฐ์ ์œผ๋กœ ํžˆํŠธ ๋ถˆ๊ฐ€์˜€๋˜ tier-3 ํด๋ฐฑ๊ณผ ๋ถ€์† ์†Œ๋น„์ž(`workspace_uuid.py`, `reconcile.sh` drift D, `stop_session.sh` ์บ์‹œ ์†Œ๊ฑฐ)๋ฅผ ์ „๋ฉด ์‚ญ์ œ. - UUID ํ•ด๊ฒฐ ๊ฒฝ๋กœ๋ฅผ **tier-1(per-row own id) โ†’ tier-2(์–ด๋Œ‘ํ„ฐ `discover()`)** 2๋‹จ๊ณ„๋กœ ๋‹จ์ˆœํ™”. - `verify_session.py::mam_orchestrator_uuids` ์˜ ์ฆ‰์‹œ `yaml` import ๋ฅผ YAML ํด๋ฐฑ ๋ถ„๊ธฐ๋กœ ์ด๋™, UUID ํ•ด๊ฒฐ ๊ฒฝ๋กœ๊ฐ€ PyYAML ์—†์ด ์™„์ฃผํ•จ์„ ์‹คํ–‰ ๊ฐ€๋“œ๋กœ ๊ณ ์ •(`atomic_yaml.py` ์˜ ์‹œ์Šคํ…œ PyYAML ์š”๊ตฌ๋Š” ์„ค๊ณ„์ƒ ์œ ์ง€). - ํšŒ๊ท€ ๊ฐ€๋“œ 3์ข… ์‹ ์„ค โ€” ์ฝ๊ธฐ ๊ฒฝ๋กœ ๋ถ€ํ™œ ์ฐจ๋‹จ, `import yaml` AST ๊ฒ€์‚ฌ(์ง€์—ฐ import ํฌํ•จ), ์‹คํ–‰ ๊ฒฝ๋กœ ๊ฒ€์ฆ. - ํšŒ๊ท€ ๋ฐ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ: **266/266 PASS (100%)** ๋‹ฌ์„ฑ. #### 8. ์…€ํ”„ ํ˜ธ์ŠคํŒ… ๋ฃจํ”„ ๋Ÿฐํƒ€์ž„ ํ”„๋ฆฌ์ฆˆ ์Šค๋ƒ…์ƒท (B-13 / Stage 2) - ๋ฃจํ”„ ๊ธฐ๋™ ์‹œ `.agents/skills/` ๋ฅผ `$TMPDIR` ์— 1ํšŒ ๋™๊ฒฐํ•˜๊ณ  ์Šค๋ƒ…์ƒท์—์„œ ์žฌ์‹คํ–‰ํ•˜์—ฌ, ํ„ด ๋„์ค‘ ํ”„๋ ˆ์ž„์›Œํฌ ์Šคํ‚ฌ ํŽธ์ง‘์ด ์ง„ํ–‰ ์ค‘์ธ ๋ฃจํ”„๋ฅผ ๊นจ๋œจ๋ฆฌ์ง€ ๋ชปํ•˜๋„๋ก ์ฐจ๋‹จ. - ์ฝ”๋“œ ๋ฃจํŠธ(์Šค๋ƒ…์ƒท)์™€ ์ƒํƒœ ๋ฃจํŠธ(`MAM_REAL_ROOT`)๋ฅผ ๋ถ„๋ฆฌํ•ด ๋ ˆ์ง€์ŠคํŠธ๋ฆฌยท๋ฃจํ”„ ๋ฝยทdiff ์ˆ˜์ง‘์€ ์‹ค์ œ ์ €์žฅ์†Œ๋ฅผ ๊ณ„์† ์‚ฌ์šฉ. - ์žฌ์‹คํ–‰ ์‹œ ์›๋ณธ argv ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณด์กดํ•ด ์ธ์ž ์œ ์‹ค์„ ๋ฐฉ์ง€(ํŒŒ์„œ๊ฐ€ `$@` ๋ฅผ ์†Œ๋น„ํ•˜๋ฏ€๋กœ ํ•„์ˆ˜). - ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ์‹คํŒจ ์‹œ `log_*` ์ •์˜ ์ด์ „ ๊ตฌ๊ฐ„์ž„์„ ๊ณ ๋ คํ•ด `echo` ๋กœ ๊ฒฝ๊ณ ํ•˜๊ณ  ๋ฏธ๋™๊ฒฐ ์ง„ํ–‰. - `MAM_LOOP_NO_FREEZE=1` ๋กœ ๋น„ํ™œ์„ฑํ™” ๊ฐ€๋Šฅ. ์Šค๋ƒ…์ƒท ์ƒ์„ฑ ์‹คํŒจ๋Š” ๊ฒฝ๊ณ  ํ›„ ๊ธฐ์กด ๋™์ž‘์œผ๋กœ ํด๋ฐฑ. - ํšŒ๊ท€ ๊ฐ€๋“œ 5์ข… ์‹ ์„ค โ€” argv ๋ณด์กด, ํŒŒ์† ๋ž˜ํผ ๋ฉด์—ญ, ์Šคํ‚ฌ ํŠธ๋ฆฌ ๋ฌด์˜ค์—ผ(B-6 ๊ฒฝ๊ณ„), ๋ฝ ํ•ด์ œ ๋ฐ ์Šค๋ƒ…์ƒท ์ •๋ฆฌ(B-12 ๊ฒฝ๊ณ„), ๋น„ํ™œ์„ฑํ™” ์Šค์œ„์น˜. - ํšŒ๊ท€ ๋ฐ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ: **271/271 PASS (100%)** ๋‹ฌ์„ฑ. #### 9. ๊ฐ์‚ฌ ๋กœ๊ทธ ๋ฃจํŠธ ์ง€์—ฐ ํ‰๊ฐ€ (B-9 / P4-1) - `mqtt_common.LOGS_DIR` ์˜ import ์‹œ์  cwd ๊ณ ์ •์„ ์ œ๊ฑฐํ•˜๊ณ  ํ˜ธ์ถœ ์‹œ์ ์— ํ•ด์„ํ•˜๋Š” `get_logs_dir()` ๋ฅผ ๋„์ž…. `chdir` ์ดํ›„์—๋„ ๊ฐ์‚ฌ ๋กœ๊ทธ๊ฐ€ ํ˜„์žฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค์— ์ •ํ™•ํžˆ ๊ธฐ๋ก๋จ. - PEP 562 ๋ชจ๋“ˆ `__getattr__` ๋กœ `LOGS_DIR` ์†์„ฑ ์ ‘๊ทผ ํ•˜์œ„ ํ˜ธํ™˜ ์œ ์ง€(๋™์  ํ‰๊ฐ€). - PEP 562 `__dir__` ๋ณ‘ํ–‰ ์ •์˜๋กœ `dir()`ยทํƒญ ์™„์„ฑ ๊ฐ€์‹œ์„ฑ ์œ ์ง€. - `DELEGATE_JOB_LOGS_DIR` ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์‹คํ–‰ ์ค‘ ๋ณ€๊ฒฝ๊นŒ์ง€ ๋ฐ˜์˜. - ํšŒ๊ท€ ๊ฐ€๋“œ 5์ข… ์‹ ์„ค โ€” cwd ์ถ”์ข…, ์‹ค์ œ ํŒŒ์ผ ์ƒ์„ฑ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋™์  ๋ฐ˜์˜, ์ „์—ญ ์žฌ๋„์ž… ์ฐจ๋‹จ, dir() ํƒ์ƒ‰์„ฑ. - ํšŒ๊ท€ ๋ฐ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ: **276/276 PASS (100%)** ๋‹ฌ์„ฑ. --- ### ๐Ÿ› ๏ธ `v1.4.0` โ€” Stability, Cleanup & Safe Job Delegation (2026-08-16) > **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: ๊ฒฉ๋ฆฌ ์ž”์žฌ ์ •๋ฆฌ, ์„œ๋ธŒ์…ธ ๋ฃจํ”„ ๋ฝ ์กฐ๊ธฐ ํ•ด์ œ ๋ฒ„๊ทธ ํ”ฝ์Šค, ์‹ ๊ทœ ํŒŒ์ผ ์บก์ฒ˜ ๋ฐ ๊ฒฝ๋Ÿ‰ํ™”. - **P2-2 (C-3a / C-4 ๋ ˆ๊ฑฐ์‹œ ๊ฒฉ๋ฆฌ ์Šคํ… ๋ฐ ๋ฏธ์‚ฌ์šฉ ์‹ฌ๋ณผ ์ œ๊ฑฐ)**: - `lib.sh` ๋‚ด ๋นˆ ์Šคํ… 4์ข…(`provision_isolation`, `isolation_lever`, `isolation_env_prefix`, `isolation_cmd_args`) ๋ฐ `_REAL_HERDR_PATH` ์™„์ „ ์‚ญ์ œ. - `registry.py::TERMINAL_STATUSES` ๋ฐ `create_session.sh::ISOLATE` ์ œ๊ฑฐ. - **P2-1 (B-6 / B-12 `delegate_job_safe` ์•ˆ์ •ํ™”)**: - `.agents/skills/...` ๋‚ด ๋ถˆํ•„์š”ํ•œ `.tmp` ๋ณต์‚ฌ๋ณธ ์ƒ์„ฑ ์ œ๊ฑฐ ๋ฐ ์ธํ”Œ๋ ˆ์ด์Šค ์ง์ ‘ ์‹คํ–‰(`bash "$orig_script"`) ์ „ํ™˜. - ์„œ๋ธŒ์…ธ ๋‚ด `trap`์œผ๋กœ ์ธํ•œ ๋ฃจํ”„ ๋ฝ ๋งˆ์ปค(`.mam/loop-guard-active`) ์กฐ๊ธฐ ์‚ญ์ œ ๊ฒฐํ•จ(D1) ์›์ฒœ ์ฐจ๋‹จ. - **P0-2 (O-2 ์ค‘๋ณต ๋ฃจํ”„ ๊ธฐ๋™ ๋ฐฉ์ง€ ์›์ž์  ๋ฝ)**: - `loop_lock.sh` ์‹ ์„ค: `set -C` ๊ธฐ๋ฐ˜ ์›์ž์  ๋ฝ ํš๋“ ๋ฐ PID + lstart ์†Œ์œ ๊ถŒ ๊ฒ€์ฆ์œผ๋กœ ๋™์‹œ ์‹คํ–‰ ๋ฐฉ์ง€. - **P0-1 (B-7 ์™ธ๊ณฝ diff ์ˆ˜์ง‘ ๋ฐ ๋ฏธ์ถ”์  ํŒŒ์ผ ์บก์ฒ˜)**: - `diff_collect.sh` ๋„์ž…: CWD ๋…๋ฆฝ `$REPO_ROOT` ๊ธฐ์ค€ diff ์ˆ˜์ง‘ ๋ฐ `git ls-files -o` ๋ฏธ์ถ”์  ํŒŒ์ผ ๋ณ‘ํ•ฉ. - **B-4 (์‹œํ”„ํŠธ `ls` ๋™์  ํฌ์‹œ์Šค ํƒ€์ž„์Šคํƒฌํ”„ ๋ณต์›)**: - `lib.sh` 554ํ–‰์˜ `created=999999` ํ•˜๋“œ์ฝ”๋”ฉ์„ ์‹ค์‹œ๊ฐ„ ํƒ€์ž„์Šคํƒฌํ”„(`int(time.time())`)๋กœ ๋ณต์›. - **ํ…Œ์ŠคํŠธ ์ŠˆํŠธ ๊ฒฝ๋Ÿ‰ํ™”**: - ๋…ธํ›„ํ™”๋œ ์ค‘๋ณต ๋ ˆ๊ฑฐ์‹œ ํ…Œ์ŠคํŠธ 7๊ฐœ ํŒŒ์ผ(1,559์ค„) ์‚ญ์ œ (`cf51b2c`). --- ### ๐Ÿ›ก๏ธ `v1.3.0` โ€” Orchestrator Onboarding & Scoped Guarding (2026-08-15) > **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ ์‹ ์› ๊ฒฉ๋ฆฌ ๋ฐ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ํ˜‘์—… ๊ฐ€๋“œ๋ ˆ์ผ ํ™•๋ฆฝ. - **`multi-agent-mux-orc-onboard` ์Šคํ‚ฌ ์‹ ์„ค**: - ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ(`agy`)์˜ ๋Œ€ํ™” UUID๋ฅผ `.mam/agent-sessions.yaml` ๋‚ด `orchestrator_uuids` ๋ฆฌ์ŠคํŠธ๋กœ ๋“ฑ๋ก. - `find_workspace_uuid` ๋ฐ `verify_session_uuid`์—์„œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ UUID๋ฅผ ์Šคํ‚ตํ•˜์—ฌ ์„œ๋ธŒ์—์ด์ „ํŠธ ์„ธ์…˜ ์˜ค์—ผ ๋ฐฉ์ง€. - **O-3 (์กฐ๊ฑด๋ถ€ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์œ„์ž„ ๊ฐ€๋“œ โ€” Scoped Guard)**: - ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ๊ฐ€ `/multi-agent-mux-loop` ํ™œ์„ฑํ™” ์ƒํƒœ์—์„œ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์Šคํฌ๋ฆฝํŠธ๋กœ ์œ„์ž„ํ•˜๋„๋ก ํ†ต์ œ. - `AGENTS.md` ยง5 ๋ฐ `MULTI_AGENT_RULES.md` ๋‚ด ๊ฐ€๋“œ๋ ˆ์ผ ๋ช…์‹œ. - **๋ฐฐํฌ ๋ฐ ํŒจํ‚ค์ง• ํŒŒ์ดํ”„๋ผ์ธ ํ˜„๋Œ€ํ™”**: - `deploy/lib_ownership.sh` ์‹ ์„ค ๋ฐ `hooks.json` 3-way ๋ณ‘ํ•ฉ(`MERGE_REGISTRY`) ์ง€์›. - Gitea CI/CD ํŒŒ์ดํ”„๋ผ์ธ (`deploy/gitea-ci.yml`) ์—ฐ๋™. --- ### ๐Ÿ”Œ `v1.2.0` โ€” Universal Herdr Server Isolation & Cline Integration (2026-08-14) > **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: Herdr ๋‹จ์ผ ์„œ๋ฒ„ ๊ฒฉ๋ฆฌ ๋ฐ ๋‹ค์ค‘ AI ์—์ด์ „ํŠธ ํ™•์žฅ. - **Universal Herdr Session Isolation**: - `HERDR_SESSION_NAME` ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฒฉ๋ฆฌ ์„œ๋ฒ„๋ฅผ ํ†ต์ผํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ์ถฉ๋Œ ๋ฐฉ์ง€. - **Cline ์—์ด์ „ํŠธ ํ†ตํ•ฉ**: - `cline` CLI ๊ธฐ๋ฐ˜ ๋Œ€ํ™” ์„ธ์…˜ ์ƒ์„ฑ, ์ •์ง€, ๋ณต์› ๋ฐ TUI ๋ ˆ๋”” ํ† ํฐ ํ•ธ๋“ค๋ง ์ง€์›. - **SQLite WAL ํŠธ๋žœ์žญ์…˜ ๋™์‹œ์„ฑ**: - ์„ธ์…˜ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋™์‹œ ์“ฐ๊ธฐ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ๋ฝ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด SQLite WAL ๋ชจ๋“œ ์ „๋ฉด ์ ์šฉ. --- ### ๐Ÿงฑ `v1.0.0` ~ `v1.1.0` โ€” Initial Multi-Agent Mux Framework (2026-08-10 ~ 2026-08-13) > **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: ํ„ฐ๋ฏธ๋„ ๋‹ค์ค‘ ์—์ด์ „ํŠธ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ธฐ์ดˆ ์„ค๊ณ„ ๋ฐ ๋น„๋™๊ธฐ ๋ฃจํ”„ ์™„์„ฑ. - **ํ•ต์‹ฌ ์ˆ˜๋ช…์ฃผ๊ธฐ ์Šคํ‚ฌ๊ตฐ ๊ตฌ์ถ•**: `create`, `stop`, `resume`, `status`, `monitor` ์Šคํ‚ฌ ๊ธฐ๋ณธ ๊ตฌํ˜„. - **MQTT ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์žก ์œ„์ž„**: `multi-agent-mux-delegate-job`์„ ํ†ตํ•œ ์—์ด์ „ํŠธ ๊ฐ„ ์ด๋ฒคํŠธ ํ†ต์‹  ๋ฐ ๊ฒฐ๊ณผ ๊ตฌ๋…. - **์ž์œจ ํ˜‘์—… ๋ฃจํ”„**: `multi-agent-mux-loop` ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•œ Planner-Creator-Reviewer ์—ญํ•  ๋ถ„๋‹ด ์ฒด๊ณ„ ์ •๋ฆฝ. --- ## ๐Ÿงช ํ’ˆ์งˆ ๋ณด์ฆ ๋ฐ ๊ฒ€์ฆ ๊ธฐ์ค€ (Verification Standards) ๋ชจ๋“  ๋ฆด๋ฆฌ์Šค๋Š” ๋‹ค์Œ 4๋‹จ๊ณ„ ์—„๊ฒฉํ•œ ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•ด์•ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค: 1. **์ •์  ๋ฌธ๋ฒ• ๊ฒ€์‚ฌ**: `bash -n` (๋ชจ๋“  ์…ธ ์Šคํฌ๋ฆฝํŠธ) ๋ฐ AST ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œ ๋ถ„์„. 2. **๋‹จ์œ„ ๋ฐ ์ปดํฌ๋„ŒํŠธ ํ…Œ์ŠคํŠธ (Tier 1~2)**: ์ธํ”Œ๋ ˆ์ด์Šค ๋ฐ ์ปดํฌ๋„ŒํŠธ ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ ๊ฒ€์ฆ. 3. **ํ†ตํ•ฉ ๋ฐ ๊ณ„์•ฝ ํ…Œ์ŠคํŠธ (Tier 3~4 / Contract)**: clean environment (`env -u PYTHONPATH`) ํ•˜์—์„œ์˜ ์–ด๋Œ‘ํ„ฐ ๊ณ„์•ฝ ๋ฐ CLI ๋ธŒ๋ฆฌ์ง€ ๊ฒ€์ฆ. 4. **๋ฉ€ํ‹ฐ์—์ด์ „ํŠธ ๊ต์ฐจ ํ”ผ์–ด ๋ฆฌ๋ทฐ**: Planner(`claude`) ๋ฐ Reviewer(`cline`) ๊ฐ„ ๊ต์ฐจ ๊ฒ€์ฆ ๋ฐ `[VERDICT: PASS]` 100% ํ•ฉ์˜.