3 Commits
6 changed files with 348 additions and 1 deletions
+59
View File
@@ -0,0 +1,59 @@
# 📘 herdr_docs.md: Herdr 공식 문서 사이드맵 및 문서 구조 레퍼런스
이 문서는 AI 에이전트 인지형 멀티플렉서인 **herdr**의 공식 문서 구조 및 핵심 경로 링크들을 정리한 참고서입니다. 개발 과정 및 스킬 설계 시 참조용 사양으로 활용합니다.
---
## 🔗 Herdr 공식 문서 사이트 구조
공식 홈페이지 및 메인 설명: **[herdr.dev](https://herdr.dev)**
### 1. 🚀 시작하기 (Start here)
* **Overview (개요)**: [herdr.dev/docs/](https://herdr.dev/docs/)
* Herdr의 도입 목적 및 핵심 철학
* **Install (설치 방법)**: [herdr.dev/docs/install/](https://herdr.dev/docs/install/)
* 시스템 요구사항 및 바이너리 설치 스크립트 제공
* **Quick start (빠른 시작)**: [herdr.dev/docs/quick-start/](https://herdr.dev/docs/quick-start/)
* 기본 워크스페이스 생성 및 에이전트 실행 예시
* **Concepts (핵심 개념)**: [herdr.dev/docs/concepts/](https://herdr.dev/docs/concepts/)
* 에이전트 인지식 터미널 구조, Pane, Tab, Workspace 관계
* **Keyboard (키보드 단축키)**: [herdr.dev/docs/keyboard/](https://herdr.dev/docs/keyboard/)
* 멀티플렉서 제어를 위한 주요 기본 단축키 목록
### 2. 🤖 Herdr 실무 활용 (Using Herdr)
* **How to work with Herdr (작업 워크플로우)**: [herdr.dev/docs/how-to-work/](https://herdr.dev/docs/how-to-work/)
* 개발자와 에이전트 간의 화면 분할 및 협업 모범 사례
* **Agents (에이전트 제어)**: [herdr.dev/docs/agents/](https://herdr.dev/docs/agents/)
* Claude Code, Cline, Agy 등 주요 코딩 에이전트 실행 및 연동 규칙
* **Session state and restore (세션 상태 및 복원)**: [herdr.dev/docs/session-state/](https://herdr.dev/docs/session-state/)
* 호스트 리부팅 및 연결 유실 시 대화 상태 원자적 백업 및 복원
* **Persistence and remote access (영속성 및 원격 접속)**: [herdr.dev/docs/persistence-remote/](https://herdr.dev/docs/persistence-remote/)
* 백그라운드 영속 구동 및 원격 터미널에서의 Attach 방법
### 3. ⚙️ 설정 가이드 (Configure)
* **Configuration (설정 기초)**: [herdr.dev/docs/configuration/](https://herdr.dev/docs/configuration/)
* 사용자 프로필 설정 및 환경 변수 연동
* **Config reference (설정 참조)**: [herdr.dev/docs/config-reference/](https://herdr.dev/docs/config-reference/)
* `config.toml` 구조 및 전역 키 맵 변경 스펙
* **Plugins (플러그인)**: [herdr.dev/docs/plugins/](https://herdr.dev/docs/plugins/)
* Herdr 확장용 플러그인 사양 및 연동
* **Marketplace (마켓플레이스)**: [herdr.dev/docs/marketplace/](https://herdr.dev/docs/marketplace/)
* 커뮤니티 플러그인 공유 및 다운로드
### 4. 📚 레퍼런스 및 사양 (Reference)
* **CLI reference (명령어 참조)**: [herdr.dev/docs/cli-reference/](https://herdr.dev/docs/cli-reference/)
* `herdr run`, `herdr capture`, `herdr kill` 등 CLI 인자 설명
* **Socket API (소켓 API)**: [herdr.dev/docs/socket-api/](https://herdr.dev/docs/socket-api/)
* 프로그래밍 방식으로 창 분할, 입력 전송, 상태 조회를 수행하기 위한 로컬 Unix 소켓 규격
* **Integrations (외부 연동)**: [herdr.dev/docs/integrations/](https://herdr.dev/docs/integrations/)
* CI/CD 환경 및 외부 IDE 어댑터 연동 방안
* **Agent skill file (에이전트 스킬 파일)**: [herdr.dev/docs/agent-skill/](https://herdr.dev/docs/agent-skill/)
* 에이전트가 자체적으로 Herdr 환경을 진단할 때 읽는 규칙 정의
* **Windows beta (윈도우 베타)**: [herdr.dev/docs/windows-beta/](https://herdr.dev/docs/windows-beta/)
* Windows 환경 구동 현황 및 제약 사항
### 5. 🚑 문제 해결 및 기타 (Help)
* **Troubleshooting (문제 해결)**: [herdr.dev/docs/troubleshooting/](https://herdr.dev/docs/troubleshooting/)
* 인증 실패, PTY 블로킹, 세션 크래시 자가 진단 및 대처법
* **Preview docs (프리뷰 문서)**: [herdr.dev/docs/preview/](https://herdr.dev/docs/preview/)
* 차기 업데이트 예정 기능 문서
@@ -0,0 +1,41 @@
# 리뷰 리포트 — Job dbab0e07
- **리뷰 대상**: 커밋 `36b3910` — (1) `create_session.sh` agy 인증 사전검증을 파일 기반으로 우회해 macOS 키체인 접근 Hang 방지, (2) `lib.sh provision_isolation()`에 Darwin 전용 `~/Library/Keychains` 심링크 시딩 추가로 격리 모드 인증 토큰 소실 해결
- **리뷰어**: claude (planner-reviewer)
- **리뷰 방식**: 정적 분석(bash -n, shellcheck 기준선 대비) + 계측 스텁/가짜 HOME/uname 오버라이드 기반 실행 검증
## 1. 설계 타당성
- **Hang 우회**: agy 격리 lever가 `HOME=<root>`이고(lib.sh 주석의 Phase 0 실측 매트릭스), macOS에서 `agy models`가 키체인 접근 프롬프트로 비대화식 환경에서 블로킹되는 문제를, 디스크상 토큰 파일(`~/.gemini/oauth_creds.json` 또는 `~/.gemini/antigravity-cli/antigravity-oauth-token`) 존재 시 CLI 호출 자체를 생략하는 방식으로 회피 — 검사 파일 경로 2개가 `provision_isolation()`이 agy 자격증명으로 시딩하는 파일 목록과 정확히 일치함(저장소 내부 지식과 정합).
- **토큰 소실 해결**: 격리 시 `HOME=<root>`로 바뀌면 macOS 키체인 경로(`$HOME/Library/Keychains`)가 빈 격리 홈을 가리켜 자격증명 조회가 실패하는 구조 — 실제 Keychains 디렉터리를 심링크로 시딩하는 것은 이 파일의 기존 철학("auth/config files are SYMLINKED ... never copied — token refresh must converge on the real files")과 일치하는 올바른 해법.
## 2. 실행 검증 (전부 실측)
- **사전검증 우회(Case A)**: 가짜 HOME에 토큰 파일 배치 + 호출 기록 스텁 `agy`를 PATH 선두에 두고 `create_session.sh --dry-run --agent agy` 실행 → **`agy` 바이너리가 단 한 번도 실행되지 않음**(Hang 원인 원천 제거 확인), exit 0.
- **폴백 보존(Case B)**: 토큰 파일 없는 빈 HOME → `agy models`가 정확히 1회 호출되고 스텁 실패 시 기존 오류 메시지("agy is not authenticated")와 exit 1이 그대로 동작 — 미인증 조기 차단 시맨틱 유실 없음.
- **Keychains 시딩**: lib.sh를 소싱한 격리 하네스에서 `uname`을 Darwin으로 오버라이드하고 가짜 HOME(`Library/Keychains/login.keychain-db` 포함)으로 `provision_isolation agy` 실행 →
- 심링크 정상 생성, 격리 홈 경유 read-through로 실제 키체인 데이터 접근 확인.
- `seeded` 출력에 `Library/Keychains`가 기존 포맷대로 병합됨.
- **재프로비저닝 멱등성**: 2회 실행에도 `ln -sfn``-n` 덕에 중첩 링크(`Keychains/Keychains`) 없이 동일 결과.
- **🔑 삭제 안전성(최중요)**: create rollback의 `rm -rf "$ISOLATION_ROOT"` 시뮬레이션 → **심링크만 제거되고 실제 키체인 파일은 온전히 생존**함을 실측 확인(rm -rf는 심링크를 따라 들어가지 않음). `seeded` 목록을 순회하며 삭제하는 소비자는 코드베이스에 존재하지 않음(생성·기록 전용)도 grep으로 확인.
## 3. 정적 분석
- `bash -n` 양 파일 통과. `shellcheck -S warning`: 변경 전 기준선(fc24af4) 대비 양 파일 모두 **경고 0건 → 0건, 신규 경고 없음**.
## 4. 유실 검사
- agy 외 에이전트(claude/cline/hermes)의 provision 분기·사전검증 분기는 바이트 단위로 무변경. Darwin 가드로 Linux에서 Keychains 시딩 완전 스킵(Linux 회귀 없음).
## 5. 비차단(Non-blocking) 지적 사항
1. **사전검증 약화** — 파일 존재가 토큰 유효성을 보증하지 않으므로, 만료/폐기된 토큰은 이제 preflight를 통과하고 TUI 기동 단계에서야 실패가 드러남. Hang 대비 합리적 트레이드오프이나 오류 표면화 시점이 늦어짐.
2. **Darwin 미게이팅** — 우회 분기가 OS 무관하게 적용되어, Hang이 없던 Linux에서도 엄격 검사가 생략됨(부수적으로 네트워크 호출 생략이라 빨라지는 이점은 있음). 엄격성이 중요해지면 `uname` 게이트 추가 고려.
3. **자격증명 격리 부재(의도된 설계)** — 격리 세션이 실제 키체인을 공유하게 되나, 시딩의 목적 자체가 인증 공유이므로 기존 심링크 시딩 철학과 일치. 기록 차원의 언급.
4. **macOS 실기기 미검증** — Security.framework가 심링크된 `$HOME/Library/Keychains`를 실제로 수용하는지는 Linux 환경에서 실측 불가. 메커니즘 수준(경로 해석·링크·멱등성·삭제 안전성)은 전부 검증 완료.
## 6. 결론
두 수정 모두 고장 메커니즘을 정확히 겨냥했고, 우회·폴백·시딩·멱등성·삭제 안전성이 전부 실행으로 입증되었으며 정적 분석 신규 경고와 기존 동작 유실이 없다. 비차단 4건은 후속 개선/기록 수준이다.
[VERDICT: PASS]
@@ -0,0 +1,162 @@
# ✅ Peer Review Report: macOS 키체인 Hang 우회 및 격리 모드 인증 토큰 소실 수정 (Job 14943484)
**Job**: `14943484` · **Reviewer**: Reviewer B (Cline, `canary-projects-multi-agent-mux-reviewer-cline`)
**Review Target**: 커밋 `36b3910` "fix(mac-compat): bypass keyring auth check hang and link macOS Library/Keychains to isolated home"
**Files Changed**: `lib.sh` (+8/-0), `create_session.sh` (+4/-1) — 2 files, 12 insertions, 1 deletion
**Review Scope**: 작업 목표 "create_session.sh 및 lib.sh에서 macOS 키체인(keyring) 접근 차단으로 인한 비대화식 Hang 현상과 격리 모드(--isolate) 시 인증 토큰 소실 문제를 각각 파일 기반 사전 검증 우회 및 Library/Keychains 폴더 링크 추가를 통해 해결" — 린트, 동작성, 유실 관점 교차 리뷰
**Method**: 커밋 diff 분석 + `bash -n`/`shellcheck` 정적 분석 + 인증 바이패스 로직 4케이스 검증 + Darwin 가드 검증 + 경로 일치성 확인 + seeded 패턴 일관성 확인 + 타 agent keychain 필요성 분석
---
## 1. 변경 사항 개요
### 1.1 파일 기반 사전 검증 우회 (create_session.sh 라인 92-98)
```diff
elif [ "$AGENT" = "agy" ]; then
- if ! agy models >/dev/null 2>&1; then
+ # Fast, non-blocking check: if token or credentials exist on disk, assume authenticated to prevent keyring hang
+ if [ -f "$HOME/.gemini/oauth_creds.json" ] || [ -f "$HOME/.gemini/antigravity-cli/antigravity-oauth-token" ]; then
+ true
+ elif ! agy models >/dev/null 2>&1; then
echo "ERROR: agy is not authenticated. Please log in first." >&2
exit 1
fi
```
**목적**: `agy models` 명령이 macOS에서 키체인 접근 시 비대화식 Hang 유발. 토큰/자격증명 파일 존재 시 파일 기반으로 인증 가정하여 Hang 우회.
### 1.2 Library/Keychains 폴더 링크 추가 (lib.sh 라인 841-848)
```diff
+ # On macOS, seed ~/Library/Keychains to allow isolated agy to query Keychain Access credentials
+ if [ "$(uname)" = "Darwin" ]; then
+ mkdir -p "$root/Library"
+ if [ -d "$HOME/Library/Keychains" ]; then
+ ln -sfn "$HOME/Library/Keychains" "$root/Library/Keychains"
+ seeded="${seeded:+$seeded,}Library/Keychains"
+ fi
+ fi
```
**목적**: `--isolate` 모드 시 격리된 홈 디렉토리에 `~/Library/Keychains` 심볼릭 링크 추가 → 격리 agy가 Keychain Access 자격증명 조회 가능.
---
## 2. 작업 목표 달성도
| 목표 | 상태 | 확인 |
|------|------|------|
| macOS 키체인 Hang 우회 (파일 기반 사전 검증) | ✅ | 토큰 파일 존재 시 `agy models` 스킵 |
| 격리 모드 인증 토큰 소실 해결 (Keychains 링크) | ✅ | Darwin 가드 + Library/Keychains 심볼릭 링크 |
| create_session.sh 적용 | ✅ | 라인 92-98 |
| lib.sh 적용 | ✅ | 라인 841-848 (agy case) |
---
## 3. 정적 분석
| 파일 | bash -n | shellcheck | 비고 |
|------|---------|------------|------|
| lib.sh | ✅ SYNTAX OK | ✅ 경고 없음 (clean) | 본 diff 새 경고 0건 |
| create_session.sh | ✅ SYNTAX OK | SC1091 (info, 기존 source) — **본 diff 새 경고 없음** | EXIT 1 (기존) |
---
## 4. 동작성 검증
### 4.1 ✅ 인증 바이패스 로직 4케이스 검증
| 케이스 | 조건 | 결과 | 판정 |
|--------|------|------|------|
| 1 | `antigravity-oauth-token` 파일 존재 | BYPASS (token found) | ✅ Hang 우회 |
| 2 | `oauth_creds.json` 파일 존재 | BYPASS (oauth_creds found) | ✅ Hang 우회 |
| 3 | 파일 없음 + agy models 실패 | ERROR (not authenticated) | ✅ 정상 에러 |
| 4 | 파일 없음 + agy models 성공 | PASS (agy models succeeded) | ✅ 정상 통과 |
**검증**: 파일 존재 시 `agy models` 호출 스킵 → macOS 키체인 Hang 방지. 파일 부재 시 기존 `agy models` 체크 유지 → 미인증 감지.
### 4.2 ✅ Darwin 가드 검증 (Keychains 링크)
| 조건 | 결과 | 판정 |
|------|------|------|
| `uname` = Linux | Darwin 체크 실패 → 블록 스킵 | ✅ Linux에서 Keychains 링크 미생성 |
| `uname` = Darwin + `~/Library/Keychains` 존재 | `mkdir -p $root/Library` + `ln -sfn` 실행 | ✅ macOS에서 심볼릭 링크 생성 |
| `uname` = Darwin + `~/Library/Keychains` 부재 | `[ -d ]` 실패 → 링크 미생성 | ✅ graceful (seeded 미추가) |
### 4.3 ✅ 경로 일치성 (auth check vs provisioning)
| 파일 | create_session.sh 체크 경로 | lib.sh provisioning 경로 | 일치 |
|------|---------------------------|-------------------------|------|
| oauth_creds.json | `$HOME/.gemini/oauth_creds.json` | `$HOME/.gemini/oauth_creds.json` (라인 835) | ✅ |
| antigravity-oauth-token | `$HOME/.gemini/antigravity-cli/antigravity-oauth-token` | `$HOME/.gemini/antigravity-cli/antigravity-oauth-token` (라인 838) | ✅ |
인증 체크 파일과 격리 provisioning 파일 경로가 완전 일치 → 일관성 확보.
### 4.4 ✅ seeded 패턴 일관성
`seeded="${seeded:+$seeded,}Library/Keychains"` (라인 846) — 기존 패턴(라인 836, 839, 853)과 동일한 `${seeded:+$seeded,}` 누적 패턴. 일관성 확보 ✅
### 4.5 ✅ 타 agent keychain 필요성 분석
| Agent | 인증 방식 | Keychain 필요 | Keychains 링크 적용 |
|-------|----------|---------------|---------------------|
| claude | `.credentials.json` 파일 기반 | 아니오 | 불필요 (맞음) |
| cline | 파일 기반 settings + DB | 아니오 | 불필요 (맞음) |
| agy | macOS Keychain Access | **예** | **적용됨** ✅ |
| hermes | `auth.json` 파일 기반 | 아니오 | 불필요 (맞음) |
Keychains 링크가 agy case에만 추가된 것은 **정확한 타겟팅** — agy만 macOS Keychain 사용, 타 agent는 파일 기반 인증.
### 4.6 ✅ true 문 유효성
`if` 블록 본문으로 `true` 사용 — bash에서 유효 (no-op). `if true; then true; fi` 검증 통과. 의도: 파일 존재 시 아무 동작 없이 통과(바이패스).
---
## 5. 잔여 결함 (LOW — INFORMATIONAL)
### 5.1 ⚠️ 만료된 토큰 시 false positive 가능성 (LOW, 설계 트레이드오프)
**위치**: create_session.sh 라인 93
**분석**: 토큰 파일이 존재하지만 **만료/무효**한 경우, 바이패스가 `agy models` 체크를 스킵하여 세션 시작 → agy 실행 시 인증 실패 가능.
**평가**: 의도적 트레이드오프 — 원 문제는 **Hang**(무한 대기)이며, 만료 토큰으로 인한 후속 실패는 Hang보다 나음(진단 가능). 주석(라인 92)이 의도 명시.
**심각도**: LOW — BLOCKING 아님. 설계 결정으로 수용 가능.
### 5.2 ️ 작업 트리 잔여 .tmp 파일 (INFO, unrelated)
**위치**: `.agents/skills/multi-agent-mux-delegate-job/multi-agent-mux-delegate-job.14657_36745.tmp` (untracked)
**분석**: 이전 delegate_job_safe 실행 잔여물. 본 diff와 무관. 무해하지만 정리 권장.
**심각도**: INFO — 본 리뷰 범위 외.
---
## 6. 종합 평가
### 작업 목표 달성도
"create_session.sh 및 lib.sh에서 macOS 키체인(keyring) 접근 차단으로 인한 비대화식 Hang 현상과 격리 모드(--isolate) 시 인증 토큰 소실 문제를 각각 파일 기반 사전 검증 우회 및 Library/Keychains 폴더 링크 추가를 통해 해결" — **달성**.
### 변경 품질
1.**파일 기반 Hang 우회**: 토큰/자격증명 파일 존재 시 `agy models` 스킵 — 4케이스 검증 모두 PASS
2.**Keychains 심볼릭 링크**: Darwin 가드 + `[ -d ]` 존재 확인 + `ln -sfn` — 안전한 조건부 생성
3.**경로 일치성**: auth check 파일과 provisioning 파일 경로 완전 일치
4.**타겟팅 정확**: agy case에만 Keychains 링크 추가 — 타 agent는 파일 기반 인증으로 불필요
5.**seeded 패턴 일관**: 기존 누적 패턴과 동일
6.**Darwin 가드**: Linux에서 미실행, macOS에서만 동작
### 검증 결과
- 정적 분석: `bash -n` 2/2 OK, `shellcheck` 본 diff 새 경고 없음 (lib.sh clean, create SC1091 기존만) ✅
- 인증 바이패스: 4케이스(토큰 존재/ oauth_creds 존재/ 파일 없음+실패/ 파일 없음+성공) 모두 PASS ✅
- Darwin 가드: Linux 스킵 확인 ✅
- 경로 일치성: auth check ↔ provisioning 완전 일치 ✅
- seeded 일관성: 기존 패턴과 동일 ✅
- 타 agent 분석: agy만 Keychain 사용, 타겟팅 정확 ✅
### 잔여 LOW 1건 + INFO 1건
- LOW 5.1: 만료 토큰 false positive — 의도적 트레이드오프 (Hang > 후속 실패), 주석 명시
- INFO 5.2: 잔여 .tmp 파일 (본 diff 무관)
### 판정 근거
작업 목표(키체인 Hang 우회 + 격리 토큰 소실 해결) 완전 달성. 파일 기반 바이패스 4케이스 검증 PASS, Darwin 가드 동작 확인, 경로 일치성 확보, agy 타겟팅 정확. 정적 분석 통과. 잔여 LOW 1건은 의도적 설계 트레이드오프(Hang 방지가 만료 토큰 후속 실패보다 우선). 주 개발자가 macOS 키체인 문제를 정확히 진단하고 파일 기반 우회 + Keychains 링크로 해결했으므로 PASS 판정이 타당.
[VERDICT: PASS]
+8
View File
@@ -838,6 +838,14 @@ provision_isolation() {
for f in antigravity-oauth-token installation_id settings.json; do
if [ -e "$HOME/.gemini/antigravity-cli/$f" ]; then ln -sfn "$HOME/.gemini/antigravity-cli/$f" "$root/.gemini/antigravity-cli/$f"; seeded="${seeded:+$seeded,}.gemini/antigravity-cli/$f"; fi
done
# On macOS, seed ~/Library/Keychains to allow isolated agy to query Keychain Access credentials
if [ "$(uname)" = "Darwin" ]; then
mkdir -p "$root/Library"
if [ -d "$HOME/Library/Keychains" ]; then
ln -sfn "$HOME/Library/Keychains" "$root/Library/Keychains"
seeded="${seeded:+$seeded,}Library/Keychains"
fi
fi
;;
hermes)
mkdir -p "$root/.hermes"
@@ -89,7 +89,10 @@ if [ "$AGENT" = "claude" ]; then
exit 1
fi
elif [ "$AGENT" = "agy" ]; then
if ! agy models >/dev/null 2>&1; then
# Fast, non-blocking check: if token or credentials exist on disk, assume authenticated to prevent keyring hang
if [ -f "$HOME/.gemini/oauth_creds.json" ] || [ -f "$HOME/.gemini/antigravity-cli/antigravity-oauth-token" ]; then
true
elif ! agy models >/dev/null 2>&1; then
echo "ERROR: agy is not authenticated. Please log in first." >&2
exit 1
fi
+74
View File
@@ -0,0 +1,74 @@
# 📋 PLAN_HERDR.md: herdr 기반 멀티플렉서 백엔드 전환 작업 계획서
이 문서는 기존 `tmux` 기반의 에이전트 라이프사이클 관리를 Rust 기반의 에이전트 인지형 멀티플렉서인 **herdr**로 전면 전환하기 위한 도입 배경, 아키텍처 전략 및 상세 작업 단계들을 정의합니다.
---
## 1. 🔍 도입 배경 및 필요성
현재 운영 중인 `tmux` 기반 백엔드는 훌륭한 호환성을 제공하지만, 다음과 같은 구조적 한계와 간헐적인 프롬프트 유실 오류(Prompt-lock)를 동반합니다.
### 🔴 기존 tmux 환경의 한계
* **대략적인 정적 상태 감지 (Coarse Quiescence)**: 입력을 주입하기 전에 터미널이 키를 수락할 수 있는 휴지 상태인지 확인하기 위해, 셸 스크립트 상에서 `capture-pane`을 0.1~0.5초 주기로 돌려 화면 변경 여부를 체크합니다. 이로 인해 CPU 자원이 급증하는 멀티 에이전트 구동 상황에서 입력을 유실하거나 `Enter` 키가 씹히는 현상이 발생합니다.
* **TUI 모달 상태 기계 파싱의 비효율**: 에이전트가 띄운 다이얼로그(예: 인증, 신뢰 확인)를 인식하기 위해 터미널 하단 20줄의 문자열을 정규식으로 직접 파싱하므로, 에이전트 버전업에 따른 TUI 레이아웃 변경에 매우 취약합니다.
### 🟢 herdr 도입 시 기대 효과
* **PTY 레벨의 밀리초(ms) 단위 이벤트 제어**: `herdr`은 Rust 네이티브로 작성되어 PTY(가상 터미널) 입출력 스트림의 유휴 상태를 서브-밀리초 레벨로 감지합니다. 이로 인해 프롬프트 주입 실패 및 명령 유실 오류가 **근본적으로 제로(0)에 가깝게 줄어듭니다.**
* **에이전트 상태 인지 API**: 에이전트 프로세스의 상태(Working, Idle, Blocked, Done)를 멀티플렉서 레벨에서 해석해 소켓 API로 제공하므로, 지저분한 화면 파싱 코드 없이 정교한 자율 관제가 가능합니다.
---
## 2. 🔀 형상 관리 및 배포 전략
두 백엔드(tmux/herdr)를 단일 코드베이스에서 듀얼 스위칭(`if/else`) 방식으로 지원하면 코드가 과도하게 무거워지고 버그 가능성이 높아집니다. 따라서 **독립된 브랜치 구조**로 깨끗하게 이원화하여 제공합니다.
* **`main` 브랜치 (tmux 기반)**:
* **목표**: 어디서나 즉시 실행 가능한 고호환성 프로덕션 버전.
* **의존성**: 추가 설치가 필요 없는 표준 `tmux` 환경.
* **`herdr` 브랜치 (herdr 기반)**:
* **목표**: 대화식 락 오류가 완벽히 통제되는 워크스테이션(macOS/Linux) 최적화 고안전성 버전.
* **의존성**: `herdr` CLI 및 Unix 소켓 API 환경.
---
## 3. 🎯 상세 구현 마일스톤 및 작업 계획
### 📍 Milestone 1: 개발 환경 구성 및 의존성 진단
* [ ] **브랜치 격리**: `git checkout -b herdr` 브랜치 생성 및 격리 개발 공간 확보.
* [ ] **인스톨러 개정 (`deploy/install_mam.sh`)**:
* 호스트 의존성 체크 대상에 `herdr` 추가 (`tmux` 진단 제거).
* `herdr`이 미설치된 경우, 공식 설치 가이드라인(`https://herdr.dev/install.sh`) 안내 출력 및 조기 종료 처리.
* `.mam/` 격리 폴더 및 환경설정 배포 규칙을 `herdr` 스펙에 맞게 조정.
### 📍 Milestone 2: 로우레벨 어댑터 전면 리팩토링 (`lib.sh`)
* [ ] **명령어 매핑**: `lib.sh` 내의 모든 `tmux` API 호출을 `herdr` 명령으로 전면 개정.
* `_tmux new-session` ➡️ `herdr run -d --name "$SESSION_NAME" -- "$CMD_FULL"`
* `_tmux capture-pane` ➡️ `herdr capture --name "$SESSION_NAME"`
* `_tmux send-keys` ➡️ `herdr send-keys --name "$SESSION_NAME" "$KEYS"`
* `_tmux kill-session` ➡️ `herdr kill --name "$SESSION_NAME"`
* [ ] **정적 상태 감지 함수 재작성 (`_pane_quiescent`)**:
* `herdr`이 기본 제공하는 세션 상태 조회 API를 파싱하여 PTY 정적 상태 여부를 판별하도록 대폭 경량화 및 고도화.
* [ ] **인풋 주입 엔진 고도화 (`send_keys_safe`)**:
* 복잡한 버퍼 제어(`set-buffer`/`paste-buffer`) 대신, `herdr` API를 경유한 다이렉트 프롬프트 주입 방식으로 단순화.
### 📍 Milestone 3: 에이전트 라이프사이클 관리 도구 이관
* [ ] **`create_session.sh` 수정**:
* `herdr` 기동 방식 및 pane PID 수집 로직 교체.
* `.mam/agent-sessions.yaml` 메타데이터 규격을 `herdr` 사양(예: `tmux_server` ➡️ `herdr_workspace`)에 맞게 정렬.
* [ ] **`resume_session.sh` 수정**:
* 죽은 `herdr` 프로세스를 감지하고 저장된 대화 ID와 함께 `herdr run`으로 복원하는 흐름 이식.
* [ ] **`stop_session.sh` 수정**:
* 에이전트 세션의 깔끔한 graceful 종료 및 최종 TUI 캡처 흐름을 `herdr` 규격으로 전환.
### 📍 Milestone 4: 검증 및 루프 완주
* [ ] **정적 분석**: `bash -n``shellcheck` 신규 경고 0건 검증.
* [ ] **오케스트레이션 루프 검증 (`run_loop.sh`)**:
* `run_loop.sh` 내부의 `delegate_job_safe` 실행을 `herdr` 세션 기반으로 연동하여 100% 자율 루프 구동 확인.
* 피어 리뷰어(`cline`, `claude`)들로부터 최종 `[VERDICT: PASS]` 서명 획득.
---
## 4. 📈 사후 관리 및 형상 병합 정책
* `herdr` 브랜치의 개발 및 검증이 완주되어 `PASS` 서명이 누적되면, `deploy/INSTALL.md``README.md` 문서를 개정하여 각 브랜치별 설치 절차를 문서화합니다.
* `main` 브랜치의 공통 규칙 버그 수정 사항(예: `AGENTS.md` 수정 등)은 주기적으로 `herdr` 브랜치로 `git merge`하여 정책적 일치성을 유지합니다.