<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Superpowers on 你怂你mua</title>
        <link>https://liusir521.github.io/tags/superpowers/</link>
        <description>Recent content in Superpowers on 你怂你mua</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Example Person</copyright>
        <lastBuildDate>Tue, 28 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://liusir521.github.io/tags/superpowers/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Claude Code 安装与 Superpowers 实战：从想法到发布的工程化工作流</title>
        <link>https://liusir521.github.io/p/claude-code-%E5%AE%89%E8%A3%85%E4%B8%8E-superpowers-%E5%AE%9E%E6%88%98%E4%BB%8E%E6%83%B3%E6%B3%95%E5%88%B0%E5%8F%91%E5%B8%83%E7%9A%84%E5%B7%A5%E7%A8%8B%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%B5%81/</link>
        <pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://liusir521.github.io/p/claude-code-%E5%AE%89%E8%A3%85%E4%B8%8E-superpowers-%E5%AE%9E%E6%88%98%E4%BB%8E%E6%83%B3%E6%B3%95%E5%88%B0%E5%8F%91%E5%B8%83%E7%9A%84%E5%B7%A5%E7%A8%8B%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%B5%81/</guid>
        <description>&lt;img src="https://liusir521.github.io/p/claude-code-%E5%AE%89%E8%A3%85%E4%B8%8E-superpowers-%E5%AE%9E%E6%88%98%E4%BB%8E%E6%83%B3%E6%B3%95%E5%88%B0%E5%8F%91%E5%B8%83%E7%9A%84%E5%B7%A5%E7%A8%8B%E5%8C%96%E5%B7%A5%E4%BD%9C%E6%B5%81/claude-code.png" alt="Featured image of post Claude Code 安装与 Superpowers 实战：从想法到发布的工程化工作流" /&gt;&lt;h2 id=&#34;为什么需要-superpowers&#34;&gt;为什么需要 Superpowers
