[Bug] agy·grok·codex 시작 trust 다이얼로그를 처리하지 않아 TUI 준비 대기가 시간 초과되고 온보딩이 건너뛰어짐 #24

Closed
opened 2026-09-14 14:42:03 +00:00 by Godopu · 2 comments
Owner

증상

2026-09-14 create_session.sh 로 reviewer-agy-01, reviewer-grok-01, planner-reviewer-codex-01 을 만들 때 세 에이전트 모두 첫 화면의 디렉터리 신뢰(trust) 다이얼로그에서 멈췄다.

에이전트 다이얼로그 수락 방법
agy Do you trust the contents of this project? > Yes, I trust this folder 선택 상태에서 Enter
grok Do you trust the contents of this directory? y
codex Do you trust the contents of this directory? › 1. Yes, continue 선택 상태에서 Enter

결과:

  • ⚠️ TUI readiness check timed out → 프로세스가 살아 있어 세션은 보존, last_visible_status: tui-ready-timeout.
  • 준비되지 않은 세션이므로 온보딩 주입이 비활성화된다(create_session.sh:313-314).
  • 진단 덤프 .mam/diagnostics/<name>-<epoch>.txt 에 다이얼로그 화면이 남는다.
  • 사람이 각 pane 에서 직접 수락한 뒤에야 진행됐다.

원인

  • create_session.sh:322 의 handle_startup_dialogs(lib.sh:2668)는 AGENT=claude 일 때만 호출된다.
  • wait_for_tui_ready(lib.sh:2107)는 다이얼로그 화면을 준비 완료로 보지 않으므로 시간 초과까지 기다린다.

제안

  1. 에이전트별 trust 다이얼로그 시그니처와 수락 키를 lib_py.agents facts 에 둔다.
  2. wait_for_tui_ready 대기 중 시그니처를 감지하면 수락하고 준비 대기를 이어간다.
  3. CLI 가 비대화식 trust 설정(설정 파일·옵션)을 제공하면 그쪽을 우선한다.
  4. 보안: 수락은 --workspace 로 지정한 대상 디렉터리에 한정한다. codex 의 경우 trust 가 프로젝트 로컬 설정·훅·exec 정책을 로드하게 하므로, 자동 수락을 옵트인(--auto-trust 등)으로 둘지 검토한다.

환경 정보

  • MAM v4.5.0 (당시 main 5611859), 현재 main 1134d74 에서도 해당 코드 동일
  • agy (Gemini 3.8 Flash), grok 1.0.30, codex-cli 0.154.0, Linux
## 증상 2026-09-14 `create_session.sh` 로 `reviewer-agy-01`, `reviewer-grok-01`, `planner-reviewer-codex-01` 을 만들 때 세 에이전트 모두 첫 화면의 **디렉터리 신뢰(trust) 다이얼로그**에서 멈췄다. | 에이전트 | 다이얼로그 | 수락 방법 | |---|---|---| | agy | `Do you trust the contents of this project?` | `> Yes, I trust this folder` 선택 상태에서 Enter | | grok | `Do you trust the contents of this directory?` | `y` | | codex | `Do you trust the contents of this directory?` | `› 1. Yes, continue` 선택 상태에서 Enter | 결과: - `⚠️ TUI readiness check timed out` → 프로세스가 살아 있어 세션은 보존, `last_visible_status: tui-ready-timeout`. - 준비되지 않은 세션이므로 **온보딩 주입이 비활성화**된다(`create_session.sh:313-314`). - 진단 덤프 `.mam/diagnostics/<name>-<epoch>.txt` 에 다이얼로그 화면이 남는다. - 사람이 각 pane 에서 직접 수락한 뒤에야 진행됐다. ## 원인 - `create_session.sh:322` 의 `handle_startup_dialogs`(`lib.sh:2668`)는 `AGENT=claude` 일 때만 호출된다. - `wait_for_tui_ready`(`lib.sh:2107`)는 다이얼로그 화면을 준비 완료로 보지 않으므로 시간 초과까지 기다린다. ## 제안 1. 에이전트별 trust 다이얼로그 시그니처와 수락 키를 `lib_py.agents` facts 에 둔다. 2. `wait_for_tui_ready` 대기 중 시그니처를 감지하면 수락하고 준비 대기를 이어간다. 3. CLI 가 비대화식 trust 설정(설정 파일·옵션)을 제공하면 그쪽을 우선한다. 4. 보안: 수락은 `--workspace` 로 지정한 대상 디렉터리에 한정한다. codex 의 경우 trust 가 프로젝트 로컬 설정·훅·exec 정책을 로드하게 하므로, 자동 수락을 옵트인(`--auto-trust` 등)으로 둘지 검토한다. ## 환경 정보 - MAM v4.5.0 (당시 main `5611859`), 현재 main `1134d74` 에서도 해당 코드 동일 - agy (Gemini 3.8 Flash), grok 1.0.30, codex-cli 0.154.0, Linux
Author
Owner

