
Claude Code 세션 실행 중에 리모컨 기능이 포함된 추가 세션을 하나 더 실행하기 (WSL2)
요약
Claude Code 세션 실행 중 WSL2의 interop 기능을 활용하여 새로운 세션을 추가로 실행하고, Remote Control 기능을 활성화하는 방법을 설명합니다. TTY 문제로 인해 발생하는 subprocess 실행의 한계를 극복하고 Windows 터미널을 통해 독립적인 세션을 여는 트릭을 다룹니다.
핵심 포인트
- Claude Code는 동일 프로젝트 내 복수 세션 병렬 실행을 지원함
- Remote Control은 스마트폰이나 웹을 통해 원격 조작 가능한 기능임
- 단순 subprocess 방식은 TTY 부재로 인해 TUI 실행이 불가능함
- WSL2 interop을 통해 Windows 터미널(wt.exe)을 호출하여 해결 가능
하고 싶은 것
Claude Code로 작업 중인 세션은 그대로 둔 채, 또 다른 세션을 하나 더 실행하고 싶다. 게다가 새로운 세션에도 Remote Control(claude.ai나 스마트폰 앱을 통한 원격 조작) 기능을 붙이고 싶다.
여기에 더 욕심을 내어, "새 터미널을 직접 열고 claude라고 입력하는" 것이 아니라, 작업 중인 Claude Code 스스로가 실행하게 해본 기록이다.
전제 지식
복수 세션의 병렬 실행
Claude Code는 복수 세션의 병렬 실행을 지원한다.
- 동일한 프로젝트 디렉토리에서 여러 세션을 실행해도 락(Lock) 등의 문제 없음
- 세션은 대화마다 독립적으로 저장됨
- 단, 동일한 파일을 여러 세션에서 동시에 편집하면 충돌이 발생하므로, 작업 대상은 나누는 것이 무난함
Remote Control이란
로컬 머신에서 동작 중인 Claude Code 세션을 claude.ai/code나 스마트폰의 Claude 앱에서 원격 조작할 수 있는 기능이다.
- 활성화는 세션 단위. 기존 세션 내라면
/remote-control, 실행 시라면claude --remote-control - 모든 세션에서 자동으로 활성화하고 싶다면
/config의 "Enable Remote Control for all sessions" - Pro/Max 등의 플랜 + claude.ai 로그인이 필요함 (API 키 인증으로는 사용할 수 없음)
또한, Remote Control은 "로컬 PC의 조작 권한을 외부로 내보내는" 기능이기도 하다. 접속용 QR 코드/URL 취급, 계정의 2FA, 사용이 끝난 세션의 뒷정리 등, 운용 전에 본 기사 말미의 "⚠️ 보안상의 주의"를 반드시 읽어주세요.
수동으로 하는 경우 (일반적인 방법)
새 터미널을 열고 두 줄을 입력하기만 하면 된다.
cd /path/to/your/project
claude --remote-control
실행하면 QR 코드/URL이 표시되므로, 스마트폰의 Claude 앱으로 스캔하면 접속 완료.
Claude Code 스스로 실행하게 하는 경우
여기서부터가 본론이다. 작업 중인 Claude Code에게 "추가 세션을 실행해줘"라고 부탁하면, 단순한 방법으로는 실패한다.
안 되는 방법: subprocess나 pty를 경유하는 경우
"셸 스크립트를 만들어서 Python으로 실행시키면 되지 않을까?"라는 생각이 들 수 있지만, 이것은 작동하지 않는다. 원인은 TTY 문제다.
claude는 대화형 TUI 앱이며, 사람이 보고 조작할 수 있는 터미널(TTY)이 필요하다 - Claude Code의 Bash 툴로부터 subprocess로 실행해도, TTY가 없기 때문에 TUI가 성립되지 않는다- Python의
pty모듈로 가상 터미널을 만들어도, 그 "화면"은 실행 주체 프로세스의 버퍼 내에만 존재하며, 사람에게는 보이지 않고 입력도 할 수 없다 - 게다가 실행 중인 세션이 종료되면 자식 프로세스도 함께 종료된다
런처를 bash로 하든 Python으로 하든 본질은 같다.
되는 방법: WSL interop으로 Windows 측에 새로운 창을 열게 하기
발상을 바꾸어, Windows 측에 진짜 터미널 창을 새로 열게 하고, 그 안에서 WSL의 claude를 실행한다. WSL에는 Windows 실행 파일을 그대로 호출할 수 있는 interop 기능이 있으므로, WSL 내부의 Claude Code에서 이를 실행할 수 있다.
cd /mnt/c && /mnt/c/Windows/System32/cmd.exe /c start "" wt.exe \
wsl.exe --cd /home/user/AI_FS -e bash -lic "claude --remote-control"
분해하면:
| 부분 | 역할 |
|---|---|
cd /mnt/c | UNC 경로 경고 없이 cmd.exe를 호출하기 위한 이동 |
cmd.exe /c start "" | Windows 측에서 새 프로세스를 디태치(detach)하여 실행 |
wt.exe | Windows Terminal의 새 창을 열기 |
wsl.exe --cd <dir> | 새 창 내에서 지정된 디렉토리로 WSL 실행 |
bash -lic "claude --remote-control" | 로그인 셸을 통해 PATH를 설정하며 Claude Code 실행 |
이렇게 하면 데스크톱에 새로운 Windows Terminal 창이 팝업되며, 그 안에서 두 번째 Claude Code가 Remote Control 기능과 함께 실행됩니다.
새 창은 실제 TTY를 가지므로 정상적으로 조작할 수 있으며, cmd.exe /c start를 통해 디태치되어 있기 때문에 원래 세션을 종료하더라도 독립적으로 유지됩니다.
실행 확인은 원래 세션에서 수행합니다:
pgrep -af "claude --remote-control"
# → 181919 claude --remote-control ← 독립 프로세스로 생존
그 후 새 창에 표시되는 QR 코드/URL을 스마트폰의 Claude 앱으로 스캔하면, 외부에서도 두 번째 세션을 조작할 수 있습니다.
추가: 다른 세션에 이 글을 전달하여 재현해 보았습니다
며칠 뒤, 다른 프로젝트에서 작업 중인 Claude Code에게 이 글을 읽게 하고 "이것 좀 실행해 봐"라고 요청하는 재현 실험을 진행했습니다. 실제로 새 창이 열리고 Remote Control 연결까지 성공했지만, 새로 발견된 세 가지 난관(ハマりどころ)이 있어 추가합니다.
난관 1: 자동 허가 모드의 분류기(Classifier)에 의해 차단될 수 있음
자동 허가 모드(permission mode)로 동작 중인 Claude Code의 경우, cmd.exe /c start ...와 같이 "Windows 측에 새 프로세스를 실행하는" 명령은 안전 판단 분류기에 의해 거부될 수 있습니다. 이 판단은 확률적이라서, 동일한 명령이라도 통과되는 날이 있고 통과되지 않는 날이 있었습니다.
대처 방법은 세 가지입니다:
- 사용자가 명시적으로 OK를 누른 후 다시 실행하도록 요청
- 프롬프트에
!를 붙여 사람이 세션 내에서 직접 실행 (! cd /mnt/c && ...) settings.json에 Bash 허가 규칙을 추가하여 영구적으로 허용
난관 2: 따옴표(Quote) 재구성으로 인해 깨짐
재시도 과정에서 Claude Code가 명령어를 "안전해 보이는 형태"로 정형화하여 다음과 같이 만들었습니다:
# 잘못된 예: start 이후를 통째로 따옴표로 감싸면 인자 해석이 무너져 행(hang) 상태에 빠짐
cmd.exe /c "start \"\" wt.exe wsl.exe ..."
그 결과 창이 열리지 않고 조용히 멈춰버렸습니다. 본문에 기재된 원래 형태(/c start "" wt.exe ... 를 따옴표로 감싸지 않는 방식)가 정답입니다. cmd.exe의 start는 따옴표 해석 방식이 독특하므로, 정상 작동했던 형태를 그대로 사용하는 것이 좋습니다.
난관 3: 검증은 "기존 세션"을 닫은 후 수행할 것
pgrep -af "claude --remote-control"으로 실행을 확인 할 때, 이전에 실행했던 Remote Control 세션이 살아있다면 신규 PID와 구분이 되지 않습니다 (실제로 첫 번째 검증에서 표시된 것은 며칠 전의 기존 세션이었습니다). 확실하게 검증하려면, 기존 세션을 닫고 pgrep 결과가 비어 있는 것을 확인한 후 실행하여 새로운 PID가 나타나는 것을 확인하는 것이 가장 확실합니다.
⚠️ 보안 주의 사항
이 기술은 "AI에게 로컬 PC를 원격 제어할 수 있는 입구를 늘리게 만드는" 작업입니다. 편리함과 맞바꾸는 리스크를 이해하고 사용하십시오.
1. Remote Control은 "PC 조작 권한" 그 자체입니다
연결용 QR 코드/URL을 알고 있다면 해당 세션에 접속하여 명령을 실행할 수 있습니다. 즉:
- QR 코드/URL을 타인에게 노출하지 마세요. 스크린샷, 화면 공유, 방송 등에 노출되지 않도록 주의하십시오. claude.ai 계정을 탈취당하면
로컬 PC의 조작 권한도 넘겨주게 됩니다. 계정의 2FA (2단계 인증)는 필수입니다.
2. 새 세션의 허가 모드는 보수적으로 설정하세요
원격에서 조작하는 세션을 자동 허가 모드(확인 없이 명령 실행)로 실행하면, 스마트폰의 실수로 인한 탭 한 번만으로 로컬 파일 조작이 수행될 수 있습니다. 원격 사용을 전제로 하는 세션일수록, 허가 확인 과정을 남겨두는 것이 안전합니다.
3. Classifier(분류기)의 거부에는 의미가 있습니다
추가적인 주의사항 1에서 언급한 '자동 허가 모드 차단'은 방해되는 것처럼 보일 수 있지만, 'AI가 스스로 독립 프로세스를 늘리는' 동작은 공격에서 사용되는 지속성(Persistence) 확보 수법과 종이 한 장 차이이기 때문에 차단되는 것입니다. 영구 허가 규칙을 추가할 경우에는 와일드카드가 넓은 Bash(*)가 아니라, 이 명령 형태에 한정한 좁은 규칙으로 설정하십시오.
4. Detach(분리)된 프로세스는 '남아 있습니다'
cmd.exe /c start로 실행한 세션은 원래 세션을 닫더라도 살아남습니다. 이는 장점인 동시에, 방치하면 인지하지 못한 채 원격 진입로가 계속 남아있게 된다는 뜻이기도 합니다.
- 사용이 끝나면 새 창의 세션을 명시적으로 종료하십시오.
pgrep -af "claude --remote-control"를 통해 의도하지 않은 Remote Control 프로세스가 남아있지 않은지 가끔 확인하십시오.
5. 프롬프트 인젝션(Prompt Injection)의 발판이 되지 않게 하세요
Claude Code는 웹 페이지나 README와 같은 외부 콘텐츠를 읽습니다. 만약 그곳에 '새 세션을 실행하라'는 지시가 심어져 있다면, 이 interop 체인은 독립적인 지속성 프로세스를 만드는 수단이 될 수 있습니다. 외부 콘텐츠를 처리하게 하는 도중에 기억에 없는 실행 확인이 나타난다면, 허가하지 마십시오.
포인트 요약
- 여러 세션의 병렬 실행은 공식적으로 지원됩니다. 동일 파일의 동시 편집만 피하십시오.
- Remote Control은 세션 단위로 활성화합니다 (
/remote-control또는--remote-control). - Claude Code 스스로 추가 세션을 실행하게 할 경우, subprocess/pty는 TTY 문제로 불가능합니다.
- 따라서, 보이고, 만질 수 있으며, 독립적인 실제 세션을 만들 수 있는
cmd.exe /c start+wt.exe+wsl.exe의 interop 체인을 사용합니다. - 자동 허가 모드에서는 Classifier에 의해 거부될 수 있습니다 (
!를 통한 인간의 실행 또는 허가 규칙으로 대처). start이후를 따옴표로 다시 감싸면 깨집니다. 작동하는 형태 그대로를 사용하십시오.- 실행 검증은 기존 Remote Control 세션을 닫은 후에 수행하십시오 (PID의 신구 버전이 섞일 수 있음).
환경
- Windows 11 + WSL2 (Ubuntu)
- Windows Terminal (
wt.exe) - Claude Code CLI
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기