diff --git a/oas_docs/output/kibana.serverless.yaml b/oas_docs/output/kibana.serverless.yaml
index 16dde0fe5e140..5e11cd588cbef 100644
--- a/oas_docs/output/kibana.serverless.yaml
+++ b/oas_docs/output/kibana.serverless.yaml
@@ -34170,6 +34170,71 @@ paths:
x-metaTags:
- content: Kibana, Elastic Cloud Serverless
name: product_name
+ /api/fleet/agents/{agentId}/effective_config:
+ get:
+ description: |-
+ **Spaces method and path for this operation:**
+
+
get /s/{space_id}/api/fleet/agents/{agentId}/effective_config
+
+ Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.
+
+ Get an agent's effective config by ID.
[Required authorization] Route required privileges: fleet-agents-read.
+ operationId: get-fleet-agents-agentid-effective-config
+ parameters:
+ - description: The agent ID to get effective config of
+ in: path
+ name: agentId
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ content:
+ application/json:
+ examples:
+ successResponse:
+ value:
+ effective_config: {}
+ schema:
+ additionalProperties: false
+ type: object
+ properties:
+ effective_config: {}
+ required:
+ - effective_config
+ description: 'OK: A successful request.'
+ '400':
+ content:
+ application/json:
+ examples:
+ badRequestResponse:
+ value:
+ message: Bad Request
+ schema:
+ additionalProperties: false
+ description: Generic Error
+ type: object
+ properties:
+ attributes: {}
+ error:
+ type: string
+ errorType:
+ type: string
+ message:
+ type: string
+ statusCode:
+ type: number
+ required:
+ - message
+ - attributes
+ description: A bad request.
+ summary: Get an agent's effective config
+ tags:
+ - Elastic Agents
+ x-metaTags:
+ - content: Kibana, Elastic Cloud Serverless
+ name: product_name
/api/fleet/agents/{agentId}/migrate:
post:
description: |-
diff --git a/oas_docs/output/kibana.yaml b/oas_docs/output/kibana.yaml
index c9790aec8fbe0..fa36cf7426007 100644
--- a/oas_docs/output/kibana.yaml
+++ b/oas_docs/output/kibana.yaml
@@ -36745,6 +36745,71 @@ paths:
x-metaTags:
- content: Kibana
name: product_name
+ /api/fleet/agents/{agentId}/effective_config:
+ get:
+ description: |-
+ **Spaces method and path for this operation:**
+
+ get /s/{space_id}/api/fleet/agents/{agentId}/effective_config
+
+ Refer to [Spaces](https://www.elastic.co/docs/deploy-manage/manage-spaces) for more information.
+
+ Get an agent's effective config by ID.
[Required authorization] Route required privileges: fleet-agents-read.
+ operationId: get-fleet-agents-agentid-effective-config
+ parameters:
+ - description: The agent ID to get effective config of
+ in: path
+ name: agentId
+ required: true
+ schema:
+ type: string
+ responses:
+ '200':
+ content:
+ application/json:
+ examples:
+ successResponse:
+ value:
+ effective_config: {}
+ schema:
+ additionalProperties: false
+ type: object
+ properties:
+ effective_config: {}
+ required:
+ - effective_config
+ description: 'OK: A successful request.'
+ '400':
+ content:
+ application/json:
+ examples:
+ badRequestResponse:
+ value:
+ message: Bad Request
+ schema:
+ additionalProperties: false
+ description: Generic Error
+ type: object
+ properties:
+ attributes: {}
+ error:
+ type: string
+ errorType:
+ type: string
+ message:
+ type: string
+ statusCode:
+ type: number
+ required:
+ - message
+ - attributes
+ description: A bad request.
+ summary: Get an agent's effective config
+ tags:
+ - Elastic Agents
+ x-metaTags:
+ - content: Kibana
+ name: product_name
/api/fleet/agents/{agentId}/migrate:
post:
description: |-
diff --git a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts
index d6c8dcf141e7e..c15891f1e305a 100644
--- a/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts
+++ b/x-pack/platform/plugins/shared/fleet/common/experimental_features.ts
@@ -29,7 +29,7 @@ const _allowedExperimentalValues = {
enableVarGroups: false, // When enabled, var_groups from the package spec drive conditional variable visibility and input filtering.
enableIntegrationInactivityAlerting: true, // When enabled, an inactivity monitoring alerting rule template is created on fresh integration package install.
enableSimplifiedAgentlessUX: true, // When enabled, the agentless deployment mode will be simplified for single input/datastreams integrations.
- enableOpAMP: false, // When enabled, OpAMP features will be available in the API and UI.
+ enableOpAMP: true, // When enabled, OpAMP features will be available in the API and UI.
enableOTelVerifier: false, // When enabled, OTel-based cloud connector permission verification is active.
enableResolveDependencies: false, // When enabled, the resolve dependencies step will be available during package installation.
};
diff --git a/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts b/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts
index 8f6987ab1d1d1..d32051efc24c1 100644
--- a/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts
+++ b/x-pack/platform/plugins/shared/fleet/cypress/e2e/fleet_agent_flyout.cy.ts
@@ -5,14 +5,15 @@
* 2.0.
*/
-import { ADD_AGENT_BUTTON, AGENT_FLYOUT } from '../screens/fleet';
+import { API_VERSIONS } from '@kbn/fleet-plugin/common/constants';
+
+import { ADD_AGENT_BUTTON, ADD_AGENT_MENU_BUTTON, AGENT_FLYOUT } from '../screens/fleet';
import { cleanupAgentPolicies, deleteAgentDocs } from '../tasks/cleanup';
import { createAgentDoc } from '../tasks/agents';
import { setFleetServerHost } from '../tasks/fleet_server';
import { FLEET, navigateTo } from '../tasks/navigation';
import { request } from '../tasks/common';
-import { API_VERSIONS } from '@kbn/fleet-plugin/common/constants';
import { login } from '../tasks/login';
const FLEET_SERVER_POLICY_ID = 'fleet-server-policy';
@@ -66,6 +67,8 @@ describe('Fleet add agent flyout', () => {
const AGENT_ID = 'agent' + Date.now();
navigateTo(FLEET);
+ // When enableOpAMP is on, addAgentButton lives inside a popover — open it first.
+ cy.getBySel(ADD_AGENT_MENU_BUTTON).click();
cy.getBySel(ADD_AGENT_BUTTON).click();
cy.intercept('POST', '/api/fleet/agent_policies?sys_monitoring=true').as('createAgentPolicy');
diff --git a/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts b/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts
index 3ce215ae8ee87..3b47cfe1de8a5 100644
--- a/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts
+++ b/x-pack/platform/plugins/shared/fleet/cypress/screens/fleet.ts
@@ -6,6 +6,7 @@
*/
export const ADD_AGENT_BUTTON = 'addAgentButton';
+export const ADD_AGENT_MENU_BUTTON = 'addAgentMenuButton';
export const ADD_AGENT_BUTTON_TOP = 'addAgentBtnTop';
export const LANDING_PAGE_ADD_FLEET_SERVER_BUTTON = 'fleetServerLanding.addFleetServerButton';
diff --git a/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts b/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts
index 16b0101d634de..e36ebdf2d6987 100644
--- a/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts
+++ b/x-pack/platform/plugins/shared/fleet/test/scout/ui/fixtures/page_objects/fleet_home.ts
@@ -33,10 +33,19 @@ export class FleetHomePage {
return this.page.testSubj.locator('fleet-agents-tab');
}
+ getAddAgentMenuButton() {
+ return this.page.testSubj.locator('addAgentMenuButton');
+ }
+
getAddAgentButton() {
return this.page.testSubj.locator('addAgentButton');
}
+ async openAddAgentMenu() {
+ const menuButton = this.getAddAgentMenuButton();
+ await menuButton.click();
+ }
+
getAddFleetServerHeader() {
return this.page.testSubj.locator('addFleetServerHeader');
}
diff --git a/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts b/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts
index cd088978f4ec1..130a28b14bf96 100644
--- a/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts
+++ b/x-pack/platform/plugins/shared/fleet/test/scout/ui/tests/privileges_editor_role.spec.ts
@@ -42,6 +42,9 @@ test.describe('When the user has Editor built-in role', { tag: tags.stateful.cla
await fleetHome.navigateTo();
await fleetHome.waitForPageToLoad();
+ // When enableOpAMP is on, addAgentButton lives inside a popover — open it first.
+ await fleetHome.openAddAgentMenu();
+
// Verify Add Agent button exists
await expect(fleetHome.getAddAgentButton()).toBeVisible();
});