macOS 에서도 재현 (agy)

  • 환경: macOS (Darwin 25.6.0), MAM main 1134d74, agy (Gemini 3.8 Flash)
  • create_session.sh --agent agy --onboard 실행 시 Do you trust the contents of this project? 다이얼로그에서 멈췄습니다. 이어서 TUI readiness check timed out 이 나고 온보딩이 건너뛰어졌습니다 (본문과 동일).
  • Enter 키로 수락한 뒤 delegate-job submit 으로 온보딩을 보내자 정상 완료됐습니다 (#23 의 env 우회 적용).
  • 참고: 수락 직후에도 herdr agent read --source visible 은 한동안 다이얼로그 화면을 그대로 보여 줬습니다. 같은 시점에 --source recent 에서는 입력창이 보였습니다. 제안 2처럼 대기 중에 다이얼로그를 감지·수락하도록 구현할 때, visible 스냅샷이 갱신되지 않을 수 있다는 점을 고려해야 합니다.
## macOS 에서도 재현 (agy) - 환경: macOS (Darwin 25.6.0), MAM main `1134d74`, agy (Gemini 3.8 Flash) - `create_session.sh --agent agy --onboard` 실행 시 `Do you trust the contents of this project?` 다이얼로그에서 멈췄습니다. 이어서 `TUI readiness check timed out` 이 나고 온보딩이 건너뛰어졌습니다 (본문과 동일). - Enter 키로 수락한 뒤 `delegate-job submit` 으로 온보딩을 보내자 정상 완료됐습니다 (#23 의 env 우회 적용). - 참고: 수락 직후에도 `herdr agent read --source visible` 은 한동안 다이얼로그 화면을 그대로 보여 줬습니다. 같은 시점에 `--source recent` 에서는 입력창이 보였습니다. 제안 2처럼 대기 중에 다이얼로그를 감지·수락하도록 구현할 때, `visible` 스냅샷이 갱신되지 않을 수 있다는 점을 고려해야 합니다.
Author
Owner

PR #35 로 해결했다. 브랜치 fix/issue-23-24, head f4ba205.

모달의 시그니처와 수락 키를 에이전트 어댑터(startup_dialogs → MAM_STARTUP_DIALOGS)로 옮기고 handle_startup_dialogs 를 에이전트 무관으로 만들었다. 이전에는 claude 전용 사다리를 claude 에게만 돌렸기 때문에 agy·grok·codex 는 신뢰 창에 앉은 채로 준비 대기가 만료되고 온보딩이 건너뛰어졌다.

  • agy: "Do you trust the contents of this project" / "Yes, I trust this folder" 가 미리 선택되어 있으므로 Enter
  • grok: "Do you trust the contents of this directory" 에 y
  • codex: 신뢰 창은 "1. Yes, continue" 가 선택되어 있어 Enter, 0.155.1 업데이트 안내는 아무것도 바꾸지 않는 2(Skip)

--no-auto-trust 와 MAM_AUTO_TRUST=0 으로 신뢰 창만 사람에게 남길 수 있다. codex 의 신뢰는 프로젝트의 로컬 설정·훅·실행 정책까지 함께 읽어들이므로 이 스위치가 필요하다. 안내 창은 항상 처리한다.

수락 판정은 다이얼로그 시그니처가 아니라 준비 토큰으로 한다. --source visible 은 이미 수락된 창을 한동안 계속 보여주므로, 화면에 시그니처가 남아 있다는 것이 키가 전달되지 않았다는 증거가 아니다. 같은 시그니처에 대한 재전송은 MAM_DIALOG_RESEND_S(기본 5초)로 막는다. resume 도 create 와 같은 계약과 같은 스위치를 쓴다.

검증

전체 스위트 f4ba205: 1080 통과 / 12 실패 / 20 건너뜀. 실패 12건은 모두 이 호스트의 기존 기준선 실패다. 리뷰어 5명 전원 PASS.

실제 herdr 수용 시험에서 agy·grok·codex·opencode 네 건 모두 사람 개입 없이 사용 가능한 TUI 까지 도달했다. codex 업데이트 안내도, 남은 신뢰 창도 없었다.

부수 확인: grok pane 에 기동 후 "Help improve Grok / Opt out / Opt in" 텔레메트리 배너가 남는다. 입력을 막지 않는다. 배너가 뜬 채로 33초 작업해 온보딩을 마치는 것을 실측했으므로 다이얼로그 항목을 추가하지 않았다.

PR #35 로 해결했다. 브랜치 `fix/issue-23-24`, head `f4ba205`. 모달의 시그니처와 수락 키를 에이전트 어댑터(`startup_dialogs` → `MAM_STARTUP_DIALOGS`)로 옮기고 `handle_startup_dialogs` 를 에이전트 무관으로 만들었다. 이전에는 claude 전용 사다리를 claude 에게만 돌렸기 때문에 agy·grok·codex 는 신뢰 창에 앉은 채로 준비 대기가 만료되고 온보딩이 건너뛰어졌다. - agy: "Do you trust the contents of this project" / "Yes, I trust this folder" 가 미리 선택되어 있으므로 Enter - grok: "Do you trust the contents of this directory" 에 `y` - codex: 신뢰 창은 "1. Yes, continue" 가 선택되어 있어 Enter, 0.155.1 업데이트 안내는 아무것도 바꾸지 않는 `2`(Skip) `--no-auto-trust` 와 `MAM_AUTO_TRUST=0` 으로 신뢰 창만 사람에게 남길 수 있다. codex 의 신뢰는 프로젝트의 로컬 설정·훅·실행 정책까지 함께 읽어들이므로 이 스위치가 필요하다. 안내 창은 항상 처리한다. 수락 판정은 다이얼로그 시그니처가 아니라 준비 토큰으로 한다. `--source visible` 은 이미 수락된 창을 한동안 계속 보여주므로, 화면에 시그니처가 남아 있다는 것이 키가 전달되지 않았다는 증거가 아니다. 같은 시그니처에 대한 재전송은 `MAM_DIALOG_RESEND_S`(기본 5초)로 막는다. resume 도 create 와 같은 계약과 같은 스위치를 쓴다. ## 검증 전체 스위트 `f4ba205`: 1080 통과 / 12 실패 / 20 건너뜀. 실패 12건은 모두 이 호스트의 기존 기준선 실패다. 리뷰어 5명 전원 PASS. 실제 herdr 수용 시험에서 agy·grok·codex·opencode 네 건 모두 사람 개입 없이 사용 가능한 TUI 까지 도달했다. codex 업데이트 안내도, 남은 신뢰 창도 없었다. 부수 확인: grok pane 에 기동 후 "Help improve Grok / Opt out / Opt in" 텔레메트리 배너가 남는다. 입력을 막지 않는다. 배너가 뜬 채로 33초 작업해 온보딩을 마치는 것을 실측했으므로 다이얼로그 항목을 추가하지 않았다.
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tmpl/multi-agent-mux#24