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