CLI 코딩 도구
새로운Claude Code, Codex CLI 및 기타 에이전트 CLI의 모델로 Shannon을 사용하세요.
코딩 도구가 Shannon과 작동하려면 세 가지 설정이 필요합니다: API의 base URL, API 키, Shannon 모델 id. 이 페이지는 Claude Code와 Codex CLI의 정확한 설정을 알려 주고, 코딩 모델 shannon-coder-1이 어떻게 집계되는지 설명하며, 이 도구들이 만나는 오류를 정리합니다.
도구별 사용 엔드포인트
| 도구 | 엔드포인트 | 설정할 base URL | 참고 |
|---|---|---|---|
| Claude Code | POST /v1/messagesPOST /v1/messages/count_tokens | https://api.shannon-ai.com | 도구가 base URL에 /v1/messages를 직접 붙입니다. |
| Codex CLI | POST /v1/responses | https://api.shannon-ai.com/v1 | 도구가 base URL에 /responses를 붙입니다. |
| OpenAI 채팅 형식을 사용하는 기타 에이전트 도구 | POST /v1/chat/completions | https://api.shannon-ai.com/v1 | 도구 자체 설정에서 base URL, 키, Shannon 모델 id를 설정하세요. |
세 엔드포인트 모두 동일한 API 키를 Authorization: Bearer 또는 x-api-key로 받습니다. 이 도구들이 보내는 anthropic-version, anthropic-beta, openai-beta 헤더도 허용됩니다.
Shannon 모델 선택
모든 요청은 Shannon이 공개한 모델 id를 지정해야 합니다. 코딩 도구는 따로 지정하지 않으면 자체 기본 모델의 이름을 보내며, Shannon이 공개하지 않은 이름에는 400과 메시지 unknown model: <name>으로 응답합니다. 다른 이름이 Shannon 모델로 매핑되지는 않으므로, 첫 요청 전에 도구에서 모델을 설정하세요.
GET /v1/models는 모든 id를 컨텍스트 윈도우와 함께 나열합니다. 키는 필요하지 않습니다. 모델 및 가격
| 모델 | 집계 방식 | 제공하는 것 |
|---|---|---|
shannon-coder-1 | /v1/messages와 /v1/chat/completions에서는 요청당 호출 한 번, /v1/responses에서는 토큰. | 코딩 모델입니다. 텍스트 입력, 도구 호출, 131,072 토큰 컨텍스트 윈도우. |
shannon-1.6-liteshannon-1.6-pro | 잔액에서 차감되는 토큰. | 도구 호출을 지원하는 범용 모델입니다. shannon-1.6-lite는 도구가 보내는 짧은 백그라운드 요청에 적합합니다. |
| 호스팅 오픈 웨이트 모델 | 잔액에서 차감되는 토큰이며, 캐시된 입력은 입력 가격의 25%입니다. | 도구 호출, 긴 세션을 위한 프롬프트 캐싱, /v1/messages/count_tokens의 정확한 토큰 계산. |
코딩 도구는 긴 시스템 프롬프트로 모델을 제어합니다. 시스템 프롬프트는 shannon-coder-1, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro, 호스팅 오픈 웨이트 모델에서 적용되므로, 코딩 도구에는 이 중 하나를 선택하세요.
Claude Code
Claude Code는 환경 변수에서 연결 정보를 읽습니다. 실행하는 셸에서 설정하거나, 모든 세션에 유지하려면 ~/.claude/settings.json의 env 블록에 설정하세요.
# Install Claude Code
npm install -g @anthropic-ai/claude-code
# Where to send requests, and your Shannon API key
export ANTHROPIC_BASE_URL=https://api.shannon-ai.com
export ANTHROPIC_AUTH_TOKEN=YOUR_API_KEY
# Shannon model ids: the session model, and the model behind each built-in name
export ANTHROPIC_MODEL=shannon-coder-1
export ANTHROPIC_DEFAULT_OPUS_MODEL=shannon-coder-1
export ANTHROPIC_DEFAULT_SONNET_MODEL=shannon-coder-1
export ANTHROPIC_DEFAULT_HAIKU_MODEL=shannon-1.6-lite
# The context window of the session model
export CLAUDE_CODE_MAX_CONTEXT_TOKENS=131072
claude {
"env": {
"ANTHROPIC_BASE_URL": "https://api.shannon-ai.com",
"ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY",
"ANTHROPIC_MODEL": "shannon-coder-1",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "shannon-coder-1",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "shannon-coder-1",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "shannon-1.6-lite",
"CLAUDE_CODE_MAX_CONTEXT_TOKENS": "131072"
}
} | 변수 | 설명 |
|---|---|
ANTHROPIC_BASE_URL | Claude Code가 요청을 보내는 곳입니다. /v1 없는 주소를 사용하세요. |
ANTHROPIC_AUTH_TOKEN | Authorization: Bearer로 보내는 Shannon API 키입니다. ANTHROPIC_API_KEY도 사용할 수 있습니다. 이 경우 키를 x-api-key로 보내며, Claude Code가 한 번 승인을 요청합니다. |
ANTHROPIC_MODEL | 세션의 모델입니다. claude --model <id>와 /model <id>도 같은 값을 설정합니다. |
ANTHROPIC_DEFAULT_HAIKU_MODEL | 세션 제목 같은 백그라운드 요청과 haiku를 요청하는 모든 경우에 사용하는 모델입니다. |
ANTHROPIC_DEFAULT_SONNET_MODEL | 서브에이전트나 명령이 sonnet을 요청할 때 사용하는 모델입니다. |
ANTHROPIC_DEFAULT_OPUS_MODEL | 서브에이전트나 명령이 opus를 요청할 때 사용하는 모델입니다. |
CLAUDE_CODE_MAX_CONTEXT_TOKENS | Claude Code가 모델에 대해 가정하는 컨텍스트 윈도우입니다. 선택한 id에 대해 GET /v1/models가 보고하는 context_window를 사용하세요. |
ANTHROPIC_DEFAULT_…_MODEL변수 세 개를 모두 설정하세요. 서브에이전트와 일부 명령은 내장 이름으로 모델을 요청하며, 각 이름은 Shannon id로 연결되어야 합니다.- 샘플은 백그라운드 요청을 토큰으로 집계되는
shannon-1.6-lite로 보냅니다. 그러면 세션 제목 등의 요청이 Coder 호출을 사용하지 않습니다. - Claude Code는 컨텍스트 크기를 알아내기 위해
POST /v1/messages/count_tokens를 호출합니다. 이 엔드포인트는 호스팅 오픈 웨이트 모델에 대해 계산합니다. Shannon id에는400으로 응답하며, Claude Code는 토큰 계산을 선택 사항으로 취급하고 크기를 스스로 추정합니다. 토큰 수 계산
도구를 시작하기 전에 주소, 키, 모델 id를 확인하려면 요청을 직접 하나 보내 보세요:
curl https://api.shannon-ai.com/v1/messages \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-1.6-lite",
"max_tokens": 16,
"messages": [{"role": "user", "content": "Say OK."}]
}' Codex CLI
Codex CLI는 Responses API와 통신합니다. ~/.codex/config.toml에 Shannon을 모델 provider로 기술하고, 그곳에서 Shannon 모델 id를 선택하고, provider가 지정한 환경 변수에 API 키를 넣으세요.
model = "shannon-coder-1"
model_provider = "shannon"
model_context_window = 131072
[model_providers.shannon]
name = "Shannon"
base_url = "https://api.shannon-ai.com/v1"
env_key = "SHANNON_API_KEY"
wire_api = "responses" # Install Codex CLI
npm install -g @openai/codex
# Your Shannon API key, under the name given as env_key
export SHANNON_API_KEY=YOUR_API_KEY
# Start it; --model selects another Shannon id for one run
codex
codex --model shannon-1.6-pro | 키 | 설명 |
|---|---|
model | Shannon 모델 id입니다. codex --model <id>는 한 번의 실행에만 설정합니다. |
model_provider | 사용할 provider 블록의 이름이며, 여기서는 shannon입니다. |
base_url | /v1을 포함한 API 주소입니다. |
env_key | Shannon API 키를 담고 있는 환경 변수의 이름입니다. |
wire_api | responses: Codex가 POST /v1/responses와 통신합니다. |
model_context_window | 모델의 컨텍스트 윈도우이며, Codex가 긴 세션을 제때 압축하게 합니다. GET /v1/models가 보고하는 context_window를 사용하세요. |
/v1/responses는 서버에 대화를 보관하지 않습니다. 각 요청이input에 대화를 담아 보냅니다.previous_response_id는 호환성을 위해 허용됩니다.- 함수 도구(
type: "function")는/v1/responses에서 모델에 제공됩니다. /v1/responses에서shannon-coder-1은 Coder 호출이 아니라 잔액에서 차감되는 토큰으로 집계됩니다.
Responses 엔드포인트에 대한 같은 확인:
curl https://api.shannon-ai.com/v1/responses \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-1.6-lite",
"input": "Say OK."
}' 코딩 모델과 집계 방식
shannon-coder-1은 코딩 에이전트를 위한 Shannon 모델입니다. GET /v1/models는 컨텍스트 윈도우 131,072 토큰, 도구 호출, 추론, 텍스트 입력을 지원하는 모델로 보고합니다. 도구가 사용하는 엔드포인트에 따라 두 가지 방식 중 하나로 집계됩니다.
| 엔드포인트 | 요청당 비용 | 차감 대상 |
|---|---|---|
/v1/messages | 요청당 1회 호출 | 플랜의 Coder 호출 할당량입니다. 잔액에서 토큰이 차감되지 않습니다. |
/v1/chat/completions | 요청당 1회 호출 | 플랜의 Coder 호출 할당량입니다. 잔액에서 토큰이 차감되지 않습니다. |
/v1/responses | 토큰, 1M당 $8.00 | 다른 모델과 마찬가지로 잔액에서 차감됩니다. 호출 할당량은 사용되지 않습니다. |
호출은 크기에 상관없이 요청 하나입니다. 모델이 응답하기 전, 요청이 수락될 때 집계됩니다. 에이전트 세션은 단계마다 요청을 하나씩 보내므로 긴 작업은 많은 호출을 사용합니다. 할당량은 플랜에 따라 다르며 4시간마다 00:00, 04:00, 08:00, 12:00, 16:00, 20:00 UTC에 다시 시작됩니다.
| 플랜 | 4시간 구간당 호출 횟수 |
|---|---|
| Free | 3 |
| Plus | 20 |
| Standard | 40 |
| Pro | 60 |
현재 수치는 플랜 페이지에서 확인할 수 있습니다. 플랜
한 구간의 호출 횟수를 모두 사용하면 요청에 429로 응답합니다. /v1/messages에서는 같은 오류가 Anthropic 형식으로 전달됩니다.
{
"error": {
"type": "rate_limit_error",
"message": "Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan"
}
} {
"type": "error",
"error": {
"type": "rate_limit_error",
"message": "Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan"
}
} 컨텍스트 초과
대화가 모델의 컨텍스트 윈도우보다 크면 /v1/chat/completions와 /v1/messages는 400, 유형 invalid_request_error, 코드 context_length_exceeded, 그리고 prompt is too long으로 시작하는 메시지로 응답합니다. 코딩 도구는 이 오류를 읽고 세션을 압축한 뒤 요청을 다시 보냅니다. shannon-coder-1, shannon-1.6-lite, shannon-1.6-pro에서 발생합니다.
{
"error": {
"type": "invalid_request_error",
"code": "context_length_exceeded",
"message": "prompt is too long: 140211 tokens > 131072 maximum",
"param": null
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"code": "context_length_exceeded",
"message": "prompt is too long: 140211 tokens > 131072 maximum",
"param": null
}
} 메시지는 prompt is too long: <sent> tokens > <limit> maximum입니다. 두 숫자를 알 수 없을 때는 prompt is too long. Please compact the conversation and try again.입니다.
스트림에서는 상태가 이미 200이므로 오류가 이벤트로 도착하고, 이후 스트림은 정상적으로 닫힙니다:
data: {"error":{"message":"prompt is too long: 140211 tokens > 131072 maximum","type":"invalid_request_error","code":"context_length_exceeded","param":null}}
data: {"id":"chatcmpl-…","object":"chat.completion.chunk","created":…,"model":"shannon-coder-1","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{…}}
data: [DONE] event: error
data: {"type":"error","error":{"type":"invalid_request_error","message":"prompt is too long: 140211 tokens > 131072 maximum"}}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{…}}
event: message_stop
data: {"type":"message_stop"} 에이전트 루프가 의존할 수 있는 것
| 주제 | 동작 |
|---|---|
| 도구 스키마 | 도구 정의는 도구가 보낸 그대로 받아들입니다. shannon-coder-1과 shannon-1.6-*에서는 $schema, $ref, additionalProperties, default, title처럼 모델이 사용하지 않는 JSON Schema 키워드는 모델이 읽는 내용에서 제외되고, oneOf는 anyOf로 읽힙니다. 이 때문에 거부되는 요청은 없습니다. |
| 도구 호출 인자 | 스트림에서 도구 호출의 인자는 하나의 델타로 완전하게 도착합니다: tool_calls[].function.arguments, input_json_delta.partial_json 또는 response.function_call_arguments.delta. |
| 도구 턴의 끝 | Chat Completions에서는 finish_reason: "tool_calls", Messages에서는 stop_reason: "tool_use"로 표시됩니다. |
| Keep-alive | 모델이 작업하는 동안 /v1/messages는 event: ping을, /v1/chat/completions는 : ping 주석 줄을 15초마다 보냅니다. |
| 요청 중단 | 연결을 닫으면 스트림이 중단됩니다. 턴 자체는 끝까지 실행되고 집계됩니다. |
문제 해결
| 증상 | 원인 | 해결 방법 |
|---|---|---|
unknown model: claude-… 또는 unknown model: gpt-…와 함께 400 | 도구가 자체 기본 모델 이름을 보냈습니다. 공개된 Shannon id만 제공되며, 다른 이름은 매핑되지 않습니다. | Shannon id를 선택하세요. Claude Code에서는 ANTHROPIC_MODEL과 ANTHROPIC_DEFAULT_…_MODEL 변수 세 개, Codex 설정에서는 model입니다. |
Codex CLI에서 이름 없이 unknown model: 와 함께 400 | 요청에 모델이 지정되지 않았습니다. /v1/responses에는 모델이 필요합니다. | ~/.codex/config.toml에 model을 설정하거나 --model을 전달하세요. |
Missing authentication 또는 Invalid API key와 함께 401 | 키가 API에 전달되지 않았거나 현재 키가 아닙니다. Shannon 키는 sk-로 시작합니다. | 도구를 시작하는 셸에 변수가 설정되어 있는지 확인하세요. Keys & usage에서 키를 다시 복사하세요. |
모든 요청에서 404 | base URL에 도구에 맞지 않는 /v1이 하나 더 있거나 빠져 있습니다. | Claude Code: /v1 없는 주소. Codex CLI: /v1이 있는 주소. |
Shannon Coder call quota reached와 함께 429 | 현재 4시간 구간의 Coder 호출 횟수를 모두 사용했습니다. | 다음 구간을 기다리거나, 호출 횟수가 더 많은 플랜으로 옮기거나, 토큰으로 집계되는 모델을 선택하세요. |
Quota exceeded와 함께 429 | 잔액이 요청을 감당하지 못합니다. | 크레딧을 추가하거나, 00:00 UTC에 지급되는 플랜의 일일 할당량을 기다리세요. |
prompt is too long과 함께 400 | 대화가 모델의 컨텍스트 윈도우보다 큽니다. | 세션을 압축하세요(두 도구 모두 /compact). 도구가 더 일찍 압축하도록 모델의 컨텍스트 윈도우를 알려 주세요. |
| Claude Code가 대략적인 컨텍스트 수치를 표시함 | /v1/messages/count_tokens는 호스팅 오픈 웨이트 모델에 대해 계산합니다. Shannon id에는 400으로 응답하며, Claude Code가 크기를 스스로 추정합니다. | 고칠 것이 없습니다. 정확한 토큰 수가 필요하면 호스팅 오픈 웨이트 모델을 선택하세요. |
| 붙여넣은 스크린샷이 반영되지 않음 | shannon-coder-1은 텍스트 입력을 받습니다. | 해당 세션에는 이미지를 받는 모델을 선택하세요. |
키와 잔액은 Keys & usage 페이지에서 확인할 수 있습니다. Keys & usage