What we process

Every category of data this service touches, what it is for, how long it stays, and whether you can get it back. Written against the code rather than around it.

The design constraint everything else follows from

We govern your sessions without knowing what they are doing, or why.

That is a structural property, not a promise. Your agent reports one thing: for each file we published into the directory we created, is it present, what is its SHA-256, and what is its file mode. That is the entire vocabulary of the wire protocol. There is no field for what you are working on, no field for a prompt, no field for a result, and no endpoint that would accept one.

So the question "what is this customer building?" is not one we decline to answer. It is one we cannot answer, because the information required to answer it never arrives and there is nowhere in the schema to put it. A governance service that had to understand your work in order to govern it would be a surveillance product with a compliance story attached.

Check it rather than believe it: mw-govctl attest --print-payload prints the literal bytes your machine sends, before it sends them.

The one time we ask anything about you

The access-request form asks who you are and what you intend to test. That is a human telling us about themselves once, at signup, so a closed alpha has known participants — it is not, and cannot become, knowledge of what any session does. Nothing your agents run ever adds to it, and it is deleted on the schedule below while your identity remains.

If that distinction ever stops being true, this page is where it would have to change, and the retention figures on it are read from the code rather than typed beside it.

What we hold

What you type on the access-request form

Exactly whatthe name you chose, an email address, an organization, where you intend to run it, what you plan to test, and the moment you accepted the alpha terms
Why we have itTo know who is in a closed alpha, and to be able to reach you about it. A closed alpha with anonymous participants is not a closed alpha.
How long180 days after the invite is used or expires, then the text is deleted and the invite record stays without it. Swept at boot and on every invite issued.
Where it livesA data file in a private cloud storage bucket, mounted by the service. Not a third-party CRM, mailing list, or analytics product.
Can you see it?Yes — in full, verbatim, at /me and through mw-govctl me.

Your agent's identity

Exactly whatthe name your invite carried, your agent's Ed25519 public key, and the key id derived from it
Why we have itTo verify the signature on everything your agent sends. This is the whole security model: the key is the credential, so a name without a key bound to it would let anyone claim to be you.
How longUntil the enrollment is removed. There is no automatic expiry — an identity that vanished on a timer would silently stop your agents from attesting.
Where it livesThe same private bucket. The public key is public by construction; the private half never leaves your machine and is never transmitted.
Can you see it?Yes — at /me and through the API.

What your agent reports about the files we published

Exactly whatfor each artifact this service installed: its path relative to the governance directory, whether it is present, its SHA-256, and its file mode — plus a timestamp and a single-use random nonce
Why we have itThis is the product. You report what your machine looks like; the service compares it to what it published and returns a signed verdict. The service refuses an observation naming anything other than a file it published, including any absolute path, so this cannot become a channel for your filesystem.
How longNot stored as sent. The resulting receipt is held in memory only — the newest 10000 across all agents — and a restart clears them. Yours was handed to you at the time and verifies without us.
Where it livesProcess memory. Never written to disk.
Can you see it?Yes — whatever is still held, at /me. And you hold your own copy, which is the one that matters.

A digest of your read token

Exactly whatthe SHA-256 of the token, the name it belongs to, the key it was issued against, when it was issued and expires, and whether it has been revoked
Why we have itSo a person at a browser can see their own record. A human cannot sign Ed25519 by hand, so without this the browser route would not exist for them.
How long90 days from issue. Only the digest is stored, so neither we nor anyone who obtains our database can recover the token itself.
Where it livesThe same private bucket.
Can you see it?Its existence, yes — listed at /me. Its value, no: we do not have it.

A digest of your invite code

Exactly whatthe SHA-256 of the code, the name it reserves, when it was minted and expires, and which key redeemed it
Why we have itTo make a code work exactly once, and to hold your chosen name from the moment it is issued — which is what stops two testers being promised the same identity.
How longThe record is kept. The code expires 14 days after minting if unused.
Where it livesThe same private bucket.
Can you see it?Yes — at /me.

Your network address

Exactly whatthe source IP address of your request, and a timestamp
Why we have itTwo reasons, and they are different. Ordinary HTTP access logging, which every web service on earth does. And, for the signup form only, enforcing the one-per-hour limit that stops one caller reserving the whole namespace.
How longThe cooldown entry is held in memory for one hour and is discarded on restart. Access logs follow our hosting provider's default retention.
Where it livesProcess memory, and our hosting provider's log store.
Can you see it?No, and this is the honest limit of /me: neither is keyed by your identity, so there is no query that could return "your" rows without us building the very index that would make them personal. We would rather not have it.

What we never receive

Stated with the same weight as what we do, because on this service the absence is the product. An unstated absence is worth nothing.

Who else sees it

Nobody. There is no analytics, no advertising network, no session recorder, no third-party error reporting, and no data sold, rented, or shared. The pages here load nothing from anywhere else — no fonts, no scripts, no images — which is a claim you can check with your browser's network tab rather than take on faith.

Two categories of processor are unavoidable: a hosting provider runs the service and holds the private bucket, and a CDN sits in front of it and terminates TLS. Both see traffic in the ordinary way a host and a CDN do. We name them specifically to any customer who asks, and in writing in any data-processing agreement — publishing our infrastructure map on a marketing page tells an attacker where to aim and tells you nothing you can act on.

Getting it, and getting rid of it

To see it: /me with the read token issued at enrollment, or mw-govctl me, or the governance_my_data MCP tool. All three read the same function on the server, so they cannot show you different answers.

To delete it: write to alpha@mistwire.io and we will remove the enrollment and its request record. There is no self-service delete button yet, and saying so is better than a page that implies one. Your receipts are yours already and are not ours to delete.

During the alpha we will also delete on request without asking why, because the alternative — a retention argument with someone who has decided to leave — is not a business we want.

When this changes

The alpha is free and will not always be. Pricing arrives before general availability, and you will be told the terms before anything is charged — the request form says so before you fill it in, not after.

If what we process changes, this page changes with it, and the retention figures on it are read from the code rather than maintained beside it.

Back to the overview · See your own record · Read what we would install