Legal
Data handling
Draft — pending attorney review
A technical summary of where data lives, how long it’s kept, and what crosses the network.
Effective date: not set yet. This draft isn’t in effect; the date is set on the day the final version is published.
Who we are
Rooted Reality LLC, a Michigan limited liability company (“Rooted Reality”, “we”)PO Box 5001, Muskegon, MI 49445
hello@rootedreality.com
Coding agents
Rooted Reality for coding agents
These sections cover the recorder and the desktop app on Mac, where the private beta is forming now.
Where each kind of data lives
Draft — pending attorney review
- The record (your Mac)
~/Library/Application Support/Blackbox/blackbox.sqlite3when the recorder starts at login, or~/Library/Application Support/com.rootedreality.agents/blackboxwhen you start it from the desktop app. A SQLite database with its write-ahead files. It holds chats, programs, events, connections, daily summaries, facts about program files, the recorder’s own runs, its settings and an install ID.- Recorder log (your Mac)
~/Library/Logs/Blackbox/blackbox.log, readable only by your user account. Each time ablackboxcommand starts, a log that has reached 20 MB is moved aside, keeping one older copy; while the recorder runs, the log can grow past that. When the recorder starts at login, it also writeswatch.out.logandwatch.err.login the same folder.watch.err.logholds the same lines as the log and is moved aside only when the login item is installed;watch.out.logis never moved aside.- Exports (your Mac)
- Only if you run the recorder’s export command: a JSON file in an exports folder beside the record, readable only by your user account, or in a folder you name with
--out. It includes the install ID. The desktop app never runs it. - Labels (your Mac)
labels.sqlitein the desktop app’s own folder: a session ID, a time, the kind of event (ormodel.switchfor a model change found by comparing a session with its transcript), your label (up to 80 characters) and your note (up to 200). A label or note with a slash or a backslash in it is refused, so it can’t hold a folder path.- What you agreed to (your Mac)
- Which version of the beta agreement and of the recording consent you agreed to, and when, in a small file in the desktop app’s own folder. It isn’t sent anywhere.
- Goes out, carrying nothing from the record
- Host-name lookups, to your DNS servers. Update checks, to rootedreality.com, once you have agreed to the beta agreement. The app doesn’t install updates itself during the beta. If a newer version exists, it tells you; you then download it from rootedreality.com and replace the app.
- Our database
- Waitlist sign-ups (email address, agents, computer, call yes or no, sign-up time), update-list sign-ups (email address, the page you signed up on, the referring page without its query string, sign-up time, and when you unsubscribed) and rate-limit entries (a SHA-256 hash of an IP address, the name of the form or request, the time), in Postgres hosted by Neon in the AWS us-east-1 region.
- Never recorded
- Your conversations with the agent. What's inside your files. The contents of network traffic.
How long it’s kept
Draft — pending attorney review
- Events and connections
- 14 days. There is no control to change this yet.
- Chats, programs and daily summaries
- 365 days. There is no control to change this yet.
- When deletion runs
- Once an hour, while the recorder is running. When it isn’t running, nothing is deleted until it runs again.
- Kept until you wipe
- Facts about program files (path, size, fingerprint, signing details), the install ID and settings, and the latest note of each kind about the recorder’s own health.
- Recorder log
- Moved aside at 20 MB each time a
blackboxcommand starts, keeping one older copy; it can grow past that during a long run. The login item’s two logs are handled as described above. Wiping the record keeps all of them. - Labels
- Until you delete them in the desktop app.
- What you agreed to
- Until you delete the file. Moving the app to the Trash doesn’t delete it.
- Waitlist sign-ups
- Until you ask us to remove them. A deleted entry can stay in our database host’s restore points until they expire.
- Update-list sign-ups
- Until you ask us to remove them. Unsubscribing doesn’t remove an entry: it stays, marked as unsubscribed, so no more digests go to it.
- Rate-limit entries
- Deleted once they are more than two hours old, when a later request is allowed.
- Hosting logs and analytics
- Kept by Vercel, for a limited period set by our Vercel plan.
The network boundary
Draft — pending attorney review
- Desktop app
- It contacts nothing until you agree to the beta agreement. After that, the update check goes to one host, rootedreality.com. The app doesn’t install updates itself during the beta. If a newer version exists, it tells you; you then download it from rootedreality.com and replace the app. That download happens in your browser, not in the app. The app’s window may load and connect to the app itself only. No analytics or crash reporting.
- Recorder
- Forward host-name lookups of a fixed list, through the Mac’s own resolver (
getaddrinfo): the whole list at once when it starts (up to 16 lookups at a time), then again every 300 seconds, one name every 100 ms. No reverse lookups. No web requests: it has no HTTP client.--no-dnsturns the lookups off; the login item leaves them on unless it was installed with--no-dns, and the desktop app’s Start recording button always leaves them on. - The 38 names it looks up
- api.anthropic.com, statsig.anthropic.com, mcp-proxy.anthropic.com, downloads.claude.ai, api.openai.com, chatgpt.com, api.githubcopilot.com, copilot-proxy.githubusercontent.com, generativelanguage.googleapis.com, cloudcode-pa.googleapis.com, oauth2.googleapis.com, api2.cursor.sh, api3.cursor.sh, repo42.cursor.sh, server.codeium.com, ampcode.com, openrouter.ai, github.com, api.github.com, codeload.github.com, objects.githubusercontent.com, raw.githubusercontent.com, registry.npmjs.org, pypi.org, files.pythonhosted.org, static.crates.io, index.crates.io, crates.io, huggingface.co, cdn-lfs.huggingface.co, upload.pypi.org, ghcr.io, npm.pkg.github.com, registry-1.docker.io, registry.yarnpkg.com, proxy.golang.org, rubygems.org, sts.amazonaws.com.
- What the lookups show
- Your DNS servers see that this Mac asked for these names, and when. A lookup never includes an address or a name a program used.
- The update check
- An HTTPS GET to
rootedreality.com/api/releases/agents/update/{system}/{chip}/{version}, withAccept: application/jsonand a user agent naming the updater and its version. No body, no install ID, no account. It starts only after you agree to the beta agreement, then runs when you open the app. Vercel, which hosts this website, keeps the request in its logs for a limited period set by our Vercel plan; we don’t read those logs. - Downloading an update
- The app doesn’t install updates itself during the beta. If a newer version exists, it tells you; you then download it from rootedreality.com and replace the app. The app’s Download button opens that download in your browser. It is the newer version’s installer: the download link sends your browser on to GitHub, where it is stored. Vercel and GitHub each see your network address and your browser’s user agent, like any web request.
- Downloading the installer
- The download link on rootedreality.com sends your browser on to GitHub, where the installer is stored. Vercel and GitHub each see your network address and your browser’s user agent, like any web request.
Changes to this page
Draft — pending attorney review
If what this page describes changes, we’ll publish the new version on this page and change the effective date at the top of it. If a change is material, we’ll also email the people on our waitlist, and anyone on our update list who hasn’t unsubscribed, when we publish it.