문서

문서

Junie CLI

Junie CLI는 설정 화면이 아니라 JSON 파일로 사용자 지정 엔드포인트를 설정합니다. $JUNIE_HOME/models/kunavo.json에 9줄을 작성하고 junie --model custom:kunavo를 실행하면 하나의 키로 Claude와 GPT를 사용하며, 보조 작업 트래픽은 저렴한 곳으로 보내도록 설정됩니다.

Junie CLI는 $JUNIE_HOME/models/의 JSON 프로필로 사용자 지정 엔드포인트를 받으며, baseUrl은 완전한 엔드포인트 URL이고 fasterModel은 보조 트래픽의 목적지를 결정합니다

$JUNIE_HOME/models/kunavo.json — 또는 .junie/models/kunavo.json
{
  "id": "claude-sonnet-5",
  "baseUrl": "https://api.kunavo.com/v1/chat/completions",
  "displayName": "Kunavo",
  "providerName": "Kunavo",
  "apiType": "OpenAICompletion",
  "apiKey": "${KUNAVO_API_KEY}",
  "fasterModel": {
    "id": "claude-haiku-4-5"
  }
}
baseUrl는 경로까지 포함한 완전한 엔드포인트입니다. JetBrains는 이를 명확히 설명합니다. “baseUrl는 완전한 엔드포인트 URL로 사용되며, Junie는 여기에 경로를 추가하지 않습니다.” 또한 “선택한 apiType의 전체 엔드포인트로 설정”하라고 안내합니다. 따라서 이 필드는 원본 주소도 아니고 대부분의 클라이언트가 원하는 /v1 루트도 아닙니다. https://api.kunavo.com/v1/chat/completions입니다. https://api.kunavo.com/v1에서 멈추는 것이 다른 설정은 모두 올바른 프로필에서 404가 발생하는 가장 유력한 원인입니다.
환경 변수가 없으면 요청이 아니라 프로필 전체가 실패합니다. apiKey 및 extraHeaders 값에는 $${VAR_NAME} 참조를 사용할 수 있습니다. JetBrains는 실패 상황을 정확히 문서화했습니다. “참조된 환경 변수가 설정되지 않은 경우 프로필을 불러오지 못하고 Junie가 누락된 변수를 알려주는 오류를 표시합니다.” Junie를 시작하기 전에 KUNAVO_API_KEY를 내보내세요. 프로필은 첫 요청 시점이 아니라 로드 시점에 읽히므로, 내보내기가 사라진 셸에서는 401이 아니라 /model에서 프로필이 사라진 것으로 나타납니다.
fasterModel는 요청하지 않은 작업을 Junie가 수행할 때 사용하는 모델입니다. JetBrains는 이를 “컨텍스트 요약이나 작업 분류 같은 내부 보조 작업에 사용하는 모델”이라고 설명하며, primaryModel 또는 fasterModel가 “명시적으로 정의되지 않으면 최상위 속성을 상속한다”고 안내합니다. 따라서 fasterModel 블록이 없는 프로필에서는 기본 정리 작업에도 기본 모델의 요금이 부과됩니다. 위의 한 줄 재정의가 전체 해결책이며, 이 블록이 부록이 아닌 최소 설정에 포함된 이유입니다.
이 프로필은 아래 날짜에 확인한 JetBrains의 공개 스키마를 바탕으로 작성했습니다. Kunavo는 자체 엔드포인트를 대상으로 Junie CLI를 실행해 보지 않았습니다. 세션, 스트리밍 턴, 도구 왕복을 실행하지 않았으며 특정 클라이언트 빌드를 고정해 승인하지도 않았습니다. 설정 안내 페이지를 공개한 것은 테스트가 아니며, 이 내용을 테스트 결과로 해석해서는 안 됩니다. 아래의 curl는 10초 안에 직접 확인할 수 있는 부분입니다. 그 위에서 Junie가 어떻게 동작하는지는 사용자와 JetBrains 사이의 문제입니다.
아직 키가 없나요? Kunavo 계정을 만들고, 키를 생성한 다음(키는 sk-kn-로 시작합니다) $10부터 크레딧을 추가하세요. 호출 비용은 해당 잔액에서 차감되며 실패한 호출에는 요금이 부과되지 않습니다. 그러면 대시보드가 Junie CLI 설정 화면에서 열립니다.

