Skip to content

설정 ​

라우트 /settings, 또는 Ctrl/⌘ ,.

Settings

프로바이더 ​

표에는 core가 아는 11개 채팅 벤더 전부가 설정 여부와 함께 나열됩니다. Configure(구성)를 누르면 해당 벤더의 항목을 입력하는 대화 상자가 열립니다. 벤더에 따라 API 키, 기본 URL, 기본 모델 등이 있습니다.

키 말고 다른 방법을 지원하는 벤더에는 실제로 제공하는 절차마다 버튼이 하나씩 생깁니다. 서로 바꿔 쓸 수 있는 것이 아니기 때문입니다.

버튼벤더동작
Sign in with a device codeOpenAI벤더 페이지에 입력할 짧은 코드를 받습니다. ChatGPT/Codex 구독으로 로그인합니다
Sign in in the browserOpenRouter브라우저에서 OAuth를 진행하고 끝나면 앱으로 돌아옵니다
Sign in with Google (gcloud)Geminigcloud auth application-default login을 실행합니다. Google Cloud CLI가 설치되어 있어야 하며, 리프레시 토큰은 Google이 보관하고 snowpea는 어떤 방식을 썼는지만 저장합니다

대화 상자가 절차를 따라가며 코드, 열어야 할 페이지, 그리고 어떻게 끝났는지를 보여 줍니다.

OAuth access token은 여기에 속하지 않습니다. 다른 곳에서 발급받은 토큰이며 — 헤드리스나 원격 머신을 위한 경우입니다 — 이를 받아들이는 벤더(OpenAI, Gemini)의 Configure 대화 상자에 붙여 넣습니다. 저장하면 auth_method도 함께 기록되는데, 이것이 있어야 데몬이 저장된 API 키보다 토큰을 먼저 씁니다.

비밀 값은 한 방향으로만 흐릅니다. 설정을 다시 읽으면 실제 값 대신 ***가 오고, Configure 대화 상자는 항상 빈 상태로 시작합니다. 마스킹된 값이 실제 자격 증명을 덮어쓰는 일이 생기지 않게 하기 위해서입니다.

로컬 / OpenAI 호환 서버 ​

직접 돌리는 모델도 하나의 벤더입니다. OpenAI 프로토콜을 말하는 서버라면 — vLLM, Ollama, LM Studio, 또는 전혀 다른 무엇이든 — 여기서 이름을 받고, 그 이름이 곧 모델을 가리키는 방법이 됩니다. hon2라는 서버가 flash-next-mtp를 제공하면 모델을 지정할 수 있는 모든 곳에서 hon2:flash-next-mtp입니다.

벤더 표 아래 카드가 각 서버를 주소·기본 모델과 함께 보여 주고, 응답이 있었는지를 점으로 알려 줍니다. 이 점이 핵심입니다. 로컬 장비는 평소에도 꺼져 있곤 하는 유일한 벤더이고, Check(확인)를 누르면 전부 다시 물어봅니다. 점이 어둡다는 것은 방금 아무 응답도 없었다는 뜻이지, 설정이 잘못되었다는 뜻이 아닙니다.

Add server…(서버 추가)는 다음 순서로 진행됩니다.

  1. Name(이름) — 한 단어입니다. 벤더 id가 되므로 콜론을 넣을 수 없고, core가 이미 가진 벤더 이름도 쓸 수 없습니다.
  2. Type(종류) — vLLM, Ollama, LM Studio, 또는 그 밖의 OpenAI 호환 엔드포인트. 고르면 그 서버가 보통 쓰는 포트가 채워집니다.
  3. Base URL(기본 URL) — 고칠 수 있습니다. 서버에 이름을 붙이는 이유 자체가 기본값이 아니기 때문입니다.
  4. API key(API 키) — 선택 사항이며 보통 비워 둡니다. 대부분의 로컬 서버는 키를 요구하지 않습니다.
  5. Probe(탐색) — 이 버튼은 서버를 먼저 저장한 뒤 /v1/models를 물어봅니다. core가 설정에서 주소를 읽어 어디에 물을지 알아내므로, 저장하지 않은 서버는 탐색할 수 없습니다.
  6. Default model(기본 모델) — 서버가 알려 준 목록에서 고릅니다. 응답이 없었다면 서버는 그대로 저장되어 있습니다. 서버를 켜고 Retry(다시)를 누르거나, 기본 모델 없이 끝내거나, Remove(제거)하면 됩니다.

