<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>AI编程 on Chico's Tech Blog</title><link>https://realtime-ai.chat/tags/ai%E7%BC%96%E7%A8%8B/</link><description>Recent content in AI编程 on Chico's Tech Blog</description><image><title>Chico's Tech Blog</title><url>https://github.com/chicogong.png</url><link>https://github.com/chicogong.png</link></image><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Mon, 18 May 2026 11:00:00 +0800</lastBuildDate><atom:link href="https://realtime-ai.chat/tags/ai%E7%BC%96%E7%A8%8B/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Code 高级功能实战：MCP、Hooks、SubAgent 与自定义命令</title><link>https://realtime-ai.chat/posts/claude-code-advanced-features/</link><pubDate>Fri, 26 Dec 2025 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/claude-code-advanced-features/</guid><description>Claude Code 高级功能实战:MCP、Hooks、SubAgent 与自定义命令,把 AI 编程从「对话写代码」升级为自动化工作流。</description><content:encoded><![CDATA[<h2 id="前言不只是聊天机器人">前言：不只是聊天机器人</h2>
<p>大多数人使用 Claude Code 只是简单地&quot;对话写代码&quot;。但 Claude Code 的真正威力在于它的<strong>可扩展性</strong>和<strong>自动化能力</strong>。</p>
<p>本文将深入介绍 Claude Code 的四大高级功能：</p>
<ol>
<li><strong>MCP（Model Context Protocol）</strong>：让 Claude 连接外部工具和数据源</li>
<li><strong>Hooks</strong>：在关键节点插入自动化脚本</li>
<li><strong>SubAgent 多智能体架构</strong>：并发执行复杂任务</li>
<li><strong>CLAUDE.md 配置系统</strong>：定义项目规范和工作流</li>
</ol>
<p>这些功能组合起来，能让 Claude Code 从一个&quot;AI助手&quot;进化成&quot;AI工程师团队&quot;。</p>
<hr>
<h2 id="一mcp让-claude-连接一切">一、MCP：让 Claude 连接一切</h2>
<h3 id="11-什么是-mcp">1.1 什么是 MCP？</h3>
<p>MCP（Model Context Protocol）是 Anthropic 推出的开放协议，让 AI 模型能够与外部工具和数据源进行标准化交互。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">传统方式：Claude 只能看到你发给它的文本
</span></span><span class="line"><span class="cl">MCP方式：Claude 可以主动调用工具获取信息
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">┌─────────────┐     MCP协议      ┌─────────────┐
</span></span><span class="line"><span class="cl">│  Claude Code │ ◄────────────► │  外部服务    │
</span></span><span class="line"><span class="cl">└─────────────┘                 └─────────────┘
</span></span><span class="line"><span class="cl">                                    ├── 文件系统
</span></span><span class="line"><span class="cl">                                    ├── 数据库
</span></span><span class="line"><span class="cl">                                    ├── GitHub
</span></span><span class="line"><span class="cl">                                    ├── Slack
</span></span><span class="line"><span class="cl">                                    ├── Google Drive
</span></span><span class="line"><span class="cl">                                    └── 自定义工具
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="12-配置-mcp-服务器">1.2 配置 MCP 服务器</h3>
<p><strong>方法一：命令行添加（推荐）</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 添加文件系统访问</span>
</span></span><span class="line"><span class="cl">claude mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem ~/Documents ~/Projects
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 添加 GitHub 集成</span>
</span></span><span class="line"><span class="cl">claude mcp add github -e <span class="nv">GITHUB_TOKEN</span><span class="o">=</span>your_token -- npx -y @modelcontextprotocol/server-github
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 添加内存服务（持久化记忆）</span>
</span></span><span class="line"><span class="cl">claude mcp add memory -- npx -y @modelcontextprotocol/server-memory
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 查看已配置的服务器</span>
</span></span><span class="line"><span class="cl">claude mcp list
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>方法二：JSON 配置文件</strong></p>
<p>编辑 <code>~/.claude/settings.json</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;mcpServers&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;filesystem&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-filesystem&#34;</span><span class="p">,</span> <span class="s2">&#34;/Users/me/Projects&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;github&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-github&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;GITHUB_TOKEN&#34;</span><span class="p">:</span> <span class="s2">&#34;ghp_xxxxxxxxxxxx&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;postgres&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-postgres&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;DATABASE_URL&#34;</span><span class="p">:</span> <span class="s2">&#34;postgresql://user:pass@localhost:5432/mydb&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="13-常用-mcp-服务器">1.3 常用 MCP 服务器</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">服务器</th>
          <th style="text-align: left">用途</th>
          <th style="text-align: left">安装命令</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">filesystem</td>
          <td style="text-align: left">读写本地文件</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-filesystem</code></td>
      </tr>
      <tr>
          <td style="text-align: left">github</td>
          <td style="text-align: left">GitHub 操作</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-github</code></td>
      </tr>
      <tr>
          <td style="text-align: left">postgres</td>
          <td style="text-align: left">数据库查询</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-postgres</code></td>
      </tr>
      <tr>
          <td style="text-align: left">memory</td>
          <td style="text-align: left">持久化记忆</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-memory</code></td>
      </tr>
      <tr>
          <td style="text-align: left">slack</td>
          <td style="text-align: left">Slack 消息</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-slack</code></td>
      </tr>
      <tr>
          <td style="text-align: left">puppeteer</td>
          <td style="text-align: left">网页自动化</td>
          <td style="text-align: left"><code>@modelcontextprotocol/server-puppeteer</code></td>
      </tr>
  </tbody>
</table>
<h3 id="14-实战连接数据库查询">1.4 实战：连接数据库查询</h3>
<p>配置 PostgreSQL MCP 后，你可以这样使用：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 帮我查一下最近7天注册的用户数量，按天分组
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 我来查询数据库...
</span></span><span class="line"><span class="cl">[调用 postgres MCP 服务器]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">查询结果：
</span></span><span class="line"><span class="cl">| 日期 | 新增用户数 |
</span></span><span class="line"><span class="cl">|------|-----------|
</span></span><span class="line"><span class="cl">| 12-20 | 156 |
</span></span><span class="line"><span class="cl">| 12-21 | 189 |
</span></span><span class="line"><span class="cl">| 12-22 | 203 |
</span></span><span class="line"><span class="cl">| 12-23 | 178 |
</span></span><span class="line"><span class="cl">| 12-24 | 245 |
</span></span><span class="line"><span class="cl">| 12-25 | 312 |
</span></span><span class="line"><span class="cl">| 12-26 | 198 |
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">总计：1,481 位新用户
</span></span><span class="line"><span class="cl">可以看出 12-25（圣诞节）有明显的注册高峰。
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="二hooks自动化工作流的核心">二、Hooks：自动化工作流的核心</h2>
<h3 id="21-什么是-hooks">2.1 什么是 Hooks？</h3>
<p>Hooks 是 Claude Code 生命周期中的&quot;钩子&quot;，让你在特定事件发生时自动执行脚本。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">用户输入 → [UserPromptSubmit Hook] → Claude 思考
</span></span><span class="line"><span class="cl">                                          ↓
</span></span><span class="line"><span class="cl">                              [PreToolUse Hook] → 工具执行
</span></span><span class="line"><span class="cl">                                                      ↓
</span></span><span class="line"><span class="cl">                                          [PostToolUse Hook] → 返回结果
</span></span><span class="line"><span class="cl">                                                                   ↓
</span></span><span class="line"><span class="cl">                                                          [Stop Hook] → 会话结束
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="22-官方-8-大事件">2.2 官方 8 大事件</h3>
<table>
  <thead>
      <tr>
          <th style="text-align: left">事件</th>
          <th style="text-align: left">触发时机</th>
          <th style="text-align: left">可用变量</th>
          <th style="text-align: left">能否阻断</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><code>SessionStart</code></td>
          <td style="text-align: left">会话新建/resume</td>
          <td style="text-align: left">无</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>UserPromptSubmit</code></td>
          <td style="text-align: left">用户按回车前</td>
          <td style="text-align: left"><code>prompt</code></td>
          <td style="text-align: left">✅</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>PreToolUse</code></td>
          <td style="text-align: left">工具准备执行前</td>
          <td style="text-align: left"><code>tool_name</code>, <code>tool_input</code></td>
          <td style="text-align: left">✅</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>PostToolUse</code></td>
          <td style="text-align: left">工具执行结束后</td>
          <td style="text-align: left"><code>tool_name</code>, <code>tool_input</code>, <code>tool_output</code></td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>Notification</code></td>
          <td style="text-align: left">Claude 需要用户输入</td>
          <td style="text-align: left"><code>notification_text</code></td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>Stop</code></td>
          <td style="text-align: left">回答整体结束</td>
          <td style="text-align: left">无</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>SubagentStop</code></td>
          <td style="text-align: left">子代理任务结束</td>
          <td style="text-align: left"><code>subagent_name</code>, <code>result</code></td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>PreCompact</code></td>
          <td style="text-align: left">压缩对话缓存前</td>
          <td style="text-align: left">无</td>
          <td style="text-align: left">❌</td>
      </tr>
  </tbody>
</table>
<h3 id="23-配置-hooks">2.3 配置 Hooks</h3>
<p><strong>全局配置</strong> <code>~/.claude/settings.json</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PreToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Bash&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;echo &#39;[AUDIT] Bash command: $TOOL_INPUT&#39; &gt;&gt; ~/.claude/audit.log&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span> 
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx prettier --write $FILE_PATH 2&gt;/dev/null || true&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;UserPromptSubmit&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;/path/to/validate-prompt.sh&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>项目级配置</strong> <code>.claude/settings.local.json</code>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npm run lint:fix -- $FILE_PATH&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="24-实战示例">2.4 实战示例</h3>
<p><strong>示例1：自动格式化代码</strong></p>
<p>每次 Claude 写入文件后，自动运行 Prettier：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write|Edit|MultiEdit&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx prettier --write \&#34;$TOOL_INPUT\&#34; 2&gt;/dev/null || true&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例2：危险命令拦截</strong></p>
<p>阻止执行危险的 Bash 命令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="c1"># ~/.claude/scripts/validate-bash.sh</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">DANGEROUS_PATTERNS</span><span class="o">=</span><span class="s2">&#34;rm -rf|DROP TABLE|DELETE FROM|format|mkfs&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nb">echo</span> <span class="s2">&#34;</span><span class="nv">$TOOL_INPUT</span><span class="s2">&#34;</span> <span class="p">|</span> grep -qE <span class="s2">&#34;</span><span class="nv">$DANGEROUS_PATTERNS</span><span class="s2">&#34;</span><span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> <span class="s2">&#34;BLOCKED: 检测到危险命令&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">exit</span> <span class="m">0</span>
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PreToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Bash&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;~/.claude/scripts/validate-bash.sh&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例3：Slack 通知</strong></p>
<p>任务完成后发送 Slack 通知：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;Stop&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;curl -X POST -H &#39;Content-type: application/json&#39; --data &#39;{\&#34;text\&#34;:\&#34;Claude Code 任务完成!\&#34;}&#39; $SLACK_WEBHOOK_URL&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="三subagent多智能体并发架构">三、SubAgent：多智能体并发架构</h2>
<h3 id="31-架构原理">3.1 架构原理</h3>
<p>Claude Code 采用分层多 Agent 架构，通过<strong>主 Agent</strong>和<strong>SubAgent</strong>协作处理复杂任务：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">用户请求
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">主 Agent (nO 函数)
</span></span><span class="line"><span class="cl">    ↓
</span></span><span class="line"><span class="cl">是否调用 Task 工具？
</span></span><span class="line"><span class="cl">    ├── 否 → 直接处理 → 返回结果
</span></span><span class="line"><span class="cl">    └── 是 → 创建 SubAgent
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         并发执行调度器 (UH1)
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         多个 SubAgent 并行执行
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         结果合成器 (KN5)
</span></span><span class="line"><span class="cl">              ↓
</span></span><span class="line"><span class="cl">         返回合成结果
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="32-核心特性">3.2 核心特性</h3>
<ol>
<li><strong>完全隔离的执行环境</strong>：每个 SubAgent 在独立上下文中运行</li>
<li><strong>智能并发调度</strong>：支持最多 10 个 Agent 并发执行</li>
<li><strong>安全权限控制</strong>：SubAgent 无法调用 Task 工具（防止递归）</li>
<li><strong>高效结果合成</strong>：智能合并多个 Agent 的输出</li>
</ol>
<h3 id="33-task-工具使用">3.3 Task 工具使用</h3>
<p>当你给 Claude Code 一个复杂任务时，它会自动决定是否使用 SubAgent：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 分析这个项目的代码质量，包括：
</span></span><span class="line"><span class="cl">1. 代码结构是否合理
</span></span><span class="line"><span class="cl">2. 是否有潜在的性能问题
</span></span><span class="line"><span class="cl">3. 测试覆盖率如何
</span></span><span class="line"><span class="cl">4. 安全漏洞检查
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 这是一个复杂的分析任务，我会启动多个 SubAgent 并行处理：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[启动 SubAgent 1] 分析代码结构...
</span></span><span class="line"><span class="cl">[启动 SubAgent 2] 检查性能问题...
</span></span><span class="line"><span class="cl">[启动 SubAgent 3] 分析测试覆盖率...
</span></span><span class="line"><span class="cl">[启动 SubAgent 4] 扫描安全漏洞...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[等待所有 SubAgent 完成...]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[合成结果] 综合所有 Agent 的分析：
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="34-subagent-可用工具">3.4 SubAgent 可用工具</h3>
<p>SubAgent 可以使用以下工具：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kr">const</span> <span class="nx">SUBAGENT_ALLOWED_TOOLS</span> <span class="o">=</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">    <span class="s1">&#39;Read&#39;</span><span class="p">,</span>       <span class="c1">// 读取文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Write&#39;</span><span class="p">,</span>      <span class="c1">// 写入文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Edit&#39;</span><span class="p">,</span>       <span class="c1">// 编辑文件
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;MultiEdit&#39;</span><span class="p">,</span>  <span class="c1">// 多处编辑
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Glob&#39;</span><span class="p">,</span>       <span class="c1">// 文件搜索
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Grep&#39;</span><span class="p">,</span>       <span class="c1">// 内容搜索
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;Bash&#39;</span><span class="p">,</span>       <span class="c1">// 执行命令
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;WebFetch&#39;</span><span class="p">,</span>   <span class="c1">// 网页获取
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;WebSearch&#39;</span><span class="p">,</span>  <span class="c1">// 网络搜索
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;TodoRead&#39;</span><span class="p">,</span>   <span class="c1">// 读取任务
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="s1">&#39;TodoWrite&#39;</span><span class="p">,</span>  <span class="c1">// 写入任务
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="p">];</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// 被禁用的工具（防止递归）
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kr">const</span> <span class="nx">BLOCKED_TOOLS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Task&#39;</span><span class="p">];</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="35-并发执行示例">3.5 并发执行示例</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 帮我同时搜索项目中所有的 TODO 注释、FIXME 标记和废弃的 API 调用
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 我会并行启动 3 个搜索任务：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[SubAgent 1] 搜索 TODO 注释...
</span></span><span class="line"><span class="cl">[SubAgent 2] 搜索 FIXME 标记...
</span></span><span class="line"><span class="cl">[SubAgent 3] 搜索废弃 API 调用...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">--- 3 秒后 ---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[SubAgent 1 完成] 找到 23 个 TODO
</span></span><span class="line"><span class="cl">[SubAgent 2 完成] 找到 8 个 FIXME
</span></span><span class="line"><span class="cl">[SubAgent 3 完成] 找到 5 个废弃 API
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[合成结果]
</span></span><span class="line"><span class="cl">## 代码待办事项汇总
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">### TODO (23处)
</span></span><span class="line"><span class="cl">- src/api/user.ts:45 - TODO: 添加缓存
</span></span><span class="line"><span class="cl">- src/components/Table.tsx:123 - TODO: 优化渲染性能
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">### FIXME (8处)
</span></span><span class="line"><span class="cl">- src/utils/date.ts:67 - FIXME: 时区处理有问题
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">### 废弃 API (5处)
</span></span><span class="line"><span class="cl">- src/legacy/auth.ts:12 - 使用了已废弃的 crypto.createCipher
</span></span><span class="line"><span class="cl">...
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="四claudemd-配置系统">四、CLAUDE.md 配置系统</h2>
<h3 id="41-三级配置文件">4.1 三级配置文件</h3>
<p>Claude Code 使用三类 <code>.md</code> 文件进行配置，优先级从高到低：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">文件</th>
          <th style="text-align: left">位置</th>
          <th style="text-align: left">作用范围</th>
          <th style="text-align: left">版本控制</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><code>CLAUDE.local.md</code></td>
          <td style="text-align: left">项目根目录</td>
          <td style="text-align: left">当前用户</td>
          <td style="text-align: left">❌ 不提交</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>CLAUDE.md</code></td>
          <td style="text-align: left">项目根目录</td>
          <td style="text-align: left">当前项目</td>
          <td style="text-align: left">✅ 提交</td>
      </tr>
      <tr>
          <td style="text-align: left"><code>~/.claude/CLAUDE.md</code></td>
          <td style="text-align: left">用户目录</td>
          <td style="text-align: left">所有项目</td>
          <td style="text-align: left">❌ 不提交</td>
      </tr>
  </tbody>
