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

idstringrequired

Stable slug, unique to your tool (e.g. acme-notes).

namestringrequired

Display name.

summarystringrequired

One line: what it does.

runtimeenumrequired

One of declarative, interpreted, sandboxed-local, native-desktop, connector. The more contained, the more it can auto-publish.

surfaceenumrequired

mobile, desktop, web, or all.

pricingenumrequired

free, one-time, or paid-updates. Subscriptions are not allowed.

priceCentsnumberoptional

One-time price in cents (0 for free).

permissionsstring[]optional

What 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?optional

One of payments, security, health, children — flags a human review.

connectionsConnection[]?optional

Connectors the tool needs — see

.

screenshotsstring[]?optional

Tool-page screenshots.

Example — a local tool

manifest.json
{
  "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

manifest.json
{
  "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

.