Skip to main content
Narya calls the model supplier you configure, with your own credential. Three suppliers ship with the binary.

The three suppliers


openrouter is a gateway to other suppliers. A fresh installation with no config.toml runs on the default model of the provider you signed in to. Override the wire family, the base URL and the default model per provider under [providers.<name>] in config.toml. Your file wins on any collision with the catalog in the binary. Run narya providers to list the providers, and narya models to list the models.

Where your key comes from


Narya derives the environment variable name from the provider name, uppercased, plus _API_KEY. So anthropic reads ANTHROPIC_API_KEY, openai reads OPENAI_API_KEY, and openrouter reads OPENROUTER_API_KEY. Narya reads three tiers in order:
  1. The environment variable, which wins on every read.
  2. The operating system keychain: macOS Keychain or Linux Secret Service.
  3. A per-provider file with 0600 permissions under credentials in your Narya home. Narya uses this tier only on a machine with no keychain backend at all.
If the keychain exists but refuses the request, Narya reports the error and does not use the file.
narya auth login writes to the keychain even when the environment variable already holds a key for that provider. The environment variable then shadows the stored one on every read, without a message. Unset the variable to use what you stored.

Sign in


Run narya auth login <provider> to store a key, and narya auth logout <provider> to remove it. Narya probes a typed key against the provider before it stores anything. Add --method key to type a key, or --method subscription for a browser sign-in. Browser sign-in works for anthropic only, against claude.ai and platform.claude.com.

What leaves your machine


Narya sends your prompts, the files it reads, and tool results to the model supplier you configure, with your credential. Lerian operates no endpoint in that path. Narya also reaches these hosts:
  • models.dev, for a model catalog refresh every 12 hours, and each provider you configured, for a GET /v1/models listing. Set NARYA_MODELS_URL=off to stop both. The refresh never blocks a turn, and a failure passes without a message.
  • The two browser sign-in hosts above, during a sign-in.
  • A release host, on an explicit upgrade command.
  • Any host the model names through its fetch tool. That call runs under the network rule, which asks first. Narya reads at most 5 MiB and waits at most 30 seconds.
  • The supplier’s own web search, which runs on the supplier’s side under the same key. Narya offers it to the anthropic and openai providers, and only against the supplier’s own endpoint. The network ask does not reach it. Only deny network ** turns it off, and a per-host rule narrows fetch, never the search.
  • The tool servers, OpenAPI tool trees and PDF converter you declare. See Extending Narya.
Shell commands the model runs reach the network under the shell rules, not the network rule.

Cost


Prices come from a models.dev snapshot inside the binary, in US dollars per million tokens. A model with no published price reports no cost. It never reports a zero. Run narya records usage --from <time> --to <time> for tokens and cost per group. An incomplete total prints with a >= marker. Narya sets two spending ceilings by default:
  • $5.00 per scheduled fire, as [schedules] ceiling_usd.
  • $20.00 per owner per UTC day, as [schedules] daily_ceiling_usd.
A scheduled fire on a model Narya cannot price does not run.