</table>
<h3 id="42-创建项目配置">4.2 创建项目配置</h3>
<p>使用 <code>/init</code> 命令自动生成：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">claude
</span></span><span class="line"><span class="cl">&gt; /init
</span></span></code></pre></td></tr></table>
</div>
</div><p>这会在项目根目录创建 <code>CLAUDE.md</code> 文件。</p>
<h3 id="43-配置示例">4.3 配置示例</h3>
<p><strong>项目级 CLAUDE.md</strong>（提交到 Git）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 项目配置
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 项目概述
</span></span></span><span class="line"><span class="cl"><span class="gu"></span>这是一个 Next.js 14 电商平台，使用 TypeScript + Prisma + PostgreSQL。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 技术栈
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 框架：Next.js 14 (App Router)
</span></span><span class="line"><span class="cl"><span class="k">-</span> 语言：TypeScript 5.x (严格模式)
</span></span><span class="line"><span class="cl"><span class="k">-</span> 数据库：PostgreSQL + Prisma ORM
</span></span><span class="line"><span class="cl"><span class="k">-</span> 样式：Tailwind CSS
</span></span><span class="line"><span class="cl"><span class="k">-</span> 状态管理：Zustand
</span></span><span class="line"><span class="cl"><span class="k">-</span> 测试：Vitest + Testing Library
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 代码规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 ESLint + Prettier 格式化
</span></span><span class="line"><span class="cl"><span class="k">-</span> 组件使用函数式写法
</span></span><span class="line"><span class="cl"><span class="k">-</span> 所有函数必须有 JSDoc 注释
</span></span><span class="line"><span class="cl"><span class="k">-</span> 禁止使用 any 类型
</span></span><span class="line"><span class="cl"><span class="k">-</span> 错误处理使用自定义 Error 类
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 目录结构
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>src/
├── app/           # Next.js App Router 页面
├── components/    # React 组件
├── lib/           # 工具函数和配置
├── hooks/         # 自定义 Hooks
├── types/         # TypeScript 类型定义
└── prisma/        # 数据库 Schema</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## 常用命令
</span></span><span class="line"><span class="cl">- `npm run dev` - 启动开发服务器
</span></span><span class="line"><span class="cl">- `npm run build` - 构建生产版本
</span></span><span class="line"><span class="cl">- `npm run test` - 运行测试
</span></span><span class="line"><span class="cl">- `npm run lint` - 代码检查
</span></span><span class="line"><span class="cl">- `npx prisma studio` - 打开数据库管理界面
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## Git 提交规范
</span></span><span class="line"><span class="cl">- feat: 新功能
</span></span><span class="line"><span class="cl">- fix: 修复 Bug
</span></span><span class="line"><span class="cl">- refactor: 重构
</span></span><span class="line"><span class="cl">- docs: 文档
</span></span><span class="line"><span class="cl">- test: 测试
</span></span><span class="line"><span class="cl">- chore: 构建/工具
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">## 注意事项
</span></span><span class="line"><span class="cl">- 数据库敏感操作需要人工确认
</span></span><span class="line"><span class="cl">- 不要直接修改 prisma/migrations 目录
</span></span><span class="line"><span class="cl">- API 路由必须有权限验证
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>个人本地配置 CLAUDE.local.md</strong>（不提交）：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 本地配置
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 个人偏好
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 我喜欢详细的注释
</span></span><span class="line"><span class="cl"><span class="k">-</span> 代码示例要完整可运行
</span></span><span class="line"><span class="cl"><span class="k">-</span> 解释时使用中文
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 本地环境
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> Node.js: v20.10.0
</span></span><span class="line"><span class="cl"><span class="k">-</span> 数据库：本地 Docker 容器
</span></span><span class="line"><span class="cl"><span class="k">-</span> 端口：3000 (开发), 5432 (PostgreSQL)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 调试配置
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 VS Code 调试
</span></span><span class="line"><span class="cl"><span class="k">-</span> 断点调试端口: 9229
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>全局配置 ~/.claude/CLAUDE.md</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 全局配置
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 通用规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 2 空格缩进
</span></span><span class="line"><span class="cl"><span class="k">-</span> 变量命名使用 camelCase
</span></span><span class="line"><span class="cl"><span class="k">-</span> 常量使用 UPPER_SNAKE_CASE
</span></span><span class="line"><span class="cl"><span class="k">-</span> 组件使用 PascalCase
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 默认工具
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 包管理器：pnpm
</span></span><span class="line"><span class="cl"><span class="k">-</span> 版本控制：Git
</span></span><span class="line"><span class="cl"><span class="k">-</span> 编辑器：VS Code
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 安全规则
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 不要在代码中硬编码密钥
</span></span><span class="line"><span class="cl"><span class="k">-</span> 敏感文件（.env）不要提交
</span></span><span class="line"><span class="cl"><span class="k">-</span> API 调用必须有超时设置
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="44-自定义斜杠命令">4.4 自定义斜杠命令</h3>
<p>在 <code>.claude/commands/</code> 目录下创建 Markdown 文件，即可定义自定义命令：</p>
<p><strong>文件结构</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">.claude/
</span></span><span class="line"><span class="cl">└── commands/
</span></span><span class="line"><span class="cl">    ├── review.md      # /review 命令
</span></span><span class="line"><span class="cl">    ├── test.md        # /test 命令
</span></span><span class="line"><span class="cl">    └── deploy.md      # /deploy 命令
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>示例：review.md</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">请对当前项目进行代码审查：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">1.</span> 检查代码质量
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有重复代码
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 函数是否过长
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 命名是否清晰
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">2.</span> 检查潜在问题
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有未处理的错误
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有性能问题
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有安全漏洞
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">3.</span> 检查最佳实践
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否遵循项目规范
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有充分的测试
</span></span><span class="line"><span class="cl">   <span class="k">-</span> 是否有必要的注释
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">请提供详细的改进建议。
</span></span></code></pre></td></tr></table>
</div>
</div><p>使用：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&gt; /review
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="五综合实战打造个人-ai-工作流">五、综合实战：打造个人 AI 工作流</h2>
<h3 id="51-完整配置示例">5.1 完整配置示例</h3>
<p>结合以上所有功能，配置一个完整的 AI 开发工作流：</p>
<p><strong>~/.claude/settings.json</strong>：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;mcpServers&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;filesystem&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-filesystem&#34;</span><span class="p">,</span> <span class="s2">&#34;~/Projects&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;github&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&#34;-y&#34;</span><span class="p">,</span> <span class="s2">&#34;@modelcontextprotocol/server-github&#34;</span><span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;env&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;GITHUB_TOKEN&#34;</span><span class="p">:</span> <span class="s2">&#34;${GITHUB_TOKEN}&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;PostToolUse&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;matcher&#34;</span><span class="p">:</span> <span class="s2">&#34;Write|Edit&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;npx prettier --write \&#34;$FILE_PATH\&#34; 2&gt;/dev/null || true&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;Stop&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;hooks&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;type&#34;</span><span class="p">:</span> <span class="s2">&#34;command&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">            <span class="nt">&#34;command&#34;</span><span class="p">:</span> <span class="s2">&#34;echo \&#34;[$(date)] Task completed\&#34; &gt;&gt; ~/.claude/activity.log&#34;</span>
</span></span><span class="line"><span class="cl">          <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="p">]</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;permissions&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;allow&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(npm run *)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(git *)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(npx prettier *)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">],</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;deny&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(rm -rf *)&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;Bash(sudo *)&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="52-工作流示例">5.2 工作流示例</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">1. 启动项目
</span></span><span class="line"><span class="cl">   &gt; claude
</span></span><span class="line"><span class="cl">   &gt; /init  # 生成 CLAUDE.md
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">2. 查看项目状态
</span></span><span class="line"><span class="cl">   &gt; /review  # 运行自定义代码审查命令
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">3. 开发新功能
</span></span><span class="line"><span class="cl">   &gt; 帮我实现用户头像上传功能，要支持裁剪和压缩
</span></span><span class="line"><span class="cl">   
</span></span><span class="line"><span class="cl">   [Claude 自动]:
</span></span><span class="line"><span class="cl">   - 分析项目结构
</span></span><span class="line"><span class="cl">   - 创建组件文件（自动格式化）
</span></span><span class="line"><span class="cl">   - 编写测试用例
</span></span><span class="line"><span class="cl">   - 更新文档
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">4. 提交代码
</span></span><span class="line"><span class="cl">   &gt; 提交这些改动，写一个清晰的 commit message
</span></span><span class="line"><span class="cl">   
</span></span><span class="line"><span class="cl">   [Claude 使用 GitHub MCP]:
</span></span><span class="line"><span class="cl">   - 生成 commit message
</span></span><span class="line"><span class="cl">   - 创建 commit
</span></span><span class="line"><span class="cl">   - 可选：创建 PR
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="总结">总结</h2>
<p>Claude Code 的高级功能让它从一个简单的 AI 聊天工具，变成了一个真正的<strong>AI 开发平台</strong>：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">功能</th>
          <th style="text-align: left">作用</th>
          <th style="text-align: left">收益</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left"><strong>MCP</strong></td>
          <td style="text-align: left">连接外部工具和数据</td>
          <td style="text-align: left">扩展能力边界</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>Hooks</strong></td>
          <td style="text-align: left">自动化工作流</td>
          <td style="text-align: left">减少重复操作</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>SubAgent</strong></td>
          <td style="text-align: left">并发处理复杂任务</td>
          <td style="text-align: left">提升效率</td>
      </tr>
      <tr>
          <td style="text-align: left"><strong>CLAUDE.md</strong></td>
          <td style="text-align: left">定义项目规范</td>
          <td style="text-align: left">保持一致性</td>
      </tr>
  </tbody>
