"왜 OpenCode에서 Claude 모델을 쓰면 자꾸 끊길까?"——이는 OpenCode(현재 Crush로 명칭 변경)를 통해 Claude 모델을 사용하는 많은 개발자가 겪는 가장 큰 고민거리입니다. 핵심 원인은 아주 간단합니다. OpenCode는 Anthropic의 네이티브 SDK를 사용하여 Claude를 호출하는데, 많은 타사 API 중계 서비스는 OpenAI 호환 형식만 지원하기 때문에 형식 불일치로 인한 오류와 연결 끊김이 빈번하게 발생하는 것입니다.
핵심 가치: 이 글을 읽고 나면 OpenCode가 Claude를 호출하는 기본 아키텍처와 3가지 주요 중단 원인, 그리고 APIYI의 Anthropic 네이티브 형식 인터페이스를 통해 이 문제를 완벽하게 해결하는 방법을 이해하게 될 것입니다.

OpenCode란 무엇인가: OpenCode에서 Crush로
OpenCode는 Go 언어 기반의 터미널 AI 코딩 어시스턴트로, Bubble Tea 프레임워크를 사용하여 세련된 TUI(터미널 사용자 인터페이스)를 구축했습니다. 이 프로젝트는 GitHub에서 11,600개 이상의 스타를 받았으며, 이후 Charm 팀에 인수되어 Crush(charmbracelet/crush, 22,200개 이상의 스타)로 명칭이 변경되었습니다.
| 프로젝트 정보 | 상세 내용 |
|---|---|
| 원래 이름 | OpenCode (opencode-ai/opencode) |
| 현재 이름 | Crush (charmbracelet/crush) |
| 개발 언어 | Go |
| 인터페이스 | TUI (Bubble Tea) |
| GitHub Stars | 22,200+ (Crush) |
| 지원 AI 업체 | Anthropic, OpenAI, Gemini, Groq, OpenRouter, xAI, Bedrock, Azure |
| 도구 시스템 | 파일 작업, Bash, Grep, Glob, LSP, MCP |
| 오픈소스 라이선스 | MIT |
OpenCode와 Claude Code, Aider의 핵심 차이점
| 특징 | OpenCode/Crush | Claude Code | Aider |
|---|---|---|---|
| 다중 업체 지원 | 7개 이상 업체 네이티브 SDK | Anthropic 전용 | 다중 업체 |
| API 형식 | 각 업체 네이티브 형식 | Anthropic 네이티브 | 주로 OpenAI 호환 |
| Claude 호출 방식 | Anthropic SDK 네이티브 | Anthropic SDK 네이티브 | OpenAI 호환 형식 |
| 사고 확장 | 조건부 트리거 ("think" 키워드 포함) | 내장 지원 | 모델 의존 |
| MCP 지원 | 지원 | 지원 | 미지원 |
| UI | TUI 그래픽 인터페이스 | CLI + TUI | 순수 CLI |
핵심 차이점: OpenCode는 각 AI 업체에 대해 네이티브 SDK를 사용하며, OpenAI 호환 형식으로 통일하지 않습니다. 즉, Claude를 호출할 때 OpenAI의 Chat Completions API(/v1/chat/completions)가 아닌 Anthropic 네이티브 Messages API(/v1/messages)를 사용합니다.
🎯 핵심 팁: 이것이 문제의 근본 원인입니다. 만약 사용 중인 API 중계 서비스가
/v1/chat/completions인터페이스만 제공한다면, OpenCode의 Anthropic 네이티브 SDK는 이를 올바르게 호출할 수 없습니다. APIYI(apiyi.com)는 OpenAI 호환 형식과 Anthropic 네이티브 형식을 모두 지원하므로 이 문제를 완벽하게 해결할 수 있습니다.
Claude가 OpenCode에서 자주 끊기는 3가지 근본적인 이유

