Developer

Manifest Reference

Every field in applet.json - the single file that declares an applet's id, scopes, methods, tools, and resource types.

applet.json is the single source of truth for an applet’s surface. Every capability it uses is declared here and shown to the user at install time. There are no hidden capabilities.

Minimal manifest

{
  "schemaVersion": 2,
  "runtime": "sidecar",
  "id": "@my-org/notes",
  "version": "0.1.0",
  "name": "Notes",
  "author": "My Org",
  "scopes": ["projectDb:read", "projectDb:write", "system:sidecar"],
  "methods": [
    { "name": "@my-org/notes.list", "permission": "projectDb:read", "handler": "backend" }
  ],
  "tools": ["@my-org/notes.list"],
  "frontend": { "entry": "dist/index.js" }
}

Required fields

FieldTypeNotes
schemaVersioninteger2 for current applets
idstring@<author>/<slug>, lowercase, one slash
namestringHuman-facing applet name
authorstringPublisher name
scopesstring[]Declared capabilities (type:scope); see Permissions & Scopes
frontend.entrystringPath to the entry JS, usually dist/index.js

Common fields

FieldTypeNotes
versionstringSemver, per applet, independent of the bundle version
runtimestring"sidecar" for a Node subprocess (requires system:sidecar)
descriptionstringOne-sentence user-facing copy
agent_instructionstringLLM-facing capability statement; what the tool can do
resourceTypesstring[]Resource type names this applet owns
iconstringlucide-react icon name
colorstringHex color
categorystringGrouping in the Add picker
publishedbooleanfalse hides the applet from the production Add picker (dev tools)
methodsobject[]Method declarations; see below
toolsstring[]Subset of method names exposed to agents
outboundUrlstring[]HTTP allowlist, e.g. ["*"] or specific hosts
httpProfileobjectAuthenticated HTTP template (baseUrlTemplate, auth)

Method declarations

Each entry in methods[] declares one method. The name is the canonical applet-method name and must match the defineMethod name in code.

{
  "name": "@my-org/notes.add",
  "category": "notes",
  "permission": "projectDb:write",
  "handler": "backend",
  "defaultEnabled": true,
  "paramsSchema": { "type": "object", "properties": { "title": { "type": "string" } } },
  "returnsSchema": { "type": "object" }
}
FieldNotes
name@<author>/<slug>.<verb> - one dot, single camelCase verb, no suffix
permissionThe scope required to call it
handler"backend" (Node sidecar) or "frontend" (webview)
categoryOptional grouping for the method list
defaultEnabledWhether the method is enabled by default; gate sensitive methods to false
paramsSchema / returnsSchemaJSON Schema for params and returns

Tools

tools[] is the subset of method names exposed to agents. A method must be in both methods[] and tools[] for an agent to call it.

"tools": ["@my-org/notes.add", "@my-org/notes.list"]

See Agent Tools.

Sub-applets

An applet can declare sub-applets that mount under a parent (for example the WordPress applets under a site). Relevant fields: parentApplet, subPath, subLabel, subIcon, subOrder, pairedOnly, requiresPlugin.

Naming rule

The method name is the same everywhere: in applet.json::methods[], in tools[], in the frontend call ctx.methods["@<author>/<slug>.<verb>"](...), and in the defineMethod registration. One canonical name, no aliases. See Method Architecture for why.