</table>
<p>掌握这些功能，你就能把 Claude Code 打造成专属的 AI 工程师团队。</p>
<hr>
<h2 id="参考资源">参考资源</h2>
<ul>
<li><a href="https://docs.anthropic.com/claude-code">Claude Code 官方文档</a></li>
<li><a href="https://modelcontextprotocol.io">MCP 协议规范</a></li>
<li><a href="https://github.com/modelcontextprotocol/servers">MCP 服务器列表</a></li>
</ul>
]]></content:encoded></item><item><title>Vibe Coding：当编程变成聊天，程序员该何去何从</title><link>https://realtime-ai.chat/posts/vibe-coding-era/</link><pubDate>Wed, 14 Jan 2026 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/vibe-coding-era/</guid><description>Vibe Coding 时代来临:当编程变成与 AI 聊天,程序员的角色如何转变,又该如何应对。</description><content:encoded><![CDATA[<h2 id="什么是-vibe-coding">什么是 Vibe Coding？</h2>
<p>2025年初，OpenAI前研究总监 <strong>Andrej Karpathy</strong> 发了一条推文，引爆整个技术圈：</p>
<blockquote>
<p>&ldquo;I just mass-mass-produce code with AI. I barely look at the diffs. I call this Vibe Coding.&rdquo;</p>
<p>&ldquo;我现在用AI大规模生产代码，几乎不看diff。我称之为 Vibe Coding。&rdquo;</p></blockquote>
<p>这不是玩笑。这位顶级AI科学家在认真描述他的日常工作方式：</p>
<ul>
<li>用自然语言告诉AI要做什么</li>
<li>AI生成代码</li>
<li>直接运行看效果</li>
<li>有问题就让AI改</li>
</ul>
<p><strong>不看代码，只看结果。</strong></p>
<p>这就是 Vibe Coding —— 一种全新的编程范式。</p>
<hr>
<h2 id="从写代码到描述需求">从&quot;写代码&quot;到&quot;描述需求&quot;</h2>
<h3 id="传统编程">传统编程</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># 手动实现一个用户登录功能</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">login</span><span class="p">(</span><span class="n">username</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">dict</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="c1"># 验证输入</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="ow">not</span> <span class="n">username</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">password</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&#34;用户名和密码不能为空&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 查询数据库</span>
</span></span><span class="line"><span class="cl">    <span class="n">user</span> <span class="o">=</span> <span class="n">db</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">User</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">User</span><span class="o">.</span><span class="n">username</span> <span class="o">==</span> <span class="n">username</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="ow">not</span> <span class="n">user</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">raise</span> <span class="n">AuthError</span><span class="p">(</span><span class="s2">&#34;用户不存在&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 验证密码</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="ow">not</span> <span class="n">verify_password</span><span class="p">(</span><span class="n">password</span><span class="p">,</span> <span class="n">user</span><span class="o">.</span><span class="n">hashed_password</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">        <span class="k">raise</span> <span class="n">AuthError</span><span class="p">(</span><span class="s2">&#34;密码错误&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="c1"># 生成token</span>
</span></span><span class="line"><span class="cl">    <span class="n">token</span> <span class="o">=</span> <span class="n">create_access_token</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">{</span><span class="s2">&#34;token&#34;</span><span class="p">:</span> <span class="n">token</span><span class="p">,</span> <span class="s2">&#34;user&#34;</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">to_dict</span><span class="p">()}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>你需要：</p>
<ol>
<li>了解所有API</li>
<li>处理边界情况</li>
<li>手动写每一行</li>
</ol>
<h3 id="vibe-coding">Vibe Coding</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 实现用户登录功能，要验证输入、查数据库、验密码、返回JWT token
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">AI: [生成完整代码]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 跑一下
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">AI: [执行测试] 测试通过
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 加个登录失败次数限制，超过5次锁定账号
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">AI: [修改代码] 已添加
</span></span></code></pre></td></tr></table>
</div>
</div><p>你需要：</p>
<ol>
<li>清楚地描述需求</li>
<li>验证结果是否符合预期</li>
<li>迭代优化</li>
</ol>
<p><strong>代码变成了&quot;中间产物&quot;，不再是最终目标。</strong></p>
<hr>
<h2 id="为什么现在可行了">为什么现在可行了？</h2>
<h3 id="1-模型能力的跃升">1. 模型能力的跃升</h3>
<p>Claude 3.5 Sonnet → Claude Opus 4.5 → GPT-5，代码能力指数级提升：</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">指标</th>
          <th style="text-align: left">2023年</th>
          <th style="text-align: left">2025年</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">SWE-bench</td>
          <td style="text-align: left">20%</td>
          <td style="text-align: left">75%</td>
      </tr>
      <tr>
          <td style="text-align: left">HumanEval</td>
          <td style="text-align: left">67%</td>
          <td style="text-align: left">96%</td>
      </tr>
      <tr>
          <td style="text-align: left">复杂项目理解</td>
          <td style="text-align: left">单文件</td>
          <td style="text-align: left">整个仓库</td>
      </tr>
  </tbody>
</table>
<h3 id="2-工具链的成熟">2. 工具链的成熟</h3>
<ul>
<li><strong>Cursor</strong>：AI原生IDE，理解整个项目</li>
<li><strong>Claude Code</strong>：终端里的AI程序员</li>
<li><strong>Windsurf</strong>：Copilot++，无缝集成</li>
<li><strong>Replit Agent</strong>：从描述到部署一条龙</li>
</ul>
<h3 id="3-上下文窗口爆炸">3. 上下文窗口爆炸</h3>
<ul>
<li>2023年：4K tokens（一个文件）</li>
<li>2024年：128K tokens（小型项目）</li>
<li>2025年：1M+ tokens（大型代码库）</li>
</ul>
<p>AI终于能&quot;看懂&quot;整个项目了。</p>
<hr>
<h2 id="vibe-coding-实战演示">Vibe Coding 实战演示</h2>
<h3 id="场景从零搭建一个博客系统">场景：从零搭建一个博客系统</h3>
<p><strong>传统方式</strong>：2-3天</p>
<p><strong>Vibe Coding方式</strong>：2小时</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">第1轮对话：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 我要做一个个人博客系统，技术栈用 Next.js 14 + Prisma + PostgreSQL。
</span></span><span class="line"><span class="cl">功能需要：
</span></span><span class="line"><span class="cl">- Markdown 文章编辑
</span></span><span class="line"><span class="cl">- 文章分类和标签
</span></span><span class="line"><span class="cl">- 评论系统
</span></span><span class="line"><span class="cl">- 暗黑模式
</span></span><span class="line"><span class="cl">帮我搭建项目框架。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">AI: 好的，我来创建项目...
</span></span><span class="line"><span class="cl">[执行 npx create-next-app@14 ...]
</span></span><span class="line"><span class="cl">[创建 prisma/schema.prisma]
</span></span><span class="line"><span class="cl">[创建数据库模型]
</span></span><span class="line"><span class="cl">[创建基础组件]
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">框架搭建完成，运行 npm run dev 查看效果。
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">第2轮对话：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 首页看起来太丑了，参考 Vercel 官网的设计风格美化一下
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">AI: 明白，我来调整样式...
</span></span><span class="line"><span class="cl">[修改 globals.css]
</span></span><span class="line"><span class="cl">[修改 components/Header.tsx]
</span></span><span class="line"><span class="cl">[添加渐变背景和动画效果]
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">已更新，刷新页面查看。
</span></span></code></pre></td></tr></table>
</div>
</div><div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">第3轮对话：
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 文章编辑器需要支持实时预览，左边写 Markdown 右边显示效果
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">AI: 
</span></span><span class="line"><span class="cl">[安装 react-markdown]
</span></span><span class="line"><span class="cl">[创建 SplitEditor 组件]
</span></span><span class="line"><span class="cl">[添加语法高亮支持]
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">编辑器已完成。
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>2小时后</strong>：一个功能完整、样式精美的博客系统上线。</p>
<hr>
<h2 id="谁适合-vibe-coding">谁适合 Vibe Coding？</h2>
<h3 id="最适合">最适合</h3>
<ol>
<li>
<p><strong>资深开发者</strong></p>
<ul>
<li>知道要做什么，懒得写具体实现</li>
<li>能快速判断AI代码质量</li>
<li>专注架构设计和业务逻辑</li>
</ul>
</li>
<li>
<p><strong>创业者/独立开发者</strong></p>
<ul>
<li>一个人当一个团队用</li>
<li>快速验证想法，MVP开发</li>
<li>把时间花在更重要的事情上</li>
</ul>
</li>
<li>
<p><strong>非专业程序员</strong></p>
<ul>
<li>产品经理自己做原型</li>
<li>设计师实现交互效果</li>
<li>运营搭建内部工具</li>
</ul>
</li>
</ol>
<h3 id="需要谨慎">需要谨慎</h3>
<ol>
<li>
<p><strong>涉及核心算法的场景</strong></p>
<ul>
<li>交易系统的风控逻辑</li>
<li>推荐算法的核心实现</li>
<li>需要100%正确的关键路径</li>
</ul>
</li>
<li>
<p><strong>安全敏感场景</strong></p>
<ul>
<li>加密解密实现</li>
<li>认证授权逻辑</li>
<li>需要人工审查每一行</li>
</ul>
</li>
<li>
<p><strong>性能极端场景</strong></p>
<ul>
<li>毫秒级响应要求</li>
<li>资源受限环境</li>
<li>需要手工优化</li>
</ul>
</li>
</ol>
<hr>
<h2 id="程序员的新技能栈">程序员的新技能栈</h2>
<p>Vibe Coding 时代，程序员需要的能力正在转变：</p>
<h3 id="重要性降低">重要性降低</h3>
<ul>
<li>❌ 记忆API语法</li>
<li>❌ 手写样板代码</li>
<li>❌ 调试简单Bug</li>
<li>❌ 代码格式规范</li>
</ul>
<h3 id="重要性提升">重要性提升</h3>
<ul>
<li>✅ <strong>需求分析</strong>：把模糊需求转化为清晰描述</li>
<li>✅ <strong>架构设计</strong>：决定系统如何组织</li>
<li>✅ <strong>代码审查</strong>：快速判断AI输出质量</li>
<li>✅ <strong>Prompt工程</strong>：如何让AI更好地理解你</li>
<li>✅ <strong>测试验证</strong>：确保结果符合预期</li>
<li>✅ <strong>领域知识</strong>：理解业务，而不只是技术</li>
</ul>
<h3 id="新的工作流程">新的工作流程</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">传统：需求 → 设计 → 编码 → 测试 → 部署
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Vibe：需求 → 描述 → AI编码 → 审查 → 迭代 → 部署
</span></span><span class="line"><span class="cl">          ↑_________←_________|
</span></span></code></pre></td></tr></table>
</div>
</div><p>核心变化：<strong>你从&quot;生产者&quot;变成了&quot;指挥者&quot;和&quot;质检员&quot;</strong>。</p>
<hr>
<h2 id="一些实用建议">一些实用建议</h2>
<h3 id="1-学会说人话">1. 学会&quot;说人话&quot;</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">❌ 不好的描述：
</span></span><span class="line"><span class="cl">&#34;写一个函数处理用户数据&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">✅ 好的描述：
</span></span><span class="line"><span class="cl">&#34;写一个函数，接收用户注册表单数据（name, email, password），
</span></span><span class="line"><span class="cl">验证邮箱格式和密码强度（至少8位，包含大小写和数字），
</span></span><span class="line"><span class="cl">验证通过返回处理后的数据，失败抛出具体错误信息&#34;
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="2-分步迭代">2. 分步迭代</h3>
<p>不要试图一次性让AI写完所有功能。</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">第1步：搭建基础框架
</span></span><span class="line"><span class="cl">第2步：实现核心功能
</span></span><span class="line"><span class="cl">第3步：添加边界处理
</span></span><span class="line"><span class="cl">第4步：优化性能
</span></span><span class="line"><span class="cl">第5步：完善样式
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="3-保持代码审查习惯">3. 保持代码审查习惯</h3>
<p>AI不会100%正确。关键代码一定要review：</p>
<ul>
<li>安全相关（认证、权限、加密）</li>
<li>性能相关（循环、查询、缓存）</li>
<li>业务相关（核心逻辑、金额计算）</li>
</ul>
<h3 id="4-建立项目规范">4. 建立项目规范</h3>
<p>在项目中维护一个 <code>CLAUDE.md</code> 或 <code>.cursorrules</code> 文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 项目规范
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 技术栈
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> Next.js 14 (App Router)
</span></span><span class="line"><span class="cl"><span class="k">-</span> TypeScript 严格模式
</span></span><span class="line"><span class="cl"><span class="k">-</span> Tailwind CSS
</span></span><span class="line"><span class="cl"><span class="k">-</span> Prisma ORM
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 代码风格
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用函数式组件
</span></span><span class="line"><span class="cl"><span class="k">-</span> 所有函数必须有 JSDoc 注释
</span></span><span class="line"><span class="cl"><span class="k">-</span> 错误处理使用自定义 Error 类
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 禁止
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 any 类型
</span></span><span class="line"><span class="cl"><span class="k">-</span> 直接操作 DOM
</span></span><span class="line"><span class="cl"><span class="k">-</span> 在组件中写内联样式
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="这是终点吗">这是终点吗？</h2>
<p>Vibe Coding 可能只是开始。</p>
<p><strong>接下来可能发生的</strong>：</p>
<ol>
<li><strong>AI理解产品文档</strong>：直接从PRD生成代码</li>
<li><strong>AI参与代码审查</strong>：自动发现问题并修复</li>
<li><strong>AI运维系统</strong>：监控、报警、自动修复</li>
<li><strong>AI产品经理</strong>：分析用户行为，提出优化建议</li>
</ol>
<p><strong>终极形态</strong>：</p>
<blockquote>
<p>你描述一个想法，AI完成从设计到开发到部署到运维的全流程。</p></blockquote>
<p>这不是科幻，可能就在3-5年内。</p>
<hr>
<h2 id="结语">结语</h2>
<p>Vibe Coding 不是要消灭程序员，而是在重新定义什么是编程。</p>
<p>20年前，&ldquo;程序员&quot;意味着要懂汇编和指针。
10年前，&ldquo;程序员&quot;意味着要懂框架和设计模式。
今天，&ldquo;程序员&quot;可能意味着要懂需求分析和AI协作。</p>
<p><strong>不变的是</strong>：解决问题的能力、对技术的理解、对产品的洞察。</p>
<p><strong>变化的是</strong>：实现方式从&quot;手写代码&quot;变成了&quot;指挥AI&rdquo;。</p>
<p>你可以选择抵触，也可以选择拥抱。但无论如何，这个浪潮已经来了。</p>
]]></content:encoded></item><item><title>AI IDE 这半年:Cursor、Claude Code、Windsurf 之后</title><link>https://realtime-ai.chat/posts/ai-ide-2026/</link><pubDate>Mon, 18 May 2026 11:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/ai-ide-2026/</guid><description>复盘 2026 上半年 AI 编程工具的演变:从代码补全到后台 agent,Cursor、Claude Code、Windsurf、Copilot 的真实定位与差异,以及开发者从写代码转向审代码、派活的工作方式变化。</description><content:encoded><![CDATA[<p>上周三下午,我同时开着四个东西:Cursor 里一个 agent 在改重构,终端里 Claude Code 在跑测试,GitHub 上一个 Copilot 后台 agent 在处理我早上随手丢过去的 issue,还有一个 Cursor 云端 automation 在等 CI 结果。我本人那段时间在干嘛?在看 Linear 上的工单,决定下一个派给谁。</p>
<p>我没写一行代码。但那个下午合并了五个 PR。</p>
<p>这不是什么&quot;未来已来&quot;的感慨。这是 2026 年 5 月一个普通工程师的普通下午。半年前——也就是 2025 年底——我的工作方式还不是这样。那时候 AI 编程工具的主流形态是&quot;一个很聪明的补全&quot;,你在编辑器里写代码,它帮你接下一段。现在,补全这件事我几乎已经感觉不到它的存在了,因为我的注意力整个挪到了别处。</p>
<p>这半年到底发生了什么,值得拆开看看。</p>
<h2 id="三级跳补全--终端-agent--后台-agent">三级跳:补全 → 终端 agent → 后台 agent</h2>
<p>如果要给 AI 编程工具这半年画一条线,它是这样三级跳的:</p>
<pre class="mermaid">flowchart LR
  A[代码补全<br/>2023-2024] --> B[IDE 内 agent<br/>2025] --> C[终端 agent<br/>2025 下半年] --> D[后台/云端 agent<br/>2026]
  style A fill:#e8e8e8,stroke:#999
  style B fill:#fde7c2,stroke:#e8b23c
  style C fill:#fde7c2,stroke:#e8b23c
  style D fill:#c2e0fd,stroke:#3c8ce8
