No PicoClaw, "model not found" e um 404 são quatro falhas diferentes, e somente uma delas acontece fora da sua máquina. Três são locais — um alias que não é resolvido, o backend web próprio do PicoClaw respondendo 404 e uma string de protocolo desconhecida — e a quarta é um 404 upstream cujo corpo informa se a rota ou o id do modelo estava errado. Ler primeiro o texto do erro é o que impede trocar protocolos para corrigir um erro de digitação.
Esta página pressupõe que você já tem uma entrada model_list funcional e uma chave; a configuração em si e o custo do PicoClaw são abordados em preços e configuração da API do PicoClaw. Tudo abaixo foi lido na tag lançada v0.3.1, que a API de lançamentos confirmou como a mais recente em 21 de setembro de 2026, publicada em 3 de julho de 2026. O repositório recebeu o último push em 17 de setembro de 2026, portanto main está à frente da tag — quando isso importa, é indicado. Em 1º de outubro de 2026, v0.3.1 ainda era o lançamento mais recente, e seu binário de lançamento foi executado contra um endpoint local de gravação e, com uma chave deliberadamente inválida, contra a Kunavo; o que isso mostrou está registrado abaixo.
Quatro falhas, uma frase
| Camada | O que você vê | Onde a string aparece | O que não é |
|---|---|---|---|
| Resolução da configuração, antes de qualquer solicitação | model "X" not found in model_list or providers, model "X" not found in model_list (seus chamadores acrescentam o prefixo error creating provider:), ou cannot found model 'X' in config | pkg/config/config.go, pkg/providers/legacy_provider.go, cmd/picoclaw/internal/model/command.go | Não é um status HTTP. Não é um problema de chave, saldo ou disponibilidade |
| Backend da própria interface web do PicoClaw | HTTP 404, corpo Model "X" not found in model_list | web/backend/api/models.go, o handler de definição do modelo padrão | Não vem de nenhuma API de modelos — este 404 vem do localhost |
| Resolução do protocolo | unknown protocol "X" in model "Y" | O braço default da troca de protocolos em pkg/providers/factory_provider.go | Não é um 404. Só é alcançado quando provider é definido explicitamente como algo fora do catálogo |
| Resposta upstream | O próprio corpo 404 do provedor, envolvido pelo PicoClaw | anthropic_messages/provider.go ou pkg/providers/common/common.go | O único dos quatro que diz respeito ao endpoint |
Saber se a solicitação saiu da sua máquina é, portanto, a primeira coisa a estabelecer, e a própria string resolve isso. Uma incompatibilidade de alias é um caso registrado, não uma hipótese: o issue #958 do PicoClaw relata error creating provider: model "llama3.2" not found in model_list enquanto picoclaw status mostrava o endpoint do Ollama acessível e o modelo presente como llama3.2:latest. Ele foi encerrado em 25 de março de 2026 pelo bot de issues obsoletos do repositório. Observe que, neste repositório, um issue encerrado marcado como completed não significa corrigido — o mesmo bot encerrou #1624 com a mesma redação.
O texto envolvente nomeia o protocolo que realmente foi executado
Como anthropic com uma chave de API e anthropic-messages criam provedores diferentes, seus envoltórios de 404 diferem — o que torna a string de erro um diagnóstico gratuito.
| Envoltório exibido | Provedor que o produziu | O que informa sobre o URL |
|---|---|---|
endpoint not found (404): <body> | O provedor Messages nativo | A solicitação foi para <base>/v1/messages com X-API-Key |
API request failed: depois Status: e Body: linhas | O provedor compatível com OpenAI — que também é usado por anthropic com uma chave de API | A solicitação foi para um URL que termina em /chat/completions com Authorization: Bearer |
O mesmo, mais returned HTML instead of JSON (content-type: ...); check api_base or proxy configuration. | O provedor compatível com OpenAI | Você chegou a um servidor web ou a uma página de erro de proxy, não a uma API. Somente os primeiros 256 bytes são lidos e a prévia é truncada para 128 caracteres |
Por que a própria orientação de 404 do PicoClaw pode levar você ao caminho errado
O guia de provedores do PicoClaw orienta você a mudar para anthropic-messages quando "The existing anthropic protocol returns 404 errors (indicating the endpoint doesn't support OpenAI-compatible format)", e acrescenta a observação que resolve a nomenclatura: "The anthropic protocol uses OpenAI-compatible format (/v1/chat/completions), while anthropic-messages uses Anthropic's native format (/v1/messages)." As duas citações foram relidas na v0.3.1 em 21 de setembro de 2026.
Essa orientação está correta para um 404 de rota e errada para um 404 de modelo. Ela também aparece 294 linhas abaixo de uma tabela no mesmo arquivo, cuja coluna Protocol contém Anthropic para a linha anthropic, dizendo o oposto. O código resolve a contradição de uma maneira pouco evidente: anthropic são dois protocolos dependendo de auth_method. Com oauth ou token, ele cria o provedor SDK nativo da Anthropic e a tabela está correta; com uma chave de API, ele recai no mesmo provedor compatível com OpenAI usado por openai e toda a sua família, e a observação está correta.
provider e autenticação | URL final da solicitação | Cabeçalho de autenticação | Tratamento de /v1 |
|---|---|---|---|
openai e a família compatível com OpenAI | <api_base>/chat/completions | Authorization: Bearer | api_base literalmente, com a barra final removida — você fornece /v1 por conta própria |
anthropic com uma chave de API | <base>/v1/chat/completions | Authorization: Bearer | Forçado: a barra final é removida, um /v1 final é retirado e depois /v1 é acrescentado novamente |
anthropic-messages | <base>/v1/messages | X-API-Key mais Anthropic-Version: 2023-06-01, codificado permanentemente | O mesmo /v1 forçado |
anthropic com auth_method oauth ou token | Tratado pelo provedor SDK nativo | Credenciais do armazenamento de autenticação | A fábrica não aplica normalização de URL base neste ramo |
Duas consequências seguem diretamente. Na família openai, escrever https://api.kunavo.com em vez de https://api.kunavo.com/v1 monta https://api.kunavo.com/chat/completions — um 404 de rota causado pela sua própria configuração, e o mais comum. Nos dois protocolos Anthropic, esse erro é impossível, porque o /v1 é forçado de qualquer maneira; mas essa mesma imposição significa que um gateway cujo caminho não pode terminar em /v1 não pode ser expresso por eles de forma alguma e precisa usar o protocolo openai. A própria documentação do PicoClaw usa essa alternativa para um fornecedor cujo base termina em um segmento de versão diferente.
Uma afirmação a tratar como não resolvida. O único comentário no issue #269 do PicoClaw afirma que enviar para /v1/chat/completions retorna 404 na Anthropic porque o endpoint correto é /v1/messages. A própria documentação da Anthropic contradiz isso: ela publica uma camada de compatibilidade com o SDK da OpenAI com base_url https://api.anthropic.com/v1/ e marca o cabeçalho authorization como "Fully supported" (verificado em 21 de setembro de 2026), embora alerte na mesma página que a camada "is not considered a long-term or production-ready solution for most use cases". O issue #269 foi encerrado em 13 de março de 2026 sem comentário de encerramento — a API de issues mostra um comentário nele, a análise acima, de uma conta sem associação ao repositório — portanto não se sabe o que realmente o resolveu. Confie no próprio corpo do seu 404, não em nenhuma das duas contas.
Quando o 404 é o id do modelo
O issue #1624 do PicoClaw — aberto em 16 de março de 2026 e encerrado em 31 de março de 2026 — registra o corpo exato para um id Claude com pontos configurado como "model": "anthropic/claude-sonnet-4.6": Status: 404 com {"error":{"code":"not_found_error","message":"model: claude-sonnet-4.6 was not found. Did you mean claude-sonnet-4-6?"…. O título e o único comentário foram relidos na API de issues em 21 de setembro de 2026: o comentário é do bot de issues obsoletos, portanto o issue está encerrado, mas não há evidência de uma correção.
Uma sugestão "did you mean" é o sinal decisivo. Ela só retorna de um endpoint que interpretou a solicitação, portanto a rota funcionou e nenhuma alteração de protocolo ajudará. O motivo pelo qual o PicoClaw não corrige a grafia por você é específico e verificável: strings.ReplaceAll(model, ".", "-") ocorre uma vez no repositório, em pkg/providers/anthropic/provider.go linha 219 — o provedor SDK usado nos caminhos OAuth e token. Nem anthropic_messages/provider.go nem openai_compat/provider.go a contém. As duas afirmações foram verificadas novamente na v0.3.1 em 21 de setembro de 2026, e a pesquisa que precedeu esta página buscou novamente os mesmos arquivos em main no mesmo dia, com o mesmo resultado. A execução do binário v0.3.1 em 1º de outubro de 2026 confirmou isso nos dois caminhos de chave de API: o id com pontos chegou ao endpoint exatamente como escrito e voltou como o próprio 404 do endpoint (consulte o que a execução da v0.3.1 mostrou). O caminho OAuth e token, o único com a reescrita, não foi executado.
Os próprios arquivos do PicoClaw também divergem sobre a grafia: provider_metadata.go lista ids com hífens para as duas entradas Anthropic, o exemplo de anthropic no guia de provedores usa um id com pontos, e anthropic-messages retorna um padrão com pontos de GetDefaultModel — a mesma grafia que o #1624 mostra sendo rejeitada. Todos os ids de API Claude impressos na visão geral de modelos da Anthropic usam hífens, e essa página lista Claude Sonnet 4.6 e Claude Opus 4.6 em "Legacy models (still available)" — portanto aposentadoria não é o motivo pelo qual um id 4.6 estaria recebendo 404 na Anthropic atualmente. Isso elimina uma causa, não todas: um id com hífens ainda pode ser rejeitado por um gateway que não disponha do modelo. Copie o id do endpoint que você está chamando, não de um README.
Escreva explicitamente as duas entradas e mantenha o id com hífens. As chaves não pertencem a este arquivo — o PicoClaw as lê de ~/.picoclaw/.security.yml, abordado no guia de configuração.
{
"agents": {
"defaults": {
"model_name": "kunavo-sonnet"
}
},
"model_list": [
{
"model_name": "kunavo-sonnet",
"provider": "openai",
"model": "claude-sonnet-4-6",
"api_base": "https://api.kunavo.com/v1"
},
{
"model_name": "kunavo-sonnet-native",
"provider": "anthropic-messages",
"model": "claude-sonnet-4-6",
"api_base": "https://api.kunavo.com"
}
]
}A primeira entrada fornece /v1 por conta própria porque a família compatível com OpenAI concatena /chat/completions a api_base literalmente. A segunda o omite deliberadamente, para mostrar que em anthropic-messages as duas grafias são normalizadas para a mesma base. O URL base publicado pela Kunavo é https://api.kunavo.com/v1 para compleções de chat e https://api.kunavo.com/v1/messages para a rota Messages. O fato de os dois conjuntos de aritmética de URL coincidirem é uma aritmética baseada em dois conjuntos de documentação — e, em 1º de outubro de 2026, ambas as entradas foram executadas da v0.3.1 contra a Kunavo com uma chave deliberadamente inválida: a entrada openai chegou a /v1/chat/completions e a entrada anthropic-messages chegou a /v1/messages, e cada uma recebeu o 401 da Kunavo. Isso prova os URLs, não uma solicitação concluída: nada nesta página afirma uma integração testada. Para a forma geral da questão sobre URL base, consulte o documento sobre URL base da Anthropic.
Um gateway também pode responder 404 de propósito, e isso não é um bug do PicoClaw. A Kunavo retorna 404 para um modelo temporariamente pausado, com um corpo que nomeia o modelo e a substituição a ser usada, e omite modelos pausados de /v1/models; corresponda ao formato dessa mensagem, não a um nome específico, porque quais modelos estão pausados muda. A Kunavo também não oferece nenhum modelo de embeddings, texto para fala ou fala para texto, portanto uma entrada model_list que nomeie um deles resultará em 404 independentemente do protocolo escolhido — aponte essas entradas para outro provedor e mantenha apenas entradas de chat em uma chave da Kunavo.
O que a execução da v0.3.1 mostrou
Em 1º de outubro de 2026, o binário da versão v0.3.1, com checksum verificado em relação ao próprio arquivo de checksums da versão, foi executado em um contêiner descartável com uma entrada model_list por vez e picoclaw agent -m. O endpoint era um servidor de gravação local que se comportava como o roteamento da Kunavo na época — /v1/* é a API, qualquer outro caminho retornava uma página HTML 404 (a Kunavo agora responde a esses caminhos com um 404 JSON que indica a correção; consulte as linhas da Kunavo) — e conhecia claude-sonnet-5 e claude-sonnet-4-6, mas não o id com ponto; as três últimas linhas usaram o api.kunavo.com real com uma chave deliberadamente inválida, portanto nada foi cobrado.
| Entrada | O que o PicoClaw enviou | O que o PicoClaw exibiu |
|---|---|---|
openai, api_base terminando em /v1 | POST /v1/chat/completions, Authorization: Bearer | A resposta |
openai, api_base sem /v1 | POST /chat/completions — literalmente, sem nada adicionado | Falha na solicitação da API: … retornou HTML em vez de JSON (content-type: text/html; charset=utf-8); verifique a configuração de api_base ou do proxy. e depois Status: 404 |
anthropic com uma chave de API, com ou sem /v1 | POST /v1/chat/completions, Authorization: Bearer — o /v1 forçou ambos os caminhos | A resposta |
anthropic-messages, com ou sem /v1 | POST /v1/messages, X-API-Key, Anthropic-Version: 2023-06-01 | A resposta |
anthropic-messages, modelo claude-sonnet-4.6 | O id exatamente como escrito, incluindo o ponto | endpoint não encontrado (404): seguido pelo corpo do endpoint indicando o modelo |
openai, modelo claude-sonnet-4.6 | O id exatamente como escrito | Falha na solicitação da API: depois Status: 404 e o corpo indicando o modelo |
| Alias padrão sem entrada correspondente | Nada — nenhuma solicitação | erro ao criar o provedor: modelo "…" não encontrado em model_list: modelo "…" não encontrado em model_list ou nos provedores |
Kunavo, openai, base https://api.kunavo.com | POST /chat/completions, fora de /v1 | Mais cedo naquele dia: a mesma mensagem retornou HTML em vez de JSON, Status: 404. Reexecução após a alteração da Kunavo no mesmo dia: Falha na solicitação da API:, Status: 404 e um corpo JSON começando com "Not found: /chat/completions. Kunavo's API lives under /v1 — set the base URL to https://api.kunavo.com/v1" |
Kunavo, openai, base https://api.kunavo.com/v1, chave inválida | POST /v1/chat/completions | Falha na solicitação da API:, Status: 401, corpo da Kunavo Missing or invalid API key |
Kunavo, anthropic-messages, chave inválida | POST /v1/messages | falha na autenticação (401): verifique sua chave de API |
Duas coisas que esta execução confirma, mas que a leitura do código-fonte só poderia prever. O wrapper de erro realmente identifica o provedor que foi executado, portanto é seguro deduzir o protocolo a partir dele; e um id com ponto é enviado sem alteração nos dois caminhos de chave de API, portanto um "modelo não encontrado" que cita um id com ponto é corrigido reescrevendo o id, não trocando de protocolo. O que isto não cobre: os caminhos de OAuth e token, a interface web do launcher, streaming e qualquer solicitação concluída pela Kunavo — as linhas da Kunavo usaram uma chave inválida de propósito.
A ordem mais curta de verificação
- Algo saiu da máquina? Um erro de terminal contendo not found in model_list sem status HTTP é local. Faça
agents.defaults.model_nameser igual a uma entrada demodel_namee pare aí. - Veio do localhost? Um 404 no navegador ao escolher um modelo padrão na interface web do PicoClaw é a mesma incompatibilidade, servida pelo próprio backend do PicoClaw. Nenhuma API de modelo foi envolvida.
- Qual provedor foi executado? Compare o texto do wrapper com a tabela acima. Se o wrapper não corresponder ao protocolo que você acha que configurou, o campo
providerou o prefixo do modelo não é o que você imagina. - 404 de rota ou 404 de modelo? Um corpo que identifica seu modelo — especialmente com uma sugestão did you mean — é um 404 de modelo: corrija o id. Uma página HTML, um corpo vazio ou um não encontrado genérico é um 404 de rota: derive novamente a URL montada a partir da tabela antes de fazer qualquer outra coisa.
- Peça ao endpoint que informe o que ele oferece. O PicoClaw não consegue fazer isso em nenhum dos protocolos Anthropic, porque nenhuma das duas entradas de catálogo define o sinalizador de busca. Use
curlno próprio/v1/modelsdo gateway ou aponte temporariamente o mesmo gateway para o protocoloopenai. Modelo não encontrado entre os provedores aborda esse método, e Modelo Anthropic não encontrado em 404 aborda os casos em que o próprio id é o problema. - Só agora troque de protocolo, e apenas se a etapa 4 tiver indicado 404 de rota. Se o bloqueio for o cabeçalho de autenticação, e não o formato da rede, token de autenticação versus chave de API explica a diferença.
- Verifique novamente com uma rodada de ferramenta, não com uma simples mensagem de chat. Uma configuração que responde a uma mensagem simples ainda pode falhar na primeira chamada de ferramenta, portanto a tarefa limitada usada para confirmar a correção deve incluir uma.
Quanto a escolha do protocolo custa
A maior consequência de custo é o cache de prompts, e ela é estrutural, não uma configuração. No PicoClaw v0.3.1, o único código que emite um ponto de interrupção de cache está em pkg/providers/anthropic/provider.go, alcançado apenas nos caminhos de OAuth e token. Com uma chave de API — o caso comum de usar sua própria chave — nenhum dos protocolos Anthropic envia cache_control. Contra a própria camada de compatibilidade da Anthropic, isso se acumula, porque a documentação afirma claramente que "Prompt caching is not supported, but it is supported in the Anthropic SDKs". Contra um gateway que insere pontos de interrupção para clientes no formato OpenAI, a economia é recuperada no próprio gateway; a documentação de cache da Kunavo diz que ele faz isso e delimita precisamente: modelos Claude alcançados por /v1/chat/completions ou /v1/responses. A mesma página diz que cache_control passa sem tradução pela rota Messages nativa — portanto a entrada anthropic-messages não recebe pontos de interrupção de nenhum dos lados, e a segunda coluna abaixo descreve apenas a entrada do protocolo openai. Não foi verificado se outros gateways inserem pontos de interrupção, e nada disso foi observado de dentro do PicoClaw.
O valor disso é uma aritmética ilustrativa de tokens, não um custo de tarefa medido nem um limite de cobrança. Suponha uma rodada de agente de 10 rodadas de ferramenta, em que cada rodada reenvia o mesmo prefixo de 20,000 tokens (prompt do sistema, esquemas de ferramentas, transcrição até o momento), adiciona 1,000 novos tokens de entrada e retorna 600 tokens de saída. Essas proporções são suposições para fins ilustrativos. A primeira coluna cobra a entrada de cada rodada à tarifa integral; a segunda cobra o prefixo repetido à tarifa de leitura do cache a partir da segunda rodada. As tarifas são preços atuais do catálogo da Kunavo por milhão de tokens.
| Modelo | Entrada / saída por 1M | Leitura de cache por 1M | Estimativa, sem pontos de interrupção | Estimativa, prefixo em cache |
|---|---|---|---|---|
| Claude Haiku 4.5 | $0.70 / $3.50 | $0.07 | $0.168 | $0.055 |
| Claude Sonnet 4.6 | $2.10 / $10.50 | $0.21 | $0.504 | $0.164 |
| Claude Opus 5 | $3.50 / $17.50 | $0.35 | $0.840 | $0.273 |
Com essas suposições, Claude Sonnet 4.6 passa de $0.504 para $0.164 pelo mesmo trabalho. Leia a segunda coluna como otimista: as gravações no cache são cobradas à própria tarifa e não são modeladas em nenhuma das direções, e um prefixo que muda a cada rodada nunca se torna um acerto de cache. Multiplique pelas rodadas por dia antes de tratar qualquer valor como orçamento.
Separe as duas cobranças enquanto faz isso. O PicoClaw em si é gratuito — o repositório tem licença MIT, e nenhum protocolo, incluindo os dois da Anthropic, exige algo para comprar. O custo recorrente são os tokens do modelo à tarifa do seu provedor. O valor do catálogo da Kunavo é um piso de cobrança, não um teto: quando o upstream informa sua cobrança, a fatura é o maior valor entre o custo do catálogo e o custo do upstream multiplicado pela margem aplicável. O recarregamento mínimo é $10 em crédito pré-pago, um mínimo de financiamento, não uma taxa de tarefa ou assinatura — consulte detalhes de cobrança.
Fornecedor direto, gateway, assinatura ou local
| Opção | Vantagens | Quanto isso custa para você aqui |
|---|---|---|
| Chave de API do fornecedor direto | Você usa os modelos de um fornecedor o dia todo e quer os próprios termos de cache e processamento em lote desse fornecedor | Na camada de compatibilidade da Anthropic, o cache de prompts é documentado como não compatível, portanto o protocolo anthropic abre mão dele; anthropic-messages mantém a rota nativa, mas o PicoClaw ainda não envia cache_control com uma chave de API |
| Gateway compatível com OpenAI | Você troca de modelo por tarefa e quer uma chave e um saldo, além de precisar que custom_headers, extra_body, proxy ou streaming funcionem | A questão de /v1 é sua, porque api_base é usado literalmente. API compatível com OpenAI aborda o formato geral |
| Caminho de gateway nativo da Anthropic | Seu endpoint oferece apenas /v1/messages ou aceita apenas X-API-Key | Quatro campos documentados de model_list nunca chegam ao provedor, e ele não implementa nenhum método de streaming — portanto streaming.enabled e uma solução alternativa de autenticação com custom_headers estão indisponíveis |
| Login por assinatura | O uso intenso com tarifa fixa é mais adequado para você do que tokens medidos | O PicoClaw não oferece assinatura própria. O ramo de OAuth e token é o único caminho que normaliza ids com ponto e emite pontos de interrupção de cache, mas esta página não exercitou esse fluxo de login nem verificou o que ele aceita |
| Modelo local | Trabalho pequeno ou privado sem cobrança por solicitação — ollama, lmstudio e vllm não precisam de chave | Lacuna de capacidade em relação aos modelos hospedados, além do hardware. O PicoClaw não inclui um mecanismo de inferência: ele acessa todos os modelos por HTTP, e essas três opções são servidores compatíveis com OpenAI que você executa por conta própria |
Escolhendo o runtime em vez da rota? PicoClaw versus OpenClaw compara os dois quanto ao formato de implantação. Se você optar por um gateway e quiser financiar uma chave, crie uma conta na Kunavo e envie uma tarefa limitada com uma chamada de ferramenta, depois leia a cobrança que sua conta realmente registrou.
Perguntas frequentes
Por que o PicoClaw informa que o modelo não foi encontrado?
Na maioria das vezes, porque o alias não é resolvido localmente, antes que qualquer solicitação HTTP seja feita. O PicoClaw v0.3.1 tem três strings distintas anteriores ao HTTP para isso: "model %q not found in model_list or providers" em pkg/config/config.go, "model %q not found in model_list" em pkg/providers/legacy_provider.go (cujos chamadores acrescentam o prefixo "error creating provider:" — a forma exibida no issue #958 e na própria página de solução de problemas do PicoClaw), e "cannot found model '%s' in config" no comando de modelo. As três significam que agents.defaults.model_name não é igual a nenhuma entrada model_name em model_list. Um exemplo registrado é o issue #958 do PicoClaw, em que o autor definiu o modelo como "llama3.2", enquanto picoclaw status mostrava o modelo do Ollama como llama3.2:latest e o endpoint do Ollama estava acessível — o provedor estava correto, mas o alias não. Um comentarista identificou exatamente isso, e o autor confirmou que a alteração na configuração funcionou; o próprio issue foi encerrado em 25 de março de 2026 pelo bot de issues obsoletos do repositório, e não por uma correção de código. Se, em vez disso, a mensagem contiver um status HTTP, a solicitação saiu da sua máquina e a causa está no upstream, não em model_list.
O que significa um 404 anthropic do PicoClaw?
Leia o corpo antes de alterar qualquer coisa, porque dois 404 diferentes usam o mesmo status. Um 404 de rota significa que o URL montado pelo PicoClaw não existe nesse host — uma página de erro vazia ou HTML, ou um not-found genérico de um servidor web. Um 404 de modelo significa que a solicitação chegou a um endpoint real que a interpretou e rejeitou o id do modelo; a versão da Anthropic desse corpo é um not_found_error que nomeia o modelo, e o issue #1624 do PicoClaw o registra literalmente como "model: claude-sonnet-4.6 was not found. Did you mean claude-sonnet-4-6?". Uma sugestão "did you mean" prova que a rota funcionou, portanto trocar de protocolo não ajudará — corrija o id do modelo. Os dois caminhos do PicoClaw também envolvem os 404 de forma diferente: o provedor Messages nativo imprime "endpoint not found (404): <body>", enquanto o provedor compatível com OpenAI imprime "API request failed:" seguido de linhas Status e Body, além de uma variante separada quando o corpo é HTML. Leitura feita na tag v0.3.1 em 21 de setembro de 2026.
Devo mudar de anthropic para anthropic-messages quando receber um 404?
Somente quando o 404 for um 404 de rota. A documentação do próprio provedor do PicoClaw diz para usar anthropic-messages quando "The existing `anthropic` protocol returns 404 errors (indicating the endpoint doesn't support OpenAI-compatible format)", e essa é uma orientação adequada para um endpoint que oferece apenas /v1/messages. É a escolha errada para um 404 no nível do modelo, e ela tem custos: no caminho anthropic-messages, o PicoClaw passa ao provedor apenas a chave da API, o URL base, o user agent e o tempo limite da solicitação, portanto custom_headers, extra_body, proxy e max_tokens_field nunca chegam ao destino, e o provedor não implementa nenhum método de streaming, de modo que streaming.enabled também não pode surtir efeito. Isso também altera o cabeçalho de autenticação — anthropic com uma chave de API envia Authorization: Bearer, enquanto anthropic-messages envia X-API-Key com um Anthropic-Version fixo de 2023-06-01. Se o seu gateway aceitar apenas um desses cabeçalhos, isso restringirá o protocolo independentemente do formato de transmissão. Verificado no código-fonte do PicoClaw v0.3.1 em 21 de setembro de 2026.
O PicoClaw envia um id de modelo com ponto, como claude-sonnet-4.6, exatamente como escrito?
Nos dois caminhos de chave de API, o código-fonte não indica nenhuma reescrita. A substituição de ponto por hífen strings.ReplaceAll(model, ".", "-") ocorre uma vez no repositório, em pkg/providers/anthropic/provider.go, linha 219 — o provedor baseado em SDK usado pelos métodos de autenticação OAuth e token. Nem pkg/providers/anthropic_messages/provider.go nem pkg/providers/openai_compat/provider.go a contém, e o mesmo cenário permaneceu quando a pesquisa buscou novamente esses arquivos na branch main em 21 de setembro de 2026. Isso importa porque o próprio GetDefaultModel de anthropic-messages do PicoClaw retorna a grafia com pontos, o exemplo de providers.md para o protocolo anthropic usa um id com pontos, e o catálogo de provider_metadata.go lista ids com hífens para ambas as entradas — três arquivos próprios divergem. Todos os ids de API Claude impressos na visão geral de modelos da Anthropic usam hífens. A execução do lançamento v0.3.1 em 1º de outubro de 2026 contra um endpoint local de gravação confirmou isso para os dois caminhos de chave de API: em anthropic-messages e em openai, o id chegou como claude-sonnet-4.6, e o 404 do endpoint voltou envolvido respectivamente como "endpoint not found (404)" e "API request failed". O caminho OAuth e token, aquele com a reescrita, não foi executado.
Meu api_base parece correto e ainda recebo um 404. O que mais altera o URL?
A regra do prefixo, e ela falha silenciosamente. Quando o campo provider está ausente de uma entrada de model_list, o PicoClaw trata o primeiro segmento separado por barra de model como um protocolo somente se esse segmento for um id de provedor conhecido; caso contrário, a string inteira permanece como id do modelo e o protocolo volta ao literal "openai". O próprio documento de migração do PicoClaw afirma isso de forma mais solta — que, quando provider é omitido, o primeiro segmento vira o provedor — portanto um prefixo com erro parece que deveria gerar um erro e, em vez disso, produz um 404 upstream para um id de modelo sem sentido. Quando provider é definido, model é enviado ao upstream completamente inalterado, inclusive com um prefixo duplicado; o comentário do próprio código dá o exemplo Provider "openai", Model "openai/gpt-4o" resolvendo para o id de modelo "openai/gpt-4o". A própria página de solução de problemas do PicoClaw usa o mesmo exemplo para outro fornecedor: um "model": "free" sem provedor está errado porque nenhum provedor OpenRouter foi selecionado, a forma preferida é "provider": "openrouter" com "model": "free", e "model": "openrouter/free" é listado como também compatível precisamente porque openrouter é um id de provedor conhecido. Essa página não traz um número de versão próprio; ela está na árvore v0.3.1, lida em 21 de setembro de 2026.
O PicoClaw pode listar quais modelos meu endpoint oferece?
Não para nenhum dos dois protocolos Anthropic. O botão fetch-models na interface web do launcher do PicoClaw depende de uma flag SupportsFetch na tabela de opções de provedores, e as entradas de anthropic e anthropic-messages omitem essa flag. A maioria dos protocolos compatíveis com OpenAI a define — openai, openrouter, litellm, ollama, lmstudio, vllm, deepseek, groq e mais vinte — portanto a lacuna é específica das duas entradas Anthropic, não de endpoints personalizados em geral. Isso deixa a etapa de "perguntar ao endpoint o que ele oferece" para o curl contra a própria rota /v1/models do gateway, ou para apontar temporariamente o mesmo gateway ao protocolo openai ou litellm e aproveitar a busca. Observe que isso não diz nada sobre a existência de uma rota /v1/models na API upstream; trata apenas do que o próprio PicoClaw pode chamar. Lido em pkg/providers/provider_metadata.go na tag v0.3.1, em 21 de setembro de 2026.
Corrigir isso custa alguma coisa?
Não do lado do PicoClaw. O repositório sipeed/picoclaw é licenciado sob MIT e seu arquivo LICENSE contém "MIT License / Copyright (c) 2026 PicoClaw contributors", verificado em 21 de setembro de 2026; não há conta, nível nem protocolo pago, portanto todo protocolo, incluindo os dois da Anthropic, está no binário gratuito e não há nada para comprar da Sipeed para liberar um endpoint personalizado. O que custa dinheiro é o tráfego da API de modelos, medido pelo provedor que você configurar, e o PicoClaw não publica tarifas próprias. Um cuidado durante a pesquisa: um site não afiliado e semelhante vende um pacote de hospedagem mensal sob o nome PicoClaw, embora seu próprio rodapé se descreva como um portal independente não oficialmente afiliado à Sipeed ou ao PicoClaw — portanto o valor mensal é o preço de hospedagem daquele site, não um preço do PicoClaw.
Verificado em 21 de setembro de 2026. Reverificado nesta tarefa na tag v0.3.1: a observação de protocolo do guia de provedores e a linha do fornecedor Anthropic, o ramo anthropic e o caminho padrão de factory_provider.go, NormalizeBaseURL, a URL de anthropic-messages, os cabeçalhos e a string 404, a concatenação de URL e o cabeçalho Bearer de openai_compat, as três strings "not found in model_list" anteriores ao HTTP, o 404 do backend web, a única ocorrência da substituição de ponto por hífen, a coluna SupportsFetch da tabela de opções de provedores e o exemplo do OpenRouter em docs/operations/troubleshooting.md; além da API de releases (v0.3.1, publicada em 3 de julho de 2026) e dos títulos, estados, datas e comentários das issues #1624, #958 e #269. A página de compatibilidade do SDK OpenAI da Anthropic foi lida no mesmo dia. Executado em 1º de outubro de 2026: o binário da versão v0.3.1 em um contêiner contra um endpoint de gravação local e, com uma chave inválida, contra a Kunavo — todas as linhas da tabela acima. Não verificado: qualquer coisa em main além dos arquivos cujas diferenças foram comparadas pela pesquisa, o que encerrou a issue #269, os caminhos de OAuth e token e qualquer solicitação concluída pela Kunavo. As tarifas de tokens da Kunavo vêm do catálogo atual, e todo valor em dólar aqui é uma aritmética ilustrativa de tokens.