문서

문서

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를 사용합니다

~/.config/crush/crushrc
# 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
기본 URL은 /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를 기반으로 구성하세요.
Kunavo는 Crush를 런타임에서 테스트하지 않았습니다. 이 클라이언트뿐 아니라 이 페이지의 다른 클라이언트도 테스트하지 않았습니다. 여기서 확인한 것은 Kunavo가 공개한 엔드포인트에 Crush 자체 문서의 구성을 적용한 것입니다. 설정 안내 페이지는 테스트 결과가 아닙니다. 매일 사용하는 도구를 전환하기 전에 범위가 제한된 작업 하나를 실행하세요.
아직 키가 없나요? Kunavo 계정을 만들고, 키를 생성한 다음(키는 sk-kn-로 시작합니다) $10부터 크레딧을 추가하세요. 호출 비용은 해당 잔액에서 차감되며 실패한 호출에는 요금이 부과되지 않습니다. 그러면 대시보드가 Crush 설정 화면에서 열립니다.

단계별 안내

  1. /app/keys에서 키를 만들고 복사하세요. 키는 한 번만 표시됩니다. 키를 KUNAVO_API_KEY로 내보내거나, 구성 파일에서 비밀번호 관리자로부터 읽어오세요.
  2. 위 블록을 ~/.config/crush/crushrc에 넣으세요. Crush는 ./.crushrc, ./crushrc, 전역 구성을 차례로 읽습니다. 따라서 프로젝트 설정으로 시스템 설정을 재정의할 수 있으며, 복제한 저장소에 설정이 포함되어 있을 수도 있습니다.
  3. crush를 시작하고 ctrl+l를 눌러 모델 선택기를 여세요. 위의 model large 및 model small 줄에서 두 슬롯을 이미 고정했으므로, 선택기는 설정이 아니라 모델 전환에 사용합니다.
  4. ID를 직접 등록하지 않으려면 다음과 같이 하세요. openai-compat 제공업체의 모델 목록이 비어 있을 때 또는 --discover-models true를 전달하면 자동 검색이 실행됩니다. Kunavo는 GET /v1/models에 응답하므로 목록이 자동으로 채워지며, 충돌이 발생하면 직접 설정한 model add 필드가 우선합니다.
  5. 범위가 제한된 작업 하나를 실행한 다음 /app/billing에서 계정에 기록된 청구액을 확인하세요. 터미널에 표시되는 수치는 직접 입력한 --price-* 값을 계산한 결과입니다. 실제 청구액은 원장에 기록된 금액입니다.

Crush의 사용자 지정 제공업체 섹션에서 확인했습니다(2026년 9월 21일 기준). 서드파티 설정은 변경될 수 있으므로, 여기의 필드 이름이 실제 화면과 다르면 이 문서가 아니라 해당 페이지를 기준으로 삼으세요.

이것이 요약본입니다. 전체 안내—모델 선택, 실제 세션 비용, 실패 유형—는 Crush와 OpenCode 비교에 있습니다.

클라이언트를 디버깅하기 전에 확인할 사항

한 번의 요청으로 문제가 엔드포인트, 키 또는 구성 파일 중 어디에 있는지 판단할 수 있습니다. 이 요청에서 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 기준이며 입력 / 출력 순서입니다.

모델 IDKunavo 입력/출력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 한 번이면 추가 가능
월정액 없이 선불 잔액에서 토큰별로 청구됩니다. billing을 참고하세요. 반복되는 컨텍스트(에디터나 채팅 클라이언트가 보내는 데이터의 대부분)에서는 모델 선택보다 프롬프트 캐싱이 청구액에 더 큰 영향을 줍니다.

자주 묻는 질문

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를 사용하는 것이 의도된 조합입니다. 유형은 공급업체가 아니라 전송 프로토콜을 나타냅니다.