1. 从GUI到终端:CLI-Anything到底在解决什么问题
1.1 一个让我转向命令行优先的真实场景
先讲个我上周遇到的事。开发一个内部工具时,需要在十几个目录里批量替换一段配置内容,然后逐个重启服务、检查日志、拉取变更记录。如果打开文件管理器,一个目录一个目录地进去、编辑、退出,再重复十二次,光是想想就已经累了。就算用VS Code的全局搜索替换,后续的日志追踪和状态检查还是免不了在多个窗口之间来回切换。
我当时的做法是写了三行shell命令,从grep定位到sed替换,再到for循环批量执行,整个过程不到十秒。重启服务、看最新几行日志,也都是终端里一条命令的事。那一刻我突然意识到,所谓CLI-Anything,不是“命令行能做得更多”,而是“命令行可以让一组动作变成一条动作”。
这就是我对CLI-Anything这个理念的理解:把日常工作中那些可脚本化、可标准化、可复用的操作,全部收敛到终端里,让命令行成为统一的操作入口。不管是代码提交、文件处理、环境切换,还是调用AI模型帮忙写代码、改代码、审代码,都可以通过CLI完成。它不是一个具体的命令,不是某个工具的别名,而是你对待工作流的一种态度——能不进图形界面就不进,能一条命令做完的绝不用鼠标点五下。
1.2 CLI-Anything的边界:该自动化什么,不该自动化什么
在真正动手把一切搬进终端之前,我认真想过一个问题:会不会用力过猛?毕竟不是所有操作都适合命令行。低频的、需要视觉判断的、带复杂交互的图形操作,硬要塞进CLI反而降低效率。
我给自己划了几条边界。适合CLI化的操作通常具备三个特征:高频、确定、可组合。高频意味着值得为它写命令;确定意味着输入输出关系清晰,不需要人做模糊判断;可组合意味着它可以跟其他命令串联,形成更复杂的流水线。反过来,低频的、需要人眼判断的、依赖图形反馈的操作,就不太值得强行命令行化。
举个例子,批量重命名文件、批量压缩图片、批量同步目录,这些是典型的高频确定操作,理所当然应该CLI化。而调整一张海报的配色、检查一个网页的视觉效果,这类操作依赖主观审美和视觉反馈,强行在终端里搞反而自找麻烦。CLI-Anything不等于“所有事情都必须用CLI”,而是“凡是能用CLI高效完成的事情,就优先用CLI”。这个边界划清楚之后,后面的实践才没有跑偏。
1.3 终端作为统一入口的三个不可替代优势
为什么非要统一入口?因为我发现,终端有三个图形界面很难替代的优势。
第一个优势是可记录性。图形界面里的一切操作默认不留痕,你做完了也就做完了,复盘时只能靠记忆。命令行里执行过的每一条命令,要么留在shell历史里,要么可以写进脚本。这是天然的操作日志,出了问题回溯起来非常方便。
第二个优势是可编程性。图形界面很难被编排,终端里的一切都是文本,文本可以被拼接、被判断、被循环,也可以被另一段程序调用。终端是整个生态里最底层的可编程接口。
第三个优势是可继承性。学会了CLI,你就获得了跨工具、跨平台的一致能力。在macOS上学的find|grep|xargs,到了Linux照样用;今天学了codex cli的交互方式,明天换claude cli,上手成本也很低,因为它们共享同一套命令行哲学。
划完边界、明确了优势,我做的第一件事就是把开发流程里的高频操作逐个CLI化。而真正让这套体系产生质变的,是AI CLI工具的出现——终端原本只能执行确定性命令,现在可以理解自然语言意图了。这就是我下一部分要讲的重点。
2. AI CLI工具入场:命令行的“大脑”被补齐了
2.1 为什么说AI CLI是CLI-Anything的关键拼图
在AI工具进入命令行之前,CLI-Anything其实有一个很明显的天花板:它只能执行你已经写好的命令,不能处理“还没想清楚怎么做”的任务。比如“帮我看一下这段代码有没有内存泄漏”“在项目里加一个环境变量校验逻辑”,这类任务传统CLI没法处理,因为先要由人去抽象、拆解、写代码,命令行只是一台执行机器。
AI CLI的出现改变了这个局面。像codex cli、claude cli这类工具,它们把大模型的能力封装成命令行程序,使得终端不仅能执行命令,还能直接理解自然语言指令。你告诉它目标,它会自己读文件、写代码、执行命令、根据反馈修正结果。终端第一次有了“思考”的能力。
这让CLI-Anything的版图完整了:确定性操作交给传统命令,不确定性操作交给AI CLI。两者都在同一个终端里完成,不需要跳去任何图形界面。这也是为什么我最近把大量精力花在研究这些AI CLI工具上——它们是这套工作流里最关键的拼图。
2.2 codex cli与claude cli代表的两条路径
目前主流的AI CLI工具里,codex cli和claude cli是两个很有代表性的产品,它们代表了两种不同的设计路线。
codex cli更偏“智能体式”的自动化执行。你给它布置一个任务,它不仅会给出答案,还会主动在你的项目里读取文件、修改文件、执行命令,像一个住在终端里的开发助手。它在多文件改动、跨函数重构、测试驱动开发这类复杂任务上表现尤其突出。跑代码前它会先读你的项目结构,改动前它会先说明计划和影响面,遇到失败它会根据报错信息自己调整策略,不需要你频繁介入。
claude cli则更像“对话式”的结对编程伙伴。它强调理解你的代码库,通过语义检索快速定位相关实现,然后和你充分讨论方案。它很擅长回答问题、解释逻辑、设计演进路线,也支持直接修改文件,但整体交互重心更偏向对话,策略更谨慎,每一步都会向你确认。需要精确控制每一步时,这种路线反而更稳。
两条路径没有绝对的高下之分。我自己的分工是:大规模重构、批量改动交给codex cli;方案设计、代码讲解、需要反复讨论的任务交给claude cli。两者互补之后,终端里基本没有什么开发任务是做不了的。
2.3 用AI CLI之前,我先改变了哪些工作习惯
从传统CLI用户切换成AI CLI用户,不是装个工具就能自然过渡的,中间有几个工作习惯必须改。
第一个改变是“描述任务”的能力。传统命令输入的是精确指令,AI CLI输入的是意图。同一件事,说“把login函数里的session变量改为从AuthService获取”,就比说“优化一下登录”效果好得多。描述越具体,AI的行为越可控。这个技能可以通过刻意练习来提升——我在用任何AI CLI工具之前,都会先在脑子里把任务重述一遍,确认该说的边界条件、约束、验收标准都说清楚了。
第二个改变是“代码审查”的节奏。过去写代码是一个函数一个函数推进,现在可以连续让AI改多处代码,然后统一审查diff。审查密度变大,但是每次审查的范围更集中。我养成了每次改动都先看git diff再过目的习惯,绝不盲目相信AI的改动。
第三个改变是“录屏式”的复盘。使用AI CLI时,整个交互过程都是文本,任务目标、AI的推理过程、执行过的命令、遇到的报错,全部留在终端输出里。我会在完成大任务后滚动回看这段日志,复盘决策过程。这在GUI交互里几乎不可能做到,但在终端里是默认能力。
把习惯调整好之后,我开始了实际的安装使用。这个过程的坑比想象中多,下一章我把安装与首次启动的完整记录写出来。
3. AI CLI的安装与首启:从零到跑通的完整记录
3.1 环境准备:Node版本、系统路径与终端配置
安装AI CLI工具之前,先要确认环境。codex cli和claude cli目前主要通过npm分发,所以第一件事是检查Node.js环境。我在准备时踩过一个明确相关的坑:系统里装了一个比较老的Node版本,导致npm全局安装后工具无法正常启动。建议直接用Node官方提供的LTS版本,安装完成后用node -v和npm -v双重确认。
第二步是检查npm全局安装目录是否在系统的PATH里。这个看似基础的问题,实际上正是后面很多“无法定位命令”类报错的真正根源。在macOS和Linux上,npm全局目录通常是/usr/local/lib/node_modules或~/.npm-global,命令本身的软链在/usr/local/bin或~/.npm-global/bin。如果这个目录不在PATH中,即使安装成功,在终端里输入命令名也会提示“command not found”。
终端本身我建议升级到有自动补全和主题支持的方案,比如在macOS上用iTerm2加Oh My Zsh,或者在Linux上用tmux配合fzf。不换也能跑,但体验和效率差很多。AI CLI工具输出的内容往往比较长,一个好的终端能让你在长输出里快速检索关键信息,这在后续debug时会特别有用。
环境检查建议按这个顺序走:
# 1. 确认node版本,建议18以上 node -v # 2. 确认npm版本 npm -v # 3. 查看npm全局安装根目录 npm prefix -g # 4. 把全局bin目录放进PATH(以npm prefix -g的输出为准) # 如果prefix为/usr/local,一般bin已经在PATH里;如果为~/.npm-global,则需手动加入 echo 'export PATH="$PATH:$(npm prefix -g)/bin"' >> ~/.zshrc source ~/.zshrc3.2 codex cli的安装与密钥配置
codex cli的安装方式官方推荐用npm全局安装,一条命令就完成:
npm install -g @openai/codex装完之后,比较关键的是配置密钥。codex cli默认从环境变量OPENAI_API_KEY读取凭据,也有一些版本支持登录后再配置。我建议直接采用环境变量方式,因为这样最直接、最容易排查。
# 在 ~/.zshrc 或 ~/.bashrc 中放入 export OPENAI_API_KEY="你的密钥"这里有一个非常要紧的安全习惯:不要把密钥直接写进会被git跟踪的文件里,更不要提交到公开仓库。我在本地用一个单独的~/.secrets文件存放,然后在shell配置里source它,这样既方便使用又避免误提交。密钥泄露的教训在业内已经发生过很多次,这条建议能帮人省掉很大的麻烦。
刚才提到的PATH问题,在codex cli安装后要重点验证。运行which codex,如果没有任何输出就是个明显信号——命令压根没被找到。此时回到上一节的环境变量检查,把npm全局bin目录加进PATH再试。
3.3 claude cli的安装与登录认证
claude cli的安装方式类似,一般通过npm全局安装:
npm install -g @anthropic-ai/claude-code安装完成后,claude cli通常需要通过登录流程进行认证,而不是单纯配置环境变量。运行claude命令或对应的初始化命令,它会引导你在浏览器里完成授权,然后自动把凭据保存在本机。走完流程之后,在终端里输入对应命令就能进入交互界面了。
如果不想走交互式登录,也可以关注官方文档里的API Key模式。很多AI CLI工具都同时支持订阅制登录和API密钥两种认证方式,后者的好处是便于在脚本、CI环境里使用,但要注意密钥的权限和过期管理。
安装和认证结束后,我用claude进入交互界面,简单让它解释了一下当前项目里的模块依赖关系,验证了基础可用性。这时两个主要的AI CLI工具都已经能跑通了。
3.4 首次启动验证:一个最小可用测试
工具安装完,我习惯用一个最小测试来验证链路是否完整。这个测试不用太复杂,重点是确认三件事:命令能被找到、模型能正常响应、代码库能被读取。
对于codex cli,我建议在任意一个项目里执行一句简单指令,比如:
codex "列出当前目录下所有文件名,并按大小排序"如果它能正确读目录、列出文件并给出排序结果,说明整个通道通了。对于claude cli,同样可以问一个需要读取项目上下文的问题,比如“当前项目的入口文件是哪个”,观察它是否正确读取了代码库信息。
如果这步失败,先把报错信息完整读一遍。AI CLI工具的报错一般比传统CLI更清晰,很多时候会直接告诉你缺什么依赖、哪个路径找不到。我遇到过的那个“unable to locate the codex cli binary or required runtime components”报错,就是在这个阶段撞上的,具体排查过程放在后面专门讲。
4. “Anything”的落地姿势:命令接入日常高频操作
4.1 用AI CLI接管代码审查与提交信息生成
工具跑通之后,我开始思考怎么让AI CLI真正融入日常开发,而不是偶尔拿来问问题。第一个高频场景是代码审查。
以前我做完改动之后,经常要先通读一遍diff,然后自己脑内找问题。现在流程变成:改完代码,先让AI CLI帮我过一遍未提交的改动,让它基于项目现有风格和常见最佳实践提意见。具体命令很简单:
codex "请审查我当前未提交的改动,重点看是否有潜在bug、风格不一致、边界条件遗漏,以及是否匹配项目的现有架构约定"AI给我的体验相当不错。它不会只停留在格式层面,而是会深入调用链去推断潜在风险。比如有一次它发现某个错误处理分支里,我把返回值写成了undefined,但项目其他模块都在用统一的错误对象,这个不一致会导致上层逻辑误判。这种问题自己review时很容易漏掉,AI却能通过读全库上下文发现。
第二个高频场景是生成提交信息。我以前提交代码时总在commit message上纠结措辞,写太简略怕看不懂,写太详细又费时间。现在我直接让AI从diff里总结提交信息:
codex "根据当前git diff生成一份简洁但信息完整的提交信息,格式符合conventional commits规范"实测下来,AI生成的提交信息比我自己写的更结构化:类型前缀判断准确,重点改动清晰,还知道在Footer里标注破坏性变更。光这一项就帮我省了不少时间。
4.2 不用写代码也能批量处理的文件操作
AI CLI并不只是写代码用的,一些日常文件操作也能直接扔给它。当然,纯文本的批量替换我自己会用sed,但稍复杂的任务用自然语言描述反而更快。
比如有一次我需要把某目录下所有markdown文件里出现的旧接口地址统一换成新地址,但只有特定章节下的文件需要替换,而且要保留被替换内容的原始版本记录。这个逻辑写成sed要花时间调正则,写脚本又觉得不值,我直接让AI CLI处理:
claude "扫描posts目录下所有md文件,找到包含/api/v2/address的片段,确认上下文属于'结算'章节,然后把接口地址替换为/api/v3/address,其余地方不动"它能够区分该改和不该改的上下文,替换之前还会列出改动计划让我确认。这类以前要花十分钟写脚本的任务,现在一分钟就能完成,而且可复现、可审计。
4.3 给常用操作加一层“自己的方言”
用得多了之后,我开始给一些固定套路加自己的“方言”。这里说的不是去改AI CLI工具本身,而是在我的shell配置里封装一层别名和函数,把反复使用的提示词模板固化下来,让AI CLI的执行行为更稳定。
举个简单的例子。我需要固定一套代码风格,但如果每次都在提示词里写一大堆风格要求,既啰嗦又容易漏。我在~/.zshrc里做了一次“风格前置”的定义:
# 定义我自己的审查风格 alias codex-review='codex "请以资深工程师视角严格审查当前diff,重点关注逻辑缺陷、潜在边界问题、性能隐患和项目一致性,输出问题分优先级排序,并且一定要给出所在文件的函数名和行号"' # 定义提交信息生成风格 alias codex-commit='codex "根据当前git diff和staged文件生成commit message,遵循conventional commits格式,subject控制在50字符内"'这样我在终端里敲codex-review或codex-commit,就能稳定获得统一风格的输出。把提示词变成“方言”之后,使用AI CLI就不再是临时的“问一下”,而是真正常态化的日常操作方式了。
4.4 封装一个最简单的自定义CLI脚本
如果要让你的CLI工作流更进一步,可以考虑封装一个真正属于自己的CLI脚本。不需要多复杂,能串联起已有的命令和AI CLI,就已经很有价值。
我自己的方式是写了一个名为todo的小脚本,它做三件事:把终端里提到的临时任务记到本地文件、查看未完成的任务列表、让AI CLI根据任务描述给出实现建议。脚本本身只有几十行,核心是把参数解析和命令分发解决掉:
#!/bin/bash TODO_FILE="$HOME/.local/share/todo-cli/tasks.md" mkdir -p "$(dirname "$TODO_FILE")" cmd="${1:-list}" shift || true case "$cmd" in add) echo "- [ ] $(date +%F) $*" >> "$TODO_FILE" echo "已记录: $*" ;; list) cat "$TODO_FILE" ;; suggest) # 把任务交给AI CLI,让它给出实现思路 claude "根据以下任务描述给出实现思路:$*,要求列出关键步骤、涉及文件和可能的坑" ;; *) echo "usage: todo add|list|suggest <任务描述>" ;; esac这个脚本虽小,但它验证了一个关键点:CLI-Anything不一定是要去造一个复杂的命令行框架,把几个已有命令用脚本粘起来,就已经是在构建自己的工具箱了。而且这种小脚本可以随时按需扩展,完全服务于自己的习惯。
5. 第一次跑AI CLI就翻车:完整排查链路复盘
5.1 报错现场还原:unable to locate the codex cli binary
这里详细回顾一次印象深刻的翻车经历。我在一台新电脑上装完codex cli,输入命令后收到的不是预期的交互界面,而是一段长长的报错,让我印象最深的是这句:
unable to locate the codex cli binary or required runtime components. check that codex is installed correctly and available in your PATH我当时第一反应是“我明明装过了”,于是立刻在原终端里敲了which codex,结果居然没有输出。一个新的想法出现了:这个报错说得很明白,问题就是命令本身没有被系统找到,或者运行时组件缺失。但为什么明明全局安装了却找不到?这里要开始逐层排查。
5.2 排查七步法:从PATH到运行时的逐层检查
我按照“从外到内、从简单到复杂”的顺序排查,整个过程可以整理成七步,供遇到类似问题的人参考。
第一步,再次确认安装是否真的成功。重新执行npm install -g @openai/codex,看npm的输出里有没有明显报错。如果输出提示权限不足,说明全局安装目录不可写,需要加sudo或用nvm管理Node环境。这一步我检查下来是正常的,排除了安装失败。
第二步,检查npm全局bin目录是否在PATH中。执行:
npm prefix -g which node如果npm prefix -g输出一个自定义目录,而该目录的bin子目录不在PATH里,那命令名就是找不到的。我当时的问题正在这里:这台电脑之前用过nvm切换过Node版本,npm prefix指向了~/.npm-global,但这个路径没有被加入~/.zshrc的PATH。
第三步,检查PATH变量本身。执行echo $PATH,逐段目测有没有目标目录。这一步其实和第二步重复,但它能确认当前shell会话加载哪个配置文件。我还发现一个问题:终端开着旧会话没有重新加载配置,所以即使修改了~/.zshrc,当前会话也读不到。
第四步,检查node版本兼容性。执行node -v,确认版本是否满足要求。AI CLI类工具对Node版本要求通常比较高,老版本会直接导致运行时组件加载失败。我这里版本没问题,但这一步不能跳过,因为有很多类似报错其实源于Node版本过低。
第五步,检查运行时依赖有没有装全。codex cli这类工具可能会依赖一些额外的二进制或原生模块。排查方式是查看npm全局目录下对应包的node_modules结构,确认不会出现“某些包被跳过安装”的情况。npm有时因为网络或权限问题会漏装依赖,重装包是比较直接的修复手段。
第六步,重新安装并清理缓存。在做这步之前,先卸载已有版本,再清除npm缓存,然后重装:
npm uninstall -g @openai/codex npm cache clean --force npm install -g @openai/codex这一步解决了很多偶发的“半安装”状态,也是我当时实际修复问题的关键操作。
第七步,检查环境变量是否缺失。重新检查OPENAI_API_KEY是否已经设置且拼写正确。如果key确实没配,启动时也会出现运行时初始化失败的提示。注意set | grep OPENAI这类小技巧可以快速确认当前会话里的环境变量状态。
5.3 修复方案与验证结果
按照上述流程,我的最终修复方案其实非常简单:把npm全局目录的bin加进PATH,然后强制重新安装一次codex cli。
echo 'export PATH="$PATH:$(npm prefix -g)/bin"' >> ~/.zshrc source ~/.zshrc npm uninstall -g @openai/codex npm install -g @openai/codex which codex codex "你好,请简单介绍一下你自己"修复后再跑which codex,输出路径正常了,进入交互会话也完全正常。复盘整个排查过程,我最大的感受是:这类“无法定位binary”的报错,九成都不是工具本身坏了,而是环境的路径或运行时配置出了问题。如果第一次遇到就把报错读完整,直接检查PATH和Node版本,可以省下很多时间。
5.4 同类AI CLI工具的共性问题与预防建议
那次翻车之后,我整理出一套预防清单,后来在其他AI CLI工具上也验证过,确实有效。
第一个共性是路径问题反复出现。不管你用npm、brew还是官方脚本安装,最终都要确认命令所在目录在PATH里。建议在安装完任何全局CLI工具后,立刻执行which 工具名,这一步能让路径问题在第一时间现形。
第二个共性是Node环境管理混乱。多版本Node切换场景下,npm global目录可能指向非默认位置。要么统一用一个Node版本管理器管理版本,要么保证切换后重新安装全局CLI。
第三个共性是环境变量缺失。很多AI CLI工具要求API Key或认证凭据,建议把这些变量统一放到一个独立的配置文件里,再在shell配置中显式加载。这样排查问题时可以快速确认“配置到底有没有生效”,还能避免密钥被误提交。
第四,安装工具前先看官方文档的系统要求。AI CLI类工具更新较快,对运行时环境的最低要求可能随版本变化,官方文档永远是最权威的信息源。
预防比修复重要,这套清单后来几乎帮我把AI CLI工具的安装时间压缩到了原来的五分之一。
6. 继续向前一步:把CLI-Anything整理成个人工具箱
6.1 设计一个统一入口脚本
AI CLI用顺手之后,我开始感到另一个问题:工具越来越多,每个工具都有自己的名字和参数规范,长期下来终端里的命令会不会又变成一团乱麻?CLI-Anything的核心是“统一入口”,所以工具之间也需要一层统一。
我的做法是设计了一个名为x的入口脚本,它统一暴露所有高频操作:x code-review跑代码审查,x commit生成提交信息,x todo-add记录临时任务,x ai "任意问题"走通用AI问答。所有操作都通过同一个命令进入,不用再记那么多别名。
#!/bin/bash cmd="${1:-help}" shift case "$cmd" in ai) claude "$*" ;; code-review) codex "请审查当前未提交的diff,按隐患等级列出建议" ;; commit) codex "根据git diff生成commit message" ;; todo-add) echo "- [ ] $(date +%F) $*" >> "$HOME/.local/share/todo-cli/tasks.md" ;; *) echo "Usage: x <ai|code-review|commit|todo-add> [args]" ;; esac真正有价值的不是脚本本身,而是这层封装背后的设计原则:每个具体工具的细节被统一入口屏蔽掉,日常操作只面对一套心智模型。以后就算换了AI CLI工具、把codex cli换成别的,入口脚本只需要改动内部实现,我的操作习惯完全不受影响。
6.2 我的CLI工具清单与代号
我把常用的CLI工具按用途整理成了一张表,既方便自己查阅,也算给读者一个选型参考:
| 用途 | 工具/命令 | 代号 | 说明 |
|---|---|---|---|
| 通用AI问答与代码解释 | claude cli | claude | 对话式交互,适合方案讨论和代码讲解 |
| 自主执行任务与代码重构 | codex cli | codex | 智能体式操作,适合批量改代码和自动执行 |
| 文件检索与批量处理 | find/grep/sed | 系统命令 | 高频确定性操作,用传统CLI更轻量 |
| 统一操作入口 | 自写脚本 | x | 屏蔽底层工具差异,统一心智模型 |
| 任务记录 | 自写脚本 | todo | 快速记录临时任务 |
这张表会随着我的使用习惯持续调整,但有几个原则是固定的:传统CLI负责确定性强、性能要求高的操作,AI CLI负责需要理解和推理的任务,自写脚本负责把这两类命令粘合成更高级的工作流。
6.3 遇到新需求时如何决定要不要加进工具箱
CLI-Anything实践到后期,反而要警惕“过度封装”。不是所有需求都值得做进工具箱,我给自己定了一个“三问”标准:这个操作是否每周至少出现一次?是否能用一条命令明确表达?是否和现有工具存在明显重复?三个问题都是肯定答案,才值得加进去。
按这个标准,我砍掉过好几个看起来很酷但实际没用的封装,比如给“打开某目录”做的特殊别名——后来发现系统自带的cd加目录快捷方式已经足够。我也拒绝过把“发送即时通讯消息”封装进CLI的需求,因为那个操作触发频率不高,且图形界面已经做得足够好。克制住“为封装而封装”的冲动,才不会让CLI工作流重新变成一个新的“杂物间”。
如果你也想落地CLI-Anything,我建议从最让你头疼的重复操作开始,先列出一周里你重复做了三次以上的动作,挑其中最能标准化的一条,尝试把流程命令行化、接着接入AI CLI让它在任务里承担思考的部分,最后用脚本把一切粘合成一个入口。工具选型和需求判断都围绕“是否真的提升了效率”这个核心标准,其他都不重要。
我再分享一个我的实际体会。使用CLI-Anything一段时间后,最明显的感觉不是“什么都能用命令做了”,而是做事的流程感变强了。图形界面下,任务与任务之间是被窗口切换切碎的;终端里,一切都沿着脚本和命令的线索连成链路,每一步都有迹可循。AI CLI让这条链路具备了学习和思考的能力,而传统命令保持它轻快可靠的本色,两者组合之后的生产力提升,并不是“再加一个快捷键”能比拟的。这大概也是我持续在这个方向上投入时间的真正原因。