Claude Code 세션 이름은 사람이 /rename 으로 붙이기 전에 훅이 먼저 붙이게 하면 됩니다. SessionStart 훅이 출력 JSON 에 sessionTitle 을 넣으면 /rename 과 같은 효과가 나서, 터미널 탭 제목이 대화 주제에 따라 흔들리지 않고 처음부터 [대][중]-소 형식으로 고정됩니다. 이름 가운데에 「분석」「개발」 같은 역할 태그를 넣어 두면, 다른 훅이 그 이름을 읽고 분석용 세션에서 코드를 고치려는 실수까지 멈출 수 있습니다.
이 글은 혼자 쓰는 개발 환경을 AI 에이전트 중심으로 바꾸면서(AX, AI 전환) 만든 장치를 하루에 하나씩 정리하는 연재의 첫 편입니다.
왜 탭 제목이 자꾸 바뀌었을까?
저는 Orca 라는 터미널 앱에 Claude Code 세션을 여러 개 띄워 둡니다. 블로그 글을 쓰는 탭, 사이트를 고치는 탭, 자동화를 손보는 탭이 동시에 열려 있는 식입니다. 그런데 이름을 붙이지 않은 세션은 Claude Code 가 프롬프트마다 대화 주제로 터미널 제목을 새로 짓습니다. 간단한 계산 하나를 물어본 탭은 제목이 1+1 계산 으로 바뀌어 있었습니다. 탭이 여러 개가 되자 어느 탭이 무슨 일을 하던 곳인지 매번 눌러 봐야 했습니다.
처음엔 무엇을 시도했을까?
첫 번째로 탭을 만들 때 제목을 정해 주었습니다. orca terminal create --title 로 제목을 주고 열었는데, Claude Code 가 시작하자마자 제목을 Claude Code 로 덮어썼습니다. 두 번째로는 환경변수 CLAUDE_CODE_DISABLE_TERMINAL_TITLE=1 로 제목 바꾸기를 아예 껐습니다. 흔들림은 멈췄지만 이번엔 세션 이름까지 제목에 나오지 않아 모든 탭이 똑같아 보였습니다. 둘 다 2026-10-07 에 직접 해 보고 버린 방법입니다.
막힌 점은 무엇이었나?
해 보고 나서 규칙을 알았습니다. 세션에 이름이 있으면 제목은 그 이름으로 고정되고, 이름이 없을 때만 주제를 따라 바뀝니다. 결국 답은 「항상 이름을 붙인다」였는데, 문제는 제가 /rename 을 자주 잊는다는 것이었습니다. 사람이 기억해야 하는 규칙은 바쁠 때 가장 먼저 빠집니다. 그래서 기억하는 일을 훅에 넘기기로 했습니다.
훅으로 어떻게 바꿨나?
SessionStart 훅은 세션을 새로 열 때, 이어 열 때, 갈라 열 때 실행됩니다. 출력의 hookSpecificOutput 에 sessionTitle 을 넣으면 그 이름이 세션에 붙습니다. 실제 훅을 줄여 보면 이렇습니다.
APPLY_SOURCES = ("startup", "resume", "fork") # clear·compact 에는 적용되지 않는다
def auto_title(payload):
if payload.get("session_title") or payload.get("source") not in APPLY_SOURCES:
return None # 이미 이름이 있으면 건드리지 않는다
return "[%s][분석]-기본" % major_of(payload["cwd"])
out = {"hookEventName": "SessionStart", "sessionTitle": auto_title(payload)}
print(json.dumps({"hookSpecificOutput": out}))
맨 앞 대분류는 같은 폴더에서 최근에 쓴 세션 이름들 가운데 가장 많이 쓴 것을 고릅니다. 처음에는 가장 최근 하나만 봤는데, 한 번 낸 오타가 다음 세션 이름으로 그대로 옮겨 가서 「가장 많이 쓴 것」으로 바꿨습니다. 기본 역할은 「분석」으로 둡니다. 분석 세션에서 파일을 고치거나 커밋하려 하면 다른 훅(PreToolUse)이 이름을 읽고 멈추게 해 두었기 때문에, 가장 안전한 쪽을 기본값으로 고른 것입니다.
마지막 칸인 「소」는 하는 일에 따라 바꿉니다. 첫 입력이 슬래시 명령이면 훅이 소를 그 명령 이름으로 바로 바꾸고, 그 밖에는 -기본 으로 두었다가 첫 작업을 마칠 때 에이전트가 내용을 보고 이름을 짓습니다. 이름을 바꾸는 작은 스크립트는 새 이름을 파일에 적어 두고, 다음 프롬프트의 UserPromptSubmit 훅이 그 파일을 읽어 sessionTitle 로 적용합니다. 같은 순간에 orca terminal rename 으로 Orca 탭 이름도 함께 바꿉니다.
사람이 답할 수 없는 무인 실행(claude -p)에는 이름을 묻는 안내를 넣지 않습니다. 무인 실행 시험에서 이 안내가 마지막 답을 가로채 엉뚱한 질문으로 끝난 일이 있었기 때문입니다.
지금 하루는 어떻게 달라졌나?
탭을 훑어보면 무엇을 하는 세션인지 바로 보입니다. [블로그][개발]-robots, [사이트][분석]-검색통계 처럼 대분류·역할·주제가 한 줄에 나옵니다. 2026-10-19 에 잰 값으로, 2026-10-12 이후 쓴 세션 기록 211개 가운데 206개에 이름이 붙어 있었습니다. 이름을 붙이는 두 훅 파일을 고친 커밋은 지금까지 10개입니다. 이제 이름 붙이기는 제가 기억할 일이 아니라 훅이 하는 일입니다.
자주 묻는 질문
훅이 붙인 이름이 내가 정한 이름을 덮어쓰지는 않나요?
이미 이름이 있는 세션은 건드리지 않습니다. 훅에 들어오는 값에 세션 이름이 있으면 바로 빠져나가고, 이름이 없는 세션을 새로 열거나 이어 열 때만 기본 이름을 붙입니다.
/clear 나 컴팩트 뒤에도 이름이 붙나요?
SessionStart 훅이 clear·compact 에서 돌려준 이름은 적용되지 않으므로 처음부터 대상에서 뺐습니다.
꼭 Orca 같은 터미널 앱이 있어야 하나요?
아닙니다. 세션 이름은 Claude Code 기능이라 어떤 터미널에서도 탭 제목이 고정됩니다. Orca 탭 이름을 같이 바꾸는 부분만 Orca 전용입니다.