作者:来自 Elastic  Josh Mock, Matt Ryan

Elastic CLI 通过一条命令即可访问所有 Elasticsearch、Kibana 和 Cloud API,它也是 Elastic Agent Skills 运行所依赖的工具。在任何内容离开你的计算机之前,输入都会根据 JSON Schema 进行验证,而 API keys 会保存在你的操作系统密钥链中。

更多阅读:开启终端新体验:全新 Elastic CLI 实用指南(技术预览版)

上手体验 Elasticsearch:深入了解我们在 Elasticsearch Labs 仓库 中提供的示例 notebook,开始 免费云试用,或者现在就在你的本地计算机上试用 Elastic

Elastic CLI 为每个公开的 Elastic API 提供一条命令: ElasticsearchKibana 以及 Elastic Cloud 的控制平面,包括 Serverless 项目。学习 elastic es search,你就已经知道 elastic kb data-views list 的行为方式。它既可以像由你操作一样轻松地由 AI 编程 agent 驱动,因此每条命令都接受 JSON 输入并输出 JSON,并且会在发送任何内容之前,根据 JSON Schema 验证输入。此外,它还会以退出代码结束,agent 可以根据该代码进行分支处理。管理员可以控制哪些命令可以运行,而 API keys 会存储到你的操作系统密钥链中,绝不会进入大型语言模型(LLM)对话记录。我们的 Agent Skills 现在就在其上运行。命令行界面(CLI)目前处于技术预览阶段。

开始免费试用 Elastic Cloud Serverless登录 Elastic Cloud 来跟随本文操作,并通过 npm 安装 CLI:

npm install -g @elastic/cli

为人类和 AI agent 设计 Elastic CLI

构建面向开发者的灵活工具所带来的一个有用副作用是,它们对 AI agent 也更加有用。这也是我们的 Agent Skills 现在用来完成工作的工具,从而闭合了我们在 2026 年 3 月开启的循环 —— 当时我们宣布,用于 agent 工作流的 CLI 即将推出。

CLI 为 Elasticsearch、Kibana 和 Elastic Cloud 中的每个公开 API 提供统一的形式:相同的 flags、输入和输出约定、身份验证方式以及失败模式。一致性就是易用性特性;其他一切都建立在此基础之上。

Agent 需要的是同样的东西,只是要求更加严格。agent 不会知道如何构造一个有效的 CLI 命令,也不会注意到某个工具是否 “感觉” 不对;它需要能够解析的输出,以及能够在发送之前进行验证的输入,同时还需要能够据此进行分支处理的失败信息。无论 agent 是运行在平台上,还是运行在你的编辑器和终端中,如今它们都和人一样,成为 Elastic 的一等接口。Agent Skills,以及现在的 CLI,就是我们服务第二类 agent 的方式,因此这些需求从一开始就被构建进 CLI 的核心,而不是事后附加上去。

每条命令都支持 JSON 输入和输出

Agent 喜欢结构化文本,而几乎所有 Elastic API 本身都已经使用 JSON,因此一流的 JSON 支持是一个硬性要求。熟悉 jq 查询的开发者也会同样满意。

  • JSON 输出:任何命令,例如 elastic versionelastic es indices delete ...,都支持 --json,它会将可由 JSON 解析的输出打印到 stdout,并且不输出任何其他内容。失败的命令会将 {"error": {"code": "...", "message": "..."}} 打印到 stderr。

  • JSON 输入:每个接受输入的命令都支持从 stdin 或通过 --input-file 接收 JSON。该 JSON 中的每个顶层键也都可以作为 CLI 参数使用,并且内联参数具有更高优先级,因此你可以将较大的请求正文保存在文件中,并在每次调用时调整一两个值。

  • JSON Schema 作为 --help 输出:向任何命令传递 --help --json,它都会打印该命令输入所对应的有效 JSON Schema,这也可以很好地用于代码生成工具。elastic cli-schema 会打印完整的命令树。

AI agent 可以根据其进行分支处理的退出代码

Agent 对退出代码的依赖程度和对 stdout 的依赖一样高。即使完全不读取 stdout 和 stderr,所有失败模式也都可以与成功区分开来。

安全护栏:密钥链存储、允许列表和验证

