keys, models, effort

Everything that only reads the repo runs with no key. Explanations run on your own key, kept in your browser.

Lookups (log, branches, prs, history, who, view, ls, the rebase and cherry-pick plans) need no key. The first explain without one asks for a key: paste it as a message.

keys

  • Keys live in your browser only, one per provider; the prefix decides which: sk-ant- anthropic, gsk_ groq, anything else openai
  • They travel per request in a header (x-wh-provider-key, next to x-wh-model, x-wh-effort, and x-wh-tz) and are never stored, logged, or echoed back by the server
  • The provider whose key was pasted last is active

what leaves your browser

  • Lookups (log, branches, prs, history, who, view, ls, the plans) go to github and nowhere else
  • An explain, changelog, describe, why, or draft message sends the diff and its commit subjects to your provider, private repos included, under that provider's terms; describe adds the branch names and, for a pull request, its title and description (cut at 2000 characters)
  • The server running the app relays that request with your key and holds your github session, so use an instance you trust, or run your own
  • Answers are model output and can be wrong; plans are computed, not generated, but they rewrite history once pasted, so read one before you run it

providers

providerdefault modeleffortfree tier
anthropicclaude-opus-5low, medium, high, xhigh, max
openaigpt-5.6-terranone, minimal, low, medium, high, xhigh, max
groqopenai/gpt-oss-120blow, medium, highconsole.groq.com

The /model menu also suggests claude-fable-5-1, claude-sonnet-5, claude-haiku-4-5, gpt-5.6-sol, gpt-5.6-luna, openai/gpt-oss-20b, and qwen/qwen3.8-27b. Any id is accepted: the list gates nothing.

keeping the list current

Providers ship new models constantly, so the table above is a shipped seed, not a whitelist. /model sync (or /model sync <provider>) asks the provider for its current list, with the key you already pasted, and keeps the answer in this browser. A new model needs no redeploy, which matters most on a self-hosted instance whose image would otherwise freeze the list.

  • The seed is what you get before a key exists, and for a gateway with no models endpoint
  • A synced list replaces that provider's seed rather than adding to it, so a retired model stops being offered
  • Embedding, speech, and image models are left out: a catalog is not a model list
  • Nothing refreshes on its own; the call happens only when you ask

pinned defaults

The default model per provider never follows "latest": a default that moves changes cost and behaviour without asking, and newest is often a preview or a pricier tier. When a sync can no longer find the pinned default, it says so and changes nothing. The cli answers the same question with wh models.

model and effort

  • /model switches models; the menu marks each one's provider, free, default, and no key. Picking another provider's model makes that provider active
  • /effort sets the reasoning effort where the provider supports it
  • Both are remembered per provider
  • Follow-ups resend the conversation from your browser, with a prompt-cache breakpoint on the diff for anthropic keys so they stay cheap

usage

/usage anthropic 1.2m in · 84.3k out · 41 answers · since aug 12

/usage shows what each key has cost since it was saved and the headroom the provider last reported; /usage reset [provider] starts over. Tokens only, never money: the provider's dashboard is the bill. A key nearly out of headroom gets an amber warning after the answer, the same one the cli prints.

search $
↑↓ navigate · enter open · esc close