agent-plugins
agent-plugins packages Agent Skills, Model Context Protocol configuration, and
client extension files with a Python distribution. Each installed wheel carries
the agent files that match its code version.
The package implements the portable Agent Plugins directory format and supports Python 3.10 through 3.14.
Ship an Agent Plugin
Keep one Agent Plugin tree beside the code it documents:
my-project/
├── plugin.json
├── skills/
│ └── use-my-package/
│ ├── SKILL.md
│ ├── agents/
│ ├── references/
│ └── scripts/
├── mcp.json
└── packages/
└── python/
└── pyproject.toml
skills/ contains Agent Skills.
mcp.json contains Model Context Protocol
server configuration when the plugin provides MCP servers.
Create plugin.json at the plugin root:
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "my-project"
}
Configure the Python package to wrap uv_build:
[build-system]
requires = ["agent-plugins==0.1.0", "uv_build==0.12.2"]
build-backend = "agent_plugins.build.uv_build"
[tool.agent-plugins]
root = "../.."
root is relative to pyproject.toml. The build selects plugin.json, the
complete skills/ tree, and mcp.json when present.
Build, install, and locate the packaged plugin:
uv build packages/python --out-dir dist
python -m pip install "agent-plugins==0.1.0" dist/my_package-*.whl
agent-plugins locate my-package
/.../site-packages/my_package-1.2.3.agent-plugin
The wheel contains the plugin directory and an agent_plugins.json marker in
the distribution metadata. A source distribution stages the same files for a
reproducible wheel rebuild. An editable install points the marker at the authored
plugin tree.
Use Hatchling
Keep the plugin settings and select the Hatchling adapter:
[build-system]
requires = ["agent-plugins==0.1.0", "hatchling==1.31.0"]
build-backend = "agent_plugins.build.hatchling"
[tool.agent-plugins]
root = "../.."
Include other plugin files
Add root-relative patterns for executables or client extensions:
[tool.agent-plugins]
root = "../.."
include = ["bin/**", "com.example.client/**"]
Each pattern must stay within the plugin root and match at least one file.
Inspect an installed plugin
Add agent-plugins to the runtime dependencies of Python code that calls the
inspection API:
[project]
dependencies = ["agent-plugins==0.1.0"]
import agent_plugins as ap
plugin = ap.locate("my-package")
print(plugin.manifest.name)
print(plugin.manifest.path)
for skill in plugin.skills:
print(skill.path)
print(skill / "SKILL.md")
if mcp := plugin.mcp:
for name, server in mcp.servers.items():
print(name, server)
ap.locate() accepts the distribution name used by pip. ap.installed()
returns every discovered Agent Plugin keyed by distribution name.
| Object | Access |
|---|---|
plugin.path |
Absolute plugin root |
plugin.manifest |
Lazy plugin.json document |
plugin.skills |
ap.Skill objects rooted under skills/ |
plugin.mcp |
Lazy mcp.json document, when present |
plugin.files |
Files selected by the package build |
plugin.tree() |
Bounded ASCII tree of the installed plugin |
skill.frontmatter |
Source text between the --- delimiters |
skill.body |
Markdown after the frontmatter |
skill.files |
Files selected below the skill root |
Manifest, MCP, and skill documents load on first parsed-field access and cache
their result. Call ap.locate() again to read a fresh snapshot. Invalid
documents raise ap.ValidationError.
MCP servers are frozen ap.StdioServer, ap.StreamableHTTPServer, or
ap.SSEServer values. Their fields preserve placeholders such as
${PLUGIN_ROOT} for the agent client to resolve.
Inspect a build plan
Preview the files selected by [tool.agent-plugins] before building:
agent-plugins plan packages/python
Use --json for machine-readable output. Python build integrations can consume
the same plan:
import agent_plugins as ap
plan = ap.build_plan("packages/python")
for file in plan.files:
print(file.source, "->", file.target)
List every plugin visible in the current environment:
agent-plugins list --json
Develop and release
From a repository checkout, install the locked development environment and run the local checks:
uv sync --locked
uv run ruff format --check src tests
uv run ruff check src tests
uv run ty check
uv run pyrefly check
uv run pytest -q
./scripts/build-dist.sh
Prepare the version and lockfile in a release pull request:
uv version --bump patch
After the release commit reaches main and its push CI passes, update the local
branch and start the tag-driven release:
git pull --ff-only origin main
./scripts/release.sh --dry-run
./scripts/release.sh
Before the first tag, configure PyPI to trust .github/workflows/publish.yml
through the repository's pypi environment. PyPI documents the setup in
Adding a Trusted Publisher.
Metadata
Release files for agent-plugins 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agent_plugins-0.1.0.tar.gz | 22.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_plugins-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 59.7 kB
Release files / agent_plugins-0.1.0.tar.gz
| Download URL | agent_plugins-0.1.0.tar.gz |
|---|---|
| Size | 22.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3779ee856a6cb46b9fd418f344bbf3c4e997ae8fa2702de448501a528e6b3b3d
|
|
BLAKE2b-256 checksum How to use checksums |
8cde75dcd5071353567469fd5dcfdd3bf3637e4349e5e2021a88f5af5b978c06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / agent_plugins-0.1.0-py3-none-any.whl
| Download URL | agent_plugins-0.1.0-py3-none-any.whl |
|---|---|
| Size | 36.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bc49bafecb9b2b8d794ba9fd697d5e4bcbd2ee62315b7961c8b56ef8b189f0c9
|
|
BLAKE2b-256 checksum How to use checksums |
53a58b4aad9872b0770a9447a1553293a9709176de6f212d80074ac460824435
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.5 {"installer":{"name":"uv","version":"0.12.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|