Privacy policy
What personal data Haarness Cloud collects, why, who processes it, how long we keep it, and how to exercise your rights.
Privacy policy
This policy explains how Stack Forward LLC (Stack Forward合同会社) (“Haarness”, “we”), Level 9, Ariake Frontier Building Tower B, 3-7-26 Ariake, Koto-ku, Tokyo 135-0063, Japan, handles personal data when you visit haarness.ai or use Haarness Cloud. For personal data about you as a user of the Service we are the controller. For personal data that you put inside a workspace — for example your own customers' data in a repository — you are the controller and we process it for you under the Data processing agreement.
Using Haarness locally is not covered here, with one exception. The open-source CLI, terminal UI and Desktop app keep your work on your machine and send model requests directly to the provider you configure. Apart from the app usage statistics described below, which you can turn off, they send us nothing unless you sign in to Haarness Cloud.
Summary
- We collect what we need to run your account, your workspaces and your billing — and nothing for advertising. There are no analytics, advertising or tracking cookies on the site.
- Your workspace contents stay on your workspace's own encrypted volume. We do not use them, or your prompts, to train models, and we do not sell personal data.
- Prompts you send through the managed router go to the model provider you choose. Our metering records count tokens and cost; they never store prompt content.
- If you turn on notifications in Haarness for iPhone, they reach your phone through Apple. A notification shows the chat's title, the project and computer or the Cloud session's name, and a fixed phrase for what happened, such as “Wants to run a command”. A chat's title usually comes from its first message: a chat Haarness Cloud starts for you is named after the first 80 characters of that message, and other chats get a short title written from it unless you name them. So the start of a prompt can reach Apple through a title. Notifications never contain commands, file contents, questions, your prompts beyond a chat's title, or the agent's output.
- If you turn on notifications in Haarness for Android, they reach your phone the same way through Google (Firebase Cloud Messaging), with the same content, so the same applies to Google.
- The Haarness apps send us daily usage counts — never prompts, code, file names or paths — so we
can see what to fix and improve. Turn them off in the app's Settings, with
haarness telemetry off, or withHAARNESS_TELEMETRY=0. - If you report an agent's reply in a Haarness app, we keep your report with the reply's text, so we can review it after the chat is gone.
- You can export workspaces, revoke devices and keys, and delete your account yourself, on the web or in the Haarness apps (how to delete your account), and ask us for a copy of your data at [email protected].
What we collect
| Category | Data | Source |
|---|---|---|
| Account | Name, email address, verification status, password hash (Argon2, never the password itself), account and project names, memberships and invitations | You |
| Google sign-in (optional) | Google account identifier, email, name, profile-picture URL and, for Google Workspace accounts, the domain | Google, when you choose Continue with Google |
| Sign in with Apple (optional) | Apple account identifier, email (or the private relay address Apple makes for you), the name you choose to share the first time, and a token Apple issues that we keep, encrypted, only to revoke your Apple sign-in when you delete your account | Apple, when you choose Continue with Apple |
| Passkeys (optional) | For each passkey you add: its public key and credential identifier, the identifier of the password manager or security key that keeps it (its AAGUID) and the name we show for it, whether it syncs between your devices, its signature counter, and when it was added and last used. The private key never leaves your device or password manager, and we never see your face, fingerprint or screen lock | Your browser, when you add a passkey |
| Sign-ins and devices | Browser user agent; IP address for email/password sign-ins and device-code approvals; device labels for signed-in CLI, Desktop, iPhone and Android clients; sign-in and last-use times; for Haarness for iPhone, the phone's notification token, the app's version and language, and the tokens of its Live Activities; for Haarness for Android, the phone's model and Android version (its device label), its Firebase Cloud Messaging token, the app's version and language, and the chats its live updates follow | Your browser and clients |
| Billing | Plan, subscription status, ledger entries, payments, refunds and disputes; Stripe customer and payment identifiers; the billing details Stripe returns to us in payment notifications. We never receive or store full card numbers | You, Stripe |
| Usage | Per-request metering: model, token counts, cost, timings, request identifiers — not prompt content. Compute, storage and egress meters per workspace | The Service |
| App usage statistics | From the Haarness desktop app and CLI, at most once a minute and normally every few hours: a random identifier the app creates for each installation; the app's version, operating system, processor type and build; and for each day, counts of chats and turns (completed, failed, interrupted, run by subagents, scheduled), tokens, the app's own cost estimate, tool calls and tool errors by tool name, files changed and lines added and removed, split by model provider and model name (named only for providers and models built into the app; any other provider or model, such as one you set up yourself, a fine-tune or a cloud deployment, is counted as custom or other). Linked to your account while the app is signed in to Haarness Cloud, anonymous otherwise. Never prompts, responses, code, file contents, file names or paths | Your Haarness apps |
| Workspaces and agents | The files, repositories, conversation transcripts and outputs on your workspace volume; agent and session settings; the names of environment variables and your SSH public key; SSH identities and environment values you provide (stored encrypted); schedule prompts and run history | You |
| Requests waiting on you and notifications | From the computers you connect for remote control and from your Cloud sessions: the chat title (which can be the start of the chat's first message), project name, kind of request (such as running a command) and times of approvals and questions waiting on you, and of chats that finished — never the command, the question, prompts beyond a chat's title, or outputs. Your notification choices, and a copy of each notification we send | Your connected computers and Cloud sessions, you, the Service |
| Reports of an agent's reply | When you report a reply in Haarness for iPhone or Android: the reason you choose, your note, the reply's text (up to 8,000 characters), the model and provider when the app knows them, where the reply appeared (the computer and project, the shared chat or the Cloud session, and the chat's and reply's identifiers), which app you used and when | You |
| Marketplace | Plugins, profiles and reviews you publish, the author name and email you attach to a published plugin, abuse reports you file | You |
| Communications | The email address and content of service emails we send you (verification, security, billing); your messages to support | You, the Service |
| Security records | An append-only audit trail of security-relevant actions on your account (sign-ins, key and device changes, workspace lifecycle, billing adjustments) | The Service |
Our servers' request logs record, for each request, the method, the route pattern (such as
/api/v1/workspaces/{id}, not the actual path with its identifiers), the status, how long it took
and a request identifier — ours, or one your client sent. They do not record IP addresses, query
strings, headers (including authorization headers and cookies), request or response bodies, or
prompt content. Error messages from our payment, sign-in and hosting providers are shortened and
stripped of email addresses and credentials before we log or store them, and our logs of service
emails show only the kind of email and a masked address, never its content.
We do not knowingly collect data from children under 16, and the Service is for people aged 18 or over.
Why we use it, and our legal basis
| Purpose | Legal basis (GDPR / UK GDPR) |
|---|---|
| Create and run your account, sign you in, run your workspaces, agents and schedules, route model requests you make | Performance of our contract with you |
| Take payments, meter usage, keep a ledger, issue invoices | Contract; legal obligation (accounting and tax records) |
| Send service emails: verification, password reset, security alerts, billing and policy notices | Contract; legitimate interest in keeping accounts secure |
| Detect and prevent fraud, abuse and security incidents; enforce the Acceptable use policy; keep audit records | Legitimate interests in protecting users and the Service |
| Answer support requests | Contract; legitimate interest |
| Review the agent replies you report, and use what we learn to improve content filtering and moderation | Legitimate interest in keeping Haarness safe, and in offering the reporting that app stores require of apps with AI chat |
| Comply with legal requests and defend legal claims | Legal obligation; legitimate interest |
| Sign in with Google | Contract — only if you choose it |
| Show what is waiting on you, and notify your iPhone or Android phone when an agent needs you or finishes | Contract — notifications only once you turn them on in the app |
| App usage statistics: see which features, models and tools are used and how reliably, to fix problems and decide what to improve; show you your own statistics | Legitimate interest in improving Haarness. You can object at any time by turning them off in the app (Settings), with haarness telemetry off, or by setting HAARNESS_TELEMETRY=0; the app then sends nothing more |
We do not use personal data for advertising, profiling or automated decisions with legal or similarly significant effects. We do not send marketing email without your consent.
Who we share it with
We share personal data only with the service providers that run parts of the Service for us — hosting, storage, payments, email and, for the managed router, the model provider you select. Each is bound by a contract that limits its use of the data to providing its service to us. The current list, with what each receives and where, is on Subprocessors.
- Model providers. When you use a model through the managed router or a cloud agent, the request — including the prompt, files and tool results the agent sends — goes to that model's provider to generate the response.
- Stripe processes payments as our processor and, for payment fraud prevention and compliance, as an independent controller under its own privacy policy.
- Google receives your sign-in request only if you use Google sign-in, under Google's own privacy policy.
- Apple delivers the notifications of Haarness for iPhone, once you turn them on: it receives the phone's notification token and what each notification shows — the chat title, the project, computer or Cloud session name and a fixed phrase for the kind of request. A chat's title can be the start of its first message (see above); commands, file contents, the rest of your prompts and the agent's output are never sent.
- Google delivers the notifications of Haarness for Android through Firebase Cloud Messaging, only once an Android phone with Haarness registers for notifications: it receives the phone's notification token and the same content as Apple, as a data message the app turns into the notification. Commands, file contents, the rest of your prompts and the agent's output are never sent.
- Other users see what you share with them: your name and email in shared accounts, and what you publish to the marketplace.
- Authorities, when the law requires it. We review each request and disclose only what is legally required.
- A successor, if our business is merged or sold, under this policy and with notice to you.
International transfers
Cloud workspaces run in the US East (Ashburn, Virginia, United States) region. Some of our providers are based in, or process data in, the United States and other countries. Where personal data from the European Economic Area, the United Kingdom or Switzerland goes to a country without an adequacy decision, we rely on the European Commission's Standard Contractual Clauses (and the UK addendum), or on the provider's certification under the EU–US Data Privacy Framework, with additional safeguards where needed. Ask [email protected] for a copy of the relevant safeguards.
How long we keep it
| Data | Kept |
|---|---|
| Account profile, sign-in identities and passkeys, memberships | While the account exists, or until you remove the identity or passkey |
| Browser sessions and native-client sign-ins | Until they expire or you revoke them (sessions last up to 30 days; native sign-ins up to 90 days), then deleted within 30 days |
| Email verification and password-reset links | 30 minutes, then deleted within a day |
| Device-code approvals, sign-in attempts, one-time codes | Deleted a day after they expire |
| Notification tokens of Haarness for iPhone | Until you sign out of the app, remove the phone or the sign-in ends, then deleted within 30 days; Live Activity tokens 12 hours at most |
| Notification tokens of Haarness for Android | Until you sign out of the app, remove the phone or the sign-in ends, then deleted within 30 days; live update registrations 12 hours at most |
| Requests waiting on you and finished chats | Deleted a day after they are answered or opened, and after 7 days at most |
| Workspace contents | Until you delete the workspace — its volume is destroyed immediately. A stopped workspace on an account with no plan and no purchased credit is deleted automatically after 30 days |
| Workspace backups | The 7 most recent per workspace; older ones are deleted |
| Workspace exports | Until the account is deleted |
| Schedule prompts and run history | Until you delete the schedule; finished runs are deleted after 30 days |
| Usage metering, ledger, payments, invoices, Stripe notifications | As long as accounting and tax law requires after the transaction, then deleted |
| App usage statistics | 400 days per day of statistics, then deleted; an installation that has not reported for 400 days is deleted with everything it sent |
| Audit trail | While the account exists, then only as long as needed for security, fraud prevention and legal claims |
| Support conversations | While the account exists |
| Reports of an agent's reply | One year after you send them, then deleted, whether or not we have reviewed them |
| Copies of the service emails and notifications we sent | 30 days, then deleted |
When you delete your account (in account settings or the Haarness apps, as Delete your Haarness account shows) or ask us to, we delete the account, its workspaces, volumes, backups and exports, your sign-in identities, the usage statistics of the apps linked to you and your reports of agents' replies, within 30 days, keeping only the financial and audit records listed above. Sign-ins, devices and keys end at once, and a paid plan is cancelled at once.
How we protect it
Workspaces run on separate machines with their own encrypted volumes; the gateway only connects a client to the workspace its short-lived ticket names. Session tokens, API keys, router keys and attach tickets are stored hashed and shown to you once. Secrets you give agents are encrypted at rest. All traffic uses TLS. More on the Security page.
Your rights
Depending on where you live — including under the GDPR, the UK GDPR, the California Consumer Privacy Act and Japan's Act on the Protection of Personal Information — you have the right to:
- access your personal data and get a copy of it;
- correct inaccurate data;
- delete your data;
- port data you gave us, in a machine-readable format;
- object to processing based on legitimate interests, and restrict processing;
- withdraw consent where processing is based on consent;
- not be discriminated against for exercising these rights.
What you can do yourself today: export any workspace (Export on the workspace page), delete workspaces and sessions, revoke devices and keys, read your full usage and ledger in Billing, and delete your account (Delete account in account settings, or in the Haarness apps). For everything else — a copy of your account data, correction — email [email protected] from your account's address. We confirm it is you, then answer within one month (extendable by two months for complex requests, in which case we tell you why).
You also have the right to complain to a data-protection supervisory authority, in particular in the country where you live or work. Our lead authority is the Personal Information Protection Commission of Japan. We would appreciate the chance to address your concern first.
We do not sell or “share” personal information as those terms are defined in the California Consumer Privacy Act, and we do not use sensitive personal information to infer characteristics about you.
Representatives
EU representative: none appointed yet (write to [email protected]). UK representative: none appointed yet (write to [email protected]).
Changes
We will update this policy when what we collect or who processes it changes. For material changes we notify you by email or in the Service before they take effect. The date at the top of this page shows the current version.
Contact
Privacy requests: [email protected] · Stack Forward LLC (Stack Forward合同会社), Level 9, Ariake Frontier Building Tower B, 3-7-26 Ariake, Koto-ku, Tokyo 135-0063, Japan