Tool manifest
Every tool ships a manifest. It declares what the tool does, what it needs, how it runs, and how it's priced — and the automated check holds you to it.
Fields
idstringrequiredStable slug, unique to your tool (e.g. acme-notes).
namestringrequiredDisplay name.
summarystringrequiredOne line: what it does.
runtimeenumrequiredOne of declarative, interpreted, sandboxed-local, native-desktop, connector. The more contained, the more it can auto-publish.
surfaceenumrequiredmobile, desktop, web, or all.
pricingenumrequiredfree, one-time, or paid-updates. Subscriptions are not allowed.
priceCentsnumberoptionalOne-time price in cents (0 for free).
permissionsstring[]optionalWhat the tool needs: local-model, own-workspace, network-egress, broad-filesystem, process-exec, device-apis, clipboard, screen-capture. Anything beyond local-model + own-workspace triggers a human review; undeclared use is a blocker.
sensitiveCategoryenum?optionalOne of payments, security, health, children — flags a human review.
screenshotsstring[]?optionalTool-page screenshots.
Example — a local tool
{
"id": "acme-notes",
"name": "Acme Notes",
"summary": "Summarise and rewrite notes, on your device.",
"runtime": "sandboxed-local",
"surface": "all",
"pricing": "one-time",
"priceCents": 499,
"permissions": ["local-model", "own-workspace"]
}Example — a connector
{
"id": "gmail-triage",
"name": "Inbox Triage",
"summary": "Summarise and label your inbox.",
"runtime": "connector",
"surface": "all",
"pricing": "one-time",
"priceCents": 999,
"permissions": ["local-model", "network-egress"],
"connections": [
{ "id": "gmail", "provider": "google", "scopes": ["gmail.readonly"], "label": "Gmail" }
]
}A connector declares the integrations it needs; the user grants them once by OAuth — see
.