Last updated: 2026-09-07
Perch is an independent, open-source client for Hermes Agent. It is not affiliated with, endorsed by, or supported by Nous Research.
This document is the third of three forms that must say the same thing. The other two are docs/store/play-data-safety-answers.json (Google Play Data Safety) and the iOS privacy manifest (ios.privacyManifests in app.config.ts) (Apple privacy manifest and nutrition labels). If you find this page disagreeing with either of them, the disagreement is the bug. Please tell us.
Perch operates no servers. There is no relay, no device registry, no account, and no backend of ours anywhere in the path. Everything you type goes to the Hermes Agent you run, at an address you supply, using a key you hold. We never see it, because there is nowhere for us to see it from.
Two things leave your phone to anyone but your own gateway, and both are described in full below: optional crash diagnostics, only if you switch them on, and an update check that happens on every launch and cannot currently be switched off. Neither carries anything you type, and neither carries your gateway's address.
Perch is maintained by the contributors to the Perch repository. Contact: sunim.54@gmail.com, or the support page for anything that can be public.
These never leave your phone, and we have no way to read them:
Uninstalling Perch deletes all of it. So does Settings → Gateway → Forget, which additionally clears the Keychain entries.
What you type, and what you approve or deny. It goes to the address you entered and nowhere else. Your Hermes Agent may then send it on to whichever model providers you configured on your machine. Those are your arrangements with those providers, not ours. Perch shows you this before your first message and will not send until you accept it.
Model provider keys never touch this app. They live on your gateway.
Diagnostics are off by default and asked for explicitly at first run. If you enable them, crash and performance data goes to Sentry:
| Data | Purpose | Linked to you | Used for tracking |
|---|---|---|---|
| Crash logs | App functionality | No | No |
| Performance diagnostics (frame time, memory) | App functionality | No | No |
| A rotating anonymous device ID | Deduplicating crash reports | No | No |
The device ID is not an IDFA or GAID, is generated locally, and rotates. It is never sent to any Hermes Agent.
What is scrubbed before anything is sent. Crash reports are rewritten on-device first: gateway URLs are redacted, because a self-hosted address is often a Tailscale name or a home IP and is therefore identifying, and sendDefaultPii is off. Your messages, your agent's output, file contents, commands and keys are never included.
Turning it off: Content & safety → Crash reports → off, or uninstall. The toggle closes the reporting SDK the moment you tap it.
Perch is built with Expo, and every time the app cold-starts it asks Expo's update server (u.expo.dev) whether a newer JavaScript bundle exists. That request carries the app's version, release channel and platform, and a random installation identifier, a UUID generated on your device the first time the app runs and stored there.
It carries nothing else: not your messages, not your gateway's address, not your key, and nothing that identifies you as a person. The identifier is not an advertising id, is not shared with advertisers, and is deleted when you uninstall the app.
This one has no off switch in the app today. It is how the app receives fixes without a store update. It is listed here so that the diagnostics toggle is not mistaken for a switch that covers everything leaving the device.
Added 2026-09-09. The summary at the top of this page previously said the only data leaving the phone was optional diagnostics. That was wrong: this check has always run, and a privacy policy that under-describes what leaves the device is the one kind of error that matters most here. The toggle closes the reporting SDK the moment you tap it.
Corrected 2026-09-09: this said "Settings → Diagnostics → Disable". There is no Diagnostics screen and no Disable control; the real ones are named above. A privacy policy that tells you how to stop collection has to name a control that exists.
Not on any setting, not by any code path:
Nothing. No data is shared with third parties. The optional diagnostics above go to Sentry as our processor and to nobody else.
Perch has no push infrastructure, because we run no servers. If you want to be told about approvals while the app is closed, you point your gateway at an ntfy topic. If you use the public ntfy.sh, that server sees your notification text; if you self-host ntfy, nobody does. Perch shows you this trade-off on the setup screen. Either way the traffic is between your gateway and your ntfy, never through us.
Reporting a message opens your own mail client, pre-filled and addressed to sunim.54@gmail.com, showing you the exact text first. Perch transmits nothing itself. The report is only sent if you send the email. The message is hidden on your device either way, and every hide is reversible from Content & safety.
Perch is rated 13+ / Teen. It is a developer tool for people who run their own agent infrastructure, and it is not directed at children.
Because we hold no personal data, there is nothing of yours for us to produce, correct or erase. If you enabled diagnostics and want the crash reports deleted, write to sunim.54@gmail.com and we will remove them from Sentry within 30 days. Step-by-step, with what is deleted and what is kept: delete my data.
Data held by your agent is on your own machine, under your control. Perch cannot reach it and cannot delete it for you.
Material changes are listed here, with the date they took effect. The published page is generated from this policy in Perch's source repository, so the two cannot drift apart.
2026-09-09 — Corrected a statement about ourselves rather than about your data: an earlier version said Perch's commit history "is public, so you can see exactly what changed and when". The source repository is not public yet. The history will show that once it is; until then this list is the record.