# πŸ“‘ MAM μŠ€ν‚¬ μ΅œμ ν™” μ„Έμ…˜ μΈμˆ˜μΈκ³„ μš”μ•½μ„œ (handoff.md) 이 μΈμˆ˜μΈκ³„μ„œλŠ” **Multi-Agent Mux (MAM)** ν”„λ‘œμ νŠΈμ—μ„œ μ§„ν–‰λœ **개발 μŠ€ν‚¬ μ΅œμ ν™” Phase 1 및 Phase 2 일뢀 κ΅¬ν˜„ μ™„λ£Œ** μƒνƒœμ™€, μ—μ΄μ „νŠΈ μ„Έμ…˜ 토큰 ν•œκ³„(Rate limit) 및 κ²€μˆ˜ λ²”μœ„ μ œμ•½μœΌλ‘œ 인해 보λ₯˜λœ **λ‚˜λ¨Έμ§€ μž”μ—¬ μ΅œμ ν™” κ³Όμ œλ“€**을 λ‹€μŒ μ°¨μˆ˜μ— μ—°κ³„ν•˜κΈ° μœ„ν•΄ μž‘μ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. --- ## 1. 🏁 ν˜„μž¬ μ™„λ£Œλœ μ΅œμ ν™” μ„±κ³Ό (Phase 1 & 2 μ™„λ£Œ) * **OP-1 (λ°˜μ‘ν˜• μ„Έμ…˜ μ’…λ£Œ - Latency)**: `lib.sh`에 `_wait_session_gone` 헬퍼λ₯Ό λ„μž…ν•˜μ—¬ κ³ μ • 8초 λŒ€κΈ°ν•˜λ˜ 문제λ₯Ό μ‘°κΈ° μ’…λ£Œ 감지 λ°©μ‹μœΌλ‘œ ν•΄κ²° (평균 μ’…λ£Œ μ‹œκ°„ **8초 ➑️ 0.3초 미만**). `stop_session.sh`에 `set -e` κ°•μ œ 폭사 λ°©μ§€ `|| true` κ°€λ“œ νƒ‘μž¬. * **OP-2 (MQTT ꡬ독 동기화 ν•Έλ“œμ…°μ΄ν¬ - Latency)**: `job_subscriber.py`에 `on_subscribe` 콜백 μ‹ ν˜Έλ₯Ό μΆ”κ°€ν•˜κ³ , `delegate-job`μ—μ„œ `SUBSCRIBED` sentinel 폴링 및 `kill -0 $sub_pid` ν”„λ‘œμ„ΈμŠ€ 생쑴 검사λ₯Ό 병행 κΈ°μž…ν•˜μ—¬ **WAN ν™˜κ²½μ˜ 이벀트 μœ μ‹€μ„ λ°•λ©Έ**ν•˜κ³  μ¦‰μ‹œ κΈ°λ™ν•˜λ„λ‘ λ³€κ²½. * **OP-3 (Event Loop CPU 점유 μ΅œμ ν™” - Latency)**: `reconcile.sh` λ°±κ·ΈλΌμš΄λ“œ 파이썬 λŒ€κΈ° 루프λ₯Ό `threading.Event().wait` Pacing으둜 κ΅μ²΄ν•˜μ—¬ **유휴 μƒνƒœ CPU μ μœ μœ¨μ„ 0%**둜 단좕. * **OP-4 (Tmux Dispatcher 단일화 - DRY)**: 격리 μ„œλ²„ λŒ€μ‘μ„ 단일 canonical helper인 `mam_tmux`둜 μΌμ›ν™”ν•˜κ³ , `_REAL_TMUX_PATH` 맀핑을 κ°•μ œν•˜μ—¬ **λ¬΄ν•œ μž¬κ·€(Stack Overflow) 리슀크λ₯Ό μ™„μ „νžˆ 제거**. * **OP-6 & OP-7 (토큰 μƒμˆ˜ν™” 및 zsh μ†Œμ‹± κ°€λ“œ - Portability)**: λŒ€ν™”μ°½ 감지 μ •κ·œμ‹ 토큰 단일화 및 zsh sourcing λ°©μ§€λ₯Ό μœ„ν•œ μ•ˆμ „ κ²½κ³  트랩 νƒ‘μž¬. 두 리뷰어(Cline & Creator) 및 ν”Œλž˜λ„ˆ μ—μ΄μ „νŠΈλ‘œλΆ€ν„° μ΅œμ’… 정식 **PASS** 및 **APPROVED** μ„œλͺ…을 νšλ“ν•˜μ—¬ 릴리슀 컀밋 μ™„μˆ˜ (`7eeb4b7`). --- ## ⏭️ μΆ”ν›„ μˆ˜ν–‰ν•  μž”μ—¬ μ΅œμ ν™” 과제 (Next Action Items) λ‹€μŒ μ„Έμ…˜μ—μ„œ μ—μ΄μ „νŠΈ(Claude λ“±)μ—κ²Œ κ²€μˆ˜λ°›κ³  μ‹€μ œλ‘œ 이행해야 ν•  λͺ©λ‘μž…λ‹ˆλ‹€: ### 1. OP-5: SQLite / YAML 데이터 λ‘œλ” 쀑볡 제거 (DRY) * **λŒ€μƒ 파일**: `lib.sh` (3κ°œμ†Œ), `stop_session.sh:87`, `status.sh:42`, `update_yaml_resumed.sh:66`, `reconcile.sh:298` * **ν˜„ν™© 및 원인**: SQLite와 YAMLμ—μ„œ μ—μ΄μ „νŠΈ 병합 μ„Έμ…˜ μƒνƒœλ₯Ό λ‘œλ“œν•˜κΈ° μœ„ν•œ 파이썬 heredoc 블둝이 **7개 νŒŒμΌμ— 볡사-λΆ™μ—¬λ„£κΈ°**λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. * **κ°œμ„  λ°©ν–₯**: `lib.sh` 내에 `load_state_json` 곡톡 ν•¨μˆ˜λ₯Ό 단일 κ΅¬ν˜„ν•˜κ³  슀크립트 νŒŒμΌλ“€μ΄ 이λ₯Ό 톡해 νŒŒμ‹±λœ JSON 슀트림만 읽도둝 κ°œμ„ ν•œ λ’€, ν”Œλž˜λ„ˆ/리뷰어 κ²€μˆ˜ PASSλ₯Ό νšλ“ν•΄μ•Ό ν•©λ‹ˆλ‹€. ### 2. OP-8: Degraded λͺ¨λ“œ 볡ꡬ 루프 μ˜ˆμ™Έ 처리 κ°•ν™” (Observability) * **λŒ€μƒ 파일**: `reconcile.sh:269` * **ν˜„ν™© 및 원인**: 브둜컀 λ‹¨μ ˆ μ‹œ 볡ꡬλ₯Ό μœ λ„ν•˜λŠ” λ£¨ν”„μ˜ μ—λŸ¬ 좜λ ₯이 `>/dev/null 2>&1 || true` 둜 μ°¨λ‹¨λ˜μ–΄ μžˆμ–΄ λ°μ΄ν„°λ² μ΄μŠ€ 락 λ“±μ˜ μ‹¬κ°ν•œ 영ꡬ μž₯μ•  μ‹œμ—λ„ λͺ¨λ‹ˆν„°κ°€ 성곡인 μ²™ λ¬΅μΈλ©λ‹ˆλ‹€. * **κ°œμ„  λ°©ν–₯**: μ—λŸ¬ 좜λ ₯을 캑처 및 λ‘œκΉ…ν•˜κ³ , 5회 연속 μž₯μ•  μ‹œ 볡ꡬ κ°μ‹œ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ’…λ£Œ ν›„ μžκ°€ μž¬κΈ°λ™(Supervisor restart)ν•˜λ„λ‘ λ³΄μ™„ν•˜κ³  κ²€μˆ˜λ°›μ•„μ•Ό ν•©λ‹ˆλ‹€. ### 3. Phase 3 이식성 보완 과제 * **OP-9 (POSIX NFS 탐지)**: GNU μ „μš© `df --output`을 POSIX ν˜Έν™˜ `df -P`둜 κ΅μ²΄ν•˜μ—¬ macOS/BSDμ—μ„œ flock WAL μ•ˆμ „ μŠ€μœ„μΉ˜κ°€ 침묡 μ†μ—μ„œ λΉ„ν™œμ„±ν™”λ˜λ˜ 이슈 μˆ˜μ • (FUTURE_WORKS FW-P1/FW-D3 λŒ€μ‘). * **OP-10 (Marker-walk 루트 탐색)**: κΉŠμ΄κ°€ ν•˜λ“œμ½”λ”©λœ `../../../../` 경둜 좔적을 νμ§€ν•˜κ³ , μ΅œμƒμœ„ μ›Œν¬μŠ€νŽ˜μ΄μŠ€ 마컀 파일 감지 λ°©μ‹μœΌλ‘œ 루트 μ ˆλŒ€ 경둜 탐색기 적용 (FUTURE_WORKS FW-P6 λŒ€μ‘). ### 4. πŸ“‚ [μ‹ κ·œ ꡬ상] μž‘μ—… λ‹¨μœ„(Job) 쀑심 디렉터리 ꡬ쑰 μž¬κ΅¬μ‘°ν™” κ²€ν†  및 μŠ€ν‚¬ μˆ˜μ • κ³„νš * **κ°œμš” 및 아이디어 κ²€ν† **: * ν˜„μž¬ μ§€μ‹œμ‚¬ν•­(brief) νŒŒμΌμ€ λ‹€μ–‘ν•œ κ²½λ‘œμ— μ‚°μž¬ν•˜κ³  있으며, μ—μ΄μ „νŠΈλ“€μ˜ λ³΄κ³ μ„œ νŒŒμΌμ€ μΌκ΄„μ μœΌλ‘œ `.agents/reports//` μ•„λž˜μ— μ μž¬λ˜μ–΄ νŠΉμ • μž‘μ—…(Job) λ‹¨μœ„μ˜ λ³΄κ³ μ„œ 역좔적이 λ²ˆκ±°λ‘­μŠ΅λ‹ˆλ‹€. * **μ‚¬μš©μž μ œμ•ˆ μ•„ν‚€ν…μ²˜**: 1. μž‘μ—…μ΄ λ“±λ‘λ˜λ©΄ **`.mam/jobs//`** λΌλŠ” 고유 μž‘μ—… λ‹¨μœ„ 폴더λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 2. ν•΄λ‹Ή 폴더 ν•˜μœ„μ— **μ§€μ‹œμ‚¬ν•­ brief 파일**을 기둝해 λ‹€λ₯Έ μ—μ΄μ „νŠΈλ“€μ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€. 3. μž‘μ—…μ„ μœ„μž„λ°›μ•„ μˆ˜ν–‰ν•œ λ‹€λ₯Έ μ—μ΄μ „νŠΈλ“€μ˜ κ²°κ³Ό λ³΄κ³ μ„œλ“€μ€ κΈ°μ‘΄ 곡톡 폴더 λŒ€μ‹  ν•΄λ‹Ή μž‘μ—… 폴더 내뢀인 **`.mam/jobs//{agent-id}-reports/`** 디렉터리에 격리 μ €μž₯ν•˜λ„λ‘ 경둜λ₯Ό μΉ˜ν™˜ν•©λ‹ˆλ‹€. * **κ²€ν†  의견 (APPROVED)**: μž‘μ—…(Job)을 μ€‘μ‹¬μœΌλ‘œ ν•œ μ§€μ‹œμ„œμ™€ κ²°κ³Ό λ³΄κ³ μ„œμ˜ 귀속성과 좔적성(Audit Trail)을 κ·ΉλŒ€ν™”ν•  수 μžˆλŠ” 맀우 ν›Œλ₯­ν•œ ꡬ쑰적 κ°œμ„ μ•ˆμž…λ‹ˆλ‹€. * **μŠ€ν‚¬ μˆ˜μ • 영ν–₯ λ²”μœ„ 및 이행 κ³„νš**: * `multi-agent-mux-delegate-job` 슀크립트 μˆ˜μ •: 작 등둝 μ‹œ `.mam/jobs//` 디렉터리λ₯Ό μžλ™ μƒμ„±ν•˜κ³  μ§€μ‹œμ„œ λ§ˆν¬λ‹€μš΄μ„ κ·Έ ν•˜μœ„λ‘œ 동적 좜λ ₯ν•˜λ„λ‘ λ³€κ²½. * 리뷰어 및 크리에이터 μ—μ΄μ „νŠΈμ˜ ꡬ동 인자 및 슀크립트 μˆ˜μ •: λ³΄κ³ μ„œ 좜λ ₯ 경둜λ₯Ό ν™˜κ²½λ³€μˆ˜ λ˜λŠ” 인자둜 전달받은 작 ν•˜μœ„ 디렉터리(`$JOB_DIR/$AGENT_ID-reports/`)둜 μΉ˜ν™˜ν•˜μ—¬ λΌμ΄νŒ…ν•˜λ„λ‘ 패치.