단계별 안내

  1. /app/keys에서 키를 만들고 복사하세요. 키는 한 번만 표시됩니다. Junie를 시작할 셸에서 KUNAVO_API_KEY로 내보내거나 파일에 키를 직접 입력할 수 있습니다. JetBrains는 “$${...} 참조가 없는 값은 그대로 사용됩니다”라고 안내합니다.
  2. 위 JSON을 계정용 $JUNIE_HOME/models/kunavo.json 또는 저장소와 공유할 .junie/models/kunavo.json로 저장하세요. .json를 제외한 파일 이름이 프로필 ID가 되며, 이 ID가 아래 선택기에 custom:kunavo가 표시되게 합니다.
  3. id를 실제로 사용할 모델 ID로 설정하세요. 이는 “API 엔드포인트에서 기대하는 모델 식별자”로 설명되어 있으므로 아래 표의 Kunavo 슬러그를 그대로 입력하면 됩니다. ID는 Junie 내부가 아니라 엔드포인트에서 확인됩니다.
  4. Junie를 시작하고 프로필을 선택하세요. junie --model custom:kunavo 또는 대화형 세션의 /model 명령을 사용하면 됩니다. 사용자 지정 모델은 “기본 제공 공급자 다음에 모델 선택 목록에 표시됩니다.”
  5. 인사말 대신 파일을 수정하는 작업을 맡겨 보세요. Junie는 에이전트형 클라이언트이며 거의 모든 작업에서 도구 호출을 활용하므로, 파일을 읽고 쓰는 첫 실행으로 한 번의 답변보다 훨씬 많은 점을 확인할 수 있습니다.

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

이것이 요약본입니다. 전체 안내—모델 선택, 실제 세션 비용, 실패 유형—는 Junie CLI와 Claude Code — 엔드포인트 경계 비교에 있습니다.

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

한 번의 요청으로 문제가 엔드포인트, 키 또는 구성 파일 중 어디에 있는지 판단할 수 있습니다. 이 요청에서 JSON이 반환되면 동일한 base URL과 키가 Junie CLI에서 작동합니다.

# 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 입력/출력Junie CLI에서의 위치
claude-sonnet-5$1.40 / $7.00일반 작업, 즉 파일을 수정하는 작업에 사용하는 primaryModel
claude-opus-5$3.50 / $17.50잘못되면 비용이 많이 드는 계획을 세션별로 고정
claude-haiku-4-5$0.70 / $3.50컨텍스트 요약 및 작업 분류에 사용하는 fasterModel 역할
gpt-5-6-sol$2.00 / $12.00다른 모델 계열의 추가 의견 — 같은 키를 사용하는 두 번째 프로필
월정액 없이 선불 잔액에서 토큰별로 청구됩니다. billing을 참고하세요. 반복되는 컨텍스트(에디터나 채팅 클라이언트가 보내는 데이터의 대부분)에서는 모델 선택보다 프롬프트 캐싱이 청구액에 더 큰 영향을 줍니다.

Kunavo가 응답하는 나머지 두 apiType 값

apiType는 벤더가 아니라 요청 형식을 지정하며, Junie가 허용하는 값은 OpenAICompletion, OpenAIResponses, Google, Anthropic 네 가지입니다. Kunavo는 세 가지 경로를 제공하므로 나머지 세 값 중 두 가지에 대응하는 baseUrl가 있습니다. Junie는 경로를 추가하지 않으므로 형식을 바꾸면 같은 편집에서 URL도 변경해야 합니다.

  1. "apiType": "OpenAICompletion"와 https://api.kunavo.com/v1/chat/completions 조합 — 위 프로필에 사용된 설정이며, 세 경로 중 가장 널리 사용되는 경로이므로 이 페이지에서 권장합니다.
  2. "apiType": "Anthropic"와 https://api.kunavo.com/v1/messages 조합 — Kunavo는 이 경로에서 Messages 형식에 응답합니다.
  3. "apiType": "OpenAIResponses"와 https://api.kunavo.com/v1/responses 조합.

세 가지 중 어떤 것이 주어진 모델을 가장 잘 처리하는지는 런타임 테스트로 답할 수 있는 질문이며 문서를 읽는 것만으로는 알 수 없습니다. 따라서 이 페이지는 첫 번째 항목 외에는 순위를 매기지 않습니다. 하나를 선택하고 URL과 apiType를 일치시키세요. 키가 설정된 프로필에서 401이 반환되면 Junie의 헤더를 추측하는 대신 인증 정보를 명시하세요. JetBrains는 apiKey가 “생략되면 요청에 Authorization 헤더가 포함되지 않는다”고만 부정형으로 문서화했으며, 값을 설정했을 때 사용되는 인증 방식을 밝히지 않았습니다. extraHeaders는 “모든 요청에 포함할 추가 HTTP 헤더”로 설명되고 같은 $${VAR} 참조를 지원하므로, "extraHeaders": {"Authorization": "Bearer $${KUNAVO_API_KEY}"}가 명확한 설정 방식입니다.

자주 묻는 질문

