Skip to content

Extend protoAgent ​

protoAgent is a template repo, so the honest answer to "how do I change it" depends on what you're changing:

  • Your agent's persona, prompts, and domain logic → fork it. That's what a fork is for (Fork the template).
  • A capability — a tool, an integration, a console surface, a background worker → write a plugin. No fork, nothing to keep merging, and it installs from a git URL.
  • An untrusted third-party tool → connect an MCP server. Out-of-process, so it doesn't run with the agent's privileges.

This page is the map for the middle one.

Start here ​

Never written oneBuild your first plugin — twenty minutes to a tool and a console view on a running agent
Want the model firstPlugin architecture — what's trusted, what's sandboxed, when your code runs
Building something specificPlugins guide — the contract, seam by seam
Need a signatureReference — generated from the code, so it's current

What a plugin can contribute ​

Every one of these is a register_* call in your plugin's register(registry) (full list):

Tools the agent can callregister_tool · first tool
Console views in the left railviews: in the manifest · building a view · wire protocol
HTTP routes, including inbound webhooksregister_router · public paths
Background surfaces — a gateway, a poller, an engine loopregister_surface · resuming across reloads
Skills and workflowsregister_skill_dir · register_workflow_dir · skills · workflows
Subagentsregister_subagent · subagents
Middleware around the model callregister_middleware · middleware
Chat commands (/yours)register_chat_command · slash commands
Goal & watch verifiersregister_goal_verifier · goal mode · watches
Your queue in the agent's own work listregister_work_provider · autonomous operating model
Knowledge backends & embeddersregister_knowledge_store · register_embedder · knowledge
Managed MCP serversregister_mcp_server · MCP
A chat bot on a messaging platformcommunication plugins

Plus its own config, secrets, and Settings UI (ADR 0019), and events other plugins can subscribe to without importing it (ADR 0039).

Reference ​

Generated from the source on every build, and CI-gated — a new seam can't ship undocumented.

PageContents
Plugin manifestEvery protoagent.plugin.yaml field — type, default, meaning
Registry APIEvery register_* seam with its signature, plus registry.host
Plugin SDKgraph.sdk — subagents, knowledge, watches, background jobs, scheduling, metrics
View bridgeThe sandboxed-iframe postMessage protocol
Event bus topicsEvery topic core publishes, with payload keys and matching rules
Testkitload_plugin, FakeRegistry, host stubs
Plugin CLIpython -m server plugin …

Ship it ​

Test itThe testkit runs your real modules with no protoAgent installed — plugin new --tests scaffolds the suite and a CI workflow
Publish itInstall & publish plugins — git URLs, pinning, plugins.lock
Group severalBundles — one install for a whole capability stack
Extend the console itselfFrontend extension registries for fork-level UI work

Part of the protoLabs autonomous development studio.