← Scarf

ScarfGo & Scarf — Privacy Policy

Last updated: 2026-10-05.

Plain summary

Scarf and ScarfGo are companion clients for the open-source Hermes AI agent. Both apps connect from your device to a Hermes host you (or your team) operate. Your content — chats, sessions, files — stays on your device and your Hermes hosts, and the developer never receives it. The macOS app sends usage statistics to the developer to guide development. They carry a random ID for your install but never your name, account or content, and you can switch them off in Settings. ScarfGo on iOS sends nothing to the developer itself (Apple may share crash and usage data with the developer if you allow it; see "App Store and TestFlight"). A few features contact other services, each listed under "Network connections the apps make": for example, the Mac app sends your Nous Portal key to Nous to list its models, and project dashboards can load web pages. One optional feature, Live Voice, streams your voice directly from your device to OpenAI and shares recent chat messages and Hermes's replies with OpenAI, and only after you start a session and agree once; see "Voice features" below.

Apps covered

What data the apps access

On your device

Voice features

Voice is off until you use it. Hermes Voice and Live Voice also appear only when your Hermes host's version supports them. Each feature keeps to a different boundary:

Both apps request microphone permission the first time a voice feature needs it, and the permission text states which features use it. Microphone access is never used outside a dictation hold, a voice conversation, terminal-mode voice, or a Live Voice session you started.

On Hermes hosts you configure

Same as the Hermes agent privacy policy (or whoever operates your Hermes deployment). The apps do not introduce any new server-side data collection.

Usage analytics (Scarf for macOS only)

Starting with v2.20, Scarf for macOS records product-usage events — for example "a chat session was started", "a settings field was changed", "the app reconnected after wake" — and sends them to the developer's analytics service (ScarfMon, at api.swiftstats.co, built on the open-source swift-stats package). Events wait in a small queue on your Mac (~/Library/Application Support/com.scarf.app/swift-stats/) and are sent in batches.

What an event contains. An event name plus a small set of properties drawn from closed lists in the app's source (e.g. mode: resume, source: menu_bar), with counts and durations rounded into coarse buckets. Between them, the events cover things like: which sections you open; which Hermes setting you changed (its name, such as display.streaming, never its value); whether connections, reconnects, agent turns, session resumes, model checks and Hermes version checks worked, and if not, the broad kind of failure; roughly how many tool calls an agent turn made; whether a message had an attachment or was spoken; whether you approved or denied a permission prompt; which bot, project, template and skill actions you took, and at which step a template install failed; which messaging platform you set up (e.g. telegram); which kind of item you created, changed, ran or removed in the Cron, Kanban, MCP Servers, Credential Pools, Webhooks, Quick Commands and Personalities sections — the kind and the action only, never its name, contents or provider; and whether you used Live Voice and accepted or declined its consent prompt. A few values are exact numbers: the Hermes version your host runs (e.g. 0.21.3), how many connection failures in a row made Scarf pause reconnecting to a host, and the length of each usage session in seconds. Properties never contain chat content, prompts, file paths, hostnames, server names, profile names, SSH keys, or any other free-form text from your environment. The app also records when it opens, and when a usage session starts and ends. Every event carries its time (to the millisecond), a random ID for the current usage session, a running event counter, the app's ID, and the hashed install ID described below.

Only while you're using it. Scarf keeps running in the background, but it doesn't record analytics while nobody is at the Mac: events from background work (update checks, slow-operation reports, connection monitoring) are dropped then, and results that land while you're away — an agent turn finishing, a reconnect after sleep — are held on your Mac and recorded only when you come back, or discarded if Scarf quits first.

Slow-operation reports. While Performance Diagnostics (Settings → Advanced) is set to Signpost only (the default) or Full, Scarf also reports operations that took unusually long — for example a chat render over 100 ms or an SSH round trip over 5 seconds — as a perf_measure event carrying only the kind of operation and a rough duration, at most 30 per kind each time the app runs (the count starts again when you change the Performance Diagnostics mode). Setting Performance Diagnostics to Off stops these reports, and so does turning analytics off.

Device and app details. Each batch of events includes the app's version, build and bundle ID; the analytics library's version; your macOS version; your Mac's model identifier (e.g. Mac15,3) and processor type (arm64 or x86_64); your language and region settings (e.g. en_US, US); and whether the build is a debug or pre-release build. Screen size and light/dark appearance are not collected.