Junie CLI에 사용자 지정 공급자를 어떻게 추가하나요?

Junie CLI는 설정 화면 대신 JSON 프로필에서 사용자 지정 공급자를 읽습니다. 계정용으로는 $JUNIE_HOME/models/에, 프로젝트용으로는 프로젝트 내 .junie/models/에 파일을 저장하세요. .json 확장자를 제외한 파일 이름이 프로필 ID가 됩니다. 필수 키는 id, baseUrl, apiType이며 apiKey, displayName, providerName, extraHeaders, extraBody, temperature, maxContextLength, primaryModel, fasterModel은 선택 사항입니다. 그런 다음 `junie --model custom:<id>` 또는 /model 명령으로 선택하세요. 사용자 지정 모델은 기본 제공 공급자 다음에 목록에 표시됩니다.

Junie CLI의 baseUrl 끝에는 /v1을 붙여야 하나요, 아니면 전체 경로를 지정해야 하나요?

전체 경로를 지정해야 합니다. JetBrains는 baseUrl이 완전한 엔드포인트 URL로 사용되고 Junie가 여기에 경로를 추가하지 않는다고 명시하며, 선택한 apiType에 맞는 전체 엔드포인트를 설정하라고 안내합니다. Kunavo에서 OpenAICompletion 프로필을 사용하는 경우 https://api.kunavo.com/v1/chat/completions를 입력하세요. 오리진도, Kilo Code 같은 클라이언트에서 요구하는 /v1 루트도 아닙니다. JetBrains 자체 문서의 예시 프로필 두 개에도 같은 이유로 전체 경로가 들어 있습니다.

환경 변수 누락으로 프로필을 불러오지 못했다는 Junie 오류가 표시되는 이유는 무엇인가요?

apiKey 및 extraHeaders 값은 ${VAR_NAME} 참조를 지원하며, 참조된 환경 변수가 설정되지 않으면 프로필을 불러오지 못하고 Junie가 누락된 변수 이름을 표시하는 오류를 보고한다고 JetBrains가 문서화했기 때문입니다. 프로필을 불러올 때 참조 값을 확인하므로 요청 실패가 아니라 모델 목록에서 프로필이 사라지는 증상이 나타납니다. Junie를 시작하기 전에 변수를 내보내거나 참조를 실제 값으로 바꾸세요.

Junie CLI에서 Kunavo 같은 게이트웨이에 자체 BYOK 키를 사용할 수 있나요?

BYOK 화면과 사용자 지정 프로필은 서로 다른 설정 경로입니다. JetBrains의 BYOK 페이지는 /account 또는 시작 화면의 "Use your own API key"를 통해 OpenAI, Anthropic, Google, xAI, OpenRouter, GitHub Copilot 등 이름이 지정된 공급자를 연결하는 방법을 설명하며, JetBrains AI 구독 없이도 모든 사용 요금이 공급자에게 청구된다고 안내합니다. Kunavo처럼 목록에 없는 엔드포인트는 이 페이지의 JSON 파일인 사용자 지정 LLM 프로필로 추가해야 합니다. 자체 키 사용은 Junie CLI 기능입니다. JetBrains 플러그인 문서에 따르면 Junie 플러그인에서는 지원되지 않습니다.

선택하지 않은 모델을 Junie가 호출하는 이유는 무엇인가요?

Junie는 프로필을 두 가지 역할로 나눕니다. fasterModel은 컨텍스트 요약이나 작업 분류 같은 내부 보조 작업에 사용되는 모델로 문서화되어 있습니다. 이 블록을 정의하지 않으면 역할이 최상위 속성을 상속한다고 JetBrains가 명시하므로, 보조 작업 트래픽에도 기본 모델이 사용되고 해당 모델의 요금이 부과됩니다. 이 페이지의 프로필처럼 fasterModel.id를 저렴한 ID로 설정하면 됩니다. 최상위 baseUrl, apiType, apiKey는 두 역할이 모두 상속하므로 ID만 바꾸면 됩니다.

Kunavo는 Junie CLI를 테스트했나요?

아니요. 2026년 9월 21일에 확인한 내용은 JetBrains의 사용자 지정 LLM 문서 자체입니다. 필드 이름과 순서, 허용되는 apiType 값, 완전한 엔드포인트 규칙은 해당 문서에서 인용했습니다. Kunavo는 Junie CLI를 설치하거나 빌드를 고정하거나 Junie CLI를 통해 요청을 보내지 않았으며, 클라이언트 내부의 스트리밍, 도구 왕복, 모델 라우팅에 관해서도 어떤 주장도 하지 않습니다. 엔드포인트와 키가 정상적으로 작동하는지는 이 페이지의 curl로 별도로 확인할 수 있습니다.