没有任何模型能够在 100% 的情况下完美地使用工具,因此面向 agent 的 CLI 应该尽可能在各个方面提供安全护栏。

  • 上下文和机密存储:连接详细信息以类似 kubectl 的方式存储在 ~/.elasticrc.yml 中的命名上下文中;使用 --use-context 进行切换。API 命令从不将凭据作为 flags 接收。elastic config context add 会将 API keys 写入你的操作系统密钥链(macOS、Linux、Windows),并在 YAML 中保留 $(keychain:...) 引用;$(env:...)$(cmd:...)$(file:...) 也同样有效。使用 --save-as 创建 Serverless 项目时,其凭据会直接写入密钥链,并且绝不会将凭据打印出来,因此不会泄漏到日志或 LLM 对话记录中。

  • 允许列表/阻止列表:配置文件中的 commands.allowed(或 commands.blocked)列表可以在全局范围或针对每个上下文进行设置,从而确保只有管理员允许的命令才能运行。

commands:
   allowed:
     - version
     - stack.es.search
     - stack.es.esql.*
  • 验证:每条命令都有一个 JSON Schema,因此输入会在发送任何请求之前进行验证。对于任何接受输入的命令,添加 --dry-run 后,它会执行验证并退出,而不会发送任何内容。

  • 确认:具有破坏性的命令会在终端中提示确认。在 agent 所处的非交互式会话中,如果没有 --yes,这些命令会拒绝运行,并通过结构化错误说明原因。

  • 清理:索引、字段和管道名称都有长度限制以及禁止使用的字符。elastic sanitize index-name '<value>'(以及 field-namepipeline-name 等)会输出一个去除所有无效内容后的版本。

将 API 响应控制在 agent 的上下文窗口内

Elastic API 会返回大量数据,而 agent 的上下文窗口是有限的。以下三种控制方式有助于避免不必要的文本进入上下文窗口:

  • 字段掩码:--output-fields 接受以逗号分隔的列表,并使用点号表示法指定嵌套字段。

elastic es info --output-fields 'name,version.number'
 # {
 #   "name": "serverless",
 #   "version": { "number": "9.5.0" }
 # }
  • 字符串模板:为了实现完全控制,--output-template 接受 mustache 风格的模板。

elastic es info --output-template 'ES version: {{ version.number }}'


# ES version: 9.5.0
  • 命令配置文件:--command-profile serverless(或者在配置中设置 default_profile: serverless)会隐藏 Elastic Cloud Hosted 命令以及 Serverless 中不存在的 Elasticsearch 命名空间。这意味着需要浏览的内容更少,也意味着 agent 猜错的可能性更低。这是我们推荐 agent 使用的配置文件。

控制方式功能语法使用场景
字段掩码仅返回你指定的字段,对于嵌套字段使用点号表示法--output-fields 'name,version.number'你希望获得有效的 JSON,只是内容更少。这是 agent 解析结构化输出时的默认选择。
字符串模板通过 mustache 风格的模板渲染响应--output-template 'ES version: {{ version.number }}'你需要以特定格式获取一个值,用于 shell 变量、日志行或提示词。
命令配置文件隐藏与你的部署不适用的命令和命名空间--command-profile serverlessdefault_profile: serverless你希望使用更小的命令范围,让 agent 需要浏览的内容更少,也减少猜错的可能性。我们推荐 agent 使用此配置文件。

用于批量写入、滚动搜索和 msearch 的辅助工具

Elasticsearch 的一些最常用 API 存在一定的学习曲线,因此 elastic es helpers 对它们进行了封装:

  • scroll-search:将大型结果集以 NDJSON 形式进行流式传输,分页由你无需手动处理。

  • bulk-ingest:从文件、目录或 stdin 导入数据(NDJSON、JSON 数组或 CSV),并支持流式处理、批处理、并发和重试。

  • msearch:在一个请求中发送多个搜索请求。

  • watch:在文档写入索引时,将索引中的新文档打印到 stdout。这非常适合通过管道传输到日志工具。

elastic eselastic kbelastic stack elasticsearchelastic stack kibana 的别名。如果我们没有提供你需要的命令,可以使用 elastic extension create 为你创建命令脚手架。

从终端搜索 Elastic 文档

如果你或你的 agent 不知道应该使用哪个 API,elastic docs search(以及 docs readdocs ask)可以从终端搜索 Elastic 文档,并返回 Markdown 或 --json。这些功能目前处于实验阶段。在传入 --accept-experimental 之前,你会看到一条警告,因此可以进行探索,但暂时不要针对它们编写脚本。

Bash、Zsh 和 Fish 的 Shell 补全

Bash、Zsh 和 Fish 都提供了自动补全功能,并且它们始终遵循你的 commands.allowedcommands.blocked 策略。

