문서
Crush
Crush는 Charm의 터미널 코딩 에이전트이며, 같은 이름의 Rust 셸과는 다릅니다. 구성은 Bash이므로 다른 엔드포인트를 가리키려면 유형, 기본 URL, 키를 지정해 제공업체 하나를 추가하면 됩니다.
Crush의 구성은 Bash입니다 — crushrc에서 `provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1"` 한 줄을 실행하면 Charm의 터미널 에이전트가 Claude와 GPT를 사용합니다
# A crushrc is Bash, not a settings file. Everything here is executed.
provider add kunavo \
--type openai-compat \
--base-url "https://api.kunavo.com/v1" \
--api-key "${KUNAVO_API_KEY:?set KUNAVO_API_KEY}"
model add kunavo/claude-sonnet-5 \
--name "Claude Sonnet 5" \
--context-window 1000000 \
--default-max-tokens 32000 \
--price-input 1.4 \
--price-output 7
model add kunavo/claude-haiku-4-5 \
--name "Claude Haiku 4.5" \
--context-window 200000 \
--default-max-tokens 16000 \
--price-input 0.7 \
--price-output 3.5
model large kunavo/claude-sonnet-5
model small kunavo/claude-haiku-4-5/v1 접미사를 유지해야 합니다. Crush 자체 문서의 OpenAI 호환 예시는 --base-url "https://api.deepseek.com/v1"이며 Anthropic 호환 예시도 같은 방식으로 끝납니다. 따라서 이 접미사는 추측이 아니라 클라이언트의 관례입니다. 접미사를 빼면 인증 오류가 아니라 404가 발생합니다.openai가 아니라 --type openai-compat를 사용하세요. README에서 두 유형을 구분합니다. openai는 OpenAI를 통해 요청을 프록시하거나 라우팅할 때, openai-compat는 OpenAI 호환 API를 제공하는 비 OpenAI 제공업체에 사용할 때 지정합니다. Kunavo는 두 번째 경우입니다.crushrc는 Crush 내장 기능을 포함한 Bash이며, Crush는 이를 신뢰하는 코드로 실행되는 전체 셸이라고 경고합니다. 이것이 바로 장점이기도 합니다. --api-key "$(op read ...)"를 사용하면 키가 파일에 들어가지 않습니다. 이전 crush.json도 여전히 불러올 수 있지만 README에서는 사용 중단 예정이라고 설명하므로 crushrc를 기반으로 구성하세요.sk-kn-로 시작합니다) $10부터 크레딧을 추가하세요. 호출 비용은 해당 잔액에서 차감되며 실패한 호출에는 요금이 부과되지 않습니다. 그러면 대시보드가 Crush 설정 화면에서 열립니다.단계별 안내
/app/keys에서 키를 만들고 복사하세요. 키는 한 번만 표시됩니다. 키를KUNAVO_API_KEY로 내보내거나, 구성 파일에서 비밀번호 관리자로부터 읽어오세요.- 위 블록을
~/.config/crush/crushrc에 넣으세요. Crush는./.crushrc,./crushrc, 전역 구성을 차례로 읽습니다. 따라서 프로젝트 설정으로 시스템 설정을 재정의할 수 있으며, 복제한 저장소에 설정이 포함되어 있을 수도 있습니다. crush를 시작하고ctrl+l를 눌러 모델 선택기를 여세요. 위의model large및model small줄에서 두 슬롯을 이미 고정했으므로, 선택기는 설정이 아니라 모델 전환에 사용합니다.- ID를 직접 등록하지 않으려면 다음과 같이 하세요.
openai-compat제공업체의 모델 목록이 비어 있을 때 또는--discover-models true를 전달하면 자동 검색이 실행됩니다. Kunavo는GET /v1/models에 응답하므로 목록이 자동으로 채워지며, 충돌이 발생하면 직접 설정한model add필드가 우선합니다. - 범위가 제한된 작업 하나를 실행한 다음
/app/billing에서 계정에 기록된 청구액을 확인하세요. 터미널에 표시되는 수치는 직접 입력한--price-*값을 계산한 결과입니다. 실제 청구액은 원장에 기록된 금액입니다.
Crush의 사용자 지정 제공업체 섹션에서 확인했습니다(2026년 9월 21일 기준). 서드파티 설정은 변경될 수 있으므로, 여기의 필드 이름이 실제 화면과 다르면 이 문서가 아니라 해당 페이지를 기준으로 삼으세요.
클라이언트를 디버깅하기 전에 확인할 사항
한 번의 요청으로 문제가 엔드포인트, 키 또는 구성 파일 중 어디에 있는지 판단할 수 있습니다. 이 요청에서 JSON이 반환되면 동일한 base URL과 키가 Crush에서 작동합니다.
# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
-H "Authorization: Bearer sk-kn-..."필드에 입력할 model id
모든 텍스트 모델은 model id로 접근할 수 있습니다. 현재 목록은 GET /v1/models이며, 가격이 포함된 카탈로그는 모델 페이지에서 확인할 수 있습니다. 요금은 토큰 100만 개당 USD 기준이며 입력 / 출력 순서입니다.
| 모델 ID | Kunavo 입력/출력 | Crush에서의 위치 |
|---|---|---|
claude-sonnet-5 | $1.40 / $7.00 | 일상적인 코딩과 편집에 사용하는 model large 슬롯 |
claude-haiku-4-5 | $0.70 / $3.50 | 제목과 요약을 만들 때 Crush가 계속 호출하는 model small 슬롯 |
claude-opus-5 | $3.50 / $17.50 | 잘못된 계획의 비용이 큰 리팩터링에서는 model large로 전환 |
gpt-5-6-terra | $0.70 / $4.20 | 같은 키를 사용하는 두 번째 계열의 모델로, model add 한 번이면 추가 가능 |
자주 묻는 질문
Crush CLI에 사용자 지정 API 제공업체를 추가하려면 어떻게 하나요?
Bash에 Crush 내장 명령이 포함된 crushrc 파일로 작성합니다. 한 줄로 엔드포인트를 등록합니다 — provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1" --api-key "$KUNAVO_API_KEY" — 그리고 ID별로 model add를 실행해 호출할 모델을 등록합니다. 이때 표시 이름, 컨텍스트 창, Crush가 화면에 표시하는 예상 비용에 사용하는 백만 토큰당 가격을 지정합니다. Crush는 ./.crushrc, ./crushrc, ~/.config/crush/crushrc 순서로 읽으므로 같은 블록을 프로젝트별로 또는 컴퓨터별로 사용할 수 있습니다.
Crush의 기본 URL은 끝에 /v1을 붙여야 하나요?
예. Crush의 사용자 지정 공급자 예시는 두 유형 모두 접미사를 붙입니다. OpenAI 호환 방식은 https://api.deepseek.com/v1, Anthropic 호환 방식은 https://api.anthropic.com/v1입니다. Kunavo 키를 사용할 때 값은 https://api.kunavo.com/v1입니다. 이는 ANTHROPIC_BASE_URL에 기본 출처만 지정하는 Claude Code와 반대입니다. Claude Code 클라이언트가 경로를 직접 덧붙이기 때문입니다. 같은 게이트웨이지만 표기 방식은 다르며, /v1을 빠뜨리면 401이 아니라 404가 표시됩니다.
--type openai와 --type openai-compat 중 무엇을 사용해야 하나요?
타사 게이트웨이에는 openai-compat을 사용합니다. Crush README는 openai를 OpenAI 자체를 통해 요청을 프록시하거나 라우팅하는 경우에 사용하도록 정하고, OpenAI 호환 API를 제공하는 비 OpenAI 공급자에는 openai-compat을 지정합니다. 이 유형은 전송 형식 외의 동작도 결정합니다. 모델 목록이 비어 있는 openai-compat 공급자는 모델을 자동 검색합니다. Crush는 Anthropic 호환 엔드포인트용 --type anthropic도 지원하며, 이 유형에는 --extra-header anthropic-version 2023-06-01을 지정합니다.
이 설정을 넣을 위치로 아직도 crush.json이 맞나요?
아니요. crush.json은 이전 형식이며 Crush 공식 문서에서는 현재 더 이상 사용을 권장하지 않고 새 기능도 추가되지 않는다고 설명합니다. 현재 형식은 crushrc입니다. 둘 다 파싱되는 대신 실행된다는 점에 유의하세요. crushrc는 전체 셸에서 실행되고, crush.json 안의 $(...)는 로드 시 확장됩니다. 따라서 문서에서는 설정을 읽지 않은 디렉터리에서 Crush를 실행하지 말라고 경고합니다. 설정 파일 안에서 암호 관리자에 있는 키를 가져올 수 있는 것도 이 실행 방식 덕분입니다.
Crush에 표시되는 비용과 실제 청구액이 다른 이유는 무엇인가요?
두 값은 출처가 서로 다른 별개의 수치이기 때문입니다. 직접 등록한 공급자의 화면상 예상 비용은 model add에 입력한 --price-input 및 --price-output 값을 계산한 것이고, 내장 공급자는 Crush의 외부 공급자 카탈로그인 Catwalk의 데이터를 사용합니다. 둘 다 계정 정보를 읽지 않습니다. --price-* 플래그를 잘못 입력하면 표시 값이 틀릴 뿐 실제 청구액에는 영향을 주지 않습니다. 실제 금액은 /app/billing의 거래 내역과 대조하세요.
사용자 지정 공급자를 통해 Crush에서 Claude 또는 GPT 모델을 사용할 수 있나요?
예, Crush에는 이를 제한하는 기능이 없습니다. 온보딩에서 안내하는 공식 공급자는 Charm Hyper지만, 사용자 지정 공급자도 문서화된 정식 사용 경로이며 요금제 제한이 없습니다. 모델 ID는 클라이언트가 아니라 엔드포인트에서 확인됩니다. 따라서 openai-compat 공급자에서 Claude ID를 사용하는 것이 의도된 조합입니다. 유형은 공급업체가 아니라 전송 프로토콜을 나타냅니다.