같은 흐름이 설정 마법사의 프로바이더 단계에도 있습니다. 거기서는 추가한 서버가 자기 이름으로 벤더 목록에 합류하고 곧바로 선택됩니다.

Remove는 두 번 묻고 나서 그 서버의 설정 블록을 지웁니다. 이름 있는 로컬 서버는 그 블록이 전부이므로, 그것이 곧 벤더를 지우는 일입니다.

프로젝트 기본값 ​

한 프로젝트에 속한 세션들의 기본값이며, 그 프로젝트의 .snowpea/settings.json에 저장됩니다.

  • Project directory(프로젝트 디렉터리)는 편집할 프로젝트를 고릅니다. Load(불러오기)가 해당 설정을 읽어 옵니다.
  • Default mode(기본 모드)는 새 스레드가 시작할 권한 모드입니다. plan, accept, auto 중 하나입니다.
  • Execution backend(실행 백엔드)는 도구가 실제로 실행되는 곳입니다. core가 지원하는 바에 따라 로컬 컴퓨터이거나 샌드박스입니다.

각 구역은 자체 버튼으로 저장합니다. 입력하는 대로 적용되는 것은 없습니다.

모델 ​

무엇이 어떤 프로바이더와 모델로 도는지를 정합니다. 패널에는 Global과 Project 탭이 있습니다. 프로젝트 문서는 <프로젝트>/.snowpea/settings.json이며, 그 안의 각 키가 전역 값 위에 덮입니다. Project 탭은 프로젝트 기본값에서 프로젝트 디렉터리를 불러온 뒤에 쓸 수 있습니다.

  • Profiles(프로필)는 프로바이더와 모델의 짝에 이름을 붙인 것입니다. fast → openai / gpt-4.1-mini 처럼요. 프로바이더 목록은 core가 아는 벤더에서 오므로, 존재하지 않는 벤더를 가리키는 프로필은 만들 수 없습니다.
  • Default(기본값)는 그 위의 어떤 규칙도 정하지 않았을 때 쓰이는 프로필입니다.
  • Per-agent(에이전트별)는 한 에이전트를 한 프로필에 고정합니다. executor는 싼 모델로, architect는 강한 모델로 돌리고 싶을 때 쓰는 설정입니다.

무엇이 정하는가 ​

"어떤 모델인가"에 답할 수 있는 규칙이 다섯 가지이고, 패널 위쪽의 사다리가 실제로 어느 규칙이 이겼는지 보여 줍니다. 이긴 칸은 강조되고, 그 칸이 덮어쓴 값들에는 취소선이 그어집니다. 높은 것부터:

칸정하는 곳
Call overrideagent.spawn({ model }) — 그 실행 한 번만
Agent assignment위의 에이전트별 설정. 프로젝트 models.agents가 전역 agents.models를 이김
Agent definition에이전트 파일의 model: 항목
Thread pin스레드 머리글의 모델 선택기, 또는 /model
Project default프로젝트의 models.default
Global default전역 models.default

for agent 칸에 에이전트 이름을 적으면 일반 세션이 아니라 그 에이전트에 대한 사슬을 볼 수 있습니다.

모델 선택기는 모두 — 스레드 머리글, Agents 화면, 프로젝트 설정 시트 — 프로필을 먼저 보여 주고, 그다음 모델을 알려 주는 벤더마다 제목을 하나씩 두고 묶습니다. 이름 있는 로컬 서버도 자기 제목 아래에 나오는데, 서버를 네 대 돌리는 컴퓨터에서 hon2:flash-next-mtp가 읽히게 하는 것이 바로 이 묶음입니다.

