블로그 목록

--fork-session이 엉뚱한 대화를 가져오는 이유

Threads 원문 보기 (8개 연결 스레드)

Claude Code에서 --fork-session으로 대화를 복제하면,
지금 세션이 아닌 엉뚱한 세션이 나올 수도있다.
한참 헤매다가 원인 찾음.

상황:
AI 에이전트 4개가 tmux에서 병렬로 코드 리뷰하는 스킬을 만들었다.
핵심 구조:
현재 세션을 --fork-session으로 복제 → fork된 에이전트가 설계 문서를 추출.
근데 fork가 엉뚱한 대화를 가져왔다. 2시간 전에 끝난 대화를.

처음엔 /clear 버그인 줄 알았다.
"clear 이전 컨텍스트를 가져오는 거 아냐?"
JSONL 파일을 까봤더니 맞긴 맞는데, 진짜 원인은 다른 곳에 있었다.

JSONL(대화 기록 파일)이 실시간으로 저장되지 않는다.
3시간 넘게 대화했는데 파일은 478줄 그대로.
현재 대화 키워드 grep하면 0건.
???
이유 : 세션이 끝나야 디스크에 쓰인다.

그래서 --fork-session은 "지금 대화"가 아니라 "마지막으로 저장된 대화"를 fork한다.
반면 /fork (/branch)명령은 메모리에서 직접 분기해서 현재 대화를 정확히 가져온다.
같은 "fork"인데 동작이 완전히 다르고, 공식 문서에는 이 차이가 없다.

AI 에이전트 자동화 만들 때 이런 "동작 안 하는 이유"를 찾는 게 진짜 시간을 잡아먹는다.
코드 한 줄 짜는 건 쉬운데,
"왜 fork가 엉뚱한 걸 가져오지?"를 추적하는 데 시간이 곱절로 걸림.
도구의 내부 동작을 모르면 자동화는 그냥 복권임.

그래서 해결방법?
나처럼 멀티플렉싱 fork 세션 자동화 하려는 사람들은
시간이 좀 더 걸리더라도 -p 옵션으로 "/fork" 실행시키고 응답받은 세션ID 파싱해서 resume 하시오.

참고 링크