Claude Gear Shift
자동차 수동변속기 기어봉을 마우스로 조작하듯 Claude Code의 모델을 전환하는 VSCode 확장.
기어 매핑
| 기어 |
동작 |
| 1 |
/model default |
| 2 |
/model haiku |
| 3 |
/model sonnet |
| 4 |
/model opus |
| 5 |
/model fable |
| P |
현재 응답 중단 (ESC 전송) |
(모델 별칭은 claude 바이너리 자체가 받는 이름 그대로: fable/opus/sonnet/haiku/default. 이름 문제는 아니었다.)
동작 원리 및 중요한 한계
/model은 터미널에서 실행되는 CLI 전용 명령이다. 사이드바/패널(웹뷰) 모드에서 실행하면 claude 바이너리 자체가 다음과 같이 거부한다 (바이너리 문자열에서 직접 확인):
opens an interactive panel and isn't available in this environment. Run it from the Claude Code terminal instead.
즉 모델을 실시간으로 바꾸려면 애초에 터미널 기반 Claude Code 세션이 있어야 하고, 지금 사이드바/패널에서 대화 중인 세션은 이 방식으로 조작할 수 없다(패널 자체를 조작하는 공식 API도 없다). 이 확장은 그래서 다음과 같이 동작한다:
claude-vscode.terminal.open 커맨드로, 이름이 Claude Code로 시작하는 통합 터미널을 찾거나 새로 연다.
- 새로 연 경우, 번들된
claude 바이너리가 실제로 부팅될 때까지 4초 정도 대기한다(너무 빨리 입력하면 아직 안 뜬 일반 bash 프롬프트에 /model이 그대로 셸 명령으로 꽂혀 bash: /model: No such file or directory 오류가 난다).
- 그 터미널에
/model <name>(기어 1~5) 또는 raw ESC 문자(P, 인터럽트)를 입력한다.
VSCode는 터미널 안에서 실제로 어떤 프로그램이 도는지 알려주지 않고 이름만 보여준다. claude-vscode.terminal.open으로 연 터미널만 이름이 Claude Code이고, 직접 연 터미널에서 claude --resume 등으로 대화를 이어간 경우는 이름이 그대로(bash 등)라 이름만으로는 구분이 안 된다. 그래서 패널 상단의 "세션 선택" 버튼을 누르면 열려 있는 모든 터미널을 목록으로 보여주고(이름이 Claude Code인 것은 위쪽에 표시), 그중 실제로 대화가 진행 중인 터미널을 직접 골라야 한다. 세션을 고르지 않은 채 기어를 조작하면 자동으로 이 선택 창이 뜬다.
기어 노브는 콘솔 패널(베젤)·홈 파인 게이트·광택 있는 손잡이(하이라이트+그림자)로 입체감을 표현했고, 드래그 이동도 실제 수동변속기처럼 제약되어 있다: 한 열(column) 안에서는 위/아래로만 움직이고, 다른 열로 넘어가려면 반드시 중앙 가로줄(중립 위치)을 지나야 한다.
실행 (개발용)
- 이 폴더를 VSCode로 연다.
F5를 눌러 Extension Development Host를 실행한다 (빌드 단계 없음, 순수 JS).
- 새 창의 커맨드 팔레트에서 "Gear Shift: Open Model Switcher" 를 실행한다.
- 뜬 패널에서 빨간 기어 노브를 마우스로 드래그해 원하는 슬롯에 놓으면,
Claude Code 터미널이 열리며 해당 명령이 자동 입력된다.
전제조건: anthropic.claude-code 확장이 설치되어 있어야 한다.
설치
VS Code 마켓플레이스에 게시되어 있다 (Kingseungheon.claude-gearshift). 확장 검색창(Ctrl+Shift+X)에서 "Claude Gearshift" 를 검색해 설치하면 된다.
또는 로컬에서 직접 빌드해 설치:
cd claude-gearshift-extension
vsce package --allow-missing-repository
code --install-extension claude-gearshift-0.1.3.vsix
배포 (유지보수용)
버전을 올린 뒤(package.json의 version) 재게시:
vsce publish --allow-missing-repository