Skip to main content

What it is

Every plugin declares a manifest of type PluginManifest. It is not human documentation — it is structured metadata the LLM reads. The runtime uses it three ways:
  1. The Tier-1 prompt block — the “Available Capabilities” list rendered for always plugins on every turn.
  2. list_capabilities — the meta-tool the agent calls to enumerate what it can load.
  3. load_capability — the meta-tool that returns a manifest in full when the agent activates a plugin mid-conversation.

What each field is for

Full schema table and validation rules live at Manifest schema reference.

Where the agent sees it

Tier-1 plugins pay token cost on every turn forever — and not just the summary: each entry also renders whenToUse, whenNotToUse, and the first example as sub-bullets, so manifest length is prompt length. on-demand plugins cost nothing in the prompt until the agent loads them. silent plugins are never listed in Tier-1 and can’t be loaded through the meta-tools (note: a silent plugin’s tools, if it ships any, are still bound and callable — silent is not a security boundary).

Writing a good manifest

  • Be specific in whenToUse. “Weather questions” is too vague. “User asks about current weather, temperature, precipitation, or wind in any city” is precise.
  • Use whenNotToUse to disambiguate when your plugin conceptually overlaps with another (Firecrawl vs Sandbox vs Domain Indexer is the canonical case).
  • Examples should cover the typical patterns, not just the obvious one.
  • Keep tags lowercase. They’re for search ranking, not display.
  • Pick visibility deliberately. Default to on-demand; promote to always only when the agent needs the plugin on nearly every turn.
The manifest is the part of your plugin the LLM reads most. Treat it like a system prompt: write it carefully, test it with real user messages, and iterate. A vague manifest is the most common reason a plugin doesn’t fire when it should.

Write a plugin

Where the manifest lives in code.

Manifest schema reference

Exact field types and constraints.
Source: PluginManifest.