문서

문서

opencode

opencode는 Vercel AI SDK를 기반으로 공급자를 구성하므로, 새 엔드포인트를 지정할 때는 npm 패키지와 baseURL을 명시하는 블록 하나면 됩니다. 지정하는 패키지에 따라 사용하는 두 와이어 형식 중 하나가 결정됩니다.

opencode.json에 하나의 제공자 블록 — 채팅 완성에는 @ai-sdk/openai-compatible, /v1/responses 표면이 필요할 때는 @ai-sdk/openai

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "kunavo": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "Kunavo",
      "options": {
        "baseURL": "https://api.kunavo.com/v1",
        "apiKey": "{env:KUNAVO_API_KEY}"
      },
      "models": {
        "claude-sonnet-5": {
          "name": "Claude Sonnet 5",
          "limit": { "context": 200000, "output": 64000 }
        },
        "claude-haiku-4-5": { "name": "Claude Haiku 4.5" }
      }
    }
  }
}
npm 필드에서 와이어 형식을 선택합니다. @ai-sdk/openai-compatible은 /v1/chat/completions를 사용하고, @ai-sdk/openai은 /v1/responses를 사용합니다. Kunavo는 두 형식을 모두 제공하므로 어느 쪽도 사용할 수 있습니다. GPT 계열에서 추론 항목을 그대로 전달하려면 Responses 패키지를 사용하고, 그 외에는 chat-completions 패키지를 사용하세요.
"apiKey": "{env:KUNAVO_API_KEY}"은 로드할 때 환경 변수에서 키를 읽습니다. opencode.json은 저장소에 들어가는 파일이므로 여기에 키를 직접 입력하면 비밀로 유지되지 않습니다.
모델마다 limit.context과 limit.output을 설정하세요. opencode는 이 숫자로 남은 컨텍스트를 추적하므로, 값을 지정하지 않은 모델에는 해당 모델의 실제 한도가 아닌 기본값이 적용됩니다.
아직 키가 없나요? Kunavo 계정을 만들고, 키를 생성한 다음(키는 sk-kn-로 시작합니다) $10부터 크레딧을 추가하세요. 호출 비용은 해당 잔액에서 차감되며 실패한 호출에는 요금이 부과되지 않습니다. 그러면 대시보드가 opencode 설정 화면에서 열립니다.

단계별 안내

  1. /app/keys에서 키를 생성해 복사하세요. 키는 한 번만 표시됩니다.
  2. 환경 변수로 내보내세요: export KUNAVO_API_KEY=sk-kn-...
  3. 공급자 블록을 opencode.json에 추가하세요. 모든 프로젝트에 적용하려면 전역 구성인 ~/.config/opencode/opencode.json을 사용하고, 이 저장소에만 적용하려면 프로젝트 루트의 파일을 사용합니다.
  4. opencode을 시작하고 모델 목록에서 모델을 선택하세요. 공급자는 지정한 name 아래에 표시됩니다.
  5. 나중에 모델을 추가하려면 models 아래에 키를 하나 더 추가하세요. ID는 와이어로 전송되고, name은 라벨로만 사용됩니다.

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

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

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

# 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 입력/출력opencode에서의 위치
claude-sonnet-5$1.40 / $7.00기본 빌드 모델
claude-opus-5$3.50 / $17.50계획이 이후의 모든 작업을 좌우하는 계획 모드
claude-haiku-4-5$0.70 / $3.50요청 수가 많은 서브 에이전트 및 검색 작업
gpt-5-6-sol$2.00 / $12.00추론 항목을 왕복 전달 과정에서 유지하려면 @ai-sdk/openai와 함께 사용
월정액 없이 선불 잔액에서 토큰별로 청구됩니다. billing을 참고하세요. 반복되는 컨텍스트(에디터나 채팅 클라이언트가 보내는 데이터의 대부분)에서는 모델 선택보다 프롬프트 캐싱이 청구액에 더 큰 영향을 줍니다.

자주 묻는 질문

opencode에 사용자 지정 공급자를 추가하려면 어떻게 하나요?

opencode.json의 "provider" 아래에 npm 패키지, 표시 이름, options.baseURL, options.apiKey, models 맵을 지정하는 블록을 추가하세요. /v1/chat/completions를 제공하는 엔드포인트에는 @ai-sdk/openai-compatible을, /v1/responses를 제공하는 엔드포인트에는 @ai-sdk/openai를 사용하세요. 그러면 공급자가 지정한 이름으로 opencode의 모델 목록에 표시됩니다.

opencode.json에 API 키를 노출하지 않으려면 어떻게 하나요?

options.apiKey에서 {env:VAR_NAME} 보간 구문을 사용하세요. 예: "apiKey": "{env:KUNAVO_API_KEY}". 그런 다음 셸에서 변수를 내보내세요. opencode는 구성을 불러올 때 값을 확인하므로, 해당 프로젝트에 포함해 커밋해도 파일의 키는 노출되지 않습니다.

opencode에서 @ai-sdk/openai와 @ai-sdk/openai-compatible은 어떻게 다른가요?

두 패키지는 같은 기본 URL에서 서로 다른 엔드포인트를 선택합니다. @ai-sdk/openai-compatible은 거의 모든 게이트웨이가 구현하는 /chat/completions를 호출하고, @ai-sdk/openai는 최신 OpenAI 인터페이스인 /responses를 호출합니다. 엔드포인트가 실제로 제공하는 패키지를 선택하세요. 잘못된 패키지를 사용하면 기본 URL이 올바르더라도 404 오류가 발생합니다.

opencode에서 예상보다 일찍 컨텍스트가 부족해지는 이유는 무엇인가요?

모델 항목에 limit 블록이 없어 opencode가 실제 모델 한도 대신 기본값으로 예산을 계산하기 때문입니다. 공급자 카탈로그의 수치를 사용해 opencode.json의 해당 모델에 "limit": { "context": <window>, "output": <max output> }을 추가하면 컨텍스트 표시와 압축 시점이 실제 한도에 맞춰집니다.