| title | Connect a model |
|---|---|
| description | Add a cloud API key, import one from your environment, or point Copse at a local server. |
Copse has no account and no hosted backend. The desktop app talks directly to the provider you choose. Read Privacy and data flow and Provider data policies before sending a real repository to a hosted model.
- Type a key in Settings → Providers. Copse encrypts it with AES-256-GCM under a data key it keeps in the operating system's keyring — the macOS Keychain, Windows Credential Manager, or a Linux Secret Service keyring.
- Scan the environment. First-run setup and Settings both offer an explicit
scan of
process.envand a fixed list of shell startup files. You see masked previews only; nothing is stored until you import a key. - Connect a local server. Point an OpenAI-compatible endpoint at LM Studio, Ollama, llama.cpp, Jan, vLLM, or similar. That traffic stays on the machine only when the URL you configured is local.
You should see the model picker list at least one model, and a first prompt should stream a reply (or a clear provider error).
Copse refuses to persist the key. Prefer installing and unlocking a system keyring or supply the provider key through its environment variable.
For an exceptional Linux/headless setup, start Copse with
COPSE_ALLOW_PLAINTEXT_SECRETS=1. Copse will then ask for separate consent on
each save before writing base64 plaintext. Base64 is recoverable by anyone
who can read ~/.copse/user-data/settings.json; the environment variable does
not bypass the confirmation.
Environment-only provider keys are never written to settings.
Every provider request includes HTTP-Referer: https://copse.dev/ and
X-Title: Copse. Those name the app, not you. They are the same on every
install.
OpenRouter traffic defaults to zero-data-retention, non-training upstreams.
Direct OpenAI requests send store: false. You can relax the OpenRouter ZDR
toggle in Settings; training stays excluded unless you change that too.
Optional on-device PII redaction (Settings, off by default) can redact the text you typed before it leaves the machine. It does not cover repository files or tool output.
If the picker is empty or the key will not save, see Troubleshooting.