Privacy Policy

In short

What Pilos does, and does not do

Pilos changes what you see, in your browser, for you. Nothing changes on the website itself and nobody else sees your version.

Pilos never writes to a site. It does not click, submit a form, follow, post, vote, message or buy. That is not a promise we remember to keep: there is no shape in the format Pilos uses to describe what it builds that could express a write to a site.

It does read. Restyling a page touches nothing outside your browser at all. A view — the feature that renders a site’s own data the way you asked for it — asks that site’s own addresses for data again, from inside the page, signed in as you. That is the only way the data could be fetched: it is yours, and it sits behind your login. What that costs, and how it is limited, is set out below, including the part that is not about us — most sites’ terms do not allow it.

What leaves your browser when you ask for a change

When you type a request into the panel, Pilos sends one request to our AI endpoint. It contains four things:

  1. What you asked for — “show my feed in two columns”. It is the request, so it has to go.
  2. A page skeleton — the structure of the page with the content taken out. The table below is the complete list of fields.
  3. The hostname and path of the page, for example friendfeed.com and /home. Never the full URL: the query string is dropped, because search terms live there.
  4. An anonymous install id — a random identifier created when you install Pilos. It is not derived from anything about you or your machine, and it is not tied to a name or an email unless you choose to create an account.

The page skeleton, field by field

The skeleton is capped at 220 elements and 20 levels deep. A page larger than that is sent truncated rather than in full.

The second look

After seeing the skeleton, the model may ask up to two rounds of follow-up questions about the page — “how many elements match this selector?”, “what is inside this one?” Those questions are answered inside your browser and the answers are built by the same redactor, with the same fields as the table above. Widening what the model may ask does not widen what it may see.

What Pilos never reads

Pilos cannot leak what it never reads. The code that builds the skeleton does not access any of these browser properties, and an automated test fails our build if it ever starts to:

So none of the following ever leaves your browser:

This is not a promise we ask you to take on trust. Three realistic test pages are run through the real code on every build, and the build fails if a single word of their text, or any link or image URL, survives into the payload.

The one judgement call

aria-label is the single text-derived field Pilos sends. It is there because without it a model cannot tell a “Sponsored” badge from a post, and getting that wrong means hiding the wrong things. It is therefore the most restricted field: a label is sent only if it is 40 characters or fewer, contains no @, no / and no http, and does not look like a person’s name.

A known limit, stated plainly: the name check looks for two or three capitalised words, because requiring two is what lets real labels like “Sponsored” through. An aria-label consisting of a single first name — “Maya” — would be sent. This is the one place where a first name could reach the AI, and we would rather tell you than let you discover it.

What comes back

A recipe: a list of display changes in a strict, declarative format — selectors and style rules, nothing more. Every recipe is checked against that format before anything is applied, and the format has no field capable of expressing code — so a restyle cannot contain a program even if the AI tried to write one.

That is true of restyling and not of views, which can carry a stylesheet and a small program. Styling and code a view carries says exactly what one can do, which build can run one at all, and what you have to switch on yourself first.

Filters such as “hide posts from people I don’t know” are decided inside your browser, from structural signals — an attribute, the presence of a child element, a count. There is deliberately no way to express “hide items whose text says X”, because matching on text would require text we do not have.

Where your changes are stored

Removing the extension removes all of it. You can also clear a single site from the panel.

Building something out of a site’s own data

A view is a small application Pilos renders on top of a site, out of that site’s own data — your orders as a sortable table, your spending as a chart. None of this happens on a site until you have pressed Watch this site for that exact hostname, and switching it off stops all of it. The panel says the three things below before that button, because all three would be unfair to discover afterwards.

Watching a site

While a site is watched, Pilos wraps the page’s own data requests and records what the site asked for, so a view can ask for the same thing later. This is the one place Pilos looks at a response body, and it happens inside your browser and nowhere else. What it keeps, on that machine:

What it does not keep: the response body, any value from it, the exact URL, or anything you typed into the page. The list holds sixty addresses per site and forgets the least recently seen. One screen in the panel shows you everything it holds for a site, with a button that forgets the lot.

What is sent when you ask for a view

