01 / Start local
What stays on your device
Live transcription, diarization, the semantic map, session review and history, whisper text-to-speech, and redaction work without a backend or API key.
The copilot adds commitments, open asks, subtext, next moves, custom watch categories, and generated whispers. Those features send transcript text to the backend you configure.
02 / Requirements
Three things before you begin
- A Cloudflare account. For one user, the Worker and its SQLite-backed Durable Objects fit within the free plan’s included limits.
- An Anthropic API key with available credit.
- Node.js 20 or newer on the machine you deploy from.
You will also need the public Cyrano backend repository: github.com/F-RND/cyrano-backend.
03 / Deploy
Put the Worker in your Cloudflare account
Clone the repository, install the locked dependencies, authenticate Wrangler, and deploy:
git clone https://github.com/F-RND/cyrano-backend.git
cd cyrano-backend
npm ci
# Opens a browser to authenticate your Cloudflare account
npx wrangler login
# Creates the Worker and its Durable Objects
npx wrangler deploy
Wrangler prints the deployed URL, usually in the form https://cyrano-backend.<your-subdomain>.workers.dev. Keep that URL for the app setup.
04 / Secrets
Set the bearer token and Anthropic key
Generate a strong token for Cyrano, then store both values with Cloudflare. Wrangler writes them to the Worker’s encrypted secret store rather than the repository.
# Generate the token you will paste into Cyrano settings
openssl rand -hex 32
# Paste the generated token when prompted
npx wrangler secret put AUTH_TOKEN
# Paste your Anthropic API key when prompted
npx wrangler secret put LLM_API_KEY
Secrets take effect immediately. Do not commit tokens, API keys, .env, or .dev.vars files.
05 / Connect
Point Cyrano at your Worker
- Open Cyrano → Settings → Backend.
- Paste the Worker URL into Backend URL.
- Paste the value stored as
AUTH_TOKENinto Bearer token. - Select Test connection.
| Result | What to check |
|---|---|
| Couldn’t reach the backend | Check that the URL uses HTTPS and contains no typos or trailing characters. |
| Doesn’t look like a Cyrano backend | The URL answered, but it points to a different service. |
| Bearer token rejected (HTTP 401) | The value in Cyrano must exactly match the Worker’s AUTH_TOKEN. |
| Anthropic rejected the API key | Run npx wrangler secret put LLM_API_KEY again with a valid key. |
| Connected | The Worker, bearer token, and Anthropic key are ready. |
If access changes during a session—because a key is revoked or a spending ceiling is reached—Cyrano shows the failure instead of silently returning empty analysis.
06 / Costs
The account is yours; so is the bill
All model spend goes to your Anthropic key. The backend reduces unnecessary calls by requiring a useful word window, batching analysis, caching the instruction prefix, capping output, and enforcing a hard per-session ceiling.
- Filler such as “yeah” and “mm-hm” accumulates without triggering a pass.
- Commitments, asks, subtext, and next moves share one model call per pass.
- Custom watch categories or smart detection may add a second call.
- Prompt caching lowers the cost of consecutive passes.
You can change LLM_MODEL in the Worker configuration and redeploy. The backend omits the thinking parameter; model compatibility still varies, so test a changed model before relying on it.
07 / Operate
Updates, rotation, and logs
- Update: pull the latest release, run
npm ci, and runnpx wrangler deploy. - Rotate the bearer token: run
npx wrangler secret put AUTH_TOKEN, then update each device. The old token cannot authenticate new requests or reconnects, but an existing WebSocket can remain active until disconnected. Terminate active sessions when rotating after suspected exposure. - Rotate the Anthropic key: run
npx wrangler secret put LLM_API_KEY. The next analysis pass uses it. - Watch operations:
npx wrangler tailstreams operational logs. Transcript content is not logged by default. KeepTRANSCRIPT_CONTENT_LOGGINGunset orfalsein real deployments; enabling it deliberately emits transcript-derived diagnostics. - Connect an agent: use Settings → Backend → Connect an Agent to mint a separate, revocable key with limited context and result scopes.
09 / Privacy
Know exactly where the transcript goes
- Transcript segments travel over TLS to your Worker and are stored under the session retention mode you choose: ephemeral, 24-hour, or pinned.
- The Worker sends analysis windows to Anthropic using your key and account.
- Redaction and purge remain available. Transcript text is not logged by default; operators must leave
TRANSCRIPT_CONTENT_LOGGINGdisabled to preserve that property. LLM_API_KEYremains a Cloudflare secret. Cyrano stores the bearer token in the device Keychain; neither value belongs in the repository or app bundle.
Self-hosted and hosted are different routes
With your own deployment, transcript text reaches your Worker and your LLM account; Cyrano does not receive it. With Hosted Copilot, transcript text transits Cyrano’s Worker to generate the copilot. Raw audio remains local in both routes unless you separately opt into a cloud transcription mode.
Read the privacy documentation and use Settings → Plan & Privacy → Where your data goes to inspect the route active on your device.