</pre><p>第一级是<strong>补全</strong>:Copilot 那套,光标后面灰字提示,你按 Tab 接受。这个形态决定了一件事——AI 是你的副驾驶,方向盘还在你手里,你得一直盯着路。</p>
<p>第二级是 <strong>IDE 内的 agent</strong>:Cursor 的 Composer、Windsurf 的 Cascade。它不再是接一段,而是&quot;你说要干什么,它跨多个文件改完给你看&quot;。方向盘开始松动了,但你还在车里。</p>
<p>第三级是 <strong>终端 agent</strong>:Claude Code 是把这个形态做出影响力的那个。它干脆不要 IDE 这个壳了,就是个命令行程序,你跟它说话,它自己读文件、改代码、跑测试、看报错、再改。这一步的意义比看上去大——它把 AI 编程从&quot;编辑器里的一个功能&quot;变成了&quot;一个独立的进程&quot;。一旦是独立进程,你就能开很多个,就能让它在后台跑。</p>
<p>第四级,也就是现在,是<strong>后台 / 云端 agent</strong>:活儿不在你机器上跑了。Cursor 的 cloud agents、GitHub 的 coding agent、Cognition 的 Devin,它们在云端的容器里干活,干完给你提个 PR。你甚至可以在手机上派活。</p>
<p>每跳一级,人和代码之间就多隔一层。半年前我的手指还在键盘上,现在我的手指主要在做一件事:点&quot;approve&quot;或者&quot;reject&quot;。</p>
<h2 id="当前四强各自站在哪">当前四强,各自站在哪</h2>
<p>把这半年最主流的四个工具摆在一起,它们其实已经不在同一个赛道上竞争了——这是很多人没意识到的。</p>
<table>
  <thead>
      <tr>
          <th>工具</th>
          <th>当前形态</th>
          <th>真实定位</th>
          <th>适合谁</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Cursor(3.4 / Composer 2.5)</td>
          <td>AI 原生 IDE + 云端 agent</td>
          <td>&ldquo;派活中枢&rdquo;:本地写 + 云端并行</td>
          <td>想一个人指挥一支 agent 小队的人</td>
      </tr>
      <tr>
          <td>Claude Code(2.x)</td>
          <td>终端 agent + Agent View</td>
          <td>&ldquo;干重活的那个&rdquo;:复杂改动、长任务</td>
          <td>信任命令行、要做深度改动的人</td>
      </tr>
      <tr>
          <td>Windsurf(Wave 13)</td>
          <td>AI IDE,归 Cognition</td>
          <td>&ldquo;通往 Devin 的入口&rdquo;</td>
          <td>喜欢 Cascade 体验、赌 Cognition 的人</td>
      </tr>
      <tr>
          <td>GitHub Copilot</td>
          <td>补全 + Agent Mode + 云端 coding agent</td>
          <td>&ldquo;贴着 GitHub 的那个&rdquo;</td>
          <td>重度 GitHub workflow、企业团队</td>
      </tr>
  </tbody>
</table>
<p><strong>Cursor</strong> 这半年走得最稳。3.3、3.4 连着发,Composer 2.5 五月中刚出。它现在的核心卖点已经不是&quot;补全多准&quot;,而是 <code>/multitask</code>——你可以同时开一堆异步子 agent 并行干活,加上云端 automation 能直接从 Linear、Jira、GitHub 读工单、起 PR、回写状态。Cursor 想做的是你的<strong>指挥台</strong>:本地一份 agent,云端一支舰队,你坐中间派活。它甚至能帮你把云端 agent 需要的开发环境(克隆仓库、装依赖、配凭据)自动搭好——因为没有环境,agent 舰队就跑不起来。</p>
<p><strong>Claude Code</strong> 走的是另一条路。它不抢&quot;IDE&quot;这个身份,就守着终端。这半年它加了 Agent View——一个能同时盯多个后台会话的界面,加了 <code>/goal</code>——你给它一个目标,它自己写代码、跑测试、debug、再跑,直到达成。我个人的体感:Claude Code 是这四个里最适合干&quot;脏活重活&quot;的。一个要动二十个文件、还得反复跑测试验证的重构,我现在默认丢给它。它的 fast mode 现在默认跑 Opus 4.7。</p>
<p><strong>Windsurf</strong> 是这半年最唏嘘的一个。2025 年底它被 Cognition(做 Devin 的那家)以约 2.5 亿美元收购,这中间还夹着 Google 的技术授权和 OpenAI 当初的竞购,过程一地鸡毛。产品本身没死,Wave 13 还带来了多 agent 会话和 Git worktree 支持,2026 年 2 月它在 LogRocket 的 AI 开发工具榜上还排第一。但今年 3 月它把原来便宜、可预测的 15 美元信用额度套餐换成了 20 美元加严格日 / 周配额,直接惹毛了一批老用户。更要命的是定位上的不确定:Cognition 明说了想把 Windsurf 的 IDE 能力并进 Devin。所以现在用 Windsurf,你得想清楚——你是在用一个 IDE,还是在用一个早晚会变成 Devin 入口的东西。</p>
<p><strong>GitHub Copilot</strong> 是那个&quot;看起来落后、其实没掉队&quot;的。补全起家的它,这半年把 Agent Mode 和云端 coding agent 都补齐了:coding agent 现在能自己选模型、开 PR 前先用 code review 自审一遍、还在流程里跑代码扫描和密钥泄露检查。它最大的护城河从来不是模型,是它长在 GitHub 身体里——issue、PR、Actions、code review 一条龙。五月它还放出了从 JetBrains IDE 把任务交给本地 Copilot CLI agent 的预览。Copilot 不耀眼,但对一个深度绑在 GitHub 上的企业团队,它是阻力最小的选择。</p>
<p>我的判断是:<strong>别再问&quot;哪个最好&quot;了</strong>。这个问题在 2025 年还成立,现在不成立。Cursor 是指挥台,Claude Code 是重型施工队,Copilot 是贴着 GitHub 的传送带,Windsurf 是一张赌 Cognition 未来的票。它们解决的是不同的问题。我自己是 Cursor + Claude Code 一起用,前者派活、后者啃硬骨头,一点都不冲突。</p>
<h2 id="终端-agent为什么会赢">&ldquo;终端 agent&quot;为什么会赢</h2>
<p>值得单独说一句:为什么 2025 下半年杀出来的是终端 agent 这个形态,而不是更花哨的 IDE?</p>
<p>因为终端 agent 砍掉了&quot;图形界面&quot;这个包袱,换来了三样东西:<strong>可组合、可并行、可上云</strong>。</p>
<p>一个命令行程序,你能用 shell 脚本把它串起来,能在 CI 里调它,能开十个进程同时跑。一个 IDE 你做不到这些——IDE 天生是给&quot;一个人坐在前面&quot;设计的。当 AI 编程从&quot;辅助一个人&quot;变成&quot;同时干很多活&rdquo;,IDE 这个外壳反而成了约束。</p>
<pre class="mermaid">flowchart TB
  Dev[开发者] --> Plan[拆任务 / 写清楚要什么]
  Plan --> A1[agent 1: 后台改 bug]
  Plan --> A2[agent 2: 本地写新功能]
  Plan --> A3[agent 3: 云端跑重构]
  A1 --> Review[人:审 diff / 提 PR / 决定合不合]
  A2 --> Review
  A3 --> Review
  Review --> Dev
  style Dev fill:#fde7c2,stroke:#e8b23c
  style Review fill:#fde7c2,stroke:#e8b23c
