CLI 的重新流行有其深层原因
CLI(Command Line Interface,命令行接口)通常指在 Windows 下的 cmd、PowerShell 等,或 Linux 下的 bash 等环境中,通过命令行执行系统命令的方式。用户以文本形式发起命令并携带参数,系统也以文本形式返回执行结果。在 GUI(图形用户界面)已主导终端操作数十年的今天,随着 AI 智能体的爆发,CLI 再次释放出巨大能量,原因如下:
文本同构性:具有结构特征的纯文本天生适合大模型处理,几乎可视为大模型的“母语”。(注:Markdown 格式是另一个在 AI 时代胜出的文本范例。)
历史资产丰富:CLI 自计算机早期便被广泛使用,具备良好的规范性,沉淀了海量的命令行工具生态。多数 GUI 系统都有对应的 CLI 版本,甚至往往是先有 CLI 后有 GUI。
简单透明、易于组合:CLI 使用简单、灵活、透明,通常不涉及复杂的认证授权。良好定义的原子命令有利于大模型进行规划与组合操作。
结构清晰、便于探索:按“工具→资源→命令→参数”层次组织的命令,配合内置帮助(--help),适合大模型递进式探索,能避免上下文爆炸。海量现有文档适合大模型训练。管道(pipe)机制便于命令组合,方便大模型编排任务。借助 SSH 可轻松操作远程系统。
过去占统治地位的 GUI 对人类用户而言尽是优点,但对大模型(LLM)来说却尽是缺点。CLI 以文本形式与人交互的基本假设,虽然已难以满足人类对“更简单易用”的更高追求,但对 LLM 而言却全是优点。
CLI 是 AI 能够基于其训练数据(数十亿行终端交互记录、Stack Overflow 问答、手册页等)本能理解和使用的接口。AI 生成文本命令,获得文本输出,形成一个无缝的、人机同构的循环。CLI 好比人类直接用手和简单工具(锤子、锯子)工作——直接、灵活、依赖个人技能。
CLI 火爆,是因为它在 AI 的认知特性与现实世界的操作需求之间,找到了一个极佳的平衡点:
认知层面对 AI 友好:纯文本、结构化输出、海量训练数据、支持渐进式探索。
操作层面对智能体友好:继承用户身份(解决鉴权)、管道组合(解决流程)、生态完备(解决能力)、进程隔离(解决安全与容错)。
工程层面对研发友好:命令透明、易于调试与审计、人机同构。
它可能不是一个完美的接口,但在“强大但笨拙”的 LLM 面前,它凭借几十年来沉淀的工程实践,提供了一条阻力最小的、能直接操纵复杂世界的路径。它未必是终极形态,但绝对是当前时代背景下非常务实有效的选择。
信任环境的安全前提,适合个人数字环境
CLI对LLM简单,一个重要原因是不需要复杂的鉴权。实际上,CLI工具(如aws cli, kubectl)是将鉴权问题从“AI需要处理的动态逻辑”转变为“人类需要提前配置的静态环境”。AI调用kubectl get pods时,它无需理解K8s的证书、Token或上下文切换,因为它继承了当前Shell进程的身份和上下文。这是一个至关重要的视角转变:CLI让AI以“化身”(Incarnation)的方式行动,即“成为当前用户”。这大幅降低了AI的认知和操作负担,代价是将安全边界的控制权完全交给了“预先配置”这一步。
“以当前用户身份执行” 是简化智能体与环境交互的关键桥梁。无论CLI执行的操作属于本地、还是远程,无条件信任当前用户身份是前提,安全的控制主要依赖于CLI工具对当前用户访问控制,而不是智能体。
“完全信任运行环境”的前提意味着适合 个人电脑 、个人终端如手机、平板、电视等上面的智能软件,或者说 “具身智能” 产品。 总之运行智能体的宿主即代表了用户自身、也代表了运行环境自身。同时意味着,当这个前提不完全成立时如企业内个人办公电脑、公用环境,授权与安全会成为重要挑战。
个人赋能型 Agent场景下CLI为王道。其宿主是“个人数字环境”。它的核心任务是操作——操作个人的文件系统、个人的本地服务、个人的代码库、个人的云资源(工作空间)。在这里,CLI与AI Agent的结合能让用户的能力边界极大扩展。openclaw等工具的火爆,正是这个趋势的体现。
“智能”弥补协议“不足”,适合探索及涌现
事实上,CLI很难算作一种协议,更多是一种经验和惯例,没有某个组织对其进行明确定义和强制要求,其规范性、标准性、结构化对于严谨的代码处理来讲明显不足、相对于内存调用性能也很差。
但命令行形式让操作更灵活、易用(安全前置并剥离日常操作),其命令组织形式便于递进式暴露。结合SKILLS技术和LLM预训练能力,以及命令行的帮助支持(--help)更适合自主性探索。命令通过管道组合适合LLM编排,大厂生态的推动提供了海量资源、加速了推广。这些对于探索性任务、智能体软件不仅没有成为问题,反而成为巨大的优势。具体表现在:
递进式探索 vs. 一次性契约:MCP要求Server预先声明所有能力(Schema)。CLI则允许Agent通过
--help、man、试错进行递进式探索。对于未知或演进迅速的领域,这种“边探索边学习”的模式,比依赖一份可能过时的契约更灵活、更健壮。利用预训练知识:LLM在数十亿代码和文档中训练,对
git、kubectl、aws等常见CLI工具有着深刻的隐性理解。它调用git commit -m "..."几乎是一种“肌肉记忆”。而调用一个全新的MCP工具,则需要从头学习其Schema,这是额外的认知负担。Skill封装与自主性:一个高智能Agent可以将常用的CLI命令序列封装成自己的“内部Skill”(例如,“部署服务”Skill可能包含检查代码、构建镜像、更新K8s配置等一系列CLI命令)。CLI成为了Agent实现其自主目标的“原语”。在这种情况下,CLI工具的庞杂性被Agent的抽象层所屏蔽,而灵活性得以保留。
对于高智能、追求自主性的Agent(AI-Native Agent),CLI提供了一个“低结构、高自由度”的沙盒,让智能体能够运用其通用能力去探索和解决问题,而不是被限定在预设的协议轨道上。CLI的具体技术形态很可能是智能体只需保留一个通用命令行执行接口,加上面向用户需求场景的一系列skills。即避免了系统复杂性、也避免了LLM上下文爆炸。而安全等事项交给环境自身:操作系统用户 在 CLI工具中的授权鉴权管理。
这对于探索性任务、自主性响应性AI原生智能体是巨大的优势,如个人助手、研发Agent、创作、科研、分析等需要极高灵活性的场景。
CLI不适合公共服务如SAAS
它(CLI)可能不适合 面向多用户的AI 服务,例如SAAS哪种。
这种情况下,后台智能服务接收到的每个请求来自不同用户,需要认真对待认证、鉴权、资源隔离等工作,完全信任当前操作系统环境用户是不可的,不能假设环境是安全的、用户是可信赖的。
这类服务中,系统响应性能的运行效率是重点,这往往是商业模式正常运转的一部分,而CLI的每次命令,通常都是以操作系统进程形态出现了,性能和并发对于海量用户来讲非常不足。
这类服务中,产品的易用性及优秀表现,服务的稳定性和可控性是重点, 为了控制风险会限制用户的发挥空间:自主探索能力。
而MCP(Model Context Protocol)适合这类服务,但MCP自身还有许多不足的地方,需要重生后才能胜任,后面文章专门讨论这个问题。
CLI与MCP的能力对比
MCP (Model Context Protocol): 是一个由Anthropic推动的开放标准,旨在为LLM连接外部工具和数据源提供一个标准化的结构化协议。它通过客户端-服务器模型,让工具以定义好的“模式(Schema)”向AI声明自己的能力。
CLI哲学:最大化重用现有生态,最小化认知与集成负担。它假设Agent是“环境内的一份子”,继承环境的全部能力和风险。它的优势是效率、灵活和透明,代价是粗粒度的安全和控制。
MCP哲学:为AI时代重新设计交互契约,追求可控、安全与标准化。它假设Agent是“外部的调用者”,必须通过明确的协议来声明意图、获取授权。它的优势是精细管控、安全审计和状态管理,代价是额外的复杂性和开销。
CLI与MCP的安全模型
CLI和MCP (Model Context Protocol)的安全模型的“责任主体”与“架构位置”显著不同,两者都能实现同样的安全粒度。但达到这一结果的“路径”和“默认状态”截然不同。
这种 “默认配置”和“工程成本” 的差异在实践中至关重要。CLI的默认状态是“信任”:要获得精细控制,你需要对抗其默认设计,进行额外加固。这对于个人或小团队是可行的,但在大型企业,管理成千上万个CLI工具的权限策略会成为运维噩梦。MCP的默认状态是“不信任”:要提供服务,你必须显式地定义Schema和实现授权。这带来了初始成本,但一旦建立,就提供了一个统一、可扩展的安全管控平面。
选择CLI,意味着你接受一个基于环境信任、控制权分散、依赖后期加固的模型。它灵活,但安全是“事后添加的”。选择MCP,意味着你采用一个基于契约不信任、控制权集中、要求前期设计的模型。它规范,但安全是“内置预设的”。
不能将MCP协议层的能力,等同于CLI工具无法具备的能力,它们都能达到同样的安全高度。技术的本质,不仅在于它能达到的极限,更在于它默认的起点、设计的倾向和规模化时的成本曲线。CLI诞生于单用户、高信任的学术环境,其安全是“进化而来”的。MCP诞生于多租户、零信任的云原生时代,其安全是“设计内置”的。这才是它们最根本的“出身”差异,也决定了它们在不同场景下的“手感”和“代价”。
CLI与MCP范式分野:AI-Native VS AI-Enabled
CLI是Agent通过操作系统命令行与外界交互(执行),MCP是Agent通过预定义的服务接口与外界交互(执行)。所以CLI更适合各类个人终端环境,MCP更适合公共服务。
通过授权,通过CLI可以操作自己在远程公共的服务(例如lark-cli操作个人飞书),MCP通过身份认证识别个体而操作个体在远程公共服务的资源。纯粹的本地操作(例如读取一个本地文件)也可以通过本地部署的MCP 文件服务(或命令行服务)进行操作。它们具有一定的替代性,但无论如何公共服务SAAS不能操作个人终端的私有数据。
纯技术上讲,CLI最终还是通过function call的某些tools执行的,这些tools可能是mcp server实现的,但这并不是必须的,Agent完全可以使用python内置tools定义,即直接在一个python函数上标注@tool。CLI不能覆盖所有MCP场景(如saas公共服务),而MCP也不具备CLI的许多优势,如灵活性和透明度。
AI Agent时代的“人机接口”正在分化为两种截然不同的范式。
想要打造一个像人一样操作电脑的、自主的AI伙伴?通用CLI接口 + 技能学习是更本质、更强大的路径。想要在企业里为Slack、Salesforce、SAP等系统添加一个受控的AI功能?MCP及场景工具(Scene Tool)层是更工程化、更可控的路径。
这两种范式最终不会截然分开,而是会融合。未来的超级Agent或许会这样工作:
在其信任的边界内(如个人开发环境、公司内部集群),它主要使用CLI,发挥其最大自主性和灵活性。
当需要跨越信任边界操作外部商业系统或用户数据时,它通过MCP/场景工具(Scene Tool)层进行标准化、可审计的交互。
Agent的核心“大脑”具备范式选择能力,能根据任务场景和安全要求,自主选择使用“CLI原语”还是“MCP契约”。
CLI代表了AI能力的“深度”和“自由度”,MCP代表了AI集成的“广度”和“秩序度”。 最强大的智能体,将是既能深入细节、自由创造,又能广泛连接、遵守规则的那一个。
夜雨聆风