- name
- elastic-cli-usage
- description
- Guides execution of elasticsearch CLI commands via elastic_cli, resolves serverless-specific errors, and routes tasks between CLI and MCP/Kibana API tools. Use when running es or kb commands, debugging elastic CLI argument syntax, hitting 410 serverless errors, or deciding whether to use elastic_cli vs native Kibana tools.
- metadata
- {"version":"0.3.0","visibility":"public"}
# Skill: elastic-cli-usage (verified gotchas)
Use `elastic_cli` tool for all CLI operations — credentials are injected automatically.
Pass `argv` as a JSON array of strings, e.g. `["es","cluster","health","--json"]`.
The `elastic` binary is NOT on PATH in the shell environment; never use bash for this.
For anything not listed here, call `elastic_cli` with `["es","<namespace>","--help"]` or `["kb","<namespace>","--help"]`.
---
## Shorthands
`es` = `stack es`, `kb` = `stack kb`. Both work.
---
## Prefer MCP/native tools over CLI
| Task | Prefer instead |
|------|---------------|
| ES\|QL queries | `eab_platform_core_execute_esql` |
| Index/datastream listing | `eab_platform_core_list_indices` |
| Streams | `eab_platform_streams_*` |
| Agent builder | `kibana_list_agents`, `kibana_list_tools` |
---
## Gotchas
### Serverless: many cluster APIs return 410
These all fail on serverless with "not available in serverless mode":
- `es cluster health` / `stats` / `get-settings`
- `es ilm get-lifecycle` / `get-status`
Use `es cat count --json` to verify connectivity on serverless instead.
### `es indices list` does not exist
Use `es indices get --index "*" --json` or `es indices get-data-stream --json`.
### `es cluster health-report` does not exist
The subcommand is `es cluster health`. There is no `health-report`.
### Agent builder subcommands use verbose REST-style names
`kb agent-builder agents list` and `tools list` do **not** exist. Real commands:
```
kb agent-builder get-agent-builder-agents --json
kb agent-builder get-agent-builder-tools --json
```
Pattern: `<http-method>-<resource-path>` throughout all of `kb`.
### `docs search` and `docs read` require named flags, not positional args
```
# WRONG — "too many arguments" error
["docs","search","index lifecycle management"]
["docs","read","https://www.elastic.co/..."]
# CORRECT
["docs","search","--query","index lifecycle management"]
["docs","read","--path","https://www.elastic.co/docs/..."]
```
Also: old `/guide/` URLs return `(no output)`. Use `elastic.co/docs/` URLs.
### `es esql query` requires `--query` flag, not positional
```
# WRONG
["es","esql","query","FROM logs-* | LIMIT 1"]
# CORRECT
["es","esql","query","--query","FROM logs-* | LIMIT 1","--json"]
```
### `kb slo find-slos-op` requires `--space-id`
Omitting it returns a validation error. Use `--space-id default`.
### `--output-fields` and `--output-template` are per-subcommand flags (placed at end)
They are listed as global flags in the help but must come after the full subcommand.
`--output-fields` returns `{}` for array responses — unreliable, avoid it.
`--output-template` only works for top-level scalar fields.
Just use `--json` and process the output.
### Never block on stdin
Never use `--input-file /dev/stdin` or `es helpers watch`. These block forever
and hang the `elastic_cli` tool with no way to cancel.
View on GitHub