AI 에이전트 세션 자동 인계, 세 가지 방법 다 실패하고 되돌렸다

나는 텔레그램 /blog 명령으로 에이전트 하네스 omo의 장기 작업 세션에 블로그 작업을 넘긴다. 2026년 9월 15일, 긴 컨텍스트에서 GPT가 작업을 처리하지 못한다는 문제를 풀려고 대화 기록 없이 새로 실행하는 /blog --fresh를 만들었다. 실전 검증에서 세 방식이 모두 timeout으로 실패했고, 나는 이 기능을 통째로 되돌렸다.

대상은 긴 세션 문제를 "새 세션으로 자동 인계"로 풀려는 개발자다. 이 글은 성공 방법이 아니라 실패 기록이다. 모델을 바꾸는 것과 세션을 분리하는 것이 어떻게 다른지, 무엇을 시도했고 어디서 멈췄는지를 정리한다.

모델만 바꾸는 것은 답이 아니었다

먼저 떠오르는 방법은 모델 전환이다. 내 브리지에는 이미 모델 선택자가 있었다. /blog --model <선택자> …는 그 요청만 지정 모델로 처리하고 원래 모델로 돌아오며, --model-sticky는 바꾼 모델을 유지한다.

하지만 기록에 남긴 판단은 이렇다. 모델만 바꾸는 방식은 기존 85MB 세션을 그대로 넘기므로 해결책이 아니다. --model은 기존 장기 세션의 컨텍스트를 그대로 쓴다. 모델 전환은 "어떤 모델이 읽느냐"를 바꾸고, 세션 분리는 "무엇을 읽느냐"를 바꾼다. 컨텍스트 문제에는 후자가 필요했다.

만들었던 구조

/blog --fresh 모델별칭 작업내용을 OpenClaw 플러그인에 추가했다. 이 경로는 요청 폴더와 장기 세션 확장을 거치지 않고 worker 스크립트를 detached process로 띄운다. worker는 omo를 세션·확장·프롬프트 템플릿 없이 별도로 실행하고, 결과만 원래 텔레그램 메시지에 답장으로 보낸다. 기록된 실행 형태는 다음과 같다.

omo --no-session --no-extensions --no-prompt-templates --print

기존 세션, 파일, 예약은 지우지 않았다. fresh 실행 자체의 대화 기록만 저장하지 않았다.

새 실행은 빈 상태에서 시작하므로, 작업에 필요한 운영 맥락을 어떻게 넣을지가 남는다. 세 방식은 모두 그 넣는 방법을 바꾼 시도였다.

세 방식 모두 timeout

시도맥락을 넣은 방법설정결과
1전체 HANDOFF/DECISIONS 문서를 모델이 직접 읽게 함high thinking15분 timeout
2문서를 Node가 프롬프트에 inlinelow thinking, 표준 Astra5분 timeout
3범위를 제한한 참조용 스냅샷 + prompt-file + 자동 fallback표준 Astra / Astra-fast / gpt-5.6-sol45초 / 180초 / 180초, 모두 SIGTERM timeout, stderr 없음

1번 시도에 쓴 모델은 기록에 없다. 각 시도에 넣은 문서 크기도 남기지 않았다.

세 번째는 문서 전체 대신 범위를 제한한 스냅샷을 넣은 시도였지만 결과는 같았다. 모델을 바꿔 가며 fallback해도 모두 timeout이었고, stderr에는 아무것도 남지 않았다.

대조 실행: 작은 입력은 즉시 성공

반면 작은 prompt-file로 Astra-fast에 PROMPT_FILE_READY라는 응답만 요구하자 즉시 성공했다.

기록은 이 대조를 이렇게 해석했다. 인증, 모델, @file 입력은 정상이고, 운영 맥락을 넣은 omo 독립 실행 경로가 안정적이지 않다. 세 시도가 정확히 어느 단계에서 멈췄는지는 기록에 없다. 맥락의 크기가 원인이라고 단정할 근거도 없다.

기능을 되돌린 결정

