본문으로 건너뛰기
← 블로그
AI Agents하이프마크 AI팀

resume 플래그는 하네스마다 다르고, 틀리면 프로세스가 죽는다

resume 플래그는 하네스마다 다르고, 틀리면 프로세스가 죽는다

공통 규약이 없습니다

에이전트 CLI 를 여러 종류 붙이면 제일 먼저 부딪히는 게 세션 재개입니다. 공통 규약이 없습니다. 각 CLI 가 자기 방식을 갖고 있고, 그중 몇은 잘못된 입력에 프로세스를 죽이며, 플래그 이름이 충분히 비슷해서 같은 동작일 거라고 가정하게 됩니다. 아닙니다.

실측 표

버전을 함께 적습니다. 이 동작은 버전에 따라 바뀔 수 있어서, 버전 없는 표는 6개월 뒤 거짓말이 됩니다.

CLI (측정 버전)플래그동작
Codex CLI 0.144.5resume <모르는 uuid>즉시 exit 1. 오류 문구가 TUI 와 exec 모드에서 다릅니다 — 메시지 문자열로 단언하지 마십시오
Codex CLI 0.144.5resume --last안전합니다. 세션이 하나도 없는 홈에서도 새 세션으로 부팅합니다. 이게 올바른 기본값입니다
Grok CLI 0.2.112--session-id <uuid>새 세션 전용. 그 ID 가 이미 있으면 already in use, 즉사
Grok CLI 0.2.112--resume <uuid>홈 전체를 검색하며 cwd 와 무관합니다. 모르는 ID 는 원격 레지스트리를 조회해 404 → 즉사
Grok CLI 0.2.112--continue현재 디렉터리의 최근 세션. 세션 없는 디렉터리에서는 즉사
Claude Code--resume <uuid>자체 프로젝트 범위 세션 저장소를 기준으로 동작

여기서 규칙 세 개가 나옵니다.

규칙 1 — 한 CLI 의 세션 ID 를 다른 CLI 에 넘기지 않는다

너무 당연해 보여서 적기 민망한데, 이 영역에서 저희가 겪은 가장 비싼 버그였습니다.

한 하네스용으로 쓴 resume ID 리졸버를 모델 구분 없이 호출했고, 그 하네스의 UUID 가 다른 하네스로 들어갔습니다. 결과는 재시작할 때마다 부팅 중 사망.

증상이 헷갈렸던 이유가 있습니다. 겉으로는 "재시작은 깨졌는데 전환은 된다" 로 보였습니다. 전환 경로는 우연히 모델을 인지하고 있었고 재시작 경로만 아니었기 때문입니다.

resume 경로를 새로 추가할 때는, 이미 세션 ID 를 해석하는 다른 모든 자리를 찾아 각각 모델을 인지하는지 확인하십시오. 이미 제대로 된 한 곳의 모양을 그대로 베끼는 게 안전합니다.

규칙 2 — 모든 resume 플래그를 전제조건으로 감싼다

각 플래그는 조용히 요구하는 전제가 다릅니다.

  • --continue이 cwd 에 세션이 있어야 한다
  • --session-id → 그 ID 가 없어야 한다
  • --resume → 그 ID 가 있고 해석 가능해야 한다

전제가 깨지면 경고가 아니라 프로세스 종료입니다. 그러니 spawn 하기 전에 확인해야 합니다. 띄우고 나서 실패를 처리하는 구조로는 늦습니다.

규칙 3 — 세션 키는 실제 작업 디렉터리다

적어도 한 CLI 는 세션을 실제 cwd 를 인코딩한 경로 아래 둡니다. git worktree 를 쓰면 worktree 마다 자기 세션 히스토리를 갖는다는 뜻입니다.

여기서 하루를 날린 함정이 있습니다. 이걸 폴더 신뢰(folder trust) 와 혼동하면 안 됩니다. 같은 CLI 안의 다른 규칙이고, 신뢰 결정은 worktree 를 메인 체크아웃으로 정규화할 수 있습니다. 그래서 worktree 경로만 등록하면 신뢰되지 않은 상태로 남고, 로컬 도구가 조용히 시작에 실패합니다.

한 CLI 안에 경로 의미론이 다른 규칙이 둘 있습니다.

그리고 하나 더 — 세션 디렉터리 옆의 prompt_history 파일은 세션이 아닙니다. 이걸 세면 "이 디렉터리에 세션이 있나?"가 참을 돌려주고, 그 다음 --continue 가 프로세스를 죽입니다.

틀렸던 가정 하나

저희가 위험하다고 예상했다가 실측으로 뒤집힌 것도 적어둡니다.

한 머신을 공유하는 에이전트들이 서로의 "가장 최근 세션"을 훔칠 거라고 봤습니다. 그렇지 않았습니다. 각 spawn 이 격리된 홈 디렉터리를 받으면 "가장 최근"은 항상 그 에이전트 범위로 한정됩니다.

명백히 위험해 보여서 일부러 테스트했고, 가설이 틀렸습니다. --last 계열 플래그를 제공하는 CLI 에서는 그게 정답입니다.

정리

항목실무 규칙
세션 ID 출처하네스마다 격리. 리졸버는 반드시 모델 인지
전제조건spawn 전에 확인. 실패는 경고가 아니라 종료
오류 판정메시지 문자열 대신 종료 코드
worktree세션은 worktree 별. 신뢰는 별개 규칙
홈 격리하면 --last 가 안전해진다

이걸 직접 다루는 대신 Marblo 는 티켓마다 하네스와 세션을 묶어 관리하고, 재시작·전환 경로가 같은 리졸버를 씁니다.

전문은 공식 리포지토리의 Fleet Operations 지식팩에 공개돼 있습니다. 측정 당시 확인한 것과 문제가 있었던 것까지 그대로 적혀 있습니다.

같은 운영에서 나온 다른 글

MARBLO

읽는 것보다 돌려보는 쪽이 빠릅니다

Marblo 는 macOS · Windows 데스크톱 앱입니다. 이미 쓰고 계신 CLI 를 연결하면 티켓마다 다른 모델을 붙여 병렬로 돌리고, 머지 전에 사람이 승인합니다. 무료 플랜으로 프로젝트 1개까지 바로 확인하실 수 있습니다.

resume 플래그는 하네스마다 다르고, 틀리면 프로세스가 죽는다 - Hypemarc Blog | Hypemarc