</pre><p>注意这张图里,人只出现在两个地方:<strong>开头拆活,结尾审活</strong>。中间那段&quot;写代码&quot;已经不在人的关键路径上了。这就是这半年最实质的变化——它不是工具变好用了,是工作流的形状变了。</p>
<p>Cursor 也很清楚这一点,所以它一边守着 IDE 这个用户习惯,一边拼命往云端 agent 和 <code>/multitask</code> 上加码。它在用 IDE 的外壳,装终端 agent 的内核。</p>
<h2 id="你的工作从写变成了审和派">你的工作从&quot;写&quot;变成了&quot;审&quot;和&quot;派&quot;</h2>
<p>这是我最想说的一段,也是这半年我自己感受最深的。</p>
<p>半年前,我的核心技能是写代码。现在不是了。现在我每天花最多时间的三件事是:</p>
<p><strong>第一,把活拆清楚。</strong> Agent 干得好不好,八成取决于你派活派得清不清楚。一个含糊的&quot;帮我优化下这个模块&quot;,和一个&quot;把这个模块的数据库查询从 N+1 改成批量加载,保持现有接口不变,加上对应测试&quot;——出来的东西天差地别。这半年我越来越觉得,<strong>写清楚需求本身就是一种正在升值的技能</strong>。Claude Code 的 <code>/goal</code> 之所以好用,前提是你得能说清楚那个 goal。</p>
<p><strong>第二,审 diff。</strong> 这是最累、也最危险的一件事。Agent 一天能给你交十几个 PR,业界数据是引入 agent 后 PR 数量涨了 40% 到 60%。问题来了:你审得过来吗?审不过来就会有人开始&quot;假装审过了&quot;——扫一眼,点 approve。这是 2026 年最真实的风险,不是 AI 写出 bug,是<strong>人审不动了,于是不审了</strong>。</p>
<p>我给自己定了条规矩:<strong>agent 写的代码,审查标准要比人写的更高,不是更低</strong>。因为人写错了通常错得&quot;有道理&quot;、好猜;agent 错起来经常错得很离谱、很自信,藏在一堆看着没问题的代码中间。</p>
<p><strong>第三,决定什么不交给 agent。</strong> 这点反直觉但很重要。核心架构、安全边界、那些&quot;错了代价很大&quot;的地方,我现在反而更倾向自己写,或者自己写完让 agent 来挑错。会派活的人不是把所有活都派出去的人,是知道<strong>哪些该派、哪些该自己攥着</strong>的人。</p>
<p>工具厂商其实也在顺着这个变化走。GitHub Copilot 的 coding agent 现在开 PR 前会先自审一遍、跑安全扫描——本质上是它知道&quot;人审不过来了&quot;,所以先帮你过一遍。Cursor 给你看 agent 的 context 用量,也是同一个逻辑:当你不亲自写,你至少得知道它在想什么。</p>
<p>所以如果你问我,这半年一个开发者最该练的是什么,我的答案是三个词:<strong>拆活、审 diff、判断边界</strong>。写代码的肌肉不会废掉——你得能写,才看得懂 agent 写的——但它不再是那块最值钱的肌肉了。</p>
<h2 id="接下来半年我赌什么">接下来半年,我赌什么</h2>
<p>简单说几个判断,赌错了年底再来认。</p>
<p><strong>后台 agent 会变成默认,但&quot;全自动&quot;还早。</strong> 派活给云端 agent、它提 PR 给你审,这套流程会变成常规操作。但&quot;把整个需求扔进去、不管了&quot;——Devin 那个最初的承诺——我认为这半年还到不了。卡点不在模型聪不聪明,在<strong>验证</strong>:你怎么确认它真做对了?在这个问题被解决之前,人必须留在审查这一环。</p>
<p><strong>工具会继续分化,不会收敛。</strong> 不会出现一个&quot;赢家通吃&quot;的 AI IDE。终端 agent、IDE、云端 agent 是三种不同的形态,服务三种不同的场景,它们会长期共存。你最终大概率是手上同时握着两三个,按场景切。</p>
<p><strong>审查会变成瓶颈,然后变成新工具的战场。</strong> 当 agent 产出快到人审不过来,下一波工具竞争的焦点不会是&quot;写得更快&quot;,而是&quot;帮你审得更快、更可信&quot;。谁能让人重新跟得上 agent 的产出速度,谁就赢下 2026 下半年。</p>
<p>半年前我担心的是 AI 会不会写不好代码。现在我不担心这个了——它写得够好。我现在担心的是另一件事:当写代码这件事变得这么便宜,我们会不会因为审不过来,而让一堆没真正看懂的代码,合进了主干。</p>
<p>工具的演化已经跑到前面去了。该追上的,是我们自己审视代码的方式。</p>
]]></content:encoded></item><item><title>AI 写的代码,谁来审</title><link>https://realtime-ai.chat/posts/coding-agent-review/</link><pubDate>Sat, 09 May 2026 11:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/coding-agent-review/</guid><description>AI 能批量产出代码后,工程瓶颈从「写」挪到了「审」。这篇讲清 AI 代码为什么更难 review、人审扛不住量怎么办、AI 审 AI 靠不靠谱,以及团队流程该怎么改。</description><content:encoded><![CDATA[<p>一个用 AI 写代码的开发者,现在一天能开五六个 PR。</p>
<p>而审你 PR 的那个人,一天还是只能审五六个。</p>
<p>这两个数字凑在一起,就是 2026 年大多数工程团队真正的麻烦。Faros AI 的数据里,高 AI 使用率的团队完成的任务多了 21%、合并的 PR 多了将近一倍,但 PR 的 review 时长涨了 91%——而且那些 PR 还更大。Opsera 一份覆盖 25 万开发者的报告说得更直白:在没有治理的情况下,AI 生成的 PR 在 review 队列里等的时间是普通 PR 的 4.6 倍,哪怕从写完到提 PR 的时间砍掉了一半多。</p>
<p>写代码这件事,被 AI 解决了一大半。审代码这件事,一点没变。瓶颈就这么从「写」挪到了「审」,而且大多数团队还没意识到。</p>
<h2 id="为什么-ai-写的代码审起来反而更难">为什么 AI 写的代码,审起来反而更难</h2>
<p>直觉上,AI 代码该更好审才对——它风格统一、不会忘加分号、命名规规矩矩。但真审过 AI 大批量产出的代码的人都知道,事情反过来了。AI 代码难审,难在三个地方。</p>
<p><strong>第一,它看着太合理了。</strong> 人写错代码,常常会留下「破绽」——变量名词不达意、缩进乱、注释和代码对不上,这些视觉信号会让 reviewer 警觉。AI 不会。AI 写的错误代码,长得和正确代码一模一样:命名得体、结构清晰、注释贴心。CodeRabbit 的研究说 AI 写的代码暴露的问题比人写的多 1.7 倍,而这些问题里相当一部分是逻辑错误——业界一个被反复引用的说法是,AI 代码的纯逻辑错误率比人高约 75%。一个长得人模人样的函数,你的大脑会默认它没问题,于是真正的 bug 藏在「看着合理」的外壳里溜过去了。</p>
<p><strong>第二,量。</strong> 一个 reviewer 以前一天面对的是三五个 PR、每个两三百行。现在是十几个 PR,而且单个更大。注意力是有总量的——审第一个 PR 时你逐行读,审到第八个时你已经在「扫」。Review 质量不是匀速下降的,是过了某个阈值之后断崖式塌掉的。量本身就是一种攻击。</p>
<p><strong>第三,意图断了。</strong> 人写代码,脑子里有一条没写下来的推理链:为什么用这个数据结构、为什么这里要加锁、为什么宁可慢一点也不并发。Reviewer 审的其实是这条链。AI 生成代码时,这条链在 prompt 和模型权重里,没留在 diff 里。你看到的是结论,看不到「为什么」。于是 review 退化成「这段代码自己自洽吗」,而不是「这段代码做的是不是我们真正想要的事」——后者才是 review 的价值所在。</p>
<pre class="mermaid">flowchart LR
  A[人写代码] --> B[diff 里有破绽<br/>能看出意图] --> C[reviewer 审意图]
  D[AI 写代码] --> E[diff 看着完美<br/>意图没留下] --> F[reviewer 只能审自洽性]
  style E fill:#fde7c2,stroke:#e8b23c
  style F fill:#f8d0d0,stroke:#d06666
</pre><p>把这三点合起来:更隐蔽的错误、更大的量、更稀薄的意图。这不是「AI 代码质量差」的问题,是 review 这个动作的前提被抽掉了。</p>
<h2 id="人审扛不住量第一反应往往是错的">人审扛不住量,第一反应往往是错的</h2>
<p>发现 reviewer 堵住了,团队的第一反应通常是这几个,而它们大多没用,甚至有害。</p>
<p><strong>「招更多 reviewer」</strong> ——慢、贵,而且高级工程师本来就稀缺。更要命的是,AI 产代码的速度还在涨(有统计说人均产出 2025 到 2026 一年涨了约 60%),你招人的速度永远追不上模型迭代的速度。这是一场你结构性赢不了的军备竞赛。</p>
<p><strong>「review 快一点」</strong> ——把每个 PR 的 review 时间压缩,等于直接降低 review 质量。前面说过,AI 代码的错误本来就更隐蔽,你越快扫,漏得越多。这是用「看起来通畅」换「实际上失控」。</p>
<p><strong>「先合了再说,出问题再修」</strong> ——在 AI 时代尤其危险。以前一个有问题的模式进了主干,影响范围有限。现在 AI 会以那段代码为样本,在下一次生成时把同样的错误复制到十个地方。坏模式的传播速度,跟生成速度一样快。</p>
<p>真正有用的方向只有一个:<strong>别让所有代码都用同一种强度去审。</strong> Review 是稀缺资源,稀缺资源必须分配,不能平摊。</p>
<p>把进来的变更分层。一个能落地的分法是这样:</p>
<table>
  <thead>
      <tr>
          <th>变更类型</th>
          <th>例子</th>
          <th>审法</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>低风险机械改动</td>
          <td>改文案、加日志、补测试、依赖小版本升级</td>
          <td>AI 审 + CI 把关,人抽查</td>
      </tr>
      <tr>
          <td>中风险常规功能</td>
          <td>已有模块里加一个接口、改一个表单</td>
          <td>AI 先过一遍,人审「意图」那一层</td>
      </tr>
      <tr>
          <td>高风险核心改动</td>
          <td>鉴权、计费、并发、数据迁移、对外 API</td>
          <td>人逐行审,且必须是熟悉该模块的人</td>
      </tr>
  </tbody>
</table>
<p>关键不是这张表本身,是承认一件事:<strong>不是所有代码都值得人来审。</strong> 让你最贵的工程师去逐行看一个改 UI 文案的 PR,是对稀缺资源的浪费,也是在透支他审计费系统时该有的注意力。把人的注意力,留给真正需要人类判断的地方。</p>
<h2 id="ai-审-ai-的代码到底靠不靠谱">AI 审 AI 的代码,到底靠不靠谱</h2>
<p>既然量是 AI 带来的,那让 AI 来审,逻辑上很顺。现在 AI code review 工具已经是个成熟品类,几十个产品,有真实的 ROI 数据。但「靠不靠谱」要分两面说。</p>
<p><strong>靠谱的那一面:</strong> AI reviewer 在「机械层」上是真的好用,而且能做到人做不到的事。它能记住整个依赖树里哪些包有已知 CVE、哪些 license 不合规、哪些 API 已经废弃;能在跨文件的几十个改动里发现「这个函数签名变了但那边三个调用没改」。有评测说,能看全代码库的工具,比只看单个 diff 的工具多抓出 40%~60% 的跨文件问题。这类活,人本来就做不好——人记不住那么多东西。</p>
<p><strong>不靠谱的那一面,要说透。</strong> AI 审 AI,有一个结构性的盲区:<strong>它们共享同一套训练分布。</strong> 2026 年初有研究指出,「生成 Agent + 审查 Agent」的流水线里,第一个 Agent 的错误经常被第二个 Agent 直接放行——因为它们出自同一个分布,缺乏「对抗性的差异」,自审最后退化成把原来的错误又确认了一遍。还有一篇 2026 年 2 月的论文更狠:就算是异构的多 Agent 团队,整体表现也稳定地打不过其中最强的那个单一成员,失败机制是「为了达成共识而牺牲专业判断」。</p>
<p>翻译成大白话:<strong>AI 会和你一起犯同一个错,而且犯得很自信。</strong> 你写 prompt 时漏掉的那个约束,生成的 Agent 不知道,审查的 Agent 同样不知道——它没法审出一个它自己也意识不到的需求。这正是 review 最该抓的那种错:不是「代码写错了」,是「代码做的不是我们要的事」。</p>
<p>另一个具体限制:AI reviewer 一旦喂的代码太多就垮。一个上千行的 diff 会撑爆上下文窗口,模型开始丢失连贯性,看不到改动之间的关联。它在小而聚焦的 PR 上表现最好——这反过来也说明,PR 该小,本来就该小。</p>
<p>所以我的判断是:<strong>AI 审机械层,人审意图层,两者不是替代关系,是分工。</strong> 把 AI 当成那个不知疲倦、记性超好、但永远不会质疑需求本身的初级 reviewer。它清场,人做判断。指望 AI 把人这一层也包了,是把它最不擅长的事派给了它。</p>
<pre class="mermaid">flowchart TB
  PR[一个 PR 进来] --> AI[AI reviewer]
  AI --> M[机械层:CVE、废弃 API<br/>跨文件一致性、风格、空指针]
  AI --> H{还需要人吗?}
  H -->|高风险或涉及意图| HUM[人 reviewer<br/>只审:这是不是我们想要的]
  H -->|低风险且 CI 全绿| MERGE[合并]
  HUM --> MERGE
  style HUM fill:#fde7c2,stroke:#e8b23c