참조로는 프로필 id, vendor:model, 또는 벤더 이름만 쓸 수 있습니다. 벤더 이름만 쓰면 그 벤더의 기본 모델을 가리킵니다. 프로필 id를 잘못 적으면 그대로 벤더 이름이 되어 버리기 때문에, 참조가 그렇게 해석될 때는 패널이 알려 줍니다. inherit은 아무것도 정하지 않고 다음 규칙으로 넘깁니다.

기본값이 가리키던 프로필을 지우면 기본값도 함께 비워집니다. 더 이상 해석되지 않는 이름을 가리킨 채로 남지 않게 하기 위해서입니다.

사고 강도(effort) ​

모델에게 얼마나 깊이 생각하라고 요구할지입니다. low, medium, high, max가 있습니다. 같은 모델이라도 양 끝은 사실상 다른 조수처럼 굴기 때문에, 벤더 블록 안에 파묻힌 항목이 아니라 그 자체로 하나의 설정입니다.

Default effort(기본 강도)는 agent.effort에 씁니다. auto는 아무것도 쓰지 않습니다. 키를 지우며, 그것이 "벤더가 정하게 둔다"를 저장하는 방식입니다.

Overrides(재정의)의 키는 모델 참조를 쓰는 방식 그대로입니다. 벤더 이름만 (openai) 쓰면 그 벤더의 모든 모델에, vendor:model (openai:gpt-5) 키는 그 모델 하나에 적용되며 벤더 규칙을 이깁니다.

높은 것부터 사다리 전체:

칸정하는 곳
Thread pin스레드 머리글의 effort 칩, 또는 /effort
모델별 재정의여기의 openai:gpt-5 키
벤더별 재정의여기의 openai 키
Defaultagent.effort

아무것도 걸리지 않는 것도 하나의 답입니다. 벤더 자신의 기본값이 적용되며, IDE는 알 수 없는 단계 이름을 지어내는 대신 그렇게 말합니다.

대부분의 로컬 서버는 이 값을 무시합니다. 그런 스레드에서는 effort 칩이 이유와 함께 흐리게 표시되고, 설정은 그대로 저장됩니다. 그 서버에서 아무것도 달라지지 않을 뿐입니다.

허용 목록 ​

에이전트가 묻지 않고 실행해도 되는 셸 명령으로, 명령 전체에 대한 정규 표현식으로 씁니다. ^git status.*$가 전형적인 항목입니다. Scope(범위)는 그 패턴을 전역에 적용할지 현재 프로젝트에만 적용할지를 고릅니다.

허용 목록 항목은 상시 승인입니다. ^git .*$ 같은 패턴은 보기보다 훨씬 넓고, .*는 이 장치를 통째로 무력화합니다.

도구 ​

언어 서버를 다룹니다. core는 에이전트가 어떤 파일을 처음 건드릴 때 그 파일을 담당하는 서버를 띄우고, 그 뒤로는 쓰기가 끝날 때마다 그 파일의 진단을 함께 돌려줍니다. 편집기에서 저장하는 순간 보이는 것과 같은 오류와 경고입니다.

카드의 첫 줄은 지금 실제로 무엇이 도는지를 알려 줍니다. 준비된 서버가 몇 개인지, 아직 뜨는 중인 것이 몇 개인지, 깨진 것이 몇 개인지입니다. 깨진 서버는 시끄러운 상태가 아니라 조용한 상태로 읽어야 합니다. 뜨지 못한 서버는 그 언어에 대해 진단을 아예 내놓지 않기 때문입니다.

Enabled(사용)를 끄면 일곱 개의 lsp_* 도구가 도구 목록에서 빠지고, 쓰기에 Diagnostics 블록이 붙지 않습니다. 그 외에 달라지는 것은 없습니다.

Install missing servers(없는 서버 설치)는 기본적으로 꺼져 있고, 이는 의도된 기본값입니다. PATH에 없는 서버는 그냥 진단을 내놓지 않을 뿐이며, 여기서 직접 켜지 않는 한 무엇도 내려받지 않습니다. 켜면 snowpea가 npm, pip, go로 $SNOWPEA_HOME/lsp에 서버를 설치합니다.

