<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>开发效率 on Svtter's Blog</title><link>https://svtter.cn/tags/%E5%BC%80%E5%8F%91%E6%95%88%E7%8E%87/</link><description>Recent content in 开发效率 on Svtter's Blog</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Fri, 06 Mar 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://svtter.cn/tags/%E5%BC%80%E5%8F%91%E6%95%88%E7%8E%87/index.xml" rel="self" type="application/rss+xml"/><item><title>CLI 是更高效的开发工作流</title><link>https://svtter.cn/p/cli-%E6%98%AF%E6%9B%B4%E9%AB%98%E6%95%88%E7%9A%84%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0800</pubDate><guid>https://svtter.cn/p/cli-%E6%98%AF%E6%9B%B4%E9%AB%98%E6%95%88%E7%9A%84%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81/</guid><description>&lt;img src="https://svtter.cn/p/cli-%E6%98%AF%E6%9B%B4%E9%AB%98%E6%95%88%E7%9A%84%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E6%B5%81/cover.png" alt="Featured image of post CLI 是更高效的开发工作流" /&gt;&lt;h1 id="cli-是更高效的开发工作流"&gt;CLI 是更高效的开发工作流
&lt;/h1&gt;&lt;p&gt;Codex Windows 客户端是一个不错的 AI 编程工具。但用了一段时间后，我开始意识到一件事：每次都要打开窗口、手动建任务、逐条对话，才能推进一个工作流。这不是效率，这是在用鼠标模拟思维。&lt;/p&gt;
&lt;p&gt;这篇文章不是在批评 Codex，而是想聊一个更根本的问题：对于开发者来说，CLI 在结构上就是比 GUI 更高效的工作方式。&lt;/p&gt;
&lt;h2 id="gui-的认知负担"&gt;GUI 的认知负担
&lt;/h2&gt;&lt;p&gt;GUI 的认知负担来自两层。&lt;/p&gt;
&lt;p&gt;第一层是&lt;strong&gt;操作层&lt;/strong&gt;：你需要记住功能在哪个菜单、按钮叫什么名字、流程分几步。界面设计得越复杂，这个负担就越重。&lt;/p&gt;
&lt;p&gt;第二层是&lt;strong&gt;信息层&lt;/strong&gt;：GUI 处理信息的方式是&amp;quot;搜索 + 查看细节&amp;quot;。你搜索定位到一条记录，点进去看详情，返回，再搜下一条。每一次钻取都是一次上下文切换，思维的连续性被不断打断。&lt;/p&gt;
&lt;p&gt;处理十条 issue 反馈，你要在列表视图和详情视图之间切换二十次。这种碎片化的信息处理方式，消耗的不只是时间，还有注意力。&lt;/p&gt;
&lt;h2 id="cli-把信息变成流"&gt;CLI 把信息变成流
&lt;/h2&gt;&lt;p&gt;CLI 的信息架构是线性的、流式的。数据直接在你面前流过，处理逻辑在同一行里表达完毕：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;gh issue list &lt;span class="p"&gt;|&lt;/span&gt; grep &lt;span class="s2"&gt;&amp;#34;crash&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; xargs -I &lt;span class="o"&gt;{}&lt;/span&gt; gh issue view &lt;span class="o"&gt;{}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;没有界面跳转，没有上下文切换。你的思维可以一直停留在问题本身，而不是停留在&amp;quot;怎么操作这个工具&amp;quot;上。&lt;/p&gt;
&lt;p&gt;更重要的是，CLI 的操作可以写进脚本，脚本可以提交进代码库，代码库可以被团队共享。你的工作流本身变成了可版本化的资产。&lt;/p&gt;
&lt;h2 id="批量处理规模化的起点"&gt;批量处理：规模化的起点
&lt;/h2&gt;&lt;p&gt;假设你有一批用户反馈需要处理。在 GUI 里，你的流程是：打开工具，粘贴反馈，手动描述问题，创建 issue，再下一条。&lt;/p&gt;
&lt;p&gt;在 CLI 里：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat feedbacks.txt &lt;span class="p"&gt;|&lt;/span&gt; parse_feedback &lt;span class="p"&gt;|&lt;/span&gt; gh issue create --batch
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;GUI 里需要一个小时的工作，CLI 里是几秒钟的脚本。这不是操作习惯的差异，这是处理规模的差异。&lt;/p&gt;
&lt;h2 id="并行修复从串行到并发"&gt;并行修复：从串行到并发
&lt;/h2&gt;&lt;p&gt;批量创建 issue 只是起点。真正的效率差距在修复阶段。&lt;/p&gt;
&lt;p&gt;GUI 工具是串行的——你跟它对话，等它回答，确认结果，再下一步。即使工具本身再强大，交互模式把你锁死在单线程里。&lt;/p&gt;
&lt;p&gt;Claude Code 支持启动并行 subagent，结合 git worktree，每个 agent 在独立的工作目录里处理一个 issue，互不干扰：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; issue in &lt;span class="k"&gt;$(&lt;/span&gt;gh issue list --json number -q &lt;span class="s1"&gt;&amp;#39;.[].number&amp;#39;&lt;/span&gt;&lt;span class="k"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; git worktree add ./fix-&lt;span class="nv"&gt;$issue&lt;/span&gt; -b fix/issue-&lt;span class="nv"&gt;$issue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; claude --subagent --worktree ./fix-&lt;span class="nv"&gt;$issue&lt;/span&gt; --issue &lt;span class="nv"&gt;$issue&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;每个 subagent 独立完成：理解问题、修改代码、提交 PR。整个流程不需要你盯着任何一个窗口。&lt;/p&gt;
&lt;p&gt;十个 issue 同时在修复，时间复杂度从 O(n) 变成接近 O(1)。GUI 工具在这里的天花板是显而易见的——你无法同时操作十个对话窗口，而 CLI 的并行是操作系统级别的原语，没有上限。&lt;/p&gt;
&lt;h2 id="可组合性真正的灵活性"&gt;可组合性：真正的灵活性
&lt;/h2&gt;&lt;p&gt;GUI 是封闭的。每个工具有自己的界面，彼此之间的数据流动需要人工中转。&lt;/p&gt;
&lt;p&gt;CLI 的基本单位是文本流，任何工具都可以通过 pipe 连接：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用户反馈 → 解析脚本 → issue 创建 → agent 分配 → worktree 修复 → PR 提交
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这条流水线里，每个环节独立替换、独立测试、独立优化。某个环节出了问题，你可以单独调试那一段，而不需要重走整个流程。这是 GUI 工具根本无法复制的架构灵活性。&lt;/p&gt;
&lt;h2 id="结语"&gt;结语
&lt;/h2&gt;&lt;p&gt;GUI 有它适合的场景——可视化需求、初次上手、非技术用户。这些场景 GUI 是正确的选择。&lt;/p&gt;
&lt;p&gt;但对于开发者，对于需要处理规模化工程任务的技术用户，CLI 不只是&amp;quot;够用&amp;quot;，它在结构上就是更优的工作方式。批量处理、并行执行、可组合、可脚本化——这些不是 CLI 的附加特性，而是它的基本属性。&lt;/p&gt;
&lt;p&gt;认知负担更低，处理规模更大，工作流可以版本化。这三点加在一起，足以说明问题。&lt;/p&gt;</description></item></channel></rss>