팀 리더 에이전트 6개를 생성하거나 복원(multi-agent-mux-create / multi-agent-mux-resume)했을 때, 원래 의도된 레이아웃은 2×2(최대 4개) 그리드 정책에 따라 **4 + 2 (총 2개의 워크스페이스)**로 배치되어야 합니다.
그러나 실제 런타임에서는 **4 + 1 + 1 (총 3개의 워크스페이스)**로 분산 배치되는 현상이 발생합니다. 4개 이후 추가되는 에이전트마다 새로운 herdr 워크스페이스가 1개씩 계속 생성되어 워크스페이스 리소스가 불필요하게 파편화됩니다.
2. 원인 분석 (Root Cause)
.agents/skills/lib.sh의 new-session 구현부(705~721행)에서 대상 CWD와 일치하는 워크스페이스(existing_ws)를 탐색할 때 다음과 같이 첫 번째 일치 항목만 취하고 루프를 탈출(break)합니다:
# lib.sh:712-718matched_ws=''forpinpanes:p_cwd=os.path.realpath(p.get('cwd',''))ifp.get('cwd')else''iftarget_absandp_cwd==target_absandp.get('workspace_id'):matched_ws=p.get('workspace_id')break# 문제의 원인
에이전트 5번 생성 시: w38이 이미 4개 페인으로 가득 차 있으므로 lib_py.layout이 overflow를 반환하고, 새 워크스페이스 w39가 생성됩니다. (정상)
에이전트 6번 생성 시: herdr pane list의 앞부분에 여전히 꽉 찬 w38의 페인들이 위치하므로, 탐색 코드가 w38을 먼저 발견하고 break합니다. 그 결과 w38의 4개 페인 상태를 기준으로 다시 overflow가 판정되어, 여유 공간(3칸)이 남아있는 w39를 검사하지 않은 채 세 번째 워크스페이스(w3C)를 새로 생성합니다.
3. 기대 동작 (Expected Behavior)
동일 CWD를 가진 워크스페이스 목록을 순회하며:
해당 워크스페이스의 페인 레이아웃이 4개 미만으로 여유가 있는 경우(split_dir가 right 또는 down), 해당 워크스페이스에 페인을 분할 배치(Packing).
매칭되는 모든 워크스페이스가 4개(2×2)로 꽉 차서 모두 overflow 판정을 받을 때만 herdr workspace create로 새로운 워크스페이스를 생성.
6개 에이전트 기준: 워크스페이스 1 (4개) + 워크스페이스 2 (2개) 로 총 2개의 워크스페이스만 생성되어야 함.
4. 대상 파일 및 검증 계획
수정 대상: .agents/skills/lib.sh (new-session 처리부)
회귀 검증: tests/test_layout.py 및 다중 세션 생성 테스트
### 1. 현상 (Phenomenon)
팀 리더 에이전트 6개를 생성하거나 복원(`multi-agent-mux-create` / `multi-agent-mux-resume`)했을 때, 원래 의도된 레이아웃은 2×2(최대 4개) 그리드 정책에 따라 **4 + 2 (총 2개의 워크스페이스)**로 배치되어야 합니다.
그러나 실제 런타임에서는 **4 + 1 + 1 (총 3개의 워크스페이스)**로 분산 배치되는 현상이 발생합니다. 4개 이후 추가되는 에이전트마다 새로운 herdr 워크스페이스가 1개씩 계속 생성되어 워크스페이스 리소스가 불필요하게 파편화됩니다.
### 2. 원인 분석 (Root Cause)
`.agents/skills/lib.sh`의 `new-session` 구현부(705~721행)에서 대상 CWD와 일치하는 워크스페이스(`existing_ws`)를 탐색할 때 다음과 같이 첫 번째 일치 항목만 취하고 루프를 탈출(`break`)합니다:
```python
# lib.sh:712-718
matched_ws = ''
for p in panes:
p_cwd = os.path.realpath(p.get('cwd', '')) if p.get('cwd') else ''
if target_abs and p_cwd == target_abs and p.get('workspace_id'):
matched_ws = p.get('workspace_id')
break # 문제의 원인
```
- **에이전트 5번 생성 시**: `w38`이 이미 4개 페인으로 가득 차 있으므로 `lib_py.layout`이 `overflow`를 반환하고, 새 워크스페이스 `w39`가 생성됩니다. (정상)
- **에이전트 6번 생성 시**: `herdr pane list`의 앞부분에 여전히 꽉 찬 `w38`의 페인들이 위치하므로, 탐색 코드가 `w38`을 먼저 발견하고 `break`합니다. 그 결과 `w38`의 4개 페인 상태를 기준으로 다시 `overflow`가 판정되어, 여유 공간(3칸)이 남아있는 `w39`를 검사하지 않은 채 세 번째 워크스페이스(`w3C`)를 새로 생성합니다.
### 3. 기대 동작 (Expected Behavior)
동일 CWD를 가진 워크스페이스 목록을 순회하며:
1. 해당 워크스페이스의 페인 레이아웃이 4개 미만으로 여유가 있는 경우(`split_dir`가 `right` 또는 `down`), 해당 워크스페이스에 페인을 분할 배치(Packing).
2. 매칭되는 모든 워크스페이스가 4개(2×2)로 꽉 차서 모두 `overflow` 판정을 받을 때만 `herdr workspace create`로 새로운 워크스페이스를 생성.
3. 6개 에이전트 기준: **워크스페이스 1 (4개) + 워크스페이스 2 (2개)** 로 총 2개의 워크스페이스만 생성되어야 함.
### 4. 대상 파일 및 검증 계획
- 수정 대상: `.agents/skills/lib.sh` (`new-session` 처리부)
- 회귀 검증: `tests/test_layout.py` 및 다중 세션 생성 테스트
main 8e7282c 에 병합되어 해결되었습니다 (v4.4.4, 브랜치 fix/issue-12-8-7).
lib.shnew-session 이 같은 cwd 의 모든 후보 워크스페이스를 순회하며, 2×K 그리드에 여유가 있는 워크스페이스에 패킹합니다. 모두 가득 찼을 때만 새 워크스페이스를 만듭니다 (6개 에이전트 → 4+2).
단일 워크스페이스 동작(idle pane 재사용, 첫 여유 워크스페이스 우선)은 이전과 동일합니다.
테스트: tests/test_issue7_workspace_packing.py (5건).
리뷰: claude·agy·grok·codex 4인 [VERDICT: PASS].
main `8e7282c` 에 병합되어 해결되었습니다 (v4.4.4, 브랜치 `fix/issue-12-8-7`).
- `lib.sh` `new-session` 이 같은 cwd 의 모든 후보 워크스페이스를 순회하며, 2×K 그리드에 여유가 있는 워크스페이스에 패킹합니다. 모두 가득 찼을 때만 새 워크스페이스를 만듭니다 (6개 에이전트 → 4+2).
- 단일 워크스페이스 동작(idle pane 재사용, 첫 여유 워크스페이스 우선)은 이전과 동일합니다.
- 테스트: `tests/test_issue7_workspace_packing.py` (5건).
- 리뷰: claude·agy·grok·codex 4인 `[VERDICT: PASS]`.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
1. 현상 (Phenomenon)
팀 리더 에이전트 6개를 생성하거나 복원(
multi-agent-mux-create/multi-agent-mux-resume)했을 때, 원래 의도된 레이아웃은 2×2(최대 4개) 그리드 정책에 따라 **4 + 2 (총 2개의 워크스페이스)**로 배치되어야 합니다.그러나 실제 런타임에서는 **4 + 1 + 1 (총 3개의 워크스페이스)**로 분산 배치되는 현상이 발생합니다. 4개 이후 추가되는 에이전트마다 새로운 herdr 워크스페이스가 1개씩 계속 생성되어 워크스페이스 리소스가 불필요하게 파편화됩니다.
2. 원인 분석 (Root Cause)
.agents/skills/lib.sh의new-session구현부(705~721행)에서 대상 CWD와 일치하는 워크스페이스(existing_ws)를 탐색할 때 다음과 같이 첫 번째 일치 항목만 취하고 루프를 탈출(break)합니다:w38이 이미 4개 페인으로 가득 차 있으므로lib_py.layout이overflow를 반환하고, 새 워크스페이스w39가 생성됩니다. (정상)herdr pane list의 앞부분에 여전히 꽉 찬w38의 페인들이 위치하므로, 탐색 코드가w38을 먼저 발견하고break합니다. 그 결과w38의 4개 페인 상태를 기준으로 다시overflow가 판정되어, 여유 공간(3칸)이 남아있는w39를 검사하지 않은 채 세 번째 워크스페이스(w3C)를 새로 생성합니다.3. 기대 동작 (Expected Behavior)
동일 CWD를 가진 워크스페이스 목록을 순회하며:
split_dir가right또는down), 해당 워크스페이스에 페인을 분할 배치(Packing).overflow판정을 받을 때만herdr workspace create로 새로운 워크스페이스를 생성.4. 대상 파일 및 검증 계획
.agents/skills/lib.sh(new-session처리부)tests/test_layout.py및 다중 세션 생성 테스트main
8e7282c에 병합되어 해결되었습니다 (v4.4.4, 브랜치fix/issue-12-8-7).lib.shnew-session이 같은 cwd 의 모든 후보 워크스페이스를 순회하며, 2×K 그리드에 여유가 있는 워크스페이스에 패킹합니다. 모두 가득 찼을 때만 새 워크스페이스를 만듭니다 (6개 에이전트 → 4+2).tests/test_issue7_workspace_packing.py(5건).[VERDICT: PASS].