Idle timeout(유휴 시간)은 쓰이지 않는 서버를 몇 초 뒤에 내릴지입니다. 0으로 두면 한 번 뜬 서버는 core가 도는 동안 계속 살아 있습니다. 메모리를 더 쓰는 대신 다시 뜨기를 기다리지 않는 쪽을 고르는 셈입니다.

서버 목록 ​

서버마다 한 행씩, id와 상태, 그리고 도는 중이면 어떤 프로젝트 루트에서 도는지, 아직 뜨지 않았으면 어떤 파일을 담당하는지를 보여 줍니다. 이 목록은 core가 가진 등록부 그대로입니다. 이미 뜬 서버만이 아니라 core가 띄울 줄 아는 서버 전부이므로, core에 서버가 추가되면 앱을 업데이트하지 않아도 여기에 나옵니다.

처음에는 이 컴퓨터에서 의미가 있는 서버만 나옵니다. core가 띄운 것, 직접 설정한 것, 직접 끈 것입니다. 나머지는 대부분 쓰지 않는 언어에 대한 것입니다. Show all(전체 보기)로 펼칠 수 있고, 필터는 어느 쪽이든 등록부 전체에서 찾습니다.

서버를 끄면 그 서버는 아예 건드리지 않습니다. 띄우지도 않고 진단도 오지 않습니다. 린터가 틀렸다기보다 특정 프로젝트에서 유난히 시끄러울 때 쓰는 설정입니다.

직접 끈 것이 아닌 상태가 두 가지 있습니다. off by default(기본 꺼짐)는 core가 그 서버를 꺼진 채로 내보낸다는 뜻이고 — 지금은 ty와 ruff가 그렇습니다 — 이때 토글은 동작하지 않습니다. 설정에서 뺄 것이 없기 때문입니다. 켜려면 설정 문서에 lsp.servers 재정의를 써야 합니다. install 표시는 그 서버가 PATH에 없다는 뜻입니다. 마우스를 올리면 설치 명령이 나오고, 위의 Install missing servers를 켜도 됩니다.

core에 들어 있지 않은 서버도 설정 문서의 lsp.servers에 선언해 두면 이 목록에 함께 나옵니다.

MCP 서버 ​

MCP 서버는 에이전트에게 도구 묶음을 건네주는 별도의 프로그램입니다 — GitHub 이슈, 헤드리스 브라우저, 문서 색인 같은 것들입니다. 이 카드는 지금 열린 프로젝트에 대해 코어가 아는 모든 서버를 보여 주고, JSON을 직접 고치지 않고도 추가·테스트·비활성화· 삭제할 수 있게 합니다.

서버는 네 곳에서 옵니다. 범위(scope) 칩이 어느 쪽인지 알려 줍니다.

범위파일여기서 편집
project프로젝트 자신의 .mcp.json가능
global$SNOWPEA_HOME/.mcp.json가능
plugin플러그인이 가진 파일불가 — 플러그인을 지우세요
settings예전 방식인 설정의 mcp.servers불가

편집할 수 없는 행에는 View가 있고 어디서 온 것인지 적혀 있습니다. 나머지에는 Edit, Test, Disable, Remove가 있습니다. 비활성화는 항목을 남겨 둔 채 시작만 하지 않는 것으로, "지금은 아님"과 "삭제"의 차이입니다.

상태 점은 실시간으로 따라갑니다. 올라오는 동안 starting, 응답하면 ready, 실패하면 error이며 이유는 툴팁에 있습니다. 주기적으로 확인하지 않습니다 — 코어가 바뀔 때 알려 줍니다.

추가하기 ​

Add server를 누르면 탭이 셋인 양식이 열립니다. Command는 코어가 실행하는 프로그램(npx, -y @modelcontextprotocol/server-github), URL은 이미 어딘가에서 돌고 있는 서버, Catalog는 알려진 서버 목록으로 양식을 대신 채워 주고 각각 어떤 환경 변수가 필요한지 알려 줍니다.

인자 칸은 셸이 나누는 방식 그대로(따옴표 포함) 나뉘지만 셸은 실행되지 않습니다. 서버는 그 목록에서 바로 시작되므로, 줄 안의 &&나 |는 명령이 아니라 인자입니다.

