Skip to main content
Plugin manifest contract: the tai-plugin.yml schema (PluginSpec). Every installable TAI plugin ships a tai-plugin.yml — at its repo root and as package-data inside the built wheel. The file names the listing (namespace/name), the pip distribution that backs it, the tai42-contract compatibility range, declared capabilities, and the item-level provides index: one entry per tool/agent/extension/… the package registers, because items are what users search for while the plugin is what gets installed. The models here are the one schema shared by the marketplace registry’s validator, the skeleton’s installer, and each plugin repo’s own spec test. The YAML I/O helpers live above the contract (tai42_kit.plugins) — the contract itself has no YAML dependency. KIND_MANIFEST_BINDINGS is the single source for how each provided item kind wires into a Manifest: which manifest field an installer patches and with what shape (a config row, a module-list entry, a single-module slot, a package-name entry, or no manifest field at all for the env-selected config kind). Version strings are validated as PEP 440 (an anchored regex of the spec’s canonical pattern) and contract as a PEP 440 specifier set — shape-level parseability only; evaluating whether a version satisfies a range is the consumer’s concern. display_name and icon are the optional marketplace display metadata: a human UI title (the UI titleizes name when absent) and either a packaged image path relative to the package root or an https URL (the UI falls back to a generated monogram when absent).

KIND_MANIFEST_BINDINGS

tai42_contract.plugins.KIND_MANIFEST_BINDINGS

ManifestBinding

tai42_contract.plugins.ManifestBinding
How one provided item kind wires into a Manifest. field names the manifest field an installer patches for an item of this kind; mode is the patch shape:
  • config_row — append a config row (tools/agents) whose module is the item’s module.
  • module_list — append the item’s module to a plain module list.
  • scalar_module — set a single-module slot; the slot holds ONE module, so a second plugin claiming an occupied slot is a conflict the caller must reject loudly.
  • package_list — append the plugin’s DISTRIBUTION name (not the item’s module) to a package list (studio_plugins).
  • env_selected — no manifest field: the kind is selected through the environment (a config provider is named by TAI_CONFIG_MODE and imported by the config seam), so field is None.
Attributes

PluginItem

tai42_contract.plugins.PluginItem
One installable item in a plugin’s provides index. module is the import path whose import side-effect registers the item (or, for env-selected kinds, the module the selecting seam imports); the installer patches it into the manifest per KIND_MANIFEST_BINDINGS. Attributes

PluginItemKind

tai42_contract.plugins.PluginItemKind
Kind of one installable item a plugin provides. The values are the ecosystem’s item-kind vocabulary (the same words the catalog and the marketplace facets use). KIND_MANIFEST_BINDINGS maps every member onto its manifest wiring; an unknown kind in a spec is a loud validation reject, never a skipped row. Attributes

PluginPermissions

tai42_contract.plugins.PluginPermissions
Capabilities a plugin declares — informational: surfaced in listings, not enforced by a sandbox. Omitting the block declares none (every flag defaults to False); an unknown key is rejected loudly rather than silently ignored. Attributes

PluginSpec

tai42_contract.plugins.PluginSpec
The complete, validated content of one tai-plugin.yml. Frozen and extra="forbid": a typo’d key fails validation loudly. The listing reference is namespace/name (ref); package is the normalized pip distribution the listing points at; version must equal the built wheel’s version (each plugin repo’s spec test and the registry’s ingest validation both pin that); contract is the tai42-contract compatibility range as a PEP 440 specifier set. display_name and icon are optional marketplace display metadata. Attributes

Members

ref

tai42_contract.plugins.PluginSpec.ref
The full listing reference, namespace/name.