Provider /v1/messages rejects role:"system" inside messages[] — Claude Code ≥ 2.1.154 incompatible
Mantenedores costumam responder em até 2 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 75/100
Direção de pesquisa
Encontre o validador de requisições de /v1/messages e seu modelo para messages[].role; a issue identifica a restrição de papéis como o ponto da falha. Leia primeiro o validador e os testes de requisições e, em seguida, verifique como as mensagens validadas são encaminhadas upstream. O trabalho estará concluído quando uma mensagem com papel system após um turno do usuário passar pela validação e os casos existentes de user e assistant continuarem funcionando.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Provider /v1/messages rejects role:"system" inside messages[] — Claude Code ≥ 2.1.154 incompatible
Summary
The Provider Anthropic Messages endpoint validates messages[].role against only user/assistant and returns:
{"type":"error","error":{"type":"invalid_request_error","message":"Invalid input at messages.1.role"}}
This breaks vanilla Claude Code ≥ 2.1.154, which sends a system-role message inside messages[] (a still-open regression: anthropics/claude-code#63469). Your own command-code CLI sends the legacy shape and works — vanilla Claude Code against api.commandcode.ai/provider does not.
Repro (curl, max_tokens 2 — both uncharged/zero-cost)
Works (control, legacy shape):
curl https://api.commandcode.ai/provider/v1/messages \
-H "Authorization: Bearer $CMD_PROVIDER_API_KEY" \
-H "anthropic-version: 2023-06-01" -H "content-type: application/json" \
-d '{"model":"claude-haiku-5-5","max_tokens":2,"messages":[{"role":"user","content":"hi"}]}'
# → HTTP 200, normal completion
Fails with 400 Invalid input at messages.0.role (system-role message):
curl https://api.commandcode.ai/provider/v1/messages \
-H "Authorization: Bearer $CMD_PROVIDER_API_KEY" \
-H "anthropic-version: 2023-06-01" -H "content-type: application/json" \
-d '{"model":"claude-haiku-5-5","max_tokens":2,"messages":[{"role":"system","content":"You reply tersely."},{"role":"user","content":"hi"}]}'
Verified 2026-10-29: identical 400 on every Claude model in the catalog — claude-opus-5-5, claude-opus-5, claude-sonnet-5-5, claude-sonnet-4-6, claude-fable-5-1, claude-haiku-5-5 (so it's central validation, not per-upstream). The failure fires before upstream routing model-level plan checks fire earlier; the schema gate is the blocker.
Why this is valid per Anthropic's own API
Working with Messages API → System role in messages documents mid-conversation system messages on Opus 5/5.5, Sonnet 5/5.5, Haiku 5.5, Fable/Mythos 5.x, Opus 4.8 — legal after a user turn (only messages[0] is excluded, and Claude Code ≥ 2.1.154 places it after the first user message). First-party api.anthropic.com accepts this since Claude Code 2.1.154 onward.
References
- anthropics/claude-code#63469 — regression thread: Claude Code started sending
messages[].role="system"in 2.1.154; still unfixed upstream (closed stale 2026-08); broke DeepSeek/GLM/Kimi-compatible gateways for 5 months - free-claude-code#611 — a third-party Anthropic-compatible server fixed exactly this by widening its
rolevalidator to include"system"(then merging/forwarding) - Your docs example requests only ever use
usermessages, so the docs and validator are consistent today — but Claude Code (the highest-volume /v1/messages client) is not
Suggested fix
In the /v1/messages request validator, allow "system" alongside user|assistant for messages[].role (≈10 lines in the pydantic model: role: Literal["user","assistant","system"]), then either forward as-is to system-role-aware upstreams (Anthropic's newer API accepts it on the 5.x families) or pre-merge system-role messages into the top-level system param for legacy upstreams. The free-claude-code fix is the minimal version and has been in production for 5 months.
Environment: macOS, Claude Code 2.1.308 (Homebrew cask), Provider plan key. happy to provide more traces (request captured verbatim via local listener: anthropic-beta headers list included).
- Linguagem predominante
- Sem dados de linguagem
- Estrelas
- 4.2k
- Forks
- 372
- Merge médio
- 4d 15h
- PRs com merge (30d)
- 9
Preparar o ambiente
Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de CommandCodeAI/command-code
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
CommandCodeAI/command-code#1088 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
CommandCodeAI/command-code#1082 · 1 comentário · 2 reações ·
Mantenedores costumam responder em até 2 dias
-
Feature request: auto-reconnect remote control (/rc) after restartTalvez já em andamento @aliarain assumiu há 7 dias. Abertap2
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
CommandCodeAI/command-code#992 · 1 comentário · 1 responsável ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
CommandCodeAI/command-code#933 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
CommandCodeAI/command-code#855 ·
Mantenedores costumam responder em até 2 dias
Todas as issues de CommandCodeAI/command-code
Issues semelhantes
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 84/100
wp-graphql/wp-graphql-woocommerce#1026 ·
-
bug integrator
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
grafana/sigma-rule-deployment#431 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
datamodel-code-generator/datamodel-code-generator#5587 ·
Mantenedores costumam responder em até 1 dia
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
Mantenedores costumam responder em até 1 dia
-
Shell: serve the home app's Cookie Policy on a hard reloadTalvez já em andamento @2001anshkaushik assumiu hoje. Abertafeature module:ai
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
rocketride-org/rocketride-server#2899 · 1 comentário ·
Mantenedores costumam responder em até 2 dias