Test는 서버를 켜서 무엇을 할 수 있는지 물어보고 다시 끕니다. "Connected — 12 tools"와 함께 목록이 오고 각 항목에는 체크박스가 있습니다. 원하지 않는 것을 끄면 나머지만 등록됩니다. 시작에 실패한 서버는 Save anyway를 켜지 않는 한 아예 저장되지 않으며, 켜면 항목만 쓰이고 멈춘 상태로 남습니다.

저장을 막는 경우가 둘 더 있고, 각각 따로 물어봅니다. 같은 범위에 이미 쓰인 이름이면 기존 것을 대체할지 묻습니다. 안전 점검이 문제 삼는 구성 — 네트워크까지 닿는 셸 인터프리터, 로그인 프로필에 쓰는 항목 — 이면 무엇을 발견했는지 적어 보여 주고 두 번째 확인을 따로 요구합니다.

비밀 값 ​

환경 변수와 HTTP 헤더는 설정 파일에 쓰이고 다시 읽히지 않습니다. 저장된 서버는 변수 이름만 보여 주고 값 자리에는 •••가 오며, 다시 입력하지 않은 값은 그대로 둡니다. 표에 GITHUB_TOKEN=•••까지만 나오는 이유입니다.

Audio ​

어떤 음성 백엔드를 쓸지, 어떤 목소리를 쓸지, 답변을 묻지 않고 읽어 줄지를 정합니다. 각 항목이 하는 일과 백엔드가 없을 때 어떻게 되는지는 음성을 참고하세요.

Voice in(입력)과 Voice out(출력)은 드롭다운이 아니라 엔진마다 한 줄씩 있는 목록입니다. 한 줄이 이름만 말하는 것이 아니기 때문입니다.

방향마다 두 가지 상태 중 하나이고, 목록 위의 줄이 어느 쪽인지 알려 줍니다.

  • Not set — voice input is off; install or pick an engine. 아무것도 고르지 않았으므로 그쪽 음성은 전혀 동작하지 않습니다. 마이크 버튼과 Read aloud도 같은 이유로 비활성화됩니다. "자동"은 없습니다. 데몬이 대신 골라 주지 않습니다.
  • Pinned: Supertonic과 그 옆의 Reset to not set. 되돌리면 그쪽 음성이 다시 꺼집니다.

아무것도 설정되지 않은 동안에는 snowpea가 권하는 엔진이 목록 위에 Install 버튼과 함께 나오고, 그 버튼에 키보드 초점이 미리 가 있습니다. 두 권장 엔진 — 입력의 SenseVoiceSmall, 출력의 Supertonic — 은 모두 CPU에서 돌기 때문에 그래픽 카드도 키도 필요 없습니다.

설치와 선택은 별개입니다. Install은 엔진을 받아오기만 하고 설정은 바꾸지 않습니다. 끝나면 그 줄이 사용 가능해지고 초점이 옮겨 가며 installed — select it to use it이라고 알려 줍니다. 고정하는 것은 선택입니다. Install이라고 적힌 버튼이 다음 턴의 동작을 바꾸는 일은 없습니다.

모든 줄은 어딘가로 이어집니다. 엔진이 무엇을 필요로 하느냐에 따라 다릅니다.

줄무엇을 제공하는가
snowpea가 받아올 수 있는 엔진Install과, 줄 옆에서 펼치는 Log
시스템 패키지(eSpeak NG)패키지 관리자용 명령과 Copy, Run in terminal(통합 터미널에 입력만 하고 실행하지 않습니다), 설치 후 누르는 Re-check
Custom command명령 템플릿. 입력은 {path}, 출력은 {text}와 {out}을 검사하며 Test가 함께 있습니다. 실제로 실행될 수 있기 전에는 고정할 수 없습니다
호스티드 서비스(OpenAI)API 키. 가려지며 되읽히지 않습니다
Off그 방향을 끕니다. 설정하지 않은 것과 같은 상태입니다

