- Auto-register tabs opened by site (window.open, target=_blank,
ctrl-click) via context.on("page",...) with registry lock and
closing-state guard.
- Modifier-key click via Playwright trusted input: keyboard.down/up
around mouse.click for coord-based path; locator.click(modifiers=...)
selector fallback for off-screen / hidden elements. Chrome focus
rule: ctrl/meta-click keeps focus on origin tab; override via
focus_popup arg.
- key_chord action: presses keys in order, releases in reverse;
guarantees release on exception. Supports Ctrl+A/C/V style chords.
- mouse modifiers click-only (raises ValueError for non-click events).
- list(include_content=true) bulk read across all tabs in parallel
via asyncio.gather (was sequential).
- multi action: batched sub-calls. Different browser_id groups run
concurrently; same browser_id sequentially. Returns array of
{ok, result|error} matching input order. Lets the agent fan out
reads or coordinated mutations across tabs in one tool call.
- Cross-tab work no longer steals viewer focus.
last_interacted_browser_id promotes only on open / set_active /
same-tab work / Chrome popup rule. WebUI auto-open allowlist
tightened to open|navigate|set_active so background actions don't
drag the viewer.
- New set_active action for explicit focus switch.
- JS helper bumps VERSION to force re-injection on cached pages;
exports boundingBoxFor returning {x,y,w,h,selector} for the
trusted-input modifier-click paths.
Backwards-compatible: every new arg is optional with safe defaults.
No removed actions; existing call shapes preserved.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||
|---|---|---|
| .. | ||
| _a0_connector | ||
| _browser | ||
| _chat_branching | ||
| _chat_compaction | ||
| _code_execution | ||
| _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.