Loading files
This file is pinned to the selected release. Download the original to open it in your design tool.
# API keys are read from the environment only; never commit a real .env
# Copy this file to .env and fill in your keys (.env is gitignored)
#
# copperhead loads .env from the directory you run it in. A variable already set
# in your shell always wins over this file.
OPENAI_API_KEY=
ANTHROPIC_API_KEY=
# Optional: saved-login for the Claude Code provider (--model claude-code).
# Drives Claude Code via the Claude Agent SDK and reuses your saved login, so a
# Claude subscription runs copperhead with NO ANTHROPIC_API_KEY. Mint it with
# `claude setup-token` while logged into Claude Code. The Claude Agent SDK
# (`@anthropic-ai/claude-agent-sdk`) ships as an optional dependency, so a normal
# install includes it. copperhead never reads or logs this credential; the CLI
# owns authentication.
CLAUDE_CODE_OAUTH_TOKEN=
# Optional: default model. Overridden by --model, and it overrides the `model`
# field in .copperhead/config.json.
#
# cursor Cursor Agent CLI, saved login (`agent login`, no API key)
# cursor:<id> the same, on a specific model id
# claude-code Claude Code, saved login (no API key; uses the token above)
# claude-code:<id> the same, on a specific model id
# claude the Anthropic API provider on its default model
# claude-<id> any Anthropic API model id, passed through as-is
# codex local Codex CLI using its saved ChatGPT login (no API key)
# codex:<id> local Codex CLI with an explicit model id
# gpt-5 the OpenAI provider on its default model
# <anything> sent to OpenAI as a model id, e.g. gpt-5-mini
#
# Routing is by prefix, matched top to bottom: "claude-code" is checked before
# the "claude" prefix (Anthropic API, needs ANTHROPIC_API_KEY); "codex" uses the
# local Codex CLI; everything else goes to OpenAI and needs OPENAI_API_KEY. A
# typo like "claud-sonnet-5" routes to OpenAI and fails there.
#
# Left blank, copperhead picks a provider from whichever key is present,
# preferring OPENAI_API_KEY if both are set.
COPPERHEAD_MODEL=
# Optional: path to the authenticated local Codex CLI. The default is `codex`
# on PATH. Only needed for non-standard installations.
COPPERHEAD_CODEX_PATH=
# Optional: path to the Cursor Agent CLI (`agent` / `cursor-agent`). Defaults to
# `agent` on PATH. Only needed for non-standard installations.
COPPERHEAD_CURSOR_PATH=
# Optional: cross-run memory via Synap (https://docs.maximem.ai). Left blank,
# copperhead runs exactly as before with no network calls to Synap.
#
# Set it and each run recalls relevant context from your earlier runs (on this
# board and others) into the system prompt, then records its outcome, decisions,
# and refusals back. In-repo docs and the KiCad files stay the source of truth;
# recalled memory is advisory context layered on top.
#
# Requires the optional @maximem/synap-js-sdk package AND a Python 3.11+ runtime
# on the host: the JS SDK drives a Python bridge as a subprocess. If either is
# missing, copperhead logs a line and continues without memory.
SYNAP_API_KEY=
# Optional memory scoping. SYNAP_USER_ID defaults to your `git config
# user.email`; SYNAP_CUSTOMER_ID defaults to "copperhead" and only matters on
# B2B Synap instances.
SYNAP_USER_ID=
SYNAP_CUSTOMER_ID=
# --- OpenAI-compatible endpoint (issue #110) -------------------------------
# Point the OpenAI provider at Groq, OpenRouter, Gemini's compat
# endpoint, or a local Ollama. Read ONLY by the `compat:<model-id>` model route,
# so leaving these set never redirects a plain `gpt-5` run.
COPPERHEAD_BASE_URL=
# Name of the variable holding that endpoint's key (not the key itself).
# Defaults to OPENAI_API_KEY. A loopback endpoint (Ollama) needs no key.
COPPERHEAD_API_KEY_ENV=
# A compatible endpoint has no default model (Groq/OpenRouter each serve
# dozens), so set COPPERHEAD_MODEL=compat:<model-id> above, or pass
# --model compat:<model-id> on every command.
3aa468eadThis file is pinned to the selected release. Download the original to open it in your design tool.