Elastic Agent Skills 如何使用 CLI

Agent Skills 教会 AI 编程 agent 如何以 Elastic 专家的方式处理工作;例如,哪个集群健康字段代表最终判断,或者如何分阶段执行重新索引以避免其崩溃。它们记录的是流程和判断,而不是传输方式。一个嵌入了带认证请求头的 curl 的 skill,会将主机名、密钥和运行时环境硬编码其中,而当其中任何一项发生变化时,它就会失效。

因此,我们的 skills 现在使用一种通用格式,可以在任何能够执行 elastic CLI 的运行时中保持不变地运行,包括 Claude Code、Codex、Cursor 和 GitHub Copilot。正文使用 HTTP 简写形式引用操作(GET /_cluster/healthPOST /_query),并在末尾提供一个操作表,将每项操作绑定到一个 CLI 命令。该表是传输方式出现的唯一位置:

HTTP API(简写)elastic CLI 命令
GET /{index}/_mappingelastic es indices get-mapping --index '<index>'
POST /_queryelastic es esql query --format tsv --query "<esql>"
POST cloud:/api/v1/serverless/projects/elasticsearchelastic cloud serverless projects search create --input-file <json> --wait --save-as <ctx>

每个通用 skill 还会继承一段直接明确的前置说明;也就是说,使用 CLI,不要猜测凭据,不要直接调用 HTTP API,也绝不要要求用户将 API key 粘贴到聊天中。

这两个部分彼此需要对方。skill 提供模型所不具备的专业知识,而 CLI 则提供了一种经过验证、凭据安全并受你的允许列表限制的执行方式。告诉你的 agent 启动一个 Serverless 项目并将 products.csv 加载进去,配置 skill 就会使用 --save-as 创建项目。导入 skill 会对映射执行试运行,然后使用 elastic es bulk 加载数据,而 Elasticsearch Query Language(ES|QL)skill 会编写一个第一次尝试就能解析成功的查询。每一步都会返回 JSON,失败时以非零状态码退出,并且只能执行你的策略所允许的操作。

目前已经提供用于 Elastic Cloud 入门和配置、Elastic Workflows 以及 Kubernetes 调查的 skills。用于 Elasticsearch 查询、数据导入、重新索引和索引设计,以及 Kibana 仪表板和告警的 skills 也即将推出。

Elastic CLI 技术预览版包含什么,以及下一步是什么

该预览版涵盖所有公开的 Elasticsearch Serverless、Kibana Serverless 和 Elastic Cloud API。仅适用于 Hosted 的 9.x Elasticsearch API 覆盖率已经接近 100%,仅适用于 Hosted 的 9.x Kibana API 也将很快加入。

我们正在积极规划更多开发者体验方面的工作,包括更广泛地覆盖所有受支持的 Stack 版本、为常见工作流提供更多辅助工具、在公共目录中提供更多 skills,以及将相同的 skills 加载到运行在 Elastic 平台本身上的 agent 中。这个列表最终会如何形成,取决于我们听到的你和你的 agent 如何使用 CLI。请告诉我们哪些地方使用起来不方便、缺少哪些功能,以及你接下来希望自动化什么。

安装 Elastic CLI 和 Agent Skills

Elastic CLI 目前已经可以通过 npm 获取(Node.js 22+)。同时安装 CLI 和 skills:

npm install -g @elastic/cli # 或:npx -y @elastic/cli --help
npx skills add elastic/agent-skills

然后添加一个上下文并进行检查:

elastic config context add prod --es-url https://<project>.es.us-east-1.aws.elastic.cloud --es-api-key <KEY>
elastic status

即使没有项目,你也可以在大约一分钟内开始免费 Serverless 试用,无需信用卡。如果你已经拥有项目,请登录,并为 Elastic Cloud 和你的 Elasticsearch 集群创建 API keys。在让 agent 连接任何真实环境之前,先从试用项目、只读密钥以及范围受限的 commands.allowed 列表开始。请务必花五分钟阅读 skills 仓库中的安全说明

将 Bash 脚本中的所有 curl 命令替换掉,并在你的 AGENTS.md 中添加一些使用说明。然后让你的 agent 的 skills 高效、准确地使用我们的 API。告诉我们你的想法,如果你发现 bug 或者你的使用场景没有得到良好支持,也不要犹豫,提交 issue。你的反馈会直接影响我们下一步构建的内容。

Elastic CLI 和 Agent Skills 资源

原文:Elastic CLI: One command for every API, built for agents | Elasticsearch Labs

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