Connect Elastic Agent Builder agents and Elastic Workflows

Elastic Workflows and Elastic Agent Builder combine deterministic automation with conversational reasoning. You can create workflows conversationally, make workflows available to agents, and invoke agents from workflows.

There are three ways to use Elastic Agent Builder and workflows together:

  • Create workflows from Agent Chat: Create and edit workflows by describing what you want in plain language. Kibana generates and updates the workflow YAML for you, so you can quickly build without memorizing step types or Liquid syntax.
  • Use workflows from agents: Trigger an existing workflow from a conversation with a workflow tool , or assign pre-execution workflows that run before the agent starts reasoning.
  • Use agents from workflows: Invoke an agent from a workflow with the ai.agent step. For advanced API operations, use the kibana.request step.

Before you begin:

  • Familiarize yourself with the core concepts of Elastic Workflows.
  • Turn on Elastic Workflows through the workflows:ui:enabled advanced setting, which is on by default in 9.4 and later. When this setting is off, the workflow options in Elastic Agent Builder are hidden and assigned workflows don't run.
  • Make sure you have the appropriate subscription. Elastic Workflows requires an Enterprise subscription on Elastic Stack deployments, or the appropriate project feature tier on Serverless.
  • Make sure you have the correct privileges to create and run workflows.

For details, refer to Set up workflows.

Pre-execution workflows run after each user message, before the agent makes any calls to the large language model (LLM) in response. They let you use Elastic Workflows for deterministic preparation or control before the agent begins its reasoning loop.

Note

Configuring an agent's pre-execution workflows requires a role that grants wildcard (*) Kibana privileges, such as the built-in superuser role. You can't grant this from the Kibana role management UI.

Changing the space setting works differently: it requires the manage_advanced_settings privilege, which you can grant through the Advanced Settings feature privilege.

A pre-execution workflow runs once for each user message. It does not run before every LLM call or tool call within the agent's response.

Pre-execution workflows can:

  • Add or rewrite prompt context before the agent starts.
  • Cancel the agent run when a workflow detects that the request should not continue.
  • Run multiple workflows in sequence when more than one workflow is assigned.

You can assign pre-execution workflows to a single agent or to every agent in a space. If you do both, the agent runs the workflows from both settings.

  1. Select Manage components at the bottom of the left sidebar to open the Agents list.
  2. Select an agent, then select SettingsPre-execution workflow.
  3. Open the Workflows selector.
  4. Select one or more workflows. They run after each user message, before the agent makes any LLM calls in response.
  5. Save the agent.

To confirm the setup, send a message to the agent, then check that the run appears in the workflow's execution history.

The following screenshot shows the Pre-execution workflow setting in the agent Settings view.

Edit agent settings flyout showing the Pre-execution workflow section with a workflow selector

The prerequisites apply here too. In addition, the Agent Builder section in GenAI Settings appears only when the agentBuilder:experimentalFeatures advanced setting is turned on. It's off by default.

  1. Go to Stack ManagementAIGenAI Settings.
  2. In the Agent Builder section, find Pre-execution workflow and open the Workflows selector.
  3. Select one or more workflows.
  4. Select Save changes.

To confirm the setup, send a message to any agent in the space, then check that the run appears in the workflow's execution history.

Workflows that you assign here run for every agent in the space, in addition to any workflows you assign to an individual agent. If you assign the same workflow in both places, it runs only once.

Agents keep running these workflows whenever Elastic Workflows is turned on, even if you later turn off agentBuilder:experimentalFeatures and the Agent Builder section disappears. To clear the setting when the section is hidden, use the API. Refer to Remove the workflow from the space setting.

Disabling a workflow doesn't remove it from the agents or spaces that use it. Until you remove the workflow, every message to the affected agents fails. Refer to Disabled pre-execution workflow.

Follow these steps to invoke an ai.agent as a step within a workflow.

  1. Open the Workflows editor and create or edit a workflow.
  2. Add a new step with the type ai.agent.
  3. Set the agent-id parameter at the top level of the step to the unique identifier of the target agent. If you omit it, the step uses the built-in Elastic AI Agent.
  4. In the with block, set the message parameter to your natural language prompt.
  5. Optionally, in the with block, set the schema parameter to a JSON Schema object to receive structured output from the agent instead of free-text.
  6. Optionally, route the step to a specific model by setting connector-id or inference-id at the top level of the step. These parameters are mutually exclusive.

The following example demonstrates a workflow that searches for flight delays and uses the Elastic AI Agent to summarize the impact. To follow along with this example ensure that the Kibana sample flight data is installed.

version: "1"
name: analyze_flight_delays
description: Fetches delayed flights and uses an agent to summarize the impact.
enabled: true
triggers:
  - type: manual
steps:
  # Step 1: Get data from Elasticsearch
  - name: get_delayed_flights
    type: elasticsearch.search
    with:
      index: "kibana_sample_data_flights"
      query:
        range:
          FlightDelayMin:
            gt: 60
      size: 5

  # Step 2: Ask the agent to reason over the data
  - name: summarize_delays
    type: ai.agent
    agent-id: "elastic-ai-agent"
    with:
      message: |
        Review the following flight delay records and summarize which airlines are most affected and the average delay time:
        {{ steps.get_delayed_flights.output }}

  # Step 3: Print the agent's summary
  - name: print_summary
    type: console
    with:
      message: "{{ steps.summarize_delays.output }}"
		
  1. agent-id: The ID of the agent you want to call (must exist in Agent Builder). Set it at the top level of the step, not in the with block.
  2. message: The prompt sent to the agent. You can use template variables (like {{ steps.step_name.output }}) to inject data dynamically.

Set agent-id and other configuration keys at the top level of the step. Set inputs like message in the with block.

Parameter Location Type Required Description
agent-id Top level string No The unique identifier of the target agent (must exist in Elastic Agent Builder). Defaults to the built-in Elastic AI Agent.
connector-id Top level string No The GenAI connector to use for model routing. Mutually exclusive with inference-id.
inference-id Top level string No The inference endpoint ID to use for model routing. Mutually exclusive with connector-id.
create-conversation Top level boolean No When true, persists the conversation so that follow-up steps or later requests can continue it.
message with string Yes The natural language prompt to send to the agent. Can include template variables to reference data from previous steps.
schema with object No A JSON Schema object that defines the structure of the expected response. When provided, the agent returns structured data matching the schema instead of free-text.
conversation_id with string No Continue an existing conversation by ID.
attachments with array No Attachments to provide to the agent.

For the complete step reference, refer to ai.agent.

Use the generic kibana.request step to interact with Elastic Agent Builder APIs programmatically.

  1. Add a new step with the type kibana.request.
  2. Set the method (for example: GET, POST).
  3. Set the path to the specific Agent Builder API endpoint.

This step retrieves a list of all agents currently available in Agent Builder.

name: list_agents
enabled: true
triggers:
  - type: manual
steps:
  - name: list_agents
    type: kibana.request
    with:
      method: GET
      path: /api/agent_builder/agents
		

The elastic/workflows GitHub repo contains more than 50 examples you can use as a starting point.