Documentação

Documentação

Factory Droid

Os modelos personalizados do Droid são uma matriz JSON com três campos obrigatórios. O que costuma ser interpretado incorretamente é baseUrl, pois o formato correto depende de qual dos três valores de provedor você escolheu.

Uma entrada customModels em ~/.factory/settings.json — model, baseUrl e provider — coloca o Droid em qualquer endpoint que fale Anthropic Messages ou OpenAI Chat Completions.

~/.factory/settings.json → customModels
// ~/.factory/settings.json  (Windows: %USERPROFILE%\.factory\settings.json)
{
  "customModels": [
    {
      "model": "claude-sonnet-5",
      "displayName": "Sonnet 5 [Kunavo]",
      "baseUrl": "https://api.kunavo.com",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "anthropic"
    },
    {
      "model": "gpt-5-6-sol",
      "displayName": "GPT-5.6 Sol [Kunavo]",
      "baseUrl": "https://api.kunavo.com/v1",
      "apiKey": "${KUNAVO_API_KEY}",
      "provider": "generic-chat-completion-api"
    }
  ]
}

// Then, in the shell Droid starts from:
//   export KUNAVO_API_KEY=sk-kn-...
// ${VAR_NAME} expansion is a settings.json feature. It does NOT apply to the
// legacy ~/.factory/config.json, which Factory still loads and merges.
O /v1 pertence a uma entrada, não à outra. A documentação da Factory esclarece isso com uma tabela, não com uma frase: a referência de provedores informa https://api.anthropic.com — origem, sem caminho — para provider: "anthropic", enquanto https://api.openai.com/v1, https://openrouter.ai/api/v1 e https://api.groq.com/openai/v1 incluem todos a raiz /v1. O Droid acrescenta a rota por conta própria; portanto, a entrada Anthropic acima usa apenas a origem, e a entrada Chat Completions é /v1. Incluir /v1 na entrada Anthropic solicita /v1/v1/messages, que é um 404, não uma falha de autenticação — consulte a referência de URL base.
Esta configuração foi consultada na documentação da própria Factory na data abaixo. A Kunavo não executou a CLI do Droid contra o endpoint — nem uma sessão, nem um turno transmitido em fluxo, nem uma interação completa com ferramentas; o mesmo vale para todos os clientes desta família. Uma página de configuração publicada não é um teste. A Factory faz a mesma ressalva: segundo suas palavras, apenas os modelos Anthropic e OpenAI em suas APIs oficiais são “totalmente testados e avaliados”. O curl abaixo é a parte que você pode verificar em dez segundos; o comportamento do cliente depende de você e da Factory.
É possível omitir authMode. A Factory documenta o padrão, provider-default, como o envio da credencial em x-api-key, e o endpoint Messages da Kunavo também aceita esse cabeçalho, assim como Authorization: Bearer. Se algum dia quiser especificar explicitamente o formato Bearer, a Factory documenta authMode: "bearer" para provider: "anthropic", que também funciona aqui.
Ainda não tem uma chave? Crie uma conta na Kunavo, gere uma chave (ela começa com sk-kn-) e adicione crédito a partir de $10 — as chamadas são pagas com esse saldo, e chamadas malsucedidas não são cobradas. O painel então abre na configuração de Factory Droid.

Passo a passo

  1. Crie uma chave em /app/keys e copie-a — ela é exibida uma única vez. Exporte-a como KUNAVO_API_KEY no shell de onde você inicia o Droid, para que a própria chave nunca seja gravada em um arquivo de configurações.
  2. Abra ~/.factory/settings.json (crie-o se ainda não existir) e adicione o array customModels acima. A Factory marca exatamente três campos como obrigatórios — model, baseUrl e provider — e displayName é o rótulo exibido pelo seletor.
  3. Confira a grafia de provider. O valor deve ser exatamente um de anthropic, openai ou generic-chat-completion-api; a seção de solução de problemas da Factory aponta um erro de digitação nesse campo como causa do erro "Invalid provider".
  4. Execute /model na CLI. Suas entradas aparecem em uma seção separada Modelos personalizados, abaixo dos modelos próprios da Factory, identificadas pelo displayName definido por você. A Factory monitora o arquivo de configurações, então basta salvá-lo — não é necessário reiniciar.
  5. Dê a ele uma tarefa que leia e edite um arquivo, em vez de apenas cumprimentá-lo. O Droid depende do uso de ferramentas para quase tudo o que faz, e um turno de conversa simples não exercita essa parte. Em seguida, execute /cost, onde a Factory informa as taxas de acerto do cache — a Kunavo oferece os marcadores cache_control da Anthropic de forma nativa, e a observação da própria Factory é que, no provedor genérico Chat Completions, o cache “varia de acordo com o provedor e não pode ser garantido”.

Verificado em Página de modelos personalizados (BYOK) da Factory em 21 de setembro de 2026. As configurações de terceiros podem mudar; se o nome de um campo aqui já não corresponder ao que você vê, aquela página é a autoridade, não esta.

Esta é a versão resumida. O guia completo — escolha do modelo, custo de uma sessão real e modos de falha — está em o guia de custos do Factory Droid.

Verifique antes de depurar o cliente

Uma solicitação determina se a falha está no endpoint, na chave ou no arquivo de configuração. Se isto retornar JSON, a mesma URL base e a mesma chave funcionarão em Factory Droid.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/messages \
  -H "Authorization: Bearer sk-kn-..." \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"claude-sonnet-5","max_tokens":16,"messages":[{"role":"user","content":"ping"}]}'

