Data & privacy
That sentence is the reason this platform exists — and the reason users will install your poppy next to their customer databases, mailing lists, and business records. The default is absolute: a poppy stores data in the user's own cloud account and sends none of it anywhere else. Anything different must be declared, justified, and reviewable.
When you submit, you answer one structural question: does any data handled by your poppy ever leave the user's cloud?
Your listing carries the label users are looking for. Nothing more to do — this is the default architecture, and the strongest sales pitch a poppy can have.
For each flow: what data, where it goes (service/endpoint and who operates it), why — the concrete purpose, and whether you (the developer) collect or retain any of it. Plus a link to your privacy policy. All of it visible to review.
Your poppy's repo is open, so its code can be audited by anyone. But if your poppy talks to a service you operate — especially where you monetise an external client — that service's code is invisible to users and to us. So the rule is:
You must declare the flow and maintain a real privacy policy covering it — and AgentsPoppy may require audit access to the receiving service's source code (privately, under confidentiality) as a condition of listing or of keeping the listing. If we can't establish what happens to user data on the other end, the poppy doesn't carry it there.
This is deliberately strict. A poppy that quietly reads a user's customer database or mailing list and transmits it to the developer is not a bug or a grey area — it is industrial espionage, and this platform will not be a vehicle for it.
The audit promise only works if there's something to audit. That's why a poppy ships your code, never a runtime or a bundled service binary: a compiled-in Node or a vendored Redis is opaque bytes nobody can trace back to your open repo — exactly the blind spot a data-exfiltrating dependency would hide in. Instead you declare what you need, and AgentsPoppy provides it from the official source, pinned by hash inside the signed app, only after the user approves it.
The manifest names the runtime ("runtime": "node22"); the platform
already includes it, so your package is a few MB of diffable JavaScript, not a few hundred MB of
binary. A poppy that needs a database declares redis — the user
approves it, AgentsPoppy fetches it from the official source and verifies it, and you never touch
those bytes. Packages that embed a runtime are rejected at certification, at review, and at
install.
| Situation | Consequence |
|---|---|
| Undeclared flow found at review | Needs changes — declare it or remove it. |
| Undeclared flow found after listing | Immediate delisting; relisting only after a fixed release and a full declaration. |
| Deceptive declaration — data covertly read, copied, or transmitted | Permanent removal, developer account closed, and the poppy blocklisted so existing installs are warned. Where the law is implicated, we cooperate with it. |