세 접근이 실패한 뒤 /fresh 구현, worker, 문서, 실험 상태 파일을 모두 롤백했다. 기존 텔레그램 브리지만 남겼고, 전체 테스트 40개가 통과했으며 gateway 재시작 응답도 ok/restarted였다. 그 뒤로 /blog --fresh는 지원하지 않는다.

같은 기록에서 모델 선택자 동작도 정리했다. /blog --model 아스트라만 보내면 다음 요청부터 Astra를 쓰고, /blog --model 아스트라 상태보고처럼 작업 내용이 붙으면 그 요청만 Astra로 처리한 뒤 원래 모델로 돌아온다. 이 동작의 회귀 테스트 28개가 통과했다. 다시 말하지만 이것은 모델 전환이고 컨텍스트 문제의 해결책이 아니다.

당시 기록이 긴 컨텍스트 문제의 대안으로 적은 것은 수동 절차 하나다. 새 세션을 직접 만들고 HANDOFF 문서로 인계하는 방식이다. 기록은 이를 검증된 해결책이라고 적었지만, 몇 번 시도해 몇 번 성공했는지는 남기지 않았다. 그래서 여기서도 성공률을 말하지 않는다.

비슷한 기능을 만든다면

이 실패에서 내가 가져가는 순서는 이렇다. 일반 규칙이 아니라 이 한 번의 기록에서 나온 내 판단이다.

  • 컨텍스트 문제라면 모델 전환과 세션 분리를 먼저 구분한다. 같은 세션을 쓰는 한 모델을 바꿔도 읽는 양은 그대로다.
  • 맥락을 넣은 실제 작업을 돌리기 전에, PROMPT_FILE_READY 같은 작은 대조 실행으로 인증·모델·입력 경로를 먼저 통과시킨다. 그래야 실패했을 때 경로 문제와 맥락 문제를 나눠 볼 수 있다.
  • 세 방식이 모두 실패하면 네 번째를 붙이기보다, 지원하지 않는 기능으로 정리하고 코드와 상태 파일을 걷어낸다.

이 기록이 답하지 않는 것

  • 세 시도가 timeout에 이른 정확한 원인
  • 1번 시도의 모델, 각 시도에 넣은 문서 크기
  • 수동 HANDOFF 인계의 성공률

같이 보면 좋은 글

컨텍스트에 무엇을 남기고 무엇을 지울지는 컨텍스트 엔지니어링 새 규칙 — "지워라"가 통하는 규칙, 안 통하는 게이트에서 다뤘다. 측정 결과를 해석할 때 실제로 무엇을 재고 있었는지 의심해 본 사례는 Benchmark가 측정한 건 모델이 아니라 채점기였다 — Honcho/Hindsight 3 라운드 측정 후기에 있다. 긴 세션의 토큰 사용을 줄이는 방법은 Claude Code 토큰 낭비 줄이는 5가지 — 캐시 TTL 5분 단축 대응법을 보면 된다.

결론: 새 세션 자동 인계는 접고 수동 인계만 남겼다

모델만 바꾸면 기존 85MB 세션을 그대로 넘긴다는 판단에서, 긴 컨텍스트 문제를 풀려고 대화 기록 없는 독립 실행 /blog --fresh를 만들었다. 운영 맥락을 넣은 세 방식은 45초에서 15분 사이 timeout으로 모두 실패했고, 맥락 없이 PROMPT_FILE_READY만 요구한 대조 실행은 즉시 성공했다. 나는 기능과 상태 파일을 모두 롤백했고, 당시 기록이 남긴 대안은 새 세션을 직접 만들고 HANDOFF 문서로 넘기는 수동 절차뿐이다.

댓글

이 블로그의 인기 게시물

AI 코딩 스킬, 많을수록 좋을까 — 자산이 부채로 바뀌는 손익분기

M4 Max 128GB 로컬 LLM 4종 속도 비교 — 실측 기록과 한계

Opus 5는 더 잘 쓰고, 더 AI답게 쓴다 — 세 모델 첫날 실측