# --- Claude API --- # Get a key at https://console.anthropic.com/. Keep this file out of git (.gitignore covers .env). ANTHROPIC_API_KEY=sk-ant-... # --- GaggiMate device (read by the vendored gaggimate_mcp config) --- # Hostname or IP of the machine on your LAN. # # RECOMMENDED: give the machine a fixed address via a DHCP reservation (static # lease) on your router, keyed to its MAC, then put that IP here. A plain DHCP # address CHANGES on lease renewal and crema will lose the machine. # # 'gaggimate.local' (mDNS) works with zero config on many home networks, but is # unreliable on some — and does NOT work when the Pi and the machine are on # different subnets/VLANs (mDNS doesn't cross subnets). If .local is flaky for # you, use a reserved IP. GAGGIMATE_GAGGIMATE_HOST=gaggimate.local # ws for plain (default) / wss if you've put TLS in front of it GAGGIMATE_GAGGIMATE_PROTOCOL=ws # --- crema --- # Where the SQLite database lives. CREMA_DB_PATH=./crema.db # Machine platform: gaggimate (default) or gaggiuino. Reviews, tasting notes, # beans, and sharing work on both; profile drafting/push is GaggiMate-only. CREMA_MACHINE=gaggimate # Base URL of the Gaggiuino web server (only used when CREMA_MACHINE=gaggiuino). CREMA_GAGGIUINO_URL=http://gaggiuino.local # Model used for routine per-shot reviews (cheap, frequent). CREMA_REVIEW_MODEL=claude-sonnet-5 # Model used for the deeper "draft a new profile" step (higher reasoning). CREMA_DRAFT_MODEL=claude-opus-4-8 # How many recent shots to hand Claude as context for a single review. CREMA_REVIEW_WINDOW=5 # Your grinder, in your own words — lets reviews phrase grind advice in that # grinder's own steps/clicks (e.g. "Eureka Mignon Specialità, stepless" or # "1Zpresso JX-Pro, 30 clicks per rotation"). The web UI / `crema grinder` # setting overrides this once set. CREMA_GRINDER= # The coffee in the hopper, in your own words — grounds review advice in the # beans (e.g. "Ethiopian natural, light roast, roasted 2 weeks ago"). The web # UI / `crema coffee` setting overrides this once set. CREMA_COFFEE= # Beans more than this many days past their roast date show an "aging" warning in # the web UI (past-peak flavour / faster flow). Only applies to beans added with a # roast date via "Start a new bean" / `crema bean --roast-date`. 0 disables it. CREMA_BEAN_MAX_AGE_DAYS=30 # Web UI bind address. 127.0.0.1 = loopback (view via SSH tunnel). # Set 0.0.0.0 to reach it directly on the LAN — and set a web password below. CREMA_HOST=127.0.0.1 CREMA_PORT=8765 # Optional HTTP Basic auth for the web UI. Leave the password blank to disable # (fine for loopback). deploy/setup.sh generates a random password for you. CREMA_WEB_USER=crema CREMA_WEB_PASSWORD= # How many days of shots to keep; older ones are pruned on ingest. 0 = keep all. CREMA_RETENTION_DAYS=30 # Default for auto-review of new shots by the scheduled timer. The UI/CLI toggle # overrides this once used. false = nothing spends automatically until you turn it on. CREMA_AUTOREVIEW=false # Community shot pool endpoint for the opt-in `crema share` command. Leave # empty to use the project's pool (discovered from a pointer file in the # GitHub repo, so it works with zero setup). Set your own https URL to use a # self-hosted pool, or set "off" to disable sharing entirely. Nothing is ever # shared before you opt in; `crema autoshare on` enables automatic sharing # after each review, `crema share` does a confirmed one-off. CREMA_SHARE_URL= # Optional Discord webhook URL. When set, crema posts each reviewed shot's 1-10 # score + diagnosis. Create one in a channel: Settings > Integrations > Webhooks. CREMA_DISCORD_WEBHOOK_URL= # --- Tidbyt (optional) -------------------------------------------------------- # Show each reviewed shot's score + profile name on a Tidbyt display. Off unless # BOTH of these are set. Find them in the Tidbyt app (device settings) or at # api.tidbyt.com. Free — no Claude/API cost; a local render + one push. # CREMA_TIDBYT_API_TOKEN= # CREMA_TIDBYT_DEVICE_ID= # CREMA_TIDBYT_INSTALLATION_ID=crema