The address templates, their parameters, and the field names and types of what each one returns — plus the hostname, the path of the page you are on, what you asked for, and the anonymous install id. Not one value from the site goes with it, and that is enforced by the shape of what is sent rather than by filtering it: there is no field in the record of an address that could hold a value, and a test fails the build if one appears.

Asking the site again

When a view needs data it asks the site’s own address again, from inside the page, signed in as you. Nothing on our servers has or wants your cookies. It is limited: reads only, addresses catalogued from that same site only, no faster than one request a second, answers cached for a minute, and a cap on how many pages of a list a view may walk. Every request is counted, per address, and the count is shown to you. The tally stays in your browser.

And the part that is not about us: automated access to a site’s API is against most sites’ terms of service. If a site objects, it objects to your account, not to ours, and we cannot appeal it for you. The panel says that before watching starts, and the honest advice is to leave it switched off for any account you cannot afford to lose.

Styling and code a view carries

A view is mostly assembled from components — tables, charts, filters — but two parts of it are written by the AI. A stylesheet, which applies inside the view and cannot reach the page around it. And, for what components cannot do, a small program in JavaScript.

The program is shown to you in full before you keep the view — the code itself, not a description of it. It runs in a space of its own with no access to the extension and no way to become more code, and it is handed only the rows the view already fetched. It runs only if you switch it on yourself, in Chrome’s own settings, on the Pilos entry in chrome://extensions. We cannot turn that on for you, and everything else about a view works without it.

Be precise about the limit, because the opposite would be a comfortable lie: a program runs beside the page, and the rules that say it may not reach the network or the site’s own markup are enforced by reading the code before it runs. That catches a mistake and an obvious evasion. It is a tripwire, not a sandbox, and what stands behind it is that Pilos wrote the program, from your request, and showed it to you. A program is never accepted from anybody else.

There are two builds of Pilos. The one in the Chrome Web Store cannot run a program at all — it does not ask for the permission and does not contain the code that would use it, because Chrome’s rules forbid an extension running code it did not ship with. A build that can run one is installed another way, and says so.

Notes you write yourself

A view can give you somewhere to put what only you know — a note against an order, a tag, a column the site does not have. Those rows are the one thing in Pilos that you wrote rather than Pilos derived, and they are treated accordingly:

If you connect a browser to a Pilos account

Connecting is optional and off until you do it: you ask the panel for a short code and type it into the dashboard while signed in. An extension that has never been connected sends nothing described in this section.

Once connected, that browser pushes the following to our server so your dashboard has something to show:

Be clear about what that is: a list of hostnames is a slice of your browsing. It is the one thing Pilos keeps on a server that you might not expect, which is why it happens only when you deliberately connect a browser. It is pushed at most once every 30 seconds, never more often. Disconnecting the browser stops it; deleting your account deletes the rows.

Account data

An account is optional. Pilos works without one. If you create one, we store:

The token that lets a connected browser talk to your account is shown to the extension once and never stored by us — we keep only a hash of it, so a database leak cannot be replayed. Pairing codes are handled the same way: hashed, single use, and dead after ten minutes.

The dashboard keeps your sign-in token in your browser’s local storage. It sets no tracking cookie. Signing out removes the token.

If you join the waitlist, we store the email address you gave us and nothing else.

Syncing your views and your notes between computers

Off until you turn it on, and separate from connecting an account: an account alone syncs nothing. Turning it on generates a key in your browser — twenty-five characters, shown to you, never sent anywhere. Your views and your own notes are then kept against your account as ciphertext sealed with that key, per site. Even the label each item is filed under is derived from the key, so the stored rows do not say which sites you use or what your tables are called.

We cannot read any of it, and we cannot help you read it either: lose every browser that holds the key and the stored copy can never be opened again, by you or by us. There is no recovery and no escrow, deliberately — an escrow we could open would be a server that can read your notes.

What remains visible to us is the shape rather than the contents: how many items there are, how big they are and when they were written, tied to the account’s email address. A count of items is roughly a count of the sites you have built something for.

