<?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/categories/ai/</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>Wed, 14 Jan 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://realtime-ai.chat/categories/ai/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>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>