2026-07-29 세션 — 세션 자동 인계 파이프라인 신규 구축·검증
논의·대안
페페 지시 = "기존 세션이 길어질 때 시드 갱신 확인 후, 새 세션을 추가하고 이어갈 지시문을 코디가 직접
입력해 자동 시작되는 파이프라인". 추가 지시로 넘기는 기준(컨텍스트 50~60% + 단계 끊을 수 있는 지점)과
성공 시 문서화가 붙었다. 웹조사 결과 이 기능은 업스트림에 미구현이다 —
claude-vscode.sendMessage 요청(#27873), 커맨드 prompt 인자(#42000), 컨텍스트 한계 시 자동 이어가기(#43404)
모두 열린 이슈이고, 공개 사례(CyPack/claude-session-handoff 등)는 전부 사람이 붙여넣는 프로토콜이다.
경로 후보 3개를 실측으로 좁혔다.
- URI 핸들러 — 확장 2.1.220에 실재(/open?session=&prompt= → primaryEditor.open). 그러나
code --open-url이 무반응이었고, 무엇보다 어느 창으로 갈지 호출자가 못 정한다 → 진행 중인 다른
세션에 오발송될 수 있어 탈락(페페 창 무간섭이 절대 조건).
- cody-bridge 확장 엔드포인트(채택) — 포트로 창을 명시 지정하므로 오발송이 구조적으로 불가능.
기존 자산 재사용이라 신규 코드도 15줄.
- CDP로 UI 조작 — 명령 팔레트 타이핑 등은 깨지기 쉬워 제출(Enter)에만 쓴다.
결정
- 새 세션 + 프리필 = 브릿지 v1.5
POST /newsession→claude-vscode.editor.open(undefined, prompt). webview가setInputText로 채우기만 하므로(코드 실측) 제출은 밖에서 넣는다. - 제출 표준 = CDP. 코디의 Bash는 대화형 데스크톱이 아니라(
GetForegroundWindow()=0) SendInput이 조용히 무효다. sendinput 경로는 사람이 연 콘솔 전용으로 남기고, 실패 시 크게 알린다. - 모델·노력도·thinking =
<workspace>\.claude\settings.local.json의model/effortLevel/alwaysThinkingEnabled. 팀 공유settings.json은 건드리지 않는다. - 시드 갱신은 게이트로 강제한다(
user_brief미커밋이면 중단,--force는 예외용).
산출물
C:\dev\tools\session-relay\—relay.py(본체) ·cdp.py(VS Code CDP 최소 클라이언트) ·test_relay.py(자체검사 4항목) ·launch_vscode_cdp.vbs·restart_test_vscode.ps1·tests/{low,mid,high}.md·README.mdC:\dev\tools\cody-bridge\extension.jsv1.4 → v1.5(/newsession), 설치본에도 배포- user_brief =
projects/session-relay/{handoff,rules}.md신규 등록,rules/runbook.md에 릴레이 절차 추가
검증
격리 VS Code 인스턴스(별도 user-data-dir + CDP 9340, 워크스페이스 C:\dev\_relaytest)에서 수행.
페페 창은 브릿지 v1.4 그대로 유지됨을 레지스트리로 확인(무간섭).
| 난이도 | 내용 | 결과 |
|---|---|---|
| 하 | 파일 읽고 첫 줄 보고 | PASS RELAY_LOW_OK:# session-relay 테스트 워크스페이스 |
| 중 | 스크립트 생성 + 실행 검증, --model sonnet --effort high --thinking on |
PASS, transcript model=claude-sonnet-5 = 옵션 주입 확증 |
| 상 | 인계문으로 이어작업 | PASS — relay_ 규약 승계(relay_mul), 하위호환 calc.py 3 4=7 유지, test_calc.py 작성·실행 OK, 수정금지 README mtime 불변 |
자체검사 test_relay.py ALL PASS(slug·창선택·옵션병합·transcript 판정). 이 검사가 실제로
슬러그 기대값 오류를 잡아냈다.
함정(재발 방지)
ELECTRON_RUN_AS_NODE=1상속 →Code.exe가 GUI 없이 node로 떠서 CDP 포트가 안 열린다.- CDP websocket Origin 헤더 → 403.
suppress_origin=True. - Claude webview 실행 컨텍스트 2개(껍데기 +
fake.html). 내용 있는 쪽을 골라야 DOM이 보인다. - x64
sizeof(INPUT)=40이어야 한다. union에ki만 넣으면 32 → SendInput 0 반환 후 조용히 실패. - 탭이 여러 개면 "마지막 webview 타깃 = 새 탭"이 아니다 → 열기 전 타깃 집합을 제외하고 골라야 한다.
다음
- 페페 결정 = 릴레이용 창을
launch_vscode_cdp.vbs로 띄울지(안 띄우면 제출은 수동 Enter). - 기존 VS Code 창에 v1.5 반영하려면 창마다
Developer: Reload Window1회.