Never synced: the list of addresses Pilos has learned, the request tally, your chat history, and the token that identifies the browser. Stop syncing forgets the key on that browser and leaves every view and note where it is. Remove the stored copy deletes the sealed items for the whole account. Deleting your account deletes them too.

Giving a view to somebody else

Nothing is shared unless you press the button, and when you do, be clear about what it is: sharing is publishing. A shared view has to be readable by a browser that holds none of your keys, which means it is readable by us. It is the one thing in Pilos that is.

A shared view holds the site’s hostname, the addresses of that site’s API that the view reads, the layout, and its stylesheet. It cannot hold a program — removed before it is sent, refused when one is installed, and refused by the server as well — and it cannot hold any of your own rows, because there is no field in a table definition that can carry a value. Installing a shared view creates empty tables and nothing else.

The code is twelve random characters. Nothing lists them and there is no directory. Stop sharing takes the code down; anybody who already installed the view keeps their copy. Deleting your account deletes your shares.

Paying

Your first site is free permanently, whatever happens to a subscription. When you subscribe, payment is handled entirely by Stripe. Stripe collects your card details and billing email directly — Pilos never sees a card number, and the extension never asks for your email. We send Stripe your anonymous install id as the checkout reference, so the extension can unlock itself afterwards without you copying a licence key out of an email. We store the subscription’s status and identifiers so we know what you are entitled to.

The permissions the extension asks for

What we log

Our AI endpoint records one line per request: which route, the status, how long it took, the anonymous install id, token counts, and how many changes came back. It does not record skeletons, recipes, prompts, or anything derived from a page. That is enforced by shape rather than by discipline — the logger accepts a fixed list of simple values, so there is no parameter through which page data could reach a log line even by accident.

To stop abuse, the endpoint counts requests per install id over a short window. Those counters expire within minutes and hold no IP address.

Our account server keeps a security log. It records your IP address and browser user-agent against actions that change something, or that would matter if they were not you: signing in and failing to sign in, registering, verifying an email, changing or resetting a password, connecting or disconnecting a browser, pausing or resetting a site, sharing or unsharing a view, forgetting your stored items, starting a checkout, cancelling, and deleting your account. Two of those — pausing and resetting a site — record the hostname it was done to, next to your email address. It does not record them for ordinary licence checks, for site syncs, or for reading and writing your sealed items — the things that happen on their own, without you asking. Entries are deleted automatically after 180 days, and deleting your account removes yours at once.

This website uses no analytics and sets no tracking cookies. Our hosting provider keeps standard access logs, as every web host does.

Services we use

We do not sell your data, and we do not share it with anyone outside this list.

Where data is processed

The AI endpoint runs on Cloudflare’s network, which means your request is handled at whichever of their locations is nearest you; the model call itself goes to Anthropic in the United States. Our account server, its database, this website and our email are in the United States, and so are your sealed items and any view you have shared. Whatever is sent to answer a request — the page skeleton, the address templates, your table names — is used for that request and not stored by us afterwards.

How long things are kept

Your rights

You may ask us for a copy of any personal data we hold about you, ask us to correct it, ask us to delete it, or ask for it in a portable format. Email privacy@pilos.net and we will respond within 30 days.

Most of it you can do yourself and immediately: disconnect a browser from the panel, delete a site from the dashboard, or remove the extension.

If you are in the European Economic Area or the UK

Under the GDPR you have the rights of access, rectification, erasure, restriction, portability and objection, and you may withdraw consent at any time. We process personal data on two bases: contractual necessity — running your account, your subscription and the features you asked for — and legitimate interest, namely keeping the service available and preventing abuse. If you think we have not dealt with your concern properly, you may complain to your local data protection authority.

If you are in California

Under the CCPA you have the right to know what we have collected, the right to have it deleted, and the right not to be discriminated against for asking. We do not sell personal information, so there is nothing to opt out of.

Children

Pilos is not intended for anyone under 16, and we do not knowingly collect data from children. If you believe we have, email privacy@pilos.net and we will delete it.

Changes to this policy

If we change what Pilos collects, we will update this page and change the date at the top before the change ships — not after. Material changes will also be announced on the website.

Contact

Questions about any of this: privacy@pilos.net.