Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
211f9c0
[Agent Builder] base support for plugins
pgayvallet Mar 6, 2026
b8f1be8
add more utilities
pgayvallet Mar 6, 2026
691908b
Adding client and service
pgayvallet Mar 6, 2026
574a223
add base routes
pgayvallet Mar 6, 2026
c53e96d
qdd zip upload
pgayvallet Mar 6, 2026
9cb3fea
use setup/start contracts
pgayvallet Mar 9, 2026
e513b99
Merge remote-tracking branch 'upstream/main' into ab-xxx-plugin-support
pgayvallet Mar 9, 2026
7894f92
NITs
pgayvallet Mar 9, 2026
82dd30d
WIP
pgayvallet Mar 9, 2026
3ff0676
skills installation wip 2
pgayvallet Mar 9, 2026
4eab07f
fix uninstall
pgayvallet Mar 9, 2026
517a106
add optional plugin_name parameter
pgayvallet Mar 9, 2026
3fa0cc1
FTR tests - first batch
pgayvallet Mar 9, 2026
c1a8b97
fix FTR tests
pgayvallet Mar 9, 2026
af9e7f5
Changes from make api-docs
kibanamachine Mar 9, 2026
df3f9a2
Changes from node scripts/lint_ts_projects --fix
kibanamachine Mar 9, 2026
38be075
Changes from node scripts/regenerate_moon_projects.js --update
kibanamachine Mar 9, 2026
c264655
fix promise rejection
pgayvallet Mar 9, 2026
97b3df0
move things
pgayvallet Mar 9, 2026
b0b8b5f
self-review
pgayvallet Mar 9, 2026
0aeb685
self-review: clean converters
pgayvallet Mar 9, 2026
be98ca0
refactor utilities
pgayvallet Mar 9, 2026
59f18e5
add examples for routes
pgayvallet Mar 9, 2026
5fd4029
Changes from make api-docs
kibanamachine Mar 9, 2026
3c0ac0c
add bulkCreate for skills
pgayvallet Mar 9, 2026
149cc2c
remove skipServerless tag
pgayvallet Mar 9, 2026
a1282ca
Merge remote-tracking branch 'upstream/main' into ab-xxx-plugin-support
pgayvallet Mar 9, 2026
ad93ccd
rabbit review fixes
pgayvallet Mar 10, 2026
d360483
fixing FTR tests server port or something
pgayvallet Mar 10, 2026
85661b3
limit zip file size
pgayvallet Mar 10, 2026
669d014
update doc
pgayvallet Mar 10, 2026
6a809ff
add tests
pgayvallet Mar 10, 2026
eb5bd0d
Merge remote-tracking branch 'upstream/main' into ab-xxx-plugin-support
pgayvallet Mar 10, 2026
2ee9f0f
Changes from make api-docs
kibanamachine Mar 10, 2026
2d1150f
Update x-pack/platform/plugins/shared/agent_builder/server/routes/plu…
pgayvallet Mar 10, 2026
b04e769
skip serverless for FTR tests
pgayvallet Mar 10, 2026
59e34ac
Changes from make api-docs
kibanamachine Mar 10, 2026
58e41c1
Merge branch 'main' into ab-xxx-plugin-support
elasticmachine Mar 10, 2026
e46a526
Merge branch 'main' into ab-xxx-plugin-support
elasticmachine Mar 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
285 changes: 285 additions & 0 deletions oas_docs/output/kibana.serverless.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3096,6 +3096,291 @@ paths:
x-metaTags:
- content: Kibana, Elastic Cloud Serverless
name: product_name
/api/agent_builder/plugins:
get:
description: |-
**Spaces method and path for this operation:**

<div><span class="operation-verb get">get</span>&nbsp;<span class="operation-path">/s/{space_id}/api/agent_builder/plugins</span></div>

Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.