원인 1: API 형식 불일치 (가장 흔함)
사용자들이 겪는 문제의 90%가 여기서 발생합니다.
OpenCode의 Claude 호출 경로:
OpenCode → Anthropic Go SDK → POST /v1/messages
↑ Anthropic 네이티브 형식 사용
많은 API 중계 서비스가 제공하는 인터페이스:
API 중계 서비스 → POST /v1/chat/completions만 지원
↑ OpenAI 호환 형식
두 형식의 요청 구조는 완전히 다릅니다:
| 비교 항목 | Anthropic 네이티브 (/v1/messages) |
OpenAI 호환 (/v1/chat/completions) |
|---|---|---|
| 요청 엔드포인트 | /v1/messages |
/v1/chat/completions |
| 인증 헤더 | x-api-key: sk-ant-xxx |
Authorization: Bearer sk-xxx |
| 메시지 형식 | messages: [{role, content: [{type, text}]}] |
messages: [{role, content: "text"}] |
| 시스템 프롬프트 | system: "..." (최상위 필드) |
messages: [{role: "system", content: "..."}] |
| 도구 호출 | tool_use / tool_result 타입 |
function_call / tool_calls 형식 |
| 스트리밍 응답 | message_start, content_block_delta |
data: {"choices": [...]} |
| 확장 사고 | thinking 블록 네이티브 지원 |
미지원 또는 특수 처리 필요 |
OpenCode가 Anthropic 형식의 요청을 OpenAI 형식만 지원하는 엔드포인트로 보낼 경우, 서버가 요청을 해석하지 못해 오류가 발생하거나 연결이 끊깁니다.
원인 2: 스트리밍 전송 중단
OpenCode는 Anthropic SDK의 Messages.NewStreaming()을 사용하여 스트리밍 응답을 처리합니다. 스트리밍 과정의 이벤트 순서는 다음과 같습니다:
ContentBlockStartEvent → ContentBlockDeltaEvent (반복) → ContentBlockStopEvent → MessageStopEvent
만약 API 중계 서비스가 Anthropic 스트리밍 형식을 완벽하게 지원하지 않는다면(예: thinking_delta 이벤트를 반환하지 않거나 content_block_stop 형식이 올바르지 않은 경우), OpenCode의 이벤트 파싱이 실패하여 연결이 중단됩니다.
OpenCode의 재시도 로직은 HTTP 429(속도 제한)와 529(과부하)만 처리하며, 다른 오류 코드는 즉시 종료되어 재시도하지 않습니다. 즉, 형식 오류로 인한 400/500 응답은 즉시 실패로 이어집니다.
원인 3: 확장 사고 및 도구 호출 형식 차이
OpenCode는 Claude의 확장 사고(Thinking)에 대해 특별한 처리 로직을 가지고 있습니다:
- 사용자 메시지에 "think" 키워드가 포함되면 자동으로 활성화
- 활성화 시
maxTokens의 80%를 사고 예산으로 할당 - 온도를 1.0으로 강제 설정
API 중계 서비스가 Anthropic 네이티브 thinking 블록 형식을 지원하지 않으면, 사고 내용이 유실되거나 파싱 오류가 발생합니다. 마찬가지로 Anthropic 네이티브 tool_use / tool_result 형식도 OpenAI의 function_call / tool_calls와 완전히 다릅니다.
해결 방법: Anthropic 네이티브 형식을 지원하는 API 인터페이스 사용

