Privacy
The apps collect nothing and send nothing to us on their own. LeSearch AI has no analytics and no servers of ours in the data path. Your phone and watch talk straight to machines you own, over a network you already control. The exceptions worth knowing about — a problem report you choose to send, the optional account that goes with it, the daemon's optional heartbeat and push notifications passing through Apple — are each explained in full below.
Who this is
LeSearch AI is made by LeSearch AI (Arya Teja Rudraraju). Questions about any of this: aryayt55@gmail.com.
What the apps send, and to whom
When you pair a machine, the app stores that machine's address and the access token the machine itself minted. From then on the app makes HTTP requests directly to that machine — its stats, its agent sessions, its terminal output, and the commands you send back. Those requests go to your machine and nowhere else. They do not pass through any server we operate, because we do not operate one.
Nothing is uploaded to us: not your prompts, not your terminal output, not your hostnames, not your source code, not usage statistics, not crash counts, not an identifier for you or your device. In App Store terms, the label is “Data Not Collected” — and it is accurate.
The daemon's heartbeat
The meshd daemon you install separately on your machines may send one
anonymized heartbeat per day: its version, its platform, its uptime in whole hours,
coarse feature counters (how many times a class of feature was used, as a number),
and a random install id.
That is the whole list. It carries no commands, no keystrokes, no terminal or screen
content, no hostnames, and no identifier tied to you as a person — the install id is
a random string that tells us a daemon exists, not whose it is.
It exists so we can tell which versions and platforms are actually alive out there.
If you would rather it sent nothing at all, turn it off with
MESHD_TELEMETRY=off in the daemon's environment — the daemon works
identically either way. The apps themselves never send a heartbeat.
The other exception: push notifications
If you turn on notifications, your device registers with Apple Push Notification
service and gives that push token to your own machine, which stores it
locally in ~/.mesh/. When an agent on that machine needs you, the
machine signs a request to Apple's servers and Apple delivers the alert to your
phone and watch.
This means the alert text — typically the machine name, the agent session name, and the line the agent is asking about — transits Apple's infrastructure, the same way every iOS push notification does. It is encrypted in transit and we never see it, but it is not end-to-end private from Apple. If that matters for what your agents work on, leave notifications off: the app still shows every waiting agent when you open it, and the watch complication still keeps its count.
What stays on your devices
- Paired machine names, addresses and access tokens.
- Your preferences, and the last snapshot of your mesh so the watch face has something to show before it reaches the network.
- On each machine, a ledger of secrets the daemon had to redact
(
~/.mesh/exposures.json, readable only by you). It holds the kind of secret, its prefix, a six-character fingerprint and a count — never the secret itself. Agent and terminal text is redacted on the machine before it reaches your phone, your watch or Apple's push servers.
Deleting the app deletes all of it. To revoke a phone's access from the other side, run
mesh token rotate on the machine. That locks the app out of the
machine and forgets every device registered to receive notifications from it, so a
phone you have revoked stops receiving them too. Your own phone re-registers the next time
you open the app and pair.
Report a problem (only when you tap Send)
Settings → Report a problem sends a report to us only when you tap “Send to LeSearch AI”. What leaves the phone is listed above that button and is exactly this: the kind (bug / idea / other), your title and note, the app version and build, the device model and iOS version, a contact e-mail if you typed one, a screenshot or screen recording if you picked one yourself, and — when the toggle is on — a diagnostic bundle (recent event titles, machine names and daemon versions, the last error the app saw) that the phone redacts first: anything shaped like a key or token is replaced by its kind before the bundle exists. Tokens, file contents and screen frames never leave the phone this way; the app cannot capture a screenshot by itself.
Reports land in a database we run (Supabase, project zmisjteztezaqfflwbgf)
where the app may only ever add a row — it cannot read anyone's reports back.
A worker turns each report into a public GitHub issue on
LeSearch-AI/mesh
labeled from-users, after redacting every string again. Your e-mail address
is never copied into the issue; only a short hash of it is, so two reports from the same
person can be matched. An attachment is linked by a URL that expires after seven days.
To have a report deleted, mail the address above with the reference the app showed you.
Accounts are optional
There is nothing you must sign up for. Pairing is a code your own machine shows you; the trust lives between your devices and goes no further. Settings → Account lets you create an account with an e-mail and a password if you want us to be able to reply to your reports; it is used for nothing else. The session token is kept in the iOS Keychain. Sign out removes it; to delete the account, mail the address above.
What Apple collects on its own
App Store and TestFlight distribution is Apple's, not ours. Apple gives us aggregate installation counts, opt-in crash reports, and any feedback you deliberately send. We use crash reports to fix crashes and feedback to fix the thing you told us about. Apple's handling of that data is covered by Apple's privacy policy.
Children
This app is a developer tool and is not directed at children under 13.
Changes
If any of this ever changes — in particular if a hosted relay is ever added, which would be a real change to everything above — the change will be described here and called out in the app's release notes before it ships, not after.