Molecule AI SDK — build plugins (molecule_plugin) AND remote agents that join a Molecule AI org from another machine (molecule_agent).
Project description
molecule_plugin — Python SDK for building Molecule AI plugins
A Molecule AI plugin is a directory that bundles rules, skills, and per-runtime install adaptors. Any plugin that conforms to this contract is installable on any Molecule AI workspace whose runtime the plugin supports.
Quick start
Copy template/ to a new directory and edit:
my-plugin/
├── plugin.yaml # name, version, runtimes, description
├── rules/my-rule.md # optional — appended to CLAUDE.md at install
├── skills/my-skill/
│ ├── SKILL.md # instructions injected into the system prompt
│ └── tools/do_thing.py # optional LangChain @tool functions
└── adapters/
├── claude_code.py # one-liner: `from molecule_plugin import AgentskillsAdaptor as Adaptor`
└── deepagents.py # same
Validate:
from molecule_plugin import validate_manifest
errors = validate_manifest("my-plugin/plugin.yaml")
assert not errors, errors
CLI
The SDK ships a CLI for validating Molecule AI artifacts before publishing:
python -m molecule_plugin validate plugin my-plugin/
python -m molecule_plugin validate workspace workspace-configs-templates/claude-code-default/
python -m molecule_plugin validate org org-templates/molecule-dev/
python -m molecule_plugin validate channel channels.yaml
python -m molecule_plugin validate my-plugin/ # kind defaults to 'plugin'
Exit code is 0 when valid, 1 when any errors are found — suitable for CI.
Add -q / --quiet to suppress success lines and emit only errors.
Programmatic equivalents:
from molecule_plugin import (
validate_plugin,
validate_workspace_template,
validate_org_template,
validate_channel_file,
validate_channel_config,
)
Per-runtime adaptors — when to write a custom one
The default AgentskillsAdaptor handles the common shape: rules go into
the runtime's memory file (CLAUDE.md), skill dirs go into /configs/skills/.
That covers most plugins.
Write a custom adaptor when you need to:
- Register runtime tools dynamically — call
ctx.register_tool(name, fn). - Register DeepAgents sub-agents — call
ctx.register_subagent(name, spec). - Write to a non-standard memory file — call
ctx.append_to_memory(filename, content).
Minimum custom adaptor:
# adapters/deepagents.py
from molecule_plugin import InstallContext, InstallResult
class Adaptor:
def __init__(self, plugin_name: str, runtime: str):
self.plugin_name, self.runtime = plugin_name, runtime
async def install(self, ctx: InstallContext) -> InstallResult:
ctx.register_subagent("my-agent", {"prompt": "...", "tools": [...]})
return InstallResult(plugin_name=self.plugin_name, runtime=self.runtime, source="plugin")
async def uninstall(self, ctx: InstallContext) -> None:
pass
Resolution order (understood by the platform)
For (plugin_name, runtime):
- Platform registry —
workspace-template/plugins_registry/<plugin>/<runtime>.py(curated; set by the Molecule AI team for quality-assured plugins). - Plugin-shipped —
<plugin_root>/adapters/<runtime>.py(what this SDK helps you build). - Raw-drop fallback — copies plugin files into
/configs/plugins/<name>/and surfaces a warning; no tools are wired.
You generally ship for path #2. If your plugin becomes popular enough to be promoted to "default," the Molecule AI team PRs a copy of your adaptor into the platform registry (path #1) so it survives upstream breakage.
Testing locally
The SDK ships AgentskillsAdaptor as a standalone, unit-testable class:
import asyncio
from pathlib import Path
from molecule_plugin import AgentskillsAdaptor, InstallContext
ctx = InstallContext(
configs_dir=Path("/tmp/configs"),
workspace_id="local",
runtime="claude_code",
plugin_root=Path("./my-plugin"),
)
asyncio.run(AgentskillsAdaptor("my-plugin", "claude_code").install(ctx))
# check /tmp/configs/CLAUDE.md, /tmp/configs/skills/
Publishing
A plugin is just a directory. Push it to any Git host. Installation via
POST /plugins/install {git_url} is on the roadmap — see the platform's
PLAN.md under "Install-from-GitHub-URL flow." Until then, plugins are
bundled into the platform by dropping them into plugins/ at deploy time.
Supported runtimes
As of 2026-Q2: claude_code, deepagents, langgraph, crewai, autogen,
openclaw. See the live list with:
curl $PLATFORM_URL/plugins
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file molecule_ai_sdk-0.2.0.tar.gz.
File metadata
- Download URL: molecule_ai_sdk-0.2.0.tar.gz
- Upload date:
- Size: 37.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
520bcfa74102ff7ec9fc3abfe7b3c90612627f78f9b6f8cea5473a3a954d949c
|
|
| MD5 |
df9d895ecafd911149dcebc344ac908d
|
|
| BLAKE2b-256 |
e13dfb43387a5a851ab789770d503577be87ed40d3b8764a709094ad2095194f
|
File details
Details for the file molecule_ai_sdk-0.2.0-py3-none-any.whl.
File metadata
- Download URL: molecule_ai_sdk-0.2.0-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d21c3a9a349a131cb7117df9746e6cfca9b9e0936081ef0549600e272c872ec
|
|
| MD5 |
6fe8feeb653f06e43a9a9160607d05a6
|
|
| BLAKE2b-256 |
78a55e6436f0392866b57feb13f4c26ab63f75e3371ffe5855aa55fac616841b
|