스레드
라우트 /. 앱을 열면 처음 보이는 화면이며, 에이전트와 대화하는 곳입니다.

세 개의 패널로 나뉩니다. 왼쪽은 내비게이션, 가운데는 대화, 오른쪽은 Inspector(검사기)입니다. Inspector는 기본적으로 얇은 레일로 접혀 있고(승인 대기·서브에이전트 개수는 레일에 그대로 표시), 레일 버튼, Ctrl/⌘ J, 구분선 더블클릭으로 펼칩니다 — 선택은 기억됩니다.
프로젝트 열기
스레드는 항상 어떤 작업 디렉터리에 속합니다. 따라서 새로 설치한 직후 가장 먼저 할 일은 Open project…(프로젝트 열기)입니다 — 이미 프로젝트가 있다면 왼쪽 패널에서, 아직 하나도 없다면 가운데 패널의 "Add a project to get started" 안내에서 열 수 있으며, 둘 다 사용 중인 플랫폼의 폴더 선택기를 엽니다.
프로젝트를 고르면 그 프로젝트에 스레드가 곧바로 열립니다. 그래서 처음부터 평소의 대화 화면 — 모드 버튼, 모델 선택, 첨부, 마이크, / 명령까지 모두 갖춘 — 이 나타나고, 대화가 들어설 자리에는 짧은 안내가 놓입니다: 프로젝트 이름과 경로, 그리고 칩 세 개(/init, 저장소 요약, 에이전트에게 위임하기)입니다. 칩은 바로 보내지 않고 입력창을 채우므로, Enter를 누르기 전에 고쳐 쓸 수 있습니다. 안내는 첫 메시지와 함께 사라집니다.
같은 프로젝트를 다시 고르거나, 아직 쓰지 않은 스레드에서 + New thread를 눌러도 빈 스레드가 또 쌓이지 않고 그 스레드로 돌아옵니다. 아직 쓰지 않은 스레드는 내용이 생기기 전까지 왼쪽 목록에 나타나지 않습니다.
왼쪽 패널
여기서는 한 번에 한 프로젝트만 펼쳐집니다. 위쪽 스위처를 눌러 바꿉니다: 현재 프로젝트 이름과 그 아래 작은 모노 글꼴로 된 경로를 보여 주고, 누르면 모든 프로젝트 목록(고정된 것 먼저, 그다음 최근 연 순서)과 All projects(모든 프로젝트를 합쳐 보여 주며, 각 행에 소속 프로젝트를 알려 주는 작은 배지가 붙습니다), + Add project가 열립니다. 목록에서 프로젝트 옆의 점은 지금 실행 중인 스레드가 있다는 뜻입니다.
스위처 아래에는 검색이 있습니다: 입력하면 제목·첫 프롬프트·세션 id·(이 창이 이미 열어 본 적 있는 스레드라면) 보이는 메시지까지로 목록을 좁히고, all / running / done / pinned로 한 번 더 좁힐 수 있습니다. ⌘K(또는 Ctrl K)는 패널 어디서든 검색창에 초점을 옮깁니다.
스위처 아래의 칩은 이 프로젝트가 사용하는 팀을 알려 줍니다. 눌러서 이미 만들어 둔 팀 중에서 고르거나 None으로 팀 없이 둘 수 있습니다. 프로젝트에 팀 배정하기를 보세요.
+ New thread는 지금 보고 있는 프로젝트에 스레드를 하나 시작합니다.
스레드 목록
살아 있는 스레드와, 다시 이어서 시작할 수 있는 닫힌 스레드가 한 목록에 함께 있으며, Pinned · Today · Yesterday · Last 7 days · Older로 묶입니다. Pinned와 Today를 뺀 나머지 그룹은 개수만 보이는 접힌 상태로 시작하고, 턴이 실행 중인 스레드는 그룹 안에서 항상 맨 위로 정렬됩니다.
각 행은 두 줄입니다: 위에는 제목(처음 보낸 프롬프트, 아직 없다면 "New thread"), 아래에는 짧은 세션 id, 마지막 활동으로부터 얼마나 지났는지, 알고 있다면 토큰 수가 나옵니다. 살아 있는 행을 누르면 열리며 전체 기록이 다시 재생되는데, 이 창이 그 이벤트를 한 번도 본 적이 없어도 마찬가지입니다. 닫힌 행을 누르면 이어서 시작됩니다 — core가 저장소에서 세션을 복원하므로 다시 평범한 스레드가 됩니다.
행의 ⋯ 메뉴는 다음을 제공합니다.
- Pin — Pinned 그룹으로 옮겨, 모든 날짜 그룹보다 앞에 둡니다.
- Rename — 첫 프롬프트로 만들어진 제목 대신 원하는 이름을 붙입니다.
- Open in terminal — 이 스레드의 프로젝트에 대해 터미널 화면을 엽니다.
- Archive — Archive 그룹으로 옮깁니다. 삭제가 아닙니다: 보관된 스레드도 여전히 거기 있고, 여전히 이어서 시작할 수 있으며, 그저 눈에 덜 띌 뿐입니다.
- Delete — 확인을 받은 뒤 저장된 대화 기록을 완전히 지웁니다. 이 앱에서도, TUI에서도, 다른 어디에서도 다시 이어서 시작할 수 없습니다. 되돌릴 수 없습니다.
프롬프트 보내기
입력창은 가운데 패널 아래쪽에 있습니다.
| 키 | 동작 |
|---|---|
Enter | 전송 |
Shift+Enter | 줄바꿈 |
빈 입력창에서 / | 명령 팔레트 열기 |
Ctrl/⌘ K | 어디서든 명령 팔레트 열기 |
Ctrl/⌘ . | 실행 중인 턴 중단 |
Ctrl/⌘ V | 클립보드 이미지는 첨부, 없으면 텍스트 붙여넣기 |
한 줄로 위임하기
$와 에이전트 이름으로 시작하는 프롬프트는 짧은 위임입니다. 나머지 줄을 모델에 보내는 대신 그 에이전트에게 서브에이전트 작업으로 넘깁니다.
$reviewer 변경 사항을 보고 위험한 부분을 알려줘줄이 해석되는 즉시 Send 옆에 대상 에이전트 이름이 적힌 칩이 나타나므로, 어디로 갈지 미리 볼 수 있습니다.
이 줄은 평범한 프롬프트로 전송됩니다. $ 접두사는 core가 직접 알아보고 /delegate 로 실행하며, 그래서 위임이 끝나면 메인 에이전트가 그 결과를 답으로 알려 줍니다. 스레드가 조용한 채로 남지 않습니다. 실행은 Inspector의 Subagents 탭에도 나타납니다. 없는 이름은 core가 거부하고 그 이유가 표시됩니다. 대신 모델에게 조용히 보내는 일은 없습니다. 해석이 어느 한 클라이언트가 아니라 core에서 이뤄지므로 모든 클라이언트가 똑같이 동작합니다.
이름 자동 완성
이름을 외우고 있을 필요는 없습니다. $를 입력하면 이 프로젝트가 가진 에이전트 목록이 열립니다. 기본 역할, 스킬이나 프로젝트 팀이 더한 것, 그리고 직접 만든 이름 있는 에이전트까지 모두 나오고, 입력할수록 좁혀집니다. ↑와 ↓로 이동하고, Tab 또는 Enter로 선택하면 이름 뒤에 공백까지 넣어 줍니다. Esc를 누르면 그 $에 대해서는 목록을 닫습니다. 정말 달러 기호를 쓰려던 경우를 위한 것입니다.
단어 중간의 $ — USD$5 같은 — 는 달러 기호이고 아무것도 열지 않습니다. 어떤 에이전트와도 맞지 않는 이름이면 목록이 그렇게 말하고 비켜섭니다. Enter는 평소대로 전송하고, 없는 이름을 거부하는 것은 여전히 core의 몫입니다.
같은 목록이 명령 팔레트에도 있습니다. /delegate 나 /agent spawn 을 입력하면 팔레트가 명령 대신 에이전트를 보여 주며, 각 줄에 한 줄 설명과 그 에이전트가 돌 모델이 함께 나옵니다. 거기서 Enter는 명령을 실행하지 않고 이름을 채웁니다. 명령에는 아직 작업 내용이 필요하기 때문입니다. 이름이 채워지면 목록은 곧바로 명령 목록으로 돌아갑니다.
에이전트가 바쁠 때 보내기
턴이 실행 중일 때 보낸 프롬프트는 거부되지 않습니다. core가 대기열에 넣었다가 지금 턴이 끝나면 실행합니다. Send 옆의 queued (N) 표시가 몇 개가 기다리고 있는지 알려 줍니다. 턴을 중단하면(Ctrl/⌘ . 또는 Interrupt) 대기열도 함께 사라집니다.
입력창 아래 줄에는 📎 와 마이크 도 있습니다. 프롬프트와 함께 파일을 보내는 방법은 첨부 파일, 받아쓰기는 음성을 참고하세요.
답변은 생성되는 대로 흘러나옵니다. 도구 호출은 인자와 함께 카드 형태로 나타나고, 호출이 끝나면 결과가 덧붙습니다. 스레드 id 옆의 상태는 running에서 complete로 바뀌며, 승인을 거부했다면 denied가 됩니다.
에이전트가 일하는 모습 보기
대화 기록은 맨 아래에 있는 동안에는 새 메시지를 따라 내려가고, 위로 올려 무언가를 읽기 시작하면 따라가기를 멈춥니다. 어디까지 올렸는지는 스레드마다 기억합니다. 다른 화면에 갔다 오거나 스레드를 옮겼다 돌아와도 맨 위가 아니라 보고 있던 자리로 돌아옵니다.
턴이 실행되는 도중에 데몬이 재시작되면, 그 턴은 다음에 스레드를 읽을 때 interrupted로 정리됩니다. 예전처럼 시간만 계속 올라가지 않습니다.
실행 중인 턴에 대해 10분 동안 아무 소식이 없으면, 앱은 넘겨짚지 않고 데몬에게 물어봅니다. 데몬이 이 창이 본 것보다 더 나아가 있으면 연결이 멎어 있었던 것이므로 스레드가 조용히 따라잡습니다. 데몬 쪽에도 새로운 것이 없을 때만 막대가 "Still working? — the daemon has been quiet for N min"이라고 말하며, 이 시간은 마지막으로 실제로 들은 시점부터 셉니다.
턴이 실행되는 동안 대화 기록과 입력창 사이에 막대가 하나 나타나, 에이전트가 지금 무엇을 하고 있는지 알려 줍니다. 턴이 끝날 때까지 막대 위쪽 가장자리를 가는 선이 훑고 지나갑니다.
왼쪽 문구는 상황에 따라 바뀝니다.
| 표시 | 뜻 |
|---|---|
Thinking… | 모델이 작업 중이며 아직 아무것도 내놓지 않았습니다 |
바뀌는 동사 — Pondering…, Brewing… | 답변이 흘러나오는 중입니다. 동사는 8초마다 바뀝니다 |
Thinking (2.4k chars)… | 모델이 속으로 추론 중이며, 그 내용은 대화 기록에 남지 않습니다 |
Running shell npm test…, Reading sessions.ts… | 도구 호출 하나가 진행 중이며, 무엇을 다루고 있는지 함께 보여 줍니다 |
Delegating to reviewer…, 3 agents working… | 서브에이전트가 일하고 있습니다 |
Compacting…, Compacting automatically… | context 창을 다시 쓰는 중입니다 — 직접 요청했거나, 창이 가득 차서 |
Waiting for approval | 모달에 답할 때까지 턴이 멈춰 있습니다. 이때는 스피너도 멈춥니다 |
문구 오른쪽에는 이번 턴에 걸린 시간, 데몬에서 무언가를 마지막으로 들은 시점, 그리고 토큰 수가 있습니다. ↑는 보낸 양, ↓는 받은 양입니다. 턴 뒤에 대기 중인 프롬프트는 N queued로 표시됩니다.
토큰 수는 데몬이 프로바이더 호출마다 한 번씩, 그것도 호출이 끝난 뒤에 보내 줍니다. 그래서 느린 모델에서는 1분 넘게 숫자가 그대로 멈춰 있곤 했습니다. 호출이 스트리밍 중인 동안에는 ↓를 추정값으로 보여 주며, 물결표를 붙입니다: ↓ ~1.9k. 마지막 정확한 수치 이후로 흘러온 본문과 추론 분량으로 계산한 값이고, 정확한 수치가 도착하는 순간 진짜 숫자로 바뀝니다. ↑는 추정하지 않습니다. 추정할 근거가 흘러오지 않기 때문입니다.
last activity 12s ago는 조용함 경고가 쓰는 것과 같은 시계를 경고 없이 보여 주는 것입니다. 긴 호출이 아무것도 보여 주지 않는 동안, 막대에서 눈에 띄게 최근인 유일한 정보입니다.
턴이 끝나면 막대는 한 줄로 줄어듭니다 — Done in 12s · 4.9k tokens, 중단했다면 Stopped after 3s — 그리고 몇 초 뒤 스스로 사라집니다.
무엇을 골랐는지, 순서대로
막대 오른쪽의 Activity N을 누르면 이번 턴의 단계가 번호가 매겨진 목록으로 열립니다. 도구 이름, 다룬 대상, 걸린 시간이 오래된 것부터 나옵니다. 진행 중인 단계는 스피너가 돌고, 끝난 단계에는 체크, 실패한 단계에는 X가 붙습니다. 같은 목록은 Inspector의 Info 탭 activity 아래에도 항상 있습니다.
대화 기록의 도구 카드도 같은 상태를 보여 줍니다. 호출이 진행되는 동안에는 스피너가 돌며 시간이 올라가고, 결과가 도착하면 체크(또는 X)와 최종 소요 시간, 그리고 결과 요약이 붙습니다 — 128 lines · 4.2 KB, 패치라면 +12 −3. 전체 인자와 출력은 카드를 펼치면 볼 수 있습니다.
명령이 실행되는 모습 보기
셸 명령은 실행되는 동안 카드 안에 바로 출력을 찍습니다. 마지막 200줄이 가장 새 줄로 스크롤된 채 보이고, 명령이 표준 오류로 보낸 내용은 위험 색으로 표시됩니다. 출력이 아주 많은 명령은 중간에서 끊기며 Output truncated가 붙습니다 — 전체 출력은 호출이 끝난 뒤 카드의 결과에 그대로 남습니다.
위임에는 콘솔이 붙지 않습니다. 대신 자식 에이전트의 가장 새로운 한 줄이 카드 머리글 아래에 표시되어, 팬아웃이 남의 글 덩어리가 아니라 진행 상황으로 읽힙니다. 같은 실행들은 Subagents 탭에도 각자의 시계와 함께 있습니다.
앱을 열면 있던 자리로 돌아옵니다. 마지막으로 있던 프로젝트, 그리고 그 안에서 마지막 으로 보고 있던 스레드입니다. 프로젝트를 바꿀 때도 마찬가지입니다. 프로젝트마다 자기 스레드를 기억하므로, 두 프로젝트를 오가는 것은 빈 스레드 두 개를 여는 것이 아니라 두 대화를 오가는 일이 됩니다. 기억해 둔 스레드가 사라졌으면 그 프로젝트의 가장 최근 대화가 대신 열리고, 대화가 하나도 없으면 새 스레드를 만듭니다. 새로 시작할 때는 여전히 + New thread를 쓰면 됩니다.
생성된 파일
파일을 만들어 낸 턴은 그 턴을 끝맺는 답변 아래에 그 사실을 보여 줍니다.
이미지는 본문에 바로 나옵니다. 방금 만든 렌더 결과·차트·스크린샷은 읽기 좋은 크기로 대화 안에 그려지고, 아래에 파일 이름과 픽셀 크기가 붙습니다. 누르면 라이트박스가 열립니다: 어두운 배경 위에 원래 크기로 보여 주며, Esc나 바깥 클릭으로 닫고, ← →로 같은 턴의 다른 이미지를 넘기며, Open in Files와 Copy path 버튼이 있습니다.
모든 파일에 카드가 붙습니다. 이미지만이 아닙니다. 찾아낸 파일마다 자기 모습을 보여 주는 작은 카드가 생기므로, 원하던 그 파일인지 한눈에 알 수 있습니다.
- JSON은 먼저 들여쓰기를 다시 한 뒤 앞부분만 보여 줍니다 — 생성된
.json은 대개 아주 긴 한 줄로 오기 때문입니다. - HTML은 페이지 자체를 축소해 샌드박스 안에서 렌더링합니다. 스크립트는 꺼져 있고, 512 KB가 넘는 문서는 소스를 대신 보여 줍니다.
- Markdown은 렌더링해서, 텍스트·코드·로그는 앞 몇 줄을 그대로 보여 줍니다.
- CSV·TSV·스프레드시트는 표의 왼쪽 위 모서리를 6행 × 6열로 보여 줍니다. 통합 문서는 첫 시트를 씁니다.
- 짧은 오디오에는 작은 재생 컨트롤이 붙습니다.
- PDF·Word 문서·비디오는 그리지 않고 이름과 크기만 밝힙니다. 둘 다 미리보기가 그 비용만큼의 값을 하지 못합니다.
그 턴이 실제로 만든 파일만 보여 줍니다. 도구가 쓴 파일은 스스로 그렇게 밝히지만, 답변이 그저 언급하기만 한 파일 — "앞서 만든 output.png는 그대로 있습니다" — 은 턴이 시작된 시각과 비교합니다. 그보다 오래된 파일은 이 턴이 만든 것처럼 카드로 그리지 않고 Also mentioned 아래에 이름만 적습니다.
파일이 네 개를 넘거나 이미지가 두 개를 넘는 턴은 카드 대신 한 줄만 보여 줍니다 — "9 files generated"와 Open in Files, Show previews. 카드 열두 개는 그것이 딸린 답변을 덮어 버리고, 하나하나가 파일을 읽기 때문입니다. Show previews를 누르면 그 턴에 한해 카드를 그립니다. 기준값은 설정 문서의 ide.previews.inlineMax입니다.
카드 머리글의 Preview ↗, 또는 카드 아무 곳이나 누르면 Files 화면이 쓰는 것과 같은 뷰어가 스레드 위에 겹쳐 열립니다 — 스레드를 떠나지 않습니다. 폴더 버튼은 그 파일을 고른 채로 파일 화면으로 이동합니다. 카드는 화면에 들어왔을 때 비로소 파일을 읽고, 최대 256 KB까지만 읽습니다.
파일은 세 가지 방법으로, 이 순서대로 찾습니다. 파일을 쓰는 도구는 경로를 그대로 알려 줍니다. shell 명령은 명령줄과 출력에서 보여 줄 만한 파일처럼 보이는 것을 찾습니다. 마지막으로 답변 본문에서 언급된 경로를 읽습니다 — 파이썬 스크립트가 output/chart.png를 만들고 답변이 그걸 문장으로 적은 경우가 여기에 걸립니다. 스레드의 작업 디렉터리를 기준으로 한 상대 경로는 그 디렉터리에 맞춰 풀립니다.
뒤의 두 가지는 추측이며, 추측은 그리기 전에 확인합니다: 파일이 실제로 있어야 하고, 열어 둔 폴더 안에 있어야 합니다. 에이전트가 말로만 꺼낸 파일 이름은 아무것도 남기지 않습니다. 한 턴에 최대 열두 개까지 보여 줍니다.
예약 실행과 서브에이전트 세션
모든 세션이 직접 입력한 스레드인 것은 아닙니다. 나중에 할 일을 부탁하면 — "3분 뒤에 뉴스 웹서치해서 알려줘" — 작업이 예약되고, 시간이 되면 코어가 그것을 자기만의 세션에서 실행합니다. 에이전트에게 위임할 때도 마찬가지입니다. 이런 세션도 실제 세션이고 대화 기록도 있지만, 그것을 부르게 한 스레드에 속합니다. 그래서 목록은 이들을 별개의 대화처럼 늘어놓지 않고 소속을 밝힙니다.
예약 실행은 그것을 부탁한 스레드 아래에 놓이며, ⏰ 1 scheduled run 줄을 누르면 최신순으로 펼쳐집니다. 제목은 실행된 시각으로 붙습니다. 같은 작업의 모든 실행은 과제 문구가 똑같아서, 구분해 주는 것은 시각이기 때문입니다. 예약한 스레드가 화면에 없으면 — 다른 프로젝트이거나 필터에 걸렸을 때 — 숨기지 않고 ⏰ 배지를 단 채 따로 표시합니다.
서브에이전트 세션은 목록에 아예 나오지 않습니다. 그 세션은 자신을 띄운 턴에 속하며 Inspector의 Subagents 탭에 있습니다. 검색으로는 여전히 찾을 수 있습니다. 세션 id나 그 안의 단어를 입력하면 ↳ 배지와 함께 나타납니다. 세션을 숨기는 검색은 거짓말하는 검색이기 때문입니다.
이름 있는 에이전트의 세션은 ◆ 배지를 달고 동등한 항목으로 표시됩니다.
예약 실행이 끝나면, 그것을 부탁한 스레드의 대화 기록에 알려 줍니다: ⏰ Scheduled run finished와 실행 결과의 첫 줄, 그리고 나머지가 담긴 세션으로 가는 링크입니다. 실패했거나 시간이 초과됐다면 그렇게 적힙니다.
이런 세션을 열면 스레드 머리글 아래에 그것이 무엇인지 알려 주는 줄이 나옵니다 — Scheduled run of s-850623 · job j-1 — 옆에는 open parent가 있습니다. Inspector의 Info 탭에도 같은 내용이 행으로 들어 있습니다.
모델
스레드 이름 옆에는 그 스레드의 모델이 있습니다. 그대로 두면 inherit으로 표시되며, 설정된 라우팅을 따른다는 뜻입니다. 프로필이나 벤더의 모델을 고르면 이 스레드가 거기에 고정되고, 그 스레드의 서브에이전트도 이를 물려받습니다.
세션 단위의 선택이며 어떤 설정 문서에도 쓰지 않습니다. 에이전트가 어디서나 쓰는 모델을 바꾸려면 설정 → 모델을 쓰세요. 여러 규칙이 겹칠 때 어느 것이 이기는지도 그곳에서 설명합니다.
선택기는 목록을 묶어서 보여 줍니다. 설정된 프로필이 먼저 오고, 그다음 벤더마다 제목이 하나씩 붙습니다. 직접 추가한 로컬 서버도 자기 이름으로 나오므로, 서버를 여러 대 돌려도 hon2:flash-next-mtp가 어디 것인지 읽힙니다.
사고 강도(effort)
모델 옆에는 effort가 있습니다. 모델에게 얼마나 깊이 생각하라고 요구할지입니다. 같은 모델이라도 low일 때와 max일 때는 사실상 다른 조수처럼 굴기 때문에, 스레드 단위로 정할 만한 선택입니다. Auto, low, medium, high, max 중에서 고릅니다.
Auto는 다섯 번째 단계가 아닙니다. 고정하지 않았다는 뜻이며, 그래서 칩이 그냥 Auto가 아니라 Auto · high처럼 표시됩니다. 다음 턴이 실제로 무엇을 쓸지와 그것이 어디서 왔는지를 알려 주기 위해서입니다. 아무 데도 설정이 없으면 그냥 Auto라고만 나오는데, 이는 벤더 자신의 기본값이 적용된다는 뜻이고 그 값은 snowpea가 대신 말해 줄 수 없습니다.
단계를 고르면 모델 고정과 같은 방식으로 이 스레드에 고정되고, Auto를 고르면 다시 풀립니다. 그때 따라가는 기본값은 설정 → 모델에 있으며, 사다리도 같습니다. 이 스레드의 고정이 먼저, 그다음 모델별 재정의, 그다음 벤더별 재정의, 마지막이 agent.effort입니다.
직접 돌리는 서버는 대부분 이 값을 아예 무시합니다. 그런 경우 칩은 흐리게 표시되고 어느 서버가 무시하는지 알려 줍니다. 아무 일도 하지 않는 조작 장치를 내놓는 대신입니다.
권한 모드
입력창 오른쪽 Send 바로 앞의 세 버튼은 에이전트가 묻지 않고 할 수 있는 일의 범위를 바꿉니다. 헤더가 아니라 그 자리에 있는 이유는, 모드가 지금 보내려는 프롬프트에 적용되고 보내기 직전에 마지막으로 보게 되는 것이 바로 그곳이기 때문입니다. 입력창에서 Shift+Tab을 누르면 세 모드를 차례로 순환합니다.
| 모드 | 의미 |
|---|---|
plan | 읽기 전용. 쓰기도 셸도 불가 |
accept | 쓰기는 허용, 명령 실행은 먼저 확인 |
auto | 확인 없이 전부 실행 |
모드는 세션의 속성이므로, 여기서 바꾸면 같은 세션을 보고 있는 모든 클라이언트에 함께 적용됩니다. 프로젝트 설정에서 달리 지정하지 않는 한 새 스레드는 accept로 시작합니다.
답변 듣기
답변은 요청할 때만 소리로 읽어 줍니다. 두 가지 방법이 있습니다.
- ⋯ 메뉴의 Read replies aloud를 켜면 그 뒤로 끝난 답변을 모두 읽어 줍니다. 이 설정은 기억되므로, 끄기 전까지는 앱을 다시 열어도 켜진 채로 있습니다.
- 어시스턴트 메시지에 마우스를 올리면 나타나는 Read aloud는 그 답변 하나만 읽습니다.
재생 중에는 입력창 위에 🔊 speaking · stop 표시가 나타납니다. core에 음성이 설정되어 있지 않으면 둘 다 이유와 함께 비활성화됩니다 — 음성을 참고하세요.
에이전트의 질문
에이전트가 계속하기 전에 답이 필요할 때가 있습니다. 메모리를 어느 범위에 저장할지, 세 가지 방법 중 무엇을 택할지 같은 것들입니다. 그럴 때 스레드 위에 질문과 선택지가 담긴 대화상자가 열립니다. 승인을 기다릴 때와 마찬가지로 답할 때까지 턴은 멈춰 있으며, 입력창 위 막대에는 "Waiting for your answer"라고 표시됩니다.
추천하는 답이 맨 앞에 오고 이미 선택되어 있으므로, 보통은 Enter 한 번이면 끝납니다. 앱의 모든 목록 — 질문, 승인, 스킬과 MCP 양식, 최초 실행 마법사 — 은 같은 키를 씁니다.
| 키 | 하는 일 |
|---|---|
| ↑ ↓ | 선택지 사이 이동 |
| Space | 여러 개를 고를 수 있을 때 항목 토글 |
| Enter | 선택하고 다음으로. 마지막 탭에서는 전체 전송 |
| 1–9 | 해당 선택지로 바로 이동. 전송하지는 않습니다 |
| ← → · Tab | 이전 / 다음 질문 |
| Esc | 거절 |
허용된 질문에는 목록에 없는 답을 적는 Other… 행이 있습니다. Enter로 칸을 열고, 다시 Enter를 누르면 보내며, Esc는 질문이 아니라 칸에서만 빠져나옵니다. 선택지가 아예 없는 질문은 그 칸 하나뿐입니다.
에이전트가 자격 증명을 물을 때는 — 스레드 안에서 /setup이나 /login이 API 키를 물을 수 있습니다 — 입력칸이 가려지고, 확인할 수 있도록 눈 모양 버튼이 함께 나옵니다. Review 탭에는 그 자리에 ••••가 찍히므로 키가 화면에 두 번 나오는 일은 없습니다. 에이전트가 받는 값은 입력한 그대로입니다. 가리는 것은 화면을 누가 보느냐의 문제이지 무엇을 보내느냐의 문제가 아닙니다.
에이전트가 한 번에 여러 가지를 물으면 탭으로 나타나고, 각 탭에는 상태 표시가 붙습니다 — ✓ 답함, ▸ 지금 보는 것, · 아직. 마지막 Review 탭에는 모든 답이 모여 있고, 빠진 것에는 **(not answered)**가 붙습니다. 순서에 상관없이 답하고, 돌아가서 고칠 수 있으며, Submit이 한 번에 보냅니다.
Decline(또는 Escape)은 아무것도 답하지 않고 에이전트가 그냥 진행하게 합니다. 이것도 오류가 아니라 하나의 답입니다. 에이전트는 질문이 답되지 않았음을 전달받고 스스로 판단합니다. TUI 등 다른 곳에서 먼저 답하면 대화상자는 알아서 닫힙니다.
승인
accept 모드에서 에이전트가 명령을 실행하려 하면 턴이 멈추고, 해당 도구와 인자를 보여주는 모달이 열립니다. 답은 목록 하나에 다섯 가지이며, 키는 다른 목록과 같습니다.
| 답 | 적용 범위 |
|---|---|
| Deny | 이 호출 하나를 거부 |
| Deny with a reason | 같은 거부에 더해, 이유를 직접 적어 에이전트에게 전달 |
| Allow once | 이 호출 하나 |
| Allow for this session | 이 스레드의 같은 호출 전부 |
| Allow for this project | 이 폴더의 같은 호출 전부 |
Deny가 맨 앞에 있고 처음부터 선택되어 있으므로 Enter가 안전한 답이며, Esc는 바로 거부합니다. 도구 자체가 아니라 이번 경우가 문제일 때는 이유를 적어 주는 편이 좋습니다. 에이전트는 그 문장을 거부 사유 그대로 읽고, 같은 시도를 반복하는 대신 그에 맞춰 움직입니다.
일부 호출에는 core가 보낸 추가 경고가 인자 위에 함께 표시됩니다. 그중 반드시 멈춰서 읽어야 할 것은 위험 색으로 표시되는 modifies snowpea configuration입니다. 이를 허용하면 에이전트가 프로젝트가 아니라 snowpea 자신의 설정 — 프로바이더, 자격 증명, 허용 목록 — 을 고쳐 쓸 수 있게 됩니다. 특히 once보다 넓은 범위로 허용하기 전에는 인자를 꼭 확인하세요.
보고 있지 않은 승인이라고 해서 사라지지는 않습니다. Inspector의 Approvals(승인) 탭에 대기 중인 항목이 모두 나열되며, 게이트웨이 화면에도 같은 목록이 있습니다. 채팅에서 답해야 하는 승인은 그쪽으로 갑니다.
Inspector
오른쪽 패널에는 네 개의 탭이 있습니다.
- Info — 스레드 자신의 정보를 label/value 그리드로 보여 줍니다: id와 작업 디렉터리(각각 눌러서 복사), 모델(고정되었는지 상속받는지), 모드, 토큰 수, context 상황, 생성 시각과 마지막 활동 시각 — 그리고 행의 ⋯ 메뉴에 있는 모든 동작(Pin, Rename, Archive, Delete)과 Review·Open in terminal·Interrupt까지 모아 보여 줍니다. context meter가 Compact를 제안할 때도 여기서 누를 수 있습니다. 그 아래 activity에는 지금 턴에서 에이전트가 고른 도구 호출이 순서대로 나열됩니다.
- Subagents(서브에이전트) — 이 스레드가 위임한 실행들의 트리입니다. 노드는 생성되는 즉시 나타나고 완료되면서 상태가 바뀌므로, 팬아웃이 끝난 뒤가 아니라 진행되는 동안 눈으로 볼 수 있습니다. 실행 중인 노드는 스피너가 돌고 자체 시계를 가집니다.
- Approvals — 위에서 설명한 공유 대기열입니다.
- Files(파일) — 스레드의 작업 디렉터리를 루트로 한 디스크상의 프로젝트입니다. 읽기 전용 뷰어이며, 바로 그 점이 핵심입니다. 에이전트가 방금 쓴 파일을 대화를 떠나지 않고 읽을 수 있습니다.
스레드 헤더
헤더는 두 줄이며, 스레드를 식별하는 것만 담습니다.
첫 줄에는 스레드 이름, 모델, Interrupt, ⋯ 메뉴가 있습니다. 이름은 프로젝트 폴더 이름으로 시작하며, 눌러서 이 스레드의 이름을 바꿀 수 있습니다. Enter로 저장하고 Escape로 되돌립니다. 내용을 비우면 이름 없는 스레드가 되는 대신 프로젝트 이름으로 돌아갑니다. 패널이 좁아지면 Review와 Open in terminal이 가장자리를 밀어내는 대신 ⋯ 메뉴로 접힙니다.
둘째 줄은 이 스레드의 주소입니다 — 📁 /home/you/work/snowpea · s-0222212c64a9. 긴 경로는 끝이 아니라 가운데를 잘라냅니다. 경로가 가리키는 폴더 이름이 남겨 둘 가치가 있는 쪽이기 때문입니다. 어느 쪽이든 마우스를 올리면 전체가 보이고, 누르면 복사됩니다.
입력창의 조작 요소
프롬프트가 얼마를 쓰고 어떻게 실행될지를 말해 주는 것들은 모두 입력창 아래 줄에, 프롬프트 자체와 함께 있습니다.
| 조작 요소 | 용도 |
|---|---|
| 📎 | 이 프롬프트에 파일 첨부 |
plan accept auto | 에이전트가 묻지 않고 할 수 있는 일의 범위 |
| 🎤 | 입력창에 받아쓰기 — 다시 누르거나 Esc로 멈춥니다 |
| Send | 프롬프트 보내기 |
폭이 좁아지면 줄이 접힙니다. 모드 버튼과 마이크, Send가 나머지 아래 둘째 줄로 내려갑니다. 숨겨지는 것은 없습니다. 여기 있는 조작 요소는 모두 다음 프롬프트의 동작을 바꾸므로, 어느 것도 메뉴 속으로 접히지 않습니다.
context 창이 얼마나 찼는지는 창 아래쪽 상태 표시줄과 Inspector의 Info 탭에서 볼 수 있습니다. 85%를 넘으면 입력창 위에 Compact 버튼이 달린 알림이 나타납니다 — ⋯ 메뉴와 팔레트가 실행하는 것과 같은 /compact입니다.
패널 크기 조절
왼쪽 Projects 패널과 오른쪽 Inspector 패널은 안쪽 경계의 가는 구분선을 끌어 너비를 좁히거나 넓힐 수 있습니다 — 그 위에서는 커서가 크기 조절 화살표로 바뀝니다. 구분선에 초점이 있을 때 ←/→는 16px씩 움직입니다. 각 패널의 너비는 앱을 다시 열어도 그대로 남아 있습니다.
Projects 구분선을 더블클릭하면 그 패널이 기본 너비로 되돌아갑니다.
Inspector 접기
Inspector는 좁은 레일로 접을 수 있습니다. Ctrl/⌘ J를 누르거나, 탭 줄 오른쪽의 꺾쇠를 누르거나, 구분선을 더블클릭하세요. 레일에는 다시 펼치는 버튼이 남고, 다시 열어 볼 만한 것 — 답을 기다리는 승인, 아직 실행 중인 서브에이전트 — 의 개수가 배지로 표시됩니다. 가운데 패널이 그 너비를 가져가므로, Inspector를 접어 두면 스레드 헤더가 더 많은 조작 요소를 보여 줍니다.
접어 두었는지 여부는 앱이 기억합니다.
스레드 밖으로
헤더의 두 버튼은 스레드를 그대로 들고 다른 화면으로 이어집니다.