APIYI 이중 형식 지원 아키텍처
APIYI(apiyi.com)는 두 가지 API 형식을 모두 지원하므로, 개발자는 도구의 요구 사항에 맞춰 선택할 수 있습니다:
| 형식 | 요청 엔드포인트 | 사용 도구 | 기능 완성도 |
|---|---|---|---|
| Anthropic 네이티브 | https://api.apiyi.com/v1/messages |
OpenCode/Crush, Claude Code | 100% 완벽 |
| OpenAI 호환 | https://api.apiyi.com/v1/chat/completions |
Aider, Cursor, 자체 개발 앱 | 기본 기능 완료 |
방법 1: OpenCode에서 Anthropic 네이티브 형식 설정 (권장)
OpenCode의 Anthropic 제공업체 설정에는 Base URL을 직접 입력하는 항목이 없으므로, 환경 변수를 통해 설정해야 합니다:
# Anthropic API 키 설정 (APIYI 키 사용)
export ANTHROPIC_API_KEY="sk-당신의APIYI키"
# Anthropic Base URL 설정 (APIYI 네이티브 인터페이스로 지정)
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
# OpenCode 실행
opencode
또는 .opencode.json 설정 파일에서 설정할 수 있습니다:
{
"providers": {
"anthropic": {
"apiKey": "sk-당신의APIYI키"
}
},
"agents": {
"coder": {
"model": "claude-sonnet-4-6",
"maxTokens": 16000
},
"task": {
"model": "claude-haiku-4-5-20251001",
"maxTokens": 8000
}
}
}
환경 변수와 함께 사용:
# .bashrc 또는 .zshrc에 추가
export ANTHROPIC_API_KEY="sk-당신의APIYI키"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
이렇게 하면 OpenCode가 Anthropic 네이티브 SDK를 통해 https://api.apiyi.com/v1/messages를 호출하며, 프롬프트 캐싱, 확장 사고, 네이티브 도구 호출 등 모든 원본 기능을 유지할 수 있습니다.
방법 2: Local Provider를 통해 OpenAI 호환 형식 사용 (대안)
방법 1이 작동하지 않을 경우, APIYI를 OpenCode의 Local Provider로 설정할 수 있습니다:
# Local 엔드포인트 설정
export LOCAL_ENDPOINT="https://api.apiyi.com/v1"
export LOCAL_API_KEY="sk-당신의APIYI키"
{
"providers": {
"local": {
"apiKey": "sk-당신의APIYI키"
}
},
"agents": {
"coder": {
"model": "claude-sonnet-4-6",
"maxTokens": 16000
}
}
}
주의: 이 방식은 OpenAI 호환 형식(/v1/chat/completions)을 사용하므로 다음 네이티브 기능이 손실됩니다:
- 프롬프트 캐싱 (캐시 적중 불가)
- 네이티브 확장 사고 (Thinking 블록)
- Anthropic 네이티브 도구 호출 형식
💡 제안: 완전한 기능과 최고의 안정성을 위해 방법 1(Anthropic 네이티브 형식)을 우선적으로 사용하세요.
APIYI(apiyi.com) 백엔드에서 키를 생성할 때 [ClaudeCode] 그룹을 선택하면 88% 할인 혜택을 받을 수 있습니다.
APIYI Claude API 호출 완벽 가이드
API 키 획득 및 설정
| 단계 | 작업 | 설명 |
|---|---|---|
| 1. 키 획득 | api.apiyi.com/token 접속 |
백엔드 토큰 관리 페이지 |
| 2. 토큰 선택 | 기본 토큰 사용 또는 신규 생성 | 신규 생성 시【ClaudeCode】그룹 선택 시 12% 할인 |
| 3. Base URL 기록 | https://api.apiyi.com |
통합 접속 주소 |
지원하는 두 가지 요청 형식
형식 1: Anthropic 네이티브 형식 (OpenCode/Claude Code 권장)
요청 주소: https://api.apiyi.com/v1/messages
import anthropic
client = anthropic.Anthropic(
api_key="sk-당신의APIYI키",
base_url="https://api.apiyi.com"
)
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=4096,
messages=[
{"role": "user", "content": "Python으로 퀵 정렬 알고리즘을 작성해줘"}
]
)
print(message.content[0].text)
형식 2: OpenAI 호환 형식 (Aider/Cursor/자체 구축 앱 권장)
요청 주소: https://api.apiyi.com/v1/chat/completions
import openai
client = openai.OpenAI(
api_key="sk-당신의APIYI키",
base_url="https://api.apiyi.com/v1"
)
response = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "user", "content": "Python으로 퀵 정렬 알고리즘을 작성해줘"}
]
)
print(response.choices[0].message.content)
지원하는 Claude 모델 목록
최신 주력 모델 (권장):
| 모델 ID | 시리즈 | 포지션 | 추천 사용 사례 |
|---|---|---|---|
claude-opus-4-6 |
Opus | 최강 추론 | 복잡한 아키텍처 설계, 심층 분석 |
claude-sonnet-4-6 |
Sonnet | 성능 균형 | 일상적인 코딩, 코드 리뷰 |
claude-haiku-4-5-20251001 |
Haiku | 빠른 응답 | 단순 작업, 분류, 데이터 추출 |
추론 모델 (확장 사고 강제 활성화):
| 모델 ID | 설명 |
|---|---|
claude-opus-4-6-thinking |
Opus + 강제 추론 |
claude-sonnet-4-6-thinking |
Sonnet + 강제 추론 |
claude-haiku-4-5-20251001-thinking |
Haiku + 강제 추론 |
추론 모델은 표준 모델과 동일한 기반 모델을 사용합니다. 차이점은 추론 모델이 확장 사고(thinking) 기능을 강제로 활성화하여 더 상세한 추론 과정을 출력한다는 점이며, 심층적인 분석이 필요한 작업에 적합합니다.
Anthropic 네이티브 형식의 확장 사고 호출 코드 보기
import anthropic
client = anthropic.Anthropic(
api_key="sk-당신의APIYI키",
base_url="https://api.apiyi.com"
)
# thinking 모델을 사용하여 확장 사고 강제 활성화
message = client.messages.create(
model="claude-sonnet-4-6-thinking",
max_tokens=16000,
thinking={
"type": "enabled",
"budget_tokens": 10000 # 사고 토큰 예산
},
messages=[
{"role": "user", "content": "이 코드의 시간 복잡도를 분석하고 최적화해줘"}
]
)
for block in message.content:
if block.type == "thinking":
print(f"사고 과정:\n{block.thinking}")
elif block.type == "text":
print(f"최종 답변:\n{block.text}")
🚀 빠른 시작: APIYI
api.apiyi.com/token에 접속하여 키를 발급받으세요.
【ClaudeCode】 그룹을 선택하면 12% 할인 혜택을 받을 수 있습니다.
하나의 키로 Anthropic 네이티브 형식과 OpenAI 호환 형식을 모두 지원하며,
OpenCode, Claude Code, Aider, Cursor 등 모든 주요 AI 코딩 도구와 호환됩니다.
주요 AI 코딩 도구별 최적 연결 방식
| 도구 | 권장 인터페이스 형식 | Base URL | 모델 추천 |
|---|---|---|---|
| OpenCode/Crush | Anthropic 네이티브 | https://api.apiyi.com |
claude-sonnet-4-6 |
| Claude Code | Anthropic 네이티브 | https://api.apiyi.com |
claude-sonnet-4-6 |
| Aider | OpenAI 호환 | https://api.apiyi.com/v1 |
claude-sonnet-4-6 |
| Cursor | OpenAI 호환 | https://api.apiyi.com/v1 |
claude-sonnet-4-6 |
| Cline (VS Code) | OpenAI 호환 | https://api.apiyi.com/v1 |
claude-sonnet-4-6 |
| 자체 구축 앱 (Python) | 둘 다 가능 | 상단 참조 | 필요에 따라 선택 |
도구별 설정 요약
OpenCode/Crush:
export ANTHROPIC_API_KEY="sk-당신의APIYI키"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
Claude Code:
export ANTHROPIC_API_KEY="sk-당신의APIYI키"
export ANTHROPIC_BASE_URL="https://api.apiyi.com"
claude
Aider:
export OPENAI_API_KEY="sk-당신의APIYI키"
export OPENAI_API_BASE="https://api.apiyi.com/v1"
aider --model claude-sonnet-4-6
🎯 통합 관리: APIYI apiyi.com에서 발급받은 키 하나로 모든 AI 코딩 도구의 모델 호출을 관리하세요.
Claude, GPT, Gemini 등 300개 이상의 모델을 통합 결제 및 관리할 수 있습니다.
자주 묻는 질문(FAQ)
Q1: OpenCode에서 “agent coder not found” 오류가 발생하면 어떻게 하나요?
이는 OpenCode에서 가장 흔히 발생하는 오류로, 유효한 AI 제공업체 설정이 없다는 뜻이에요. 다음 사항을 확인해 보세요: 1) ANTHROPIC_API_KEY 환경 변수가 제대로 설정되었는지, 2) .opencode.json 파일 내 providers.anthropic.apiKey 값이 정확한지, 3) API 키에 잔액이 남아 있는지 확인하세요. APIYI(apiyi.com/token)에서 발급받은 키는 별도의 추가 설정 없이 바로 사용할 수 있습니다.
Q2: 왜 Anthropic 네이티브 형식이 OpenAI 호환 형식보다 더 안정적인가요?
OpenCode는 Anthropic 공식 Go SDK를 직접 사용하여 호출하기 때문에, SDK 내부에서 Anthropic 고유의 스트리밍 이벤트 형식, 재시도 로직, 오류 처리를 알아서 관리해 주기 때문이에요. OpenAI 호환 형식을 사용하면 중간 단계에서 변환 과정이 필요한데, 이때 thinking_delta 이벤트나 tool_use 형식 같은 핵심 정보가 누락되어 파싱 오류가 발생할 수 있습니다. APIYI(apiyi.com)의 /v1/messages 엔드포인트는 Anthropic 네이티브 프로토콜을 완벽하게 지원하므로 별도의 형식 변환이 필요 없습니다.
Q3: thinking 모델과 일반 모델은 어떤 차이가 있나요? 언제 사용해야 하나요?
claude-sonnet-4-6과 claude-sonnet-4-6-thinking은 동일한 기반 모델입니다. thinking 버전은 확장된 사고(Thinking) 기능을 강제로 활성화하여 상세한 추론 과정을 출력합니다. 일반 버전은 기본적으로 비활성화되어 있습니다(OpenCode에서는 메시지에 "think" 키워드가 포함되면 자동으로 활성화됩니다). 일상적인 코딩 작업에는 일반 버전을(더 빠르고 토큰 효율적), 복잡한 아키텍처 설계나 디버깅이 필요할 때는 thinking 버전을 사용하는 것을 추천해요.
Q4: OpenCode가 Crush로 이름이 바뀌었는데, 설정 방식도 달라졌나요?
핵심 아키텍처는 그대로이며, Crush는 OpenCode의 모든 코드를 그대로 계승했습니다. 설정 파일 이름이 .opencode.json에서 .crush.json으로 변경될 수 있지만(버전에 따라 다름), 환경 변수는 동일하게 유지됩니다. ANTHROPIC_API_KEY와 ANTHROPIC_BASE_URL 설정 방식도 완전히 같습니다. 더 나은 안정성과 기능을 위해 최신 버전의 Crush를 사용하는 것을 권장합니다.

