Privacy policy

Last updated

This policy explains what personal data hyperstructure ("we", "us") collects when you visit fctl.sh or use app.fctl.sh, the fctl instance we run: why we collect it, who else receives it, how long we keep it, and what you can do about it.

fctl is also open-source software that anyone can run. If you use an fctl instance that someone else runs, its operator is responsible for your data there, and this policy does not apply to it.

The short version

Who we are

hyperstructure runs fctl.sh and app.fctl.sh and is the controller of the personal data described here.

What we collect

When you visit fctl.sh

Cloudflare serves fctl.sh, its installer and its release downloads. Each request arrives with your IP address, your browser's or client's user agent, the address you asked for and the time. We use this only to deliver the site and the downloads, to keep them secure and to fix problems. Our request logs are kept for a few days.

fctl.sh sets no cookies, stores nothing in your browser and loads nothing from other websites.

The install script and fctl host download releases from fctl.sh, and fctl host pulls the default sandbox image from GitHub's container registry, ghcr.io (fctl host image build downloads the image's sources from GitHub instead). It also pulls the images projects choose, from their registries, and downloads a project's repository from GitHub to build the image the project builds from it, when you allow that. Beyond that, the fctl command talks only to the fctl instance you sign in to, and the agents on your hosts to Anthropic and GitHub.

When you use app.fctl.sh

app.fctl.sh is invitation-only: an admin adds your email address, or your organization's email domain, to its allowlist. Each of your addresses is invited on its own, and you can connect them to one account. Without an account, you can ask for early access on its sign-in page.

When email is enabled, we send invitations to app.fctl.sh and to workspaces, and password-reset messages; tell you when your two-factor sign-in is turned on, replaced, turned off or reset by an admin, when a recovery code signs you in, when wrong codes follow your password, and when a passkey is added to your account. That means giving the recipient's address and the message to our email provider.

Cookies and browser storage

app.fctl.sh sets four cookies, all needed for it to work: __Host-fctl keeps you signed in for 30 days, __Host-fctl-oauth protects a Google sign-in for the 10 minutes it may take, __Host-fctl-2fa holds a sign-in that waits for your two-factor code, for 10 minutes, and __Host-fctl-github protects the GitHub sign-in that connects a GitHub account to a workspace, for the 10 minutes it may take. Your theme choice is stored in your browser, and so is a copy of the app's offline page, which it shows when your device has no connection; neither contains personal data. If you ask for early access, your browser keeps the address you asked with, when, and the token that withdraws the request, so that the page shows you are on the list, until you withdraw it or ask with another address. Your browser also keeps which workspaces you fold in the sidebar and the project you last started a session in, so that the app opens as you left it. The task you are writing on the floor stays in your browser too, with the project you chose for it and the files you attach to it, until a session starts with it or you sign out, so that leaving the page doesn't lose it. If you use passkeys, your browser keeps a short hash of the name and email address the app last gave your password manager for them, not the name or address themselves, so that it gives them again only when they change. There are no analytics or advertising cookies.

Why we use it

Purpose Legal basis (EU and UK law)
Running app.fctl.sh for you: signing you in, the workspaces you are in, running and showing sessions, sharing them with the people you choose, sending the notifications you turn on, crediting you in commits when you set a commit email, connecting your hosts, Claude and GitHub Contract
Sending invitations and password resets Contract, and our legitimate interest in letting admins invite people
Keeping your request for early access and inviting you Contract: steps you ask for before one
Signing you in to GitHub when you connect a GitHub account to a workspace, to read which of its repositories you may give the workspace Legitimate interests: keeping each workspace to the repositories its admins may grant
Telling you about changes to your two-factor sign-in and passkeys, and sign-ins with a recovery code Legitimate interests: keeping your account secure
Keeping the services secure and working: rate limits, the audit log, request logs, fixing problems Legitimate interests
Meeting legal obligations and enforcing our terms Legal obligation, and legitimate interests

We don't sell or rent personal data, use it for advertising or profiling, or use your data or code to train AI models.

Who else receives it

Our service providers process personal data on our behalf, under data processing terms:

Provider What for What they receive
Cloudflare, Inc. Hosting fctl.sh and app.fctl.sh: servers, database, storage and logs Everything app.fctl.sh stores, and request data
Resend, Inc. Sending invitations, password resets and two-factor notices, when email is enabled The recipient's address and the message

Services you connect receive data under their own privacy policies:

People you work with see what you share with them: the members of a workspace see its members, with the address each is in it as (not your other addresses), and its admins also see who has two-factor sign-in, its invitations and its audit log; members of a project see its sessions, including transcripts and who took part, and people you share a session with see that session. Admins of app.fctl.sh can see its users with all their addresses and how many workspaces they are in, the addresses that asked for early access with when they asked and who invited them, each workspace's name, avatar, primary admin and size, the GitHub accounts workspaces use, and the audit log of app.fctl.sh, but not what is inside workspaces they aren't members of. When a workspace's primary admin's account is disabled, they see its members' names, to choose who runs it.

Anyone who has a published screenshot's link can open it, without signing in, until it expires: the people who can read the pull request that shows it (everyone, for a public repository), anyone they pass the link to, and GitHub, whose image proxy fetches the screenshot to show it in the pull request. A link holds a long random token, so it can't be guessed, and search engines are asked not to index the screenshots.

Your hosts are machines you control. Their sandboxes keep copies of your repositories, the session's work and Claude's local files, and you are responsible for them.

Profile pictures from Google or GitHub load from their servers, which see the request from your browser.

We may disclose personal data when the law requires it, or when it is necessary to protect the rights, property or safety of our users, others or us. If hyperstructure is reorganized or acquired, personal data may pass to the successor, which will be bound by this policy.

Where data is processed

Cloudflare runs a global network: fctl.sh and app.fctl.sh are served from data centers near you, and app.fctl.sh's database and storage are kept in Cloudflare's data centers. Our providers may process data in the United States and other countries. When personal data leaves the European Economic Area, the UK or Switzerland, the transfer relies on an adequacy decision, such as the EU–US Data Privacy Framework, or on standard contractual clauses.

How long we keep it

Your rights

Depending on where you live, you have the right to access your personal data, to correct it, to have it deleted, to receive it in a portable format, to restrict or object to how we use it, and to withdraw consent where we rely on it.

You use these rights yourself: sign in to app.fctl.sh and open Settings.

The fctl command does the same with fctl account export and fctl account delete. If you can no longer sign in, ask the admin who invited you for a password reset link.

If you asked for early access and have no account, withdraw your request on app.fctl.sh/early-access, in the browser you first asked from: Withdraw deletes it, and the browser forgets your address.

If you are in the European Economic Area, the UK or Switzerland, you can also complain to your data protection authority.

Security

Passwords are hashed with argon2id, sign-in tokens and recovery codes are stored only as hashes, authenticator app secrets, Claude credentials and project secrets are encrypted with AES-256-GCM, and everything travels over HTTPS. For passkeys we keep only public keys. Two-factor sign-in, which you can turn on in Settings, keeps a password alone from signing anyone in. Security has the details. No system is perfectly secure; if a breach affects your data, we will tell you as the law requires.

Children

fctl is made for software developers and is not meant for children. You must be at least 16 to use app.fctl.sh.

Changes to this policy

When our practices change, we update this page and the date at the top. For significant changes, we tell people who use app.fctl.sh, in the app or by email, before the changes take effect.