Claude Code를 몇 달만 쓰면 ~/.claude/projects/ 아래에 세션 jsonl 파일이 수백 개 쌓입니다. 이력을 되짚거나 방금 닫은 세션을 이어서 작업하고 싶어도, 기존 도구들은 “지금 뭐가 살아있고 뭐가 끝났는지”를 한눈에 알려주지 못합니다.
그 답답함을 해결하려고 만든 claude-session-tracker(줄여서 cst)를 소개합니다.
🧭 TL;DR
- 모든 Claude Code 세션을 ● 세션사용중 / ○ 세션종료 / ✓ 작업종료 세 글리프로 즉시 분류한다.
- fzf 스타일 TUI에서
/+ 키워드로 실시간 필터링. 한글·일본어·중국어 입력 전부 지원한다. - Enter 시 TUI를 교체하지 않고 새 창을 띄워, 하나의 세션을 연 뒤에도 TUI가 살아 있어 연속으로 다른 세션을 이어받는다.
- Python stdlib 전용. 설치는
git clone+ 심볼릭 링크 한 번.
왜 필요한가 — 세션이 500개가 되는 순간
Claude Code는 대화마다 ~/.claude/projects/<cwd-slug>/<uuid>.jsonl을 append-only로 기록합니다. 한 프로젝트를 오래 쓰면 수십 개, 여러 프로젝트를 병행하면 금세 수백 개로 불어납니다.
그런데 실무에서 궁금한 건 세 가지 뿐입니다.
- 지금 어떤 세션이 실제로 돌고 있지? — 여러 터미널에 열어둔 Claude Code 중 어느 게 살아 있나.
- 어떤 건 이미 끝냈지? — 완료한 작업은 눈앞에서 치우고 싶다.
- 2주 전에 인증 마이그레이션하던 그 세션 어디 갔지? — 과거 컨텍스트로 복귀하고 싶다.
공식 도구는 세션 선택/재개만 가능하고, 커뮤니티 포크인 claude-sessions는 과거 세션 브라우징은 훌륭하지만 “지금 돌고 있는지”를 알려주지 않습니다. 결국 ps aux | grep claude나 터미널 탭 이름으로 추측하게 됩니다.
cst의 차별성 — 세 가지 상태로 즉시 분류
cst는 모든 세션을 단 하나의 글리프로 분류합니다. 이 글리프 하나가 위 세 질문에 동시에 답합니다. 우선순위는 ✓ > ● > ○입니다.
작업종료로 마킹한 세션은 프로세스가 살아있어도 ✓로 보여서 “신경쓸 필요 없는 세션”을 바로 구분할 수 있습니다.
Figure 1. 세 개의 데이터 소스 → 하나의 상태
그림 1. 백그라운드 데몬 없이, 명령 호출 시점에 세 소스를 즉시 교차 검증해 상태를 계산한다.
어떻게 쓰나 — 가장 빠른 워크플로
셸에서 바로 리스트를 보려면 그냥 cst를 치면 됩니다.
$ cst
# STAT LAST ACTIVITY SESSION MSGS MESSAGE PROJECT
1 ● 2026-04-22 01:17 960faaa8 261 claude-sessions 는 자체 DB... ~/.claude/skills
2 ✓ 2026-04-22 01:15 6a33a615 25 잔여 작업 내역을 커밋해줘. ~/project/.../csm
3 ○ 2026-04-21 21:24 afbd9e28 241 pnpm 적용 되어 있는가? ~/project/.../url-shortener-mvp
3 session(s) [● 세션사용중:1 ○ 세션종료:1 ✓ 작업종료:1]
진짜 생산성 향상은 TUI(cst --tui)에서 나옵니다. fzf 스타일로 타이핑하면서 동시에 이동·조작할 수 있게 설계했습니다.
Figure 2. TUI 워크플로 (4번의 키 입력으로 세션 열기)
그림 2. 네 번의 키 입력만으로 원하는 세션을 찾아서 새 창으로 연다.
💡 핵심 차별점. 기존 claude-sessions는 TUI 프로세스를 claude로 교체(execvp)해서 TUI가 사라집니다. cst는 TUI를 그대로 두고 현재 쓰는 터미널 앱과 같은 앱의 새 창을 포그라운드로 띄우기 때문에, 한 세션을 연 뒤에도 TUI로 돌아가 다음 세션을 곧바로 이어받을 수 있습니다.
기존 도구와의 비교
세 도구는 경쟁이 아니라 보완 관계입니다. claude-session-manager(csm)는 동시에 돌리고 있는 여러 터미널 창을 트리아지하는 데 최적이고, cst는 수백 개 세션 이력에서 찾아 이어받기에 최적입니다.
claude-sessions | claude-session-manager | cst | |
|---|---|---|---|
| 역할 | 세션 브라우저 | 동시 실행중 세션의 작업 매니저 | 상태 추적 포함 세션 브라우저 + 빠른 필터 |
| 라이브 상태 | 감지 안 함 | 감지 + 윈도우 포커스 | 감지 (글리프 ●/○/✓) |
| 작업종료 플래그 | 없음 | 있음 (메타데이터와 통합) | 있음 (overlay, 원본 무해) |
| 검색 UX | Enter 후 전체 스캔 | 우선순위 기반 리스트 | fzf-style (타이핑하며 이동) |
| 세션 열기 | execvp로 TUI 교체 | macOS 윈도우 포커스 | 새 창 띄우기 (TUI 유지) |
| 한글 검색 | 제한적 | 제한적 | 지원 (수동 UTF-8 조립) |
| 플랫폼 | macOS/Linux | macOS 전용 | macOS/Linux |
| 의존성 | stdlib | 여러 모듈 | stdlib만 |
구현 디테일 — 의존성 없이 풀어낸 것들
| 기법 | 해결한 문제 |
|---|---|
| Python stdlib 전용 | 설치는 git clone + 심볼릭 링크 하나로 끝난다. |
| 수동 UTF-8 바이트 조립 | curses.get_wch()가 WezTerm 등 일부 터미널에서 방향키 이스케이프 시퀀스를 multi-char 문자열로 반환하는 버그를 getch()로 한 바이트씩 받아 UTF-8 lead byte 패턴(0xC0/0xE0/0xF0)으로 문자 길이를 결정해 우회한다. |
claude 절대 경로 주입 | 부모 프로세스에서 shutil.which("claude")로 미리 해결해 명령에 박아넣어, 새 셸의 PATH 설정(nvm/volta/asdf)과 무관하게 실행된다. |
| ESCDELAY = 25ms | 기본 1000ms 탓에 Esc 한 번에 1초씩 대기하던 문제를 해소한다. |
| mtime/size 기반 인덱싱 캐시 | 500개 세션이 있어도 두 번째 실행부터는 즉시 렌더링된다. |
| 작업종료 overlay | 원본 jsonl을 건드리지 않고 별도 state.json에만 기록 — 삭제·복원이 안전하다. |
설치 (30초)
요구사항: Python 3.10+, ~/.local/bin이 PATH에 포함되어 있어야 한다.
# 1. 클론
git clone https://github.com/greeun/claude-session-tracker ~/.claude/skills/claude-session-tracker
# 2. 실행 권한 + PATH 심볼릭 링크
chmod +x ~/.claude/skills/claude-session-tracker/tracker.py
mkdir -p ~/.local/bin
ln -sf ~/.claude/skills/claude-session-tracker/tracker.py ~/.local/bin/cst
# 3. 확인
cst --version
# claude-session-tracker v0.1.0
자주 쓰는 명령
| 명령 | 설명 |
|---|---|
cst | 기본 리스트 (#, STAT, LAST, SESSION, MSGS, MESSAGE, PROJECT 컬럼). |
cst --tui | TUI 진입 → / 쿼리 → ↑↓ → Enter. |
cst list --status active | 상태별 필터 (active / ended / done). |
cst search "쿼리" -i | 본문 풀텍스트 검색 (-i는 대소문자 무시). |
cst done <id> | ✓ 작업종료 표시. |
cst live | 지금 돌고 있는 Claude Code 프로세스만 표시한다. |
cst backup --days 90 -y | 90일 이상 된 세션 아카이빙. |
cst relocate <id> <new-cwd> | 세션에 기록된 cwd 변경. |
소스 / 피드백
- 저장소: github.com/greeun/claude-session-tracker
- 라이선스: MIT (
claude-sessions의 포크, 동일 라이선스). - 이슈/PR 환영합니다. 특히 Warp 스크립팅, Hyper 등 다른 터미널 앱 지원이 추가되면 좋겠습니다.
세션이 100개를 넘어가기 시작했다면, 한 번 써볼 만합니다. cst --tui를 치고 /에 키워드 한두 개를 입력해 보세요. 다시 ps aux | grep claude로 돌아가기 어려워질 겁니다.