Tutorial
This is the honest secret of the platform: you don't hand-write a poppy, you direct one into
existence. The SDK, the build guide (AGENTS.md), and the example
are written for AI coding agents. You describe what to build; your agent does the rest inside
the guardrails. Founders here ship 3–4 polished poppies a week this way.
Copy examples/hello-poppy. Give it a reverse-DNS id
(com.you.your-poppy) and a display name that ends in
“Poppy” — that's the one required use of the brand, and your name must be unique in the
catalogue. Draw your own icon; imitating another poppy's mark is grounds for delisting.
The platform ships a copy-paste starter prompt (docs/STARTER_PROMPT.md)
that points your agent at the build guide, the SDK, and the example — plus the
non-negotiable rules. You fill in one placeholder: what to build. Plain language is
enough: “a poppy that hosts a private photo archive in my AWS with albums and sharing links.”
Everything your poppy can do in the cloud comes from the manifest's
permissionSet. Least privilege isn't a virtue here, it's a
conversion rate: scoped grants rate green or
amber on the user's approval screen; an unscoped
mutate-existing grant rates red — and red doesn't ship.
npm run validate-manifest -- path/to/extension.json
node scripts/install-dev-extension.mjs --src path/to/your-poppy
Relaunch the app (npm run -w @agentspoppy/app tauri:dev), open
your poppy's tab, and check the approval screen: the target is amber or green with
“No risks to other resources identified.” If it's red, tighten
resourceScope — don't ask users to accept more risk.
npm run certify -- --extension . --yes
Certification tears your poppy down with the host's safety-net cleanup off and verifies the cloud account is exactly as it was. This is the promise users install on — a poppy that can be completely undone.
node scripts/pack-extension.mjs --src path/to/your-poppy
You get a byte-reproducible zip, its sha256, and a ready-to-paste catalogue entry. Publish both in a release on your public repository, then submit from the dashboard.
*."runtime": "node22") and you ship a small JS bundle; the platform provides the runtime. Packing rejects a bundled Node or service binary.Develop against a spare AWS sandbox account, not production. And never paste real AWS credentials into your coding agent — connect the account in AgentsPoppy yourself; the whole point of the broker is that apps and agents don't get to hold your keys.