CLI data policy
Last updated: July 27, 2026
This page covers the free Promptster CLI — @promptster/cc-audit — and the waitlist form on this site. It is separate from the Privacy Policy that governs the paid products, because the CLI has no account behind it and most of what that policy describes does not apply.
The short version
Running the audit sends us nothing. Every path that transmits anything is a flag you type on purpose, and each one is listed below with what it sends and what it does not. Nothing the CLI sends is kept past 90 days — a waitlist address, which exists to be emailed once, is kept up to 12 months — and you can have any of it removed sooner. A report you shared you can delete yourself in one call; everything else takes an email to us, for a reason given at the end.
What leaves your machine, by command
Egress is tiered, and consent is proportional to it. The default is the top row.
npx @promptster/cc-auditLocal only- Sends
- Nothing. The audit reads your agent's local session files, computes on your machine, and prints to your terminal. No account, no key, no upload.
- Never sends
- There is no request to us to describe. The only network call a bare run makes is a version check against the public npm registry, which is npm's service and tells us nothing.
- Consent
- A one-time acknowledgement that the tool may read your local session files. Stored at ~/.cc-audit/consent.json and never sent anywhere.
--judgeHosted model scoring- Sends
- Per-task metadata and the task gist — the first line of your own prompt, truncated to 700 characters — plus model, turn count, file count, tool names and cost. Scored by a hosted model, and the result comes back to your terminal.
- Never sends
- Source code, file contents, diffs, absolute paths, repository or organization names. Slash-command spans and subagent turns are excluded outright, because their gists are not prompts you wrote.
- Consent
- Re-confirmed on every run. It is never remembered as a standing yes.
--openPublic shareable report- Sends
- A numbers-only aggregate: spend, model mix, context-hygiene counts, work-hour histograms, per-command counts with the command names hashed. Plus a summary of the right-sizing verdicts, never the per-task ones.
- Never sends
- Prompts, gists, code, file contents, project names, paths. The per-session detail you see in the terminal stays in the terminal; only the aggregate leaves.
- Consent
- Re-confirmed on every run and defaults to No, because the resulting link is public. Anyone with the URL can open it.
cc-audit fixConfig review- Sends
- The configuration files you point it at — typically CLAUDE.md, AGENTS.md and rule files — including their contents, because reviewing a config means reading it.
- Never sends
- Anything you did not name. It reviews the config files it was given and nothing else in the repository.
- Consent
- Explicit, per invocation. This is the one path where file contents leave your machine, and it is the one you have to ask for by name.
How a request is identified
There is no account, so there is no user id. Two values do the work instead, and neither is tied to your name.
- An anonymous machine id accompanies scoring and report uploads. It is a truncated SHA-256 of your hostname and home directory — a one-way hash, not the values themselves — and it exists so repeat runs from one machine can be deduplicated rather than counted as separate people.
- An install key accompanies config reviews, which cost us model credits and therefore need a per-install budget. It is a random UUID generated on first use with no relationship to any machine attribute, stored at
~/.cc-audit/install.json. Delete that file and you get a new one.
The waitlist form
If you join the waitlist we store four things: your email address, which surface you submitted it from, the agent you said you use if you told us, and a SHA-256 hash of your IP address for abuse triage. The raw IP is never stored — only that hash. The surface and agent fields accept a fixed set of values rather than free text, so nothing else can end up in the row. It is not linked to any CLI run, joining is not required to use anything, and it is kept for up to 12 months rather than 90 days, for the reason given below.
We use it to tell you when the hosted version is ready. It does not go into a marketing sequence.
How long we keep it
90 days for anything the CLI sends, enforced by a scheduled job rather than by intention. Past that window every record is de-identified in place: identifiers are nulled, email addresses are cleared, shared report payloads are dropped, and the raw contents of reviewed config files are stripped.
What survives is the de-identified remainder — the scored findings and the aggregate shape, with nothing left that points at a person or a machine. We keep that because it is what calibrates the scoring, and because a count of how many audits ran in a given month should not require holding anyone's data to answer.
12 months for a waitlist address, and the difference is deliberate rather than convenient. The whole purpose of that row is to send one email at a date we cannot predict, so a 90-day window would delete the people it exists to contact and quietly break the promise on the form. It is not indefinite either: if the hosted version has not shipped in a year, the address goes.
A report you created with --open is public for as long as it exists. Treat its URL as published, and delete it if you would rather it were not.
Having it deleted sooner
An erasure request is a hard delete, not the de-identification the retention pass does. The rows are removed.
A shared report you can delete yourself, immediately. The last path segment of its URL is the handle, and the call takes the email attached to that report with it:
curl -X DELETE https://api.promptster.ai/v1/public/solo/data \
-H 'content-type: application/json' \
-d '{"reportId": "<last segment of the report URL>"}'The response reports how many records were removed, so a mistyped handle reads as zeroes rather than as silent success.
Anything else goes through a person. Write to privacy@promptster.ai to remove a waitlist address, or every report from one machine at once.
That split is deliberate, and it is worth being explicit about why the slower path exists. A report URL is unguessable and is the only way to reach the report at all, so holding it is itself the proof of ownership — the way a password-reset link is. An email address is not: plenty of people know yours. An open endpoint that erased rows on the strength of an address alone would let anyone destroy your data, and the deleted-count in the reply would tell them whether you had ever signed up. Making that path slower is what keeps it from being a griefing tool wearing a privacy label.
To stop transmitting entirely, run the audit without --judge or --open. That is the default, and it is a complete answer — the local report is the product, not a teaser for a hosted one.
Who else sees it
Scoring runs on a hosted model provider, and the data is stored with the same infrastructure providers the rest of Promptster uses. They are listed on the sub-processors page. We do not sell any of it, and none of it is used to train a third-party model.
Changes
If the retention window or the deletion process changes, this page changes with the code that enforces it, and the date at the top moves. Questions go to privacy@promptster.ai.