설치가 진행되는 동안 줄에는 "무언가 하고 있다"가 아니라 무엇을 하고 있는지가 표시됩니다. 단계와 몇 번째/전체 몇 단계인지, 데몬이 진척도를 알 때 채워지는 막대, 크기를 알 때는 12 MB / 480 MB, 가장 최근 출력 한 줄, 그리고 토글 뒤의 전체 로그입니다. 줄만 보내는 데몬에서는 막대가 위치를 주장하지 않고 움직이기만 합니다. 추측하는 막대는 틀릴 수 있지만 모른다고 말하는 막대는 틀릴 수 없기 때문입니다.

사용자가 말하는 언어 ​

고정된 입력 엔진 아래에 **Which language will you speak?**가 있습니다. Auto-detect, 한국어, English, 日本語, 中文, 그리고 아무 BCP-47 태그나 넣을 수 있는 **Other…**입니다. Auto-detect가 권장값이고 대부분의 사람에게 맞습니다. 문장 중간에 언어를 바꾸는 사람에게는 맞지 않는데, 한 단어짜리 발화에서 "네"와 "nay"를 가려야 하는 인식 엔진에게는 단서가 거의 없기 때문입니다. 언어마다 모델이 있는 엔진은 각 언어에 어떤 모델이 필요한지와 함께 Install 버튼을 보여 줍니다.

언어마다 다른 목소리 ​

고정된 출력 엔진 아래에는 언어별 탭이 있습니다. 한국어, English, 사용자의 답변 언어, 그리고 Every other language입니다. 각 탭 아래에 그 엔진의 목소리가 나옵니다. Supertonic 같은 엔진은 언어마다 모델이 따로 있으므로, 두 언어를 쓰는 사람이 하나의 억양으로 둘 다 읽게 하는 대신 각각 다른 목소리를 쓸 수 있습니다.

설치된 목소리가 먼저 옵니다. 내려받지 않은 목소리는 크기와 Install 버튼을 같은 단계 진행 표시와 함께 보여 주며, 엔진과 마찬가지로 설치가 선택을 대신하지 않습니다. Preview는 그 탭의 언어로 된 문장을 그 목소리로 읽어 줍니다. 마음에 드는지 알아보는 유일한 방법입니다.

Engine default는 오늘 엔진이 선호하는 것을 고정하는 것이 아니라 그 언어의 설정을 지웁니다. 자기 설정이 없는 언어는 Every other language를 따르며, 그럴 때는 선택기가 그렇다고 알려 줍니다.

다른 플랫폼에 속한 엔진은 아예 나오지 않습니다. 리눅스에서 macOS say는 "사용할 수 없는" 것이 아니라 불가능한 것이고, 아무것도 할 수 없는 줄은 없는 줄보다 나쁩니다. 기준이 되는 플랫폼은 데몬의 것입니다. 원격 core라면 이 컴퓨터와 다른 기계입니다.

Voice in 아래의 Test는 2초 동안 녹음하고 무엇을 들었는지 보여 주며, 목소리 아래의 Test는 한 문장을 소리 내어 읽습니다. 둘 다 설정이 아니라 경로 전체를 확인합니다. 설치되어 있고 선택되어 있는데도 아무것도 못 듣는 경우가 실제로 있기 때문입니다.

엔진 선택은 카드의 나머지와 함께 Save로 저장됩니다. 설치만으로는 아무것도 쓰이지 않습니다.

API 키 대신 브라우저 로그인을 요구하는 프로바이더에는 Log in 버튼이 있습니다. 그 대화 상자는 프로바이더 로그인에서 설명합니다.

외형 ​

외형 패널은 다른 화면으로 연결되는 것이 아니라 이 화면에 함께 얹혀 있습니다. 테마, 밀도, 글자 크기를 다루며 자세한 내용은 테마에 있습니다.

About ​

버전과 업데이트 조작. 업데이트를 참고하세요.

설정 마법사 실행 ​

맨 아래의 Run setup wizard(설정 마법사 실행)는 이미 구성해 둔 내용을 그대로 채운 상태로 최초 실행 마법사를 다시 엽니다.

MIT licensed. The manual is generated from the product repositories — see the banner on each page.