[Design] herdr 서버가 MAM 정지 없이 꺼졌다 먼저 복원될 때: resume 의 이름만 보는 already running, 이름 없이 뜬 에이전트를 못 찾는 stop — 서비스 훅 대기 (#45 제안 2·4) #49

Open
opened 2026-10-06 01:48:25 +00:00 by Godopu · 0 comments
Owner

배경

#45(v4.8.5, PR #48)는 합의한 범위 A+B 만 고쳤다. MAM 이 격리 herdr 서버를 띄울 때 복원(resume_agents_on_restore)을 끄고, resume 이 자기 세션의 복원된 빈 셸을 닫는다. #45 의 제안 2·4 는 범위 밖으로 남겼고, 이 이슈가 그 둘을 다룬다.

두 문제

둘 다 같은 조건에서 생긴다: /multi-agent-mux-stop 없이 herdr 서버가 꺼지고(재부팅·크래시·업그레이드), 다시 켜질 때 복원이 켜진 채로 herdr 가 저장 레이아웃의 에이전트를 자기 방식으로(권한 플래그 없이, MAM 이 붙인 이름 없이) 먼저 띄운다. 복원은 서버 기동 순간에 일어나므로 MAM 의 resume·stop 이 실행되기 전에 끝나 있다.

  1. resume 의 "already running" 이 이름만 본다 (#45 제안 2). resume_session.sh 는 같은 이름의 에이전트가 있으면 실행을 건너뛰고 행을 MAM 의 cmd_full 로 running 갱신한다. 실제 프로세스는 권한 플래그 없이 돌아, 잡을 받으면 권한 확인 창에서 멈춘다(#30 blocked). resume SKILL.md 도 "Case 3 은 권한 플래그를 확인하지 않는다(#45)"고 적고 있다.
  2. 이름 없이 뜬 에이전트를 stop 이 못 찾는다 (#45 제안 4). stop_session.sh 는 행의 이름으로 찾으므로 "herdr already dead" 로 보고 행만 갱신한다. --purge-conversation 이면 대화 파일까지 지우는데 프로세스는 계속 실행된다.

v4.8.5 이후 남은 발생 경로

  • 사용자가 herdr session attach 등으로 서버를 직접 띄운 경우(복원 켜짐). 주된 경로.
  • bootstrap 이 서버 설정 파일을 쓰지 못해 경고 후 복원 켜진 채 띄운 경우(쓰기 권한 없음 등, 드묾).
  • 누군가 에이전트를 MAM 밖에서 직접 실행한 경우.

MAM 이 서버를 띄우는 경로(resume·create)에서는 v4.8.5 로 생기지 않는다.

왜 스킬로는 풀 수 없는가

스킬은 호출될 때만 실행된다. 복원은 서버 기동 순간에 일어나므로, 서버를 사용자가 직접 띄우면 MAM 은 그 시점에 끼어들 수 없다. 사후에 플래그 없이 뜬 에이전트를 닫고 다시 띄우는 것은 가능하지만, 살아 있는 작업을 끊을 위험이 있어 정답이 아니다. 복원 시점에 개입하는 서비스 차원의 수단이 필요하다.

제안

  1. herdr 가 이미 제공하는 이벤트·옵션을 먼저 확인한다. herdr 0.9.1 소켓 API 에는 events.subscribe, pane.agent_status_changed 가 있다. 서버 기동·세션 복원(persist::restore)·pane 생성과 관련된 이벤트나, pane 별 복원 명령을 지정하는 설정이 있는지 문서(https://herdr.dev/docs/socket-api/)와 herdr --help·설정 스키마로 조사한다. 결과를 이 이슈에 남긴다.
  2. 필요한 훅 (어느 하나면 된다)
    • 복원 직전·직후 이벤트: MAM 이 등록부와 대조해, 등록부에 없거나 stopped·terminated 인 에이전트의 복원은 막거나 닫고, running 인 에이전트는 MAM 의 실행 명령(권한 플래그 포함)으로 띄운다.
    • pane 별 복원 명령 지정: 복원할 때 쓸 명령을 MAM 이 정해 두면 처음부터 플래그가 붙어 뜬다.
    • 서버와 함께 뜨는 MAM 상주 프로세스(서비스): 기동 순간의 대조를 항상 수행한다. 지금의 monitor 스킬(reconcile.sh --subscribe)이 비슷한 일을 하지만 상주하지 않는다.
  3. 훅이 생기기 전까지
    • 운영 규칙: 재부팅 뒤에는 서버에 attach 하기 전에 /multi-agent-mux-resume 을 먼저 실행한다(MAM 이 복원 꺼진 설정으로 서버를 띄운다).
    • (선택) 감지만: resume·stop·status 가 "같은 대화 ID 인데 권한 플래그가 없는 프로세스", "등록부 대화 ID 를 쓰는데 herdr 이름이 없는 프로세스"를 발견하면 경고만 남긴다. pane 을 닫거나 프로세스를 죽이지 않는다.

상태

보류: 서비스 차원의 훅(또는 herdr 의 해당 이벤트) 확인·제공 대기. 제안 1 의 조사는 지금 해도 된다.

관련

  • #45 / PR #48 (A+B, v4.8.5)
  • #30 멈춘 에이전트 알림(플래그 없이 뜬 에이전트의 blocked)
  • #17 운영 신뢰성 로드맵
## 배경 #45(v4.8.5, PR #48)는 합의한 범위 A+B 만 고쳤다. MAM 이 격리 herdr 서버를 띄울 때 복원(`resume_agents_on_restore`)을 끄고, resume 이 자기 세션의 복원된 빈 셸을 닫는다. #45 의 제안 2·4 는 범위 밖으로 남겼고, 이 이슈가 그 둘을 다룬다. ## 두 문제 둘 다 같은 조건에서 생긴다: `/multi-agent-mux-stop` 없이 herdr 서버가 꺼지고(재부팅·크래시·업그레이드), 다시 켜질 때 **복원이 켜진 채로** herdr 가 저장 레이아웃의 에이전트를 자기 방식으로(권한 플래그 없이, MAM 이 붙인 이름 없이) 먼저 띄운다. 복원은 서버 기동 순간에 일어나므로 MAM 의 resume·stop 이 실행되기 전에 끝나 있다. 1. **resume 의 "already running" 이 이름만 본다 (#45 제안 2).** `resume_session.sh` 는 같은 이름의 에이전트가 있으면 실행을 건너뛰고 행을 MAM 의 `cmd_full` 로 `running` 갱신한다. 실제 프로세스는 권한 플래그 없이 돌아, 잡을 받으면 권한 확인 창에서 멈춘다(#30 blocked). resume SKILL.md 도 "Case 3 은 권한 플래그를 확인하지 않는다(#45)"고 적고 있다. 2. **이름 없이 뜬 에이전트를 stop 이 못 찾는다 (#45 제안 4).** `stop_session.sh` 는 행의 이름으로 찾으므로 "herdr already dead" 로 보고 행만 갱신한다. `--purge-conversation` 이면 대화 파일까지 지우는데 프로세스는 계속 실행된다. ## v4.8.5 이후 남은 발생 경로 - 사용자가 `herdr session attach` 등으로 서버를 **직접** 띄운 경우(복원 켜짐). 주된 경로. - bootstrap 이 서버 설정 파일을 쓰지 못해 경고 후 복원 켜진 채 띄운 경우(쓰기 권한 없음 등, 드묾). - 누군가 에이전트를 MAM 밖에서 직접 실행한 경우. MAM 이 서버를 띄우는 경로(resume·create)에서는 v4.8.5 로 생기지 않는다. ## 왜 스킬로는 풀 수 없는가 스킬은 호출될 때만 실행된다. 복원은 서버 기동 순간에 일어나므로, 서버를 사용자가 직접 띄우면 MAM 은 그 시점에 끼어들 수 없다. 사후에 플래그 없이 뜬 에이전트를 닫고 다시 띄우는 것은 가능하지만, 살아 있는 작업을 끊을 위험이 있어 정답이 아니다. **복원 시점에 개입하는 서비스 차원의 수단**이 필요하다. ## 제안 1. **herdr 가 이미 제공하는 이벤트·옵션을 먼저 확인한다.** herdr 0.9.1 소켓 API 에는 `events.subscribe`, `pane.agent_status_changed` 가 있다. 서버 기동·세션 복원(`persist::restore`)·pane 생성과 관련된 이벤트나, pane 별 복원 명령을 지정하는 설정이 있는지 문서(https://herdr.dev/docs/socket-api/)와 `herdr --help`·설정 스키마로 조사한다. 결과를 이 이슈에 남긴다. 2. **필요한 훅 (어느 하나면 된다)** - 복원 직전·직후 이벤트: MAM 이 등록부와 대조해, 등록부에 없거나 stopped·terminated 인 에이전트의 복원은 막거나 닫고, running 인 에이전트는 MAM 의 실행 명령(권한 플래그 포함)으로 띄운다. - pane 별 복원 명령 지정: 복원할 때 쓸 명령을 MAM 이 정해 두면 처음부터 플래그가 붙어 뜬다. - 서버와 함께 뜨는 MAM 상주 프로세스(서비스): 기동 순간의 대조를 항상 수행한다. 지금의 monitor 스킬(`reconcile.sh --subscribe`)이 비슷한 일을 하지만 상주하지 않는다. 3. **훅이 생기기 전까지** - 운영 규칙: 재부팅 뒤에는 서버에 attach 하기 **전에** `/multi-agent-mux-resume` 을 먼저 실행한다(MAM 이 복원 꺼진 설정으로 서버를 띄운다). - (선택) 감지만: resume·stop·status 가 "같은 대화 ID 인데 권한 플래그가 없는 프로세스", "등록부 대화 ID 를 쓰는데 herdr 이름이 없는 프로세스"를 발견하면 **경고만** 남긴다. pane 을 닫거나 프로세스를 죽이지 않는다. ## 상태 보류: 서비스 차원의 훅(또는 herdr 의 해당 이벤트) 확인·제공 대기. 제안 1 의 조사는 지금 해도 된다. ## 관련 - #45 / PR #48 (A+B, v4.8.5) - #30 멈춘 에이전트 알림(플래그 없이 뜬 에이전트의 blocked) - #17 운영 신뢰성 로드맵
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#49