What identifies an event. The analytics library creates a random install ID (a UUID) on your Mac and keeps it in its own preferences file, ~/Library/Preferences/com.wizemann.stats.com.scarf.app.plist. Every event carries a salted SHA-256 hash of that ID, never the ID itself. The same hash is sent for as long as the ID exists, across launches and updates, so the developer can count active installs and see how one install's use develops over time, such as how many sessions it has and whether it comes back. The ID belongs to one installation, not to you: there is no user ID, no account, no hardware serial or advertising identifier, and nothing that ties it to your name, your Hermes hosts, or your content. The analytics service receives your network address with each batch, as any web server does. Its code does not store it, but Cloudflare, which hosts the service, may record it in request logs that are kept for a short time.

How long it's kept. The analytics service deletes raw events after 90 days and keeps aggregated daily counts after that. It also keeps one record per hashed install ID of the first day that install was seen, used to tell new installs from returning ones.

Opting out. Settings → Advanced → Usage Analytics. Turning it off stops collection immediately, deletes any events still queued on your Mac, and persists across launches and updates. It does not delete the install ID: the ID stays in that preferences file, unused, and if you turn analytics back on your install continues under the same ID. To forget the ID as well, quit Scarf and run defaults delete com.wizemann.stats.com.scarf.app installUUID and then defaults delete com.wizemann.stats.com.scarf.app seq in Terminal. Scarf then creates a new random ID and restarts the event counter the next time it sends statistics. The new ID isn't linked to the old one by any identifier, although the device details sent with each batch stay the same. (Deleting the whole preferences file also deletes your opt-out choice, so analytics would be on again at the next launch.) Analytics is enabled by default; the toggle is one click.

Builds from source. A copy of Scarf you build yourself from the public repository sends nothing: the key that lets the app send statistics is not in the repository.

What it is not. No third-party ad or analytics SDKs (swift-stats is the developer's own open-source package), no ad identifiers, and no reading of your Hermes content for analytics. Beyond the Hermes version, the outcomes summarized above, a rough count of how many servers you have set up (reported at launch), and whether a server is local or reached over SSH (reported when you add or remove one and when Scarf connects), nothing about your Hermes setup is reported.

ScarfGo (iOS) sends nothing to the developer itself. The iOS app contains no analytics recorder and makes no analytics network calls. Live Voice (above) is the one iOS feature that sends your data to a third party, and only to OpenAI, only while a session you started is open.

What data the apps DO NOT collect

Network connections the apps make

That's the complete list. Apart from links you choose to open in your browser, neither app makes any other network request.

Push notifications

ScarfGo contains a push-notification skeleton for pending permissions on a remote agent run, but it is switched off in the code (apnsEnabled = false): the app never registers for remote notifications, so no device token is created or sent anywhere. If that changes, this policy will say so first.

App Store and TestFlight

If you use ScarfGo from the App Store, Apple shares app usage and crash data with developers only from people who have chosen to share with app developers (on iPhone: Settings → Privacy & Security → Analytics & Improvements → Share With App Developers).

If you join the ScarfGo beta via TestFlight, Apple shares information with the developer under its TestFlight terms: for example the email address you were invited with (testers who join through a public link aren't invited by email), install and session counts, your device model and iOS version, crash reports, and any feedback or screenshots you send through TestFlight. Apple's terms govern that data.

Security

Children's privacy

Neither app is directed at children under 13 and we do not knowingly collect any data from them.

Your rights

The only data that reaches a server the developer operates is the macOS usage statistics described above. You can stop them at any time (Settings → Advanced → Usage Analytics). They are tied to a hashed install ID, not to your name or account, so the developer cannot find "your" events from who you are. To have them deleted, send your install ID (shown by defaults read com.wizemann.stats.com.scarf.app installUUID in Terminal) to the contact address below. The developer can then delete the raw events recorded under it; aggregated counts that no longer carry the ID remain. To remove all app-stored data from your device:

Your Hermes host's data (~/.hermes/) stays untouched, including the sidecar files and any secrets block Scarf wrote there — that's yours to manage.

Contact

Questions, concerns, or notice of a security issue: alan@wizemann.com.

Changes

Material changes to this policy will be announced on the Scarf wiki and recorded here with a new "Last updated" date. Beta testers will see a TestFlight build note when policy changes affect data handling.