&lt;/h2&gt;&lt;p&gt;Claude Code 原生已经很强——读代码、写文件、跑命令，日常够用。但面对复杂任务时，它容易&amp;quot;一步到位直接写&amp;quot;，然后反复修 bug。你不是在写代码，是在&lt;strong&gt;和 AI 打乒乓球&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;Superpowers 解决的问题就是这个。它是一套&lt;strong&gt;工程化工作流&lt;/strong&gt;，把软件开发的标准流程——澄清需求、写设计文档、拆分任务、TDD、调试、审查、验证——固化为 18 个 Skill。Claude 拿到的不再是一句&amp;quot;帮我做 X&amp;quot;，而是一整套经过验证的做事方法。&lt;/p&gt;
&lt;p&gt;下面用一个完整的 Go 项目——从零写一个并发安全的缓存库——把 18 个 Skill 串一遍。&lt;/p&gt;
&lt;h2 id=&#34;安装&#34;&gt;安装
&lt;/h2&gt;&lt;h3 id=&#34;claude-code&#34;&gt;Claude Code
&lt;/h3&gt;&lt;p&gt;Windows 下需要 Node.js 20+，推荐 npm 全局安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @anthropic-ai/claude-code
&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;macOS/Linux 同理。装完后终端输入 &lt;code&gt;claude&lt;/code&gt; 启动，首次会引导登录 Anthropic 账号并绑定 API Key。&lt;/p&gt;
&lt;h3 id=&#34;superpowers-插件&#34;&gt;Superpowers 插件
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add anthropics/skills@superpowers -g -y
&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;安装后重启 Claude Code，&lt;code&gt;npx skills list&lt;/code&gt; 确认看到 18 个 &lt;code&gt;superpowers:&lt;/code&gt; 前缀的 Skill。无需额外配置，对话中自动触发。&lt;/p&gt;
&lt;h2 id=&#34;实战go-并发安全缓存库&#34;&gt;实战：Go 并发安全缓存库
&lt;/h2&gt;&lt;p&gt;我们的目标是写一个带 TTL 过期、LRU 淘汰、并发安全的 Go 缓存库。下面按 Superpowers 的完整流程走一遍。&lt;/p&gt;
&lt;h3 id=&#34;1-想法--brainstorming&#34;&gt;1. 想法 → brainstorming
&lt;/h3&gt;&lt;p&gt;在项目目录下打开 Claude Code，输入：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;我想写一个 Go 的并发安全缓存库，支持 TTL 过期和 LRU 淘汰策略&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这时 Superpowers 的 &lt;code&gt;brainstorming&lt;/code&gt; Skill 自动介入——Claude &lt;strong&gt;不会直接写代码&lt;/strong&gt;，而是开始追问：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;几个问题帮我理清需求：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;缓存容量是固定的还是可配置的？有默认值吗？&lt;/li&gt;
&lt;li&gt;TTL 是在 Set 时指定每个 key 独立的过期时间，还是全局统一？&lt;/li&gt;
&lt;li&gt;API 风格偏好——&lt;code&gt;Get(key) (value, bool)&lt;/code&gt; 这种标准模式，还是需要额外返回 error？&lt;/li&gt;
&lt;li&gt;淘汰策略是纯 LRU，还是需要支持 LFU / ARC 等扩展接口？&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;追问结束后，Claude 提出两种方案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;方案 A — sync.Map + 惰性删除&lt;/strong&gt;：利用 &lt;code&gt;sync.Map&lt;/code&gt; 的无锁读，过期 key 在 Get 时惰性清理，简单但 LRU 维护麻烦&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;方案 B — 分片 + mutex + 双向链表（推荐）&lt;/strong&gt;：标准做法，每个分片独立锁，链表维护访问顺序，TTL 用 &lt;code&gt;time.AfterFunc&lt;/code&gt; 或惰性检查&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;确认方案 B 后，Claude 把设计文档写入 &lt;code&gt;docs/superpowers/specs/&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;2-设计--writing-plans&#34;&gt;2. 设计 → writing-plans
&lt;/h3&gt;&lt;p&gt;brainstorming 结束后，Claude 自动调用 &lt;code&gt;writing-plans&lt;/code&gt;，将设计文档转化为可执行的任务列表：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. 定义 Cache 接口（Set/Get/Del/Len）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. 实现 item 结构体（value + expiration + list.Element）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. 实现 LRU 双向链表（promote + evict）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. 实现分片锁管理器（hash key → shard）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. 实现 TTL 过期检查（惰性删除 + 可选后台清理）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6. 编写并发安全测试（-race 检测）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;7. 编写基准测试（benchmark）
&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;h3 id=&#34;3-隔离--using-git-worktrees&#34;&gt;3. 隔离 → using-git-worktrees
&lt;/h3&gt;&lt;p&gt;正式编码前，Claude 建议创建隔离的工作树：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;这个改动不小，建议先在 worktree 里做，不会弄乱 main 分支。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;接受后，Claude 调用 &lt;code&gt;EnterWorktree&lt;/code&gt;，在 &lt;code&gt;.claude/worktrees/&lt;/code&gt; 下创建独立分支和目录。所有的文件变更都隔离在这个环境里，随时可以丢弃重来，不影响主分支。&lt;/p&gt;
&lt;h3 id=&#34;4-编码--tdd--并行-agent&#34;&gt;4. 编码 → TDD + 并行 Agent
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;test-driven-development&lt;/code&gt; Skill 介入——Claude &lt;strong&gt;先写测试&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TestCache_SetAndGet&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;New&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;WithMaxItems&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Second&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Equal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;func&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;TestCache_Expiry&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;testing&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;T&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;New&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;WithMaxItems&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;value1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Millisecond&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Sleep&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Millisecond&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;Get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;key1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assert&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;False&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ok&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;w&#34;&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;测试写完后才进入实现。此时 &lt;code&gt;dispatching-parallel-agents&lt;/code&gt; 发挥作用——LRU 链表实现和 TTL 过期逻辑是两个独立任务，Claude 同时启动两个 subagent 并行处理：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[subagent-1] 实现 LRU 双向链表 + promote + evict
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[subagent-2] 实现 TTL 惰性过期检查 + 后台清理 goroutine
&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;两个 agent 完成后，主 Agent 把它们的结果合并到分片锁管理器中。并行的好处是&lt;strong&gt;等待时间减半&lt;/strong&gt;——LRU 链表和 TTL 互不依赖，完全可以同时写。&lt;/p&gt;
&lt;h3 id=&#34;5-排查--systematic-debugging&#34;&gt;5. 排查 → systematic-debugging
&lt;/h3&gt;&lt;p&gt;编码完成后运行测试：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -race ./...
&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;咦，race detector 报了一个 data race。Claude 没有猜原因，而是触发 &lt;code&gt;systematic-debugging&lt;/code&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;观察到的现象：&lt;code&gt;TestCache_ConcurrentSet&lt;/code&gt; 在 -race 下报 data race，指向 &lt;code&gt;item.lastAccess&lt;/code&gt; 字段的并发写入。&lt;/p&gt;
&lt;p&gt;假设一：promote 操作没有在锁内修改链表节点
假设二：TTL 检查的 goroutine 和 Set 之间没有同步&lt;/p&gt;
&lt;p&gt;先验证假设一：在 promote 调用处加 trace 日志，确认是否在 shard.mu.Lock() 之外执行。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;逐步排除后定位到根因：&lt;code&gt;Get&lt;/code&gt; 中的 &lt;code&gt;promote&lt;/code&gt; 操作读取了 &lt;code&gt;item.lastAccess&lt;/code&gt; 但未加写锁。修复后 &lt;code&gt;-race&lt;/code&gt; 干净通过。&lt;/p&gt;
&lt;p&gt;整个过程不是 Claude 盲目改代码，而是&lt;strong&gt;形成假设 → 逐个验证 → 定位根因&lt;/strong&gt;，和人类 debug 的思维方式一致。&lt;/p&gt;
&lt;h3 id=&#34;6-审查--requesting-code-review--receiving-code-review&#34;&gt;6. 审查 → requesting-code-review + receiving-code-review
&lt;/h3&gt;&lt;p&gt;测试通过后，Claude 调用 &lt;code&gt;requesting-code-review&lt;/code&gt;，由独立的 &lt;code&gt;code-reviewer&lt;/code&gt; agent 审查代码。审查结果返回：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;缺少 &lt;code&gt;Keys()&lt;/code&gt; 方法，调用方无法遍历所有有效 key&lt;/li&gt;
&lt;li&gt;TTL 后台清理 goroutine 没有优雅退出机制，调用 &lt;code&gt;New()&lt;/code&gt; 多次会泄漏 goroutine&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WithMaxItems(0)&lt;/code&gt; 应该视为无限制，当前实现会 panic&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;receiving-code-review&lt;/code&gt; Skill 此时介入——它提醒 Claude 不要&amp;quot;全盘接受所有建议&amp;quot;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;评估每条审查意见：第一条确实需要，第二条必须修，第三条是防御性编程可以加。不要为了&amp;quot;让 reviewer 满意&amp;quot;而过度工程。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修复这三条后重新运行测试，确认没有引入回归。&lt;/p&gt;
&lt;h3 id=&#34;7-验证--verification-before-completion&#34;&gt;7. 验证 → verification-before-completion
&lt;/h3&gt;&lt;p&gt;代码改完了，Claude 没有直接说&amp;quot;搞定了&amp;quot;，而是执行 &lt;code&gt;verification-before-completion&lt;/code&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -race -count&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; ./...      &lt;span class=&#34;c1&#34;&gt;# 重复三次确认无 flaky&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt; -bench&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;. -benchmem ./...   &lt;span class=&#34;c1&#34;&gt;# 基准测试通过&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;go vet ./...                       &lt;span class=&#34;c1&#34;&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;三项全部通过后，Claude 才报告完成。&lt;strong&gt;先验证再宣称&lt;/strong&gt;——这是 Superpowers 的核心纪律。&lt;/p&gt;
&lt;h3 id=&#34;8-收尾--finishing-a-development-branch&#34;&gt;8. 收尾 → finishing-a-development-branch
&lt;/h3&gt;&lt;p&gt;功能验证通过，&lt;code&gt;finishing-a-development-branch&lt;/code&gt; 给出三个选项：&lt;/p&gt;
&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;合并到 main（本地直接 merge）&lt;/li&gt;
&lt;li&gt;创建 PR（推到远程并 &lt;code&gt;gh pr create&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;保留当前分支，稍后处理&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;p&gt;选择 2 后，Claude 分析 diff，生成 PR 标题和描述，推送到远程并创建 Pull Request。Worktree 清理后回到原工作目录，main 分支干干净净。&lt;/p&gt;
&lt;h2 id=&#34;superpowers-skill-速查表&#34;&gt;Superpowers Skill 速查表
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;阶段&lt;/th&gt;
          &lt;th&gt;Skill&lt;/th&gt;
          &lt;th&gt;用途&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;构思&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;brainstorming&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;需求澄清、方案探索、设计文档&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;设计&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;writing-plans&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;设计文档 → 可执行任务清单&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;设计&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;executing-plans&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;在独立会话中按计划逐步执行&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;编码&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;using-git-worktrees&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;创建隔离工作树，避免污染主分支&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;编码&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;test-driven-development&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;先写测试再写实现&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;编码&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;dispatching-parallel-agents&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;并行调度 subagent 处理独立任务&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;编码&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;subagent-driven-development&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;在独立 subagent 中执行任务&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;调试&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;systematic-debugging&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;假设驱动、逐步验证的调试方法&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;审查&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;requesting-code-review&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;请求独立 code-reviewer 审查代码&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;审查&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;receiving-code-review&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;评估审查反馈，有选择地采纳&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;验证&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;verification-before-completion&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;运行验证命令后才宣称完成&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;发布&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;finishing-a-development-branch&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;合并/PR/保留的结构化收尾&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;发布&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;gh-cli&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;GitHub CLI 操作辅助&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;发布&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;git-commit&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;自动生成规范 commit 信息&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;工具&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;using-superpowers&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Superpowers 总入口，引导正确使用&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;工具&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;find-skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;搜索和发现第三方 Skill&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;工具&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;writing-skills&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;创建和编辑自定义 Skill&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;工具&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;update-config&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;配置 settings.json（权限、环境变量等）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;小结&#34;&gt;小结
&lt;/h2&gt;&lt;p&gt;Superpowers 的价值不是&amp;quot;让 Claude 更强&amp;quot;，而是&lt;strong&gt;让 Claude 做事更有章法&lt;/strong&gt;。从想到做、从做到上线，每个阶段有对应的 Skill 把流程框住——需求先澄清、方案先设计、代码先测试、完成先验证。这恰好是优秀工程师的工作习惯，现在通过 Skill 机制固化到了 AI 编程流程里。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
