<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>Zheng Zhenyu</name>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <icon>https://zhengzhenyu.github.io/icon.png</icon>
  <id>https://zhengzhenyu.github.io/</id>
  <link href="https://zhengzhenyu.github.io/" rel="alternate"/>
  <link href="https://zhengzhenyu.github.io/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, Zheng Zhenyu</rights>
  <subtitle>Thoughts on Cloud Native, AI, and Software Engineering</subtitle>
  <title>Kevin's Personal Blog</title>
  <updated>2026-02-14T07:07:31.222Z</updated>
  <entry>
    <author>
      <name>Zheng Zhenyu</name>
    </author>
    <category term="AI" scheme="https://zhengzhenyu.github.io/tags/AI/"/>
    <category term="Claude" scheme="https://zhengzhenyu.github.io/tags/Claude/"/>
    <category term="VS Code" scheme="https://zhengzhenyu.github.io/tags/VS-Code/"/>
    <category term="开发工具" scheme="https://zhengzhenyu.github.io/tags/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    <category term="配置管理" scheme="https://zhengzhenyu.github.io/tags/%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86/"/>
    <content>
      <![CDATA[<p>Claude Code配置学习的第二篇文章，这次详细看看使用Claude过程中会用到的主要配置项，以及在VS Code中集成和使用Claude Code配置的方法。</p><h2 id="VS-Code-中的-Claude-支持"><a href="#VS-Code-中的-Claude-支持" class="headerlink" title="VS Code 中的 Claude 支持"></a>VS Code 中的 Claude 支持</h2><p>VS Code 在最新的1.109 版本中，开始提供了对 Claude 配置的原生支持，这意味着你可以直接在 VS Code 中获得与 Claude Code 一致的体验，无需在两个工具之间切换。同时，根据<a href="https://www.anthropic.com/news/github-copilot">Claude官方博客</a>来看，VS Code接入的Claude Code模型是由Anthropic公司提供，并且是通过GitHub Copilot订阅来使用的。Github Copilot的订阅对国内用户来说是最友好的，因此这种使用方式在获得SOTA能力的同时，相对来说是比较方便和稳定的。</p><h3 id="配置文件互通"><a href="#配置文件互通" class="headerlink" title="配置文件互通"></a>配置文件互通</h3><p>VS Code 现在可以直接读取 Claude 的配置文件，实现了真正的配置共享。这些配置文件包括：</p><table><thead><tr><th>配置类型</th><th>存储位置</th><th>说明</th></tr></thead><tbody><tr><td><strong>指令文件</strong></td><td><code>CLAUDE.md</code> 或 <code>.claude/CLAUDE.md</code></td><td>项目特定的指令和规则</td></tr><tr><td><strong>代理配置</strong></td><td><code>.claude/agents/*.md</code></td><td>自定义代理定义</td></tr><tr><td><strong>技能配置</strong></td><td><code>.claude/skills/</code></td><td>技能和工作流定义</td></tr><tr><td><strong>钩子配置</strong></td><td><code>.claude/settings.json</code></td><td>生命周期钩子设置</td></tr></tbody></table><p>这样一来，在Claude Code中设置的代理、技能、指令和钩子，可以无缝地在 VS Code 中使用，避免了重复配置的麻烦。</p><h3 id="Claude-Agent-支持"><a href="#Claude-Agent-支持" class="headerlink" title="Claude Agent 支持"></a>Claude Agent 支持</h3><p>VS Code 1.109 引入了 Claude Agent 集成（预览版），使用的是 Anthropic 官方的 Claude Agent SDK，确保了与其他实现的一致性。在Copilot使用时选择“Claude Agent”模式，就可以直接在 VS Code 中体验到 Claude Agent 的强大功能了。</p><p><img src="/2026/02/13/claude-code-configuration-guide/image.png" alt="开启Claude模式"></p><p>这个版本还为 Anthropic 模型增加了三项重要功能：</p><ul><li>推理能力的消息 API 集成</li><li>改进的工具搜索功能</li><li>支持上下文编辑的会话管理</li></ul><p>对于已经习惯 VS Code 的开发者来说，这是个好消息，不用再切换工具就能享受 Claude 的强大功能。</p><h2 id="Claude-Code-核心配置"><a href="#Claude-Code-核心配置" class="headerlink" title="Claude Code 核心配置"></a>Claude Code 核心配置</h2><p>虽然 VS Code 提供了便利的集成，但理解 Claude Code 的配置系统仍然很重要。下面介绍几个关键的配置要点。</p><h3 id="配置作用域与优先级"><a href="#配置作用域与优先级" class="headerlink" title="配置作用域与优先级"></a>配置作用域与优先级</h3><p>Claude Code 采用分层的配置系统，从高到低依次为：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">Managed Settings (系统级，IT 部署)</span><br><span class="line">    ↓</span><br><span class="line">Local Settings (.claude/*.local.json)</span><br><span class="line">    ↓</span><br><span class="line">Project Settings (.claude/settings.json)</span><br><span class="line">    ↓</span><br><span class="line">User Settings (~/.claude/settings.json)</span><br></pre></td></tr></table></figure><p>优先级越高的配置会覆盖低优先级的配置。这种设计让团队可以在保持统一规范的同时，也允许个人有一定的灵活性。</p><h3 id="基础配置示例"><a href="#基础配置示例" class="headerlink" title="基础配置示例"></a>基础配置示例</h3><p><strong>用户级配置</strong> (<code>~/.claude/settings.json</code>)</p><p>这个文件包含你的个人偏好，适用于所有项目：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;$schema&quot;</span><span class="punctuation">:</span> <span class="string">&quot;https://json.schemastore.org/claude-code-settings.json&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;model&quot;</span><span class="punctuation">:</span> <span class="string">&quot;claude-opus-4-1-20250805&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;outputStyle&quot;</span><span class="punctuation">:</span> <span class="string">&quot;Explanatory&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;language&quot;</span><span class="punctuation">:</span> <span class="string">&quot;chinese&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;env&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_API_KEY&quot;</span><span class="punctuation">:</span> <span class="string">&quot;$&#123;API_KEY&#125;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;CLAUDE_CODE_ENABLE_TELEMETRY&quot;</span><span class="punctuation">:</span> <span class="string">&quot;1&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><strong>项目级配置</strong> (<code>.claude/settings.json</code>)</p><p>这个文件通过 Git 提交，让团队成员共享配置：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;permissions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;allow&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;Bash(git *)&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="string">&quot;Bash(npm test **)&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="string">&quot;Read(~/.zshrc)&quot;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;deny&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;Read(./.env)&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="string">&quot;Read(./.env.*)&quot;</span><span class="punctuation">,</span></span><br><span class="line">      <span class="string">&quot;Edit(/production/**)&quot;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;hooks&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;FileEdit&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;matcher&quot;</span><span class="punctuation">:</span> <span class="string">&quot;**/*.js&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;hooks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="punctuation">&#123;</span><span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;command&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm run lint&quot;</span><span class="punctuation">&#125;</span><span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="权限管理：最重要的配置"><a href="#权限管理：最重要的配置" class="headerlink" title="权限管理：最重要的配置"></a>权限管理：最重要的配置</h3><p>权限配置是 Claude Code 中最关键的安全机制。通过明确的 allow&#x2F;deny&#x2F;ask 规则，你可以精确控制 Claude 能做什么。</p><p><strong>权限规则语法</strong></p><p>基本格式：<code>Tool</code> 或 <code>Tool(specifier)</code></p><p>实用示例：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;permissions&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;allow&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;Bash(npm run lint)&quot;</span><span class="punctuation">,</span>           <span class="comment">// 允许运行 lint</span></span><br><span class="line">      <span class="string">&quot;Bash(npm test *)&quot;</span><span class="punctuation">,</span>             <span class="comment">// 允许所有测试命令</span></span><br><span class="line">      <span class="string">&quot;Read(~/.zshrc)&quot;</span><span class="punctuation">,</span>               <span class="comment">// 允许读取 shell 配置</span></span><br><span class="line">      <span class="string">&quot;WebFetch(domain:github.com)&quot;</span>   <span class="comment">// 仅允许访问 GitHub</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;deny&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;Bash(curl *)&quot;</span><span class="punctuation">,</span>                 <span class="comment">// 禁止 curl 命令</span></span><br><span class="line">      <span class="string">&quot;Read(./.env)&quot;</span><span class="punctuation">,</span>                 <span class="comment">// 禁止读取环境变量文件</span></span><br><span class="line">      <span class="string">&quot;Read(./secrets/**)&quot;</span><span class="punctuation">,</span>           <span class="comment">// 禁止读取 secrets 目录</span></span><br><span class="line">      <span class="string">&quot;Edit(/production/**)&quot;</span>          <span class="comment">// 禁止修改生产代码</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;ask&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="string">&quot;Bash(git push *)&quot;</span>              <span class="comment">// push 前需要确认</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;defaultMode&quot;</span><span class="punctuation">:</span> <span class="string">&quot;acceptEdits&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p><strong>常见的权限模式</strong></p><table><thead><tr><th>规则示例</th><th>匹配范围</th><th>用途</th></tr></thead><tbody><tr><td><code>Bash</code></td><td>所有 Bash 命令</td><td>完全控制命令执行</td></tr><tr><td><code>Bash(npm *)</code></td><td>npm 开头的命令</td><td>允许包管理操作</td></tr><tr><td><code>Read(*.env*)</code></td><td>所有环境变量文件</td><td>保护敏感配置</td></tr><tr><td><code>Edit(src/api/**)</code></td><td>API 目录下所有文件</td><td>限制修改范围</td></tr><tr><td><code>WebFetch(domain:*.com)</code></td><td>特定域名</td><td>控制网络访问</td></tr></tbody></table><h3 id="工作流钩子配置"><a href="#工作流钩子配置" class="headerlink" title="工作流钩子配置"></a>工作流钩子配置</h3><p>钩子（Hooks）让你可以在特定事件发生时自动执行命令，这对于保持代码质量非常有用。</p><p><strong>常用钩子类型</strong></p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;hooks&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;SessionStart&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;matcher&quot;</span><span class="punctuation">:</span> <span class="string">&quot;startup&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;hooks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span><span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;command&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;git status&quot;</span><span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;FileEdit&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;matcher&quot;</span><span class="punctuation">:</span> <span class="string">&quot;**/*.&#123;js,ts&#125;&quot;</span><span class="punctuation">,</span></span><br><span class="line">        <span class="attr">&quot;hooks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span><span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;command&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm run lint $FILE&quot;</span><span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;BeforeCommit&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">      <span class="punctuation">&#123;</span></span><br><span class="line">        <span class="attr">&quot;hooks&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span></span><br><span class="line">          <span class="punctuation">&#123;</span><span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;command&quot;</span><span class="punctuation">,</span> <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;npm test&quot;</span><span class="punctuation">&#125;</span></span><br><span class="line">        <span class="punctuation">]</span></span><br><span class="line">      <span class="punctuation">&#125;</span></span><br><span class="line">    <span class="punctuation">]</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>这些钩子可以确保：</p><ul><li>每次会话开始时检查 Git 状态</li><li>编辑 JS&#x2F;TS 文件后自动运行 lint</li><li>提交前自动运行测试</li></ul><h3 id="沙箱安全配置"><a href="#沙箱安全配置" class="headerlink" title="沙箱安全配置"></a>沙箱安全配置</h3><p>对于需要更严格安全控制的环境，可以启用沙箱模式：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;sandbox&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;enabled&quot;</span><span class="punctuation">:</span> <span class="literal"><span class="keyword">true</span></span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;excludedCommands&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;docker&quot;</span><span class="punctuation">,</span> <span class="string">&quot;git&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;network&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">      <span class="attr">&quot;allowedDomains&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;github.com&quot;</span><span class="punctuation">,</span> <span class="string">&quot;*.npmjs.org&quot;</span><span class="punctuation">]</span><span class="punctuation">,</span></span><br><span class="line">      <span class="attr">&quot;allowUnixSockets&quot;</span><span class="punctuation">:</span> <span class="punctuation">[</span><span class="string">&quot;~/.ssh/agent-socket&quot;</span><span class="punctuation">]</span></span><br><span class="line">    <span class="punctuation">&#125;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>沙箱模式会限制 Claude 的命令执行和网络访问，适合在敏感项目中使用。</p><h2 id="实用配置技巧"><a href="#实用配置技巧" class="headerlink" title="实用配置技巧"></a>实用配置技巧</h2><h3 id="1-环境变量管理"><a href="#1-环境变量管理" class="headerlink" title="1. 环境变量管理"></a>1. 环境变量管理</h3><p>对于不同的开发环境，可以通过环境变量灵活切换配置：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;env&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;ANTHROPIC_MODEL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;claude-opus-4-1-20250805&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;CLAUDE_CODE_MAX_OUTPUT_TOKENS&quot;</span><span class="punctuation">:</span> <span class="string">&quot;32000&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;NODE_ENV&quot;</span><span class="punctuation">:</span> <span class="string">&quot;development&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="2-个人项目配置的隔离"><a href="#2-个人项目配置的隔离" class="headerlink" title="2. 个人项目配置的隔离"></a>2. 个人项目配置的隔离</h3><p>使用 <code>.local.json</code> 文件存放个人特定的配置，这些文件会被自动加入 <code>.gitignore</code>：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// .claude/settings.local.json</span></span><br><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;env&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;TEST_API_URL&quot;</span><span class="punctuation">:</span> <span class="string">&quot;http://localhost:3000&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;DEBUG_MODE&quot;</span><span class="punctuation">:</span> <span class="string">&quot;true&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h3 id="3-属性标签配置"><a href="#3-属性标签配置" class="headerlink" title="3. 属性标签配置"></a>3. 属性标签配置</h3><p>为 Claude 生成的提交和 PR 添加标识：</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;attribution&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">    <span class="attr">&quot;commit&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🤖 Generated with Claude Code\n\nCo-Authored-By: Claude &lt;noreply@anthropic.com&gt;&quot;</span><span class="punctuation">,</span></span><br><span class="line">    <span class="attr">&quot;pr&quot;</span><span class="punctuation">:</span> <span class="string">&quot;🤖 Generated with Claude Code&quot;</span></span><br><span class="line">  <span class="punctuation">&#125;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><h2 id="快速检查清单"><a href="#快速检查清单" class="headerlink" title="快速检查清单"></a>快速检查清单</h2><p>在配置 Claude Code 时，确保这些关键项都已设置：</p><ul><li>✅ API 密钥配置（<code>ANTHROPIC_API_KEY</code> 环境变量）</li><li>✅ 模型选择（<code>model</code> 字段）</li><li>✅ 权限规则（明确 <code>allow</code>&#x2F;<code>deny</code>&#x2F;<code>ask</code> 列表）</li><li>✅ 敏感文件保护（<code>.env</code>、<code>secrets/**</code> 等）</li><li>✅ 工作流钩子（根据项目需求）</li><li>✅ 输出语言和风格设置</li></ul><h2 id="实用命令"><a href="#实用命令" class="headerlink" title="实用命令"></a>实用命令</h2><p>在使用 Claude Code 时，这些命令很有帮助：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">/config              <span class="comment"># 打开配置界面</span></span><br><span class="line">/allowed-tools       <span class="comment"># 查看当前允许的工具</span></span><br><span class="line">/memory              <span class="comment"># 管理项目记忆</span></span><br><span class="line">/plugin              <span class="comment"># 管理插件</span></span><br><span class="line">/add-mcp-server      <span class="comment"># 添加 MCP 服务器</span></span><br></pre></td></tr></table></figure><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>Claude Code 的配置系统虽然功能强大，但掌握了核心概念后并不复杂。关键是理解配置的优先级层次，合理使用权限控制，并根据项目需求设置适当的钩子。</p><p>随着 VS Code 1.109 开始原生支持 Claude 配置，两个工具之间的配置可以完全共享，这大大降低了使用门槛。如果你已经在使用 VS Code，现在就可以直接利用现有的 Claude 配置，获得一致的开发体验。</p><p>建议从简单的配置开始，逐步完善：</p><ol><li>先设置好 API 密钥和基本权限</li><li>根据项目需求添加钩子</li><li>在实际使用中调整和优化配置</li><li>结合 CLAUDE.md 文件管理项目特定的指令（参考我之前的<a href="./claude-memory-insight.md">记忆管理文章</a>）</li></ol><p>记住，好的配置不是一次性完成的，而是随着项目发展不断迭代优化的过程。</p><hr><p><em>参考资料：</em></p><ul><li><em><a href="https://code.claude.com/docs/en/settings">Claude Code 官方文档 - 设置</a></em></li><li><em><a href="https://code.visualstudio.com/updates/v1_109">VS Code 1.109 更新说明</a></em></li></ul>]]>
    </content>
    <id>https://zhengzhenyu.github.io/2026/02/13/claude-code-configuration-guide/</id>
    <link href="https://zhengzhenyu.github.io/2026/02/13/claude-code-configuration-guide/"/>
    <published>2026-02-13T02:00:00.000Z</published>
    <summary>
      <![CDATA[<p>Claude Code配置学习的第二篇文章，这次详细看看使用Claude过程中会用到的主要配置项，以及在VS Code中集成和使用Claude Code配置的方法。</p>
<h2 id="VS-Code-中的-Claude-支持"><a]]>
    </summary>
    <title>Claude Code 配置初探</title>
    <updated>2026-02-14T07:07:31.222Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zheng Zhenyu</name>
    </author>
    <category term="AI" scheme="https://zhengzhenyu.github.io/tags/AI/"/>
    <category term="Claude" scheme="https://zhengzhenyu.github.io/tags/Claude/"/>
    <category term="开发工具" scheme="https://zhengzhenyu.github.io/tags/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7/"/>
    <category term="编程助手" scheme="https://zhengzhenyu.github.io/tags/%E7%BC%96%E7%A8%8B%E5%8A%A9%E6%89%8B/"/>
    <content>
      <![CDATA[<p>最近Claude Code非常之火，本人也尝试使用了一下，确实感受到其功能之强大，之前有想法但没有时间和精力去实现的各种Idea也都能快速实现原型。不过很快主管就提醒到，借助AI打造的软件项目能否上线还是需要严格的审核，并且整个设计和开发过程也需要严肃和严谨。尤其是在多人协作的项目中，如何制定整个项目的要求和规范，并让AI助手持续理解项目规范、团队约定和个人偏好，是非常重要的。</p><p>这时候才反思到，确实没有详细的读Claude Code产品文档，就因为用的顺手，就开始深度使用了。这一方面说明Claude Code确实非常容易上手，一方面也确实忽略了比较重要的各种深度用法。本文就从最关键的记忆管理系统为起点，探究一下Claude Code中几个重要的配置。以便提高项目质量和协作效率。</p><h2 id="记忆系统概述"><a href="#记忆系统概述" class="headerlink" title="记忆系统概述"></a>记忆系统概述</h2><p>Claude Code 的记忆系统主要分为两种类型：</p><ol><li><strong>CLAUDE.md 文件</strong>：由开发者编写和维护的 Markdown 文件，包含指令、规则和偏好设置</li><li><strong>自动记忆（Auto Memory）</strong>：Claude 自动记录项目模式、常用命令和用户偏好等有用信息</li></ol><p>CLAUDE.md 文件在每次会话开始时都会被加载，这样 Claude 就能记住项目的特定要求。自动记忆是最近才加入的功能，可以让 Claude 自己学习和记录项目知识。</p><h2 id="记忆类型层级结构"><a href="#记忆类型层级结构" class="headerlink" title="记忆类型层级结构"></a>记忆类型层级结构</h2><p>通过阅读文档，我发现 Claude Code 的记忆管理结构设计得相当精细，可以分为多个层级，根据官方的描述有如下定义和使用建议：</p><table><thead><tr><th>记忆类型</th><th>存储位置</th><th>用途（建议）</th><th>适用范围（建议）</th></tr></thead><tbody><tr><td><strong>全局记忆</strong></td><td>macOS: <code>/Library/Application Support/ClaudeCode/CLAUDE.md</code><br>Linux: <code>/etc/claude-code/CLAUDE.md</code><br>Windows: <code>C:\Program Files\ClaudeCode\CLAUDE.md</code></td><td>IT&#x2F;DevOps 管理的组织级规范</td><td>公司编码标准、安全策略、合规要求</td></tr><tr><td><strong>项目记忆</strong></td><td><code>./CLAUDE.md</code> 或 <code>./.claude/CLAUDE.md</code></td><td>团队共享的项目指令</td><td>项目架构、编码标准、常见工作流</td></tr><tr><td><strong>项目规则</strong></td><td><code>./.claude/rules/*.md</code></td><td>模块化的、特定主题的项目指令</td><td>特定语言规范、测试约定、API 标准</td></tr><tr><td><strong>用户记忆</strong></td><td><code>~/.claude/CLAUDE.md</code></td><td>适用于所有项目的个人偏好</td><td>代码风格偏好、个人工具快捷方式</td></tr><tr><td><strong>项目本地记忆</strong></td><td><code>./CLAUDE.local.md</code></td><td>个人的项目特定偏好</td><td>个人沙箱 URL、测试数据偏好</td></tr><tr><td><strong>自动记忆</strong></td><td><code>~/.claude/projects/&lt;project&gt;/memory/</code></td><td>Claude 自动记录的笔记和学习内容</td><td>项目模式、调试洞察、架构笔记</td></tr></tbody></table><p>从优先级来看，越具体的配置优先级越高，这样可以层层覆盖。值得注意的是 <code>CLAUDE.local.md</code> 会自动加入 <code>.gitignore</code>，很适合存放一些个人的测试配置或临时设置，不会影响到团队其他成员。</p><h2 id="CLAUDE-md-文件详解"><a href="#CLAUDE-md-文件详解" class="headerlink" title="CLAUDE.md 文件详解"></a>CLAUDE.md 文件详解</h2><h3 id="设置项目记忆"><a href="#设置项目记忆" class="headerlink" title="设置项目记忆"></a>设置项目记忆</h3><p>用 <code>/init</code> 命令可以快速生成一个 CLAUDE.md 文件骨架：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">&gt; /init</span><br></pre></td></tr></table></figure><p>建议在 CLAUDE.md 中记录：</p><ul><li>常用命令（构建、测试、lint），避免每次都要翻找或搜索</li><li>项目的代码风格和命名规范</li><li>重要的架构设计和模式</li></ul><h3 id="CLAUDE-md-导入功能"><a href="#CLAUDE-md-导入功能" class="headerlink" title="CLAUDE.md 导入功能"></a>CLAUDE.md 导入功能</h3><p>CLAUDE.md 支持用 <code>@path/to/import</code> 语法引入其他文件，这个功能挺实用：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">查看 @README 了解项目概述，查看 @package.json 获取此项目可用的 npm 命令。</span><br><span class="line"></span><br><span class="line"><span class="section"># 附加指令</span></span><br><span class="line"><span class="bullet">-</span> git 工作流 @docs/git-instructions.md</span><br></pre></td></tr></table></figure><p>支持相对路径和绝对路径。相对路径相对于包含导入的文件解析，而不是工作目录。</p><p>对于跨多个 git worktrees 工作的场景，可以使用用户目录导入：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># 个人偏好</span></span><br><span class="line"><span class="bullet">-</span> @~/.claude/my-project-instructions.md</span><br></pre></td></tr></table></figure><p>需要注意几点：</p><ul><li>第一次用外部导入时，Claude Code 会弹窗让你确认</li><li>导入可以嵌套，但最多 5 层，防止循环引用</li><li>代码块里的 <code>@</code> 符号不会被当作导入处理</li></ul><h2 id="模块化规则：-claude-rules"><a href="#模块化规则：-claude-rules" class="headerlink" title="模块化规则：.claude/rules/"></a>模块化规则：<code>.claude/rules/</code></h2><p>对于比较大的项目，把所有规则都塞在一个 CLAUDE.md 里会很乱。这时候可以用 <code>.claude/rules/</code> 目录来分模块管理。</p><h3 id="基本结构"><a href="#基本结构" class="headerlink" title="基本结构"></a>基本结构</h3><p>在项目里建个 <code>.claude/rules/</code> 目录，然后按主题放不同的 Markdown 文件：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">your-project/</span><br><span class="line">├── .claude/</span><br><span class="line">│   ├── CLAUDE.md           # 主项目指令</span><br><span class="line">│   └── rules/</span><br><span class="line">│       ├── code-style.md   # 代码风格指南</span><br><span class="line">│       ├── testing.md      # 测试约定</span><br><span class="line">│       └── security.md     # 安全要求</span><br></pre></td></tr></table></figure><p>这个目录下的所有 <code>.md</code> 文件都会被自动加载，和 <code>.claude/CLAUDE.md</code> 优先级一样。</p><h3 id="路径特定规则"><a href="#路径特定规则" class="headerlink" title="路径特定规则"></a>路径特定规则</h3><p>有个很有意思的功能是可以让某些规则只对特定路径生效。用 YAML frontmatter 的 <code>paths</code> 字段来指定：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">paths:</span><br><span class="line"><span class="section">  - &quot;src/api/<span class="strong">**/<span class="emphasis">*.ts&quot;</span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section">---</span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section"></span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section"># API 开发规则</span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section"></span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section">- 所有 API 端点必须包含输入验证</span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section">- 使用标准错误响应格式</span></span></span></span><br><span class="line"><span class="emphasis"><span class="strong"><span class="section">- 包含 OpenAPI 文档注释</span></span></span></span><br></pre></td></tr></table></figure><h3 id="Glob-模式支持"><a href="#Glob-模式支持" class="headerlink" title="Glob 模式支持"></a>Glob 模式支持</h3><p><code>paths</code> 字段支持常见的 glob 模式，比如：</p><table><thead><tr><th>模式</th><th>匹配范围</th></tr></thead><tbody><tr><td><code>**/*.ts</code></td><td>任意目录中的所有 TypeScript 文件</td></tr><tr><td><code>src/**/*</code></td><td>src&#x2F; 目录下的所有文件</td></tr><tr><td><code>*.md</code></td><td>项目根目录中的 Markdown 文件</td></tr><tr><td><code>src/components/*.tsx</code></td><td>特定目录中的 React 组件</td></tr></tbody></table><p>还可以用括号扩展来匹配多个扩展名：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">---</span><br><span class="line">paths:</span><br><span class="line"><span class="bullet">  -</span> &quot;src/<span class="strong">**/<span class="emphasis">*.&#123;ts,tsx&#125;&quot;</span></span></span><br><span class="line"><span class="emphasis"><span class="strong">  - &quot;&#123;src,lib&#125;/*</span><span class="emphasis">*/*</span>.ts&quot;</span></span><br><span class="line"><span class="strong">---</span></span><br><span class="line"><span class="strong"></span></span><br><span class="line"><span class="strong"># TypeScript/React 规则</span></span><br></pre></td></tr></table></figure><h3 id="用户级规则"><a href="#用户级规则" class="headerlink" title="用户级规则"></a>用户级规则</h3><p>除了项目级的规则，还可以在个人目录 <code>~/.claude/rules/</code> 下创建全局生效的个人规则：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">~/.claude/rules/</span><br><span class="line">├── preferences.md    # 个人编码偏好</span><br><span class="line">└── workflows.md      # 首选工作流</span><br></pre></td></tr></table></figure><p>用户级规则会先加载，然后才是项目规则，所以项目规则的优先级更高。</p><h2 id="记忆查找机制"><a href="#记忆查找机制" class="headerlink" title="记忆查找机制"></a>记忆查找机制</h2><p>Claude Code 查找记忆文件的方式比较智能：从当前工作目录开始，一直往上找到根目录（不包括根目录本身），把路径上所有的 CLAUDE.md 和 CLAUDE.local.md 都读进来。如果在 <code>foo/bar/</code> 运行，就会同时加载 <code>foo/CLAUDE.md</code> 和 <code>foo/bar/CLAUDE.md</code>，这个对大仓库来说很方便。</p><p>子目录里嵌套的 CLAUDE.md 不会立即加载，而是等 Claude 读取那个子目录的文件时才加载进来。</p><h3 id="从额外目录加载记忆"><a href="#从额外目录加载记忆" class="headerlink" title="从额外目录加载记忆"></a>从额外目录加载记忆</h3><p>使用 <code>--add-dir</code> 标志时，可以通过设置环境变量加载这些目录的记忆文件：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">CLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MD=1 claude --add-dir ../shared-config</span><br></pre></td></tr></table></figure><h2 id="组织级记忆管理"><a href="#组织级记忆管理" class="headerlink" title="组织级记忆管理"></a>组织级记忆管理</h2><p>如果是在公司或团队中使用，可以在系统级别部署一个统一的 CLAUDE.md 文件，让所有开发者都遵循相同的规范。</p><p>具体做法：</p><ol><li>在前面表格里提到的管理策略位置创建文件</li><li>通过公司的配置管理工具（MDM、Group Policy、Ansible 等）统一分发</li></ol><h2 id="记忆管理的一些Tips"><a href="#记忆管理的一些Tips" class="headerlink" title="记忆管理的一些Tips"></a>记忆管理的一些Tips</h2><ol><li><strong>写清楚具体的规则</strong>：比如”用 2 空格缩进”就比”代码要格式化好”清楚多了</li><li><strong>用好 Markdown 结构</strong>：把相关的记忆用列表整理好，加上清晰的标题分组</li><li><strong>定期回顾更新</strong>：项目在变化，记忆也要跟着更新，不然 Claude 可能会用过时的信息</li></ol><h2 id="最佳实践案例：PyTorch-项目"><a href="#最佳实践案例：PyTorch-项目" class="headerlink" title="最佳实践案例：PyTorch 项目"></a>最佳实践案例：PyTorch 项目</h2><p>在研究如何写好 CLAUDE.md 时，我发现 <a href="https://github.com/pytorch/pytorch/blob/main/CLAUDE.md">PyTorch 项目</a>做为比较早拥抱Claude Code的开源项目，他们的配置是个很好的参考。他们的记忆管理配置既全面又实用，值得借鉴。</p><h3 id="明确的环境和工具指令"><a href="#明确的环境和工具指令" class="headerlink" title="明确的环境和工具指令"></a>明确的环境和工具指令</h3><p>PyTorch 的 CLAUDE.md 开头就明确告诉 Claude 如何处理环境问题：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># Environment</span></span><br><span class="line"></span><br><span class="line">If any tool you&#x27;re trying to use (pip, python, spin, etc) is</span><br><span class="line">missing, always stop and ask the user if an environment is needed. </span><br><span class="line">Do NOT try to find alternatives or install these tools.</span><br></pre></td></tr></table></figure><p>这种明确的指令避免了 Claude 自作主张去做一些不合适的操作。对于构建、测试、Linting 等常见操作，也都有清晰的说明：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># Build</span></span><br><span class="line"></span><br><span class="line">Always ask for build configuration environment variables before running build.</span><br><span class="line">All build is done via <span class="code">`pip install -e . -v --no-build-isolation`</span>.</span><br><span class="line">You should NEVER run any other command to build PyTorch.</span><br><span class="line"></span><br><span class="line"><span class="section"># Testing</span></span><br><span class="line"></span><br><span class="line">Use our test class and test runner:</span><br><span class="line">...</span><br><span class="line"></span><br><span class="line"><span class="section"># Linting</span></span><br><span class="line"></span><br><span class="line">Only use commands provided via <span class="code">`spin`</span> for linting.</span><br></pre></td></tr></table></figure><h3 id="具体的编码规范"><a href="#具体的编码规范" class="headerlink" title="具体的编码规范"></a>具体的编码规范</h3><p>PyTorch 的编码风格指南写得非常具体，而且给出了清晰的理由：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># Coding Style Guidelines</span></span><br><span class="line"></span><br><span class="line"><span class="bullet">-</span> Minimize comments; be concise; code should be self-explanatory </span><br><span class="line">  and self-documenting.</span><br><span class="line"><span class="bullet">-</span> Don&#x27;t make trivial (1-2 LOC) helper functions that are only </span><br><span class="line">  used once unless it significantly improves code readability.</span><br><span class="line"><span class="bullet">-</span> Prefer clear abstractions. State management should be explicit.</span><br><span class="line"><span class="bullet">-</span> Match existing code style and architectural patterns.</span><br><span class="line"><span class="bullet">-</span> Assume the reader has familiarity with PyTorch.</span><br></pre></td></tr></table></figure><p>这些规则不是简单的”代码要规范”，而是告诉你具体要做什么、不要做什么。</p><h3 id="Good-vs-Bad-代码示例"><a href="#Good-vs-Bad-代码示例" class="headerlink" title="Good vs Bad 代码示例"></a>Good vs Bad 代码示例</h3><p>对于一些容易出错的场景，PyTorch 直接给出了对比示例。比如配置临时修改：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># Dynamo Config</span></span><br><span class="line"></span><br><span class="line">Use <span class="code">`torch._dynamo.config.patch`</span> for temporarily changing config:</span><br><span class="line"></span><br><span class="line"><span class="code">```python</span></span><br><span class="line"><span class="code"># Good - use patch as decorator</span></span><br><span class="line"><span class="code">@torch._dynamo.config.patch(force_compile_during_fx_trace=True)</span></span><br><span class="line"><span class="code">def test_my_feature(self):</span></span><br><span class="line"><span class="code">    pass</span></span><br><span class="line"><span class="code"></span></span><br><span class="line"><span class="code"># Bad - manual save/restore</span></span><br><span class="line"><span class="code">orig = torch._dynamo.config.force_compile_during_fx_trace</span></span><br><span class="line"><span class="code">try:</span></span><br><span class="line"><span class="code">    torch._dynamo.config.force_compile_during_fx_trace = True</span></span><br><span class="line"><span class="code">finally:</span></span><br><span class="line"><span class="code">    torch._dynamo.config.force_compile_during_fx_trace = orig</span></span><br><span class="line"><span class="code">```</span></span><br></pre></td></tr></table></figure><p>这种对比让 Claude 能很清楚地知道什么是推荐的做法。</p><h3 id="项目特定的技术约定"><a href="#项目特定的技术约定" class="headerlink" title="项目特定的技术约定"></a>项目特定的技术约定</h3><p>对于一些项目特有的技术细节，PyTorch 也做了详细说明。比如如何修复特定的 linting 错误：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># Fixing B950 line too long in multi-line string blocks</span></span><br><span class="line"></span><br><span class="line">If B950 line too long triggers on a multi-line string block, </span><br><span class="line">put # noqa: B950 on the same line as the terminating triple quote.</span><br><span class="line"></span><br><span class="line">Example:</span><br><span class="line"><span class="code">    self.assertExpectedInline(</span></span><br><span class="line"><span class="code">        foo(),</span></span><br><span class="line"><span class="code">        &quot;&quot;&quot;</span></span><br><span class="line"><span class="code">this line is too long...</span></span><br><span class="line"><span class="code">&quot;&quot;&quot;,  # noqa: B950</span></span><br><span class="line"><span class="code">    )</span></span><br></pre></td></tr></table></figure><h3 id="行为指导"><a href="#行为指导" class="headerlink" title="行为指导"></a>行为指导</h3><p>PyTorch 还对 Claude 的行为做了明确要求，比如关于 git commit：</p><figure class="highlight markdown"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="section"># Commit messages</span></span><br><span class="line"></span><br><span class="line">Don&#x27;t commit unless the user explicitly asks you to.</span><br><span class="line"></span><br><span class="line">When writing a commit message, don&#x27;t make a bullet list of the </span><br><span class="line">individual changes. Instead, if the PR is large, explain the </span><br><span class="line">order to review changes.</span><br><span class="line"></span><br><span class="line">Disclose that the PR was authored with Claude.</span><br></pre></td></tr></table></figure><h3 id="使用-Skills-目录管理复杂知识"><a href="#使用-Skills-目录管理复杂知识" class="headerlink" title="使用 Skills 目录管理复杂知识"></a>使用 Skills 目录管理复杂知识</h3><p>除了主 CLAUDE.md 文件，PyTorch 还大量使用了 <code>.claude/skills/</code> 目录来组织更复杂的领域知识。比如：</p><ul><li><code>pr-review/</code> - PR 审查技能，包含详细的审查清单</li><li><code>docstring/</code> - 文档字符串编写规范</li><li><code>triaging-issues/</code> - Issue 分类处理流程</li><li><code>at-dispatch-v2/</code> - 特定 API 的迁移指南</li></ul><p>每个 skill 都是一个独立的目录，包含 <code>SKILL.md</code> 主文件和相关的辅助文件（如 checklist、templates、scripts 等）。这种模块化的组织方式让复杂的项目知识更容易维护和查找。</p><h3 id="值得借鉴的几点"><a href="#值得借鉴的几点" class="headerlink" title="值得借鉴的几点"></a>值得借鉴的几点</h3><p>总结一下 PyTorch 的做法，有几点特别值得学习：</p><ol><li><strong>指令要明确</strong>：告诉 Claude 具体该做什么、不该做什么，而不是模糊的建议</li><li><strong>给出示例</strong>：用代码示例说明，尤其是 Good vs Bad 的对比</li><li><strong>分主题组织</strong>：用清晰的标题把不同类型的规则分开</li><li><strong>针对性强</strong>：记录项目特有的约定和技术细节</li><li><strong>模块化管理</strong>：对于复杂的领域知识，使用 skills 目录分模块组织</li><li><strong>持续迭代</strong>：根据实际使用情况不断完善和更新</li></ol><p>如果你的项目也有类似的复杂度，不妨参考 PyTorch 的结构来组织自己的 CLAUDE.md。即使是小项目，从中借鉴”明确指令”和”示例驱动”的思路也会很有帮助。</p><h2 id="实用命令"><a href="#实用命令" class="headerlink" title="实用命令"></a>实用命令</h2><ul><li>**<code>/memory</code>**：在会话期间打开任何记忆文件进行编辑</li><li>**<code>/init</code>**：为代码库引导创建 CLAUDE.md</li><li><strong>保存特定内容</strong>：直接告诉 Claude，如”记住我们使用 pnpm”或”保存到记忆：API 测试需要本地 Redis 实例”</li></ul><h2 id="自动记忆（Auto-Memory）"><a href="#自动记忆（Auto-Memory）" class="headerlink" title="自动记忆（Auto Memory）"></a>自动记忆（Auto Memory）</h2><p>自动记忆是 Claude Code 最近才加入的功能，目前还在逐步推广。我体验下来觉得这个功能挺有意思，让 Claude 可以主动学习和记录项目相关的知识。</p><h3 id="功能特点"><a href="#功能特点" class="headerlink" title="功能特点"></a>功能特点</h3><p>简单来说，自动记忆是一个持久化目录，Claude 工作时会自动往里面写笔记。和我们手写的 CLAUDE.md 不同，这些是 Claude 自己总结的内容。有几个特点：</p><ul><li><strong>不用手动维护</strong>：Claude 自己判断什么重要，然后记下来</li><li><strong>持续积累</strong>：随着项目推进，记忆内容会越来越丰富</li><li><strong>项目隔离</strong>：每个项目有独立的记忆空间</li></ul><h3 id="Claude-会自动记住什么"><a href="#Claude-会自动记住什么" class="headerlink" title="Claude 会自动记住什么"></a>Claude 会自动记住什么</h3><p>根据文档和我的观察，Claude 可能会记录这些：</p><ul><li><strong>项目模式</strong>：常用的构建命令、测试习惯、代码风格</li><li><strong>调试经验</strong>：遇到过的问题和解决方案</li><li><strong>架构信息</strong>：重要文件、模块关系、核心抽象</li><li><strong>个人习惯</strong>：你的沟通偏好、工作流程等</li></ul><h3 id="存储位置和结构"><a href="#存储位置和结构" class="headerlink" title="存储位置和结构"></a>存储位置和结构</h3><p>每个项目有自己独立的记忆目录 <code>~/.claude/projects/&lt;project&gt;/memory/</code>。这里的 <code>&lt;project&gt;</code> 是基于 Git 仓库根目录生成的，所以同一个仓库的不同子目录会共享记忆。如果用 Git worktrees，每个 worktree 会有单独的记忆。</p><p>目录大概长这样：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">~/.claude/projects/&lt;project&gt;/memory/</span><br><span class="line">├── MEMORY.md          # 索引文件，每次会话都会加载</span><br><span class="line">├── debugging.md       # 调试相关笔记</span><br><span class="line">├── api-conventions.md # API 设计经验</span><br><span class="line">└── ...                # 其他 Claude 创建的主题文件</span><br></pre></td></tr></table></figure><p><code>MEMORY.md</code> 是主索引，每次启动时会读入前 200 行。超过 200 行的内容不会自动加载，Claude 会把详细内容拆到其他主题文件里。</p><p>像 <code>debugging.md</code>、<code>patterns.md</code> 这些主题文件启动时不会加载，Claude 会在需要时才读取。在使用过程中，你能看到 Claude 实时更新这些文件。</p><h3 id="如何使用和管理"><a href="#如何使用和管理" class="headerlink" title="如何使用和管理"></a>如何使用和管理</h3><p><strong>查看记忆</strong>：用 <code>/memory</code> 命令可以打开记忆文件看看 Claude 都记了些什么</p><p><strong>主动要求记录</strong>：可以直接告诉 Claude 记住某些东西，比如：</p><ul><li>“记住我们项目用 pnpm 而不是 npm”</li><li>“保存到记忆：API 测试要先启动本地 Redis”</li></ul><p><strong>手动修改</strong>：这些记忆文件就是普通的 Markdown，随时可以自己编辑</p><p><strong>功能开关</strong>：用环境变量来控制：</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">export</span> CLAUDE_CODE_DISABLE_AUTO_MEMORY=1  <span class="comment"># 关闭</span></span><br><span class="line"><span class="built_in">export</span> CLAUDE_CODE_DISABLE_AUTO_MEMORY=0  <span class="comment"># 开启</span></span><br></pre></td></tr></table></figure><p>如果你的版本还没看到这个功能，可以试试设置 <code>CLAUDE_CODE_DISABLE_AUTO_MEMORY=0</code> 来启用。</p><h3 id="使用建议"><a href="#使用建议" class="headerlink" title="使用建议"></a>使用建议</h3><p>Claude Code官方也给出了一些比较好的使用Tips：</p><ol><li><strong>让它自己学</strong>：不用过度干预，让 Claude 自己判断什么值得记录</li><li><strong>偶尔检查一下</strong>：用 <code>/memory</code> 看看记录的内容是否符合预期  </li><li><strong>重要的事主动说</strong>：对于项目的核心规范，最好明确告诉 Claude 保存</li><li><strong>配合 CLAUDE.md 一起用</strong>：自动记忆是辅助，不是替代手写配置</li></ol><p>自动记忆这个功能让我感觉 Claude 变得更”聪明”了，它能记住之前的踩坑经验，下次遇到类似问题时会主动避开。用得越久，对项目的理解就越深。不过现在还是新功能，具体效果还要看长期使用情况。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>研究了一遍 Claude Code 的记忆管理系统后，感觉设计得确实挺周到的。从个人偏好到团队规范，从项目配置到组织策略，都有对应的层级。CLAUDE.md 让开发者能精确控制 AI 的行为，自动记忆又让 Claude 能自己学习和积累经验。</p><p>PyTorch 项目的实践给我们提供了一个很好的参考模板。他们的经验告诉我们：好的 CLAUDE.md 不是写得越多越好，而是要<strong>明确、具体、有示例</strong>。特别是对于团队项目，清晰的指令能大大减少 Claude 的误操作，提高协作效率。</p><p>对于个人开发者来说，可以从简单的 CLAUDE.md 开始：记录几个常用命令、核心架构约定就够了。如果是团队协作，建议参考 PyTorch 的做法，好好规划记忆文件的组织结构。对于大型项目，<code>.claude/skills/</code> 这种模块化管理方式特别有用，值得尝试。</p><p>不过说实话，这套系统还是有一定学习成本的。一开始可能会觉得配置项有点多，但用熟了之后，确实能让 Claude 更懂你的项目，减少很多重复解释的时间。建议从小做起，逐步完善，不要一开始就想着把所有东西都配置完美。</p><hr><p><em>参考资料：</em></p><ul><li><em><a href="https://code.claude.com/docs/en/memory">Claude Code 官方文档 - 记忆管理</a></em></li><li><em><a href="https://github.com/pytorch/pytorch/blob/main/CLAUDE.md">PyTorch CLAUDE.md</a></em></li></ul>]]>
    </content>
    <id>https://zhengzhenyu.github.io/2026/02/12/claude-memory-insight/</id>
    <link href="https://zhengzhenyu.github.io/2026/02/12/claude-memory-insight/"/>
    <published>2026-02-12T02:00:00.000Z</published>
    <summary>
      <![CDATA[<p>最近Claude]]>
    </summary>
    <title>Claude Code 记忆管理系统初探</title>
    <updated>2026-02-14T07:07:31.222Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zheng Zhenyu</name>
    </author>
    <content>
      <![CDATA[<p>Open Platform for Enterprise AI (OPEA)是一个由Intel发起并捐赠至 Linux Foundation AI &amp; Data 基金会的开放生态系统编排框架，旨在集成高效的生成式人工智能（GenAI）技术和工作流程，帮助企业更快地采用人工智能并实现业务价值。</p><img src="https://opea.dev/wp-content/uploads/sites/9/2024/04/opea-horizontal-color.svg" style="zoom:50%;"><p>根据OPEA负责人，Intel开源生态负责人Arun Gupta描述，OPEA的出现主要是为了简化目前GenAI领域的复杂的技术栈和多种多样的软件选择，为开发者和用户提供多个领域GenAI应用的端到端解决方案，让用户和开发者可以用一条简单的命令就能在多平台上快速运行GenAI应用。</p><h2 id="OPEA-Governmental-Overview"><a href="#OPEA-Governmental-Overview" class="headerlink" title="OPEA Governmental Overview"></a>OPEA Governmental Overview</h2><p>OPEA 由Intel于2024年4月15日发布并在4月16日宣布加入LF AI&amp;DATA进行<a href="https://opea-project.github.io/latest/community/charter.html">运作</a>，目前有超过38家企业宣布加入OPEA，包括Intel、Qdrant、Red Hat、Yellowbrick Data、Cloudera、Zilliz、Broadcom、deepset、Haystack等。2024年10月14日发布OPEA 1.0版本，提供16个端到端GenAI应用案例，OPEA目前重点关注引入了RAG技术的大模型应用。</p><p>OPEA目前成立了一个委员会：<code>Technical Sterring Committee</code>和4个工作组:<code>Security Working Group</code>、<code>Community and Communications Working Group</code>、<code>Developer Experience Working Group</code>和<code>Evaluation Working Group</code>。其中TSC双周举行会议，各工作组月度举行例会，具体会议时间参考<a href="https://zoom-lfx.platform.linuxfoundation.org/meetings/opea?view=month">OPEA Meeting Clendar</a>。</p><h4 id="Technical-Steering-Committee-TSC"><a href="#Technical-Steering-Committee-TSC" class="headerlink" title="Technical Steering Committee (TSC)"></a>Technical Steering Committee (TSC)</h4><p>OPEA TSC负责OPEA项目整体的技术发展方向，包括并不限于：技术决策、成立工作组、社区间技术合作、流程评审和改进、技术营销等。目前OPEA TSC包括来自九家企业的10位TSC代表：</p><table><thead><tr><th>TSC Member Name</th><th>Member’s title and company name</th></tr></thead><tbody><tr><td>Malini Bhandaru (Chair)</td><td>Senior Principal Engineer, Intel</td></tr><tr><td>Amr Abdelhalem</td><td>SVP, Head of Cloud Platforms, Fidelity</td></tr><tr><td>Nathan Cartwright</td><td>Chief Architect - AI, CDW</td></tr><tr><td>Justin Cormack</td><td>CTO, Docker</td></tr><tr><td>Ke Ding</td><td>Senior Prinicipal AI Engineer, Intel</td></tr><tr><td>Steve Grubb</td><td>Senior Principal Engineer, Red Hat</td></tr><tr><td>Robert Hafner</td><td>Senior Principal Architect, Comcast</td></tr><tr><td>Melissa Mckay</td><td>Head of Developer Relations, JFrog</td></tr><tr><td>Logan Markewich</td><td>Founding Software Developer, LlamaIndex</td></tr><tr><td>Nick Ni</td><td>Senior Director AI Product Management, AMD</td></tr></tbody></table><h2 id="OPEA-Technical-Insight"><a href="#OPEA-Technical-Insight" class="headerlink" title="OPEA Technical Insight"></a>OPEA Technical Insight</h2><p>根据OPEA官方定义和规划，OPEA目前包含以下几个主要功能：</p><ul><li><p>覆盖大语言模型（LLMs）、数据存储和提示引擎在内的最先进生成式人工智能(GenAI)系统的可组合构建模块的参考框架和软件组合。</p></li><li><p>端到端可复现的检索增强型生成式人工智能(RAG)组件堆栈结构和工作流程的架构蓝图。</p></li><li><p>多个<code>Micro-Service</code>和<code>Mega-Service</code>帮助用户快速构建和部署生成式AI应用。</p></li><li><p>四步评估工具，可用于对生成式人工智能系统在性能、功能、可信度和企业级应用就绪度方面进行评分。</p></li></ul><h4 id="Microservice"><a href="#Microservice" class="headerlink" title="Microservice:"></a>Microservice:</h4><p>OPEA的最小组成单元是微服务(Microservice),每一个微服务承担一个独立的功能，通过模块化的微服务组件，可以为用户和开发者提供更灵活、易扩展的功能选择，同时也能更容易的按需组成自己所需的AI应用。如<code>vllm-endpoint</code>, <code>start-microservice-with-python</code>, <code>feedback-with-mongodb</code>等，具体可参考<a href="https://opea-project.github.io/latest/microservices/index.html#genaicomps">GenAI Compomnents</a></p><h4 id="Megaservice"><a href="#Megaservice" class="headerlink" title="Megaservice"></a>Megaservice</h4><p>Megaserice对外提供完整和独立的功能，通常包含一个或多个Microservice并对它们进行调度和管理。Megaservice通常包含较为复杂的业务逻辑和工作流，通过协调各Microservice的相互协调来完成特定的应用诉求。在保证了功能的完整性的前提下，仍保留了一定的可扩展性和灵活性。如<code>ChatQnA</code>, <code>CodeGen</code>, <code>FaqGen</code>等，具体可参考<a href="https://opea-project.github.io/latest/examples/index.html#genaiexamples">GenAI Examples</a></p><h4 id="Gateways"><a href="#Gateways" class="headerlink" title="Gateways"></a>Gateways</h4><p>Gateway作为用户访问Megaservice的接口，根据用户需求提供定制化的访问。它作为传入请求的入口点，将它们路由到巨服务架构中的适当微服务。Gateway支持API定义、API版本控制、速率限制和请求转换等能力，允许对用户与底层微服务的交互进行细粒度控制</p>]]>
    </content>
    <id>https://zhengzhenyu.github.io/2024/11/02/opea-insight/</id>
    <link href="https://zhengzhenyu.github.io/2024/11/02/opea-insight/"/>
    <published>2024-11-02T01:35:40.000Z</published>
    <summary>
      <![CDATA[<p>Open Platform for Enterprise AI (OPEA)是一个由Intel发起并捐赠至 Linux Foundation AI &amp; Data]]>
    </summary>
    <title>A brief insight of Open Platform for Enterprise AI(OPEA)</title>
    <updated>2026-02-12T01:23:30.969Z</updated>
  </entry>
  <entry>
    <author>
      <name>Zheng Zhenyu</name>
    </author>
    <content>
      <![CDATA[<p>“首因效应“，是指人对人或事物的第一次印象对今后续认知的影响，虽然这些第一印象并非总是正确的，但却是最鲜明、最牢固的，并且决定着对于其认知的进程。软件分发(Software Distribution)是软件开发的最后一个环节，也是终端用户(End Users)使用软件的第一个环节，对于用户体验有关键影响，很大程度决定着用户对于软件的长期认知。易用性、易获得性以及内容和服务是否与用户所期望的一致，极大的影响着用户对于软件的整体印象。</p><p>“易用性、易获得性以及内容和服务是否与用户所期望的一致”，这三条需求其实需要由两个角色共同承担：1）产品经理，能够准确的理解用户需求，并把用户需求转化为技术需求，确保最终开发出来的内容和服务符合用户期望；2）开发人员，准确开发实现需求，完整验证，通过技术手段确保易用性与已获得性。</p><p>先从技术视角来看一看目前数据中心用户是如何使用软件的。</p><h1 id="容器化与容器分发"><a href="#容器化与容器分发" class="headerlink" title="容器化与容器分发"></a>容器化与容器分发</h1><h3 id="是什么？"><a href="#是什么？" class="headerlink" title="是什么？"></a>是什么？</h3><p>容器化技术是一种将应用程序及其依赖项打包到独立、可移植的容器(Containers)中的技术。‌这些容器可以在任何基础设施上稳定运行(实际上依赖于底层OS的硬件架构支持能力)，具有较高的可移植性和资源效率。‌容器化利用‌Linux的‌<code>Namespaces</code>和‌<code>Cgroups</code>技术对应用程序进程进行隔离和资源限制。<code>Namespaces</code>提供隔离的环境，使得应用进程只能访问其容器内的资源，而<code>Cgroups</code>则限制分配给进程的资源。因此，容器实际上是在宿主机上运行的特殊进程，多个容器共享同一个操作系统内核。</p><h3 id="有什么价值？"><a href="#有什么价值？" class="headerlink" title="有什么价值？"></a>有什么价值？</h3><p>一款软件从开发到测试再到发布和使用，会经手的各种开发人员众多，各个开发人员之间的环境配置不一致会大大降低开发效率和软件质量，开发和测试之间的”在我这跑的好好的，到你那怎么就跑不了“的问题时常发生。容器化将应用程序代码与应用程序运行时所需的相关配置文件、库和依赖项捆绑在一起，因此较好的消除了这一问题。而对于软件用户，尤其是开源软件用户来说，最期望的软件分发方式就是”开箱即用“，本质上与前面介绍的开发与测试之间的故事类似，因此容器化软件和服务分发，已经成为主流。根据<a href="https://www.forrester.com/press-newsroom/the-state-of-cloud-in-north-america-2022/">Forrester</a>的一份调研报告，2022年已经有超过74%的美国企业将其业务部署在容器中了。尤其是CI&#x2F;CD服务，绝大多数能够容器化的已经都进行了容器化改造，极大的提高了开发效率。</p><h3 id="怎么分发？"><a href="#怎么分发？" class="headerlink" title="怎么分发？"></a>怎么分发？</h3><p>容器化和进程隔离的概念尽管已经诞生了几十年，但直到2013年开源Docker的出现(掐指一算，也已经超过10年了)，才加速了这项技术的采用。作为容器技术的极大推动者，Dokcer官方的容器镜像仓库(Registry)<code>Dockerhub</code>自然也成了容器镜像官方仓库的事实标准。<br><img src="/2024/10/19/container-insight/docker-statistic.png" alt="Dockerhub Statistics"><br>Dockerhub目前承载了超过1400万个容器镜像，月度容器下载量达110亿次，数据相当可怕。尽管还有许多类似的容器镜像分发渠道，如RedHat Quay、Google GCR等，但DockerHub仍是最主流的那一个。</p><h3 id="有哪些类型？"><a href="#有哪些类型？" class="headerlink" title="有哪些类型？"></a>有哪些类型？</h3><p>DockerHub根据镜像质量及镜像发布者情况将DockerHub上的镜像分为四个级别，三个可信(Trusted Contents)内容级别以及一个普通内容级别：<br><img src="/2024/10/19/container-insight/image-types.png" alt="Dockerhub Image Types"></p><ul><li>Docker Official Images: 由Docker官方维护的高质量容器镜像，大多是云原生业务所需的最常用镜像(OS基础镜像、中间件、微服务网关、KV数据库等)，并提供可靠的CVE维护。当前总数171个。</li><li>Docker Verified Publisher: 背后有DockerHub认证的商业公司支持的高质量容器镜像(应用软件本身可以是开源或免费的)，此类镜像约9000个。</li><li>Docker-Sponsored Open Source: DockerHub认可并提供支持的开源项目，这些项目镜像由对应的开源社区或项目提供维护和支持，相较于普通镜像，DockerHub为这些开源社区和项目提供容器镜像的存储和下载流量支持。</li><li>普通镜像：普通的由个人或组织创建的镜像，不享有任何特殊的支持，所能使用的DockerHub存储空间和下载带宽都非常受限。</li></ul><h3 id="哪些镜像用户量最大？"><a href="#哪些镜像用户量最大？" class="headerlink" title="哪些镜像用户量最大？"></a>哪些镜像用户量最大？</h3><p> DockerHub上用户量(下载量)最大的镜像来自于<code>Docker Official Images</code>，或者说只要用量足够大，Docker就会把它收编到<code>Official Images</code>以便保证质量和用户体验。目前前十名的镜像包括：Nginx、Memcached、Busybox、Alpine、Ubuntu、Redis、Postgres、Python、Node.js、http，这些镜像的前五名的周下载量都在1000万以上，后几名也有百万的周下载量。不难看出，都是最为常见的中间件和开发者工具。其中有两个操作系统基础镜像，显得尤为瞩目，<code>Alpine</code>和<code>Ubuntu</code>，其他一些知名的操作系统如<code>Debian</code>和<code>CentOS</code>排名仅在20左右，周下载量也仅有50万左右。<code>Ubuntu</code>自不必说，在开发者中的声望一直很高，那么另一个操作系统镜像<code>Alpine</code>又有什么独到之处，能够和<code>Ubuntu</code>分庭抗礼？</p><p>P.S. <code>Docker Official Images</code>所提供的应用容器镜像所使用的基础系统镜像(Base Image)实际只有两种:1）<code>Alpine Linux</code> 2）<code>Bookworm(Debian 12)</code>，足以见得<code>Alpine</code> 镜像在DockerHub的重要性。</p><h1 id="Alpine-Linux"><a href="#Alpine-Linux" class="headerlink" title="Alpine Linux"></a>Alpine Linux</h1><p>TBA</p>]]>
    </content>
    <id>https://zhengzhenyu.github.io/2024/10/19/container-insight/</id>
    <link href="https://zhengzhenyu.github.io/2024/10/19/container-insight/"/>
    <published>2024-10-19T12:44:38.000Z</published>
    <summary>
      <![CDATA[<p>“首因效应“，是指人对人或事物的第一次印象对今后续认知的影响，虽然这些第一印象并非总是正确的，但却是最鲜明、最牢固的，并且决定着对于其认知的进程。软件分发(Software Distribution)是软件开发的最后一个环节，也是终端用户(End]]>
    </summary>
    <title>Does Size Matters? From Alpine to Distroless, thoughts on OS distribution.</title>
    <updated>2026-02-12T01:23:30.968Z</updated>
  </entry>
</feed>
