- Skill ID
- elastic/agent-skills/kibana-workflows
- Publisher
- elastic
- Repository
- agent-skills
- Installs
- 0
- Files
- 8
- Requires
- Kibana 9.4 or later with matching Elasticsearch and an Enterprise license,
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
elastic/agent-skills/kibana-workflowsInstalls these files- SKILL.md
- references/demo-test-loop.md
- references/generation-tips.md
- references/generator-path.md
- references/path-performance.md
- references/schema-path.md
- references/workflow-patterns.md
- references/workflow-yaml-reference.md
What this skill tells the agent
Author Elastic Workflows
Create and iterate on Elastic Workflow YAML definitions. Workflows are declarative automations that run inside Kibana: they query Elasticsearch, set data, branch, loop, call connectors, create cases, notify external systems, and invoke AI steps.
<!-- begin-partial: preamble -->
Environment Configuration
This skill executes Elasticsearch operations through the elastic CLI. If the `elastic` CLI is not installed, tell the user what it is needed for. Do not guess credentials, call the HTTP API directly, or attempt other workarounds.
This skill references operations in HTTP-shorthand form (e.g., GET /, GET /_cat/indices, GET /{index}/_mapping, GET /{index}/_settings/index.mode, POST /_query). The Operations table at the end of this document maps each shorthand to the equivalent elastic CLI command — always use the CLI rather than calling the HTTP API directly.
<!-- end-partial: preamble -->
If the user asks only for a draft or explanation and explicitly forbids live access, skip connection verification and do not call the CLI or APIs. State that the draft was not validated against a target deployment.
If workflow APIs are unavailable, report the returned status and message. Common causes are an unsupported Kibana version, insufficient license or feature privileges, or Workflows not being offered on the target project. The workflows:ui:enabled setting controls the Kibana UI; it does not remove the public Workflows APIs.
Pick the authoring path
Default to the Discovery-tools path below — the platform.workflows.* tools are registered by default on Kibana 9.5+ and Serverless. Confirm with one probe: GET kbn:/api/agent_builder/tools returns { "results": [ { "id": ... } ] }; save it to a file and grep for "id": "platform.workflows.". Two fallbacks, both loaded only when needed:
- No
agent_builderendpoint (404) or noplatform.workflows.*ids (e.g. Kibana 9.4) → read references/schema-path.md and hand-author from the raw JSON Schema. - An LLM connector is wired into Agent Builder and the user prefers Kibana's own generator → read references/generator-path.md.
State which path you picked and why in one sentence before proceeding. Measured path benchmarks live in references/path-performance.md.
Guidelines (all paths)
- Treat tests as executions.
POST kbn:/api/workflows/testruns the workflow graph, andPOST kbn:/api/workflows/step/testruns the selected step. Test only when every executed action is read-only or the user authorized its effects. Otherwise test a copy whose writes, notifications, and external calls are replaced withconsole, then restore the real steps and save the workflow disabled. - Cite endpoints in HTTP shorthand, never raw transport. This skill's body refers to operations like
POST kbn:/api/workflows/test. The Operations table is the single place where shorthand binds to a concrete CLI command. - Prefer purpose-built actions over generic `http`. For Slack/Jira/PagerDuty/etc., prefer the connector step type (e.g.
slack2.sendMessage) over a rawhttpcall. Discover the exact action type viaget_step_definitions(or the strict schema on the fallback path). - *Reference step outputs as `steps.<name>.output`, never `steps.<name>.with.
.** Trigger event data isevent, nevertrigger.eventortriggers.event`. - Don't guess connector ids. Call
platform.workflows.get_connectors(Discovery-tools path) orGET kbn:/api/workflows/connectors(Schema path), or ask the user. Placeholders should be obviously fake. - Handle failure deliberately. Add retry or fallback behavior where the user's requirements call for resilience. Do not add
continue: trueeverywhere: it can hide a failed action and allow the workflow to report false success. - Surface gates, don't paper over them. If the API returns
403 ... not available, report the required license or privileges; do not silently retry or blame the UI setting.
Discovery-tools path
Use when platform.workflows.* tools are registered on the target Kibana. All calls go through POST kbn:/api/agent_builder/tools/_execute with { "tool_id": "...", "tool_params": { ... } }. Response shape: { "results": [ { "type": "other", "data": { ... }, "tool_result_id": "..." } ] } — the payload you want is .results[0].data. Send the request body from a file and write the response to a file (see Operations), then jq against that file; do not inline python3 -c on multi-line JSON.
Keep context small; minimize round-trips. Do NOT front-load the whole step catalog — pull only the targeted details you need, keep large tool output in files (not the transcript), and author in as few turns as possible (measured rationale: references/path-performance.md).
- Capture the user's intent before writing YAML. Identify, in order, the trigger (
manual/scheduled/alert), the inputs the workflow will receive at runtime, the data sources it must read, the actions it must take, and the desired output. If a required dependency is unknown (e.g. a Slack connector id), ask the user or use a clearly-marked placeholder.
- Look up only what you'll use. For the specific step types this workflow needs:
platform.workflows.get_step_definitionswith an exactstepType(e.g."http","elasticsearch.esql.query","slack2.sendMessage"), or withsearchto browse. The response includes input params, config params, anoutputSummarywhen you passincludeOutputSummary: true, and usage examples. PassincludeFullSchema: trueonly if the compact summary is insufficient.platform.workflows.get_trigger_definitionsfor the trigger event schema.platform.workflows.get_connectorsto resolve realconnector-idvalues for connector actions.platform.workflows.get_exampleswhen you need a working YAML shape for a pattern.
Write each response to a file and jq the field you need — don't let full tool output land in the transcript.
- Draft the whole workflow in one pass. A workflow requires
name, at least one trigger, and a non-emptystepsarray. Use 2-space indentation. Reference outputs assteps.<name>.output.*. Build the complete YAML in a single edit rather than growing it across many turns.
- Validate once. Call
platform.workflows.validate_workflowwith{ "yaml": "..." }. On failure it returns errors + step definitions for referenced step types automatically, so you rarely need a secondget_step_definitionscall. Fix all reported issues in a single edit, then re-validate.
- Test, save, and run. See Test / save / run below. Use
platform.workflows.workflow_execute_stepto iterate on a single step (withconfirmation_bodyfor unsafe steps).
Schema path (last resort)
Only for Kibanas without the platform.workflows.* tools (see the probe above). Full recipe: references/schema-path.md.
Test / save / run
Shared final phase for both paths.
- Test only an execution-safe draft. Call
POST kbn:/api/workflows/testwith the YAML inline asworkflowYamland the run-timeinputs. For any workflow that writes / notifies / calls external services, replace those steps withconsolein the tested copy first, then restore them and save the workflow disabled.
- Poll the execution. The response carries a
workflowExecutionId. PollGET kbn:/api/workflows/executions/{executionId}untilstatusis one ofcompleted,failed,cancelled, ortimed_out; then fetchGET kbn:/api/workflows/executions/{executionId}/logsfor step-by-step output. Only treat
More from elastic
Use this skill in a project
Open any RiverX project, search the Skills panel for elastic/agent-skills/kibana-workflows, and install it in one click.
