Overview
ABP uses dot-notation namespaces to organize capabilities:
Examples:
export.pdf — Export as PDF
convert.markdownToHtml — Convert markdown to HTML
ai.summarize — Summarize text using AI
render.html — Render HTML with CSS
Standard Namespaces
export.* — Export Operations
| Capability | Description | Input | Output |
|---|
export.pdf | Generate PDF from HTML content | { html, options } | BinaryData (inline { document: BinaryData }, or the client generates a PDF from HTML returned by a convert.* capability) |
export.image | Export as image (PNG, JPEG, SVG) | { selector?, format } | { image: BinaryData } |
export.html | Export rendered HTML | { content, options } | { document: BinaryData } |
export.markdown | Export as Markdown | { content } | { markdown: string } |
| Capability | Description | Input | Output |
|---|
convert.markdownToHtml | Convert Markdown to HTML | { markdown, options } | { html } |
convert.htmlToMarkdown | Convert HTML to Markdown | { html } | { markdown } |
convert.htmlToImage | Render HTML as image | { html, options } | { image: BinaryData } |
convert.csvToJson | Convert CSV to JSON | { csv, options } | { json } |
render.* — Rendering Operations
| Capability | Description |
|---|
render.html | Render HTML with CSS |
render.canvas | Render to canvas |
render.svg | Render SVG |
ai.* — AI Operations
| Capability | Description | Input | Output |
|---|
ai.summarize | Summarize text | { text, maxLength? } | { summary } |
ai.translate | Translate text | { text, from, to } | { translated } |
ai.complete | Text completion | { text, style } | { rewritten } |
storage.* — Browser Storage
| Capability | Description |
|---|
storage.read | Read from localStorage/sessionStorage |
storage.write | Write to localStorage/sessionStorage |
storage.delete | Delete from storage |
auth.* — Authentication
| Capability | Description |
|---|
auth.getToken | Get auth token from browser session |
auth.getUser | Get current user info |
Apps MUST NOT declare capabilities that wrap browser delivery mechanisms or input-acquisition APIs. These are browser features that route content to an OS-level destination (clipboard, share sheet, file dialog, notification) or acquire input through OS-level UI (file picker, camera prompt). An ABP capability should produce or consume data — the agent handles routing and acquisition on the host side.
For a decision test to identify these mechanisms, see the Implementation Guide — How to Recognize a Delivery Mechanism.
The primary example is clipboard.*: apps MUST NOT declare clipboard.* capabilities. The browser Clipboard API requires user gestures that automated agents cannot provide, and clipboard is a host-side delivery mechanism — agents can write to the system clipboard directly using host tools (pbcopy, xclip, clip). Instead, expose the underlying content-producing capability (e.g., convert.markdownToHtml) and let the agent handle clipboard operations on the host side. The same principle applies to navigator.share(), showSaveFilePicker() / showOpenFilePicker(), new Notification(), and any future browser API that triggers OS-level UI.
See the Protocol Overview for additional context on forbidden capabilities.
Vendor Namespaces
Vendors can use reverse-domain notation for custom capabilities:
vendorDomain.namespace.action
Examples:
com.acme.imageFilter.blur
io.github.username.customTool
Naming Conventions
Action Verbs
Use consistent action verbs:
- Create/Generate:
export.pdf, generate.thumbnail
- Read/Get:
storage.read, auth.getToken
- Write/Set:
storage.write, storage.set
- Convert/Transform:
convert.markdownToHtml
- Delete/Remove:
storage.delete
Case Convention
- Use
camelCase for multi-word names
- Namespace and action are separated by
.
- Examples:
convert.markdownToHtml, auth.getToken
Capability Lifecycle
Capabilities progress through three stages:
Experimental → Stable → Deprecated → Removed
Experimental
- Marked with
experimental: true in the manifest
- May change without notice between versions
- Agents SHOULD warn users when calling experimental capabilities
Stable
- The default state (no
experimental or deprecated flag)
- Follow semantic versioning
- Breaking changes only in major protocol versions
Deprecated
- Marked with
deprecated: true and optionally deprecationMessage
- Deprecated capabilities MUST remain functional for at least one major version
- The
alternatives field SHOULD suggest replacement capabilities
- Agents SHOULD warn users when calling deprecated capabilities
See the Protocol Overview for the full lifecycle details.
Next Steps