요약: 올바른 API 형식을 선택하면 Claude는 OpenCode에서 매우 안정적으로 작동합니다
OpenCode/Crush에서 Claude 모델이 자주 중단되는 근본적인 원인은 API 형식 불일치 때문입니다. OpenCode는 Anthropic 네이티브 형식을 사용하지만, 많은 API 중계 서비스는 OpenAI 호환 형식만 지원하기 때문이죠.
해결 방법은 매우 간단합니다:
- Anthropic 네이티브 형식을 지원하는 API 서비스 사용 —— APIYI의
/v1/messages엔드포인트 - 올바른 환경 변수 설정 ——
ANTHROPIC_BASE_URL=https://api.apiyi.com - 적절한 모델 선택 —— 일상적인 작업에는
claude-sonnet-4-6, 심층 추론에는claude-sonnet-4-6-thinking사용
모든 AI 코딩 도구의 모델 호출을 통합 관리하려면 APIYI(apiyi.com)를 추천합니다. api.apiyi.com/token에 접속하여 키를 발급받고, [ClaudeCode] 그룹을 선택하면 12% 할인 혜택을 받을 수 있습니다. 하나의 키로 Anthropic 네이티브 형식과 OpenAI 호환 형식을 모두 지원하여 시중의 모든 주류 AI 코딩 도구와 완벽하게 호환됩니다.
📝 작성자: APIYI 기술팀 | APIYI apiyi.com – 300개 이상의 대규모 언어 모델 API 통합 접속 플랫폼
참고 자료
-
OpenCode GitHub 저장소 (아카이브됨): 원본 프로젝트 코드 및 문서
- 링크:
github.com/opencode-ai/opencode - 설명: Crush로 명칭 변경됨
- 링크:
-
Crush GitHub 저장소: 활발히 개발 중인 후속 프로젝트
- 링크:
github.com/charmbracelet/crush - 설명: Charm 팀이 유지보수하는 최신 버전
- 링크:
-
Anthropic API 문서: Messages API 네이티브 형식 규격
- 링크:
docs.anthropic.com/en/api/messages - 설명:
/v1/messages엔드포인트의 전체 요청 및 응답 형식
- 링크:
-
APIYI 문서: Claude API 접속 가이드
- 링크:
apiyi.com - 설명: Anthropic 네이티브 형식과 OpenAI 호환 형식을 모두 지원
- 링크: