kaameo-lab/sidecar
sidecar
一个贴在 Claude Code 旁边的窗格,可通过按钮直接回答 Claude 给出的选项或问题,并一眼查看会话摘要、工作图和逐轮日志的 mod。
关于这个 mod
sidecar 是一个在 Claude Code 对话旁提供窗格的 mod。当 Claude 在回答末尾给出选项时,窗格中会出现按钮,点击后就会像用户输入一样发送答案。对于包含多个问题的格式,例如 Q 块或编号问题,可以逐个问题选择或直接输入,然后一次性发送;推荐答案会带有标记。每 3 轮,或按下刷新按钮时,它会总结会话的目标、已决定的事项、剩余工作、已更改的文件,并同时显示用方框和线绘制的工作流程与文件结构图,以及逐轮日志。已更改的文件通过 git stash create、diff、ls-files 查找,不会改动工作树和索引;窗格状态按会话保存并恢复最近 20 个。若不想安装而只在单个会话中使用,可以 clone 仓库并用 claude --plugin-dir 加载。
安装
请先查看作者 README 确认 marketplace 和插件名称;命令可能随仓库结构改变。
claude plugin marketplace add kaameo-lab/sidecar claude plugin install sidecar@kaameo-lab
原文 / README
한국어 | English
sidecar
Claude Code 옆에 붙는 pane. Claude가 선택지나 질문을 내놓으면 버튼으로 바로 답하고, 이 세션에서 정한 것과 남은 일, 손댄 파일의 구조, 턴별로 한 일을 한눈에 봅니다.
<p align="center"> <img src="docs/media/demo.gif" alt="Claude Code 대화 옆의 sidecar pane: Claude가 Q1~Q4 질문을 내놓자 pane에 버튼이 생기고, 질문마다 답을 골라 보내면 요약에 남은 일이 채워지는 장면 (2배속)" width="100%"> </p>설치
Claude Code 안에서:
/plugin install sidecar --marketplace kaameo-lab/sidecar
/reload-plugins
/sidecar
<details>
<summary><strong>터미널에서, 또는 clone해서</strong></summary>
claude plugin marketplace add kaameo-lab/sidecar
claude plugin install sidecar@kaameo-lab
설치하지 않고 한 세션에서만 써 보려면:
git clone https://github.com/kaameo-lab/sidecar
claude --plugin-dir ./sidecar
업데이트는 claude plugin update sidecar@kaameo-lab, 제거는 claude plugin uninstall sidecar@kaameo-lab입니다.
사전 요구사항: Claude Code 2.1.312에서 확인했습니다. mod는 Claude Code의 early access 기능이라 API가 버전마다 바뀔 수 있습니다. 바뀐 파일 추적에는 git이 필요합니다(없으면 Edit·Write 도구로 바뀐 파일만 셉니다).
보이는 것
<!-- 전체 화면: docs/media/docked-session.png -->| 섹션 | 보여 주는 것 | 언제 바뀌나 |
| --- | --- | --- |
| 선택지 | 마지막 답에 있는 선택지와 질문을 버튼으로. 누르면 사용자가 입력한 것처럼 보내집니다. 추천 답에는 ✓추천 표시가 붙습니다. | Claude가 답을 마칠 때마다 |
| 요약 | 세션의 목표, 지금 하는 일, 정한 것, 남은 일, 이 세션에 바뀐 파일 | 3턴마다, 또는 ↻ 갱신을 누를 때 |
| 작업 그림 | 두 탭으로 봅니다. 작업 흐름은 이 세션에서 한 작업을 순서대로 [끝] [진행] [대기]와 함께, 작업마다 바꾼 것과 지금 상태를 보여 줍니다(최근 6개). 파일은 만들거나(초록) 고친(노랑) 파일을 상자와 선으로, 파일마다 이번에 바꾼 것을 보여 줍니다. | 요약을 갱신할 때 |
| 로그 | 턴마다 한 줄: 무엇을 물었고 Claude가 무엇을 했는지. 누르면 자세한 줄이 펼쳐집니다. | 턴이 끝날 때마다 |
pane은 대화형 세션이 시작될 때와 답에서 선택지를 찾았을 때 열립니다. 색은 사용 중인 Claude Code 테마를 따릅니다.
사용
| 명령·키 | 하는 일 |
| --- | --- |
| /sidecar | pane 열기 |
| /sidecar close | pane 닫기. /sidecar로 다시 열 때까지 선택지가 나와도 열리지 않습니다. |
| ctrl+x tab | pane으로 포커스 옮기기 |
| a b c … | (포커스가 pane에 있을 때) 단순 선택지 고르기 |
| 섹션 제목 누르기 | 섹션 접기·펴기 |
선택지로 인식하는 형식
| 형식 | 예 | 보내는 답 |
| --- | --- | --- |
| 문자 목록 | a) 세션 쿠키 b) JWT | b) JWT |
| 숫자 목록 | 근처에 ?가 있거나, 바로 앞 줄이 "다음 중에서 고르시면", "방법은 두 가지"일 때 | 1) … |
| Q 블록 | ❓ Q1 - 제목: 질문 아래 ➡️ 추천 답과 a) b) | Q1: … 줄을 모아 한 번에 |
| 번호 질문 목록 | 답 끝의 1. 닫을까요? 2. 만들까요? | 1번: … 줄을 모아 한 번에 |
| 문자 제목 | **A. 안** 아래 설명 문단, 끝에 "어느 쪽으로 할까요?" | a) 안 |
Q 블록과 번호 질문은 질문마다 고르거나, ✎ 직접을 눌러 그 질문 바로 아래 생기는 입력창에 적은 뒤 한 번에 보냅니다. 적다가 다른 질문으로 넘어가도 적은 글이 그 질문의 답으로 남습니다. 맨 아래 칸은 덧붙일 말입니다. 적으면 고른 답 아래에 빈 줄을 두고 붙어서 함께 보내지고, 단순 선택지에서도 고른 선택지 아래에 붙습니다. 마지막 질문 아래 점선 밑에는 실제로 보낼 글이 테두리 상자에 미리 보이고, 그 아래에 질문별 상태 줄, 덧붙일 말 칸, 보내기 버튼이 있습니다. 추천 답이 있으면 "모두 추천대로 보내기"도 됩니다. pane 폭에 잘려 보인 선택지는 글자 대신 키(b)만 보냅니다. 보이지 않은 글자가 사용자 이름으로 나가지 않게 하려는 것입니다.
접근 범위
| 하는 일 | 어떻게 |
| --- | --- |
| 턴마다 로그 한 줄 만들기 | Haiku 호출 한 번($.model.complete) |
| 요약과 작업 그림 만들기 | 3턴마다, 또는 ↻ 갱신 때 현재 세션 fork 한 번($.model.fork) |
| 바뀐 파일 찾기 | git stash create, git diff --name-only, git ls-files --others. 작업 트리, 인덱스, stash 목록은 바꾸지 않습니다. |
| pane 저장과 복원 | 세션별로 로그(최근 30줄), 요약, 바뀐 파일을 Claude Code 설정 폴더 안의 sidecar 전용 store에 저장합니다. 최근 20개 세션만 남깁니다. |
| 답 보내기 | 버튼을 누를 때만 $.prompt.submit으로 보냅니다. |
모델 호출은 사용 중인 Claude Code 계정으로 나가고, 그 밖의 네트워크 요청은 하지 않습니다. claude plugin validate .가 무엇을 hook하고 호출하는지 그대로 보여 줍니다.
추정인 것
- 선택지 인식은 휴리스틱입니다. 위 형식에 맞지 않으면 놓치고, 드물게 단계 목록을 선택지로 잡습니다. 형식은 로컬 대화 기록(답변 2천여 개)으로 재 보고 오탐이 적은 것만 넣었습니다.
- 요약과 작업 그림은 모델이 쓴 것입니다. 바뀐 파일 목록은 도구 호출과 git에서 오지만, 목표와 결정, 상자와 선은 모델이 대화를 읽고 정리한 것입니다.
문제 해결
pane이 안 열려요. /reload-plugins 뒤 /sidecar를 실행하세요. 터미널이 좁으면 Claude Code가 자동으로 여는 pane을 자리에 앉히지 않을 수 있습니다. /sidecar로는 언제든 열립니다.
선택지가 안 잡혀요. 위 형식 표에 맞는지 보세요. 맞는데도 안 잡히면 그 답변을 붙여 issue로 알려 주세요.
resume했더니 pane이 비어 있어요. claude --resume으로 새로 띄운 세션은 복원됩니다. Claude Code 안에서 /clear나 /resume을 하면 pane은 빈 상태로 시작합니다. 0.4.0 이전 세션은 저장된 기록이 없습니다.
바뀐 파일이 비어 있어요. git 저장소가 아니면 Edit·Write 도구로 바뀐 파일만 셉니다.
구조
| 파일 | 내용 |
| --- | --- |
| hooks/register.tsx | 이벤트 hook, 상태, 저장과 복원, pane 그리기 |
| hooks/parse.ts | 답에서 선택지와 질문 찾기 |
| hooks/digest.ts | 로그·요약 프롬프트와 모델 답 해석 |
| hooks/diagram.ts | 작업 그림을 상자와 선(좁으면 트리)으로 그리기 |
| hooks/width.ts | 한글을 두 칸으로 세는 폭 계산 |
| tests/ | 순수 함수 테스트와, terminal·desktop에 그려 보는 pane 테스트 |
개발
claude --plugin-dir . # 불러오기, 고치면 다시 불러옵니다
claude plugin test .
claude plugin validate .
npx -p typescript tsc --noEmit -p .
규칙과 구조는 CLAUDE.md에 있습니다. 버그와 제안은 GitHub Issues로 받습니다.
