Privacy note · FM-01
What it sends home.
PhoneCanDo shares anonymous usage stats so we can see how many phones run it and what breaks. It is on by default and one switch turns it off. Your prompts, sessions, files and keys never leave the phone for us.
Hi from a phone!
Still running. Opened the terminal, finished setup step 2, the engine started fine. Nothing broke.
P.S. no prompts, files or keys in here.
— an install ID, not a name
- To
- our own server
- On
- Cloudflare
- Sold
- never
- No cookies
- Nothing sold or shared
- One switch turns it off
- Delete my data, any time
- Development builds send nothing
- Your prompts stay on the phone
tl;dr · for the busy
The short version
On by default
Release builds send usage stats by default. A notice on first launch says so, and nothing is sent until you answer it.
One switch
Settings → Privacy has one switch that turns it off. Off means nothing more is sent, and whatever was waiting to be sent is thrown away.
A delete button
Delete my data erases what the server holds for your phone, then turns sharing off.
Dev builds keep quiet
Development builds send nothing.
Not for sale
Nothing is sold or shared, and none of it goes into the public code repository.
The packing list
What the app sends
Name tags, minus the names
So we can count the same phone over time, each send carries IDs. None of them is your name, number or account, and the hardware ones are scrambled (hashed) on the phone before they leave it:
Install ID
randomRandom, made on first launch. New after a reinstall, after Reset anonymous ID, or after Delete my data.
Device ID
hash(android id)A hash of Android's ID for this app on this phone. It stays the same across reinstalls and changes after a factory reset.
Device key
hash₂(android id)A second, different hash of the same ID, which only your phone can compute. The server uses it to make sure only your phone can add to or delete your phone's data.
Hardware hash
hash(model + build)A hash of the phone's model and system build details. It groups phones of the same model and build; identical phones on the same build share it, and it changes with a system update.
DRM ID An ID from the phone's DRM system is in the code but switched off, so it is never sent.
The no-fly list
What it never sends
Stays on the phone
- Prompts
- Chats
- Model replies
- Files
- Folder paths
- Anything in the terminal
- Environment variables
- API keys
- Screenshots
- Anything on the screen
- Which apps the agent opened or used
- Contacts
- Messages
- Notifications
- Your IP address
- Precise location
- Advertising ID
- Name
- Phone number
- Android's raw device ID
Your buttons, your call
Your controls
All in the app, under Settings → Privacy:
The switch
Off stops all sending at once. Turn it back on any time.
Delete my data
Deletes every row the server holds for your phone (device, every install, app runs, events, errors, reports), even from before a reinstall or an ID reset, then turns sharing off and makes a new install ID. If nothing was stored, the app says so. Only the 7-day database backups still hold the deleted rows until they expire; there is no other copy.
Reset anonymous ID
Starts over with a new install ID and throws away anything not yet sent. Past data from this phone stays linked to it; use Delete my data to remove it.
Send report
Only when you tap it. Sends your note, the last 50 usage events and the last 2 KB of the engine's log from its last crash, with folder paths, passwords and keys blanked out.
This very page
This website
Page view
One count per page load, to our own server
- The page's path
- /privacy/
- Site you came from
- its name only
- Your country
- yes
- Kind of browser
- phone, computer or bot
- Cookies
- 0
- Third-party scripts
- 0
- Stored in your browser
- nothing
Total1 count
Skipped when your browser asks not to be tracked (Do Not Track or Global Privacy Control).
The cookie jar is empty, on purpose. No cookies, no third-party scripts, nothing stored in your browser.
How many, never who
Page views and downloads are also added up per day, page (or download channel) and country, and those totals are kept for good. They say how many, never who.
The download buttons
The download buttons and the QR code pass through our server, which counts the download (channel, version, country, Android version) and sends you on to the file on GitHub. GitHub counts it too. The computer commands download from GitHub directly.
Shelf life · best before
Where it is kept, and for how long
On Cloudflare, which runs this website and its server and stores the data on our behalf (a database and an analytics store). There is no archive: once its time below is up, data is deleted.
The server's own request logs
3 days, for debugging
Database backups
7 days, so deleted rows are fully gone after that
Usage events
90 days, then deleted
Reports you send
90 days, then deleted
Site page views and downloads in detail
about 3 months
Errors and crashes
180 days, then deleted
Device, install and app-run rows
until you tap Delete my data
Daily site totals
kept for good: counts per page or download channel and country, nothing about you
Who else it calls
Everything else the app connects to
At start · on install
GitHub
To check for updates when the app starts (full and lite), and to download an update when you tap install.
At start · every 5 min
opencode's model catalog
models.opencode.ai, which the engine downloads when it starts and every 5 minutes while it runs, so it knows which models exist.
Your key · direct
The model providers you set up
Straight from your phone with your key. Our server is never in between.
Your call
Whatever you or the agent start
A web search, a download in the terminal.
Still curious?
Every field, and questions
The full list of fields, limits and network calls is the published schema, next to the code that sends it. Questions or a problem: open an issue on GitHub.