Standardize multi-action tools around tool_args.action while keeping parser compatibility for older tool/args, tool_name:action, and method-shaped requests. This keeps new prompts clean without breaking agents that learned the previous dialect. Move A0 connector remote execution/file tools into stable standard prompts, make remote targeting independent of the active chat context, and skill-gate beta computer-use remote so it no longer weighs down the always-on tool list. Align text editor, scheduler, skills, office artifact, memory, notify, and browser prompts/tools around the canonical action contract. Add scheduler update/timezone handling, skills_tool read_file, text editor patch coverage, and fixes for memory_forget, behaviour_adjustment, and code execution progress warnings. Reduce default prompt pressure by compacting browser and scheduler prompts into skill-backed manifests, shortening skill catalog descriptions, and pruning noisy framework knowledge. Remove obsolete connector prompt stubs and root tool-call knowledge examples. Tests: conda run -n a0 pytest tests/test_a0_connector_prompt_gating.py tests/test_tool_action_contracts.py tests/test_task_scheduler_timezone.py tests/test_text_editor_context_patch.py tests/test_tool_request_normalization.py tests/test_office_document_store.py::test_odf_is_advertised_and_docx_remains_explicit_compatibility tests/test_office_document_store.py::test_document_artifact_accepts_method_alias_for_ods_create tests/test_skills_runtime.py tests/test_default_prompt_budget.py::test_a0_small_profile_removed_and_prompt_text_generic -q |
||
|---|---|---|
| .. | ||
| _a0_connector | ||
| _browser | ||
| _chat_branching | ||
| _chat_compaction | ||
| _code_execution | ||
| _desktop | ||
| _discovery | ||
| _email_integration | ||
| _error_retry | ||
| _infection_check | ||
| _memory | ||
| _model_config | ||
| _oauth | ||
| _office | ||
| _onboarding | ||
| _plugin_installer | ||
| _plugin_scan | ||
| _plugin_validator | ||
| _promptinclude | ||
| _skills | ||
| _telegram_integration | ||
| _text_editor | ||
| _time_travel | ||
| _whatsapp_integration | ||
| README.md | ||
Agent Zero - Core Plugins
This directory contains the system-level plugins bundled with Agent Zero.
Directory Structure
plugins/: Core system plugins. Reserved for framework updates — do not place custom plugins here.usr/plugins/: The correct location for all user-developed and custom plugins. This directory is gitignored.
Documentation
For detailed guides on how to create, extend, or configure plugins, refer to:
docs/agents/AGENTS.plugins.md: Full-stack plugin architecture, manifest format, extension points, and Plugin Index submission.docs/developer/plugins.md: Human-facing developer guide covering the full plugin lifecycle.AGENTS.md: Main framework guide and backend context.skills/a0-plugin-router/SKILL.md: Agent-facing entry point that routes plugin tasks to the appropriate specialist skill.skills/a0-create-plugin/SKILL.md: Agent-facing authoring workflow (local and community plugins).
What a Plugin Can Provide
Plugins are automatically discovered based on the presence of a plugin.yaml file. Each plugin can contribute:
- Backend: API handlers, tools, helpers, named lifecycle extensions, and implicit
@extensiblehooks underextensions/python/_functions/... - Frontend: HTML/JS UI contributions via core extension breakpoints
- Settings: Isolated configuration scoped per-project and per-agent profile
- Activation: Global and scoped ON/OFF rules via
.toggle-1and.toggle-0files, including advanced per-scope switching in the WebUI - Agent profiles: Plugin-distributed subagent definitions under
agents/<profile>/agent.yaml
Backend extension layouts:
extensions/python/<point>/for named lifecycle hooksextensions/python/_functions/<module>/<qualname>/<start|end>/for implicit@extensiblehooks
Do not use the retired flattened extensions/python/<module>_<qualname>_<start|end>/ form.
Plugin Manifest
Every plugin requires a plugin.yaml at its root:
name: my_plugin # required for community plugins
title: My Plugin
description: What this plugin does.
version: 1.0.0
settings_sections:
- agent
per_project_config: false
per_agent_config: false
always_enabled: false
Plugin Script (execute.py)
Plugins can include an optional execute.py at the plugin root for user-triggered operations such as setup, post-install steps, maintenance, repairs, migrations, or resource refreshes. Users trigger it from the Plugin List UI.
Guidelines:
- Treat it as a manual plugin script, not as the primary way to use the plugin
- Prefer making it safe to rerun, or detect state and explain why a rerun is not appropriate
- Return
0on success and print progress messages for user feedback - Use
hooks.pyinstead when the behavior is framework-internal or should happen automatically
Runtime Hooks (hooks.py)
Plugins can also include an optional hooks.py at the plugin root. The framework loads it on demand and can call exported hook functions by name through helpers.plugins.call_plugin_hook(...).
hooks.pyruns inside the Agent Zero framework runtime and Python environment.- Use it for framework-internal work such as install hooks, cache preparation, registration, or filesystem setup.
- If it runs
sys.executable -m pip install ..., packages are installed into the same Python environment that runs Agent Zero. - If you need to install into the separate agent runtime or into the system environment, explicitly target that environment from a subprocess by selecting the correct interpreter, virtualenv, or package manager.
In Docker, hooks.py normally affects /opt/venv-a0; the agent execution runtime is /opt/venv.
Plugin Index & Community Sharing
The Plugin Index at https://github.com/agent0ai/a0-plugins is the community-maintained registry of plugins available to all Agent Zero users.
To share a plugin with the community:
- Create a standalone GitHub repository with the plugin contents at the repo root. The runtime
plugin.yamlmust include anamefield matching the intended index folder name. Add aLICENSEfile at the repo root (required for Plugin Index listings so users have explicit terms of use). - Fork
https://github.com/agent0ai/a0-pluginsand add a folderplugins/<your_plugin_name>/containing a separate index manifest namedindex.yaml(notplugin.yaml):
title: My Plugin
description: What this plugin does.
github: https://github.com/yourname/your-plugin-repo
tags:
- tools
Optional additional fields: screenshots (up to 5 image URLs).
- Open a Pull Request. CI validates the submission; a maintainer reviews and merges.
Note: The index index.yaml is a different file with a different schema from the runtime plugin.yaml. Folder names use ^[a-z0-9_]+$ (underscores, no hyphens) and must match the name field in the remote plugin.yaml exactly.
Plugin Hub
Agent Zero now includes a built-in Plugin Hub flow through the always-enabled Plugin Installer plugin. From the Plugins dialog, users can either open the Browse tab or click Install, which opens the installer modal on its own Browse tab.
The Plugin Hub surfaces Plugin Index entries directly in the UI and lets users search, filter, inspect, and install community plugins without leaving Agent Zero.