<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>效率 on 姚玉亮的网络日志</title><link>https://yusanwen-code.github.io/tags/%E6%95%88%E7%8E%87/</link><description>Recent content in 效率 on 姚玉亮的网络日志</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><lastBuildDate>Thu, 27 Aug 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://yusanwen-code.github.io/tags/%E6%95%88%E7%8E%87/index.xml" rel="self" type="application/rss+xml"/><item><title>一次聊需求，三仓同落地：我的 superpowers 全栈开发工作流</title><link>https://yusanwen-code.github.io/posts/post-71/</link><pubDate>Thu, 27 Aug 2026 09:00:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/post-71/</guid><description>&lt;img src="https://yusanwen-code.github.io/images/post-71-cover.jpg" alt="Featured image of post 一次聊需求，三仓同落地：我的 superpowers 全栈开发工作流" /&gt;&lt;h2 id="一个跨三个仓库的需求"&gt;一个跨三个仓库的需求&#10;&lt;/h2&gt;&lt;p&gt;我最近接到一个挺典型的需求：数据集管理里，&amp;ldquo;文档核验&amp;quot;这个动作要留痕：谁核验的、什么时候核验的；核验完还要能按数据集分页翻历史记录；管理后台加一个&amp;quot;核验记录&amp;quot;入口，点击弹列表，下拉就能一直加载；上层的知识库问答服务也要同步暴露这个列表接口。&lt;/p&gt;&#10;&lt;p&gt;这个需求横跨三个仓库：数据集管理服务、数据管理后台、知识库问答服务。&lt;/p&gt;&#10;&lt;p&gt;以前这种需求在我这儿是这么过的：拉群对齐需求 → 各写各的需求文档 → 前后端各自开工 → 联调时发现字段名对不上、分页参数叫法不一样 → 返工。现在我用 Claude Code 的 superpowers 工作流走了一遍完整流程，发现整个链条可以压缩成四步：brainstorming 聊需求 → 方案对比 → 写 spec → 生成实施计划。&lt;/p&gt;&#10;&#10;&lt;pre class="mermaid"&gt;&#10;flowchart LR&#10; A[&amp;#34;brainstorming 聊需求&amp;#34;] --&amp;gt; B[&amp;#34;方案对比&amp;#34;] --&amp;gt; C[&amp;#34;写 spec 落盘&amp;#34;] --&amp;gt; D[&amp;#34;生成实施计划&amp;#34;] --&amp;gt; E[&amp;#34;add-dir 挂三仓并行落地&amp;#34;]&#10;&lt;/pre&gt;&#10;&#10;&#10;&lt;style&gt;&#10;&#9;.mermaid {&#10;&#9;&#9;background: #ffffff;&#10;&#9;&#9;border: 1px solid #e5e7eb;&#10;&#9;&#9;border-radius: 10px;&#10;&#9;&#9;padding: 1rem;&#10;&#9;&#9;text-align: center;&#10;&#9;&#9;overflow-x: auto;&#10;&#9;}&#10;&#9;.mermaid svg {&#10;&#9;&#9;max-width: 100%;&#10;&#9;&#9;height: auto;&#10;&#9;}&#10;&lt;/style&gt;&#10;&lt;script src="https://yusanwen-code.github.io/js/mermaid.min.js" defer&gt;&lt;/script&gt;&#10;&lt;script&gt;&#10;&#9;document.addEventListener("DOMContentLoaded", function () {&#10;&#9;&#9;if (window.mermaid) {&#10;&#9;&#9;&#9;mermaid.initialize({ startOnLoad: true, theme: "default", flowchart: { curve: "basis" } });&#10;&#9;&#9;}&#10;&#9;});&#10;&lt;/script&gt;&#10;&#10;&lt;h2 id="第一步先探索代码再开口问"&gt;第一步：先探索代码，再开口问&#10;&lt;/h2&gt;&lt;p&gt;superpowers 的 brainstorming 第一步不是问&amp;quot;你想要什么&amp;rdquo;，而是先看项目上下文：路由注册在哪、handler 怎么写的、DAO 用的什么 ORM、前端页面结构、有没有现成的分页组件。&lt;/p&gt;&#10;&lt;p&gt;我让 Claude 把两个仓库都翻了一遍，结论：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;数据集管理服务是 Hertz + GORM 的架构，核验逻辑在文档服务的 revise 方法里，文档表上已经有一个&amp;quot;核验状态&amp;quot;字段，核验时会把它置为&amp;quot;已核验&amp;quot;&lt;/li&gt;&#10;&lt;li&gt;管理后台是 React + antd，代码里已经有现成的 &lt;code&gt;useInfiniteScroll&lt;/code&gt; 下拉加载 hook，数据详情页结构也很清晰&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;这一步的价值在于：问题基于真实代码，而不是基于想象。我不用花十分钟给 Claude 讲架构，它自己读出来的上下文，比任何人的转述都准确。比如&amp;quot;核验状态字段已经存在&amp;quot;这个事实，直接影响了后面的设计：记录表和状态字段是两回事，但很多人第一版设计会混在一起。&lt;/p&gt;&#10;&lt;h2 id="第二步一次只问一个问题"&gt;第二步：一次只问一个问题&#10;&lt;/h2&gt;&lt;p&gt;brainstorming 最反直觉的一条规则是：一次只问一个问题。&lt;/p&gt;&#10;&lt;p&gt;我一开始也觉得慢。但跑下来发现，需求是逐层展开的：先问&amp;quot;核验记录需要存哪些字段&amp;quot;，确定存核验人和核验时间；再问&amp;quot;列表按什么过滤&amp;quot;，确定按数据集 ID；再问&amp;quot;前端入口放在哪&amp;quot;，确定放数据详情页。每个答案都会修正下一个问题，一次抛十个问题，模型只能靠猜排优先级，猜错一半就得返工。&lt;/p&gt;&#10;&lt;p&gt;对话节奏大概是这样的（简化示意，实际要比这细致）：&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;我：核验记录需要展示哪些字段？&#10;Claude：先确认一下，除了核验人和核验时间，要不要把核验前后的版本号也存下来？这会决定表结构。&#10;我：先只存核验人和核验时间，跑通第一版。&#10;Claude：好。那列表接口按数据集 ID 过滤、支持分页返回，这个方向对吗？&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;&lt;p&gt;一次一个问题看着慢，其实最快：每个问题都建立在之前答案的基础上，方向不会歪。&lt;/p&gt;&#10;&lt;h2 id="第三步给-2-3-个方案而不是直接开写"&gt;第三步：给 2-3 个方案，而不是直接开写&#10;&lt;/h2&gt;&lt;p&gt;需求聊清楚之后，brainstorming 会要求给出 2-3 个实现方案对比。这个需求当时有两个主流方案：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;方案 A：复用现有的行为记录表。那张表是 JSON 半结构化的流水表，加一种行为类型就能记录，不用建新表。&lt;/li&gt;&#10;&lt;li&gt;方案 B：新建独立的核验记录表。字段干净，查询直接，列表接口就是一条简单的 &lt;code&gt;WHERE dataset_id = ?&lt;/code&gt; 分页查询。&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;我选了 B。核验记录是高频查询的业务动作，独立表让列表接口简单直接；方案 A 虽然少建一张表，但查列表要拆 JSON，而且行为流水表的数据量会持续膨胀，不适合做业务查询的底座。&lt;/p&gt;&#10;&lt;p&gt;选完方案，设计按块确认：表结构一块、接口定义一块、前端改动一块、上层同步一块，确认完再写进 spec 文档，落盘到 &lt;code&gt;docs/superpowers/specs/&lt;/code&gt; 目录下。这份文档是后续实施计划的输入，也是代码评审时对照的依据：评审不再靠记忆，而是对着 spec 逐条核对。&lt;/p&gt;&#10;&lt;h2 id="第四步add-dir-多项目前后端同时动"&gt;第四步：add-dir 多项目，前后端同时动&#10;&lt;/h2&gt;&lt;p&gt;设计获批后进入实施阶段。Claude Code 的 add-dir 可以把多个项目目录加进同一个会话，这个需求一次挂了三个目录：&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;数据集管理服务：建表、在核验接口里写记录、新增分页列表接口&lt;/li&gt;&#10;&lt;li&gt;管理后台：数据详情页加入口、列表抽屉、下拉加载&lt;/li&gt;&#10;&lt;li&gt;知识库问答服务：同步暴露列表接口&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;多目录的意义不只是&amp;quot;能改多个仓库&amp;quot;，而是 AI 同时持有两边的上下文：字段名、接口路径、分页参数天然一致，联调成本趋近于零。以前前后端联调要查半天&amp;quot;到底叫 &lt;code&gt;page&lt;/code&gt; 还是 &lt;code&gt;current&lt;/code&gt;&amp;quot;，现在在计划阶段就把契约定死了，代码照着写就行。&lt;/p&gt;&#10;&lt;h2 id="几个真实的感受"&gt;几个真实的感受&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;一次一个问题反直觉，但确实是最快的提问方式。需求是逐层展开的，一次一个才能保证每个问题都有价值。&lt;/li&gt;&#10;&lt;li&gt;探索比提问重要。让 AI 先读代码，它问出来的问题才有质量；不探索就问，问的都是网上搜得到的通用问题。&lt;/li&gt;&#10;&lt;li&gt;设计文档不是走流程。跨仓库改动里，它是唯一让所有人（包括几周后的你自己）对齐的锚点。代码评审对着 spec 审，比对着记忆审靠谱一个量级。&lt;/li&gt;&#10;&lt;li&gt;YAGNI。AI 很容易过度设计，比如顺手提一句&amp;quot;要不要顺便做个操作审计&amp;quot;。不需要，砍掉。每个设计阶段都要主动问：这个功能现在真的需要吗？&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="建议"&gt;建议&#10;&lt;/h2&gt;&lt;p&gt;如果你也在用 AI 写代码，别只停留在&amp;quot;让它写函数&amp;quot;的层面。试试把流程也交给它：从一个小需求开始，完整走一遍 brainstorming → 方案对比 → spec → 计划 → 实现。第一次会不习惯&amp;quot;一次只问一个问题&amp;quot;，但跑完一个需求你就会发现，多花在澄清上的半小时，会在联调阶段加倍省回来。&lt;/p&gt;&#10;</description></item><item><title>Cursor 与 Claude Code 对比：我的 AI 编程实战配置</title><link>https://yusanwen-code.github.io/posts/post-56/</link><pubDate>Mon, 12 Jan 2026 10:30:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/post-56/</guid><description>&lt;img src="https://yusanwen-code.github.io/images/post-56-cover.jpg" alt="Featured image of post Cursor 与 Claude Code 对比：我的 AI 编程实战配置" /&gt;&lt;h2 id="两个工具两种脾气"&gt;两个工具，两种脾气&#10;&lt;/h2&gt;&lt;p&gt;过去一年我同时深度使用 Cursor 和 Claude Code。一个是 IDE，一个是 CLI 加 Agent，定位并不重叠。在某科技公司的统一认证中心、知识库问答服务后端，以及 alchemy-furnace 全栈项目里，我慢慢形成了「日常写代码用 Cursor，复杂重构和跨服务任务用 Claude Code」的组合，而不是二选一。&lt;/p&gt;&#10;&lt;h2 id="各干各的活"&gt;各干各的活&#10;&lt;/h2&gt;&lt;p&gt;Cursor 的 Tab 补全和 Cmd+K 内联编辑最跟手。写熟悉的业务代码、前端 JSX、SQL 时效率极高，适合「我知道要写什么，只是想快一点」。Claude Code 的 Plan 模式、子任务和工具调用（Bash/Read/Edit）适合另一类活：「我知道目标，但需要它自己摸代码、跑测试、改一轮」，比如跨多个微服务加一个字段、批量修复 lint、写数据迁移脚本。&lt;/p&gt;&#10;&lt;p&gt;&lt;img alt="一个任务进来，按性质分流给两个工具" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://yusanwen-code.github.io/images/post-56-cursor-vs-claude.svg"&gt;&lt;/p&gt;&#10;&lt;h2 id="两份规则文件"&gt;两份规则文件&#10;&lt;/h2&gt;&lt;p&gt;Cursor 的 &lt;code&gt;.cursorrules&lt;/code&gt;：&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;div style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&#10;&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;1&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;2&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;3&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;4&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;5&#10;&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679"&gt;6&#10;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#10;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;&#10;&lt;pre tabindex="0" style="color:#e6edf3;background-color:#0d1117;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- You are an expert Go backend engineer.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Prefer table-driven tests.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Never ignore returned errors; wrap with fmt.Errorf(&amp;#34;...: %w&amp;#34;, err).&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Use zap for structured logging, no fmt.Println in business code.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- For GORM, always pass ctx and specify table name explicitly.&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;- Frontend: Next.js App Router, shadcn/ui, Tailwind. Keep components server by default.&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&lt;p&gt;Claude Code 的 &lt;code&gt;CLAUDE.md&lt;/code&gt; 在上一篇已经展示过，重点是项目结构、命令和领域术语。两份文件内容不同，思路一致：把团队约定固化下来，而不是每次靠 prompt 提醒。&lt;/p&gt;&#10;&lt;p&gt;两个工具我都要求同一件事：改完代码自己跑测试。Cursor 用 Composer 执行 &lt;code&gt;go test ./...&lt;/code&gt;，Claude Code 直接调 Bash 工具，看到失败再回头改。&lt;/p&gt;&#10;&lt;h2 id="踩过的坑"&gt;踩过的坑&#10;&lt;/h2&gt;&lt;p&gt;第一，上下文管理思路不同。Cursor 靠 &lt;code&gt;@file&lt;/code&gt;、&lt;code&gt;@git&lt;/code&gt;、&lt;code&gt;@docs&lt;/code&gt; 手动引用，精确，但前提是你得知道该引用什么；Claude Code 会自己 grep 和 read，容易把上下文撑爆，得靠 Plan 模式和子任务控制范围。&lt;/p&gt;&#10;&lt;p&gt;第二，补全质量。Cursor 在短片段补全上更跟手，尤其前端 props；Claude Code 不做实时补全，但整段生成和跨文件重构更强。&lt;/p&gt;&#10;&lt;p&gt;第三，价格与合规。Cursor 可以切不同模型，但企业代码要考虑合规；Claude Code 走我自己的 API Key 或订阅，代码不外传到第三方索引，对公司项目更安心。我们在统一认证中心项目里明确禁止把含密钥或客户数据的文件贴到任何 SaaS 工具。&lt;/p&gt;&#10;&lt;p&gt;第四，终端场景。Claude Code 在服务器、容器、tmux 里能直接跑，改 KubeSphere 部署脚本、调试线上 Pod 时比 SSH 加本地 IDE 方便；Cursor 需要本地有仓库或 Remote-SSH。&lt;/p&gt;&#10;&lt;p&gt;第五，别迷信任何一个工具。我见过同事一路 Tab 出几百行没跑过的代码，也见过让 Agent 自主改一下午、最后全是幻觉 API 的。生成越顺手，检查越不能省。&lt;/p&gt;&#10;&lt;p&gt;第六，两者都需要一份清晰的项目规则文件。没有 &lt;code&gt;.cursorrules&lt;/code&gt; 或 &lt;code&gt;CLAUDE.md&lt;/code&gt;，它们都会按「通用最佳实践」写，和你项目的真实风格完全不搭。&lt;/p&gt;&#10;&lt;h2 id="我的组合"&gt;我的组合&#10;&lt;/h2&gt;&lt;p&gt;Cursor 当主力编辑器，处理日常 CRUD 和前端；Claude Code 当 Agent，处理跨文件、跨服务、需要自己跑命令的任务。两个工具都配好项目规则，都要求改完自跑测试，都不让它碰密钥。这三个「都」，比选哪个工具更重要。&lt;/p&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;封面图：&lt;a class="link" href="https://www.flickr.com/photos/48126477@N05/6036720300" target="_blank" rel="noopener"&#10; &gt;MattsMacintosh / Flickr&lt;/a&gt; · CC BY 2.0&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item><item><title>极客工具推荐</title><link>https://yusanwen-code.github.io/posts/geek-tools/</link><pubDate>Thu, 01 Jun 2023 08:00:00 +0800</pubDate><guid>https://yusanwen-code.github.io/posts/geek-tools/</guid><description>&lt;h2 id="我的极客工具箱"&gt;我的极客工具箱&#10;&lt;/h2&gt;&lt;h3 id="终端"&gt;终端&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Alacritty&lt;/strong&gt; — GPU 加速的终端模拟器&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;tmux&lt;/strong&gt; — 终端复用神器&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;zsh + oh-my-zsh&lt;/strong&gt; — 最强 Shell&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="编辑器"&gt;编辑器&#10;&lt;/h3&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Neovim&lt;/strong&gt; — Vim 的现代版&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;VS Code&lt;/strong&gt; — 全能编辑器&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="开发工具"&gt;开发工具&#10;&lt;/h3&gt;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;工具&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;用途&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Docker&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;容器化&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Git&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;版本控制&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;jq&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON 处理&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;fzf&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;模糊搜索&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;ripgrep&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;极速搜索&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&#10; &lt;blockquote&gt;&#10; &lt;p&gt;工欲善其事，必先利其器。&lt;/p&gt;&#10;&#10; &lt;/blockquote&gt;&#10;</description></item></channel></rss>