Qual ID de modelo inserir no campo

Todo modelo de texto pode ser acessado como um ID de modelo — a lista atual está em GET /v1/models, e o catálogo com preços está na página de modelos. As tarifas são em USD por 1 milhão de tokens, entrada / saída.

ID do modeloEntrada / saída da KunavoOnde se encaixa em Factory Droid
claude-sonnet-5$1.40 / $7.00o modelo de trabalho padrão — deve ser incluído na entrada provider: "anthropic"
claude-opus-5$3.50 / $17.50planejando uma mudança em que seria caro errar; a mesma entrada da Anthropic
claude-haiku-4-5$0.70 / $3.50turnos baratos e triagem de arquivos, quando o volume predomina; a mesma entrada da Anthropic
gpt-5-6-sol$2.00 / $12.00uma segunda opinião de outra família — requer a entrada generic-chat-completion-api
A cobrança é por token, usando um saldo pré-pago e sem tarifa mensal — consulte billing. Em contextos repetidos — que representam a maior parte do que um editor ou cliente de chat envia — o cache de prompt altera a conta mais do que a escolha do modelo.

O que um modelo personalizado não acessa no Droid

Há três limitações descritas nas próprias páginas da Factory, e cada uma altera o que você deve esperar da configuração acima, não se ela funciona.

  • Disponível apenas em ambientes locais. A página BYOK da Factory informa que os modelos personalizados estão disponíveis na CLI do Droid e no aplicativo para desktop, que leem seu settings.json, e que eles “não aparecem nas plataformas web ou móveis hospedadas pela Factory”. O trabalho delegado por meio do produto hospedado continua sendo executado com inferência cobrada pela Factory, independentemente da chave configurada aqui.
  • Um administrador pode desativá-lo. Os controles empresariais da Factory documentam modelPolicy.allowCustomModels e allowedBaseUrls, que desativam completamente o BYOK do usuário ou restringem todos os modelos personalizados a um único host aprovado. Em uma máquina gerenciada, confira isso antes de investigar o arquivo.
  • A taxa do plano continua sendo cobrada. Uma chave aqui é um complemento, não uma substituição — o que a Factory cobra quando o uso ultrapassa a franquia BYOK, e qual é o limite dessa franquia, é assunto do guia de custos e não é recalculado nesta página.

Há uma armadilha que vale conhecer antes de copiar uma configuração de outro lugar: a Factory ainda carrega o arquivo legado ~/.factory/config.json com custom_models e base_url em snake_case, mesclando-o abaixo de settings.json, e documenta que a expansão de ${VAR_NAME} não se aplica a ele. Uma chave escrita como marcador nesse arquivo é enviada literalmente. Use settings.json.

Perguntas frequentes

Como adiciono um endpoint de API personalizado ao Factory Droid?

Edite ~/.factory/settings.json (%USERPROFILE%\.factory\settings.json no Windows) e adicione um array customModels. Cada entrada precisa de três campos obrigatórios — model, baseUrl e provider — além de campos opcionais, como displayName, apiKey, authMode, maxOutputTokens e extraHeaders. Não há formulário de configurações para isso; a interface é o arquivo JSON. A Factory monitora o arquivo, então, depois de salvá-lo, execute /model na CLI e a entrada aparecerá sob um título separado, "Modelos personalizados".

O baseUrl do Factory Droid precisa terminar em /v1?

Depende do valor de provider, e a documentação da Factory esclarece isso com a tabela de referência de provedores, não com uma frase. A linha Anthropic informa https://api.anthropic.com sem caminho, então o provedor "anthropic" usa apenas a origem — https://api.kunavo.com para a Kunavo. Todas as linhas Chat Completions dessa tabela incluem uma raiz /v1 (https://api.openai.com/v1, https://openrouter.ai/api/v1), então o provedor "generic-chat-completion-api" usa https://api.kunavo.com/v1. O Droid acrescenta a rota por conta própria; portanto, incluir /v1 na entrada Anthropic gera /v1/v1/messages e retorna 404, não um erro de autenticação.

Qual valor de provider devo usar para modelos Claude em um endpoint de terceiros?

Use "anthropic". A Factory documenta três valores de provider, cada um selecionando um protocolo de comunicação: "anthropic" para a API Anthropic Messages em /v1/messages, "openai" para a API OpenAI Responses e "generic-chat-completion-api" para OpenAI Chat Completions. O valor identifica o protocolo usado pelo endpoint, não quem cobra pelo uso; portanto, um gateway que responde em /v1/messages deve usar "anthropic", independentemente da conta a que pertence a chave. A orientação da própria Factory é usar "generic-chat-completion-api", a menos que você esteja chamando a API oficial da OpenAI ou da Anthropic — mas isso se refere ao protocolo disponível, e um endpoint que ofereça ambos permite que você escolha.

Por que o Factory Droid informa que o provedor é inválido ou ignora meu modelo personalizado?

A seção de solução de problemas da Factory aponta três causas. Se um modelo não aparece no seletor, geralmente há um erro de sintaxe JSON em settings.json ou falta um campo obrigatório — model, baseUrl ou provider. O erro "Invalid provider" indica um problema de grafia: o valor deve ser exatamente anthropic, openai ou generic-chat-completion-api. Um erro de autenticação indica um problema com a chave ou com o URL base; a orientação da própria Factory é confirmar que o URL base corresponde à documentação do seu provedor. Primeiro, identifique a causa fora do cliente usando o curl acima: se receber JSON, o endpoint e a chave estão funcionando, e o problema está no arquivo de configurações.