Pular para o conteúdo principal
O Narya chama o fornecedor de modelos que você configura, com a sua própria credencial. Três fornecedores vêm no binário.

Os três fornecedores


openrouter é um gateway para outros fornecedores. Uma instalação nova sem config.toml roda no modelo padrão do provedor em que você fez login. Sobrescreva a família de wire, a base URL e o modelo padrão por provedor em [providers.<name>] no config.toml. O seu arquivo vence em qualquer colisão com o catálogo do binário. Uma mudança no config.toml só vale depois que uma pessoa a permite em uma conversa acompanhada. Veja Quando uma mudança de configuração vale. Rode narya providers para listar os provedores, e narya models para listar os modelos.

De onde vem a sua chave


O Narya gasta primeiro a chave da sua organização, quando há uma armazenada, e, se não houver, a chave desta máquina. Uma chave digitada em um cliente enquanto você está autenticado é da sua organização: o Narya a armazena criptografada, e os turnos de todos os membros a gastam. Armazenar uma exige a permissão keys:manage. O narya auth login armazena a chave desta máquina, e o mesmo faz uma chave digitada em um cliente sem autenticação. O Narya deriva o nome da variável de ambiente do nome do provedor, em maiúsculas, mais _API_KEY. Então anthropic lê ANTHROPIC_API_KEY, openai lê OPENAI_API_KEY, e openrouter lê OPENROUTER_API_KEY. O Narya lê a chave desta máquina de três camadas, em ordem:
  1. A variável de ambiente, que vence em cada leitura.
  2. O keychain do sistema operacional: macOS Keychain ou Linux Secret Service.
  3. Um arquivo por provedor com permissões 0600 em credentials no seu Narya home. O Narya usa esta camada apenas em uma máquina sem nenhum backend de keychain.
Se o keychain existe mas recusa a requisição, o Narya reporta o erro e não usa o arquivo.
narya auth login escreve no keychain mesmo quando a variável de ambiente já guarda uma chave para aquele provedor. A variável de ambiente então encobre a chave armazenada em cada leitura, sem mensagem. Remova a variável para usar o que você armazenou.

Login


Rode narya auth login <provider> para armazenar uma chave, e narya auth logout <provider> para removê-la. O Narya testa uma chave digitada contra o provedor antes de armazenar qualquer coisa. Acrescente --method key para digitar uma chave, ou --method subscription para um login pelo navegador. O login pelo navegador funciona apenas para anthropic, contra claude.ai e platform.claude.com.

O que sai da sua máquina


O Narya envia os seus prompts, os arquivos que ele lê e os resultados de ferramentas ao fornecedor de modelos que você configura, com a chave que ele gasta. A Lerian não opera nenhum endpoint nesse caminho. O Narya também alcança estes hosts:
  • models.dev, para uma atualização do catálogo de modelos a cada 12 horas, e cada provedor que você configurou, para uma listagem GET /v1/models. Defina NARYA_MODELS_URL=off para parar os dois. A atualização nunca bloqueia um turno, e uma falha vai apenas para o log do host.
  • Os dois hosts de login pelo navegador acima, durante um login.
  • O provedor de identidade das suas configurações [identity].
  • O endereço em [identity] plane_url, quando você define um. O host lê ali as configurações da sua organização a cada 15 minutos, e um compartilhamento encontra ali o home da sua organização. Uma sessão que você compartilha vai para esse home.
  • Um host de release, em um comando explícito de upgrade.
  • Qualquer host que o modelo nomeia pela ferramenta fetch dele. Essa chamada roda sob a regra de rede, que pergunta antes. O Narya lê no máximo 5 MiB e espera no máximo 30 segundos.
  • A busca na web do próprio fornecedor, que roda do lado do fornecedor sob a mesma chave. O Narya a oferece aos provedores anthropic e openai contra o endpoint do próprio fornecedor, e a um provedor cujo bloco [providers.<name>] define web_search = true, a menos que a família dele seja openai-completions. A pergunta de rede não chega nela. deny network ** a desliga, e uma regra por host restringe o fetch, nunca a busca. Uma execução não assistida busca apenas onde as regras permitem todos os hosts.
  • Os tool servers, as árvores de ferramentas OpenAPI e o conversor de PDF que você declara. Veja Estendendo o Narya.
  • Extensões registradas e pacotes. O narya ext add baixa o módulo Go do pacote da origem do módulo.
  • O coletor OpenTelemetry que você nomeia em [telemetry] ou em OTEL_EXPORTER_OTLP_ENDPOINT. A telemetria fica desligada até você nomear um.
Os hooks podem receber dados de sessão conforme o ponto: before-model-request recebe um prompt, before-tool-call recebe argumentos da ferramenta e after-tool-call recebe argumentos e resultados da ferramenta. Revise os hooks de uma extensão antes de habilitá-la. Os comandos de shell que o modelo roda alcançam a rede sob as regras de shell, não sob a regra de rede. Comandos de shell, hooks e servidores de ferramentas de repositório que o Narya inicia na sua máquina recebem o seu ambiente, exceto as chaves de provedor que o Narya lê (como ANTHROPIC_API_KEY) e cada variável NARYA ou NARYA_*. Qualquer outra chave do seu ambiente chega a eles. Os servidores de ferramentas declarados no config.toml não herdam nada dele.

Custo


O Narya usa o custo que o fornecedor reporta para uma requisição. Caso contrário, ele precifica a requisição pelo catálogo de modelos, em dólares americanos por milhão de tokens. Uma requisição sem nenhum dos dois não reporta custo, nunca um zero. Uma requisição precificada pelo catálogo também conta a tarifa do fornecedor de $0.01 para cada busca na web que ela fez. Os tetos de gasto abaixo contam essa tarifa. Rode narya records usage --from <time> --to <time> para ver tokens e custo por grupo. Um total incompleto é impresso com um marcador >=. O Narya nomeia uma sessão sem título depois da primeira resposta dela. O próprio modelo da sessão escreve o título, e o Narya cobra essa rodada da sessão como um turno. Uma execução de narya -p e uma sessão desacompanhada não são nomeadas dessa forma. O Narya define um teto de gasto por padrão: $5.00 por disparo agendado, como [schedules] ceiling_usd. Defina [spend] daily_ceiling_usd para limitar o que uma pessoa gasta em um dia UTC, em todo o trabalho pago. Sem ele, o Narya não define limite diário. Um disparo agendado em um modelo que o Narya não pode precificar roda sem teto, e o agendamento carrega um aviso. Quando [spend] daily_ceiling_usd está definido, o Narya recusa esse disparo. Um agendamento que clona um repositório e nomeia um agente lê esse agente do clone. O Narya então julga o preço dele durante o turno, não quando ele dispara. Uma mudança em [spend] ou [schedules] vale no próximo início do host depois que uma pessoa a permite.