Agora is an orchestration UI for AI coding CLIs (claude, and soon codex and cursor) that run on your machine. Most of the work happens locally. This page explains exactly what leaves your machine, where it goes, and what we do with it.
1. What we collect
From you, directly
- Account credentials. Email and password (or, in the future, an OAuth identity from a provider you choose). Required to sign in. Handled by Supabase Auth — passwords are hashed by Supabase, we never see them in plaintext.
- Display name. The name you typed at sign-up, shown on your plaza.
Automatically, while the daemon is paired
- Heartbeats. Every 30 seconds the daemon sends a small payload: machine label (e.g.
tawus-Mac-mini.local),agora-relayversion, and uptime in seconds. Used to show the green "relay online" dot. - Pair codes. A 6-digit code and the Supabase access/refresh tokens needed to bootstrap a new machine are staged in the
pairingstable for at most 10 minutes, and deleted immediately when redeemed (or when they expire). - Tool-call metadata. For each tool the assistant invokes (e.g.
Bash,Read,Edit), we record the tool name, the input arguments (any string field longer than 500 characters is truncated), duration in ms, exit code, and whether it errored. This is what powers the Activity tab. Stored client-side in your browser's localStorage today; some of it will move to Supabase in the future. - Session results. When a CLI session finishes we record the model name, duration, turn count, cost in USD, and token counts. Same storage as tool calls.
- Crash reports. If something throws, Sentry captures the stack trace and breadcrumbs leading up to the crash. We have
sendDefaultPii: falseset, so Sentry's built-in collection of email addresses and IPs is disabled. Supabase user IDs (which are random UUIDs) may appear in error context. - Realtime channels. While you're connected we subscribe to
pair:<code>(during pairing) andrelay:<userId>(for live activity). These are transient and contain only the events listed above.
2. What we DON'T collect
- No analytics. No Google Analytics, Mixpanel, PostHog, Amplitude, Segment, Hotjar, FullStory — none of it. We don't know which buttons you click.
- No third-party trackers. The only external resources the web app loads are Google Fonts (Inter and Material Symbols) and, when configured, Sentry. No advertising pixels, no social-network beacons.
- No file contents. The daemon reads files from your machine to do its job, but it does not exfiltrate file contents to our servers. Only tool-call metadata flows up — see section 6.
- No facial recognition, no biometrics, no location. We don't ask for camera, microphone, or geolocation permissions.
- No marketing emails. We don't have a mailing list. The only emails Supabase sends on our behalf are transactional (sign-up confirmation, password reset).
3. How we use what we collect
- Authentication. Email and password let you sign in to your workspace.
- Agent management. Heartbeats and tool-call metadata power the live UI — the green dot, the Activity tab, the "what is my agent doing right now" view.
- Error monitoring. Sentry events let us notice and fix crashes. We look at stack traces; we do not try to identify individual users from them.
We do not sell your data. We do not share it with advertisers. We do not train AI models on it.
4. Where it lives
- Supabase stores your account, pairings, and any future server-side persistence of agent activity. Encrypted at rest by Supabase; transmitted over TLS. The hosting region is whichever you (or, for the SaaS deployment, we) selected when creating the Supabase project — we have not customized this.
- Sentry receives crash reports when
SENTRY_DSNis configured. US-hosted by default unless the operator picks a different region. - Vercel hosts the web app and processes incoming requests. Standard request logs (timestamps, paths, status codes, user-agent) are kept by Vercel per their retention policy.
- Your browser's localStorage holds tool-call and session history under
agora.usage, capped at 200 tool calls and 50 sessions per connection.
5. Your rights
- Delete your account. Sign in, then delete your account from the Supabase Auth flow (UI surface is in progress — in the meantime, email the contact below and we'll do it manually). Account deletion removes your auth row and any server-side data tied to it.
- Export your data. Tool call and session history lives in your browser; you can dump it from devtools today (
localStorage.getItem("agora.usage")). For server-side data, email the contact below. - Clear local history. Clearing site data for the Agora domain in your browser wipes localStorage, including all recorded tool calls and sessions.
6. The daemon on your machine
The agora-relay daemon is the bridge between the web UI and the CLIs on your computer. Being honest about what it does locally matters more than any cloud-side promise we could make.
What it runs
- Spawns the
claudeCLI as a subprocess (and, soon,codexandcursor) when the web UI asks it to. - Forwards the CLI's stream-json output back up to the web UI in real time, so you can watch your agent work.
What it reads
- Files only under explicit allowlisted roots: by default,
~/.claude/,~/.claude.json,~/.openclaw/, and the working directory the daemon was launched in. Operators can extend this withAGORA_RELAY_ALLOWED_ROOTS. - File writes are off by default. To enable, the operator must set both
AGORA_RELAY_ALLOW_WRITE=1andAGORA_RELAY_ALLOWED_WRITE_ROOTS. Until then, every write attempt throws.
What it writes locally
- Configuration to
~/.agora/config.json. - Logs to
~/.agora/logs/.
What it sends up to our servers
- Heartbeats, tool-call metadata, and session results — exactly the items in section 1. Not file contents, not shell environment variables, not the contents of your home directory.
7. Subprocessors
We rely on these third parties to run Agora. Each has its own privacy policy that governs data they handle on our behalf.
- Supabase — auth, database, realtime channels.
- Sentry — error monitoring (when
SENTRY_DSNis configured). - Vercel — web hosting and edge networking.
- Google Fonts — serves the Inter font and Material Symbols icon set used by the UI.
8. Changes to this policy
When we change something material, we'll bump the "Last updated" date at the top and, if the change affects what we collect or who we share it with, surface a notice in the app on your next sign-in. Cosmetic edits (typo fixes, link tidying) won't trigger a notice.
9. Contact
Questions, deletion requests, or "you forgot to mention X" emails go to: TODO: fill in a real contact email before launch — for now, file an issue at the GitHub repo linked in the footer.