Herramientas CLI de programación
NuevoUsa Shannon como el modelo detrás de Claude Code, Codex CLI y otras CLI de agentes.
Una herramienta de programación necesita tres ajustes para funcionar con Shannon: la URL base de la API, tu clave API y un id de modelo de Shannon. Esta página da los ajustes exactos para Claude Code y Codex CLI, explica cómo se cuenta el modelo de programación shannon-coder-1 y lista los errores con los que se encuentran estas herramientas.
Qué endpoint usa cada herramienta
| Herramienta | Endpoint | URL base que configurar | Nota |
|---|---|---|---|
| Claude Code | POST /v1/messagesPOST /v1/messages/count_tokens | https://api.shannon-ai.com | La herramienta añade /v1/messages a la URL base por sí misma. |
| Codex CLI | POST /v1/responses | https://api.shannon-ai.com/v1 | La herramienta añade /responses a la URL base. |
| Otras herramientas de agentes que hablan el formato de chat de OpenAI | POST /v1/chat/completions | https://api.shannon-ai.com/v1 | Configura la URL base, la clave y un id de modelo de Shannon en los ajustes propios de la herramienta. |
Los tres endpoints aceptan la misma clave API, como Authorization: Bearer o como x-api-key. Se aceptan los headers anthropic-version, anthropic-beta y openai-beta que envían estas herramientas.
Seleccionar un modelo de Shannon
Cada solicitud debe indicar un id de modelo que Shannon publique. Una herramienta de programación envía el nombre de su propio modelo predeterminado salvo que le indiques otra cosa, y un nombre que Shannon no publica se responde con 400 y el mensaje unknown model: <name>. Ningún otro nombre se asigna a un modelo de Shannon, así que configura el modelo en la herramienta antes de la primera solicitud.
GET /v1/models lista cada id con su ventana de contexto. No necesita clave. Modelos y precios
| Modelo | Se cuenta como | Qué aporta |
|---|---|---|
shannon-coder-1 | Una llamada por solicitud en /v1/messages y /v1/chat/completions. Tokens en /v1/responses. | El modelo de programación. Entrada de texto, llamadas a herramientas, ventana de contexto de 131,072 tokens. |
shannon-1.6-liteshannon-1.6-pro | Tokens de tu saldo. | Modelos generales con llamadas a herramientas. shannon-1.6-lite es adecuado para las solicitudes cortas en segundo plano que hace una herramienta. |
| Modelos de pesos abiertos alojados | Tokens de tu saldo, con la entrada en caché al 25% del precio de entrada. | Llamadas a herramientas, prompt caching para sesiones largas y conteos exactos de /v1/messages/count_tokens. |
Las herramientas de programación guían al modelo con un system prompt largo. El system prompt lo aplican shannon-coder-1, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro y los modelos de pesos abiertos alojados, así que selecciona uno de ellos para una herramienta de programación.
Claude Code
Claude Code lee su conexión de variables de entorno. Establécelas en el shell que lo inicia, o en el bloque env de ~/.claude/settings.json para conservarlas en cada sesión.
# 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"
}
} | Variable | Descripción |
|---|---|
ANTHROPIC_BASE_URL | A dónde envía Claude Code sus solicitudes. Usa la dirección sin /v1. |
ANTHROPIC_AUTH_TOKEN | Tu clave API de Shannon, enviada como Authorization: Bearer. ANTHROPIC_API_KEY también funciona: envía la clave como x-api-key, y Claude Code pide una vez que la apruebes. |
ANTHROPIC_MODEL | El modelo de la sesión. claude --model <id> y /model <id> establecen lo mismo. |
ANTHROPIC_DEFAULT_HAIKU_MODEL | El modelo para solicitudes en segundo plano, como los títulos de sesión, y para cualquier cosa que pida haiku. |
ANTHROPIC_DEFAULT_SONNET_MODEL | El modelo que se usa cuando un subagente o un comando pide sonnet. |
ANTHROPIC_DEFAULT_OPUS_MODEL | El modelo que se usa cuando un subagente o un comando pide opus. |
CLAUDE_CODE_MAX_CONTEXT_TOKENS | La ventana de contexto que Claude Code asume para el modelo. Usa el context_window que GET /v1/models informa para el id que seleccionaste. |
- Establece las tres variables
ANTHROPIC_DEFAULT_…_MODEL. Los subagentes y algunos comandos piden un modelo por su nombre integrado, y cada nombre debe resolverse a un id de Shannon. - El ejemplo apunta las solicitudes en segundo plano a
shannon-1.6-lite, que se cuenta en tokens. Así los títulos de sesión y solicitudes similares no consumen llamadas de Coder. - Claude Code pide a
POST /v1/messages/count_tokensel tamaño del contexto. El endpoint cuenta para los modelos de pesos abiertos alojados. Con un id de Shannon responde400; Claude Code trata el conteo de tokens como opcional y estima el tamaño por sí mismo. Conteo de tokens
Para comprobar la dirección, la clave y un id de modelo antes de iniciar la herramienta, envía una solicitud a mano:
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 se comunica con la API Responses. Describe Shannon como proveedor de modelos en ~/.codex/config.toml, selecciona allí un id de modelo de Shannon y pon tu clave API en la variable de entorno que nombra el proveedor.
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 | Clave | Descripción |
|---|---|
model | El id de modelo de Shannon. codex --model <id> lo establece para una ejecución. |
model_provider | El nombre del bloque de proveedor que se debe usar, aquí shannon. |
base_url | La dirección de la API con /v1. |
env_key | El nombre de la variable de entorno que contiene tu clave API de Shannon. |
wire_api | responses: Codex se comunica con POST /v1/responses. |
model_context_window | La ventana de contexto del modelo, para que Codex compacte a tiempo una sesión larga. Usa el context_window que informa GET /v1/models. |
/v1/responsesno guarda ninguna conversación en el servidor: cada solicitud lleva la conversación eninput.previous_response_idse acepta por compatibilidad.- Las herramientas de función (
type: "function") se ofrecen al modelo en/v1/responses. - En
/v1/responses,shannon-coder-1se cuenta en tokens de tu saldo, no en llamadas de Coder.
La misma comprobación para el endpoint 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."
}' El modelo de programación y cómo se cuenta
shannon-coder-1 es el modelo de Shannon para agentes de programación. GET /v1/models lo informa con una ventana de contexto de 131,072 tokens, llamadas a herramientas, razonamiento y entrada de texto. Se cuenta de una de dos maneras, según el endpoint que use una herramienta.
| Endpoint | Una solicitud cuesta | Se toma de |
|---|---|---|
/v1/messages | 1 llamada por solicitud | La cuota de llamadas de Coder de tu plan. No se toman tokens de tu saldo. |
/v1/chat/completions | 1 llamada por solicitud | La cuota de llamadas de Coder de tu plan. No se toman tokens de tu saldo. |
/v1/responses | Tokens, a $8.00 por 1M | Tu saldo, como cualquier otro modelo. No se usa la cuota de llamadas. |
Una llamada es una solicitud, sea cual sea su tamaño. Se cuenta cuando se acepta la solicitud, antes de que el modelo responda. Una sesión de agente envía una solicitud por cada paso que da, así que una tarea larga consume muchas llamadas. La cuota depende de tu plan y se reinicia cada 4 horas, a las 00:00, 04:00, 08:00, 12:00, 16:00 y 20:00 UTC.
| Plan | Llamadas por ventana de 4 horas |
|---|---|
| Free | 3 |
| Plus | 20 |
| Standard | 40 |
| Pro | 60 |
La página de planes muestra las cifras actuales. Planes
Cuando se agotan las llamadas de una ventana, la solicitud se responde con 429. En /v1/messages el mismo error llega con la forma de 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"
}
} Desbordamiento de contexto
Cuando una conversación es mayor que la ventana de contexto del modelo, /v1/chat/completions y /v1/messages responden con 400, el tipo invalid_request_error, el código context_length_exceeded y un mensaje que empieza por prompt is too long. Las herramientas de programación leen este error para compactar la sesión y enviar la solicitud de nuevo. Lo producen shannon-coder-1, shannon-1.6-lite y 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
}
} El mensaje es prompt is too long: <sent> tokens > <limit> maximum. Cuando no se conocen los dos números es prompt is too long. Please compact the conversation and try again.
En un stream el estado ya es 200, así que el error llega como un evento y después el stream se cierra de forma normal:
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"} En qué puede confiar un bucle de agente
| Tema | Comportamiento |
|---|---|
| Esquemas de herramientas | Las definiciones de herramientas se toman tal como las envía la herramienta. En shannon-coder-1 y shannon-1.6-*, las palabras clave de JSON Schema que el modelo no usa, como $schema, $ref, additionalProperties, default y title, se omiten de lo que lee el modelo, y oneOf se lee como anyOf. Ninguna solicitud se rechaza por ellas. |
| Argumentos de la llamada a herramienta | En un stream, los argumentos de una llamada a herramienta llegan completos en un solo delta: tool_calls[].function.arguments, input_json_delta.partial_json o response.function_call_arguments.delta. |
| Fin de un turno de herramienta | finish_reason: "tool_calls" en Chat Completions, stop_reason: "tool_use" en Messages. |
| Keep-alive | Mientras el modelo trabaja, /v1/messages envía event: ping y /v1/chat/completions envía una línea de comentario : ping cada 15 segundos. |
| Detener una solicitud | Cerrar la conexión detiene el stream. El turno en sí se ejecuta hasta el final y se cuenta. |
Solución de problemas
| Síntoma | Causa | Solución |
|---|---|---|
400 con unknown model: claude-… o unknown model: gpt-… | La herramienta envió el nombre de su propio modelo predeterminado. Solo se atienden los ids publicados de Shannon, y ningún otro nombre se asigna a uno. | Selecciona un id de Shannon: ANTHROPIC_MODEL y las tres variables ANTHROPIC_DEFAULT_…_MODEL en Claude Code, model en la configuración de Codex. |
400 con unknown model: y sin nombre, desde Codex CLI | La solicitud no indicó ningún modelo. /v1/responses necesita uno. | Define model en ~/.codex/config.toml o pasa --model. |
401 con Missing authentication o Invalid API key | La clave no llegó a la API, o no es una clave vigente. Una clave de Shannon empieza por sk-. | Comprueba que la variable esté definida en el shell que inicia la herramienta. Vuelve a copiar la clave desde Claves y uso. |
404 en cada solicitud | La URL base tiene un /v1 de más o de menos para la herramienta. | Claude Code: la dirección sin /v1. Codex CLI: la dirección con /v1. |
429 con Shannon Coder call quota reached | Se agotaron las llamadas de Coder de la ventana actual de 4 horas. | Espera a la siguiente ventana, pasa a un plan con más llamadas o selecciona un modelo que se cuente en tokens. |
429 con Quota exceeded | Tu saldo no cubre la solicitud. | Añade crédito, o espera a la cuota diaria de tu plan a las 00:00 UTC. |
400 con prompt is too long | La conversación es mayor que la ventana de contexto del modelo. | Compacta la sesión (/compact en ambas herramientas). Indica a la herramienta la ventana de contexto del modelo para que compacte antes. |
| Claude Code muestra cifras de contexto aproximadas | /v1/messages/count_tokens cuenta para los modelos de pesos abiertos alojados. Con un id de Shannon responde 400, y Claude Code estima el tamaño por sí mismo. | No hay nada que corregir. Selecciona un modelo de pesos abiertos alojado si quieres conteos exactos. |
| Una captura de pantalla pegada no se tiene en cuenta | shannon-coder-1 acepta entrada de texto. | Selecciona para esa sesión un modelo que acepte imágenes. |
Tu clave y tu saldo están en la página Claves y uso. Claves y uso