opencode 세션 이어쓰기, 중단 후 어떻게 재개하나

opencode 세션 재개는 마지막 대화를 바로 이어가거나(--continue / -c), 특정 세션 ID로 붙거나(--session / -s), TUI에서 /sessions로 고르는 세 갈래가 기본입니다. 컨텍스트가 빡빡하면 /compact로 요약을 요청하고, 같은 이력을 갈라 쓰려면 --fork를 붙입니다.

이 글은 공식 CLI·TUI·Compaction 문서에 나온 명령·플래그만 사용합니다. UI 메뉴 경로는 버전마다 달라질 수 있어 여기서는 적지 않습니다. 가격 비교는 없습니다.

세션 ID는 어디?

한 줄 답: CLI에서는 opencode session list로 목록을 보고, TUI에서는 /sessions(별칭 /resume, /continue, 키바인드 ctrl+x l)로 고릅니다. 재개 플래그는 --continue--session <id>입니다.

공식 CLI가 문서화한 재개 진입점:

방법명령언제
마지막 세션opencode --continue 또는 opencode -c방금 쓰던 대화를 바로 이어갈 때
ID 지정opencode --session <session-id> 또는 -s공유 링크·로그·목록에서 ID를 알 때
목록opencode session list (-n으로 최근 N개, --format json 가능)ID를 모를 때
TUI 전환/sessions이미 TUI 안에서 다른 세션으로 바꿀 때

opencode runopencode attach에도 동일한 --continue / --session / --fork 플래그가 있습니다. 비대화형으로 이어가려면 예를 들어 다음처럼 씁니다.

opencode --continue
opencode -s ses_example
opencode session list -n 10
opencode run --session ses_example "이어서 테스트 고쳐 줘"

세션 데이터를 JSON으로 빼려면 opencode export [sessionID], 다시 넣으려면 opencode import <file-or-share-url>을 사용합니다. ID를 삭제할 때는 opencode session delete <id>입니다.

TUI에서 새 작업을 시작할 때는 /new(별칭 /clear)로 새 세션을 엽니다. 이전 세션은 목록에 남아 /sessions로 다시 고를 수 있습니다.

컨텍스트가 잘리면?

한 줄 답: 긴 세션은 자동 compaction이 기본이고, 미리 줄이려면 TUI에서 /compact(별칭 /summarize, 키바인드 ctrl+x c)를 요청합니다. 세부 임계값은 opencode.jsoncompaction 블록으로 조정합니다.

공식 Compaction 문서 요지:

  • 자동 compaction 기본값 auto: true. 최근 대화 약 keep.tokens(기본 15000)를 남기고 이전 활성 컨텍스트를 체크포인트 요약으로 바꿉니다.
  • 수동 — TUI /compact 또는 서버가 떠 있으면 POST /api/session/{sessionID}/compact.
  • Compaction은 손실 압축입니다. 최근 디테일이 중요하면 keep.tokens를 키웁니다.
  • 자동을 끄려면 설정에서 "compaction": { "auto": false } 또는 환경변수 OPENCODE_DISABLE_AUTOCOMPACT. 수동 /compactauto: false여도 동작합니다.

최소 설정 예:

{
  "$schema": "https://opencode.ai/config.json",
  "compaction": {
    "auto": true,
    "keep": { "tokens": 15000 },
    "buffer": 20000
  }
}

실무 팁:

  1. 긴 리팩터 전에 /compact로 체크포인트를 만듭니다.
  2. 방금 본 로그·패치 내용이 사라지면 keep.tokens를 올리거나, 필요한 파일을 @로 다시 붙입니다.
  3. 고정 시스템 프롬프트·도구 스키마가 컨텍스트를 대부분 차지하면 compaction만으로는 자리가 안 납니다. 도구 수를 줄이거나 새 세션(/new)으로 옮깁니다.

통계는 opencode stats로 세션별 토큰·비용을 확인할 수 있습니다.

브랜치별 세션은?

한 줄 답: 대화 갈래는 --fork로 만듭니다. git 브랜치마다 자동으로 세션이 갈라지지는 않으며, 작업 디렉터리(프로젝트) 단위로 세션 목록이 묶입니다.

공식 CLI:

# 이어쓰면서 새 갈래 세션 생성
opencode --continue --fork
opencode --session ses_example --fork

--fork--continue 또는 --session과 함께 씁니다. 원본 세션 이력을 복사한 자식 세션이 생기므로, 실험적 변경과 안전한 본선을 나눌 때 적합합니다.

git feature 브랜치와의 관계(문서에 없는 UI 가정 없이):

  • 세션은 작업 디렉터리/프로젝트에 묶입니다. opencode /path/to/project처럼 경로를 지정해 시작할 수 있습니다.
  • 브랜치마다 대화를 분리하려면 디렉터리를 나누는 방식(별도 clone, git worktree 등)이 안전합니다. 같은 디렉터리에서 브랜치만 바꿔도 세션 ID가 브랜치 이름을 자동으로 따르지는 않습니다.
  • 한 세션 안에서 파일 되돌리기는 TUI /undo·/redo가 git을 사용하므로, 해당 프로젝트가 git 저장소여야 합니다(공식 TUI 문서).

정리하면 “브랜치별 세션”은 (1) 대화 fork(--fork) 와 (2) 디렉터리(워크트리)를 나눠 세션 목록을 분리하는 두 축으로 다루는 편이 문서와 맞습니다.

마무리

opencode 세션 재개session list·/sessions로 ID를 찾고, -c/-s로 붙이며, 컨텍스트는 /compactcompaction 설정으로, 갈래는 --fork와 디렉터리 분리로 처리합니다. 플래그·슬래시 명령은 공식 CLI·TUI를 기준으로 확인하시기 바랍니다.

출처