</pre><h2 id="测试和类型系统从保险变成地基">测试和类型系统,从「保险」变成「地基」</h2>
<p>以前我们说测试和类型系统是「锦上添花的工程素养」。在 AI 时代,它们的角色被彻底放大了——它们成了你<strong>唯一能规模化、不靠人盯的那道防线</strong>。</p>
<p>道理很简单。人 review 不可规模化,AI review 有共享盲区,但一个类型检查、一个测试用例,是确定性的:它对一行代码和对一百万行代码,执行的是同一套标准,不会因为今天是第八个 PR 就走神。AI 能把生产代码的速度提十倍,但它没法提高你 review 的速度——能跟上这个速度的,只有自动化的、确定性的校验。</p>
<p>具体几条,都是能马上做的:</p>
<ul>
<li><strong>类型系统要严。</strong> 能上严格模式就上严格模式。AI 很爱写「看着对、类型上其实有洞」的代码,一个严格的类型检查器会在 review 之前就把一类错误挡掉,而且零成本、零情绪。</li>
<li><strong>测试覆盖的是意图,不是行数。</strong> 别用覆盖率数字考核——AI 生成高覆盖率但什么都没验证的测试,毫不费力。要写的是「断言业务规则」的测试:这笔订单在这个条件下必须被拒。这种测试,AI 之后改坏了逻辑,它会立刻红。</li>
<li><strong>测试本身也得审,而且要人审。</strong> AI 写功能、又顺手把测试写了,这是个陷阱:它可能写一个「永远会过」的测试来配合一段错的实现。审 AI 代码时,测试那部分要单独、用人的眼睛看。</li>
<li><strong>把校验往左移。</strong> 类型检查、静态扫描、安全规则、测试,全塞进 CI 的硬门禁。能在代码进 review 队列之前就拦下的问题,就别留给那个已经在审第八个 PR 的人。</li>
</ul>
<p>一句话:<strong>人和 AI 都会累、会走神、会有盲区,确定性的检查不会。</strong> 在代码量爆炸的时代,把质量赌在「有人会仔细看」上,是不可持续的;把它建在自动化门禁上,才扛得住量。</p>
<h2 id="团队流程得跟着改">团队流程,得跟着改</h2>
<p>工具和分工都到位了,最后是流程。不改流程,前面都白搭。几条具体的:</p>
<p><strong>PR 必须小,而且单一意图。</strong> 这条从「最佳实践」升级成了「硬约束」。reviewer 的带宽是整个系统的瓶颈,而瓶颈必须被主动管理。一个改了八件事的千行 PR,人审不动,AI 也审不动(上下文撑爆)。规矩要立死:一个 PR 只干一件事。AI 让你写得快,但不该让你把八件事打包成一个 diff 甩给别人。</p>
<p><strong>PR 描述要写「为什么」,这是在补回断掉的意图链。</strong> 2026 年一个合格的 PR 描述应该回答四件事:这个改动想干什么、为什么这么干(一两句);怎么证明它能跑(测试 + 手动验证步骤);风险多大、哪些部分是 AI 生成的;以及——明确点出 1~2 个「请人重点看这里」的地方。最后这点最关键:让提 PR 的人(他脑子里有意图)主动告诉 reviewer 该把注意力放哪。diff 该读起来像一份「意图说明书」,而不是一堆代码行的堆砌。</p>
<p><strong>「谁提的 PR,谁对它负责」要写进规矩。</strong> 用 AI 生成的代码,不等于责任也外包给了 AI。「这是 AI 写的」永远不能成为甩锅的理由。你按了那个生成键,你提了这个 PR,这段代码就是你的。这条不立清楚,所有人都会松懈,因为没人觉得自己该为一段「不是我写的」代码负责。</p>
<p><strong>测 review 这个环节本身。</strong> 既然瓶颈在这,就得给它装仪表盘:PR 在队列里平均等多久、单个 PR 多大、合并后多久出回滚或 hotfix。这些数字会告诉你 review 是不是正在悄悄塌掉——大多数团队是数字已经很难看了才后知后觉。</p>
<h2 id="写在最后">写在最后</h2>
<p>AI 没有消灭 review,它把 review 推到了聚光灯下。</p>
<p>以前 review 是写代码顺带的一环,藏在流程里不显眼。现在写代码便宜到几乎免费,「这段代码到底对不对、是不是我们要的」这个判断,就成了整个交付流程里最贵、最不可替代的一步。</p>
<p>所以别再盯着「怎么让 AI 写得更多」了——那个问题基本解决了。真正该花力气的是另一边:<strong>把 review 重新设计一遍。</strong> 让确定性的检查去扛量,让 AI 去扛机械层,把人最稀缺的判断力,集中投到「这段代码是不是在做我们真正想做的事」上。</p>
<p>AI 写的代码谁来审?机械层交给 AI,量交给自动化门禁,意图——只能是人。而且得是清醒的、注意力没被第八个 PR 耗光的人。把流程改成能保住这份清醒的样子,这件事,没有任何模型能替你做。</p>
<hr>
<p>参考资料:</p>
<ul>
<li><a href="https://dev.to/code-board/code-review-is-the-real-bottleneck-of-2026-and-most-teams-dont-see-it-5eed">Code Review Is the Real Bottleneck of 2026 — And Most Teams Don&rsquo;t See It</a></li>
<li><a href="https://levelup.gitconnected.com/the-ai-code-review-bottleneck-is-already-here-most-teams-havent-noticed-1b75e96e6781">The AI Code Review Bottleneck Is Already Here. Most Teams Haven&rsquo;t Noticed.</a></li>
<li><a href="https://addyo.substack.com/p/code-review-in-the-age-of-ai">Code Review in the Age of AI — Addy Osmani</a></li>
<li><a href="https://arxiv.org/pdf/2603.25773">The Specification as Quality Gate: Three Hypotheses on AI-Assisted Code Review (arXiv)</a></li>
<li><a href="https://www.codeant.ai/blogs/ai-code-review-accuracy">How Accurate Is AI Code Review in 2026? — CodeAnt</a></li>
<li><a href="https://engineering.salesforce.com/scaling-code-reviews-adapting-to-a-surge-in-ai-generated-code/">Scaling Code Reviews: Adapting to a Surge in AI-Generated Code — Salesforce Engineering</a></li>
<li><a href="https://www.qodo.ai/blog/5-ai-code-review-pattern-predictions-in-2026/">5 AI Code Review Pattern Predictions in 2026 — Qodo</a></li>
</ul>
]]></content:encoded></item><item><title>AI 编程是不是泡沫</title><link>https://realtime-ai.chat/posts/ai-coding-bubble/</link><pubDate>Wed, 29 Apr 2026 11:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/ai-coding-bubble/</guid><description>AI 写了 41% 的新代码,但实测里资深工程师反而慢了 19%。这篇冷静拆解 AI 编程的真实生产力收益、被夸大的环节,以及「泡沫」二字到底站不站得住。</description><content:encoded><![CDATA[<p>2025 年 7 月,METR 做了一个实验。16 个资深开源开发者,每人在自己熟得不能再熟的项目里干活,平均经验 5 年。246 个真实任务,随机分两组:一组允许用 AI(主要是 Cursor Pro 配 Claude 3.5/3.7),一组不许用。</p>
<p>实验前,这些人预测 AI 能让自己快 24%。干完之后,他们体感觉得 AI 让自己快了 20%。</p>
<p>实测结果:<strong>用 AI 的那组,慢了 19%。</strong></p>
<p>这不是一个标题党段子。它是目前为止设计最干净的一个随机对照实验,而它的结论,跟你每天在朋友圈、在发布会、在融资 PPT 上看到的&quot;10x 工程师&quot;&ldquo;生产力革命&rdquo;,是相反的。</p>
<p>所以这篇文章想认真聊一件事:AI 编程到底是不是泡沫。我的答案会比较啰嗦——它在某些环节是真东西,在另一些环节是被吹大的气球,而把这两件事混在一起卖,才是真正的泡沫所在。</p>
<h2 id="营销数字和实测数字差在哪">营销数字和实测数字,差在哪</h2>
<p>先把两组数字摆出来。</p>
<p>营销侧的数字很漂亮:2026 年 84% 的开发者在用 AI 工具,AI 写了 41% 的新增商业代码,人均每周省下 3.6 小时。受控实验里,对那种&quot;写一个函数&quot;&ldquo;生成一批单测&quot;&ldquo;铺一段样板代码&quot;的细碎任务,提速 30%–55% 是常见的。</p>
<p>这些数字没造假。问题在于它们都是<strong>任务级</strong>的数字——把镜头怼到&quot;写代码&quot;这一个动作上,AI 确实快。</p>
<p>但你把镜头拉远到<strong>组织级</strong>,画面就变了。2025 年的 DORA 报告(Google 做的那份,样本是几千个真实团队)给出的结论很扎心:AI 让个人产出明显上涨——任务完成数 +21%,合并的 PR 数 +98%——但团队的交付速度,基本是平的。同一份报告里,AI 采用度和软件交付<strong>稳定性</strong>是负相关的。</p>
<p>更具体的两个数字:每个开发者引入的 bug 数,涨了 54%(过去的数据集里这个数字只涨 9%);每个 PR 引发生产事故的概率,涨了 242.7%——也就是说,每合一次代码,捅出线上事故的概率翻了三倍多。</p>
<table>
  <thead>
      <tr>
          <th>看哪个层面</th>
          <th>数字</th>
          <th>谁在引用</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>任务级:写一个函数</td>
          <td>提速 30%–55%</td>
          <td>厂商、发布会</td>
      </tr>
      <tr>
          <td>个人级:周产出</td>
          <td>PR +98%,任务 +21%</td>
          <td>厂商、个人体感</td>
      </tr>
      <tr>
          <td>组织级:交付速度</td>
          <td>基本持平</td>
          <td>DORA 2025</td>
      </tr>
      <tr>
          <td>组织级:稳定性</td>
          <td>bug +54%,事故/PR +242%</td>
          <td>DORA 2025</td>
      </tr>
      <tr>
          <td>资深 + 成熟项目</td>
          <td>慢 19%</td>
          <td>METR RCT</td>
      </tr>
  </tbody>
</table>
<p>同一件事,你站在不同的距离看,能得出完全相反的结论。营销永远站在最近的那个位置拍照。</p>
<h2 id="ai-写完人来收拾的隐性成本">&ldquo;AI 写完,人来收拾&quot;的隐性成本</h2>
<p>营销数字漏掉的,是 AI 把工作从&quot;写&quot;挪到了&quot;收拾&rdquo;。这部分成本没消失,只是换了个名字,而且通常没人记账。</p>
<p>METR 那个实验里,AI 给的建议只有 39% 被开发者接受。剩下 61% 要么直接扔,要么改。对那些维护多年、有严格代码规范的成熟项目,AI 生成的代码常常&quot;看着对、品味不对&rdquo;——命名不一致、复用了不该复用的东西、绕过了项目既定的抽象。资深工程师得花时间一行行审、一行行改。这 19% 的慢,就是慢在这里。</p>
<p>这件事可以拆成一条很清楚的链:</p>
<pre class="mermaid">flowchart LR
  A[AI 生成代码<br/>很快] --> B[人来审查<br/>+9% 工时]
  B --> C[补测试<br/>1.7x 负担]
  C --> D[代码翻修<br/>2x churn]
  D --> E[隐性技术债<br/>第二年维护 4x]
  style A fill:#d4edda,stroke:#52a05f
  style E fill:#f8d7da,stroke:#d9534f
