Skip to content

plugin.json reference

plugin.json is the required manifest at the plugin root. agent-plugins recognizes the Agent Plugins 1.0.0 schema identifier exactly and validates locally without retrieving the schema URL.

json
{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "my-project",
  "version": "1.2.3",
  "description": "Agent integrations for my-project.",
  "author": {
    "name": "Example Maintainer",
    "email": "maintainer@example.com",
    "url": "https://example.com"
  },
  "homepage": "https://example.com/my-project",
  "repository": "https://github.com/example/my-project",
  "license": "Apache-2.0",
  "keywords": ["python", "agent-skills"],
  "extensions": {
    "com.example.client": {
      "entrypoint": "com.example.client/activate.json"
    }
  }
}

Fields

FieldRequiredInputNormalized value
$schemaYesExact supported schema identifierManifest.schema: str
nameYesPlugin name stringManifest.name: str
versionNoStringstr | None
descriptionNoStringstr | None
authorNoObjectAuthor | None
homepageNoStringstr | None
repositoryNoStringstr | None
licenseNoStringstr | None
keywordsNoArray of stringstuple[str, ...]
extensionsNoObject of namespaced objectsRead-only nested mappings and tuples

Plugin names

name contains 1 to 64 characters. It can use lowercase ASCII letters, digits, periods, and hyphens. It must begin and end with a letter or digit. Consecutive -- and .. are rejected.

The plugin name is independent from the Python distribution name passed to locate().

Optional strings

The parser checks that optional metadata values are strings. It does not validate Semantic Versioning, URLs, email syntax, SPDX expressions, or non-empty content.

author accepts name, email, and url. Unknown author fields are fatal. An empty author object becomes Author(name=None, email=None, url=None).

Manifest extension data

Each member of extensions must be an object. Nested objects become read-only mappings and arrays become tuples.

The parser preserves namespace data without interpreting it. Client extension files use the separate [tool.agent-plugins].include mechanism.

Issues and errors

An unknown top-level manifest field is ignored and recorded in manifest.issues. A top-level extensions value that is not an object is also ignored and recorded as an issue.

Other type, required-field, schema, or extension-namespace failures raise ValidationError on the first manifest property access. Fatal validation stops at the first detected issue.

python
manifest = plugin.manifest

print(manifest.name)
for issue in manifest.issues:
    print(issue.location, issue.message)

Released under the Apache License 2.0.