You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
skills: offload debug from a0-manage-plugin; add a0-debug-plugin
add endpoint for agent-facing plugin security scan
Combine queue and start calls into a synchronous operation, works as the frontend modal version with the agent installing the plugin that gets returned scan results.
For the helper, if the agent had to build the prompt itself, it would need to:
Fetch plugin-scan-checks.json from the server
Fetch plugin-scan-prompt.md from the server
Interpolate all 8 template variables
Send the resulting ~3KB prompt as part of its own context
That's ~3KB of prompt template burning context window on every scan call, plus two extra HTTP requests. With helpers/prompt.py doing it server-side, the agent just sends {"git_url": "...", "checks": [...]} - a handful of tokens - and the server assembles the full prompt internally.
Copy file name to clipboardExpand all lines: docs/agents/AGENTS.plugins.md
+18-10Lines changed: 18 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,9 +46,10 @@ usr/plugins/<plugin_name>/
46
46
47
47
### plugin.yaml (runtime manifest)
48
48
49
-
This is the manifest file that lives inside your plugin directory and drives runtime behavior. It is distinct from the index manifest used when publishing to the Plugin Index (see Section 7).
49
+
This is the manifest file that lives inside your plugin directory and drives runtime behavior. It is distinct from the index manifest (`index.yaml`) used when publishing to the Plugin Index (see Section 7).
50
50
51
51
```yaml
52
+
name: my_plugin # required for community plugins (^[a-z0-9_]+$, must match dir name)
52
53
title: My Plugin
53
54
description: What this plugin does.
54
55
version: 1.0.0
@@ -61,6 +62,7 @@ always_enabled: false
61
62
```
62
63
63
64
Field reference:
65
+
- `name`: Plugin identifier. Required by CI when submitting to the Plugin Index. Must be `^[a-z0-9_]+$` and match the index folder name exactly.
64
66
- `title`: UI display name
65
67
- `description`: Short plugin summary
66
68
- `version`: Plugin version string
@@ -200,12 +202,13 @@ embedding:
200
202
201
203
The **Plugin Index** is a community-maintained repository at https://github.com/agent0ai/a0-plugins that lists plugins available to the Agent Zero community. Plugins listed there can be discovered and installed by other users.
202
204
203
-
### Two Distinct plugin.yaml Files
205
+
### Two Distinct Manifest Files
204
206
205
-
There are two completely different `plugin.yaml` schemas used at different stages. They must not be confused:
207
+
There are two completely different manifest files used at different stages. They must not be confused:
206
208
207
-
**Runtime manifest** (inside your plugin repo/directory, drives Agent Zero behavior):
209
+
**Runtime manifest** (`plugin.yaml`, inside your plugin repo/directory — drives Agent Zero behavior):
208
210
```yaml
211
+
name: my_plugin # REQUIRED for index submission; must match index folder name
209
212
title: My Plugin
210
213
description: What this plugin does.
211
214
version: 1.0.0
@@ -216,17 +219,19 @@ per_agent_config: false
216
219
always_enabled: false
217
220
```
218
221
219
-
**Index manifest** (submitted to the `a0-plugins` repo under `plugins/<your-plugin-name>/`, drives discoverability only):
222
+
**Index manifest** (`index.yaml`, submitted to the `a0-plugins` repo under `plugins/<your_plugin_name>/` — drives discoverability only):
The index manifest contains only four fields (`title`, `description`, `github`, `tags`) and must not include runtime fields. The `github` field must point to the root of a GitHub repository that itself contains a runtime `plugin.yaml` at the repository root.
234
+
The index manifest is named `index.yaml` (not `plugin.yaml`). Required fields: `title`, `description`, `github`. Optional: `tags` (up to 5), `screenshots` (up to 5 URLs). The `github` field must point to the root of a GitHub repository that contains a runtime `plugin.yaml` at the repository root, and that `plugin.yaml` must include a `name` field matching the index folder name exactly.
230
235
231
236
### Repository Structure for Community Plugins
232
237
@@ -248,19 +253,22 @@ Users install it locally by cloning (or downloading) the repo contents into `/a0
248
253
249
254
### Submitting to the Plugin Index
250
255
251
-
1. Create a GitHub repository for your plugin with the runtime `plugin.yaml` at the repo root.
256
+
1. Create a GitHub repository for your plugin with the runtime `plugin.yaml` (including the `name` field) at the repo root.
252
257
2. Fork `https://github.com/agent0ai/a0-plugins`.
253
-
3. Create a folder `plugins/<your-plugin-name>/` containing only an index `plugin.yaml` (and optionally a square thumbnail image ≤ 20 KB).
258
+
3. Create a folder `plugins/<your_plugin_name>/` containing only an `index.yaml` (and optionally a square thumbnail image ≤ 20 KB).
254
259
4. Open a Pull Request with exactly one new plugin folder.
255
260
5. CI validates the submission automatically. A maintainer reviews and merges.
256
261
257
262
Index submission rules:
258
263
- One plugin per PR
259
-
- Folder name must be unique, stable, lowercase, kebab-case
Copy file name to clipboardExpand all lines: docs/developer/plugins.md
+17-9Lines changed: 17 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -24,6 +24,7 @@ On name collisions, user plugins take precedence.
24
24
Every plugin must contain `plugin.yaml`. This is the **runtime manifest** — it drives Agent Zero behavior. It is distinct from the index manifest used when publishing to the Plugin Index (see [Publishing to the Plugin Index](#publishing-to-the-plugin-index) below).
25
25
26
26
```yaml
27
+
name: my_plugin # required for community plugins (^[a-z0-9_]+$, must match dir name)
27
28
title: My Plugin
28
29
description: What this plugin does.
29
30
version: 1.0.0
@@ -36,6 +37,7 @@ always_enabled: false
36
37
37
38
Field reference:
38
39
40
+
- `name`: plugin identifier; required by CI for index submission; must be `^[a-z0-9_]+$` and match the index folder name exactly
39
41
- `title`: UI display name
40
42
- `description`: short plugin summary
41
43
- `version`: plugin version string
@@ -189,12 +191,13 @@ Supported actions:
189
191
190
192
The **Plugin Index** is a community-maintained repository at https://github.com/agent0ai/a0-plugins. Plugins listed there are discoverable by all Agent Zero users.
191
193
192
-
### Two Distinct plugin.yaml Files
194
+
### Two Distinct Manifest Files
193
195
194
-
There are two completely different `plugin.yaml` schemas — they must not be confused:
196
+
There are two completely different manifest files — they must not be confused:
195
197
196
-
**Runtime manifest** (inside your plugin's own repo, drives Agent Zero behavior):
198
+
**Runtime manifest** (`plugin.yaml`, inside your plugin's own repo — drives Agent Zero behavior):
197
199
```yaml
200
+
name: my_plugin # REQUIRED for index submission; must match index folder name
198
201
title: My Plugin
199
202
description: What this plugin does.
200
203
version: 1.0.0
@@ -205,25 +208,27 @@ per_agent_config: false
205
208
always_enabled: false
206
209
```
207
210
208
-
**Index manifest** (submitted to `a0-plugins` under `plugins/<your-plugin-name>/`, drives discoverability only):
211
+
**Index manifest** (`index.yaml`, submitted to `a0-plugins` under `plugins/<your_plugin_name>/` — drives discoverability only):
The index manifest has only four fields (`title`, `description`, `github`, `tags`). The `github` URL must point to a public GitHub repository that contains a runtime `plugin.yaml` at the **repository root**.
223
+
The index manifest file is named `index.yaml` (not `plugin.yaml`). Required fields: `title`, `description`, `github`. Optional: `tags` (up to 5), `screenshots` (up to 5 URLs). The `github` URL must point to a public GitHub repository that contains a runtime `plugin.yaml` at the **repository root**, and that `plugin.yaml` must include a `name` field matching the index folder name exactly.
219
224
220
225
### Repository Structure for Community Plugins
221
226
222
227
Plugin repos should expose the plugin contents at the repo root, so they can be cloned directly into `usr/plugins/<name>/`:
223
228
224
229
```text
225
230
your-plugin-repo/ ← GitHub repository root
226
-
├── plugin.yaml ← runtime manifest
231
+
├── plugin.yaml ← runtime manifest (must include name field)
1. Create a GitHub repository with the runtime `plugin.yaml` at the repo root.
243
+
1. Create a GitHub repository with the runtime `plugin.yaml` (including the `name` field) at the repo root.
239
244
2. Fork `https://github.com/agent0ai/a0-plugins`.
240
-
3. Add `plugins/<your-plugin-name>/plugin.yaml` (index manifest) to your fork, and optionally a square thumbnail image (≤ 20 KB, named `thumbnail.png|jpg|webp`).
245
+
3. Create folder `plugins/<your_plugin_name>/` and add `index.yaml` (the index manifest, not `plugin.yaml`). Optionally add a square thumbnail image (≤ 20 KB, named `thumbnail.png|jpg|webp`).
241
246
4. Open a Pull Request. One PR must add exactly one new plugin folder.
242
247
5. CI validates automatically. A maintainer reviews and merges.
Copy file name to clipboardExpand all lines: plugins/README.md
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -68,8 +68,8 @@ The **Plugin Index** at https://github.com/agent0ai/a0-plugins is the community-
68
68
69
69
To share a plugin with the community:
70
70
71
-
1. Create a standalone GitHub repository with the plugin contents at the repo root and the runtime `plugin.yaml` there.
72
-
2. Fork `https://github.com/agent0ai/a0-plugins` and add a folder `plugins/<your-plugin-name>/` containing a separate index `plugin.yaml`:
71
+
1. Create a standalone GitHub repository with the plugin contents at the repo root. The runtime `plugin.yaml` must include a `name` field matching the intended index folder name.
72
+
2. Fork `https://github.com/agent0ai/a0-plugins` and add a folder `plugins/<your_plugin_name>/` containing a separate index manifest named `index.yaml` (not `plugin.yaml`):
73
73
74
74
```yaml
75
75
title: My Plugin
@@ -79,9 +79,11 @@ tags:
79
79
- tools
80
80
```
81
81
82
+
Optional additional fields: `screenshots`(up to 5 image URLs).
83
+
82
84
3. Open a Pull Request. CI validates the submission; a maintainer reviews and merges.
83
85
84
-
Note: The index `plugin.yaml` is a **different schema** from the runtime manifest — it contains only `title`, `description`, `github`, and optional `tags`. Do not mix them up.
86
+
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.
Copy file name to clipboardExpand all lines: plugins/_plugin_scan/webui/plugin-scan-prompt.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -41,7 +41,7 @@ Verify all of the following. If any is false, go back and fix it:
41
41
42
42
## Output Format
43
43
44
-
Your ENTIRE response must be a single markdown document with EXACTLY this structure. No preamble, no commentary, no extra sections. Start your response directly with the `#` heading.
44
+
Submit your final report using the **`response` tool**. The `text` argument must be a single markdown document with EXACTLY this structure. No preamble, no commentary, no extra sections. Start your response directly with the `#` heading.
0 commit comments