</pre><p>绿色那块是你看得见的收益,红色那块是你账上不记的成本。代码翻修率(code churn,指代码写完后不久就被改写或删掉的比例)从 2021 年的 3.3% 基线,涨到了 2024–2025 年的 5.7%–7.1%。Stack Overflow 2026 年初一篇文章把话说得很直白:<strong>AI 能让开发者 10x,但 10x 的是技术债。</strong></p>
<p>还有一个更隐蔽的成本:信任。Stack Overflow 的开发者调查里,2025 年说自己信任 AI 输出的开发者只有 29%,比 2024 年掉了 11 个百分点。用得越多,越不敢信——因为大家都被那种&quot;看着对其实不对&quot;的代码坑过。一家 API 安全公司报告,在财富 50 强企业里,每月的安全问题发现数从 2024 年 12 月的 1000 个涨到 2025 年 6 月的 1 万个以上,半年 10 倍。</p>
<p>所以&quot;AI 写完人来收拾&quot;这句话本身没错,错在大家算账时只算了&quot;AI 写&quot;那一段省下的时间,没算&quot;人来收拾&quot;那一段花出去的时间。把两段都记上,很多团队的净收益就接近零,甚至为负。</p>
<h2 id="它在哪儿是真的有用">它在哪儿是真的有用</h2>
<p>如果只看上面这些,你会以为我要喊&quot;泡沫&quot;了。不。AI 编程有几个环节是<strong>实打实</strong>有用的,我自己每天在用,不是客套。</p>
<p>它真正强的地方,有一个共同特征:<strong>任务边界清楚、验证成本低、犯错代价小。</strong></p>
<ul>
<li><strong>样板和胶水代码。</strong> 写一个 CRUD 接口、配一个 CI 流水线、把 JSON 转成另一种结构——这类活没有&quot;品味&quot;可言,对就是对,AI 生成完你一眼能看出对不对。</li>
<li><strong>陌生领域的第一脚。</strong> 你要用一个没碰过的库,以前要翻半小时文档,现在让 AI 给个能跑的起步代码,你在它基础上改。它把&quot;从零到能跑&quot;这段最难受的冷启动给抹平了。</li>
<li><strong>一次性脚本。</strong> 数据迁移、批量改名、跑个分析——写完用一次就扔的代码,质量要求本来就低,AI 在这里几乎没有副作用。</li>
<li><strong>测试和文档。</strong> 给已有代码补单测、写注释。这类活枯燥、人容易偷懒,AI 不偷懒。</li>
<li><strong>当个会说话的搜索引擎。</strong> &ldquo;这段报错什么意思&quot;&ldquo;这个正则怎么写&rdquo;——它替代的是你切到浏览器那几下,省的是上下文切换。</li>
</ul>
<p>注意,这几样的收益是真的,但它们加起来,是&quot;省了 3.6 小时/周&quot;那个量级的收益,<strong>不是&quot;重新定义软件工程&quot;那个量级的</strong>。是好用的电动工具,不是免费的劳动力。</p>
<h2 id="它在哪儿被夸大了">它在哪儿被夸大了</h2>
<p>被夸大的部分,也有共同特征:<strong>任务边界模糊、验证成本高、犯错代价大。</strong></p>
<p>第一个被夸大的,是<strong>复杂系统里的改动</strong>。在一个十万行、跑了五年、到处是隐性约定的代码库里加一个功能,难的从来不是&quot;写代码&rdquo;,是&quot;想清楚改哪、会牵连到什么、符不符合这个项目的脾气&rdquo;。AI 没有这个项目的上下文记忆,它给你的是一个&quot;局部看起来合理&quot;的方案。METR 那 19% 的慢,慢的就是这个场景。</p>
<p>第二个被夸大的,是**&ldquo;vibe coding&quot;能进生产**。让 AI 全自动写、你只看结果不看过程,做个周末玩具没问题。但 Karpathy 自己在 2026 年初都把口径改了,提出&quot;Agentic Engineering&quot;来接替 vibe coding,核心多了一个词:<strong>结构化的人类监督</strong>。连造这个词的人都在往回收。</p>
<p>第三个被夸大的,是<strong>省下的时间能直接变成交付速度</strong>。这就是 DORA 报告里那个&quot;个人产出涨、组织速度平&quot;的悖论。原因不难懂:软件交付的瓶颈,本来就很少在&quot;打字&quot;这一步。需求扯不清、评审排不上、QA 跟不上、集成一团乱——AI 把打字这一步加速了,但水管最细的地方没变,整根水管的流量就没变。AI 不会修复一个团队,它只会<strong>放大</strong>这个团队本来的样子。流程好的团队用 AI 如虎添翼,流程烂的团队用 AI 翻车更快。</p>
<h2 id="对初级工程师和团队结构的冲击">对初级工程师和团队结构的冲击</h2>
<p>这部分我想说得重一点,因为它是真问题,而且没什么人愿意正面讲。</p>
<p>AI 最擅长的那些活——改 bug、写测试、铺样板——<strong>恰好就是过去初级工程师练手的活</strong>。这不是巧合,是结构性的撞车。后果已经在数据里:2026 年初级开发岗位的招聘明显收紧,计算机专业毕业生失业率涨到 6%–7%,22–25 岁这个年龄段的开发者岗位,自 ChatGPT 发布以来少了约 20%。</p>
<p>这里有一个会反噬的逻辑链。一个工程师能审查 AI 代码、能判断&quot;这段看着对其实不对&rdquo;,靠的是他当年<strong>亲手写过、亲手踩过坑</strong>积累的判断力。如果初级阶段的练手活全被 AI 接管了,新人没有了犯错和积累的场子,五年后,我们从哪里长出能审查 AI 的资深工程师?</p>
<p>我的判断是:初级岗不会消失,但它的定义被改写了。过去招初级,要的是&quot;能写出代码&quot;;现在招初级,要的是&quot;能判断 AI 写的代码对不对&quot;,这其实是过去对中级的要求。这等于把入行门槛抬高了一级,而那一级原本是靠在岗位上慢慢爬的。对个人,这意味着你得自己想办法补上&quot;判断力&quot;这一课——多读别人的代码、多关掉 AI 自己写一遍、刻意练习那些 AI 帮你跳过的环节。对团队,这意味着你不能再把初级当廉价产能,得把他们当&quot;未来的资深&quot;来带,而带人的成本,AI 一分钱都帮不上。</p>
<h2 id="那么泡沫论站不站得住">那么,泡沫论站不站得住</h2>
<p>回到标题。我的结论分两层。</p>
<p><strong>技术和产品这一层,不是泡沫。</strong> AI 编程是真东西,它确实改变了一部分工作方式,这种改变不会回退。说它&quot;永远不行&quot;&ldquo;只是噱头&quot;的人,和说它&quot;明年取代所有程序员&quot;的人,犯的是同一个错——都在拿一个极端当全部。</p>
<p><strong>但&quot;叙事&quot;和&quot;估值&quot;这一层,泡沫味很浓。</strong> 这里的泡沫有三块:</p>
<p>一是<strong>叙事泡沫</strong>。把任务级的提速数字,包装成组织级的革命,中间那道&quot;个人产出涨、交付速度平&quot;的鸿沟被系统性地隐藏了。</p>
<p>二是<strong>定价泡沫</strong>。GitHub Copilot 在 2026 年 6 月转向按 token 计费,一个动作就暴露了底裤:此前订阅制下,微软每个用户每月亏 20 美元。现在还便宜,是因为有人在替你补贴。补贴停了,价格会回到它真实的成本曲线上。</p>
<p>三是<strong>资本泡沫</strong>。这一轮 AI 基建里大量的&quot;循环交易&rdquo;——A 投资 B,B 拿钱回头买 A 的产品,在账面上凭空造出需求和营收——这是宏观层面的事,但它会传导下来:补贴退潮的时候,工具会涨价,产品会缩水,期望会落地。</p>
<pre class="mermaid">flowchart TB
  A[AI 编程] --> B[技术层:真实<br/>不是泡沫]
  A --> C[叙事层:任务级数字<br/>包装成革命]
  A --> D[定价层:补贴掩盖<br/>真实成本]
  A --> E[资本层:循环交易<br/>虚增需求]
  style B fill:#d4edda,stroke:#52a05f
  style C fill:#fde7c2,stroke:#e8b23c
  style D fill:#fde7c2,stroke:#e8b23c
  style E fill:#f8d7da,stroke:#d9534f
</pre><p>所以&quot;AI 编程是不是泡沫&quot;这个问题本身问错了。正确的问法是:<strong>AI 编程这件事里,哪一部分是真东西,哪一部分是泡沫。</strong> 工具是真的,叙事是泡沫。等补贴退、估值回调、那批靠&quot;AI 全自动&quot;故事融资的公司洗一遍牌之后,留下来的,会是一个<strong>好用但不神奇</strong>的工具——大概就是今天的 IDE、版本控制、CI 在工程师工具箱里的位置。</p>
<p>给还在这行里的人三句实在话。第一,别信任何脱离了上下文的提速百分比,先问&quot;这是哪一层的数字&quot;。第二,把 AI 当电动工具用,在它强的环节(样板、胶水、冷启动、测试)放开用,在它弱的环节(复杂系统、架构判断、品味)自己上手。第三,如果你是初级,或者你在带初级,把&quot;判断力&quot;当成接下来几年最该投资的东西——因为当代码变得廉价,<strong>判断什么代码值得要,会变成最贵的能力。</strong></p>
<p>泡沫会破,工具会留。把这两件事分清楚的人,不会在这一轮里慌,也不会在下一轮里被收割。</p>
]]></content:encoded></item><item><title>AI编程助手怎么选？Copilot vs Cursor vs Claude Code</title><link>https://realtime-ai.chat/posts/ai-coding-tools/</link><pubDate>Thu, 15 Jan 2026 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/ai-coding-tools/</guid><description>GitHub Copilot、Cursor、Claude Code 三大 AI 编程助手怎么选:实测体验对比与选型建议。</description><content:encoded><![CDATA[<h2 id="先说结论">先说结论</h2>
<table>
  <thead>
      <tr>
          <th>场景</th>
          <th>推荐</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>公司统一采购</td>
          <td>GitHub Copilot</td>
      </tr>
      <tr>
          <td>个人开发追求效率</td>
          <td>Cursor</td>
      </tr>
      <tr>
          <td>复杂项目重构</td>
          <td>Claude Code</td>
      </tr>
      <tr>
          <td>学生党/尝鲜</td>
          <td>都试试，反正有免费版</td>
      </tr>
  </tbody>
