为什么命令行越来越具有代理式功能
传统上,终端或 shell 是一种命令式工具,依赖于像 ls 、 grep 和 git 这样的预定义命令来执行特定指令。
然而,像Gemini CLI、Claude Code和AutoGPT这样的代理性命令行工具的最新进展已经将这个简单的实用程序转变为一个更动态和智能的助手。
这些代理式 CLI 工具允许用户用自然语言描述更高级的目标或任务,从而使简陋的 shell 栩栩如生。
它们可以规划步骤,利用各种工具完成不同任务(例如文件处理、代码执行和网络搜索),对输出进行推理,并充当辅助驾驶以帮助完成任务。
这显著减少了用户的心智负担,并最大限度地减少了多个工具之间的上下文切换。至关重要的是,用户通过批准或指导智能体的过程来保持控制权,确保自动化和用户监督之间的平衡。
在本文中,我们将探讨这些代理式工具的架构,对比不同的规划风格,如 ReAct 和计划-执行。
我们还将检查代理式工作流程的实际生命周期,从意图捕获到执行,并讨论可靠日常使用所需的关键安全护栏。
端到端代理式终端生命周期:一个提示,三个智能体
虽然人工智能在开发中的兴起通常与聊天界面(如 ChatGPT)和代理式 IDE(如Cursor)有关,但代理式 CLI 占据了一个独特的利基市场。基于 IDE 的智能体擅长于以丰富的视觉上下文为中心的代码任务,但它们通常局限于编辑器的窗口。
CLI 满足了开发人员管理基础设施和 git 工作流的需求:shell。这种无头的、可组合的特性允许它以 GUI 绑定代理无法做到的方式将工具和系统命令链接起来。然而,请注意,随着像 Gemini CLI 这样的智能体现在可以与 IDE(如 VSCode)集成以提供其建议的差异视图,这种区别正在变得模糊。
为了详细说明代理式终端工具的强大功能,让我们讨论一个运行示例。
这些标记文件封装了关于如何构建和测试 repo 的事实,以及文档和脚本的约定。他们基本上是代理的入职文件。例如,Gemini CLI 的文件名为“Gemini.md”。Claude Code 工具也使用了类似的约定。
考虑一个常见场景,开发人员需要用标准文档和自动化脚本启动一个新的存储库。与其手动创建每个文件并编写样板代码,代理式 CLI 可以从单个高级指令处理整个过程,从而确保一致性并节省宝贵的时间。
输入提示:
添加一个 CONTRIBUTING.md,一个 PULL_REQUEST_TEMPLATE.md,以及一个 scripts/smoke-check.sh,运行一个可配置的命令并在失败时退出非零;更新 README 以记录两者,并打开一个 PR。
清单 1:用户提示代码片段
为了理解这个指令是如何转化为行动的,我们将把代理式的工作流程分解为它的组成阶段。我们从意图捕获开始,其中智能体在项目的特定上下文中定位自己,然后转移到规划风格,对比不同模型架构其推理的方式。后续部分将详细说明执行实际工作的 Tool Execution 循环和防止自主事故的关键安全防护措施。最后,我们将看看结果如何呈现给用户,说明在不同的品牌名称下,大多数代理式工具共享一个共同的架构 DNA。
阶段 1:意图捕获和上下文形成
为了确保 LLM 的高质量提示,智能体首先收集所有必要的信息,然后进行规划或执行。这种方法包括几个步骤:将任务链接到当前工作目录,管理会话状态,并将每个项目的配置保存在 dotfolders(例如, ./.gemin i 和 ./.claude )。这种方法消除了重复使用标志进行重复任务的需要。
此外,指令还隐式地从各种位置获取。以下是 CLI 智能体除了用户的提示之外,从哪些主要信号源获取的一些:
特定于文件夹的上下文文件
这些是封装了有关你的存储库如何构建和测试以及你的文档和脚本约定的事实的 markdown 文件。它们本质上充当你智能体的入门文档。例如,Gemini CLI 的文件称为 Gemini.md 。Claude Code 工具也使用了类似的约定。
# GEMINI.md(摘录)## 1. 工程哲学这是一个高性能的SaaS后端。* **核心原则:** 可读性优于聪明度。显式优于隐式。* **架构:** 六边形架构(端口和适配器)。* **安全性:** 零信任安全模型。所有输入必须通过Pydantic进行验证。## 2. 技术栈和标准* **语言:** Python 3.11+(需要严格类型)。* **框架:** FastAPI(异步默认)。* **数据库:** PostgreSQL(通过SQLAlchemy 2.0异步会话)。* **测试:** Pytest(覆盖率必须保持>90%)。
清单 2:Gemini.md 示例
技能
早期智能体的一个主要限制是需要将所有指令塞进上下文窗口。Anthropic 的 Claude Code 引入了Skills的概念,它建立在上述 markdown 文件的想法之上,作为专业知识的模块化包(例如,PDF 操作、数据分析和 React 最佳实践),作为包含 SKILL.md 的文件夹存在。
这种包含使得渐进式披露成为可能:智能体最初只看到可用技能的名称/描述(消耗最少的词元)。然后,只有在用户的任务需要时,它才动态安装或读取完整的 SKILL.md 指令集。这种方法允许将智能体默认成为通才,但在需要时是专家。
代码库信号
CLI 可以扫描现有的scripts/、 .github/ ,并拾取像 README.md 这样的文件工件,如果你已经提供了这些文件。基于像 Python 这样的语言的典型约定,它还可以查看像 pyproject.toml 这样的工件以获得高级概览。
IDE 焦点
这是一个可选步骤,如果你连接到像 VSCode 或 Cursor 这样的代码编辑器,可以用来打开文件和选择。
阶段 2:规划风格
加载上下文后,每个工具开始其控制循环:
Gemini(ReAct风格)思考,调用工具,观察并重复,这非常适合发现缺失的文件夹或策略。这种迭代方法允许 Gemini 适应新信息并动态调整其策略,使其适用于需要灵活解决问题和探索的任务。
Claude(计划和执行)提出一个你可以批准的清单,然后逐步执行计划,并带有策略钩子。这种方法提供了更高程度的控制和透明度,因为用户可以在执行前审查和修改计划,确保遵守特定的策略或偏好。
Auto-GPT 发出思考加上每个周期运行器执行的 JSON 命令。这种结构化输出便于自动化和与其他系统集成,因为 JSON 格式提供了智能体意图和行动的清晰且机器可读的表示。
以下示例说明了不同智能体如何处理这个规划阶段。Claude 提供了一个人类可读的清单供用户审批,而 Auto-GPT 生成了专为自动执行而设计的 JSON 输出。
Claude——计划预览
计划:创建脚本/smoke-check.sh (POSIX sh;从env读取CMD;失败时退出非零)创建CONTRIBUTING.md(如何在本地进行冒烟检查)创建.github/PULL_REQUEST_TEMPLATE.md(检查清单包括冒烟检查)更新README.md,添加scripts/和PR模板说明运行冒烟检查运行smoke-check;提交;打开PR批准吗?[是/否]
清单 3:Claude 计划审查代码示例
Auto-GPT——带有思考和命令的显式 JSON
{“thoughts”: {"text“: ”创建冒烟检查,文档,模板;更新README;运行脚本;提交/PR”},"command":{"name":"write_file","args":{"path":"scripts/smoke-check.sh","content":"#!/bin/sh\n: \"${CMD:=echo ok}\" \n$CMD || { echo \"smoke failed\" >&2; exit 1; }\necho \"ok\""}}}
清单 4:Auto-GPT 审查代码示例
阶段 3:工具调用
在此阶段,智能体使用其库中的工具根据其任务提出更改建议。例如,这可能涉及使用文件编辑工具在 IDE 中显示差异。
工具已经从专有实现发展为开放标准:模型上下文协议( Model Context Protocol,MCP)。在 Anthropic、谷歌和其他组织的支持下,MCP 就像 AI 应用程序的 USB-C 端口。而不是硬编码集成每个数据库或 API,(例如,用于 PostgreSQL、Slack 或 GitHub 的服务)。CLI 智能体在启动时自动发现这些资源,允许单个智能体在一个无缝的工作流程中查询你的生产数据库,阅读你的线性票证,并编辑代码。
示例冒烟脚本的 Diff
*** scripts/smoke-check.sh +#!/bin/sh +set -eu +# CMD可以被覆盖:CMD="make test" ./scripts/smoke-check.sh +: "${CMD:=printf ok}" +$CMD >/dev/null 2>&1 || { echo "smoke failed" >&2; exit 1; } +echo "ok"
清单 5:冒烟脚本 diff 示例
Claude 的钩子是一种明确策略的干净方式——限制写入路径、自动 chmod 脚本、在写入后运行 lint/tests——而不需要将其塞入提示中。Gemini 通过扩展和 MCP 获得类似的杠杆作用:不同的旋钮,类似的结果。
阶段 4:人为干预的安全和护栏
你保留了对冒险行为的控制。Gemini 在执行写入或具有副作用的 shell 命令之前需要你的批准。Claude 提供了确认和钩子,允许你阻止违反策略的写操作,或者在继续之前自动运行检查。Auto-GPT 暂停是/否确认,除非启用连续模式。为了进行探索,激活一个容器化的沙箱来隔离文件系统和进程。
阶段 5:执行和迭代:真正完成工作的循环
创建文件后,智能体执行脚本并根据结果进行调整。例如,如果缺少scripts目录,Gemini 将创建它并再次尝试操作。如果脚本缺乏可执行权限,Claude 的集成钩子会自动应用 chmod +x 命令。
脚本在观察、推理和操作的连续循环中执行。这个循环不断重复,直到本地执行成功并完成文档。
阶段 6:渲染结果和停止条件
CLI 提供了一个清晰的、语法高亮显示的工具调用和文件差异视图。用户可以在编辑器中打开这些差异,手动进行调整,或者指示智能体进行适当的更改。批量批准是最有效的,例如在单个批准之前一起审查所有脚本和文档。
在一次成功的冒烟检查之后,通过批准的差异,智能体将创建一个新的分支,提交更改,并打开一个 PR 草案。
如何在你的工作流程中利用代理式 CLI
以下是一些实用技巧,帮助你在工作流程中充分利用这些工具:
将上下文文件视为构建资产
将 GEMINI.md 和 CLAUDE.md 文件与你的 README 文件一起维护。这些文件应该简洁且专注于特定细节,包括构建和测试程序、配置位置、任何特定于存储库的问题以及安全编辑的目录。你甚至可以使用智能体生成初始草稿。将这些文件视为为代理式编程环境的方式,而不是另一个需要持续监督的提示。
积极地限定范围
将智能体指向实际重要的文件夹(例如 services/payments/,而不是整个单体仓库)并传递明确的 @file 提示以指向热点。更紧凑的范围意味着更紧凑的差异,更少的创造性幻觉和更快的迭代。如果任务确实跨越多个包,请在提示中列举它们,以防止智能体进行详尽的扫描。
使用沙箱避免对环境的意外更改
Gemini CLI 提供了一个沙箱模式,用于 shell/file 工具的临时、容器化执行。这保护了你的主机系统,限制对挂载的工作目录的写入,并控制网络访问。它非常适合无风险的探索,但不会消除对破坏性命令的审批提示,不能编辑已安装的秘密,也不能防止模型建议有风险的操作。你仍然是最终的仲裁者。
Claude Code 通常在容器化开发环境(Dev Container/Docker)中运行,或使用插件/钩子将 shell/file 操作通过容器化运行器路由。这提供了类似的隔离(写入限制在挂载路径,控制环境,确定性工具链)。然而,这种隔离并不具有回溯性;如果允许,它不会阻止对挂载的秘密或暴露路径的意外写入。使用钩子来强制执行路径限制,并在写入最终确定之前自动运行测试/lint。
Auto-GPT 没有专门的沙箱模式标志,但强烈建议在 Docker 容器中运行它。这确保了其文件系统操作与你的主机操作系统隔离,防止对你主要环境的任何意外更改。
使用符合你需求的工具
Gemini CLI 非常适合深入集成到谷歌生态系统中的用户。它作为一个通用工具,擅长于发现繁重的任务,包括代码编辑、文档更新、小的 shell 操作(如列出目录和移动文件)、快速网络研究以及探索性的解决问题。它的 ReAct 循环促进了自然的探索和迭代工作。
Claude Code 最适合需要具体计划和强大编码能力的任务。这包括多文件重构、通过钩子执行策略、Git 原生工作流程(分支、变基、冲突解决)和透明的护栏。
GitHub Copilot CLI旨在为快速、存储库感知的自然语言到 shell 辅助提供支持。它非常适合生成一次性命令、搭建测试、搜索代码以及起草提交和拉取请求,所有这些都不会破坏现有的 GitHub 工作流程。
其他工具包括Aider、Open Interpreter和本地优先 CLI。当你需要对实现有更大的控制权,并且有高度特定的需求,如紧密的 Git 人机工程学、本地 LLM 或不受限制的 shell 环境时,可以考虑这些选项。这些工具对于喜欢较少护栏和更快修改工具本身的经验丰富的用户来说非常有用,特别是对于较小的存储库。
像工程师一样提示,不要写论文
好的提示主要是关于清晰的合同,而不是华丽的散文。使用包含以下详细信息的四部分提示。从一个高层次的目标开始,用一句话陈述你的意图。
定义约束,包括范围(例如,“仅 services/billing”)、风格(“POSIX sh; no bashisms”)和安全协议(“写入前询问”)。确定所需的工件,指定预期的结果(例如,文件、测试、README/PR 文本)。
确定检查,概述将如何衡量成功(例如,测试命令、验收标准)。
像任何其他自动化一样进行仪表化
为了优化智能体性能,监控关键指标,如 PR 周期时间、智能体生成的差异大小、需要返工的 PR 百分比以及智能体编辑后不稳定测试的频率等。
这些指标作为反馈,不仅用于智能体的整体有效性,还用于你自己的运维合同。
接下来是什么
代理式 CLI 正在从简单的 shell 助手演变为将你的工作工具、操作系统和云基础设施统一起来的连接组织。以下是截至本文撰写时的一些新兴趋势:
IDE 和操作系统正在融合成统一的 Agent Surfaces。像Windsurf和 Cursor 这样的工具允许智能体在终端、编辑器和运行过程中共享上下文,而不是作为孤立的聊天窗口运行。Windows 也在其体验中注入了大语言模型驱动的交互。
智能体正在从响应式 CLI 转变为持久的后台服务。这些守护进程智能体不是等待输入,而是主动监控日志文件和本地服务器,仅在出现错误时介入修复计划。虽然这些工具(如 GitHub PR 上的 Copilot)仍处于起步阶段,它们的洞察力尚浅,但随着正确的集成,它们将不断改进。
扩展正在成为代理能力的 App Store。随着 CLI 智能体的技能和扩展等创新,我们正在开发新一代的 App Store,让用户可以将适当的能力插入到他们的智能体中。这也模糊了通用智能体和专业智能体之间的区别,因为专业智能体只是一个拥有正确知识和工具的强大通用智能体。
原文链接:





