Skip to main content
The manifest is a strict JSON document; unrecognized fields are rejected.

Identity

  • pluginId is the immutable identity.
  • The runtime action identity is the combination pluginId + local action id.
  • Action IDs are unique within the same manifest.
  • The runtime cannot change identity through a request payload.

Runtime

Setting keys use lower camelCase. secret and oauth fields cannot carry a default value; raw credentials are not written into normal settings or the manifest. The manifest should declare only the permission descriptors it needs. The runtime grant set is computed as declared ∩ user-granted.

Icon (glyph)

The plugin and each action can choose their own icon. If none is declared, both show the default code icon; an action without a glyph falls back to the plugin glyph.
The value is a Hugeicons name and is chosen from a fixed list. Free-form names are not accepted: the host statically imports glyphs one by one in both the desktop rasterizer and the interface, and bundling the whole icon set would exceed the renderer budget. A name that is not on the list gets the manifest rejected.
The full list of valid names is in PLUGIN_GLYPH_NAMES (@evox/plugin-protocol). Adding a name to the list is a host-side change; if the glyph you need is missing, open a request.

Conditional setting visibility (visibleWhen)

A setting can be shown only while another setting has a certain value.
  • key must point to another setting in the same settingsSchema. A reference to a key that does not exist, or to the field itself, gets the manifest rejected — both would silently hide the field forever.
  • The comparison is case-insensitive.
  • If the referenced setting’s value is empty, that setting’s default is used; in the example above, on a key that was never touched preset defaults to tests, so the prompt field starts hidden.
  • The saved value of a hidden field is not deleted; when the user switches back to the option that satisfies the condition, they find the old value.