List all installed plugins and their managed assets. Plugins are installable packages that bundle agent capabilities such as skills, following the [Claude agent plugin specification](https://code.claude.com/docs/en/plugins).<br/><br/>[Required authorization] Route required privileges: agentBuilder:read.
operationId: get-agent-builder-plugins
parameters: []
responses:
'200':
content:
application/json:
examples:
listPluginsResponseExample:
description: Example response that returns one installed plugin
value:
results:
- created_at: '2025-01-01T00:00:00.000Z'
description: Financial analysis tools and skills for Claude
id: financial-analysis
manifest:
author:
name: Anthropic
url: https://www.anthropic.com
keywords:
- finance
- analysis
repository: https://github.com/anthropics/financial-services-plugins
name: financial-analysis
skill_ids:
- financial-analysis-analyze-portfolio
source_url: https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis
unmanaged_assets:
agents: []
commands: []
hooks: []
lsp_servers: []
mcp_servers: []
output_styles: []
updated_at: '2025-01-01T00:00:00.000Z'
version: 1.0.0
description: Indicates a successful response
summary: List plugins
tags:
- agent builder
x-codeSamples:
- lang: curl
source: |
curl \
-X GET "${KIBANA_URL}/api/agent_builder/plugins" \
-H "Authorization: ApiKey ${API_KEY}"
- lang: Console
source: |
GET kbn://api/agent_builder/plugins
x-state: Technical Preview
x-metaTags:
- content: Kibana, Elastic Cloud Serverless
name: product_name
/api/agent_builder/plugins/{pluginId}:
delete:
description: |-
**Spaces method and path for this operation:**

<div><span class="operation-verb delete">delete</span>&nbsp;<span class="operation-path">/s/{space_id}/api/agent_builder/plugins/{pluginId}</span></div>

Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.

Delete an installed plugin by ID. This action cannot be undone.<br/><br/>[Required authorization] Route required privileges: agentBuilder:write.
operationId: delete-agent-builder-plugins-pluginid
parameters:
- description: A required header to protect against CSRF attacks
in: header
Comment on lines +3199 to +3208
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Use the declared path parameter name in the examples.

These samples use {id}, but the path is declared as {pluginId}. Copy-pasting them as-is will hit the wrong route shape in the docs and Console examples.

Suggested doc fix
-            curl \
-              -X DELETE "${KIBANA_URL}/api/agent_builder/plugins/{id}" \
+            curl \
+              -X DELETE "${KIBANA_URL}/api/agent_builder/plugins/{pluginId}" \
               -H "Authorization: ApiKey ${API_KEY}" \
               -H "kbn-xsrf: true"
...
-            DELETE kbn://api/agent_builder/plugins/{id}
+            DELETE kbn://api/agent_builder/plugins/{pluginId}
...
-            curl \
-              -X GET "${KIBANA_URL}/api/agent_builder/plugins/{id}" \
+            curl \
+              -X GET "${KIBANA_URL}/api/agent_builder/plugins/{pluginId}" \
               -H "Authorization: ApiKey ${API_KEY}"
...
-            GET kbn://api/agent_builder/plugins/{id}
+            GET kbn://api/agent_builder/plugins/{pluginId}

Also applies to: 3232-3240

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@oas_docs/output/kibana.serverless.yaml` around lines 3165 - 3174, The
x-codeSamples examples use the wrong path parameter name "{id}" instead of the
declared "{pluginId}", which will break docs/Console copy-pastes; update the
curl and Console samples under x-codeSamples to use "{pluginId}" (replace
occurrences of "{id}" with "{pluginId}" in the DELETE examples shown and also
apply the same fix to the other occurrence block around lines 3232-3240) so the
example path matches the declared path parameter (referencing the x-codeSamples
entries for correction).

Comment thread
pgayvallet marked this conversation as resolved.
name: kbn-xsrf
required: true
schema:
example: 'true'
type: string
- description: The unique identifier of the plugin.
in: path
name: pluginId
required: true
schema:
type: string
responses:
'200':
content:
application/json:
examples:
deletePluginResponseExample:
description: Example response showing that deletion of the plugin has been successful
value:
success: true
description: Indicates a successful response
summary: Delete a plugin
tags:
- agent builder
x-codeSamples:
- lang: curl
source: |
curl \
-X DELETE "${KIBANA_URL}/api/agent_builder/plugins/{id}" \
-H "Authorization: ApiKey ${API_KEY}" \
-H "kbn-xsrf: true"
- lang: Console
source: |
DELETE kbn://api/agent_builder/plugins/{id}
x-state: Technical Preview
x-metaTags:
- content: Kibana, Elastic Cloud Serverless
name: product_name
get:
description: |-
**Spaces method and path for this operation:**

<div><span class="operation-verb get">get</span>&nbsp;<span class="operation-path">/s/{space_id}/api/agent_builder/plugins/{pluginId}</span></div>

Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.

Get a specific plugin by ID.<br/><br/>[Required authorization] Route required privileges: agentBuilder:read.
operationId: get-agent-builder-plugins-pluginid
parameters:
- description: The unique identifier of the plugin.
in: path
name: pluginId
required: true
schema:
type: string
responses:
'200':
content:
application/json:
examples:
getPluginByIdResponseExample:
description: Example response returning a single installed plugin
value:
created_at: '2025-01-01T00:00:00.000Z'
description: Financial analysis tools and skills for Claude
id: financial-analysis
manifest:
author:
name: Anthropic
url: https://www.anthropic.com
keywords:
- finance
- analysis
repository: https://github.com/anthropics/financial-services-plugins
name: financial-analysis
skill_ids:
- financial-analysis-analyze-portfolio
source_url: https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis
unmanaged_assets:
agents: []
commands: []
hooks: []
lsp_servers: []
mcp_servers: []
output_styles: []
updated_at: '2025-01-01T00:00:00.000Z'
version: 1.0.0
description: Indicates a successful response
summary: Get a plugin by id
tags:
- agent builder
x-codeSamples:
- lang: curl
source: |
curl \
-X GET "${KIBANA_URL}/api/agent_builder/plugins/{id}" \
-H "Authorization: ApiKey ${API_KEY}"
- lang: Console
source: |
GET kbn://api/agent_builder/plugins/{id}
x-state: Technical Preview
x-metaTags:
- content: Kibana, Elastic Cloud Serverless
name: product_name
/api/agent_builder/plugins/install:
post:
description: |-
**Spaces method and path for this operation:**

<div><span class="operation-verb post">post</span>&nbsp;<span class="operation-path">/s/{space_id}/api/agent_builder/plugins/install</span></div>

Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.

Install a plugin from a [GitHub Claude plugin URL](https://code.claude.com/docs/en/plugins) or a direct ZIP URL. Plugins bundle agent capabilities such as skills.<br/><br/>[Required authorization] Route required privileges: agentBuilder:write.
operationId: post-agent-builder-plugins-install
parameters:
- description: A required header to protect against CSRF attacks
in: header
name: kbn-xsrf
required: true
schema:
example: 'true'
type: string
requestBody:
content:
application/json:
examples:
installPluginFromGithubExample:
description: Example request for installing a plugin from a GitHub URL
value:
url: https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis
installPluginFromZipExample:
description: Example request for installing a plugin from a direct zip URL
value:
url: https://my-server.example.com/my-plugin.zip
installPluginWithNameOverrideExample:
description: Example request for installing a plugin with a custom name
value:
plugin_name: my-custom-plugin-name
url: https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis
schema:
additionalProperties: false
type: object
properties:
plugin_name:
description: Optional name override for the plugin. Defaults to the manifest name.
type: string
url:
description: URL to install the plugin from (GitHub URL or direct zip URL).
type: string
required:
- url
responses:
'200':
content:
application/json:
examples:
installPluginResponseExample:
description: Example response returning the definition of the installed plugin
value:
created_at: '2025-01-01T00:00:00.000Z'
description: Financial analysis tools and skills for Claude
id: financial-analysis
manifest:
author:
name: Anthropic
url: https://www.anthropic.com
keywords:
- finance
- analysis
repository: https://github.com/anthropics/financial-services-plugins
Comment on lines +3281 to +3379
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Document the ZIP upload install flow in this public spec.

The PR adds direct ZIP uploads as a supported install source, but this operation only exposes the JSON { "url": ... } variant. That leaves the serverless OpenAPI incomplete for a supported capability, and generated clients/docs will miss the upload path entirely.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@oas_docs/output/kibana.serverless.yaml` around lines 3247 - 3345, The OpenAPI
operation post-agent-builder-plugins-install currently only documents JSON
installs via the "url" field; add documentation for the ZIP upload flow by
extending the requestBody for operationId post-agent-builder-plugins-install to
include a multipart/form-data media type that accepts a binary file (e.g., field
name "file" type: string, format: binary) and an optional "plugin_name" part,
and provide an example for file uploads; ensure the schema indicates that either
"url" (application/json) or "file" (multipart/form-data) is supported so
generated clients and docs expose the upload path.

Comment thread
pgayvallet marked this conversation as resolved.
name: financial-analysis
skill_ids:
- financial-analysis-analyze-portfolio
source_url: https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis
unmanaged_assets:
agents: []
commands: []
hooks: []
lsp_servers: []
mcp_servers: []
output_styles: []
updated_at: '2025-01-01T00:00:00.000Z'
version: 1.0.0
description: Indicates a successful response
summary: Install a plugin
tags:
- agent builder
x-codeSamples:
- lang: curl
source: |
curl \
-X POST "${KIBANA_URL}/api/agent_builder/plugins/install" \
-H "Authorization: ApiKey ${API_KEY}" \
-H "kbn-xsrf: true" \
-H "Content-Type: application/json" \
-d '{
"url": "https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis"
}'
- lang: Console
source: |
POST kbn://api/agent_builder/plugins/install
{
"url": "https://github.com/anthropics/financial-services-plugins/tree/main/financial-analysis"
}
x-state: Technical Preview
x-metaTags:
- content: Kibana, Elastic Cloud Serverless
name: product_name
/api/agent_builder/skills:
get:
description: |-
Expand Down
Loading
Loading