diff --git a/.agents/skills/multi-agent-mux-create/SKILL.md b/.agents/skills/multi-agent-mux-create/SKILL.md index 8eaaad1..120ae13 100644 --- a/.agents/skills/multi-agent-mux-create/SKILL.md +++ b/.agents/skills/multi-agent-mux-create/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-create description: "Create a new agent session (claude, antigravity/agy) in a dedicated herdr session for context-preserving long-running work. Always creates a herdr session โ€” never backgrounds with nohup/disown. Writes the new session to .mam/agent-sessions.yaml. Use when you want to start a fresh agent (no prior UUID) for a new project workspace." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-delegate-job/SKILL.md b/.agents/skills/multi-agent-mux-delegate-job/SKILL.md index 718d01f..646970f 100644 --- a/.agents/skills/multi-agent-mux-delegate-job/SKILL.md +++ b/.agents/skills/multi-agent-mux-delegate-job/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-delegate-job description: "Delegate a unit of work to any autonomous agent (claude-code, hermes, agy, cline, grok-build, codex, or a human) and observe it asynchronously over an MQTT event channel. Supported roles include orchestrator, worker, and reviewer." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos, windows] diff --git a/.agents/skills/multi-agent-mux-loop/SKILL.md b/.agents/skills/multi-agent-mux-loop/SKILL.md index 46c238a..4729a25 100644 --- a/.agents/skills/multi-agent-mux-loop/SKILL.md +++ b/.agents/skills/multi-agent-mux-loop/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-loop description: "Run an autonomous planning-execution-review loop using multiple agents (Planner, Creator, Reviewers) in the workspace. Automatically orchestrates plan discussion, code changes, and peer reviews until a unanimous PASS is achieved or the maximum iteration limit is reached." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-monitor/SKILL.md b/.agents/skills/multi-agent-mux-monitor/SKILL.md index 6dffdfd..b849286 100644 --- a/.agents/skills/multi-agent-mux-monitor/SKILL.md +++ b/.agents/skills/multi-agent-mux-monitor/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-monitor description: "Run a long-lived reconciler that watches .mam/agent-sessions.yaml against the actual herdr/agent runtime state and reconciles them. Use when you want live visibility into which agent sessions are running, which are dead, which have stale YAML entries, and which have new session ids that haven't been recorded yet. Runs as a persistent loop (`reconcile.sh --subscribe`) that keeps going until it times out, idles out, or is interrupted." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md b/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md index 6d41daa..44948c3 100644 --- a/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md +++ b/.agents/skills/multi-agent-mux-orc-onboard/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-orc-onboard description: Register current or specified orchestrator session UUID into agent-sessions.yaml orchestrator_uuids list to prevent sub-agent discovery capture. -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-resume/SKILL.md b/.agents/skills/multi-agent-mux-resume/SKILL.md index 87c89db..67d18e1 100644 --- a/.agents/skills/multi-agent-mux-resume/SKILL.md +++ b/.agents/skills/multi-agent-mux-resume/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-resume description: "Resume an existing agent (claude, antigravity/agy) conversation by UUID into a herdr session. Reads .mam/agent-sessions.yaml for the saved session/conversation id, spawns (or reuses) a herdr session of the matching name, and runs `claude -r ` or `agy --conversation ` inside. Use when you want to reattach to a previous session's context, or revive a session whose herdr died but the agent's conversation is still on disk." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-status/SKILL.md b/.agents/skills/multi-agent-mux-status/SKILL.md index ba51273..5637502 100644 --- a/.agents/skills/multi-agent-mux-status/SKILL.md +++ b/.agents/skills/multi-agent-mux-status/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-status description: "Read-only instant snapshot of all agent herdr sessions โ€” name, YAML status, herdr alive, pane cmd/cwd, resume UUID on disk, and any drift. No mutation. Reuses reconcile.sh --dry-run for the diff logic. Use when you want to know 'what's running RIGHT NOW' without spinning up the monitor loop." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/.agents/skills/multi-agent-mux-stop/SKILL.md b/.agents/skills/multi-agent-mux-stop/SKILL.md index 5c4d7f0..0526dc5 100644 --- a/.agents/skills/multi-agent-mux-stop/SKILL.md +++ b/.agents/skills/multi-agent-mux-stop/SKILL.md @@ -1,7 +1,7 @@ --- name: multi-agent-mux-stop description: "Stop an agent herdr session (claude, antigravity/agy) and update .mam/agent-sessions.yaml. Default stops gracefully and marks status=stopped with conversation preserved for resume. Does NOT delete on-disk conversation artifacts (jsonl/db) โ€” those are preserved unless --purge-conversation is passed. Use when ending a work session, switching to a different one, or cleaning up before a fresh start." -version: 2.2.1 +version: 3.0.0 author: godopu license: MIT platforms: [linux, macos] diff --git a/VERSIONS.md b/VERSIONS.md index 9f8c5fc..19d44b5 100644 --- a/VERSIONS.md +++ b/VERSIONS.md @@ -6,39 +6,71 @@ ## ๐Ÿ“Œ ํ˜„์žฌ ๋ฒ„์ „ ๊ฐœ์š” (Current Release) -- **ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „**: `v2.2.1` -- **์ตœ์‹  ๋ฆด๋ฆฌ์Šค ์ผ์‹œ**: 2026-08-24 (KST) +- **ํ”„๋ ˆ์ž„์›Œํฌ ๋ฒ„์ „**: `v3.0.0` +- **์ตœ์‹  ๋ฆด๋ฆฌ์Šค ์ผ์‹œ**: 2026-08-26 (KST) - **๊ธฐ์ค€ ๋ธŒ๋žœ์น˜**: `main` - **ํ•ต์‹ฌ ์•„ํ‚คํ…์ฒ˜**: - - **Single-Workspace 2xK Multi-Pane Tiling Optimization**: ๊ธฐ๋ณธ ์ตœ์†Œ ํŽ˜์ธ ๋„ˆ๋น„ ์™„ํ™”(`MAM_MIN_PANE_COLS=40`)๋กœ 80~100์ปฌ๋Ÿผ ์ฐฝ์—์„œ 3~4๊ฐœ ์—์ด์ „ํŠธ ๋‹จ์ผ ์›Œํฌ์ŠคํŽ˜์ด์Šค ํƒ€์ผ๋ง ๋ณด์žฅ - - **`--herdr-workspace` Option & Runtime Label Sync**: Herdr ์„ธ์…˜ ๋‚ด ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ผ๋ฒจ ๋…๋ฆฝ ์ง€์ • ๋ฐ ๋Ÿฐํƒ€์ž„/YAML ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™” - - **Legacy Fallback Chain Decoupling**: ๋ฐ๋ชฌ ์†Œ์ผ“(`herdr_session`)๊ณผ ์›Œํฌ์ŠคํŽ˜์ด์Šค ๋ผ๋ฒจ(`herdr_workspace`) ์กฐํšŒ ์ฒด์ธ ์›์ฒœ ๋ถ„๋ฆฌ - - **Modern Agent Adapter & TUI Readiness**: ์ตœ์‹  Claude Code(`v2.1.241`) ๋ฐฐ๋„ˆ ๋ฐ 4๋Œ€ ์—์ด์ „ํŠธ TUI ์ดˆ๊ณ ์† ๊ฐ์ง€ - - **2xK Right-Growth Grid Layout Engine (B-20)**: ๋™์  ํ„ฐ๋ฏธ๋„ ๊ฐ์ง€ ๋ฐ 2xK ์šฐ์ธก ํ™•์žฅ ํƒ€์ผ๋ง ์—”์ง„ - - **Universal Herdr Session Isolation**: ๋‹จ์ผ Herdr ์„œ๋ฒ„ ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ ์„ธ์…˜ ๊ฒฉ๋ฆฌ - - **Tier-1 Fast-Path Lifecycle**: 0ms ์ง€์—ฐ์˜ ๋Œ€ํ™” UUID ์บก์ฒ˜ ๋ฐ ์ดˆ๊ณ ์† ์žฌ๊ฐœ(Resume) + - **5th Official Agent Ecosystem (Grok Build)**: Claude, AGY, Hermes, Cline์— ์ด์€ 5๋ฒˆ์งธ ๊ณต์‹ AI ์—์ด์ „ํŠธ(`grok`) ์–ด๋Œ‘ํ„ฐ, ์„ธ์…˜ ์ƒ์„ฑ/์žฌ๊ฐœ/์ข…๋ฃŒ ๋ฐ TUI ์ˆ˜๋ช…์ฃผ๊ธฐ ์ „๋ฉด ์ง€์› + - **Mux Loop Role-Based CLI Redesign (Breaking Change)**: `--target-agent` ๊ณต์‹ ํ์ง€ ๋ฐ `--creator` / `--planner` ๋ช…์‹œ์  ์—ญํ•  ๋ถ„๋ฆฌ ๊ตฌ์กฐ ์ •๋ฆฝ + - **Deterministic 2xK Grid Layout Engine 2.0**: $N=1\to 2$ `right` ์šฐ์„  ๋ถ„ํ• , GUI/ํ—ค๋“œ๋ฆฌ์Šค ๊ณตํ†ต ๋‹จ์ผ 3๋‹จ๊ณ„ ๊ฒฐ์ •ํ‘œ, ์ „๊ณ (Full-height) ์—ด ์•ˆ์ „ ๊ฐ€๋“œ๋กœ 2ร—2 ๋Œ€์นญ ๊ฒฉ์ž ๋ณด์žฅ + - **Infrastructure & Preflight Hardening**: ์‚ฌ์„ค NATS 2.14 Alpine ๋™๊ธฐํ™” ๋ฐ `--workspace` ์ธ์ž ์‚ฌ์ „ ๊ฒ€์ฆ ๊ฐ•ํ™” --- ## ๐Ÿงญ ์Šคํ‚ฌ ํŒจํ‚ค์ง€ ๋ฒ„์ „ ๋งคํŠธ๋ฆญ์Šค (Skills Version Matrix) -๋ชจ๋“  8๊ฐœ ์Šคํ‚ฌ์€ YAML frontmatter ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(`author`, `version`, `platforms`, `environments`) ํ‘œ์ค€ํ™”๋ฅผ ํ†ตํ•ด `v2.2.1`์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. +๋ชจ๋“  8๊ฐœ ์Šคํ‚ฌ์€ YAML frontmatter ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ(`author`, `version`, `platforms`, `environments`) ํ‘œ์ค€ํ™”๋ฅผ ํ†ตํ•ด `v3.0.0`์œผ๋กœ ๋™๊ธฐํ™”๋˜์–ด ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. | ์Šคํ‚ฌ๋ช… | ๋ฒ„์ „ | ์—ญํ•  ๋ฐ ์ฃผ์š” ์ฑ…์ž„ | ์ƒํƒœ | | :--- | :---: | :--- | :---: | -| **`multi-agent-mux-create`** | `2.2.1` | ์—์ด์ „ํŠธ ์„ธ์…˜ ์‹ ๊ทœ ์ƒ์„ฑ ๋ฐ Herdr ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ ์Šคํฐ | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-stop`** | `2.2.1` | ๋Œ€ํ™” UUID ์›์ž์  ์บก์ฒ˜ ๋ฐ ์„ธ์…˜ ์•ˆ์ „ ์ข…๋ฃŒ (Graceful Stop) | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-resume`** | `2.2.1` | ์˜จ๋””์Šคํฌ ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ Tier-1 ์ดˆ๊ณ ์† ์„ธ์…˜ ๋ณต์› | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-status`** | `2.2.1` | ์‹ค์‹œ๊ฐ„ Herdr ์„ธ์…˜ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“œ๋ฆฌํ”„ํŠธ ์Šค๋ƒ…์ƒท ์กฐํšŒ | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-monitor`** | `2.2.1` | YAML โ†” ๋Ÿฐํƒ€์ž„ ์ƒํƒœ ๊ฐ„ ์ž์œจ ์กฐ์ •์ž (Reconciler Loop) | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-delegate-job`** | `2.2.1` | MQTT ์ด๋ฒคํŠธ ์ฑ„๋„ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ๋‹จ์œ„ ์ž‘์—… ์œ„์ž„ | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-loop`** | `2.2.1` | Planner-Creator-Reviewer 3์ž ์ž์œจ ๊ณ„ํšยท์‹คํ–‰ยทํ”ผ์–ด๋ฆฌ๋ทฐ ๋ฃจํ”„ | โœ… ๋ฐฐํฌ | -| **`multi-agent-mux-orc-onboard`** | `2.2.1` | ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ UUID ๊ฒฉ๋ฆฌ ๋“ฑ๋ก ๋ฐ ์„œ๋ธŒ ์„ธ์…˜ ์˜ค์—ผ ๋ฐฉ์ง€ | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-create`** | `3.0.0` | ์—์ด์ „ํŠธ ์„ธ์…˜ ์‹ ๊ทœ ์ƒ์„ฑ ๋ฐ Herdr ์ปจํ…Œ์ด๋„ˆ ๊ฒฉ๋ฆฌ ์Šคํฐ | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-stop`** | `3.0.0` | ๋Œ€ํ™” UUID ์›์ž์  ์บก์ฒ˜ ๋ฐ ์„ธ์…˜ ์•ˆ์ „ ์ข…๋ฃŒ (Graceful Stop) | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-resume`** | `3.0.0` | ์˜จ๋””์Šคํฌ ๋Œ€ํ™” ์ปจํ…์ŠคํŠธ ๊ธฐ๋ฐ˜ Tier-1 ์ดˆ๊ณ ์† ์„ธ์…˜ ๋ณต์› | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-status`** | `3.0.0` | ์‹ค์‹œ๊ฐ„ Herdr ์„ธ์…˜ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“œ๋ฆฌํ”„ํŠธ ์Šค๋ƒ…์ƒท ์กฐํšŒ | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-monitor`** | `3.0.0` | YAML โ†” ๋Ÿฐํƒ€์ž„ ์ƒํƒœ ๊ฐ„ ์ž์œจ ์กฐ์ •์ž (Reconciler Loop) | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-delegate-job`** | `3.0.0` | MQTT ์ด๋ฒคํŠธ ์ฑ„๋„ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ๋‹จ์œ„ ์ž‘์—… ์œ„์ž„ | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-loop`** | `3.0.0` | Planner-Creator-Reviewer 3์ž ์ž์œจ ๊ณ„ํšยท์‹คํ–‰ยทํ”ผ์–ด๋ฆฌ๋ทฐ ๋ฃจํ”„ | โœ… ๋ฐฐํฌ | +| **`multi-agent-mux-orc-onboard`** | `3.0.0` | ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ดํ„ฐ UUID ๊ฒฉ๋ฆฌ ๋“ฑ๋ก ๋ฐ ์„œ๋ธŒ ์„ธ์…˜ ์˜ค์—ผ ๋ฐฉ์ง€ | โœ… ๋ฐฐํฌ | --- ## ๐Ÿ“‹ ๋ฒ„์ „๋ณ„ ์ƒ์„ธ ๋ณ€๊ฒฝ ๋‚ด์—ญ (Changelog) +### ๐Ÿš€ `v3.0.0` โ€” 5th Agent (Grok) Ecosystem Expansion, Mux Loop CLI Redesign & Deterministic 2xK Layout Engine 2.0 (2026-08-26) + +> **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: 5๋ฒˆ์งธ ๊ณต์‹ ์—์ด์ „ํŠธ `grok`(Grok Build) ์ „๋ฉด ํ†ตํ•ฉ, `/multi-agent-mux-loop`์˜ `--target-agent` ํ์ง€ ๋ฐ `--creator`/`--planner` ์—ญํ•  ๋ถ„๋ฆฌ(Breaking Change), 2ร—2 ๋Œ€์นญ ๊ทธ๋ฆฌ๋“œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ๊ฒฐ์ •๋ก ์  ๋ ˆ์ด์•„์›ƒ ์—”์ง„ 2.0 ํƒ‘์žฌ, 393๊ฐœ ์ „์ฒด ํ…Œ์ŠคํŠธ 100% PASS ๋‹ฌ์„ฑ. + +#### โš ๏ธ Breaking Changes & Migration Guide +* **`multi-agent-mux-loop` CLI ํ”Œ๋ž˜๊ทธ ๊ฐœํŽธ**: + - ๊ธฐ์กด์˜ ๋‹จ์ผ ๋Œ€์ƒ ์ง€์ • ํ”Œ๋ž˜๊ทธ `--target-agent `๊ฐ€ **๊ณต์‹ ์ œ๊ฑฐ(Drop)** ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + - ๊ธฐ์กด ๋ช…๋ น์€ ์ด์ œ `ERROR: --target-agent was removed. Use --creator instead.`์™€ ํ•จ๊ป˜ ์ข…๋ฃŒ(`exit 1`)๋ฉ๋‹ˆ๋‹ค. + - **๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐฉ๋ฒ•**: + - ๊ธฐ์กด: `bash run_loop.sh --target-agent --task "..."` + - ๋ณ€๊ฒฝ: `bash run_loop.sh --creator --task "..."` + - ํ”Œ๋ž˜๋„ˆ ์ง€์ • ์‹œ: `bash run_loop.sh --plan --planner --creator --task "..."` + +#### 1. 5๋ฒˆ์งธ ๊ณต์‹ AI ์—์ด์ „ํŠธ Grok Build (`grok`) ์ „๋ฉด ํ†ตํ•ฉ +* **์–ด๋Œ‘ํ„ฐ ๋ฐ ์ˆ˜๋ช… ์ฃผ๊ธฐ ๊ด€๋ฆฌ (`lib_py/agents/`, `lib.sh`)**: + - `GrokAgentAdapter` ๊ตฌํ˜„ ๋ฐ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๊ณต์‹ ๋“ฑ๋ก (`claude, agy, hermes, cline, grok`). + - `create_session.sh`, `resume_session.sh`, `stop_session.sh`, `resolve_session_id.sh`์˜ ์—์ด์ „ํŠธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ๋ฐ ๋””์ŠคํŒจ์น˜ ์ง€์› ์™„๋น„. + - ์˜จ๋””์Šคํฌ ์„ธ์…˜ UUID ํ•ด์„ ๋ฐ TUI ๋ Œ๋”๋ง ์ค€๋น„ ๊ฐ์ง€ ํ† ํฐ ๋ฐ˜์˜. + +#### 2. ๊ฒฐ์ •๋ก ์  2ร—K ๊ทธ๋ฆฌ๋“œ ๋ ˆ์ด์•„์›ƒ ์—”์ง„ 2.0 (`lib_py/layout.py`, `lib.sh`) +* **$N=1\to 2$ `right` ๋ถ„ํ•  ์šฐ์„  ์ •์ฑ… (R-1 ๊ฒฐํ•จ ํ•ด์†Œ)**: + - 1๊ฐœ ํŽ˜์ธ์—์„œ 2๋ฒˆ์งธ ์—์ด์ „ํŠธ ์ถ”๊ฐ€ ์‹œ `down` ๋Œ€์‹  `right`๋กœ ๋ถ„ํ• (`single_pane_split_right`)ํ•˜์—ฌ ์ขŒ/์šฐ 2๊ฐœ์˜ ์ „๊ณ (Full-height) ์—ด ํ™•๋ณด. + - ์ดํ›„ $N=3$(์ขŒ์ธก down), $N=4$(์šฐ์ธก down)๋กœ ์ด์–ด์ ธ ์™„๋ฒฝํ•œ 2ร—2 ๊ท ๋“ฑ ๋Œ€์นญ ๊ฒฉ์ž ๊ธฐํ•˜ํ•™(`widths=[138,139], heights=[39]`) ์™„์„ฑ. +* **GUI โ†” ํ—ค๋“œ๋ฆฌ์Šค ๋‹จ์ผ ๊ฒฐ์ •ํ‘œ ํ†ตํ•ฉ (`_decide_from_cols`)**: + - ๊ธฐ์กด์˜ ๋ถˆ์™„์ „ํ•œ `n % 2` ํ™€์ง ํŒจ๋ฆฌํ‹ฐ ๋กœ์ง์„ ํ๊ธฐํ•˜๊ณ , ์—ด ์ ์œ  ์ƒํƒœ(`cols=(a, b)`) ๊ธฐ๋ฐ˜์˜ ํ†ตํ•ฉ 3๋‹จ๊ณ„ ๊ฒฐ์ • ๋งคํŠธ๋ฆญ์Šค๋กœ ์ผ์›ํ™”. +* **์•ˆ์ „ ๊ฐ€๋“œ ๋ฐ 4์ค‘ ์šฉ๋Ÿ‰ ๋ฐฐ์„ **: + - `_full_height_pane` ๊ฐ€๋“œ๋กœ ๋ฐ˜์ชฝ ์—ด ๋ถ„ํ•  ์›์ฒœ ์ฐจ๋‹จ. + - `layout.py` ๊ธฐ๋ณธ๊ฐ’(`default=2`), `lib.sh:435` CLI ์ธ์ž(`--max-cols`, `--max-rows`), `.mam.env.example` ๋™๊ธฐํ™” ์™„๋ฃŒ. + +#### 3. ์‚ฌ์ „ ๊ฒ€์ฆ ๋ฐ ์ธํ”„๋ผ ๋™๊ธฐํ™” +* `create_session.sh`์˜ `--workspace` ํ•„์ˆ˜ ์ธ์ž ์‚ฌ์ „ ๊ฒ€์ฆ(preflight) ๊ฐ•ํ™”. +* ์‚ฌ์„ค NATS ๋ธŒ๋กœ์ปค(`nats-docker`) 2.14-alpine ์ตœ์‹  ํƒœ๊ทธ ๋™๊ธฐํ™”. + +--- + ### ๐Ÿš€ `v2.2.1` โ€” Single-Workspace 2xK Multi-Pane Tiling Optimization & Premature Overflow Fix (2026-08-24) > **์ฃผ์š” ๋งˆ์ผ์Šคํ†ค**: `MAM_MIN_PANE_COLS` ๊ธฐ๋ณธ๊ฐ’ 60โ†’40 ์™„ํ™”, ํ‘œ์ค€ 80~100์ปฌ๋Ÿผ ํ„ฐ๋ฏธ๋„ ๋ทฐํฌํŠธ์—์„œ ์กฐ๊ธฐ ์›Œํฌ์ŠคํŽ˜์ด์Šค ์˜ค๋ฒ„ํ”Œ๋กœ(๊ฐ€์ƒ ๋ฐ์Šคํฌํ†ฑ ๋ถ„๋ฆฌ) ๋ฐฉ์ง€ ๋ฐ ๋‹จ์ผ ์›Œํฌ์ŠคํŽ˜์ด์Šค 2x2 ํ†ตํ•ฉ ํƒ€์ผ๋ง ์™„์„ฑ, ์‹ ๊ทœ 80/79 ๊ฒฝ๊ณ„ ๋ฐ 90/100 col ํƒ€์ผ๋ง ํ…Œ์ŠคํŠธ 6์ข… ์ถ”๊ฐ€, ๋‹ค์ค‘ ์—์ด์ „ํŠธ ํ”ผ์–ด ๋ฆฌ๋ทฐ 100% PASS ๋‹ฌ์„ฑ.