</table>
<p>下面说说为什么。</p>
<hr>
<h2 id="github-copilot稳">GitHub Copilot：稳</h2>
<p><strong>优点：</strong></p>
<ul>
<li>和VS Code集成最好，不卡</li>
<li>企业合规，公司一般都愿意买单</li>
<li>代码补全中规中矩，不会出太离谱的东西</li>
</ul>
<p><strong>缺点：</strong></p>
<ul>
<li>对整个项目的理解不如Cursor</li>
<li>有时候补全太保守，不敢写多</li>
</ul>
<p><strong>适合谁：</strong> 大厂员工、需要合规的团队</p>
<hr>
<h2 id="cursor快">Cursor：快</h2>
<p>我现在主力用Cursor。</p>
<p><strong>为什么？</strong></p>
<ol>
<li>
<p><strong>Tab补全太爽了</strong>。它能预测你下一步要改哪个文件、哪一行，按Tab就跳过去了。用久了回不去普通IDE。</p>
</li>
<li>
<p><strong>对代码库理解深</strong>。问它&quot;这个项目怎么加个新API&quot;，它真的会去翻代码，不是瞎编。</p>
</li>
<li>
<p><strong>Composer模式</strong>。告诉它&quot;帮我重构这个模块&quot;，它能同时改好几个文件。</p>
</li>
</ol>
<p><strong>缺点：</strong></p>
<ul>
<li>有时候太激进，改得多你得仔细review</li>
<li>月费$20，不便宜</li>
</ul>
<p><strong>适合谁：</strong> 追求效率的老手、个人开发者</p>
<hr>
<h2 id="claude-code聪明">Claude Code：聪明</h2>
<p>Claude Code是后来者，但确实有点东西。</p>
<p><strong>亮点：</strong></p>
<ul>
<li>理解能力最强，复杂逻辑描述清楚它就能写对</li>
<li>解释代码特别清楚</li>
<li>处理大项目上下文比较好</li>
</ul>
<p><strong>缺点：</strong></p>
<ul>
<li>速度比Cursor慢一点</li>
<li>还在迭代，功能没那么完善</li>
</ul>
<p><strong>适合谁：</strong> 需要处理复杂项目、喜欢AI帮忙想方案的人</p>
<hr>
<h2 id="我的使用习惯">我的使用习惯</h2>
<p>日常写代码：<strong>Cursor</strong>
遇到复杂问题：切到 <strong>Claude Code</strong> 聊两句
公司项目：用公司配的 <strong>Copilot</strong></p>
<p>不冲突，看场景切换就行。</p>
<hr>
<h2 id="一点建议">一点建议</h2>
<p>别把AI编程工具当&quot;代码生成器&quot;，把它当&quot;结对编程的同事&quot;。</p>
<ul>
<li>它写的代码你得review</li>
<li>它不懂的地方你得教它（给上下文）</li>
<li>它写错了跟它说，它会改</li>
</ul>
<p>用好了效率能提升2-3倍，用不好反而添乱。</p>
<p>有问题留言，我看到会回。</p>
]]></content:encoded></item><item><title>Claude Code 深度体验：终端里的AI编程革命</title><link>https://realtime-ai.chat/posts/claude-code-deep-dive/</link><pubDate>Tue, 13 Jan 2026 10:00:00 +0800</pubDate><guid>https://realtime-ai.chat/posts/claude-code-deep-dive/</guid><description>Claude Code 深度体验评测:终端里的 AI 编程到底强在哪,与 Cursor、Copilot 的真实差异。</description><content:encoded><![CDATA[<h2 id="开场不是copilot是coder">开场：不是Copilot，是Coder</h2>
<p>2025年，AI编程工具已经卷到飞起。Cursor、Windsurf、GitHub Copilot……每个都说自己是&quot;最强AI编程助手&quot;。</p>
<p>但当我第一次用上 <strong>Claude Code</strong> 时，我意识到：</p>
<blockquote>
<p>这玩意儿不是来&quot;辅助&quot;我写代码的，它是来<strong>替我干活</strong>的。</p></blockquote>
<p>Claude Code 是 Anthropic 推出的命令行AI编程工具。它不是IDE插件，而是一个<strong>独立运行在终端里的Agent</strong>。你给它一个任务，它会：</p>
<ul>
<li>自己读代码</li>
<li>自己写代码</li>
<li>自己跑命令</li>
<li>自己修Bug</li>
<li>自己提交PR</li>
</ul>
<p><strong>这才是2025年该有的AI编程体验。</strong></p>
<hr>
<h2 id="1-安装30秒上手">1. 安装：30秒上手</h2>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># 全局安装</span>
</span></span><span class="line"><span class="cl">npm install -g @anthropic-ai/claude-code
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 进入项目目录</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> your-project
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># 启动</span>
</span></span><span class="line"><span class="cl">claude
</span></span></code></pre></td></tr></table>
</div>
</div><p>首次启动会要求登录 Anthropic 账号，授权后就能用了。</p>
<p><strong>费用</strong>：使用 Claude API 计费，Claude Sonnet 大约 $3/百万token，正常使用一天几毛钱。</p>
<hr>
<h2 id="2-核心能力不只是聊天">2. 核心能力：不只是聊天</h2>
<h3 id="21-自主文件操作">2.1 自主文件操作</h3>
<p>Claude Code 可以直接读写你的项目文件：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 帮我看看 src/api/user.ts 里有什么问题
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 我来读取这个文件...
</span></span><span class="line"><span class="cl">[读取 src/api/user.ts]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">发现了几个问题：
</span></span><span class="line"><span class="cl">1. 第23行：缺少错误处理
</span></span><span class="line"><span class="cl">2. 第45行：类型定义不完整
</span></span><span class="line"><span class="cl">3. 第67行：存在潜在的内存泄漏
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">要我修复吗？
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">You: 修
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 
</span></span><span class="line"><span class="cl">[编辑 src/api/user.ts]
</span></span><span class="line"><span class="cl">已完成修复，主要改动：
</span></span><span class="line"><span class="cl">- 添加了 try-catch 包装
</span></span><span class="line"><span class="cl">- 补充了 UserResponse 类型定义
</span></span><span class="line"><span class="cl">- 在 useEffect 中添加了 cleanup 函数
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="22-执行shell命令">2.2 执行Shell命令</h3>
<p>它能直接在你的终端跑命令：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 跑一下测试，看看有没有挂的
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude:
</span></span><span class="line"><span class="cl">[执行 npm test]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">测试结果：
</span></span><span class="line"><span class="cl">✓ 45 passed
</span></span><span class="line"><span class="cl">✗ 2 failed
</span></span><span class="line"><span class="cl">  - user.test.ts: &#34;should handle empty input&#34;
</span></span><span class="line"><span class="cl">  - auth.test.ts: &#34;should refresh token&#34;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">要我修复这两个失败的测试吗？
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="23-git-操作">2.3 Git 操作</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">You</span><span class="p">:</span> <span class="err">把今天的改动提交一下，写个清晰的</span><span class="n">commit</span> <span class="n">message</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Claude</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">git</span> <span class="n">status</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">git</span> <span class="n">diff</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">我看到你改了这些文件：</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">src</span><span class="o">/</span><span class="n">api</span><span class="o">/</span><span class="n">user</span><span class="o">.</span><span class="n">ts</span> <span class="p">(</span><span class="err">修复类型问题</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">Login</span><span class="o">.</span><span class="n">tsx</span> <span class="p">(</span><span class="err">添加</span><span class="n">loading状态</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="n">tests</span><span class="o">/</span><span class="n">user</span><span class="o">.</span><span class="n">test</span><span class="o">.</span><span class="n">ts</span> <span class="p">(</span><span class="err">补充测试用例</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">建议的</span> <span class="n">commit</span> <span class="n">message</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">git</span> <span class="n">add</span> <span class="o">.</span> <span class="o">&amp;&amp;</span> <span class="n">git</span> <span class="n">commit</span> <span class="o">-</span><span class="n">m</span> <span class="s2">&#34;fix: 修复用户API类型问题并完善登录组件</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="err">修复</span> <span class="n">user</span><span class="o">.</span><span class="n">ts</span> <span class="err">中的类型定义不完整问题</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="err">为</span> <span class="n">Login</span> <span class="err">组件添加</span> <span class="n">loading</span> <span class="err">状态处理</span>
</span></span><span class="line"><span class="cl"><span class="o">-</span> <span class="err">补充用户模块的单元测试</span><span class="s2">&#34;]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">已提交。需要我</span> <span class="n">push</span> <span class="err">吗？</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="3-实战场景它能干什么">3. 实战场景：它能干什么</h2>
<h3 id="场景1debug-一个复杂bug">场景1：Debug 一个复杂Bug</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 用户反馈说登录后会闪退，帮我查一下
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 让我先看看相关代码...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[读取 src/pages/Login.tsx]
</span></span><span class="line"><span class="cl">[读取 src/hooks/useAuth.ts]
</span></span><span class="line"><span class="cl">[读取 src/store/authSlice.ts]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">我需要看看错误日志：
</span></span><span class="line"><span class="cl">[执行 npm run dev]
</span></span><span class="line"><span class="cl">[执行 打开浏览器开发者工具 - 等待错误]
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">找到问题了！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">在 useAuth.ts 第34行：
</span></span><span class="line"><span class="cl">auth.user.name.toLowerCase()
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">当 user 对象存在但 name 为 null 时会崩溃。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">修复方案：
</span></span><span class="line"><span class="cl">auth.user?.name?.toLowerCase() ?? &#39;&#39;
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">要我修复吗？
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="场景2重构整个模块">场景2：重构整个模块</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 把 src/utils 下的所有 JavaScript 文件迁移到 TypeScript
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 收到，我来处理这个迁移任务。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[扫描 src/utils 目录]
</span></span><span class="line"><span class="cl">发现 12 个 JS 文件需要迁移。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">开始迁移...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[1/12] helpers.js → helpers.ts
</span></span><span class="line"><span class="cl">- 添加参数类型注解
</span></span><span class="line"><span class="cl">- 添加返回值类型
</span></span><span class="line"><span class="cl">- 导出类型定义
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[2/12] formatters.js → formatters.ts
</span></span><span class="line"><span class="cl">...
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[12/12] 完成！
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[执行 npx tsc --noEmit]
</span></span><span class="line"><span class="cl">类型检查通过，无错误。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">[执行 npm test]
</span></span><span class="line"><span class="cl">所有测试通过。
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">迁移完成！共修改 12 个文件，添加了 45 个类型定义。
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="场景3从零实现一个功能">场景3：从零实现一个功能</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-gdscript3" data-lang="gdscript3"><span class="line"><span class="cl"><span class="n">You</span><span class="p">:</span> <span class="err">帮我实现一个用户头像上传功能，要支持裁剪和压缩</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">Claude</span><span class="p">:</span> <span class="err">好的，我来实现这个功能。</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">首先分析一下需求：</span>
</span></span><span class="line"><span class="cl"><span class="mf">1.</span> <span class="err">前端：选择图片</span> <span class="err">→</span> <span class="err">裁剪</span> <span class="err">→</span> <span class="err">预览</span> <span class="err">→</span> <span class="err">上传</span>
</span></span><span class="line"><span class="cl"><span class="mf">2.</span> <span class="err">后端：接收文件</span> <span class="err">→</span> <span class="err">压缩</span> <span class="err">→</span> <span class="err">存储</span> <span class="err">→</span> <span class="err">返回</span><span class="n">URL</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">让我先看看现有的项目结构</span><span class="o">...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">读取</span> <span class="n">package</span><span class="o">.</span><span class="n">json</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">读取</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span> <span class="err">目录结构</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">我建议使用</span> <span class="n">react</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">crop</span> <span class="err">做裁剪，</span><span class="n">browser</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">compression</span> <span class="err">做压缩。</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">执行</span> <span class="n">npm</span> <span class="n">install</span> <span class="n">react</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">crop</span> <span class="n">browser</span><span class="o">-</span><span class="n">image</span><span class="o">-</span><span class="n">compression</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">现在创建组件</span><span class="o">...</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">AvatarUploader</span><span class="o">/</span><span class="n">index</span><span class="o">.</span><span class="n">tsx</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">AvatarUploader</span><span class="o">/</span><span class="n">ImageCropper</span><span class="o">.</span><span class="n">tsx</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">components</span><span class="o">/</span><span class="n">AvatarUploader</span><span class="o">/</span><span class="n">styles</span><span class="o">.</span><span class="n">module</span><span class="o">.</span><span class="n">css</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="err">创建</span> <span class="n">src</span><span class="o">/</span><span class="n">api</span><span class="o">/</span><span class="n">upload</span><span class="o">.</span><span class="n">ts</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">组件已创建完成。使用方式：</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">import</span> <span class="p">{</span> <span class="n">AvatarUploader</span> <span class="p">}</span> <span class="n">from</span> <span class="s1">&#39;@/components/AvatarUploader&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="o">&lt;</span><span class="n">AvatarUploader</span> 
</span></span><span class="line"><span class="cl">  <span class="n">onUpload</span><span class="o">=</span><span class="p">{(</span><span class="n">url</span><span class="p">)</span> <span class="o">=&gt;</span> <span class="n">updateUserAvatar</span><span class="p">(</span><span class="n">url</span><span class="p">)}</span>
</span></span><span class="line"><span class="cl">  <span class="n">maxSize</span><span class="o">=</span><span class="p">{</span><span class="mi">5</span><span class="p">}</span> <span class="o">//</span> <span class="n">MB</span>
</span></span><span class="line"><span class="cl">  <span class="n">aspectRatio</span><span class="o">=</span><span class="p">{</span><span class="mi">1</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="o">/&gt;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="err">要我写个使用示例吗？</span>
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="4-高级用法">4. 高级用法</h2>
<h3 id="41-自定义指令claudemd">4.1 自定义指令（CLAUDE.md）</h3>
<p>在项目根目录创建 <code>CLAUDE.md</code>，写入项目规范：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl"><span class="gh"># 项目规范
</span></span></span><span class="line"><span class="cl"><span class="gh"></span>
</span></span><span class="line"><span class="cl"><span class="gu">## 代码风格
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 使用 TypeScript 严格模式
</span></span><span class="line"><span class="cl"><span class="k">-</span> 组件使用函数式写法
</span></span><span class="line"><span class="cl"><span class="k">-</span> 状态管理使用 Zustand
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 命名规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> 组件：PascalCase
</span></span><span class="line"><span class="cl"><span class="k">-</span> 函数：camelCase
</span></span><span class="line"><span class="cl"><span class="k">-</span> 常量：UPPER_SNAKE_CASE
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="gu">## 提交规范
</span></span></span><span class="line"><span class="cl"><span class="gu"></span><span class="k">-</span> feat: 新功能
</span></span><span class="line"><span class="cl"><span class="k">-</span> fix: 修复
</span></span><span class="line"><span class="cl"><span class="k">-</span> refactor: 重构
</span></span><span class="line"><span class="cl"><span class="k">-</span> docs: 文档
</span></span></code></pre></td></tr></table>
</div>
</div><p>Claude Code 会自动读取这个文件，所有操作都会遵循你的规范。</p>
<h3 id="42-并行任务">4.2 并行任务</h3>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: /parallel 同时帮我：1. 升级所有过期依赖 2. 修复 ESLint 警告 3. 补充缺失的测试
</span></span></code></pre></td></tr></table>
</div>
</div><p>Claude Code 会同时执行多个任务，大幅提升效率。</p>
<h3 id="43-持久记忆">4.3 持久记忆</h3>
<p>Claude Code 会记住你的项目上下文：</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">You: 还记得上周我们讨论的那个性能优化方案吗？执行它
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Claude: 记得，上周我们讨论了：
</span></span><span class="line"><span class="cl">1. 将大型列表改为虚拟滚动
</span></span><span class="line"><span class="cl">2. 添加 React.memo 包装
</span></span><span class="line"><span class="cl">3. 使用 useMemo 缓存计算结果
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">我现在开始实施...
</span></span></code></pre></td></tr></table>
</div>
</div><hr>
<h2 id="5-与其他工具对比">5. 与其他工具对比</h2>
<table>
  <thead>
      <tr>
          <th style="text-align: left">特性</th>
          <th style="text-align: left">Claude Code</th>
          <th style="text-align: left">Cursor</th>
          <th style="text-align: left">GitHub Copilot</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">运行环境</td>
          <td style="text-align: left">终端</td>
          <td style="text-align: left">IDE</td>
          <td style="text-align: left">IDE插件</td>
      </tr>
      <tr>
          <td style="text-align: left">自主执行命令</td>
          <td style="text-align: left">✅</td>
          <td style="text-align: left">❌</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">读写任意文件</td>
          <td style="text-align: left">✅</td>
          <td style="text-align: left">有限</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">Git操作</td>
          <td style="text-align: left">✅</td>
          <td style="text-align: left">❌</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">多文件重构</td>
          <td style="text-align: left">✅ 强</td>
          <td style="text-align: left">✅ 中</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">项目理解</td>
          <td style="text-align: left">✅ 深度</td>
          <td style="text-align: left">✅ 中等</td>
          <td style="text-align: left">❌</td>
      </tr>
      <tr>
          <td style="text-align: left">价格</td>
          <td style="text-align: left">按量付费</td>
          <td style="text-align: left">$20/月</td>
          <td style="text-align: left">$10/月</td>
      </tr>
  </tbody>
</table>
<p><strong>我的建议</strong>：</p>
<ul>
<li><strong>日常补全</strong>：用 Copilot</li>
<li><strong>复杂编辑</strong>：用 Cursor</li>
<li><strong>项目级任务</strong>：用 Claude Code</li>
</ul>
<hr>
<h2 id="6-注意事项">6. 注意事项</h2>
<h3 id="安全性">安全性</h3>
<p>Claude Code 有完整的<strong>权限控制系统</strong>：</p>
<ul>
<li>读取文件：自动允许</li>
<li>写入文件：需要确认（可设置自动）</li>
<li>执行命令：需要确认（可设置白名单）</li>
<li>网络请求：需要确认</li>
</ul>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Claude: 我需要执行 rm -rf node_modules，允许吗？
</span></span><span class="line"><span class="cl">[Allow] [Deny] [Allow All npm commands]
</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="token-消耗">Token 消耗</h3>
<p>复杂任务可能消耗大量 token。建议：</p>
<ol>
<li>任务描述要清晰具体</li>
<li>大型重构分步进行</li>
<li>使用 <code>/compact</code> 命令压缩上下文</li>
</ol>
<hr>
<h2 id="7-总结">7. 总结</h2>
<p>Claude Code 代表了 AI 编程工具的新方向：</p>
<blockquote>
<p><strong>从&quot;辅助编码&quot;到&quot;自主编码&quot;</strong></p></blockquote>
<p>它不是在你旁边提建议的助手，而是一个能独立完成任务的程序员。</p>
<p><strong>适合场景</strong>：</p>
<ul>
<li>大型代码重构</li>
<li>跨文件修改</li>
<li>自动化运维任务</li>
<li>快速原型开发</li>
</ul>
<p><strong>不太适合</strong>：</p>
<ul>
<li>需要精细控制的核心算法</li>
<li>涉及敏感数据的操作</li>
<li>完全没有代码基础的用户</li>
</ul>
]]></content:encoded></item></channel></rss>