<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>O&#39;s World</title>
  
  <subtitle>Mr. O 的分享小站，分享有趣的事情</subtitle>
  <link href="https://ooo.run/atom.xml" rel="self"/>
  
  <link href="https://ooo.run/"/>
  <updated>2026-06-13T15:26:37.485Z</updated>
  <id>https://ooo.run/</id>
  
  <author>
    <name>Mr. O</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>快讯：美国政府对 Claude Fable 5 发布禁令</title>
    <link href="https://ooo.run/post/us-government-ban-claude-fable-5.html"/>
    <id>https://ooo.run/post/us-government-ban-claude-fable-5.html</id>
    <published>2026-06-13T03:22:24.000Z</published>
    <updated>2026-06-13T15:26:37.485Z</updated>
    
    <content type="html"><![CDATA[<h2 id="AI-的“数字铁幕”落下：Claude-Fable-5-遭出口管制限制"><a href="#AI-的“数字铁幕”落下：Claude-Fable-5-遭出口管制限制" class="headerlink" title="AI 的“数字铁幕”落下：Claude Fable 5 遭出口管制限制"></a>AI 的“数字铁幕”落下：Claude Fable 5 遭出口管制限制</h2><p>北京时间 2026 年 6 月 13 日，在 Claude Fable 5 仅仅上线三天后，Anthropic 在社交平台上发布了一则令人震惊的 <a href="https://x.com/AnthropicAI/status/2065597531644743999">声明</a>： <strong>因美国政府援引国家安全授权下达出口管制指令，要求禁止任何外国公民访问 Fable 5 和 Mythos 5</strong> ，公司为确保合规，不得不紧急对所有客户全面停用这两款模型。</p><blockquote><p>The US government, citing national security authorities, has issued an export control directive to suspend all access to Fable 5 and Mythos 5 by any foreign national, whether inside or outside the United States, including foreign national Anthropic employees.</p><p>The net effect of this order is that we must abruptly disable Fable 5 and Mythos 5 for all our customers to ensure compliance.</p><p>Access to all other Claude models is not affected.</p></blockquote><p>在 Anthropic 的官网 <a href="https://www.anthropic.com/news/fable-mythos-access">声明</a> 中表示，美国政府是基于发现了一种绕过或破解 Fable 5 限制（即大模型的 <strong>越狱</strong>）的方法而发布了禁令。</p><p>虽然其他 Claude 模型暂未受波及，但这则短短的声明，却无异于在生成式 AI 领域投下了一枚重磅炸弹。它不仅宣告了一个特定模型的下线，更标志着整个行业底层逻辑的根本性转折。</p><h2 id="核心剧变：从“算力霸权”向“模型主权”的转移"><a href="#核心剧变：从“算力霸权”向“模型主权”的转移" class="headerlink" title="核心剧变：从“算力霸权”向“模型主权”的转移"></a>核心剧变：从“算力霸权”向“模型主权”的转移</h2><p>过去，大国博弈与行业竞争的焦点一直停留在硬件层面——谁掌握了最先进的 GPU 和芯片制造工艺，谁就扼住了 AI 发展的咽喉。</p><p>然而，Fable 5 事件证明，到了 2026 年，最先进 AI 的核心价值已经从“训练基础设施”正式转移到了“模型本身”。当一个前沿模型具备了以下特征时，它便不再仅仅是商业软件，而是名副其实的国家战略级技术资产：</p><ul><li>顶级的科研与科学发现能力</li><li>深度的自主编程与除错能力</li><li>长周期的复杂任务规划与执行能力</li><li>自动化的网络攻防与安全渗透能力</li></ul><p>美国政府对 Fable 5 的封锁逻辑，与当年限制高端芯片出口的逻辑如出一辙。因为在国家安全视域下，具备上述能力的软件，其杀伤力与重要性已与尖端军工硬件无异。</p><h2 id="致命悖论：Anthropic-被自己的“安全牌”反噬"><a href="#致命悖论：Anthropic-被自己的“安全牌”反噬" class="headerlink" title="致命悖论：Anthropic 被自己的“安全牌”反噬"></a>致命悖论：Anthropic 被自己的“安全牌”反噬</h2><p>这起事件中最具戏剧性的一幕，在于 Anthropic 一直以来的人设。作为业界最著名的“AI 安全路线”倡导者，Anthropic 经常在公开场合展示其模型在网络安全、生物科学辅助、自动化代理等领域的强大乃至“危险”的能力。</p><p>这种策略在商业上曾无比成功：</p><ul><li>对投资者： 证明了自己拥有逼近 AGI 的技术实力。</li><li>对监管者： 彰显了企业对潜在风险的重视与透明度。</li></ul><p><strong>但也这是一个致命的悖论</strong>：<br>为了证明模型足够强大，企业必须充分展示其潜在的破坏力；而当这种危险性被反复强调并被广泛认可后，必然会精准踩中监管机构的红线。Anthropic 近期对 Fable 5 和 Mythos 5 危险能力的渲染，最终成为了促使监管重锤落下的核心背书。</p><h2 id="行业新常态：互联网“无国界时代”的终结"><a href="#行业新常态：互联网“无国界时代”的终结" class="headerlink" title="行业新常态：互联网“无国界时代”的终结"></a>行业新常态：互联网“无国界时代”的终结</h2><p>Fable 5 的下线只是一个开始，它真正值得警惕的是其开创的政策先例。如果政府可以直接介入并限制特定 AI 模型的全球访问权，那么我们很可能即将迎来一个“技术边境”森严的新时代。</p><p>未来，全球统一的 AI 软件服务模式可能走向瓦解，取而代之的将是高度分化的访问机制：</p><ul><li><strong>基于国籍的隔离</strong>： 不同国家的用户只能访问被阉割或完全不同的模型版本。  </li><li><strong>模块化的权限管控</strong>： 科研、编程等关键能力模块受到严格的许可限制。</li><li><strong>身份层级分化</strong>： 个人用户、普通企业与具有特殊资质的科研&#x2F;政府机构获得截然不同的访问权限。</li></ul><p>过去的焦点是<strong>数据主权</strong>，而未来的核心博弈将是<strong>模型主权</strong>。</p><h2 id="悬念犹存：GPT-5-5-会步其后尘吗？"><a href="#悬念犹存：GPT-5-5-会步其后尘吗？" class="headerlink" title="悬念犹存：GPT-5.5 会步其后尘吗？"></a>悬念犹存：GPT-5.5 会步其后尘吗？</h2><p>面对 Claude 的遭遇，用户的焦虑很快蔓延至其竞争对手：OpenAI 的 GPT-5.5 会不会成为下一个管制目标？ 尤其是在 Anthropic 的官网 <a href="https://www.anthropic.com/news/fable-mythos-access">声明</a> 中包含了下面的内容：</p><blockquote><p>我们已经审查了一份据信是政府下达该指令依据的报告。我们已经核实，报告中所展示的能力水平在其他模型（包括 OpenAI 的 GPT-5.5）中广泛存在，并且每天都在被维护系统安全的防御者们所使用。</p></blockquote><p>Anthropic 认为，这场风波本质上是一场误解。所谓“越狱”并非体现模型具备普遍性、高风险能力，而只是某些狭窄、非通用的漏洞；类似能力在其他公开模型中也普遍存在，并不应被单独放大为管制依据。</p><p>从声明全文来看，Anthropic 对相关管制政策持明确反对态度。其核心诉求显然是自救，而不是将其他竞争对手一并拖入困境。它真正希望推动的，是监管层重新评估 Claude Fable 5 的风险判断，并最终解除对其访问限制。</p><p>毕竟，如果两家 AI 巨头的旗舰模型都相继被限制，那将不只是某一家公司的危机，而可能成为整个技术开放生态的至暗时刻。</p><h2 id="结语：AI“开放时代”的落幕"><a href="#结语：AI“开放时代”的落幕" class="headerlink" title="结语：AI“开放时代”的落幕"></a>结语：AI“开放时代”的落幕</h2><p>回顾过去三年，大模型行业经历了一场狂飙突进的全球化盛宴。模型能力呈指数级跃升，使用成本不断逼近底线，全球用户几乎能够跨越地理界限，同步享受到人类最前沿的智慧结晶。</p><p>但 6 月 13 日的 Fable 5 事件，是一道冰冷的历史分水岭。</p><p>它宣告了先进 AI 正式脱离单纯的“消费级科技产品”范畴，被摆上了与核武器、航空航天、先进制程芯片同等的战略博弈棋盘。对于普通人而言，最大的震撼不在于某一个聊天窗口的暂时失效，而是我们终于看清了未来的残酷现实：</p><p>由技术全球化所构筑的“普惠 AI”乌托邦正在消散，取而代之的，是数字铁幕时代下，被权力、国籍和安全政策严格切割的智能世界。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;AI-的“数字铁幕”落下：Claude-Fable-5-遭出口管制限制&quot;&gt;&lt;a href=&quot;#AI-的“数字铁幕”落下：Claude-Fable-5-遭出口管制限制&quot; class=&quot;headerlink&quot; title=&quot;AI 的“数字铁幕”落下：Claude Fa</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="Claude Fable 5" scheme="https://ooo.run/tags/Claude-Fable-5/"/>
    
  </entry>
  
  <entry>
    <title>Nginx 还是 Caddy？一篇写给实际运维者的对比指南</title>
    <link href="https://ooo.run/post/nginx-vs-caddy.html"/>
    <id>https://ooo.run/post/nginx-vs-caddy.html</id>
    <published>2026-06-12T03:00:00.000Z</published>
    <updated>2026-06-12T08:02:54.277Z</updated>
    
    <content type="html"><![CDATA[<p>如果你要给一个网站、API 或者一堆容器选一个反向代理 &#x2F; Web 服务器，2026 年的今天你大概率会在 Nginx 和 Caddy 之间犹豫。这篇文章不站队，而是从配置体验、HTTPS、性能、生态、扩展性几个维度把两者掰开讲清楚，最后给出明确的选型建议。</p><h2 id="一句话认识两位选手"><a href="#一句话认识两位选手" class="headerlink" title="一句话认识两位选手"></a>一句话认识两位选手</h2><ul><li><strong>Nginx</strong>：2004 年诞生，C 语言编写，事件驱动架构的鼻祖级实现。占据全球 Web 服务器市场的头部份额，几乎是”反向代理”的代名词。</li><li><strong>Caddy</strong>：2015 年发布，Go 语言编写，主打”默认 HTTPS”和极简配置。Caddy 2 重写后以模块化架构和 JSON 配置 API 为核心。</li></ul><h2 id="配置体验：最直观的差距"><a href="#配置体验：最直观的差距" class="headerlink" title="配置体验：最直观的差距"></a>配置体验：最直观的差距</h2><p>先看一个最常见的需求：把 <code>example.com</code> 反向代理到本地 8080 端口，并启用 HTTPS。</p><p><strong>Caddy（Caddyfile，3 行）：</strong></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">example.com &#123;</span><br><span class="line">    reverse_proxy localhost:8080</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>证书自动申请、自动续期、HTTP 自动跳转 HTTPS——全部默认完成。</p><p><strong>Nginx（约 25 行 + certbot）：</strong></p><figure class="highlight nginx"><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></pre></td><td class="code"><pre><span class="line"><span class="section">server</span> &#123;</span><br><span class="line">    <span class="attribute">listen</span> <span class="number">80</span>;</span><br><span class="line">    <span class="attribute">server_name</span> example.com;</span><br><span class="line">    <span class="attribute">return</span> <span class="number">301</span> https://<span class="variable">$host</span><span class="variable">$request_uri</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="section">server</span> &#123;</span><br><span class="line">    <span class="attribute">listen</span> <span class="number">443</span> ssl http2;</span><br><span class="line">    <span class="attribute">server_name</span> example.com;</span><br><span class="line"></span><br><span class="line">    <span class="attribute">ssl_certificate</span>     /etc/letsencrypt/live/example.com/fullchain.pem;</span><br><span class="line">    <span class="attribute">ssl_certificate_key</span> /etc/letsencrypt/live/example.com/privkey.pem;</span><br><span class="line"></span><br><span class="line">    <span class="section">location</span> / &#123;</span><br><span class="line">        <span class="attribute">proxy_pass</span> http://localhost:8080;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> Host <span class="variable">$host</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Real-IP <span class="variable">$remote_addr</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Forwarded-For <span class="variable">$proxy_add_x_forwarded_for</span>;</span><br><span class="line">        <span class="attribute">proxy_set_header</span> X-Forwarded-Proto <span class="variable">$scheme</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>还需要额外跑 <code>certbot</code> 申请证书并配置定时续期。</p><p>但要公平地说：Nginx 的冗长换来的是<strong>显式与精细</strong>。<code>proxy_set_header</code> 每一行都看得见摸得着；而 Caddy 帮你做的事藏在默认值里，出问题时你需要知道它默认做了什么。对于配置规模庞大、需要精确控制每个 header、buffer、timeout 的场景，Nginx 的配置语言虽然啰嗦，但表达力和社区可参考的范例数量是压倒性的。</p><h2 id="HTTPS-与证书管理"><a href="#HTTPS-与证书管理" class="headerlink" title="HTTPS 与证书管理"></a>HTTPS 与证书管理</h2><p>这是 Caddy 的主场：</p><ul><li><strong>自动 HTTPS</strong>：通过 ACME（Let’s Encrypt &#x2F; ZeroSSL）自动签发、续期、轮换证书，包括 OCSP 装订，零配置。</li><li><strong>按需 TLS（On-Demand TLS）</strong>：在 TLS 握手时才为新域名签证书，是 SaaS 自定义域名（客户绑定自己的域名）场景的杀手锏。Nginx 体系要实现同样的效果通常得上 OpenResty + lua-resty-auto-ssl，复杂度完全不在一个量级。</li><li><strong>内部 CA</strong>：内置本地 CA，<code>localhost</code> 开发环境也能用受信任的 HTTPS。</li></ul><p>Nginx 这边，证书管理依赖外部工具（certbot、acme.sh、lego），工作得也很成熟，但本质上是”胶水方案”：多一个进程、多一个 cron、多一个 reload 钩子，多一处可能坏的地方。</p><h2 id="性能：差距比你想象的小"><a href="#性能：差距比你想象的小" class="headerlink" title="性能：差距比你想象的小"></a>性能：差距比你想象的小</h2><p>网络上流传”C 写的肯定比 Go 快”，实际测试中：</p><ul><li><strong>静态文件与常规反向代理</strong>：两者在绝大多数真实负载下吞吐量处于同一量级。Nginx 在极限 RPS 和内存占用上通常仍有优势（C + 精细的内存管理 vs Go runtime + GC），尤其是数十万并发连接的极端场景。</li><li><strong>尾延迟</strong>：Go 的 GC 在高压下可能带来轻微的 P99 抖动，但对绝大多数业务无感。</li><li><strong>HTTP&#x2F;3</strong>：两者都已支持 QUIC&#x2F;HTTP3，Caddy 默认启用，Nginx 需要显式配置。</li></ul><p>结论：<strong>除非你在做 CDN 边缘节点或单机要扛几十万并发，性能不应该是你们之间的决定因素。</strong> 瓶颈几乎总在上游应用，而不是代理层。</p><h2 id="运维与生态"><a href="#运维与生态" class="headerlink" title="运维与生态"></a>运维与生态</h2><table><thead><tr><th>维度</th><th>Nginx</th><th>Caddy</th></tr></thead><tbody><tr><td>配置热加载</td><td><code>nginx -s reload</code>，成熟可靠</td><td>Admin API 优雅热加载，零停机</td></tr><tr><td>动态配置</td><td>原生不支持，需 reload 或商业版&#x2F;OpenResty</td><td>内置 JSON Admin API，可编程修改运行时配置</td></tr><tr><td>文档与搜索答案</td><td>二十年积累，几乎任何问题都有现成答案</td><td>文档质量高但社区体量小得多</td></tr><tr><td>容器&#x2F;K8s 生态</td><td>ingress-nginx 等久经考验</td><td>有 Ingress Controller 但成熟度和采用率较低</td></tr><tr><td>扩展方式</td><td>C 模块（需重新编译）、OpenResty&#x2F;Lua、njs</td><td>Go 插件生态，<code>xcaddy</code> 一条命令编译定制版本</td></tr><tr><td>二进制分发</td><td>包管理器，模块依赖发行版</td><td>单一静态二进制，跨平台部署极其省心</td></tr><tr><td>商业支持</td><td>Nginx Plus（F5）</td><td>官方赞助&#x2F;商业授权</td></tr></tbody></table><p>几个值得展开的点：</p><ul><li><strong>扩展性</strong>：Caddy 的插件体验显著更好。<code>xcaddy build --with github.com/...</code> 一条命令就能编出带 Cloudflare DNS 验证、限流、安全模块的定制二进制。Nginx 编第三方 C 模块的痛苦，折腾过的人都懂（这也是 OpenResty 存在的原因）。</li><li><strong>配置即 API</strong>：Caddy 的本质是一个 JSON 配置引擎，Caddyfile 只是人类友好的前端。这让它天然适合被程序驱动——平台型产品动态增删站点不需要生成配置文件再 reload。</li><li><strong>久经考验</strong>：Nginx 的边缘案例处理、与各种奇怪客户端&#x2F;上游的兼容性，是二十年生产流量喂出来的。保守的大型生产环境选它，不会有人质疑。</li></ul><h2 id="选型建议"><a href="#选型建议" class="headerlink" title="选型建议"></a>选型建议</h2><p><strong>选 Caddy，如果你是：</strong></p><ul><li>个人项目、中小团队、初创公司——把省下来的证书运维时间拿去写业务</li><li>SaaS 平台需要客户自定义域名（On-Demand TLS 几乎是唯一省心方案）</li><li>需要通过 API 动态管理大量站点配置</li><li>团队没有专职运维，希望配置文件三行能看懂</li></ul><p><strong>选 Nginx，如果你是：</strong></p><ul><li>已有大量 Nginx 配置和团队经验——迁移收益撑不起迁移成本</li><li>极端高并发 &#x2F; 边缘节点 &#x2F; 对内存和尾延迟敏感的场景</li><li>重度依赖 Kubernetes ingress-nginx 或 OpenResty&#x2F;Lua 生态</li><li>需要 Nginx Plus 的商业特性与支持，或所在组织要求”最保守的选择”</li></ul><p><strong>也可以都要</strong>：不少团队用 Caddy 做边缘 TLS 终结（享受自动证书），后面挂 Nginx&#x2F;原有架构不动。架构上完全成立。</p><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>Nginx 和 Caddy 的关系，有点像 Vim 和 VS Code：前者无所不能但要求你懂它，后者把 90% 的常见需求做成了开箱即用。2026 年的今天，<strong>对于新项目我会默认从 Caddy 开始</strong>——直到遇到它解决不了的问题再换，而这一天对大多数项目来说不会到来。但如果你手里已经有一套运转良好的 Nginx，请记住运维界的第一定律：<strong>If it works, don’t fix it.</strong></p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;如果你要给一个网站、API 或者一堆容器选一个反向代理 &amp;#x2F; Web 服务器，2026 年的今天你大概率会在 Nginx 和 Caddy 之间犹豫。这篇文章不站队，而是从配置体验、HTTPS、性能、生态、扩展性几个维度把两者掰开讲清楚，最后给出明确的选型建议。&lt;/p</summary>
      
    
    
    
    <category term="教程" scheme="https://ooo.run/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Nginx" scheme="https://ooo.run/tags/Nginx/"/>
    
    <category term="Caddy" scheme="https://ooo.run/tags/Caddy/"/>
    
  </entry>
  
  <entry>
    <title>Anthropic 发布 Claude Fable 5：首个公开 Mythos-class 模型亮相，但充满限制</title>
    <link href="https://ooo.run/post/anthropic-releases-claude-fable-5.html"/>
    <id>https://ooo.run/post/anthropic-releases-claude-fable-5.html</id>
    <published>2026-06-10T02:04:34.000Z</published>
    <updated>2026-06-10T12:49:30.012Z</updated>
    
    <content type="html"><![CDATA[<h2 id="发布信息"><a href="#发布信息" class="headerlink" title="发布信息"></a>发布信息</h2><p>Anthropic 于美国时间 <strong>2026 年 6 月 9 日</strong> 宣布推出 <code>Claude Fable 5</code> 和 <code>Claude Mythos 5</code> 。其中，<strong>Claude Fable 5</strong> 被定位为 Anthropic 迄今 “最强的广泛发布模型” ，面向普通用户和开发者开放；Claude Mythos 5 则与 Fable 5 共享底层模型能力，但在部分安全限制上更少，当前仅向 Project Glasswing 中获批的网络安全防御方和基础设施合作伙伴有限开放。</p><p>Claude Fable 5 被 Anthropic 定位为面向最高能力需求的 Mythos-class 模型，能力层级高于现有 Opus 4.8，主要面向复杂推理、长周期智能体任务、软件工程、知识工作、视觉理解和科学研究等高难度场景。官方表示，在任务越长、越复杂的情况下，Fable 5 相比此前 Claude 模型的优势越明显。</p><h2 id="模型基准测试得分情况"><a href="#模型基准测试得分情况" class="headerlink" title="模型基准测试得分情况"></a>模型基准测试得分情况</h2><p>Anthropic 公布了 Claude Fable 5 与 Claude Mythos 5 在基准测试中的得分情况，表现出了全方位的优势：</p><p><img src="https://img.nep.me/ooo/claude-fable5-benchmark.webp" alt="claude-fable5-benchmark.webp"></p><h2 id="模型信息"><a href="#模型信息" class="headerlink" title="模型信息"></a>模型信息</h2><p>在开发者能力方面，Claude API 文档显示，Fable 5 的 API 模型 ID 为 claude-fable-5，支持 <strong>1M</strong> token 上下文窗口、最高 <strong>128K</strong> token 输出，并默认启用自适应思考能力。该模型自 2026 年 6 月 9 日起已在 Claude API、Claude Platform on AWS、Amazon Bedrock、Google Vertex AI 和 Microsoft Foundry 上正式可用。</p><p>价格方面可以查看表格对比，Claude Fable 5 和 Claude Mythos 5 的标准 API 价格约为 Claude Opus 4.8 的两倍；其中 Fable 5 在批量处理场景下价格减半。</p><table><thead><tr><th>模型</th><th align="right">标准输入价格</th><th align="right">标准输出价格</th><th align="right">批量输入价格</th><th align="right">批量输出价格</th></tr></thead><tbody><tr><td>Claude Fable 5</td><td align="right">10 美元</td><td align="right">50 美元</td><td align="right">5 美元</td><td align="right">25 美元</td></tr><tr><td>Claude Mythos 5</td><td align="right">10 美元</td><td align="right">50 美元</td><td align="right">暂未说明</td><td align="right">暂未说明</td></tr><tr><td>Claude Opus 4.8</td><td align="right">5 美元</td><td align="right">25 美元</td><td align="right">—</td><td align="right">—</td></tr></tbody></table><blockquote><p>表格价格为每 100 万 token 的计费标准，参考： <a href="https://platform.claude.com/docs/zh-CN/about-claude/pricing">模型定价 - Claude API Docs</a></p></blockquote><h2 id="限制信息"><a href="#限制信息" class="headerlink" title="限制信息"></a>限制信息</h2><h3 id="内置请求审核"><a href="#内置请求审核" class="headerlink" title="内置请求审核"></a>内置请求审核</h3><p>Claude Fable 5 的发布伴随更严格的安全机制。 Anthropic <a href="https://www.anthropic.com/news/claude-fable-5-mythos-5">表示</a>，若模型检测到涉及 <strong>网络安全、生物、化学或模型蒸馏</strong> 等高风险主题的请求，Claude Fable 5 可能不会直接回答，而是回退至 Claude Opus 4.8 或返回拒答结果。官方称，安全分类器在推出初期被有意调得较为保守，可能误伤部分无害请求；但 Anthropic 表示，超过 95% 的 Fable 会话不会触发回退。</p><h3 id="使用限制"><a href="#使用限制" class="headerlink" title="使用限制"></a>使用限制</h3><p>Anthropic 表示 Claude Fable 5 将在 <strong>6 月 9 日</strong> 至 <strong>6 月 22 日</strong> 期间包含在 Pro、Max、Team 和席位制 Enterprise 计划中；自 6 月 23 日起，除非容量允许延长，继续使用 Claude Fable 5 将需要消耗 <strong>usage credits</strong> 或是在 API 中进行调用，即需要额外付费才可以使用。</p><h3 id="数据留存与隐私限制"><a href="#数据留存与隐私限制" class="headerlink" title="数据留存与隐私限制"></a>数据留存与隐私限制</h3><p>由于 Anthropic 在新模型中引入了更强的安全监测机制，对使用数据的保存时间也存在限制，Claude API <a href="https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5">文档</a> 显示，Claude Fable 5 与 Claude Mythos 5 被列为 Covered Models，要求保留 30 天的使用数据，不支持零数据保留（ZDR）安排；不符合该要求的组织请求将返回 <code>400 invalid_request_error</code>。</p><h2 id="使用方法"><a href="#使用方法" class="headerlink" title="使用方法"></a>使用方法</h2><p>Claude Fable 5 模型在 Anthropic 的网页、API 与 Claude Code 中已立即可用，Claude Code 需要更新至 <code>v2.1.170</code> 以上的版本，如果打开 Claude 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 update</span><br></pre></td></tr></table></figure><p>然后运行 <code>/model</code> 即可切换，信息页面已显示了预计使用量消耗为 Opus 模型的 2 倍。</p><p><img src="https://img.nep.me/ooo/claude-fable5-model.webp" alt="claude-fable5-model.png"></p><h2 id="发布福利"><a href="#发布福利" class="headerlink" title="发布福利"></a>发布福利</h2><p>为了庆祝 Claude Fable 5 发布，Anthropic 对用户的 Claude 使用额度进行了临时重置，包括 5 小时使用限额和每周使用限额，让用户可以在新模型上线初期获得更多体验机会。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>总体来看，Claude Fable 5 的发布，标志着 Anthropic 开始把此前仅在受控项目中验证的 Mythos-class 能力推向大众市场。它的主要卖点不是更快或更便宜，而是在长上下文、复杂代码、知识工作和视觉任务中的更强上限。但与此同时，更高 API 价格、安全机制回退、订阅端临时开放机制，以及与安全监测相关的数据留存安排，也意味着企业和重度开发者在采用前需要重新评估成本、合规与产品体验。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;发布信息&quot;&gt;&lt;a href=&quot;#发布信息&quot; class=&quot;headerlink&quot; title=&quot;发布信息&quot;&gt;&lt;/a&gt;发布信息&lt;/h2&gt;&lt;p&gt;Anthropic 于美国时间 &lt;strong&gt;2026 年 6 月 9 日&lt;/strong&gt; 宣布推出 &lt;code&gt;Cla</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="AI" scheme="https://ooo.run/tags/AI/"/>
    
    <category term="Claude" scheme="https://ooo.run/tags/Claude/"/>
    
    <category term="Claude Fable 5" scheme="https://ooo.run/tags/Claude-Fable-5/"/>
    
  </entry>
  
  <entry>
    <title>赛博菩萨：Cloudflare 免费账户可用服务详情</title>
    <link href="https://ooo.run/post/cloudflare-free-tier.html"/>
    <id>https://ooo.run/post/cloudflare-free-tier.html</id>
    <published>2026-06-08T07:55:14.000Z</published>
    <updated>2026-06-12T07:52:24.301Z</updated>
    
    <content type="html"><![CDATA[<h3 id="Cloudflare-免费级别服务全景：从-DNS-CDN-到-Workers-全栈边缘平台"><a href="#Cloudflare-免费级别服务全景：从-DNS-CDN-到-Workers-全栈边缘平台" class="headerlink" title="Cloudflare 免费级别服务全景：从 DNS&#x2F;CDN 到 Workers 全栈边缘平台"></a>Cloudflare 免费级别服务全景：从 DNS&#x2F;CDN 到 Workers 全栈边缘平台</h3><blockquote><p>适用对象：个人开发者、独立产品、开源项目、中小团队 PoC、低成本出海&#x2F;全球访问场景  </p></blockquote><blockquote><p>重要提醒：免费额度、区域可用性、服务条款和滥用限制会变化。本文基于公开页面整理，生产上线前请以 Cloudflare 与竞品的官方定价&#x2F;限制页面为准。</p></blockquote><hr><h2 id="一句话结论"><a href="#一句话结论" class="headerlink" title="一句话结论"></a>一句话结论</h2><p>Cloudflare 的免费级别已经不只是“免费 CDN”。它更像一套覆盖 <strong>域名 DNS、TLS、基础 DDoS&#x2F;CDN&#x2F;WAF、静态托管、边缘函数、对象存储、Serverless 数据库、队列、表单&#x2F;机器人防护、网站分析、邮件转发、Zero Trust 访问、隧道、以及部分 AI 能力</strong> 的入门级互联网应用平台。</p><p>和 Vercel、Netlify、AWS、Fastly、Tailscale、ngrok、reCAPTCHA、hCaptcha 等竞品相比，Cloudflare Free 最大的优势是：<strong>免费服务覆盖面极广，很多能力天然集成在同一个边缘网络和控制台里</strong>。它的弱点也很明确：<strong>免费层没有商业级 SLA&#x2F;支持保障，部分额度是硬限制，复杂框架体验不一定比 Vercel&#x2F;Netlify 顺滑，重计算&#x2F;重数据库&#x2F;重媒体场景很快会撞上限制或需要付费。</strong></p><hr><h2 id="1-Cloudflare-免费级别能用什么？"><a href="#1-Cloudflare-免费级别能用什么？" class="headerlink" title="1. Cloudflare 免费级别能用什么？"></a>1. Cloudflare 免费级别能用什么？</h2><p>下面按使用场景整理。具体限额建议上线前再次核对官方文档。</p><h3 id="1-1-网站基础设施：DNS、TLS、CDN、DDoS"><a href="#1-1-网站基础设施：DNS、TLS、CDN、DDoS" class="headerlink" title="1.1 网站基础设施：DNS、TLS、CDN、DDoS"></a>1.1 网站基础设施：DNS、TLS、CDN、DDoS</h3><table><thead><tr><th>服务</th><th>免费层可用能力</th><th>适合场景</th><th>注意点</th></tr></thead><tbody><tr><td>DNS</td><td>权威 DNS、API、DDoS 韧性、常见 DNS 管理能力</td><td>域名解析、海外访问优化、把域名接入 Cloudflare</td><td>高级流量调度、企业 DNS 功能可能需要付费</td></tr><tr><td>SSL&#x2F;TLS</td><td>免费 TLS 证书，自动签发与续期</td><td>为网站开启 HTTPS</td><td>复杂证书、自定义证书管理、高级证书能力可能要单独购买</td></tr><tr><td>CDN &#x2F; 缓存</td><td>通过 Cloudflare 代理缓存静态内容、降低源站压力</td><td>博客、官网、文档、静态资源</td><td>动态内容缓存、图片&#x2F;视频处理、Argo、负载均衡等属于更高级或付费能力</td></tr><tr><td>DDoS 基础防护</td><td>免费计划也包含基础的安全与性能保护</td><td>个人站点、小团队站点、开源项目</td><td>企业级 DDoS SLA、Bot 管理和高级安全策略需要更高套餐</td></tr></tbody></table><p><strong>评价：</strong> 如果只是把一个网站放到全球网络前面，Cloudflare Free 的门槛很低：改 DNS、开代理、开 HTTPS，就能获得基础加速和安全收益。这是 Cloudflare 免费层最有竞争力的入口能力。</p><hr><h3 id="1-2-Web-安全：WAF、规则、速率限制、热链防护"><a href="#1-2-Web-安全：WAF、规则、速率限制、热链防护" class="headerlink" title="1.2 Web 安全：WAF、规则、速率限制、热链防护"></a>1.2 Web 安全：WAF、规则、速率限制、热链防护</h3><p>Cloudflare WAF 相关文档显示，免费计划可用的安全能力包括但不限于：</p><ul><li>WAF 自定义规则；</li><li>1 条 Rate Limiting 规则；</li><li>Free Managed Ruleset；</li><li>Email Obfuscation；</li><li>Hotlink Protection；</li><li>IP Access Rules；</li><li>User Agent Blocking；</li><li>Zone Lockdown；</li><li>Security Analytics；</li><li>采样的 Security Events 日志。</li></ul><p><strong>适合场景：</strong></p><ul><li>个人网站防爬、防热链；</li><li>小型 API 做基础速率限制；</li><li>WordPress、文档站、营销站做基础 WAF；</li><li>在没有预算采购独立 WAF 的情况下先建立安全底线。</li></ul><p><strong>注意点：</strong> 免费层是“够用的基础防护”，不是完整的企业级 Web 安全平台。Bot Management、更多高级托管规则、更多速率限制、高级日志和安全分析通常要升级。</p><hr><h3 id="1-3-前端托管：Cloudflare-Pages"><a href="#1-3-前端托管：Cloudflare-Pages" class="headerlink" title="1.3 前端托管：Cloudflare Pages"></a>1.3 前端托管：Cloudflare Pages</h3><p>Cloudflare Pages 是免费层里非常值得关注的一项服务，适合静态站、Jamstack、文档站、落地页、前端应用和轻量全栈项目。</p><table><thead><tr><th>项目</th><th>免费层常见额度&#x2F;能力</th></tr></thead><tbody><tr><td>站点数量</td><td>官方页面显示所有计划支持 unlimited sites</td></tr><tr><td>seats &#x2F; 团队成员</td><td>官方页面显示所有计划支持 unlimited seats</td></tr><tr><td>请求数与带宽</td><td>官方页面显示 Pages 所有计划支持 unlimited requests &#x2F; bandwidth</td></tr><tr><td>构建次数</td><td>Free：500 builds &#x2F; month</td></tr><tr><td>并发构建</td><td>Free：1 concurrent build</td></tr><tr><td>自定义域名</td><td>Free：每个项目 100 个 custom domains</td></tr><tr><td>文件数量</td><td>Free：每个站点 20,000 files</td></tr><tr><td>单个静态资源</td><td>25 MiB；更大文件建议使用 R2</td></tr><tr><td>Pages Functions</td><td>按 Workers 计费&#x2F;计量；Free 层计入 Workers Free 配额</td></tr><tr><td>静态资产请求</td><td>Workers&#x2F;Pages 静态资产请求免费且不限量</td></tr></tbody></table><p><strong>适合场景：</strong></p><ul><li>个人博客、知识库、开源文档；</li><li>公司官网、产品落地页；</li><li>React&#x2F;Vue&#x2F;Svelte&#x2F;Astro&#x2F;Hugo 等静态构建项目；</li><li>带少量 API 的前端项目，例如表单提交、Webhook、登录回调。</li></ul><p><strong>和 Vercel &#x2F; Netlify 的差异：</strong></p><ul><li>Cloudflare Pages 的免费静态资源请求和带宽口径非常慷慨，适合流量不稳定的静态站；</li><li>Vercel 对 Next.js 的开发体验通常更强，尤其是 Next.js 原生功能、预览部署、生态集成；</li><li>Netlify 的表单、部署工作流、插件生态成熟，但免费层采用信用额度模型，需要关注 credit 消耗。</li></ul><hr><h3 id="1-4-边缘函数：Cloudflare-Workers"><a href="#1-4-边缘函数：Cloudflare-Workers" class="headerlink" title="1.4 边缘函数：Cloudflare Workers"></a>1.4 边缘函数：Cloudflare Workers</h3><p>Workers 是 Cloudflare 开发者平台的核心。免费层当前包括：</p><table><thead><tr><th>指标</th><th>Free 层典型额度</th></tr></thead><tbody><tr><td>请求</td><td>100,000 requests &#x2F; day</td></tr><tr><td>CPU 时间</td><td>10 ms CPU &#x2F; invocation</td></tr><tr><td>单次 invocation 最大 CPU</td><td>文档中显示默认&#x2F;最大 CPU 限制，免费层以短 CPU 任务为主</td></tr><tr><td>Cron &#x2F; Queue Consumer</td><td>有单次运行时长限制</td></tr><tr><td>静态资产请求</td><td>免费且不限量</td></tr><tr><td>Workers Logs</td><td>Free：约 200,000 log events &#x2F; day，保留 3 天</td></tr></tbody></table><p><strong>适合场景：</strong></p><ul><li>API 网关、轻量接口、Webhook；</li><li>A&#x2F;B test、重定向、鉴权、Header 改写；</li><li>静态站旁边的少量动态逻辑；</li><li>代理第三方 API、做缓存、做边缘安全校验；</li><li>与 KV、D1、R2、Queues、Durable Objects 组合成轻量后端。</li></ul><p><strong>不适合：</strong></p><ul><li>长时间 CPU 计算；</li><li>大型后端单体迁移；</li><li>重任务、重数据库事务、复杂后台作业；</li><li>对 Node.js 运行时兼容性要求非常完整的项目。</li></ul><hr><h3 id="1-5-数据与存储：KV、D1、R2、Durable-Objects、Queues、Hyperdrive"><a href="#1-5-数据与存储：KV、D1、R2、Durable-Objects、Queues、Hyperdrive" class="headerlink" title="1.5 数据与存储：KV、D1、R2、Durable Objects、Queues、Hyperdrive"></a>1.5 数据与存储：KV、D1、R2、Durable Objects、Queues、Hyperdrive</h3><p>Cloudflare 的免费层已经可以搭出一个小型全栈应用。</p><table><thead><tr><th>服务</th><th>免费层核心额度&#x2F;能力</th><th>典型用途</th></tr></thead><tbody><tr><td>Workers KV</td><td>100,000 reads&#x2F;day、1,000 writes&#x2F;day、1,000 deletes&#x2F;day、1,000 list&#x2F;day、1 GB 存储</td><td>配置、缓存、Feature Flags、低频写入数据</td></tr><tr><td>D1</td><td>5M rows read&#x2F;day、100k rows written&#x2F;day、5 GB 存储</td><td>小型 SQLite Serverless 数据库、原型、轻量业务数据</td></tr><tr><td>R2</td><td>10 GB-month&#x2F;month、1M Class A ops&#x2F;month、10M Class B ops&#x2F;month、无互联网出口流量费</td><td>对象存储、图片&#x2F;附件、静态大文件、备份</td></tr><tr><td>Durable Objects</td><td>Free 可使用 SQLite-backed Durable Objects；请求、duration、SQL 读写和存储有免费限额</td><td>协作状态、聊天室、锁、会话、计数器</td></tr><tr><td>Queues</td><td>Free：10,000 operations&#x2F;day，24h retention</td><td>异步任务、削峰、事件处理</td></tr><tr><td>Hyperdrive</td><td>Free：100,000 database queries&#x2F;day</td><td>优化 Workers 访问外部数据库的连接与查询</td></tr></tbody></table><p><strong>架构建议：</strong></p><ul><li><strong>KV</strong> 用来读多写少，不要拿它做强一致数据库；</li><li><strong>D1</strong> 适合小型关系数据和原型，但要设计好索引和写入频率；</li><li><strong>R2</strong> 是 Cloudflare 免费层里对标 S3 的关键服务，尤其是“无出口流量费”对下载型场景很有吸引力；</li><li><strong>Queues</strong> 适合把用户请求和后台处理拆开；</li><li><strong>Durable Objects</strong> 适合需要按对象聚合状态的实时&#x2F;协作场景，但要理解它的编程模型；</li><li><strong>Hyperdrive</strong> 适合你已经有 Postgres&#x2F;MySQL 等外部数据库，希望从 Workers 更高效访问。</li></ul><hr><h3 id="1-6-机器人防护与隐私分析：Turnstile、Web-Analytics、Zaraz"><a href="#1-6-机器人防护与隐私分析：Turnstile、Web-Analytics、Zaraz" class="headerlink" title="1.6 机器人防护与隐私分析：Turnstile、Web Analytics、Zaraz"></a>1.6 机器人防护与隐私分析：Turnstile、Web Analytics、Zaraz</h3><table><thead><tr><th>服务</th><th>免费层能力</th><th>对标竞品</th></tr></thead><tbody><tr><td>Turnstile</td><td>Free：最多 20 widgets、所有 widget 类型、unlimited challenges、每 widget 10 个 hostname</td><td>Google reCAPTCHA、hCaptcha</td></tr><tr><td>Web Analytics</td><td>免费、隐私优先，不依赖 cookie&#x2F;localStorage&#x2F;client-side state，不做 fingerprinting</td><td>Google Analytics、Plausible、Fathom</td></tr><tr><td>Zaraz</td><td>所有 Cloudflare 用户可用；每账户每月 1,000,000 free Zaraz Events</td><td>Google Tag Manager、Segment、Tealium</td></tr></tbody></table><p><strong>评价：</strong></p><ul><li>Turnstile 很适合替换传统 CAPTCHA，减少用户体验损耗；</li><li>Web Analytics 适合只需要 PV、访客、来源、页面路径等轻量指标的站点；</li><li>Zaraz 适合把第三方脚本移到边缘执行，减少前端性能损耗。</li></ul><hr><h3 id="1-7-邮件转发：Email-Routing"><a href="#1-7-邮件转发：Email-Routing" class="headerlink" title="1.7 邮件转发：Email Routing"></a>1.7 邮件转发：Email Routing</h3><p>Email Routing 是一个免费的自定义域名邮件转发服务，可以把 <code>hello@example.com</code>、<code>support@example.com</code> 等地址转发到你的现有邮箱。Cloudflare 官方强调它不存储或访问邮件内容，并提供与 DNS 记录相关的配置。</p><p><strong>适合场景：</strong></p><ul><li>个人域名邮箱转发；</li><li>开源项目&#x2F;小产品的联系邮箱；</li><li>不想购买完整企业邮箱，但希望域名邮箱看起来更专业。</li></ul><p><strong>注意点：</strong> 它主要是转发，不是完整邮箱托管；发信、团队邮箱、归档、合规等能力仍需要 Gmail&#x2F;Google Workspace、Microsoft 365、Fastmail、Zoho Mail 等服务。</p><hr><h3 id="1-8-Zero-Trust、Access-与-Tunnel"><a href="#1-8-Zero-Trust、Access-与-Tunnel" class="headerlink" title="1.8 Zero Trust、Access 与 Tunnel"></a>1.8 Zero Trust、Access 与 Tunnel</h3><p>Cloudflare Zero Trust 免费层适合小团队和 PoC。官方页面将 Free Plan 标为 <code>$0 forever</code>，适合 50 人以下团队或企业 PoC；Cloudflare Access 可用于保护自托管、SaaS、非 Web 应用访问，减少传统 VPN 依赖。Cloudflare Tunnel 可用出站连接把源站接入 Cloudflare，避免暴露公网入站端口。</p><table><thead><tr><th>服务</th><th>免费层价值</th><th>对标竞品</th></tr></thead><tbody><tr><td>Cloudflare Access</td><td>保护内部应用、后台、预发布环境</td><td>Tailscale、Teleport、Okta、Google BeyondCorp 类方案</td></tr><tr><td>Cloudflare Tunnel</td><td>不暴露公网 IP&#x2F;端口，把内网服务安全接入 Cloudflare</td><td>ngrok、Tailscale Funnel、frp、localtunnel</td></tr></tbody></table><p><strong>适合场景：</strong></p><ul><li>保护 <code>/admin</code>、Grafana、内部工具、预发布环境；</li><li>家庭实验室&#x2F;NAS&#x2F;内网服务安全暴露；</li><li>替代简单 VPN 或跳板机；</li><li>临时演示本地服务。</li></ul><hr><h3 id="1-9-AI-相关：Workers-AI、AI-Gateway、AI-Search、Browser-Run、Workflows"><a href="#1-9-AI-相关：Workers-AI、AI-Gateway、AI-Search、Browser-Run、Workflows" class="headerlink" title="1.9 AI 相关：Workers AI、AI Gateway、AI Search、Browser Run、Workflows"></a>1.9 AI 相关：Workers AI、AI Gateway、AI Search、Browser Run、Workflows</h3><p>Cloudflare 免费层也开始覆盖 AI 与自动化相关能力。</p><table><thead><tr><th>服务</th><th>免费层能力</th><th>适合场景</th></tr></thead><tbody><tr><td>Workers AI</td><td>10,000 Neurons&#x2F;day 免费分配；超过需要 Workers Paid</td><td>小模型推理、嵌入、原型</td></tr><tr><td>AI Gateway</td><td>核心功能所有计划可用；Workers Free 有日志额度</td><td>多模型网关、缓存、速率限制、观测</td></tr><tr><td>AI Search</td><td>open beta 期间在限制内免费；有实例数、文件数、查询数、爬取页数等限制</td><td>文档搜索、站内搜索、RAG 原型</td></tr><tr><td>Browser Run</td><td>Free：10 minutes&#x2F;day、3 concurrent browsers</td><td>浏览器自动化、截图、网页抓取原型</td></tr><tr><td>Workflows</td><td>Free 可用，配额与 Workers Free 相关，并有存储限制</td><td>多步骤任务、状态机、异步编排</td></tr></tbody></table><p><strong>注意点：</strong> AI Search 仍处在 beta&#x2F;变化较快的阶段；AI 推理、模型选择、日志保留、数据合规和供应商成本都需要单独评估。</p><hr><h3 id="1-10-免费层不等于所有-Cloudflare-服务都免费"><a href="#1-10-免费层不等于所有-Cloudflare-服务都免费" class="headerlink" title="1.10 免费层不等于所有 Cloudflare 服务都免费"></a>1.10 免费层不等于所有 Cloudflare 服务都免费</h3><p>下列能力通常不应被当作“免费核心能力”来规划：</p><ul><li>Argo Smart Routing；</li><li>Load Balancing；</li><li>Advanced Certificates；</li><li>Images、Stream 等媒体产品；</li><li>APO for WordPress；</li><li>高级 Bot Management；</li><li>企业级日志、SLA、支持；</li><li>Containers：官方定价页显示 Containers 在 Workers Paid 下计费，Free 不提供对应 CPU&#x2F;内存&#x2F;磁盘额度；</li><li>Vectorize：Cloudflare 文档页面存在“仅 Workers Paid 可用”的表述，同时表格也列出部分 Free 行，建议上线前特别核对，不要把它作为稳定免费的基础依赖。</li></ul><hr><h2 id="2-和竞品怎么对标？"><a href="#2-和竞品怎么对标？" class="headerlink" title="2. 和竞品怎么对标？"></a>2. 和竞品怎么对标？</h2><h3 id="2-1-Cloudflare-Pages-vs-Vercel-Hobby-vs-Netlify-Free"><a href="#2-1-Cloudflare-Pages-vs-Vercel-Hobby-vs-Netlify-Free" class="headerlink" title="2.1 Cloudflare Pages vs Vercel Hobby vs Netlify Free"></a>2.1 Cloudflare Pages vs Vercel Hobby vs Netlify Free</h3><table><thead><tr><th>维度</th><th>Cloudflare Pages Free</th><th>Vercel Hobby</th><th>Netlify Free</th></tr></thead><tbody><tr><td>核心定位</td><td>静态站 + 边缘函数 + 全球网络</td><td>个人项目、小型应用，Next.js 体验强</td><td>Jamstack 托管、部署工作流、插件生态</td></tr><tr><td>商业用途</td><td>需按 Cloudflare 条款确认具体使用</td><td>官方明确 Hobby 面向个人非商业项目</td><td>Free 可用于入门，但受 credit 限制</td></tr><tr><td>静态站流量</td><td>Pages 官方页面显示 unlimited requests &#x2F; bandwidth</td><td>有 edge request 等额度</td><td>以 credits 消耗为核心</td></tr><tr><td>构建</td><td>500 builds&#x2F;month，1 concurrent build</td><td>有项目、资源、函数等限制</td><td>300 credits&#x2F;month；生产构建会消耗 credits</td></tr><tr><td>函数</td><td>Pages Functions 计入 Workers Free：100k requests&#x2F;day</td><td>1M function invocations&#x2F;month 等 Hobby 限额</td><td>Functions&#x2F;compute 消耗 credits</td></tr><tr><td>框架体验</td><td>通用静态和边缘平台强</td><td>Next.js 原生体验通常最好</td><td>Jamstack 工作流成熟</td></tr></tbody></table><p><strong>选择建议：</strong></p><ul><li>你要 <strong>低成本静态站、文档站、全球访问、免费带宽口径更宽</strong>：优先 Cloudflare Pages；</li><li>你要 <strong>Next.js 最新能力、预览部署、Vercel 生态</strong>：优先 Vercel；</li><li>你要 <strong>Netlify Forms、插件、成熟 Jamstack 工作流</strong>：优先 Netlify。</li></ul><hr><h3 id="2-2-Cloudflare-Workers-vs-AWS-Lambda"><a href="#2-2-Cloudflare-Workers-vs-AWS-Lambda" class="headerlink" title="2.2 Cloudflare Workers vs AWS Lambda"></a>2.2 Cloudflare Workers vs AWS Lambda</h3><table><thead><tr><th>维度</th><th>Cloudflare Workers Free</th><th>AWS Lambda Free Tier</th></tr></thead><tbody><tr><td>免费请求</td><td>100,000 requests&#x2F;day</td><td>1M requests&#x2F;month</td></tr><tr><td>免费计算</td><td>10ms CPU&#x2F;invocation，偏轻量边缘任务</td><td>400,000 GB-seconds&#x2F;month，通用函数模型</td></tr><tr><td>部署位置</td><td>Cloudflare 全球边缘网络</td><td>AWS 区域 + 可结合 CloudFront&#x2F;API Gateway</td></tr><tr><td>运行模型</td><td>Web 标准、边缘运行时、冷启动体验好</td><td>语言&#x2F;runtime 丰富，AWS 生态完整</td></tr><tr><td>成本结构</td><td>与 Cloudflare 数据&#x2F;边缘服务集成</td><td>Lambda 之外还可能有 API Gateway、CloudFront、S3、WAF、日志等成本</td></tr></tbody></table><p><strong>选择建议：</strong></p><ul><li>API 网关、轻量业务逻辑、边缘改写、低延迟全球入口：Workers 很合适；</li><li>Python&#x2F;Java&#x2F;.NET、长一点的任务、复杂 AWS 资源联动：Lambda 更合适；</li><li>大规模生产系统：应按真实请求、CPU、日志、数据库、出口流量分别测算。</li></ul><hr><h3 id="2-3-Cloudflare-R2-vs-AWS-S3-CloudFront"><a href="#2-3-Cloudflare-R2-vs-AWS-S3-CloudFront" class="headerlink" title="2.3 Cloudflare R2 vs AWS S3 &#x2F; CloudFront"></a>2.3 Cloudflare R2 vs AWS S3 &#x2F; CloudFront</h3><p>Cloudflare R2 的免费层包含对象存储容量和操作次数额度，并且核心卖点是 <strong>无互联网出口流量费</strong>。AWS S3&#x2F;CloudFront 则是生态最成熟的组合：CloudFront 有持续可用的免费流量&#x2F;请求额度，S3 和 AWS Free Tier 的规则则会随账户新旧、credits、区域和服务政策变化。</p><table><thead><tr><th>维度</th><th>Cloudflare R2 Free</th><th>AWS S3 + CloudFront</th></tr></thead><tbody><tr><td>对象存储</td><td>10 GB&#x2F;month 免费</td><td>AWS Free Tier&#x2F;credits&#x2F;区域规则需按账户确认</td></tr><tr><td>出口流量</td><td>R2 官方强调无出口流量费用</td><td>CloudFront 有每月免费额度，超出按区域&#x2F;请求计费</td></tr><tr><td>生态</td><td>与 Workers、Pages 集成很顺</td><td>AWS SDK、IAM、企业生态最成熟</td></tr><tr><td>适合</td><td>下载站、图片&#x2F;附件、边缘应用存储</td><td>企业云架构、复杂权限、数据湖、合规生态</td></tr></tbody></table><p><strong>选择建议：</strong></p><ul><li>个人产品、大文件下载、静态资源分发：R2 免费层很有吸引力；</li><li>企业级对象存储治理、跨 AWS 服务集成、复杂 IAM：S3 仍是事实标准。</li></ul><hr><h3 id="2-4-Cloudflare-CDN-WAF-vs-AWS-CloudFront-WAF、Fastly"><a href="#2-4-Cloudflare-CDN-WAF-vs-AWS-CloudFront-WAF、Fastly" class="headerlink" title="2.4 Cloudflare CDN&#x2F;WAF vs AWS CloudFront&#x2F;WAF、Fastly"></a>2.4 Cloudflare CDN&#x2F;WAF vs AWS CloudFront&#x2F;WAF、Fastly</h3><table><thead><tr><th>维度</th><th>Cloudflare Free</th><th>AWS CloudFront&#x2F;WAF</th><th>Fastly</th></tr></thead><tbody><tr><td>CDN 入门成本</td><td>免费接入 DNS&#x2F;CDN&#x2F;TLS&#x2F;基础安全</td><td>CloudFront 有每月免费额度</td><td>有 free tier，超出按量</td></tr><tr><td>WAF</td><td>免费层有基础 WAF 与规则能力</td><td>AWS WAF 按 Web ACL、规则、请求计费</td><td>高级边缘能力强，多为付费</td></tr><tr><td>易用性</td><td>控制台统一，DNS 接入简单</td><td>AWS 体系复杂但能力强</td><td>工程能力强，适合高要求 CDN</td></tr><tr><td>适合</td><td>低成本综合防护</td><td>AWS 原生架构</td><td>高性能、可编程边缘、企业 CDN</td></tr></tbody></table><p><strong>选择建议：</strong></p><ul><li>预算为零且要 DNS+TLS+CDN+基础 WAF 一体化：Cloudflare；</li><li>已经深度 AWS 化：CloudFront + AWS WAF；</li><li>有专业 CDN 调优&#x2F;边缘计算需求：Fastly；</li></ul><hr><h3 id="2-5-Cloudflare-Access-Tunnel-vs-Tailscale-vs-ngrok"><a href="#2-5-Cloudflare-Access-Tunnel-vs-Tailscale-vs-ngrok" class="headerlink" title="2.5 Cloudflare Access&#x2F;Tunnel vs Tailscale vs ngrok"></a>2.5 Cloudflare Access&#x2F;Tunnel vs Tailscale vs ngrok</h3><table><thead><tr><th>维度</th><th>Cloudflare Access&#x2F;Tunnel</th><th>Tailscale Free</th><th>ngrok Free</th></tr></thead><tbody><tr><td>主要用途</td><td>保护内部应用、通过 Tunnel 暴露服务且隐藏源站</td><td>个人&#x2F;小团队 Mesh VPN</td><td>本地开发临时公网访问</td></tr><tr><td>免费层</td><td>Zero Trust Free 适合 50 人以下&#x2F;PoC；Tunnel 可免费创建</td><td>Personal 计划免费，最多 6 users，设备数宽松</td><td>3 online endpoints、1GB data transfer out、20k HTTP requests&#x2F;month、3 agents</td></tr><tr><td>访问模型</td><td>基于 Cloudflare 边缘、身份策略、应用访问</td><td>设备到设备的私有网络</td><td>公网隧道&#x2F;开发者入口</td></tr><tr><td>适合</td><td>内部 Web 应用、后台、Zero Trust 访问</td><td>个人设备、家庭实验室、私网互联</td><td>Demo、本地 webhook、临时测试</td></tr></tbody></table><p><strong>选择建议：</strong></p><ul><li>要把内部 Web 应用挂到域名下并加身份验证：Cloudflare Access + Tunnel；</li><li>要像 VPN 一样访问所有设备：Tailscale；</li><li>要快速给本地服务一个公网地址做 demo：ngrok。</li></ul><hr><h3 id="2-6-Turnstile-vs-reCAPTCHA-vs-hCaptcha"><a href="#2-6-Turnstile-vs-reCAPTCHA-vs-hCaptcha" class="headerlink" title="2.6 Turnstile vs reCAPTCHA vs hCaptcha"></a>2.6 Turnstile vs reCAPTCHA vs hCaptcha</h3><table><thead><tr><th>维度</th><th>Cloudflare Turnstile Free</th><th>Google reCAPTCHA Essentials</th><th>hCaptcha Basic</th></tr></thead><tbody><tr><td>免费额度</td><td>20 widgets、unlimited challenges</td><td>免费 10,000 assessments&#x2F;month，超出若未开 billing 会报错</td><td>免费最高 100,000 requests&#x2F;month</td></tr><tr><td>用户体验</td><td>主打无感&#x2F;低摩擦验证</td><td>生态广、Google 风控能力强</td><td>独立 CAPTCHA 服务，兼容性较好</td></tr><tr><td>适合</td><td>表单、防注册、防滥用、登录保护</td><td>已经使用 Google Cloud&#x2F;需要 reCAPTCHA 风控</td><td>需要 CAPTCHA 替代方案</td></tr></tbody></table><p><strong>选择建议：</strong></p><ul><li>个人站、小产品、希望减少 CAPTCHA 打扰：Turnstile 优先；</li><li>已经在 Google 风控体系内：reCAPTCHA；</li><li>想要 reCAPTCHA 替代品且额度口径合适：hCaptcha。</li></ul><hr><h2 id="3-Cloudflare-Free-最适合的-8-类项目"><a href="#3-Cloudflare-Free-最适合的-8-类项目" class="headerlink" title="3. Cloudflare Free 最适合的 8 类项目"></a>3. Cloudflare Free 最适合的 8 类项目</h2><ol><li><p><strong>个人博客 &#x2F; 文档站 &#x2F; 开源项目官网</strong><br>Pages + DNS + SSL + Web Analytics 基本够用。</p></li><li><p><strong>静态营销站 &#x2F; 落地页</strong><br>Pages + CDN + Turnstile + Email Routing 可以快速上线。</p></li><li><p><strong>小型 API &#x2F; Webhook 网关</strong><br>Workers + KV&#x2F;D1 + WAF + Rate Limiting 适合低成本运行。</p></li><li><p><strong>轻量全栈应用原型</strong><br>Pages 前端、Workers API、D1 数据库、R2 文件存储、Queues 异步任务。</p></li><li><p><strong>下载型资源站 &#x2F; 附件存储</strong><br>R2 的免费容量和无出口流量费很有价值，但要关注操作次数和滥用规则。</p></li><li><p><strong>内部工具 &#x2F; 后台管理系统</strong><br>Cloudflare Access + Tunnel 可以减少公开暴露源站的风险。</p></li><li><p><strong>反垃圾表单 &#x2F; 注册保护</strong><br>Turnstile 替代传统 CAPTCHA，用户体验通常更轻。</p></li><li><p><strong>AI 应用原型</strong><br>Workers AI + AI Gateway + AI Search beta 可以做轻量 RAG、模型代理、观测和缓存。</p></li></ol><hr><h2 id="4-免费层使用建议"><a href="#4-免费层使用建议" class="headerlink" title="4. 免费层使用建议"></a>4. 免费层使用建议</h2><h3 id="4-1-架构上尽量“静态优先、边缘补动态”"><a href="#4-1-架构上尽量“静态优先、边缘补动态”" class="headerlink" title="4.1 架构上尽量“静态优先、边缘补动态”"></a>4.1 架构上尽量“静态优先、边缘补动态”</h3><p>Cloudflare Free 最适合静态内容和轻量边缘逻辑。能静态生成的页面尽量静态生成；能缓存的数据尽量缓存；动态 API 尽量保持短小。</p><h3 id="4-2-把大文件放-R2，不要塞进-Pages-构建产物"><a href="#4-2-把大文件放-R2，不要塞进-Pages-构建产物" class="headerlink" title="4.2 把大文件放 R2，不要塞进 Pages 构建产物"></a>4.2 把大文件放 R2，不要塞进 Pages 构建产物</h3><p>Pages 单个静态资源大小有限制，更大的图片、附件、下载包建议用 R2，并通过 Workers 或自定义域名分发。</p><h3 id="4-3-KV、D1、Durable-Objects-分工要清楚"><a href="#4-3-KV、D1、Durable-Objects-分工要清楚" class="headerlink" title="4.3 KV、D1、Durable Objects 分工要清楚"></a>4.3 KV、D1、Durable Objects 分工要清楚</h3><ul><li>KV：读多写少、最终一致、配置&#x2F;缓存；</li><li>D1：关系数据、小型业务表；</li><li>Durable Objects：按对象聚合状态、协作、锁、会话；</li><li>Queues：异步任务和削峰；</li><li>R2：对象&#x2F;文件。</li></ul><h3 id="4-4-生产前做额度预算"><a href="#4-4-生产前做额度预算" class="headerlink" title="4.4 生产前做额度预算"></a>4.4 生产前做额度预算</h3><p>至少估算：</p><ul><li>每日 Workers 请求量；</li><li>每次请求 CPU 时间；</li><li>D1 行读取&#x2F;写入；</li><li>KV 读写次数；</li><li>R2 Class A &#x2F; Class B 操作；</li><li>Pages 构建次数；</li><li>Turnstile widget 数；</li><li>Web Analytics&#x2F;Zaraz 事件量；</li><li>Zero Trust 用户数。</li></ul><h3 id="4-5-免费层要有“降级策略”"><a href="#4-5-免费层要有“降级策略”" class="headerlink" title="4.5 免费层要有“降级策略”"></a>4.5 免费层要有“降级策略”</h3><p>免费额度一旦触顶，常见结果不是自动扩容，而是报错、暂停、等待下个周期或需要升级。建议：</p><ul><li>给 Workers 设置告警；</li><li>对写入操作做限流；</li><li>对日志采样；</li><li>大流量静态内容强缓存；</li><li>有付费升级预案；</li><li>关键业务不要只依赖免费层。</li></ul><hr><h2 id="5-总结：Cloudflare-Free-的真实定位"><a href="#5-总结：Cloudflare-Free-的真实定位" class="headerlink" title="5. 总结：Cloudflare Free 的真实定位"></a>5. 总结：Cloudflare Free 的真实定位</h2><p>Cloudflare 免费级别的价值在于：它让开发者用接近零成本获得一套现代互联网应用的基础能力：</p><ul><li>域名解析；</li><li>HTTPS；</li><li>CDN；</li><li>DDoS 与基础 WAF；</li><li>静态托管；</li><li>边缘函数；</li><li>Serverless 数据库和对象存储；</li><li>队列与状态对象；</li><li>Bot 防护；</li><li>隐私友好的分析；</li><li>邮件转发；</li><li>Zero Trust 访问；</li><li>AI 原型能力。</li></ul><p>如果你的目标是 <strong>个人项目、开源项目、小型商业验证、低成本全球部署、快速 PoC</strong>，Cloudflare Free 是当前最值得优先评估的平台之一。</p><p>如果你的目标是 <strong>商业 SLA、完整支持、复杂后端、重计算、大规模数据库、重媒体处理、复杂合规、安全审计、企业采购</strong>，Cloudflare 免费层应该只作为入口方案，后续需要升级到 paid plan 或选择更合适的云服务组合。</p><hr><h2 id="6-资料来源与核对入口"><a href="#6-资料来源与核对入口" class="headerlink" title="6. 资料来源与核对入口"></a>6. 资料来源与核对入口</h2><h3 id="Cloudflare-官方资料"><a href="#Cloudflare-官方资料" class="headerlink" title="Cloudflare 官方资料"></a>Cloudflare 官方资料</h3><ul><li>Cloudflare Free Plan: <a href="https://www.cloudflare.com/plans/free/">https://www.cloudflare.com/plans/free/</a></li><li>Cloudflare Plans FAQ: <a href="https://www.cloudflare.com/plans/faq/">https://www.cloudflare.com/plans/faq/</a></li><li>Cloudflare DNS: <a href="https://www.cloudflare.com/products/dns/">https://www.cloudflare.com/products/dns/</a></li><li>Cloudflare SSL: <a href="https://www.cloudflare.com/products/ssl/">https://www.cloudflare.com/products/ssl/</a></li><li>Cloudflare WAF Docs: <a href="https://developers.cloudflare.com/waf/">https://developers.cloudflare.com/waf/</a></li><li>Cloudflare Pages Limits: <a href="https://developers.cloudflare.com/pages/platform/limits/">https://developers.cloudflare.com/pages/platform/limits/</a></li><li>Cloudflare Pages Functions Pricing: <a href="https://developers.cloudflare.com/pages/functions/pricing/">https://developers.cloudflare.com/pages/functions/pricing/</a></li><li>Cloudflare Pages Product Page: <a href="https://www.cloudflare-cn.com/developer-platform/products/pages/">https://www.cloudflare-cn.com/developer-platform/products/pages/</a></li><li>Cloudflare Workers Pricing: <a href="https://developers.cloudflare.com/workers/platform/pricing/">https://developers.cloudflare.com/workers/platform/pricing/</a></li><li>Workers KV Pricing: <a href="https://developers.cloudflare.com/kv/platform/pricing/">https://developers.cloudflare.com/kv/platform/pricing/</a></li><li>Cloudflare D1 Pricing: <a href="https://developers.cloudflare.com/d1/platform/pricing/">https://developers.cloudflare.com/d1/platform/pricing/</a></li><li>Cloudflare R2 Pricing: <a href="https://developers.cloudflare.com/r2/pricing/">https://developers.cloudflare.com/r2/pricing/</a></li><li>Durable Objects Pricing: <a href="https://developers.cloudflare.com/durable-objects/platform/pricing/">https://developers.cloudflare.com/durable-objects/platform/pricing/</a></li><li>Queues Pricing: <a href="https://developers.cloudflare.com/queues/platform/pricing/">https://developers.cloudflare.com/queues/platform/pricing/</a></li><li>Hyperdrive Pricing: <a href="https://developers.cloudflare.com/hyperdrive/platform/pricing/">https://developers.cloudflare.com/hyperdrive/platform/pricing/</a></li><li>Turnstile Plans: <a href="https://developers.cloudflare.com/turnstile/plans/">https://developers.cloudflare.com/turnstile/plans/</a></li><li>Cloudflare Web Analytics: <a href="https://www.cloudflare.com/web-analytics/">https://www.cloudflare.com/web-analytics/</a></li><li>Zaraz Pricing: <a href="https://developers.cloudflare.com/zaraz/pricing/">https://developers.cloudflare.com/zaraz/pricing/</a></li><li>Email Routing: <a href="https://www.cloudflare.com/products/email-routing/">https://www.cloudflare.com/products/email-routing/</a></li><li>Cloudflare Access: <a href="https://www.cloudflare.com/sase/products/access/">https://www.cloudflare.com/sase/products/access/</a></li><li>Cloudflare Zero Trust Network Access: <a href="https://www.cloudflare-cn.com/products/zero-trust/zero-trust-network-access/">https://www.cloudflare-cn.com/products/zero-trust/zero-trust-network-access/</a></li><li>Cloudflare Tunnel: <a href="https://www.cloudflare-cn.com/products/tunnel/">https://www.cloudflare-cn.com/products/tunnel/</a></li><li>Workers AI Pricing: <a href="https://developers.cloudflare.com/workers-ai/platform/pricing/">https://developers.cloudflare.com/workers-ai/platform/pricing/</a></li><li>AI Gateway Pricing: <a href="https://developers.cloudflare.com/ai-gateway/reference/pricing/">https://developers.cloudflare.com/ai-gateway/reference/pricing/</a></li><li>AI Search Limits &amp; Pricing: <a href="https://developers.cloudflare.com/ai-search/platform/limits-pricing/">https://developers.cloudflare.com/ai-search/platform/limits-pricing/</a></li><li>Browser Run Pricing: <a href="https://developers.cloudflare.com/browser-run/pricing/">https://developers.cloudflare.com/browser-run/pricing/</a></li><li>Workflows Pricing: <a href="https://developers.cloudflare.com/workflows/reference/pricing/">https://developers.cloudflare.com/workflows/reference/pricing/</a></li><li>Containers Pricing: <a href="https://developers.cloudflare.com/containers/pricing/">https://developers.cloudflare.com/containers/pricing/</a></li></ul><h3 id="竞品资料"><a href="#竞品资料" class="headerlink" title="竞品资料"></a>竞品资料</h3><ul><li>Vercel Hobby Plan: <a href="https://vercel.com/docs/plans/hobby">https://vercel.com/docs/plans/hobby</a></li><li>Netlify Pricing: <a href="https://www.netlify.com/pricing/">https://www.netlify.com/pricing/</a></li><li>Netlify Manage Billing &#x2F; Usage Limits: <a href="https://docs.netlify.com/manage-billing/overview/">https://docs.netlify.com/manage-billing/overview/</a></li><li>AWS Lambda Pricing: <a href="https://aws.amazon.com/lambda/pricing/">https://aws.amazon.com/lambda/pricing/</a></li><li>AWS Free Tier: <a href="https://aws.amazon.com/free/">https://aws.amazon.com/free/</a></li><li>AWS CloudFront Free Tier Announcement: <a href="https://aws.amazon.com/about-aws/whats-new/2021/11/aws-price-reduction-data-transfers-internet/">https://aws.amazon.com/about-aws/whats-new/2021/11/aws-price-reduction-data-transfers-internet/</a></li><li>AWS WAF Pricing: <a href="https://aws.amazon.com/waf/pricing/">https://aws.amazon.com/waf/pricing/</a></li><li>Fastly Pricing: <a href="https://www.fastly.com/pricing">https://www.fastly.com/pricing</a></li><li>Tailscale Pricing: <a href="https://tailscale.com/pricing">https://tailscale.com/pricing</a></li><li>ngrok Pricing: <a href="https://ngrok.com/pricing">https://ngrok.com/pricing</a></li><li>Google reCAPTCHA Billing: <a href="https://docs.cloud.google.com/recaptcha/docs/billing-information">https://docs.cloud.google.com/recaptcha/docs/billing-information</a></li><li>hCaptcha Plans: <a href="https://www.hcaptcha.com/plans">https://www.hcaptcha.com/plans</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;h3 id=&quot;Cloudflare-免费级别服务全景：从-DNS-CDN-到-Workers-全栈边缘平台&quot;&gt;&lt;a href=&quot;#Cloudflare-免费级别服务全景：从-DNS-CDN-到-Workers-全栈边缘平台&quot; class=&quot;headerlink&quot; title=&quot;</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Cloudflare" scheme="https://ooo.run/tags/Cloudflare/"/>
    
  </entry>
  
  <entry>
    <title>UI 设计动画词汇表：用专业术语精准描述你想要的动效</title>
    <link href="https://ooo.run/post/animation-cheatsheet.html"/>
    <id>https://ooo.run/post/animation-cheatsheet.html</id>
    <published>2026-06-01T17:00:00.000Z</published>
    <updated>2026-06-01T17:08:58.305Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><blockquote><p>当你想让 AI 帮你实现一段动画时，最大的障碍往往不是技术，而是”词不达意”。你脑子里有画面，却说不出它叫什么。这篇文章整理了一套 Web 动画的通用词汇——掌握它们，你就能用一个词替代一整段含糊的描述，让人（和 AI）一听就懂。</p></blockquote><p>做动画这件事，难的从来不是写几行 CSS 或调一个库，而是<strong>知道自己到底想要什么</strong>，并能精准地把它说出来。</p><p>很多人提需求时只能说”让它动得自然一点””加个酷炫的过渡”,这种描述既无法落地，也无法沟通。而真正懂行的人会说:”这里用一个 ease-out 的 scale in,配合 stagger 入场;切换时做 shared element transition。”——同样一句话,后者把模糊的感觉变成了可执行的方案。</p><p>下面这套词汇,按场景分门别类,涵盖了 UI 动画中绝大多数常见模式。建议收藏,提需求或写 prompt 时随手对照。</p><p><img src="https://img.nep.me/ooo/cover-animation-vocabulary.webp" alt="cover-animation-vocabulary.png"></p><hr><h2 id="一、入场与退场（Entrances-Exits）"><a href="#一、入场与退场（Entrances-Exits）" class="headerlink" title="一、入场与退场（Entrances &amp; Exits）"></a>一、入场与退场（Entrances &amp; Exits）</h2><p>元素如何出现、如何消失。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>淡入 &#x2F; 淡出</td><td>Fade in &#x2F; Fade out</td><td>通过改变透明度（opacity）让元素出现或消失</td></tr><tr><td>滑入</td><td>Slide in</td><td>元素从屏幕外（左、右、上、下）滑入画面</td></tr><tr><td>缩放入场</td><td>Scale in</td><td>元素从小到大地”长”出来，通常搭配淡入</td></tr><tr><td>弹入</td><td>Pop in</td><td>元素出现时带一点过冲，像”弹”进位置</td></tr><tr><td>揭示</td><td>Reveal</td><td>内容逐渐揭开，常通过动画化 <code>clip-path</code> 或遮罩实现</td></tr><tr><td>进入 &#x2F; 退出</td><td>Enter &#x2F; Exit</td><td>元素被添加到屏幕或移除时播放的那段动画</td></tr></tbody></table><h2 id="二、编排与时序（Sequencing-Timing）"><a href="#二、编排与时序（Sequencing-Timing）" class="headerlink" title="二、编排与时序（Sequencing &amp; Timing）"></a>二、编排与时序（Sequencing &amp; Timing）</h2><p>如何协调多个元素、多个瞬间。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>关键帧</td><td>Keyframes</td><td>动画中定义的若干节点（0%、50%、100%），浏览器填补其间过程</td></tr><tr><td>插值 &#x2F; 补间</td><td>Interpolation &#x2F; Tween</td><td>在起止值之间生成所有中间帧，让运动连续</td></tr><tr><td>错峰</td><td>Stagger</td><td>多元素一个接一个地动，彼此留延迟，形成瀑布感</td></tr><tr><td>编排</td><td>Orchestration</td><td>刻意安排多段动画时序，使其像一个统一的整体动作</td></tr><tr><td>延迟</td><td>Delay</td><td>动画开始前的等待时间</td></tr><tr><td>时长</td><td>Duration</td><td>一段动画持续多久</td></tr><tr><td>填充模式</td><td>Fill mode</td><td>动画前后是否保留首帧或末帧样式（如 <code>forwards</code>）</td></tr><tr><td>分步动画</td><td>Stepped animation</td><td>被切分成若干离散步骤的动画，比如倒计时器</td></tr></tbody></table><h2 id="三、移动与变换（Movement-Transforms）"><a href="#三、移动与变换（Movement-Transforms）" class="headerlink" title="三、移动与变换（Movement &amp; Transforms）"></a>三、移动与变换（Movement &amp; Transforms）</h2><p>改变元素的位置、大小或角度。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>位移</td><td>Translate</td><td>沿 X 轴或 Y 轴移动元素</td></tr><tr><td>缩放</td><td>Scale</td><td>让元素变大或变小</td></tr><tr><td>旋转</td><td>Rotate</td><td>让元素绕某个点旋转</td></tr><tr><td>斜切</td><td>Skew</td><td>沿 X&#x2F;Y 轴倾斜元素，使其偏离矩形形状</td></tr><tr><td>3D 倾斜 &#x2F; 翻转</td><td>3D tilt &#x2F; Flip</td><td>在 3D 空间旋转（<code>rotateX</code> &#x2F; <code>rotateY</code>），增加纵深感</td></tr><tr><td>透视</td><td>Perspective</td><td>3D 效果强弱；值越小纵深越夸张，仿佛观者更近</td></tr><tr><td>变换原点</td><td>Transform origin</td><td>缩放或旋转所围绕的锚点</td></tr><tr><td>原点感知动画</td><td>Origin-aware animation</td><td>元素从触发源”长”出来，如弹出层从按钮处展开而非自身中心</td></tr></tbody></table><h2 id="四、状态间的过渡（Transitions-Between-States）"><a href="#四、状态间的过渡（Transitions-Between-States）" class="headerlink" title="四、状态间的过渡（Transitions Between States）"></a>四、状态间的过渡（Transitions Between States）</h2><p>把一个状态、视图或元素连接到另一个。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>交叉淡化</td><td>Crossfade</td><td>一个元素淡出的同时，另一个在同位置淡入</td></tr><tr><td>连续性过渡</td><td>Continuity transition</td><td>视觉连接”之前&#x2F;之后”以保持方向感，如同一矩形放大缩小</td></tr><tr><td>形变</td><td>Morph</td><td>一个形状平滑变成另一个，典型如灵动岛</td></tr><tr><td>共享元素过渡</td><td>Shared element transition</td><td>元素从一个位置移动并变形到另一处，如缩略图展开成卡片</td></tr><tr><td>布局动画</td><td>Layout animation</td><td>尺寸或位置变化时平滑动到新位置，而非直接跳过去</td></tr><tr><td>手风琴 &#x2F; 折叠</td><td>Accordion &#x2F; Collapse</td><td>区块平滑展开收起高度，以显示或隐藏内容</td></tr><tr><td>方向感知过渡</td><td>Direction-aware transition</td><td>前进与后退时内容朝相反方向滑动，让导航有方向感</td></tr></tbody></table><h2 id="五、滚动（Scroll）"><a href="#五、滚动（Scroll）" class="headerlink" title="五、滚动（Scroll）"></a>五、滚动（Scroll）</h2><p>与滚动或视图切换绑定的动效。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>滚动揭示</td><td>Scroll reveal</td><td>元素进入视口时淡入或滑入到位</td></tr><tr><td>滚动驱动动画</td><td>Scroll-driven animation</td><td>动画进度直接与滚动位置挂钩</td></tr><tr><td>视差</td><td>Parallax</td><td>滚动时背景与前景以不同速度移动，营造纵深感</td></tr><tr><td>页面过渡</td><td>Page transition</td><td>从一个页面或路由导航到另一个时播放的动画</td></tr><tr><td>视图过渡</td><td>View transition</td><td>浏览器在两个状态或页面间做形变，连接共享元素</td></tr></tbody></table><h2 id="六、反馈与交互（Feedback-Interaction）"><a href="#六、反馈与交互（Feedback-Interaction）" class="headerlink" title="六、反馈与交互（Feedback &amp; Interaction）"></a>六、反馈与交互（Feedback &amp; Interaction）</h2><p>回应用户的操作。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>悬停效果</td><td>Hover effect</td><td>光标移到元素上时的视觉变化</td></tr><tr><td>按压 &#x2F; 点按反馈</td><td>Press &#x2F; Tap feedback</td><td>点击时元素微微缩小，带来实体感</td></tr><tr><td>长按确认</td><td>Hold to confirm</td><td>用户按住按钮时进度逐渐填满</td></tr><tr><td>拖拽</td><td>Drag</td><td>抓住元素拖动，松手后常带惯性</td></tr><tr><td>拖拽排序</td><td>Drag to reorder</td><td>拖动列表条目重排，其余条目自动让位</td></tr><tr><td>滑动消除</td><td>Swipe to dismiss</td><td>把元素拖出屏幕来关闭，如抽屉或 toast</td></tr><tr><td>橡皮筋效果</td><td>Rubber-banding</td><td>拖动超界时的阻力与回弹，即 iOS 过度滚动手感</td></tr><tr><td>抖动 &#x2F; 摇摆</td><td>Shake &#x2F; Wiggle</td><td>快速左右晃动，提示出错或输入被拒</td></tr><tr><td>涟漪</td><td>Ripple</td><td>从点按处扩散出的圆形，确认这次点击</td></tr></tbody></table><h2 id="七、缓动（Easing）"><a href="#七、缓动（Easing）" class="headerlink" title="七、缓动（Easing）"></a>七、缓动（Easing）</h2><p>速度在动画过程中如何变化。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>缓动</td><td>Easing</td><td>动画加速或减速的节奏</td></tr><tr><td>缓出</td><td>Ease-out</td><td>先快后慢。多数 UI 与响应用户操作的动画默认用它</td></tr><tr><td>缓入</td><td>Ease-in</td><td>先慢后快。通常应避免，易显迟钝</td></tr><tr><td>缓入缓出</td><td>Ease-in-out</td><td>慢—快—慢。适合屏幕上元素从 A 到 B 的移动</td></tr><tr><td>线性</td><td>Linear</td><td>匀速。UI 中应避免，只留给加载转圈或跑马灯</td></tr><tr><td>三次贝塞尔</td><td>Cubic-bezier</td><td>自定义的缓动曲线，用于精确控制</td></tr><tr><td>非对称缓动</td><td>Asymmetric easing</td><td>加减速节奏不同的曲线，比对称曲线更显灵动</td></tr></tbody></table><h2 id="八、弹簧动画（Spring-Animations）"><a href="#八、弹簧动画（Spring-Animations）" class="headerlink" title="八、弹簧动画（Spring Animations）"></a>八、弹簧动画（Spring Animations）</h2><p>以物理为基础的运动，是固定时长缓动之外的选择。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>弹簧</td><td>Spring</td><td>由张力、质量、阻尼驱动的运动，而非固定时长</td></tr><tr><td>刚度 &#x2F; 张力</td><td>Stiffness &#x2F; Tension</td><td>弹簧拉向目标的力度，越高越干脆</td></tr><tr><td>阻尼</td><td>Damping</td><td>弹簧稳定的速度，越低弹跳震荡越多</td></tr><tr><td>质量</td><td>Mass</td><td>元素的重量感，越大动得越慢越笨重</td></tr><tr><td>弹跳</td><td>Bounce</td><td>会过冲再回落稳定的弹簧，增添趣味</td></tr><tr><td>感知时长</td><td>Perceptual duration</td><td>弹簧”感觉上”结束的时刻，尽管底层仍在微调收敛</td></tr><tr><td>动量</td><td>Momentum</td><td>携带速度的运动，尤其在拖拽或被打断后</td></tr><tr><td>速度</td><td>Velocity</td><td>元素运动多快、朝哪；被打断时弹簧将其带入下段动画</td></tr><tr><td>可打断动画</td><td>Interruptible animation</td><td>运动途中可被平滑改向，不必先播完</td></tr></tbody></table><h2 id="九、循环与环境动效（Looping-Ambient-Motion）"><a href="#九、循环与环境动效（Looping-Ambient-Motion）" class="headerlink" title="九、循环与环境动效（Looping &amp; Ambient Motion）"></a>九、循环与环境动效（Looping &amp; Ambient Motion）</h2><p>那些自顾自运行的动画。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>跑马灯</td><td>Marquee</td><td>文字或内容循环不断地滚动</td></tr><tr><td>循环</td><td>Loop</td><td>重复播放的动画，可固定次数或无限</td></tr><tr><td>交替</td><td>Alternate &#x2F; yoyo</td><td>每次迭代正放后再倒放，而非跳回开头</td></tr><tr><td>环绕</td><td>Orbit</td><td>一个元素沿连续轨迹围着另一个转</td></tr><tr><td>脉动</td><td>Pulse</td><td>轻柔重复的缩放或透明度变化，吸引注意</td></tr><tr><td>漂浮</td><td>Float</td><td>轻柔连续的上下浮动，让静止元素显得鲜活轻盈</td></tr><tr><td>待机动画</td><td>Idle animation</td><td>元素闲置等待交互时播放的细微动效</td></tr></tbody></table><h2 id="十、打磨与特效（Polish-Effects）"><a href="#十、打磨与特效（Polish-Effects）" class="headerlink" title="十、打磨与特效（Polish &amp; Effects）"></a>十、打磨与特效（Polish &amp; Effects）</h2><p>把”好”和”卓越”区分开来的小细节。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>模糊</td><td>Blur</td><td>用模糊滤镜柔化元素，或掩盖细微瑕疵</td></tr><tr><td>裁剪路径</td><td>Clip-path</td><td>把元素裁剪成形状，用于揭示、遮罩、前后对比滑块</td></tr><tr><td>遮罩</td><td>Mask</td><td>用形状或渐变隐藏&#x2F;显示局部，类似 clip-path 但边缘可柔和渐隐</td></tr><tr><td>前后对比滑块</td><td>Before &#x2F; after slider</td><td>可拖动分割线，在两张叠图间擦除切换以对比</td></tr><tr><td>线条描绘</td><td>Line drawing</td><td>SVG 路径像被隐形的笔逐渐勾勒出来</td></tr><tr><td>文字形变</td><td>Text morph</td><td>文字变化时逐字符做动画，引向新数值</td></tr><tr><td>骨架屏 &#x2F; 微光</td><td>Skeleton &#x2F; Shimmer</td><td>加载时的占位符，带一道流动的光泽</td></tr><tr><td>数字滚动</td><td>Number ticker</td><td>数字像翻滚一样递增到目标值</td></tr><tr><td>等宽数字</td><td>Tabular numbers</td><td>固定宽度数字，变化时不左右抖动；滚动数字&#x2F;计时器必备</td></tr><tr><td>打字机</td><td>Typewriter</td><td>文字一个字符一个字符地出现，像被敲打出来</td></tr></tbody></table><h2 id="十一、性能（Performance）"><a href="#十一、性能（Performance）" class="headerlink" title="十一、性能（Performance）"></a>十一、性能（Performance）</h2><p>是什么让动效保持顺滑而不卡顿。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>帧率</td><td>Frame rate &#x2F; FPS</td><td>每秒绘制帧数。60fps 是顺滑基准，新屏可达 120fps</td></tr><tr><td>卡顿</td><td>Jank</td><td>浏览器跟不上、丢帧时出现的可见顿挫</td></tr><tr><td>丢帧</td><td>Dropped frame</td><td>浏览器错过绘制某帧的时机，造成微小卡顿</td></tr><tr><td>合成</td><td>Compositing</td><td>让 GPU 在独立图层移动&#x2F;淡化元素，无需重排重绘</td></tr><tr><td>will-change</td><td>will-change</td><td>CSS 提示元素即将动起来，好提前提升到独立图层</td></tr><tr><td>布局抖动</td><td>Layout thrashing</td><td>动画化 <code>width</code>&#x2F;<code>height</code>&#x2F;<code>top</code>&#x2F;<code>left</code> 迫使每帧重排，引发卡顿</td></tr></tbody></table><h2 id="十二、值得了解的原则（Principles-to-Know）"><a href="#十二、值得了解的原则（Principles-to-Know）" class="headerlink" title="十二、值得了解的原则（Principles to Know）"></a>十二、值得了解的原则（Principles to Know）</h2><p>指导”何时动、如何动”的理念。</p><table><thead><tr><th>术语</th><th>英文</th><th>说明</th></tr></thead><tbody><tr><td>有目的的动画</td><td>Purposeful animation</td><td>动效应服务于功能——指引、反馈、揭示关系，而非纯装饰</td></tr><tr><td>预备动作</td><td>Anticipation</td><td>正式动作前朝反方向小小蓄势，暗示接下来要发生什么</td></tr><tr><td>跟随收尾</td><td>Follow-through</td><td>主体停止后部分元素继续运动稍后才稳定，增添重量感</td></tr><tr><td>挤压与拉伸</td><td>Squash &amp; stretch</td><td>运动时发生形变，传达重量、速度与柔韧性</td></tr><tr><td>感知性能</td><td>Perceived performance</td><td>恰当动画让界面感觉更快，即便实际并未变快</td></tr><tr><td>使用频率</td><td>Frequency of use</td><td>用户越频繁看到的动画，越应短而克制</td></tr><tr><td>空间一致性</td><td>Spatial consistency</td><td>元素在状态间保持身份与位置，让用户不跟丢东西去向</td></tr><tr><td>硬件加速</td><td>Hardware acceleration</td><td>动画化 <code>transform</code> 和 <code>opacity</code> 让 GPU 保持顺滑</td></tr><tr><td>减弱动效</td><td>Reduced motion</td><td>尊重用户 <code>prefers-reduced-motion</code> 设置，弱化或移除动效</td></tr></tbody></table><hr><h2 id="写在最后"><a href="#写在最后" class="headerlink" title="写在最后"></a>写在最后</h2><p>这套词汇真正的价值,不在于背下每一个名字,而在于它帮你建立起一种<strong>对动效的拆解视角</strong>:任何一段让你眼前一亮的交互,都可以被分解为”入场方式 + 缓动曲线 + 时序编排 + 收尾细节”的组合。</p><p>下次当你想说”让它动得高级一点”时,试着换成:”入场用 scale in 配 ease-out,多个元素 stagger 进场,hover 时加一点 spring 反馈”——你会发现,能说清楚的需求,才是能被实现的需求。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><p><a href="https://animations.dev/vocabulary">Animation Vocabulary</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;当你想让 AI 帮你实现一段动画时，最大的障碍往往不是技术，而是”词不达意”。你脑子里有画面，却说不出它叫什么。这</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="vibe coding" scheme="https://ooo.run/tags/vibe-coding/"/>
    
    <category term="animation" scheme="https://ooo.run/tags/animation/"/>
    
    <category term="UI" scheme="https://ooo.run/tags/UI/"/>
    
  </entry>
  
  <entry>
    <title>台北电脑展：Nvidia 发布面向 PC 的 RTX Spark CPU，信息一览</title>
    <link href="https://ooo.run/post/nvidia-announce-rtx-spark.html"/>
    <id>https://ooo.run/post/nvidia-announce-rtx-spark.html</id>
    <published>2026-06-01T08:40:44.000Z</published>
    <updated>2026-06-02T00:47:26.216Z</updated>
    
    <content type="html"><![CDATA[<p>2026 年 6 月 1 日，之前各大科技品牌官推的 <code>A new era of PC.</code> 谜底终于揭晓：</p><p>NVIDIA 在台北的 Computex 2026 正式发布了面向 PC 的 RTX Spark SoC ，定位为 AI PC 平台，面向轻薄本、AI 开发、创意工作站和高端 Windows PC。</p><h2 id="RTX-Spark-最新发布重点"><a href="#RTX-Spark-最新发布重点" class="headerlink" title="RTX Spark 最新发布重点"></a>RTX Spark 最新发布重点</h2><h3 id="参数信息"><a href="#参数信息" class="headerlink" title="参数信息"></a>参数信息</h3><table><thead><tr><th align="center">项目</th><th>规格</th></tr></thead><tbody><tr><td align="center"><strong>CPU</strong></td><td>Grace ARM，最高 <strong>20</strong> 核心</td></tr><tr><td align="center"><strong>GPU</strong></td><td>Blackwell RTX GPU， <strong>6144</strong> 个 CUDA Core</td></tr><tr><td align="center">内存</td><td>最高 <strong>128GB</strong> 统一内存</td></tr><tr><td align="center">AI 算力</td><td>1 PFLOPS（FP4）</td></tr><tr><td align="center">产品定位</td><td>AI PC &#x2F; 创意工作站 &#x2F; 高端 Windows PC</td></tr><tr><td align="center">上市时间</td><td>2026 年秋季</td></tr></tbody></table><p>GPU 的 6144 个 CUDA Core 规格接近桌面级 <strong>Nvidia RTX 5070</strong>，官方宣称 <code>FP4</code> AI 算力达到 <strong>1 PFLOPS</strong>， 略高于 RTX 5070 的 AI 算力指标。</p><h2 id="官方卖点"><a href="#官方卖点" class="headerlink" title="官方卖点"></a>官方卖点</h2><p>NVIDIA 宣称其是“史上能效最高的 PC 芯片”，发布会并未公布功耗信息，根据 <a href="https://giznewsdaily.com/nvidia-n1x-leak-reveals-limited-availability-in-2026/">泄漏信息</a>  显示 TDP 约为 65-120W。</p><p>NVIDIA 强调的卖点：  </p><ul><li>本地运行 AI Agent</li><li>本地推理保护隐私</li><li>视频编辑、3D 渲染、AI 创作加速</li><li>高性能但低功耗的轻薄本体验</li></ul><h2 id="产品信息"><a href="#产品信息" class="headerlink" title="产品信息"></a>产品信息</h2><p>微软、Dell、HP、Lenovo、ASUS 等厂商已宣布采用 RTX Spark 平台推出新的产品。</p><p><img src="https://img.nep.me/2026/06/rtx-spark-oem.webp" alt="rtx-spark-oem.jpeg"></p><p>其中微软宣布 <a href="https://www.microsoft.com/en-us/surface/devices/surface-laptop-ultra/">Surface Laptop Ultra</a> 将在 2026 年秋季上市</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>RTX Spark 标志着在云端 AI 生成占据统治地位的 NVIDIA 正式进入面向个人 AI 的 PC SoC 市场。</p><p>与传统 Windows PC 的 x86 + 独立显卡方案不同，RTX Spark 试图通过 ARM CPU、Blackwell GPU 与统一内存架构，打造类似 Apple Silicon 的高性能 AI PC 平台。</p><p>如果 NVIDIA 能兑现其能效与 AI 性能承诺，RTX Spark 有望成为未来高端 Windows AI PC 的重要选择。</p><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><ul><li><a href="https://blogs.nvidia.cn/blog/nvidia-microsoft-windows-pcs-agents-rtx-spark/">NVIDIA 携手微软，在个人 AI 时代重塑 Windows PC</a></li><li><a href="https://www.nvidia.cn/gtc/taipei/keynote/">NVIDIA GTC 台北 2026 主题演讲回放</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;2026 年 6 月 1 日，之前各大科技品牌官推的 &lt;code&gt;A new era of PC.&lt;/code&gt; 谜底终于揭晓：&lt;/p&gt;
&lt;p&gt;NVIDIA 在台北的 Computex 2026 正式发布了面向 PC 的 RTX Spark SoC ，定位为 AI PC 平</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="RTX" scheme="https://ooo.run/tags/RTX/"/>
    
    <category term="RTX Spark" scheme="https://ooo.run/tags/RTX-Spark/"/>
    
  </entry>
  
  <entry>
    <title>不使用插件让 Claude Code 显示额度使用情况</title>
    <link href="https://ooo.run/post/claude-code-show-5h-quota-without-plugin.html"/>
    <id>https://ooo.run/post/claude-code-show-5h-quota-without-plugin.html</id>
    <published>2026-05-30T05:40:19.000Z</published>
    <updated>2026-05-30T07:07:02.748Z</updated>
    
    <content type="html"><![CDATA[<p>Claude Code 不像 Codex 那样执行 <code>/statusline</code> 命令后提供选项直接快速调整可以显示的内容，执行 <code>/statusline</code> 其实是调用模型去分析然后修改 <code>~/.claude/settings.json</code> 文件。</p><h2 id="通过-Claude-Code-实现"><a href="#通过-Claude-Code-实现" class="headerlink" title="通过 Claude Code 实现"></a>通过 Claude Code 实现</h2><p>如果要让 Claude Code 显示 5H \ 7 Day 额度以及上下文窗口使用情况只需要使用执行一下下面的命令:</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">/statusline show 5h quota, 7d quota, context usage</span><br></pre></td></tr></table></figure><p>Claude Code 就会自己创建对应的脚本，更新 <code>~/.claude/settings.json</code></p><h2 id="手动实现-macOS"><a href="#手动实现-macOS" class="headerlink" title="手动实现 macOS"></a>手动实现 macOS</h2><blockquote><p>Claude Code 会调用模型分析需求并自动生成脚本，因此会消耗一次正常的模型请求额度。</p></blockquote><p>这里提供了我已经创建了的代码，还额外增加了 <code>git branch</code> 显示，可以直接复制使用</p><p>脚本依赖 <code>jq</code>，如果系统未安装，可以通过 Homebrew 安装：</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">brew install jq</span><br></pre></td></tr></table></figure><h3 id="创建-statusline-command-sh-文件"><a href="#创建-statusline-command-sh-文件" class="headerlink" title="创建 statusline-command.sh 文件"></a>创建 statusline-command.sh 文件</h3><p>首先需要创建 <code>~/.claude/statusline-command.sh</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><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><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#!/bin/sh</span></span><br><span class="line">input=$(<span class="built_in">cat</span>)</span><br><span class="line"></span><br><span class="line"><span class="comment"># Model display name</span></span><br><span class="line">model=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$input</span>&quot;</span> | jq -r <span class="string">&#x27;.model.display_name // empty&#x27;</span>)</span><br><span class="line"><span class="comment"># Git branch (skip optional locks to avoid hangs)</span></span><br><span class="line">branch=$(git -C <span class="string">&quot;<span class="subst">$(echo <span class="string">&quot;<span class="variable">$input</span>&quot;</span> | jq -r &#x27;.workspace.current_dir // empty&#x27;)</span>&quot;</span> \</span><br><span class="line">  --no-optional-locks symbolic-ref --short HEAD 2&gt;/dev/null)</span><br><span class="line"><span class="comment"># 5-hour quota</span></span><br><span class="line">five=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$input</span>&quot;</span> | jq -r <span class="string">&#x27;.rate_limits.five_hour.used_percentage // empty&#x27;</span>)</span><br><span class="line"><span class="comment"># 7-day quota</span></span><br><span class="line">week=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$input</span>&quot;</span> | jq -r <span class="string">&#x27;.rate_limits.seven_day.used_percentage // empty&#x27;</span>)</span><br><span class="line"><span class="comment"># Context used percentage</span></span><br><span class="line">ctx=$(<span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$input</span>&quot;</span> | jq -r <span class="string">&#x27;.context_window.used_percentage // empty&#x27;</span>)</span><br><span class="line"></span><br><span class="line">parts=<span class="string">&quot;&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -n <span class="string">&quot;<span class="variable">$model</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">  parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span><span class="variable">$&#123;model&#125;</span>&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -n <span class="string">&quot;<span class="variable">$branch</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">  [ -n <span class="string">&quot;<span class="variable">$parts</span>&quot;</span> ] &amp;&amp; parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>  &quot;</span></span><br><span class="line">  parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>branch:<span class="variable">$&#123;branch&#125;</span>&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -n <span class="string">&quot;<span class="variable">$five</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">  [ -n <span class="string">&quot;<span class="variable">$parts</span>&quot;</span> ] &amp;&amp; parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>  &quot;</span></span><br><span class="line">  parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>5h:<span class="subst">$(printf &#x27;%.0f&#x27; <span class="string">&quot;<span class="variable">$five</span>&quot;</span>)</span>%&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -n <span class="string">&quot;<span class="variable">$week</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">  [ -n <span class="string">&quot;<span class="variable">$parts</span>&quot;</span> ] &amp;&amp; parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>  &quot;</span></span><br><span class="line">  parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>7d:<span class="subst">$(printf &#x27;%.0f&#x27; <span class="string">&quot;<span class="variable">$week</span>&quot;</span>)</span>%&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span> [ -n <span class="string">&quot;<span class="variable">$ctx</span>&quot;</span> ]; <span class="keyword">then</span></span><br><span class="line">  [ -n <span class="string">&quot;<span class="variable">$parts</span>&quot;</span> ] &amp;&amp; parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>  &quot;</span></span><br><span class="line">  parts=<span class="string">&quot;<span class="variable">$&#123;parts&#125;</span>ctx:<span class="subst">$(printf &#x27;%.0f&#x27; <span class="string">&quot;<span class="variable">$ctx</span>&quot;</span>)</span>%&quot;</span></span><br><span class="line"><span class="keyword">fi</span></span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span> <span class="string">&quot;%s&quot;</span> <span class="string">&quot;<span class="variable">$parts</span>&quot;</span></span><br></pre></td></tr></table></figure><h3 id="编辑-claude-settings-json"><a href="#编辑-claude-settings-json" class="headerlink" title="编辑 ~&#x2F;.claude&#x2F;settings.json"></a>编辑 ~&#x2F;.claude&#x2F;settings.json</h3><p>然后编辑 <code>~/.claude/settings.json</code>，在最后 <code>}</code> 前加入下面的内容<br>macOS: </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></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;statusLine&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;command&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;sh /Users/&lt;User&gt;/.claude/statusline-command.sh&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span> </span><br></pre></td></tr></table></figure><p>需要把 <code>&lt;User&gt;</code> 替换为实际的路径</p><h2 id="手动实现：-Windows-Powershell7"><a href="#手动实现：-Windows-Powershell7" class="headerlink" title="手动实现： Windows + Powershell7"></a>手动实现： Windows + Powershell7</h2><h3 id="创建-statusline-command-ps1"><a href="#创建-statusline-command-ps1" class="headerlink" title="创建 statusline-command.ps1"></a>创建 statusline-command.ps1</h3><p>首先需要创建 <code>~/.claude/statusline-command.ps1</code> 文件，填入下面的内容：</p><figure class="highlight powershell"><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><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># statusline-command.ps1</span></span><br><span class="line"><span class="comment"># 读取 stdin 的 JSON 输入</span></span><br><span class="line"><span class="variable">$input_raw</span> = [<span class="type">Console</span>]::In.ReadToEnd()</span><br><span class="line"><span class="variable">$data</span> = <span class="variable">$input_raw</span> | <span class="built_in">ConvertFrom-Json</span></span><br><span class="line"></span><br><span class="line"><span class="variable">$parts</span> = [<span class="type">System.Collections.Generic.List</span>[<span class="built_in">string</span>]]::new()</span><br><span class="line"></span><br><span class="line"><span class="comment"># Model display name</span></span><br><span class="line"><span class="variable">$model</span> = <span class="variable">$data</span>.model.display_name</span><br><span class="line"><span class="keyword">if</span> (<span class="variable">$model</span>) &#123; <span class="variable">$parts</span>.Add(<span class="variable">$model</span>) &#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># Git branch (skip optional locks to avoid hangs)</span></span><br><span class="line"><span class="variable">$branch</span> = git <span class="literal">--no-optional-locks</span> symbolic<span class="literal">-ref</span> <span class="literal">--short</span> HEAD <span class="number">2</span>&gt;<span class="variable">$null</span></span><br><span class="line"><span class="keyword">if</span> (<span class="variable">$branch</span>) &#123; <span class="variable">$parts</span>.Add(<span class="string">&quot;branch:<span class="variable">$branch</span>&quot;</span>) &#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 5-hour quota（注意:用 $null 判断字段是否存在,使 0% 也能正常显示）</span></span><br><span class="line"><span class="variable">$five</span> = <span class="variable">$data</span>.rate_limits.five_hour.used_percentage</span><br><span class="line"><span class="keyword">if</span> (<span class="variable">$null</span> <span class="operator">-ne</span> <span class="variable">$five</span>) &#123;</span><br><span class="line">    <span class="variable">$parts</span>.Add(<span class="string">&quot;5h:&#123;0:N0&#125;%&quot;</span> <span class="operator">-f</span> [<span class="built_in">double</span>]<span class="variable">$five</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 7-day quota</span></span><br><span class="line"><span class="variable">$week</span> = <span class="variable">$data</span>.rate_limits.seven_day.used_percentage</span><br><span class="line"><span class="keyword">if</span> (<span class="variable">$null</span> <span class="operator">-ne</span> <span class="variable">$week</span>) &#123;</span><br><span class="line">    <span class="variable">$parts</span>.Add(<span class="string">&quot;7d:&#123;0:N0&#125;%&quot;</span> <span class="operator">-f</span> [<span class="built_in">double</span>]<span class="variable">$week</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># Context used percentage</span></span><br><span class="line"><span class="variable">$ctx</span> = <span class="variable">$data</span>.context_window.used_percentage</span><br><span class="line"><span class="keyword">if</span> (<span class="variable">$null</span> <span class="operator">-ne</span> <span class="variable">$ctx</span>) &#123;</span><br><span class="line">    <span class="variable">$parts</span>.Add(<span class="string">&quot;ctx:&#123;0:N0&#125;%&quot;</span> <span class="operator">-f</span> [<span class="built_in">double</span>]<span class="variable">$ctx</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="comment"># 用两个空格连接各部分,不输出换行</span></span><br><span class="line">[<span class="type">Console</span>]::Out.Write((<span class="variable">$parts</span> <span class="operator">-join</span> <span class="string">&quot;  &quot;</span>))</span><br><span class="line"></span><br></pre></td></tr></table></figure><h3 id="编辑-claude-settings-json-1"><a href="#编辑-claude-settings-json-1" class="headerlink" title="编辑 ~&#x2F;.claude&#x2F;settings.json"></a>编辑 ~&#x2F;.claude&#x2F;settings.json</h3><p>然后编辑 <code>~/.claude/settings.json</code>，在最后 <code>}</code> 前加入下面的内容<br><strong>Windows</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></pre></td><td class="code"><pre><span class="line"><span class="attr">&quot;statusLine&quot;</span><span class="punctuation">:</span> <span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;type&quot;</span><span class="punctuation">:</span> <span class="string">&quot;command&quot;</span><span class="punctuation">,</span></span><br><span class="line">  <span class="attr">&quot;command&quot;</span><span class="punctuation">:</span> <span class="string">&quot;\&quot;C:\\Program Files\\PowerShell\\7\\pwsh.exe\&quot; -NoProfile -File \&quot;C:\\Users\\&lt;User&gt;\\.claude\\statusline-command.ps1\&quot;&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>需要把 <code>&lt;User&gt;</code> 替换为实际的路径</p><h2 id="预览效果"><a href="#预览效果" class="headerlink" title="预览效果"></a>预览效果</h2><p>macOS:</p><p><img src="https://img.nep.me/ooo/claudecode-statusline-macos.webp?20260530" alt="claudecode-statusline-macos.png"></p><p>Windows:</p><p><img src="https://img.nep.me/ooo/claudecode-statusline-win.webp" alt="claudecode-statusline-win.png"></p><h2 id="新打开的窗口不生效"><a href="#新打开的窗口不生效" class="headerlink" title="新打开的窗口不生效"></a>新打开的窗口不生效</h2><p>打开新窗口时，会发现没有额度使用信息，这是因为需要对话一下才会刷新。</p><h2 id="调整显示信息"><a href="#调整显示信息" class="headerlink" title="调整显示信息"></a>调整显示信息</h2><p>只需要打开 Claude Code 后，输入 <code>/statusline 调整内容</code> 即可让 Claude Code 自己进行调整了。</p><h2 id="直接使用第三方包实现"><a href="#直接使用第三方包实现" class="headerlink" title="直接使用第三方包实现"></a>直接使用第三方包实现</h2><p>如果不希望手动设置，有很多第三方包可以实现这个效果，比如很流行的查看模型使用情况的 <code>ccusage</code> 就提供这个功能。</p><p><a href="https://ccusage.com/guide/statusline">https://ccusage.com/guide/statusline</a></p><p>ccusage 除了提供状态栏显示外，还能统计历史 Token、模型使用量以及额度消耗情况。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Claude Code 不像 Codex 那样执行 &lt;code&gt;/statusline&lt;/code&gt; 命令后提供选项直接快速调整可以显示的内容，执行 &lt;code&gt;/statusline&lt;/code&gt; 其实是调用模型去分析然后修改 &lt;code&gt;~/.claude/settin</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Claude Code" scheme="https://ooo.run/tags/Claude-Code/"/>
    
  </entry>
  
  <entry>
    <title>找回 Antigravity 代码编辑器(Antigravity IDE)</title>
    <link href="https://ooo.run/post/get-antigravity-ide-back.html"/>
    <id>https://ooo.run/post/get-antigravity-ide-back.html</id>
    <published>2026-05-23T07:02:02.000Z</published>
    <updated>2026-05-23T08:06:31.846Z</updated>
    
    <content type="html"><![CDATA[<p>Google 在 Google I&#x2F;O 2026 上宣布了 Antigravity 迎来 2.0 版本重大更新，喊出 Agents 驱动的口号，实际效果却堪称灾难，额度暴降、用户配置丢失，直接展现出世界就是一个巨大的草台班子。</p><p>不过目前 Google 已推出一系列补救措施：</p><ul><li>新版本增加数据导入提醒</li><li>永久提升 <strong>9 倍</strong> 每周额度</li></ul><h2 id="找回-Antigravity-代码编辑器"><a href="#找回-Antigravity-代码编辑器" class="headerlink" title="找回 Antigravity 代码编辑器"></a>找回 Antigravity 代码编辑器</h2><p>很多用户更新后发现，熟悉的 Antigravity 代码编辑器不见了：再次打开 Antigravity，看到的却是一个更接近 Codex 形态的独立 Agent 应用。</p><p>这并不是旧编辑器被直接移除，而是 Google 将原来的 Antigravity 编辑器更名为 <strong>Antigravity IDE</strong>，并和新版 Antigravity App 做了区分。因此，如果你想继续使用原来的代码编辑器体验，需要单独下载 Antigravity IDE。</p><p>下载链接：<a href="https://antigravity.google/download#antigravity-ide">Download Google Antigravity IDE</a></p><h2 id="Antigravity-旧版数据丢失问题"><a href="#Antigravity-旧版数据丢失问题" class="headerlink" title="Antigravity 旧版数据丢失问题"></a>Antigravity 旧版数据丢失问题</h2><p>Antigravity IDE 不只是更新了软件名称、软件包名、配置路径也一同进行了修改，但是初版居然没有做数据导入指引，导致用户打开新的 IDE 后，像是直接丢失了全部数据。</p><p>目前版本打开后已增加了数据导入提醒，更新到新的版本再打开 Antigravity IDE 即可。</p><h2 id="额度大降-补偿：周额度已永久增加-9-倍"><a href="#额度大降-补偿：周额度已永久增加-9-倍" class="headerlink" title="额度大降(补偿：周额度已永久增加 9 倍)"></a>额度大降(补偿：周额度已永久增加 9 倍)</h2><p>Antigravity 刚发布时额度是非常充足，后来不断降低额度，引入五小时限制、引入周限制，甚至直接高级模型移除五小时额度，额度一度降低到无法使用的程度。</p><p>后续略有恢复，没想到在 Google I&#x2F;O 2026 大型更新时，月费 20 美元的 AI Pro 用户的额度居然只有免费额度的 4 倍：</p><p><img src="https://img.nep.me/ooo/ai-pro-quota-4x.webp" alt="ai-pro-quota-4x.png"></p><p>甚至还取消了套餐内赠送的 AI 点数，对此 Google 解释：</p><blockquote><p>但在我们即将推出的新用量限额模式下，您的使用体验应该不会受到影响。</p></blockquote><p>然而实际情况却基本难以适应，社区反馈非常负面。</p><p>对此，Google 终于也坐不住了，连续两次宣布每周额度永久增加 3 倍，重置每周限额，相比最初限制，现在每周额度已增加九倍，也说明了一开始的额度限制有多么离谱。</p><p>对此 Google CEO <strong>Sundar Pichai</strong> 也不得不发 <a href="https://x.com/sundarpichai/status/2057658091831996593">推文</a> 声明。 </p><blockquote><p>Excited to see what you are building with Antigravity, We just 3xed the Antigravity limits again, but this time, the weekly quotas. Don’t stop building!<br>– 下午12:01 · 2026年5月22日</p></blockquote><p>3 x 3 &#x3D; 9 倍叠加提升已得到开发团队确认。</p><img src="https://img.nep.me/ooo/agy-3x3.webp" style="width:50%;" alt="agy-3x3.png" /><blockquote><p>Varun Mohan <a href="https://x.com/_mohansolo">@_mohansolo@X.com</a> building <strong>@antigravity</strong> <strong>@GoogleDeepMind</strong></p></blockquote><p>不过目前规则下的额度与 Gemini APP 共享。</p><h2 id="新版本优势"><a href="#新版本优势" class="headerlink" title="新版本优势"></a>新版本优势</h2><p>虽然这次更新带来了不少糟糕的体验，但并不是所有变化都对用户不利，Google 也确实加入了一些值得关注的新能力和套餐权益。</p><h3 id="更快的-Gemini-3-5-Flash"><a href="#更快的-Gemini-3-5-Flash" class="headerlink" title="更快的 Gemini 3.5 Flash"></a>更快的 Gemini 3.5 Flash</h3><p>超快的 Gemini 3.5 Flash，Antigravity 在 Gemini 3.5 Flash 4x 基础上进行专项优化，让输出速度提升至 12x ，不过这是 <a href="https://antigravity.google/blog/gemini-3-5-flash-in-google-antigravity">限时体验</a>。</p><h3 id="YouTube-Lite-加入套餐权益"><a href="#YouTube-Lite-加入套餐权益" class="headerlink" title="YouTube Lite 加入套餐权益"></a>YouTube Lite 加入套餐权益</h3><p>每月 20 美元的 AI Pro 套餐用户将获得 YouTube Lite 会员，可以免除广告: <a href="https://support.google.com/googleone/answer/17101453">Get YouTube Premium Lite with Google AI Pro</a></p><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>Antigravity 2.0 这次更新最大的问题，不是产品方向从 IDE 走向 Agent，而是迁移过程过于粗糙：旧编辑器入口突然变化、配置数据没有平滑继承、额度规则也在关键发布节点大幅收紧。</p><p>好在 Google 的补救来得还算及时，Antigravity IDE 已经重新明确入口，旧数据导入也补上了提醒，每周额度更是连续提升到原来的 9 倍。对于已经被这次更新折腾到的用户来说，现在最直接的处理方式就是重新下载 Antigravity IDE，并升级到最新版。</p><p>至于 Antigravity 2.0 本身能不能撑起 Google 所说的 Agents 驱动体验，还要看后续稳定性、额度政策和真实开发体验能不能跟上。至少这次事件已经说明再先进的 AI 产品，也不能把基础迁移和用户信任当成小问题。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Google 在 Google I&amp;#x2F;O 2026 上宣布了 Antigravity 迎来 2.0 版本重大更新，喊出 Agents 驱动的口号，实际效果却堪称灾难，额度暴降、用户配置丢失，直接展现出世界就是一个巨大的草台班子。&lt;/p&gt;
&lt;p&gt;不过目前 Google</summary>
      
    
    
    
    <category term="教程" scheme="https://ooo.run/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="Antigravity" scheme="https://ooo.run/tags/Antigravity/"/>
    
    <category term="Antigravity IDE" scheme="https://ooo.run/tags/Antigravity-IDE/"/>
    
  </entry>
  
  <entry>
    <title>Google I/O 2026：从搜索框到代码编辑器，Google 全面 Agent 化</title>
    <link href="https://ooo.run/post/google-io-2026-reviews.html"/>
    <id>https://ooo.run/post/google-io-2026-reviews.html</id>
    <published>2026-05-20T04:20:03.000Z</published>
    <updated>2026-05-20T10:44:21.589Z</updated>
    
    <content type="html"><![CDATA[<p>两个小时，数十个产品更新，一股脑砸出来。Google I&#x2F;O 2026 又一次用”饱和式发布”刷屏。所有重要更新都指向同一个词——<strong>Agent</strong>。</p><blockquote><p>“最前沿的 Agent 可能只触达过世界上 0.1% 的人。真正的问题，是怎么把这种前沿能力规模化交付给更广泛的用户。”<br>——Sundar Pichai</p></blockquote><p>Google 这次要自己来做这件事。下面是它给出的答案。</p><hr><h2 id="一图速览：本次-I-O-七大重磅"><a href="#一图速览：本次-I-O-七大重磅" class="headerlink" title="一图速览：本次 I&#x2F;O 七大重磅"></a>一图速览：本次 I&#x2F;O 七大重磅</h2><table><thead><tr><th>编号</th><th>发布</th><th>核心看点</th></tr></thead><tbody><tr><td>01</td><td><strong>Gemini 3.5 系列亮相</strong></td><td>Flash 先出，Pro 下月上线</td></tr><tr><td>02</td><td><strong>Gemini Spark</strong></td><td>对标 OpenClaw，24&#x2F;7 在线的个人 Agent</td></tr><tr><td>03</td><td><strong>Antigravity 2.0</strong></td><td>从编程环境升级为多 Agent 编排平台，正面对位 Claude Code 与 Codex</td></tr><tr><td>04</td><td><strong>Gemini Omni</strong></td><td>任意模态进，任意模态出，集成 Veo 与 Nano Banana</td></tr><tr><td>05</td><td><strong>Gemini app 全面 Agent 化</strong></td><td>新设计语言 Neural Expressive，内置 Daily Brief</td></tr><tr><td>06</td><td><strong>搜索与全家桶”小 Gemini”化</strong></td><td>搜索框 25 年来最大升级；Information Agents 与 Generative UI 登场</td></tr><tr><td>07</td><td><strong>订阅价调整</strong></td><td>新增 100 美元&#x2F;月档位，原 250 美元 Ultra 降到 200，Pro 维持 19.99</td></tr></tbody></table><hr><h2 id="一、3-5-Flash：把”Agent-经济账”摆上桌"><a href="#一、3-5-Flash：把”Agent-经济账”摆上桌" class="headerlink" title="一、3.5 Flash：把”Agent 经济账”摆上桌"></a>一、3.5 Flash：把”Agent 经济账”摆上桌</h2><p>Gemini 3.5 系列的第一款 3.5 Flash，在几乎所有基准上超越自家上代 Gemini 3.1 Pro。Pichai 特意点名的 GDPval（衡量”具有真实经济价值的任务”）上提升尤其明显。</p><p>但真正让它登上 keynote C 位的，是另一组数据：</p><ul><li><strong>速度</strong>：输出速度是其它前沿模型的 <strong>4 倍</strong>；在 Antigravity 2.0 中内置的优化版本可达 <strong>12 倍</strong>，质量不变。</li><li><strong>价格</strong>：不到同档前沿模型的 <strong>一半</strong>。</li></ul><p>Pichai 直接把性价比换算成账单摆给 CIO 们看：</p><blockquote><p>“如果一家头部企业一天处理一万亿 token，把其中 80% 的负载从其它前沿模型迁到 3.5 Flash，一年能省下 <strong>超过 10 亿美元</strong>。”</p></blockquote><p>Google 自己已经是这套打法最大的受益者。今年 3 月，Google 内部每天处理 5000 亿 token；现在每天超过 <strong>3 万亿</strong>，每隔几周翻一番。增长来源，是工程团队全面切换到 Antigravity 2.0 + 3.5 Flash 之后释放出来的需求。</p><p>更强大的 Gemini 3.5 Pro 没在这次发布 —— 预计将在下个月 2026 年登场，Pichai 透露：”内部在用，效果很好，但还在打磨”。</p><hr><h2 id="二、Gemini-Spark：Google-的个人-Agent-终于落地"><a href="#二、Gemini-Spark：Google-的个人-Agent-终于落地" class="headerlink" title="二、Gemini Spark：Google 的个人 Agent 终于落地"></a>二、Gemini Spark：Google 的个人 Agent 终于落地</h2><p>Spark 是这次回答”Agent 怎么走出 0.1%”最直接的产品：<strong>一个 7×24 跑在云端的个人 Agent</strong>，把 Google 全家桶串了起来。</p><p>它运行在 Google Cloud 的专用虚拟机上，底层是 Gemini 3.5，框架用的是 Google 内部的 Antigravity Harness。也就是说，笔记本合上、手机锁屏，它也能继续在后台跑长周期任务。</p><p>Google 给 Spark 设定的第一批场景并不科幻：从 Gmail、Docs、Sheets、Slides 里拉事实，写状态汇报；帮学生更新学习指南；替家长追踪学校时间表；给小企业盯收件箱，避免漏掉客户问题。</p><p>真正重要的不是这些 demo，而是它的落点：<strong>Spark 是 Google 把 Agent 从”聊天窗口”推进”真实数字生活”的第一只脚。</strong>它先接 Google 自家工具，随后开放第三方 MCP；入口先在 Gemini app，之后会进入邮件、聊天、Chrome，Android 上还有 <strong>Android Halo</strong> 显示执行进度。</p><p>节奏也很明确：先给受信任测试者，下周作为 beta 推给美国 Google AI Ultra 订阅用户。敏感操作前停下来确认，用户可以看到执行过程并随时打断——这套信任设计，是 Google 试图让普通人敢把任务交给 Agent 的前提。</p><hr><h2 id="三、Antigravity-2-0：正面对位-Claude-Code-与-Codex"><a href="#三、Antigravity-2-0：正面对位-Claude-Code-与-Codex" class="headerlink" title="三、Antigravity 2.0：正面对位 Claude Code 与 Codex"></a>三、Antigravity 2.0：正面对位 Claude Code 与 Codex</h2><p>Antigravity 1.0 大约半年前（2025 年 11 月）发布，目前已有”数百万开发者在用”。2.0 的关键变化是<strong>定位转移</strong>——从”编程环境”升级为”多 Agent 编排平台”。</p><p><strong>三层架构：</strong></p><ol><li><strong>桌面 App</strong>：与 Agent 交互的中央枢纽，可同时编排多个 Agent——一个写网站代码、一个生成品牌素材、第三个规划产品架构，互不打架</li><li><strong>Antigravity CLI</strong>：命令行接口，留给想待在终端里的开发者</li><li><strong>Antigravity SDK</strong>：最关键的一层——让程序可编程地访问驱动 Google 自家产品的同一套 Agent harness，与 Gemini 模型协同优化</li></ol><p><strong>一个内部案例</strong>：在尚未发布的 Gemini 3.5 Pro 支持下，让 <strong>93 个不同 Agent</strong> 协作，消耗 <strong>26 亿 token</strong>，从零搭建起一个复杂系统项目。</p><p>换句话说，Google 试图把内部正在使用的 Agent harness 以 SDK 形式开放给开发者。<strong>这是对 Claude Code 和 Codex 的正面对位。</strong></p><p>Pichai 在沟通中的判断：</p><blockquote><p>“开发者这个群体的好处是，你把东西做出来，如果真的好用，他们就会真的用。Antigravity 加 3.5 Flash 是相当魔幻的体验，特别是它有多快 —— 3.5 Flash 已经是其它前沿模型的 4 倍，在 Antigravity 里大约是 12 倍。”</p></blockquote><p>更有说服力的支撑来自内部测试：用 3.5 Flash + Antigravity 2.0 跑多 Agent 协同，<strong>让 Agent 完全从零搭出了一个能跑的操作系统，API 耗费在 1000 美金以内</strong>。</p><h3 id="附带发布：安全-Agent-CodeMender"><a href="#附带发布：安全-Agent-CodeMender" class="headerlink" title="附带发布：安全 Agent CodeMender"></a>附带发布：安全 Agent CodeMender</h3><p>CodeMender 用 Gemini 的高级推理自动找出并修复关键代码漏洞，<strong>直接下笔补漏洞</strong>，等于接管”人来打补丁”那一步。当前邀请少数专家测试 API，更广泛开放”很快”推出。</p><p>Google 的逻辑：随着 Agent 写越来越多代码，cybersecurity 会更关键，agentic workflow 也是这个领域的必由路径。</p><hr><h2 id="四、Gemini-app：彻底换新-全面降价"><a href="#四、Gemini-app：彻底换新-全面降价" class="headerlink" title="四、Gemini app：彻底换新 + 全面降价"></a>四、Gemini app：彻底换新 + 全面降价</h2><p>Gemini app 过去一年月活从 4 亿涨到 <strong>9 亿</strong>，日请求量翻 7 倍，覆盖 230 个国家、70 种语言。Google 把它定义为”世界上覆盖最广的 AI 助手”。</p><p>这次 Gemini app 的改版，表面上是新设计语言 <strong>Neural Expressive</strong>：动效、色彩、字体、触感反馈全换，回答也不再是一整面文字墙，而是图片、时间线、图表和 Gemini Live 混在一起的动态页面。</p><p>但它真正的变化，是从”问答 app”变成 Agent 的前台。Gemini Omni 直接进 app，用户可以上传照片或视频，套模板、改风格、生成视频，甚至创建一个看起来和听起来都像自己的 AI 化身。</p><p>Daily Brief 则是第一个开箱即用 Agent：每天早上整理 Gmail、日历和当天任务，排优先级，给下一步建议。它的前身是 2025 年 12 月在 Google Labs 上线的实验 <strong>CC</strong>，这次被收编进正式产品线。这个路径很能说明 Google 的打法：<strong>Labs 里跑通，Gemini app 里规模化。</strong></p><p>5 月 19 日起，Neural Expressive 全球开放；Daily Brief 在美国面向 Google AI 订阅用户开放。</p><h3 id="订阅价调整"><a href="#订阅价调整" class="headerlink" title="订阅价调整"></a>订阅价调整</h3><table><thead><tr><th>档位</th><th>价格</th><th>变动</th></tr></thead><tbody><tr><td>Pro</td><td>19.99 美元&#x2F;月</td><td>维持</td></tr><tr><td>Ultra（新增）</td><td><strong>100 美元&#x2F;月</strong></td><td>新档位，给”想要重度 Agent 服务但还没到顶配水位”的用户</td></tr><tr><td>Ultra（顶配）</td><td><strong>200 美元&#x2F;月</strong></td><td>从 250 美元下调</td></tr></tbody></table><p>2025 年 5 月 Google 才把顶级 Ultra 定在 249.99 美元，一年时间实际**降价 20%**，中间还加了一档。意图很清楚：把 Spark 这种重度 Agent 服务的通道铺宽，让普通付费用户也能摸到。</p><hr><h2 id="五、Gemini-Omni：把-Veo-和-Nano-Banana-揉进-Gemini-主架构"><a href="#五、Gemini-Omni：把-Veo-和-Nano-Banana-揉进-Gemini-主架构" class="headerlink" title="五、Gemini Omni：把 Veo 和 Nano Banana 揉进 Gemini 主架构"></a>五、Gemini Omni：把 Veo 和 Nano Banana 揉进 Gemini 主架构</h2><p>如果说 3.5 Flash 是为”让 Agent 跑起来”准备的，那么 Gemini Omni 是为”让 world model 真的成型”准备的。这部分由 Demis Hassabis 亲自发布。</p><p>Google 给 Omni 的定位是 **”能从任何输入生成任何输出模态的模型”**，先做视频输出，未来扩展到图像和文字。</p><ul><li><strong>第一款上线</strong>：Gemini Omni Flash，5 月 19 日起向 Google AI 订阅用户开放</li><li><strong>入口</strong>：Gemini app、Google Flow、YouTube Shorts</li><li><strong>水印</strong>：所有 Omni 生成或编辑的内容自带 SynthID</li><li><strong>Omni Pro</strong>：即将推出</li></ul><h3 id="Omni-与-Veo、Nano-Banana-的关系"><a href="#Omni-与-Veo、Nano-Banana-的关系" class="headerlink" title="Omni 与 Veo、Nano Banana 的关系"></a>Omni 与 Veo、Nano Banana 的关系</h3><p>按 Google 自己的描述：</p><blockquote><p>Omni 是 Gemini 主架构的进化，是 Gemini 一开始原生多模态底层设计的延伸——让原生多模态从输入端扩展到输出端。视频生成是切入点（离 Veo 最近），再把 Nano Banana 的编辑能力带进 Veo，让你像剪辑那样自然修改视频。<strong>本质上 Omni 是 Gemini 主线进化，Veo 和 Nano Banana 是它身上的能力组件。</strong></p></blockquote><p>Nano Banana 累计已生成超过 <strong>500 亿张图</strong>，Omni 这次把这个能力同等带到视频里。玩法包括纯文本生成视频，也包括上传自己的视频做改风格、换角色、保持时间一致性的连续编辑。</p><hr><h2 id="六、搜索-全家桶：Agent-进入-Google-每个角落"><a href="#六、搜索-全家桶：Agent-进入-Google-每个角落" class="headerlink" title="六、搜索 + 全家桶：Agent 进入 Google 每个角落"></a>六、搜索 + 全家桶：Agent 进入 Google 每个角落</h2><h3 id="搜索框-25-年来最大一次升级"><a href="#搜索框-25-年来最大一次升级" class="headerlink" title="搜索框 25 年来最大一次升级"></a>搜索框 25 年来最大一次升级</h3><p>AI Mode 一周岁了——2025 年 I&#x2F;O 才推出，现在月活超 10 亿，”上线以来每季度查询量翻倍”。</p><p>这次 AI Mode 升级到 <strong>Gemini 3.5 Flash 驱动</strong>。Google 搜索团队的判断是：用户已经开始把搜索当成更长、更具体、更跨模态的任务入口，而不是几个关键词。</p><p>所以 Google 改了那个最核心的入口——搜索框。新的智能搜索框会扩展，能容纳更口语化的长问题；AI 查询建议取代传统自动补全；文字、图片、文件、视频、Chrome 标签页都可以作为输入。AI Overviews 和 AI Mode 也被打通，用户可以从一个概览回答直接继续追问。</p><p>更关键的是，搜索框里开始长出 Agent。</p><p><strong>Information Agents</strong> 让搜索从”查一次”变成”后台持续盯一件事”：用户可以创建 24&#x2F;7 跑的 Agent，让它监控市场、房源、体育、购物或任何特定问题，条件触发后合成更新推送。</p><p><strong>Generative UI</strong> 和搜索里的 mini-app，则是另一条线：把 Antigravity 和 Gemini 3.5 Flash 的 agentic coding 能力接进搜索现场。用户问一个复杂问题，搜索不只是返回答案，还能实时生成交互图表、模拟器、仪表盘甚至可持续使用的小工具。</p><p>这才是 Google 最可怕的分发能力：别人要教育用户去打开一个 Agent 产品，Google 只需要让搜索框多长出一层能力。</p><hr><h2 id="七、虽迟但到的-Google，用全栈布局对卷-Agent-赛道"><a href="#七、虽迟但到的-Google，用全栈布局对卷-Agent-赛道" class="headerlink" title="七、虽迟但到的 Google，用全栈布局对卷 Agent 赛道"></a>七、虽迟但到的 Google，用全栈布局对卷 Agent 赛道</h2><p>过去一段时间 Google 在 Agent 的竞争里几乎缺席。这场 I&#x2F;O 可以看出它的焦虑——它给出的答案是<strong>一套全栈布局</strong>：</p><ul><li><strong>模型层</strong>：3.5 Flash 用速度和价格把 Agent 的边际成本压到企业可接受的位置；Omni 把 world model 再推一步</li><li><strong>产品层</strong>：<ul><li>Spark 给所有人</li><li>Daily Brief 给所有 AI 订阅用户</li><li>Information Agents 与 Generative UI 让 Agent 进入 Google 最广泛的”渠道”——搜索框</li><li>Antigravity 2.0 给开发者提供 Claude Code 的直接”平替”</li></ul></li><li><strong>商业层</strong>：UCP、AP2、Universal Cart 让 Agent 进入真实交易场景</li><li><strong>基础设施层</strong>：第八代 TPU 首次走”双芯片”分工——<strong>TPU 8T 专做训练，TPU 8I 专做推理</strong>。配合 JAX 与 Pathways，训练任务可跨多个数据中心、全球分布到超过 <strong>100 万颗 TPU</strong>——“世界最大的训练集群”</li></ul><h3 id="几个让-Anthropic-和-OpenAI-忌惮的数字"><a href="#几个让-Anthropic-和-OpenAI-忌惮的数字" class="headerlink" title="几个让 Anthropic 和 OpenAI 忌惮的数字"></a>几个让 Anthropic 和 OpenAI 忌惮的数字</h3><ul><li>Google 的 AI 在各个主要产品里的用户量级<strong>全部是十亿级别</strong></li><li><strong>5 个产品已各自有 30 亿用户</strong></li><li>今年 capex 预计 <strong>1800–1900 亿美元</strong>，是 2022 年（310 亿）的 <strong>6 倍</strong></li><li>每月跨自家产品处理的 token 达到 <strong>3.2 千万亿（quadrillion）</strong>，是 2025 年 I&#x2F;O 时 480 万亿的 <strong>7 倍</strong></li></ul><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>把这些点连起来，Google 这次真正要证明的不是”我们也有 Agent”，而是：<strong>我们有能力把 Agent 变成默认入口。</strong></p><p>模型足够快，边际成本才能压下来；Spark 跑在云端，Agent 才能真正离开用户设备；Gemini app 和搜索框提供日常入口，用户不用重新养成习惯；订阅价格下探，重度 Agent 服务才有机会从少数极客扩散到普通付费用户。</p><p>对开发者工具战场也是同一个逻辑。Antigravity 2.0 不是简单复制 Claude Code 或 Codex，而是在把竞争从”谁的代码补全更聪明”推向”谁能提供模型、运行环境、工具调用、sub-agent 编排和分发入口的一整套 Agent harness”。</p><p>如果这个判断成立，下一轮开发者工具竞争的单位就不再是 IDE 插件，而是平台级 Agent 编排系统。Claude Code、Codex、Antigravity 争的也不只是程序员的编辑器，而是谁能成为开发者让一群 Agent 持续工作的控制台。</p><p>所以，这场 I&#x2F;O 更像是一个信号：Google 没有退出 AI 主战场，它只是选择用自己最熟悉的方式参战——把模型、产品、入口、基础设施和商业系统一起压上来。</p><p>Agent 赛道接下来不会只比谁的模型更聪明，也会比谁能把能力稳定、便宜、可信地送到最多人手里。Google 的优势正在这里重新变得清晰。</p><p>对普通用户来说，这反而是最好的局面：顶级大模型厂商越焦虑，工具就会越强、越便宜、越触手可及。每一次”轰炸式发布”背后，都是另一家公司被迫拿出更好的产品、定一个更低的价格。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;两个小时，数十个产品更新，一股脑砸出来。Google I&amp;#x2F;O 2026 又一次用”饱和式发布”刷屏。所有重要更新都指向同一个词——&lt;strong&gt;Agent&lt;/strong&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“最前沿的 Agent 可能只触达过世界上 0</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="Google" scheme="https://ooo.run/tags/Google/"/>
    
    <category term="Google IO" scheme="https://ooo.run/tags/Google-IO/"/>
    
    <category term="Angets" scheme="https://ooo.run/tags/Angets/"/>
    
  </entry>
  
  <entry>
    <title>Google 发布 Antigravity 2.0 ，以及 Antigravity-CLI</title>
    <link href="https://ooo.run/post/google-launch-antigravity-cli.html"/>
    <id>https://ooo.run/post/google-launch-antigravity-cli.html</id>
    <published>2026-05-20T01:58:40.000Z</published>
    <updated>2026-05-20T10:49:44.397Z</updated>
    
    <content type="html"><![CDATA[<p>在 2026 年 5 月 20 日的 Google I&#x2F;O 大会上，Google 正式宣布推出 Antigravity 2.0，以 Agents 驱动为核心作为独立的桌面应用。原 Antigravity 更名为 <strong>Antigravity IDE</strong>，并同时推出 <strong>Antigravity CLI</strong> 取代 <strong>Gemini CLI</strong>。</p><p>Antigravity 2.0 与 IDE 下载页面：<a href="https://antigravity.google/download">Download Google Antigravity</a></p><h2 id="Antigravity-CLI-安装方法"><a href="#Antigravity-CLI-安装方法" class="headerlink" title="Antigravity CLI 安装方法"></a>Antigravity CLI 安装方法</h2><h3 id="macOS-Linux"><a href="#macOS-Linux" class="headerlink" title="macOS &#x2F; Linux"></a>macOS &#x2F; Linux</h3><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">curl -fsSL https://antigravity.google/cli/install.sh | bash</span><br></pre></td></tr></table></figure><h3 id="Windows-PowerShell"><a href="#Windows-PowerShell" class="headerlink" title="Windows PowerShell"></a>Windows PowerShell</h3><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">irm</span> https://antigravity.google/<span class="built_in">cli</span>/install.ps1 | <span class="built_in">iex</span></span><br></pre></td></tr></table></figure><h3 id="Windows-CMD"><a href="#Windows-CMD" class="headerlink" title="Windows CMD"></a>Windows CMD</h3><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">curl -fsSL https://antigravity.google/cli/install.<span class="built_in">cmd</span> -o install.<span class="built_in">cmd</span> &amp;&amp; install.<span class="built_in">cmd</span> &amp;&amp; <span class="built_in">del</span> install.<span class="built_in">cmd</span></span><br></pre></td></tr></table></figure><h2 id="启动与登录方法"><a href="#启动与登录方法" class="headerlink" title="启动与登录方法"></a>启动与登录方法</h2><h3 id="启动-Antigravity-CLI"><a href="#启动-Antigravity-CLI" class="headerlink" title="启动 Antigravity CLI"></a>启动 Antigravity CLI</h3><p>在终端中运行 <code>agy</code> 即可启动 Antigravity CLI。</p><h3 id="登录方法"><a href="#登录方法" class="headerlink" title="登录方法"></a>登录方法</h3><p>使用 Antigravity CLI 之前，如果已在 Antigravity 或 Antigravity IDE 中登录了 Google 账户，系统将自动进行认证。</p><p>初次启动需要选择代码主题，同意用户协议后即可打开 CLI 界面：</p><p><img src="https://img.nep.me/ooo/antigravity-cli-theme-select.webp" alt="antigravity-cli-theme-select.png"></p><p>界面预览：<br><img src="https://img.nep.me/2026/05/antigravity-cli-tui-hello.webp" alt="antigravity-cli-tui.png"></p><p>或者，您也可以选择以下认证方法手动登录：</p><ul><li><strong>Google OAuth</strong></li><li><strong>Use a Google Cloud project</strong></li></ul><p><img src="https://img.nep.me/ooo/antigravity-cli-login-method.webp" alt="antigravity-cli-login-method.png"></p><p>选择 Google OAuth 后，如果没有自动跳转，可以通过粘贴认证代码的方法进行确认，因此也可以在其他设备上使用。</p><h3 id="可选模型"><a href="#可选模型" class="headerlink" title="可选模型"></a>可选模型</h3><p>Google AI Pro 用户在 Antigravity CLI 中可选的模型与 Antigravity IDE 一致：</p><ul><li>Gemini 3.5 Flash (High)      (current)</li><li>Gemini 3.5 Flash (Medium)</li><li>Gemini 3.1 Pro (High)</li><li>Gemini 3.1 Pro (Low)</li><li>Claude Sonnet 4.6 (Thinking)</li><li>Claude Opus 4.6 (Thinking)</li><li>GPT-OSS 120B (Medium)</li></ul><p><img src="https://img.nep.me/ooo/antigravity-cli-model-select.webp" alt="antigravity-cli-model-select.png"></p><h2 id="Antigravity-CLI-介绍"><a href="#Antigravity-CLI-介绍" class="headerlink" title="Antigravity CLI 介绍"></a>Antigravity CLI 介绍</h2><p>Google 表示为了性能表现，使用 Go 语言完成了 Antigravity 的构建，同时 Google 也强调了 Antigravity CLI 的三个演进方向：更快执行、异步工作流，以及与 Antigravity 2.0 共用统一的 agent harness。</p><p>Antigravity CLI 优势：</p><ul><li><strong>执行速度更快</strong>：Antigravity CLI 使用 Go 语言编写，速度更快，响应更迅速。</li><li><strong>异步工作流</strong>：Antigravity CLI 在后台协调多个代理来执行复杂任务，让您可以运行大规模重构或研究多个主题，而不会锁定您的终端会话。</li><li><strong>统一架构</strong>：Antigravity CLI 与 Antigravity 2.0（新的 Antigravity 桌面应用程序）共享相同的代理框架，确保核心代理的所有未来改进都会自动应用到您使用它们的任何地方。</li></ul><h2 id="Gemini-CLI-将终止服务"><a href="#Gemini-CLI-将终止服务" class="headerlink" title="Gemini CLI 将终止服务"></a>Gemini CLI 将终止服务</h2><p>在推出了 Antigravity CLI 后，Google <a href="https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/">表示</a>，自 2026 年 6 月 18 日起，Gemini CLI 和 Gemini Code Assist IDE 扩展程序将停止为 Google AI Pro 和 Ultra 用户提供服务。</p><p>企业用户仍可继续使用。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>Antigravity 2.0 的发布，说明 Google 并没有把 AI 编程工具只当作 Gemini 模型的附属功能，而是在重新争夺“下一代代码编辑入口”。这次更新的重点，不是给传统 IDE 再加一个聊天侧边栏，而是把 Antigravity 从 agent-first IDE 升级成更完整的 agentic development platform：桌面端、CLI、SDK 和 API 一起构成新的开发者工作台。</p><p>对用户来说，这种竞争无疑是好事。无论是 Google、OpenAI、Anthropic 还是 Cursor，都在推动代码工具从“补全助手”走向“开发伙伴”。竞争越激烈，开发者能获得的选择越多，价格、体验、模型能力和工作流整合也会被不断拉高。最终受益的，还是每天真正写代码、调试和交付产品的用户。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在 2026 年 5 月 20 日的 Google I&amp;#x2F;O 大会上，Google 正式宣布推出 Antigravity 2.0，以 Agents 驱动为核心作为独立的桌面应用。原 Antigravity 更名为 &lt;strong&gt;Antigravity IDE&lt;/s</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="AI" scheme="https://ooo.run/tags/AI/"/>
    
    <category term="Antigravity" scheme="https://ooo.run/tags/Antigravity/"/>
    
    <category term="Antigravity IDE" scheme="https://ooo.run/tags/Antigravity-IDE/"/>
    
    <category term="Google" scheme="https://ooo.run/tags/Google/"/>
    
  </entry>
  
  <entry>
    <title>在 pnpm 中设置 minimumReleaseAge，远离供应链攻击</title>
    <link href="https://ooo.run/post/use-miniumreleaseage-feature-in-pnpm.html"/>
    <id>https://ooo.run/post/use-miniumreleaseage-feature-in-pnpm.html</id>
    <published>2026-05-19T05:08:26.000Z</published>
    <updated>2026-05-21T04:57:14.813Z</updated>
    
    <content type="html"><![CDATA[<p>近来针对开发者的供应链攻击越来越频繁，且规模也在变大，比如最近的 <a href="https://ooo.run/post/mini-shai-hulud-check-and-defense.html">Mini Shai-Hulud 供应链攻击事件</a> 中，顶级项目的开发者也难以避免，事后攻击发起者黑客团队 TeamPCP 居然将攻击代码开源了（现已被 GitHub 下架），使得攻击更为容易。</p><p>不过一般攻击窗口时间都很短暂，只要不在相关时间内安装对应软件包即可避免。 <strong>pnpm</strong> 就提供了这一特性，<code>minimumReleaseAge</code> 是 pnpm 用来降低 npm 供应链攻击风险的配置。它的作用是：一个包的新版本发布后，必须经过指定分钟数，pnpm 才允许解析和安装它。</p><p>pnpm 官方说明该配置适用于所有依赖，包括传递依赖；它从 pnpm v10.16.0 开始加入，在 pnpm v11 中默认值变为 1440，也就是 1 天。</p><p>建议 pnpm 用户升级至 v11 ： <a href="https://pnpm.io/zh/migration">pnpm - 从 v10 迁移到 v11</a></p><h2 id="1-为什么需要-minimumReleaseAge"><a href="#1-为什么需要-minimumReleaseAge" class="headerlink" title="1. 为什么需要 minimumReleaseAge"></a>1. 为什么需要 minimumReleaseAge</h2><p>很多供应链攻击的套路是：攻击者盗取维护者账号或发布流程，立刻发布一个恶意版本。恶意版本通常会在社区、平台或安全工具发现后被下架。pnpm 官方也建议通过 “延迟更新依赖” 降低安装受污染版本的概率，并说明延迟 24 小时通常可以避开许多高风险窗口。</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br></pre></td></tr></table></figure><p>表示只安装发布时间至少超过 1440 分钟，也就是 24 小时 的版本：</p><h2 id="2-前置条件：确认-pnpm-版本"><a href="#2-前置条件：确认-pnpm-版本" class="headerlink" title="2. 前置条件：确认 pnpm 版本"></a>2. 前置条件：确认 pnpm 版本</h2><p><code>minimumReleaseAge</code> 从 pnpm <code>v10.16.0</code> 开始支持。</p><p>先检查当前版本：</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">pnpm -v</span><br></pre></td></tr></table></figure><p>目前 pnpm 已发布 <code>v11.1.3</code> 版本，该配置默认就是 1440 。</p><p>如果项目里还没有固定 pnpm 版本，可以在 <code>package.json</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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;packageManager&quot;</span><span class="punctuation">:</span> <span class="string">&quot;pnpm@11.1.0&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><blockquote><p>注意 pnpm v11 要求 Node.js 22+</p></blockquote><h2 id="3-把时间设置为一周"><a href="#3-把时间设置为一周" class="headerlink" title="3. 把时间设置为一周"></a>3. 把时间设置为一周</h2><p>pnpm v11 在项目根目录会创建 <code>pnpm-workspace.yaml</code> 文件，可以直接修改该文件进行配置。</p><p>我们可以把时间设置为一周的时间 1440*7 &#x3D; <code>10080</code></p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">minimumReleaseAge:</span> <span class="number">10080</span></span><br></pre></td></tr></table></figure><h2 id="4-常见取值"><a href="#4-常见取值" class="headerlink" title="4. 常见取值"></a>4. 常见取值</h2><p><code>minimumReleaseAge</code> 的单位是 <strong>分钟</strong> 。</p><table><thead><tr><th>场景</th><th align="right">配置值</th><th>含义</th></tr></thead><tbody><tr><td>不启用延迟</td><td align="right"><code>0</code></td><td>立即允许安装新版本</td></tr><tr><td>保守开发环境</td><td align="right"><code>60</code></td><td>延迟 1 小时</td></tr><tr><td>推荐默认值</td><td align="right"><code>1440</code></td><td>延迟 1 天</td></tr><tr><td>更严格生产环境</td><td align="right"><code>2880</code></td><td>延迟 2 天</td></tr><tr><td>高安全项目</td><td align="right"><code>10080</code></td><td>延迟 7 天</td></tr></tbody></table><h2 id="5-为特定依赖设置例外"><a href="#5-为特定依赖设置例外" class="headerlink" title="5. 为特定依赖设置例外"></a>5. 为特定依赖设置例外</h2><p>有些包可能需要紧急升级，比如安全修复、内部包、框架核心包。这时可以使用 <code>minimumReleaseAgeExclude</code> 。</p><h3 id="5-1-排除指定包"><a href="#5-1-排除指定包" class="headerlink" title="5.1 排除指定包"></a>5.1 排除指定包</h3><figure class="highlight yaml"><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="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAgeExclude:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">webpack</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">react</span></span><br></pre></td></tr></table></figure><p>这表示：大多数依赖必须发布满 1 天才能安装，但 webpack 和 react 可以立即安装。pnpm <a href="https://pnpm.io/zh/settings">官方文档</a> 说明，minimumReleaseAgeExclude 会按包名排除，并作用于该包的所有版本。</p><h3 id="5-2-排除组织作用域包"><a href="#5-2-排除组织作用域包" class="headerlink" title="5.2 排除组织作用域包"></a>5.2 排除组织作用域包</h3><p>从 pnpm v10.17.0 开始， <code>minimumReleaseAgeExclude</code>  支持模式匹配。</p><p>例如，允许公司内部包立即安装：</p><figure class="highlight yaml"><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"><span class="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAgeExclude:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;@myorg/*&quot;</span></span><br></pre></td></tr></table></figure><h3 id="5-3-只排除特定版本"><a href="#5-3-只排除特定版本" class="headerlink" title="5.3 只排除特定版本"></a>5.3 只排除特定版本</h3><p>从 pnpm v10.19.0 开始，minimumReleaseAgeExclude 支持精确版本，也支持用 || 写多个版本。</p><figure class="highlight yaml"><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="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAgeExclude:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">nx@21.6.5</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">webpack@4.47.0</span> <span class="string">||</span> <span class="number">5.102</span><span class="number">.1</span></span><br></pre></td></tr></table></figure><p>这比直接排除整个包更安全，适合临时放行某个已验证版本。</p><h2 id="6-推荐的项目配置模板"><a href="#6-推荐的项目配置模板" class="headerlink" title="6. 推荐的项目配置模板"></a>6. 推荐的项目配置模板</h2><p>下面是一份适合团队项目直接落地的配置：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">packages:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;apps/*&quot;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;packages/*&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 新发布版本至少等待 24 小时再安装</span></span><br><span class="line"><span class="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 显式开启严格模式：如果没有满足发布时间要求的版本，则安装失败</span></span><br><span class="line"><span class="attr">minimumReleaseAgeStrict:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 私有包或已验证的紧急修复版本可以临时放行</span></span><br><span class="line"><span class="attr">minimumReleaseAgeExclude:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;@your-company/*&quot;</span></span><br></pre></td></tr></table></figure><p><code>minimumReleaseAgeStrict</code> 是 pnpm v11 新增的行为控制项。官方文档说明：当没有版本满足 <code>minimumReleaseAge</code> 约束时， <code>true</code> 会让解析失败， <code>false</code> 则允许回退到不满足约束的版本；如果你显式配置了 <code>minimumReleaseAge</code> ，严格模式默认开启。</p><h2 id="7-在-CI-中引入"><a href="#7-在-CI-中引入" class="headerlink" title="7. 在 CI 中引入"></a>7. 在 CI 中引入</h2><p>CI 里建议同时做两件事：</p><p>第一，固定 pnpm 版本：</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></pre></td><td class="code"><pre><span class="line"><span class="punctuation">&#123;</span></span><br><span class="line">  <span class="attr">&quot;packageManager&quot;</span><span class="punctuation">:</span> <span class="string">&quot;pnpm@11.1.0&quot;</span></span><br><span class="line"><span class="punctuation">&#125;</span></span><br></pre></td></tr></table></figure><p>第二，使用锁文件安装：</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">pnpm install --frozen-lockfile</span><br></pre></td></tr></table></figure><p>这样 CI 不会随意解析新版本， <code>minimumReleaseAge</code> 主要会在新增依赖、更新依赖、刷新 lockfile 时发挥作用。</p><p>典型 GitHub Actions 示例：</p><figure class="highlight yaml"><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></pre></td><td class="code"><pre><span class="line"><span class="attr">name:</span> <span class="string">CI</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="attr">pull_request:</span></span><br><span class="line">  <span class="attr">push:</span></span><br><span class="line">    <span class="attr">branches:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="string">main</span></span><br><span class="line"></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="attr">test:</span></span><br><span class="line">    <span class="attr">runs-on:</span> <span class="string">ubuntu-latest</span></span><br><span class="line"></span><br><span class="line">    <span class="attr">steps:</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/checkout@v4</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">pnpm/action-setup@v4</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">uses:</span> <span class="string">actions/setup-node@v4</span></span><br><span class="line">        <span class="attr">with:</span></span><br><span class="line">          <span class="attr">node-version:</span> <span class="number">22</span></span><br><span class="line">          <span class="attr">cache:</span> <span class="string">pnpm</span></span><br><span class="line"></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">run:</span> <span class="string">pnpm</span> <span class="string">install</span> <span class="string">--frozen-lockfile</span></span><br><span class="line">      <span class="bullet">-</span> <span class="attr">run:</span> <span class="string">pnpm</span> <span class="string">test</span></span><br></pre></td></tr></table></figure><h2 id="8-如何验证配置是否生效"><a href="#8-如何验证配置是否生效" class="headerlink" title="8. 如何验证配置是否生效"></a>8. 如何验证配置是否生效</h2><p>可以尝试安装一个刚发布不久的版本：</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">pnpm add 某个刚发布的包@latest</span><br></pre></td></tr></table></figure><p>如果该包版本发布时间没有达到配置的分钟数，pnpm 会避免解析该版本，或者在严格模式下直接失败。</p><p>更常见的验证方式是在更新依赖时观察 lockfile：</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">pnpm update</span><br></pre></td></tr></table></figure><p>如果最新版本太新，pnpm 不会马上把它写入 <code>pnpm-lock.yaml</code>。</p><h2 id="9-常见问题"><a href="#9-常见问题" class="headerlink" title="9. 常见问题"></a>9. 常见问题</h2><p><strong>Q1</strong>： <code>minimumReleaseAge</code> 会影响传递依赖吗？</p><p>会。pnpm 官方文档明确说明该配置适用于所有依赖，包括传递依赖。</p><p><strong>Q2</strong> ：pnpm v11 还需要手动配置吗？</p><p>pnpm v11 默认 minimumReleaseAge: 1440，也就是默认延迟 1 天。<br>如果你想更严格，需要手动改成 2880 或 10080；如果你想关闭，可以设置为：</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="attr">minimumReleaseAge:</span> <span class="number">0</span></span><br></pre></td></tr></table></figure><p>pnpm 官方供应链安全文档也说明，在 pnpm v11 中该值默认是 1440，如需退出该行为，可在 pnpm-workspace.yaml 中设置为 0。</p><p><strong>Q3</strong> ：急需升级安全补丁怎么办？</p><p>推荐只临时放行具体版本：</p><figure class="highlight yaml"><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"><span class="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAgeExclude:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">vite@x.y.z</span></span><br></pre></td></tr></table></figure><p>处理完成后，再删除这个例外。</p><p><strong>Q4</strong>：私有 registry 没有发布时间怎么办？</p><p>pnpm v11 提供了 <code>minimumReleaseAgeIgnoreMissingTime</code>。当为 true 时，如果 registry 元数据没有 time 字段，pnpm 会跳过该包的 <code>minimumReleaseAge</code> 检查；如果设为 false，则在缺失时间信息时失败。</p><p>更严格的配置：</p><figure class="highlight yaml"><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="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"><span class="attr">minimumReleaseAgeIgnoreMissingTime:</span> <span class="literal">false</span></span><br></pre></td></tr></table></figure><h2 id="10-最佳实践总结"><a href="#10-最佳实践总结" class="headerlink" title="10. 最佳实践总结"></a>10. 最佳实践总结</h2><p>推荐从这个配置开始：</p><figure class="highlight yaml"><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="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"><span class="attr">minimumReleaseAgeStrict:</span> <span class="literal">true</span></span><br></pre></td></tr></table></figure><p>如果是 monorepo 或企业项目，可以加上内部包例外：</p><figure class="highlight yaml"><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="attr">packages:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;apps/*&quot;</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;packages/*&quot;</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAge:</span> <span class="number">1440</span></span><br><span class="line"><span class="attr">minimumReleaseAgeStrict:</span> <span class="literal">true</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAgeExclude:</span></span><br><span class="line">  <span class="bullet">-</span> <span class="string">&quot;@your-company/*&quot;</span></span><br></pre></td></tr></table></figure><h2 id="11-其他包管理器如何设置"><a href="#11-其他包管理器如何设置" class="headerlink" title="11. 其他包管理器如何设置"></a>11. 其他包管理器如何设置</h2><ul><li><strong>npm</strong> : 在 <code>.npmrc</code> 中， <code>min-release-age=X</code> 。X 是 <strong>天</strong> 的数量。需要 npm <code>v11.10.0</code> 或更高版本。</li><li><strong>Yarn</strong> : 在 <code>.yarnrc.yml</code> 中，设置 <code>npmMinimalAgeGate: X</code>。<br>X 是持续时间（支持的日期单位是 ms, s, m, h, d, w，例如 7d）。如果没有指定持续时间，则解析为分钟（即 npmMinimalAgeGate: 1440 等于 npmMinimalAgeGate: 1440m）。需要 <code>Yarn v4.11</code> 或更高版本</li><li><strong>Bun</strong> : 在 <code>bunfig.toml</code> 中，设置：  <figure class="highlight toml"><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"><span class="section">[install]</span></span><br><span class="line"></span><br><span class="line"><span class="attr">minimumReleaseAge</span> = X</span><br></pre></td></tr></table></figure>  X 是秒数。需要 Bun <code>v1.3.0</code> 或更高版本。</li></ul><h2 id="参考链接"><a href="#参考链接" class="headerlink" title="参考链接"></a>参考链接</h2><ul><li><a href="https://pnpm.io/zh/supply-chain-security">缓解供应链攻击 - pnpm</a></li><li><a href="https://pnpm.io/zh/settings">设置（pnpm-workspace.yaml） - pnpm</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;近来针对开发者的供应链攻击越来越频繁，且规模也在变大，比如最近的 &lt;a href=&quot;https://ooo.run/post/mini-shai-hulud-check-and-defense.html&quot;&gt;Mini Shai-Hulud 供应链攻击事件&lt;/a&gt; 中，顶级项目</summary>
      
    
    
    
    <category term="教程" scheme="https://ooo.run/categories/%E6%95%99%E7%A8%8B/"/>
    
    
    <category term="开发者安全" scheme="https://ooo.run/tags/%E5%BC%80%E5%8F%91%E8%80%85%E5%AE%89%E5%85%A8/"/>
    
    <category term="pnpm" scheme="https://ooo.run/tags/pnpm/"/>
    
  </entry>
  
  <entry>
    <title>别让终端历史成为你的&quot;密码本&quot;：避免记录敏感命的实用指南</title>
    <link href="https://ooo.run/post/avoid-leaking-secrets-in-shell-history.html"/>
    <id>https://ooo.run/post/avoid-leaking-secrets-in-shell-history.html</id>
    <published>2026-05-17T03:31:47.000Z</published>
    <updated>2026-05-17T05:23:56.610Z</updated>
    
    <content type="html"><![CDATA[<h2 id="前言：供应链攻击之下，每一行命令都可能是入口"><a href="#前言：供应链攻击之下，每一行命令都可能是入口" class="headerlink" title="前言：供应链攻击之下，每一行命令都可能是入口"></a>前言：供应链攻击之下，每一行命令都可能是入口</h2><p>2025 年至今，针对 npm、PyPI、GitHub Actions、Docker Hub 的供应链攻击事件持续走高：被污染的依赖、被劫持的 CI Token、被钓鱼的维护者账号……攻击者越来越偏好「绕过你的代码、直接拿你的凭证」的低成本路径。</p><p>而开发者最容易忽略的一处 “凭证仓库” ，恰恰是每天都在用、却几乎从不审计的：<strong>Shell 历史记录文件</strong>。</p><ul><li>macOS &#x2F; Linux：<code>~/.zsh_history</code>、<code>~/.bash_history</code></li><li>Windows PowerShell：<code>%APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt</code></li></ul><p>这些文件以 <strong>明文</strong> 保存你输入过的所有命令——包括误粘贴的 API Key、带密码的 URL、订阅链接、数据库连接串。一旦你的电脑被恶意 npm 包、伪装 VSCode 插件、或被入侵的 CLI 工具读取到这些路径，攻击者无需提权就能直接打包带走。</p><p>但是有时也的确会需要在命令中输入密钥，比如 <code>export API_KEY=</code>，本文给出两件可立刻落地的小事：</p><ol><li><strong>写命令时</strong>：让敏感命令一开始就不进历史。</li><li><strong>写完之后</strong>：定期扫一遍历史文件，看看自己是不是早就漏过。</li></ol><hr><h2 id="一、macOS-Linux：在命令前加一个空格"><a href="#一、macOS-Linux：在命令前加一个空格" class="headerlink" title="一、macOS &#x2F; Linux：在命令前加一个空格"></a>一、macOS &#x2F; Linux：在命令前加一个空格</h2><p><code>bash</code> 和 <code>zsh</code> 都支持 <code>HISTCONTROL</code> &#x2F; <code>HIST_IGNORE_SPACE</code> —— 一旦开启，<strong>以空格开头的命令不会被写入历史文件，也不会出现在 <code>↑</code> 历史回溯里</strong>。</p><p>很多发行版或 shell 框架可能已经启用启用了这个特性。验证一下：</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"><span class="comment"># bash - 期望包含 ignorespace 或 ignoreboth</span></span><br><span class="line"><span class="built_in">echo</span> <span class="string">&quot;<span class="variable">$HISTCONTROL</span>&quot;</span>   </span><br><span class="line"></span><br><span class="line"><span class="comment"># zsh - 期望看到 histignorespace</span></span><br><span class="line"><span class="built_in">setopt</span> | grep histignorespace   </span><br></pre></td></tr></table></figure><p>如果没有，加入你的 <code>~/.bashrc</code> 或 <code>~/.zshrc</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"><span class="comment"># bash</span></span><br><span class="line"><span class="comment"># ignorespace + ignoredups</span></span><br><span class="line"><span class="built_in">export</span> HISTCONTROL=ignoreboth   </span><br><span class="line"><span class="comment"># zsh</span></span><br><span class="line"><span class="built_in">setopt</span> HIST_IGNORE_SPACE</span><br></pre></td></tr></table></figure><p>之后，敏感命令前面<strong>加一个空格</strong>即可：</p><figure class="highlight sh"><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> OPENAI_API_KEY=<span class="string">&quot;sk-...&quot;</span></span><br><span class="line">curl -H <span class="string">&quot;Authorization: Bearer <span class="variable">$TOKEN</span>&quot;</span> https://api.example.com</span><br></pre></td></tr></table></figure><p>退后退出本次终端(将命令写入历史记录文件)，重新打开，使用下面的命令验证：</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">tail</span> -n 5 ~/.zsh_history</span><br></pre></td></tr></table></figure><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">tail</span> -n 5 ~/.bash_history</span><br></pre></td></tr></table></figure><hr><h2 id="二、Windows-PowerShell：用-AddToHistoryHandler-自己实现"><a href="#二、Windows-PowerShell：用-AddToHistoryHandler-自己实现" class="headerlink" title="二、Windows PowerShell：用 AddToHistoryHandler 自己实现"></a>二、Windows PowerShell：用 AddToHistoryHandler 自己实现</h2><p>PowerShell 没有内置「前导空格不入历史」的开关，但 PSReadLine 提供了 <code>AddToHistoryHandler</code>，可以自定义哪些命令进历史。</p><h3 id="配置步骤"><a href="#配置步骤" class="headerlink" title="配置步骤"></a>配置步骤</h3><p>打开（或创建）你的 PowerShell profile：</p><figure class="highlight powershell"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">notepad <span class="variable">$PROFILE</span></span><br></pre></td></tr></table></figure><p>写入：</p><figure class="highlight powershell"><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="built_in">Set-PSReadLineOption</span> <span class="literal">-AddToHistoryHandler</span> &#123;</span><br><span class="line">    <span class="keyword">param</span>([<span class="built_in">string</span>]<span class="variable">$Line</span>)</span><br><span class="line"></span><br><span class="line">    <span class="keyword">if</span> (<span class="variable">$Line</span>.StartsWith(<span class="string">&#x27; &#x27;</span>)) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="variable">$false</span></span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">return</span> <span class="variable">$true</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>保存后，<strong>重启 PowerShell</strong>。之后像这样以空格开头输入的命令，不会写入当前会话历史，也不会落盘到 <code>ConsoleHost_history.txt</code>：</p><figure class="highlight powershell"><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="comment"># ...</span></span><br><span class="line">  <span class="built_in">curl</span> https://example.com/secret<span class="literal">-url</span> </span><br></pre></td></tr></table></figure><blockquote><p>PSReadLine 文档明确说明：handler 返回 <code>$false</code> 等同于 <code>SkipAdding</code>，<strong>当前会话和历史文件</strong>都不会保留这条命令。</p></blockquote><blockquote><p>这只影响<strong>之后</strong>输入的新命令；已经写进 <code>ConsoleHost_history.txt</code> 的内容不会被清理。</p></blockquote><hr><h2 id="三、回头审计：你的历史里早就有什么？"><a href="#三、回头审计：你的历史里早就有什么？" class="headerlink" title="三、回头审计：你的历史里早就有什么？"></a>三、回头审计：你的历史里早就有什么？</h2><p>加了开关只是治未病。下一步是<strong>翻账</strong>——很多人第一次扫描自家 <code>~/.zsh_history</code> 都会被吓到。</p><p>下面这一组命令面向 zsh，bash 用户把路径换成 <code>~/.bash_history</code> 即可。</p><h3 id="1-先看文件大小，心里有数"><a href="#1-先看文件大小，心里有数" class="headerlink" title="1. 先看文件大小，心里有数"></a>1. 先看文件大小，心里有数</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">ls</span> -lh ~/.zsh_history</span><br></pre></td></tr></table></figure><h3 id="2-排查常见密钥-密码关键词"><a href="#2-排查常见密钥-密码关键词" class="headerlink" title="2. 排查常见密钥&#x2F;密码关键词"></a>2. 排查常见密钥&#x2F;密码关键词</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep -nEi <span class="string">&#x27;api[_-]?key|apikey|secret|token|password|passwd|pwd|authorization|bearer|credential|client_secret|access[_-]?key|private[_-]?key|OPENAI_API_KEY|ANTHROPIC_API_KEY|GITHUB_TOKEN|GH_TOKEN|NPM_TOKEN|AWS_ACCESS_KEY_ID|AWS_SECRET_ACCESS_KEY|DATABASE_URL|MONGODB_URI|REDIS_URL&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><h3 id="3-排查典型-Token-格式"><a href="#3-排查典型-Token-格式" class="headerlink" title="3. 排查典型 Token 格式"></a>3. 排查典型 Token 格式</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep -nE <span class="string">&#x27;sk-[A-Za-z0-9_-]&#123;20,&#125;|github_pat_[A-Za-z0-9_]&#123;20,&#125;|gh[pousr]_[A-Za-z0-9]&#123;20,&#125;|AKIA[0-9A-Z]&#123;16&#125;|AIza[0-9A-Za-z_-]&#123;35&#125;&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><p>覆盖：OpenAI &#x2F; Anthropic 风格 <code>sk-…</code>、GitHub Fine-grained PAT、Classic PAT、AWS Access Key、Google API Key。</p><h3 id="4-排查带账号密码的-URL"><a href="#4-排查带账号密码的-URL" class="headerlink" title="4. 排查带账号密码的 URL"></a>4. 排查带账号密码的 URL</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep -nEi <span class="string">&#x27;https?://[^[:space:]/@:]+:[^[:space:]/@]+@&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><p>形如 <code>https://user:password@host/...</code> —— 在 git clone、curl、psql 里非常常见。</p><h3 id="5-排查环境变量赋值"><a href="#5-排查环境变量赋值" class="headerlink" title="5. 排查环境变量赋值"></a>5. 排查环境变量赋值</h3><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">grep -nEi <span class="string">&#x27;(\$?[A-Z0-9_]*(KEY|TOKEN|SECRET|PASSWORD|PASS|PWD|URL|URI|AUTH|CREDENTIAL)[A-Z0-9_]*=|export [A-Z0-9_]+=)&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><p>抓 <code>export FOO_TOKEN=...</code>、<code>API_KEY=...</code> 这类一行式赋值。</p><h3 id="6-排查-curl-请求头泄漏"><a href="#6-排查-curl-请求头泄漏" class="headerlink" title="6. 排查 curl &#x2F; 请求头泄漏"></a>6. 排查 curl &#x2F; 请求头泄漏</h3><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">grep -nEi <span class="string">&#x27;(curl|wget|httpie|http) .*(Authorization|Bearer|X-API-Key|api-key|token)&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><h3 id="7-排查云服务-部署工具的登录与密钥命令"><a href="#7-排查云服务-部署工具的登录与密钥命令" class="headerlink" title="7. 排查云服务 &#x2F; 部署工具的登录与密钥命令"></a>7. 排查云服务 &#x2F; 部署工具的登录与密钥命令</h3><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">grep -nEi <span class="string">&#x27;\b(aws|az|gcloud|vercel|netlify|supabase|firebase|docker|npm|pnpm|gh)\b.*\b(login|auth|token|secret|credentials|env)\b&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><h3 id="8-排查订阅-科学上网链接"><a href="#8-排查订阅-科学上网链接" class="headerlink" title="8. 排查订阅 &#x2F; 科学上网链接"></a>8. 排查订阅 &#x2F; 科学上网链接</h3><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">grep -nEi <span class="string">&#x27;(subscription|shadowrocket|clash|mihomo|vless://|vmess://|trojan://|ss://|trojan|proxy)&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><h3 id="9-排查-URL-中的-UUID（常见于订阅链接）"><a href="#9-排查-URL-中的-UUID（常见于订阅链接）" class="headerlink" title="9. 排查 URL 中的 UUID（常见于订阅链接）"></a>9. 排查 URL 中的 UUID（常见于订阅链接）</h3><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">grep -nEi <span class="string">&#x27;https?://[^[:space:]]*[0-9a-f]&#123;8&#125;-[0-9a-f]&#123;4&#125;-[0-9a-f]&#123;4&#125;-[0-9a-f]&#123;4&#125;-[0-9a-f]&#123;12&#125;[^[:space:]]*&#x27;</span> ~/.zsh_history</span><br></pre></td></tr></table></figure><hr><h2 id="四、命中了之后怎么办？"><a href="#四、命中了之后怎么办？" class="headerlink" title="四、命中了之后怎么办？"></a>四、命中了之后怎么办？</h2><p><strong>主动审查后，可以选择删除本地的历史记录，如果担心凭证存在泄漏风险。</strong> 可以按照优先级建议排查：</p><ol><li><strong>真实的 token &#x2F; API key</strong>（OpenAI、Anthropic、GitHub PAT、NPM Token……）—— 立刻去对应平台 revoke 并重新签发。</li><li><strong>订阅 URL &#x2F; VPN 节点链接</strong> —— 重置 UUID 或 token，旧链接会一直被滥用流量。</li><li><strong>数据库连接串、Redis &#x2F; MongoDB URI</strong> —— 改密码，必要时调整网络访问白名单。</li><li><strong>带密码的 HTTP(S) URL</strong> —— 改密码，并检查 git remote、~&#x2F;.netrc 等地方是否同步残留。</li><li><strong>云服务凭证</strong>（AWS Access Key、GCP Service Account JSON 内容）—— 走云厂商的 rotate 流程，并检查 CloudTrail &#x2F; Audit Log 是否有异常调用。</li></ol><hr><h2 id="五、把好习惯固化下来"><a href="#五、把好习惯固化下来" class="headerlink" title="五、把好习惯固化下来"></a>五、把好习惯固化下来</h2><ul><li><strong>行首加空格</strong>这件事，要练成肌肉记忆：复制任何含密钥的命令，先按一下 <code>Space</code> 再粘贴。</li><li>能用文件读取的就不要写在命令行：<code>curl --header @auth.txt</code>、<code>gh auth login --with-token &lt; token.txt</code>、<code>docker login --password-stdin</code> 都是更好的形态。</li><li>真敏感的密钥，长期方案是放进 **macOS Keychain &#x2F; Windows Credential Manager &#x2F; <code>pass</code> &#x2F; 1Password CLI &#x2F; <code>gh secret</code>**，让命令行里只出现引用名，不出现明文。</li><li>给自己设一个每月一次的「翻历史」提醒——供应链事件大多在事发后才被披露，定期回头审计比一次性清理更重要。</li></ul><blockquote><p>终端历史不是你的备忘录，是攻击者的字典。少留一点东西在里面，下次出事的时候，你就少一份要连夜轮换的清单。</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;前言：供应链攻击之下，每一行命令都可能是入口&quot;&gt;&lt;a href=&quot;#前言：供应链攻击之下，每一行命令都可能是入口&quot; class=&quot;headerlink&quot; title=&quot;前言：供应链攻击之下，每一行命令都可能是入口&quot;&gt;&lt;/a&gt;前言：供应链攻击之下，每一行命令都可能是</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Bash" scheme="https://ooo.run/tags/Bash/"/>
    
    <category term="Zsh" scheme="https://ooo.run/tags/Zsh/"/>
    
    <category term="Powershell" scheme="https://ooo.run/tags/Powershell/"/>
    
    <category term="Shell" scheme="https://ooo.run/tags/Shell/"/>
    
    <category term="开发者安全" scheme="https://ooo.run/tags/%E5%BC%80%E5%8F%91%E8%80%85%E5%AE%89%E5%85%A8/"/>
    
  </entry>
  
  <entry>
    <title>Mini Shai-Hulud 供应链攻击事件解析与检测指南</title>
    <link href="https://ooo.run/post/mini-shai-hulud-check-and-defense.html"/>
    <id>https://ooo.run/post/mini-shai-hulud-check-and-defense.html</id>
    <published>2026-05-13T05:22:24.000Z</published>
    <updated>2026-05-13T07:40:31.167Z</updated>
    
    <content type="html"><![CDATA[<p>2026 年 5 月 11 日，出现了一起针对 npm 与 PyPI 生态的协同供应链攻击。此次攻击同时波及多个知名的 npm 与 PyPI 软件包。</p><p>这不是一次普通的恶意包投放事件。攻击者并未简单依赖窃取 npm 凭据，而是利用 GitHub Actions、缓存污染、OIDC Token 滥用、恶意依赖、持久化守护进程以及多通道 C2 基础设施，构建了一条完整的供应链入侵链路。</p><p>TanStack 相关恶意版本发布具体时间：北京时间 <strong>5 月 12 日凌晨 3:20 至 3:26（UTC+8）</strong></p><hr><h2 id="一、事件概览"><a href="#一、事件概览" class="headerlink" title="一、事件概览"></a>一、事件概览</h2><p>本次攻击影响了 npm 与 PyPI 两大生态中的多个高价值包。</p><p>主要受影响的软件包：</p><ul><li><code>@tanstack</code> 下的软件包，例如 <code>@tanstack/react-router</code>，这是 React 生态中最广泛使用的路由库之一，每周下载量约 1200 万次， <code>@tanstack/vue-router</code> 也受到影响。</li><li><code>@uipath</code> 下的软件包，包括 UiPath 企业自动化平台相关工具、CLI 与 Agent SDK</li><li><code>@mistralai/mistralai</code>，即 Mistral AI 官方 TypeScript 客户端</li><li><code>@opensearch-project/opensearch</code> </li><li>PyPI 上的 <code>mistralai</code>: 2.4.6</li><li>PyPI 上的 <code>guardrails-ai</code> : 0.10.1</li></ul><p>npm 团队已经注意到该攻击活动，并快速移除了恶意版本。</p><blockquote><p>可以在文章结尾查看已知的具体受影响的软件包。</p></blockquote><h2 id="二、TanStack-攻击链：GitHub-Actions-成为突破口"><a href="#二、TanStack-攻击链：GitHub-Actions-成为突破口" class="headerlink" title="二、TanStack 攻击链：GitHub Actions 成为突破口"></a>二、TanStack 攻击链：GitHub Actions 成为突破口</h2><p>TanStack 的失陷源于一条针对 GitHub Actions 的复杂漏洞利用链（包含三个漏洞）：</p><p>攻击链大致如下：</p><ol><li>攻击者 fork 了 <code>TanStack/router</code> 仓库。</li><li>攻击者将 fork 后的仓库重命名为 <code>zblgg/configuration</code> 规避了 Fork 列表的审查。</li><li>攻击者提交 Pull Request，触发目标仓库中的 <code>pull_request_target</code> 工作流。</li><li>该工作流错误地 checkout 并执行了攻击者 fork 中的代码。</li><li>攻击者借此污染 GitHub Actions 缓存，将恶意 pnpm store 写入缓存。</li><li>后续合法维护者的 PR 被合并到 main 分支时，release workflow 恢复了被污染的缓存。</li><li>攻击者控制的二进制文件从 GitHub Actions Runner 的进程内存中读取 OIDC Token。</li><li>攻击者使用这些 Token 发布恶意 npm 包版本。</li></ol><p>这一链路最值得关注的地方在于：攻击者无需窃取 npm 凭据，也能完成恶意包发布。</p><p>这说明在现代软件供应链中，包管理账号本身已不再是唯一的关键资产。CI&#x2F;CD 工作流、缓存、OIDC Token、发布权限和工作流边界同样是高价值攻击面。</p><h3 id="UiPath-的感染变种"><a href="#UiPath-的感染变种" class="headerlink" title="UiPath 的感染变种"></a>UiPath 的感染变种</h3><p>在 <code>@tanstack</code> 受到攻击后不久，<code>@uipath</code> 也宣告失陷。这些包使用一个预安装脚本（<code>node setup.mjs</code>）下载 Bun 运行时环境并执行恶意 payload。这与之前 SAP 失陷事件中的交付机制相同。UiPath 变种使用了重新混淆过的 payload 和不同的 Campaign Key，但连接的是相同的 C2（命令与控制）基础设施。</p><h2 id="三、恶意-Payload：凭证窃取与蠕虫式传播"><a href="#三、恶意-Payload：凭证窃取与蠕虫式传播" class="headerlink" title="三、恶意 Payload：凭证窃取与蠕虫式传播"></a>三、恶意 Payload：凭证窃取与蠕虫式传播</h2><p>本次恶意 payload 具备自我传播能力，主要窃取以下类型的凭据和身份材料：</p><p>它主要锁定以下目标：</p><ul><li>CI&#x2F;CD 令牌（GitHub Actions OIDC、GitLab、CircleCI）</li><li>云服务凭证（AWS IMDSv2、GCP、Azure）</li><li>Kubernetes 服务账号</li><li>HashiCorp Vault</li><li>Package registry tokens</li></ul><p><strong>蠕虫行为</strong>：恶意软件会使用窃取来的 npm 令牌和 GitHub Actions OIDC 令牌，进一步向受害者拥有写入权限的其他包发布投毒版本，从而在 npm 生态系统中像蠕虫一样迅速蔓延。</p><h3 id="破坏性的本地守护进程"><a href="#破坏性的本地守护进程" class="headerlink" title="破坏性的本地守护进程"></a>破坏性的本地守护进程</h3><p>如果恶意软件发现了有效的目标 <code>ghp_</code> 开头的 <code>GitHub Personal Access Token</code> 或 <code>gho_</code> 开头的 <code>OAuth Token</code>，它在本地会安装一个持久化守护进程：</p><p>macOS：</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">~/Library/LaunchAgents/com.user.gh-token-monitor.plist</span><br></pre></td></tr></table></figure><p>Linux：</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">~/.config/systemd/user/gh-token-monitor.service</span><br></pre></td></tr></table></figure><p><strong>如果它因 GitHub 令牌被撤销而收到 40X 错误，该进程会尝试执行 <code>rm -rf ~/</code>，直接清空用户主目录！</strong>  不过该守护进程会在运行 24 小时后自动退出。</p><blockquote><p>注：与之前的 Mini Shai-Hulud 变种一样，该恶意软件会检查系统是否配置为俄语，如果是，则直接终止运行，不窃取任何数据。</p></blockquote><h2 id="四、检查指南"><a href="#四、检查指南" class="headerlink" title="四、检查指南"></a>四、检查指南</h2><ol><li><strong>排查软件包</strong>：搜索 lockfiles 和 CI 日志，是否出现受影响的软件包版本。检查包根目录下是否存在 <code>router_init.js</code> 或 <code>setup.mjs</code>。</li><li><strong>检查并清除持久化威胁</strong>：在开发者机器上搜索 <code>gh-token-monitor</code> 守护进程并将其删除（路径见下方指标）。</li><li><strong>轮换所有凭证</strong>：如果怀疑受到影响，请立即轮换 GitHub 令牌、npm 令牌、AWS 凭证、Vault 令牌、Kubernetes 服务账号和 CI&#x2F;CD 机密信息。<blockquote><p><strong>警告：在吊销 GitHub 令牌之前，请务必先检查并移除持久化守护进程，以免触发恶意软件的（<code>rm -rf ~/</code>）命令。</strong></p></blockquote></li><li><strong>检查 IDE 目录</strong>：检查 <code>.claude/</code> 和 <code>.vscode/</code> 目录中是否残留 <code>router_runtime.js</code> 或 <code>setup.mjs</code>。这些文件在执行 <code>npm uninstall</code> 后仍可能驻留。</li><li><strong>屏蔽 C2 目标域名</strong>：在 DNS&#x2F;代理层面拦截 <code>git-tanstack.com</code> 以及 <code>*.getsession.org</code>。</li></ol><h3 id="文件"><a href="#文件" class="headerlink" title="文件"></a>文件</h3><table><thead><tr><th align="left">文件名称</th><th align="left">详情</th><th align="left">SHA-256 &#x2F; SHA-1</th></tr></thead><tbody><tr><td align="left"><code>router_init.js</code></td><td align="left">2,341,681 bytes</td><td align="left">SHA256:<br>&#96;&#96;ab4fcadaec49c03278063dd269ea5eef82d24f2124a8e15d7b90f2fa8601266c&#96;</td></tr><tr><td align="left"><code>router_init.js</code></td><td align="left">2,339,346 bytes</td><td align="left">SHA256:<br><code>2ec78d556d696e208927cc503d48e4b5eb56b31abc2870c2ed2e98d6be27fc96</code><br>SHA1:<br> <code>e7d582b98ca80690883175470e96f703ef6dc497</code></td></tr><tr><td align="left"><code>setup.mjs</code></td><td align="left">5,047 bytes</td><td align="left">SHA256:<br><code>2258284d65f63829bd67eaba01ef6f1ada2f593f9bbe41678b2df360bd90d3df</code><br>SHA1:<br> <code>12f35b1081b17d21815b35feb57ab03d02482116</code></td></tr><tr><td align="left"><code>opensearch_init.js</code></td><td align="left">-</td><td align="left">SHA1:<br><code>820fa07a7328b6cf2b417078e103721d4d8f2e79</code></td></tr></tbody></table><h3 id="网络-IOC"><a href="#网络-IOC" class="headerlink" title="网络 IOC"></a>网络 IOC</h3><table><thead><tr><th align="left">类型</th><th align="left">目标</th></tr></thead><tbody><tr><td align="left"><strong>C2 域名</strong></td><td align="left"><code>git-tanstack.com</code></td></tr><tr><td align="left"><strong>Session 种子节点</strong></td><td align="left"><code>seed1.getsession.org</code>, <code>seed2.getsession.org</code>, <code>seed3.getsession.org</code></td></tr><tr><td align="left"><strong>Session 文件服务器</strong></td><td align="left"><code>filev2.getsession.org</code></td></tr><tr><td align="left"><strong>C2 IP 地址</strong></td><td align="left"><code>83.142.209.194</code></td></tr><tr><td align="left"><strong>PyPI Payload URL</strong></td><td align="left"><code>git-tanstack.com/tmp/transformers.pyz</code></td></tr></tbody></table><h3 id="其他特征"><a href="#其他特征" class="headerlink" title="其他特征"></a>其他特征</h3><table><thead><tr><th align="left">类别</th><th align="left">特征描述</th></tr></thead><tbody><tr><td align="left"><strong>服务名称</strong></td><td align="left"><code>gh-token-monitor</code></td></tr><tr><td align="left"><strong>macOS 路径</strong></td><td align="left"><code>~/Library/LaunchAgents/com.user.gh-token-monitor.plist</code></td></tr><tr><td align="left"><strong>Linux 路径</strong></td><td align="left"><code>~/.config/systemd/user/gh-token-monitor.service</code></td></tr><tr><td align="left"><strong>运行时痕迹</strong></td><td align="left"><code>router_runtime.js</code> , <code>tanstack_runner.js</code></td></tr><tr><td align="left"><strong>Hook 执行命令</strong></td><td align="left"><code>preinstall: node setup.mjs</code></td></tr><tr><td align="left"><strong>恶意 Git 依赖</strong></td><td align="left"><code>github:tanstack/router#79ac49eedf774dd4b0cfa308722bc463cfe5885c</code></td></tr><tr><td align="left"><strong>特定运行环境</strong></td><td align="left">Bun Version <code>1.3.13</code></td></tr></tbody></table><h2 id="五、受影响的软件包"><a href="#五、受影响的软件包" class="headerlink" title="五、受影响的软件包"></a>五、受影响的软件包</h2><h3 id="PyPI"><a href="#PyPI" class="headerlink" title="PyPI"></a>PyPI</h3><ul><li><code>guardrails-ai@0.10.1</code></li><li><code>mistralai@2.4.6</code></li></ul><h3 id="NPM"><a href="#NPM" class="headerlink" title="NPM"></a>NPM</h3><table><thead><tr><th align="left">Package</th><th align="left">Affected Versions</th></tr></thead><tbody><tr><td align="left">@beproduct&#x2F;nestjs-auth</td><td align="left">0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8, 0.1.9, 0.1.10, 0.1.11, 0.1.12, 0.1.13, 0.1.14, 0.1.15, 0.1.16, 0.1.17, 0.1.18, 0.1.19</td></tr><tr><td align="left">@cap-js&#x2F;db-service</td><td align="left">2.10.1</td></tr><tr><td align="left">@cap-js&#x2F;postgres</td><td align="left">2.2.2</td></tr><tr><td align="left">@cap-js&#x2F;sqlite</td><td align="left">2.2.2</td></tr><tr><td align="left">@dirigible-ai&#x2F;sdk</td><td align="left">0.6.2, 0.6.3</td></tr><tr><td align="left">@draftauth&#x2F;client</td><td align="left">0.2.1, 0.2.2</td></tr><tr><td align="left">@draftauth&#x2F;core</td><td align="left">0.13.1, 0.13.2</td></tr><tr><td align="left">@draftlab&#x2F;auth</td><td align="left">0.24.1, 0.24.2</td></tr><tr><td align="left">@draftlab&#x2F;auth-router</td><td align="left">0.5.1, 0.5.2</td></tr><tr><td align="left">@draftlab&#x2F;db</td><td align="left">0.16.1, 0.16.2</td></tr><tr><td align="left">@mesadev&#x2F;rest</td><td align="left">0.28.3</td></tr><tr><td align="left">@mesadev&#x2F;saguaro</td><td align="left">0.4.22</td></tr><tr><td align="left">@mesadev&#x2F;sdk</td><td align="left">0.28.3</td></tr><tr><td align="left">@mistralai&#x2F;mistralai</td><td align="left">2.2.2, 2.2.3, 2.2.4</td></tr><tr><td align="left">@mistralai&#x2F;mistralai-azure</td><td align="left">1.7.1, 1.7.2, 1.7.3</td></tr><tr><td align="left">@mistralai&#x2F;mistralai-gcp</td><td align="left">1.7.1, 1.7.2, 1.7.3</td></tr><tr><td align="left">@ml-toolkit-ts&#x2F;preprocessing</td><td align="left">1.0.2, 1.0.3</td></tr><tr><td align="left">@ml-toolkit-ts&#x2F;xgboost</td><td align="left">1.0.3, 1.0.4</td></tr><tr><td align="left">@opensearch-project&#x2F;opensearch</td><td align="left">3.5.3, 3.6.2, 3.7.0, 3.8.0</td></tr><tr><td align="left">@squawk&#x2F;airport-data</td><td align="left">0.7.4, 0.7.5, 0.7.6, 0.7.7, 0.7.8</td></tr><tr><td align="left">@squawk&#x2F;airports</td><td align="left">0.6.2, 0.6.3, 0.6.4, 0.6.5, 0.6.6</td></tr><tr><td align="left">@squawk&#x2F;airspace</td><td align="left">0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5</td></tr><tr><td align="left">@squawk&#x2F;airspace-data</td><td align="left">0.5.3, 0.5.4, 0.5.5, 0.5.6, 0.5.7</td></tr><tr><td align="left">@squawk&#x2F;airway-data</td><td align="left">0.5.4, 0.5.5, 0.5.6, 0.5.7, 0.5.8</td></tr><tr><td align="left">@squawk&#x2F;airways</td><td align="left">0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6</td></tr><tr><td align="left">@squawk&#x2F;fix-data</td><td align="left">0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8</td></tr><tr><td align="left">@squawk&#x2F;fixes</td><td align="left">0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.6</td></tr><tr><td align="left">@squawk&#x2F;flight-math</td><td align="left">0.5.4, 0.5.5, 0.5.6, 0.5.7, 0.5.8</td></tr><tr><td align="left">@squawk&#x2F;flightplan</td><td align="left">0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6</td></tr><tr><td align="left">@squawk&#x2F;geo</td><td align="left">0.4.4, 0.4.5, 0.4.6, 0.4.7, 0.4.8</td></tr><tr><td align="left">@squawk&#x2F;icao-registry</td><td align="left">0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6</td></tr><tr><td align="left">@squawk&#x2F;icao-registry-data</td><td align="left">0.8.4, 0.8.5, 0.8.6, 0.8.7, 0.8.8</td></tr><tr><td align="left">@squawk&#x2F;mcp</td><td align="left">0.9.1, 0.9.2, 0.9.3, 0.9.4, 0.9.5</td></tr><tr><td align="left">@squawk&#x2F;navaid-data</td><td align="left">0.6.4, 0.6.5, 0.6.6, 0.6.7, 0.6.8</td></tr><tr><td align="left">@squawk&#x2F;navaids</td><td align="left">0.4.2, 0.4.3, 0.4.4, 0.4.5, 0.4.6</td></tr><tr><td align="left">@squawk&#x2F;notams</td><td align="left">0.3.6, 0.3.7, 0.3.8, 0.3.9, 0.3.10</td></tr><tr><td align="left">@squawk&#x2F;procedure-data</td><td align="left">0.7.3, 0.7.4, 0.7.5, 0.7.6, 0.7.7</td></tr><tr><td align="left">@squawk&#x2F;procedures</td><td align="left">0.5.2, 0.5.3, 0.5.4, 0.5.5, 0.5.6</td></tr><tr><td align="left">@squawk&#x2F;types</td><td align="left">0.8.1, 0.8.2, 0.8.3, 0.8.4, 0.8.5</td></tr><tr><td align="left">@squawk&#x2F;units</td><td align="left">0.4.3, 0.4.4, 0.4.5, 0.4.6, 0.4.7</td></tr><tr><td align="left">@squawk&#x2F;weather</td><td align="left">0.5.6, 0.5.7, 0.5.8, 0.5.9, 0.5.10</td></tr><tr><td align="left">@supersurkhet&#x2F;cli</td><td align="left">0.0.2, 0.0.3, 0.0.4, 0.0.5, 0.0.6, 0.0.7</td></tr><tr><td align="left">@supersurkhet&#x2F;sdk</td><td align="left">0.0.2, 0.0.3, 0.0.4, 0.0.5, 0.0.6, 0.0.7</td></tr><tr><td align="left">@tallyui&#x2F;components</td><td align="left">1.0.1, 1.0.2, 1.0.3</td></tr><tr><td align="left">@tallyui&#x2F;connector-medusa</td><td align="left">1.0.1, 1.0.2, 1.0.3</td></tr><tr><td align="left">@tallyui&#x2F;connector-shopify</td><td align="left">1.0.1, 1.0.2, 1.0.3</td></tr><tr><td align="left">@tallyui&#x2F;connector-vendure</td><td align="left">1.0.1, 1.0.2, 1.0.3</td></tr><tr><td align="left">@tallyui&#x2F;connector-woocommerce</td><td align="left">1.0.1, 1.0.2, 1.0.3</td></tr><tr><td align="left">@tallyui&#x2F;core</td><td align="left">0.2.1, 0.2.2, 0.2.3</td></tr><tr><td align="left">@tallyui&#x2F;database</td><td align="left">1.0.1, 1.0.2, 1.0.3</td></tr><tr><td align="left">@tallyui&#x2F;pos</td><td align="left">0.1.1, 0.1.2, 0.1.3</td></tr><tr><td align="left">@tallyui&#x2F;storage-sqlite</td><td align="left">0.2.1, 0.2.2, 0.2.3</td></tr><tr><td align="left">@tallyui&#x2F;theme</td><td align="left">0.2.1, 0.2.2, 0.2.3</td></tr><tr><td align="left">@tanstack&#x2F;arktype-adapter</td><td align="left">1.166.12, 1.166.15</td></tr><tr><td align="left">@tanstack&#x2F;eslint-plugin-router</td><td align="left">1.161.9, 1.161.12</td></tr><tr><td align="left">@tanstack&#x2F;eslint-plugin-start</td><td align="left">0.0.4, 0.0.7</td></tr><tr><td align="left">@tanstack&#x2F;history</td><td align="left">1.161.9, 1.161.12</td></tr><tr><td align="left">@tanstack&#x2F;nitro-v2-vite-plugin</td><td align="left">1.154.12, 1.154.15</td></tr><tr><td align="left">@tanstack&#x2F;react-router</td><td align="left">1.169.5, 1.169.8</td></tr><tr><td align="left">@tanstack&#x2F;react-router-devtools</td><td align="left">1.166.16, 1.166.19</td></tr><tr><td align="left">@tanstack&#x2F;react-router-ssr-query</td><td align="left">1.166.15, 1.166.18</td></tr><tr><td align="left">@tanstack&#x2F;react-start</td><td align="left">1.167.68, 1.167.71</td></tr><tr><td align="left">@tanstack&#x2F;react-start-client</td><td align="left">1.166.51, 1.166.54</td></tr><tr><td align="left">@tanstack&#x2F;react-start-rsc</td><td align="left">0.0.47, 0.0.50</td></tr><tr><td align="left">@tanstack&#x2F;react-start-server</td><td align="left">1.166.55, 1.166.58</td></tr><tr><td align="left">@tanstack&#x2F;router-cli</td><td align="left">1.166.46, 1.166.49</td></tr><tr><td align="left">@tanstack&#x2F;router-core</td><td align="left">1.169.5, 1.169.8</td></tr><tr><td align="left">@tanstack&#x2F;router-devtools</td><td align="left">1.166.16, 1.166.19</td></tr><tr><td align="left">@tanstack&#x2F;router-devtools-core</td><td align="left">1.167.6, 1.167.9</td></tr><tr><td align="left">@tanstack&#x2F;router-generator</td><td align="left">1.166.45, 1.166.48</td></tr><tr><td align="left">@tanstack&#x2F;router-plugin</td><td align="left">1.167.38, 1.167.41</td></tr><tr><td align="left">@tanstack&#x2F;router-ssr-query-core</td><td align="left">1.168.3, 1.168.6</td></tr><tr><td align="left">@tanstack&#x2F;router-utils</td><td align="left">1.161.11, 1.161.14</td></tr><tr><td align="left">@tanstack&#x2F;router-vite-plugin</td><td align="left">1.166.53, 1.166.56</td></tr><tr><td align="left">@tanstack&#x2F;solid-router</td><td align="left">1.169.5, 1.169.8</td></tr><tr><td align="left">@tanstack&#x2F;solid-router-devtools</td><td align="left">1.166.16, 1.166.19</td></tr><tr><td align="left">@tanstack&#x2F;solid-router-ssr-query</td><td align="left">1.166.15, 1.166.18</td></tr><tr><td align="left">@tanstack&#x2F;solid-start</td><td align="left">1.167.65, 1.167.68</td></tr><tr><td align="left">@tanstack&#x2F;solid-start-client</td><td align="left">1.166.50, 1.166.53</td></tr><tr><td align="left">@tanstack&#x2F;solid-start-server</td><td align="left">1.166.54, 1.166.57</td></tr><tr><td align="left">@tanstack&#x2F;start-client-core</td><td align="left">1.168.5, 1.168.8</td></tr><tr><td align="left">@tanstack&#x2F;start-fn-stubs</td><td align="left">1.161.9, 1.161.12</td></tr><tr><td align="left">@tanstack&#x2F;start-plugin-core</td><td align="left">1.169.23, 1.169.26</td></tr><tr><td align="left">@tanstack&#x2F;start-server-core</td><td align="left">1.167.33, 1.167.36</td></tr><tr><td align="left">@tanstack&#x2F;start-static-server-functions</td><td align="left">1.166.44, 1.166.47</td></tr><tr><td align="left">@tanstack&#x2F;start-storage-context</td><td align="left">1.166.38, 1.166.41</td></tr><tr><td align="left">@tanstack&#x2F;valibot-adapter</td><td align="left">1.166.12, 1.166.15</td></tr><tr><td align="left">@tanstack&#x2F;virtual-file-routes</td><td align="left">1.161.10, 1.161.13</td></tr><tr><td align="left">@tanstack&#x2F;vue-router</td><td align="left">1.169.5, 1.169.8</td></tr><tr><td align="left">@tanstack&#x2F;vue-router-devtools</td><td align="left">1.166.16, 1.166.19</td></tr><tr><td align="left">@tanstack&#x2F;vue-router-ssr-query</td><td align="left">1.166.15, 1.166.18</td></tr><tr><td align="left">@tanstack&#x2F;vue-start</td><td align="left">1.167.61, 1.167.64</td></tr><tr><td align="left">@tanstack&#x2F;vue-start-client</td><td align="left">1.166.46, 1.166.49</td></tr><tr><td align="left">@tanstack&#x2F;vue-start-server</td><td align="left">1.166.50, 1.166.53</td></tr><tr><td align="left">@tanstack&#x2F;zod-adapter</td><td align="left">1.166.12, 1.166.15</td></tr><tr><td align="left">@taskflow-corp&#x2F;cli</td><td align="left">0.1.24, 0.1.25, 0.1.26, 0.1.27, 0.1.28, 0.1.29</td></tr><tr><td align="left">@tolka&#x2F;cli</td><td align="left">1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6</td></tr><tr><td align="left">@uipath&#x2F;access-policy-sdk</td><td align="left">0.3.1</td></tr><tr><td align="left">@uipath&#x2F;access-policy-tool</td><td align="left">0.3.1</td></tr><tr><td align="left">@uipath&#x2F;admin-tool</td><td align="left">0.1.1</td></tr><tr><td align="left">@uipath&#x2F;agent-sdk</td><td align="left">1.0.2</td></tr><tr><td align="left">@uipath&#x2F;agent-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;agent.sdk</td><td align="left">0.0.18</td></tr><tr><td align="left">@uipath&#x2F;aops-policy-tool</td><td align="left">0.3.1</td></tr><tr><td align="left">@uipath&#x2F;ap-chat</td><td align="left">1.5.7</td></tr><tr><td align="left">@uipath&#x2F;api-workflow-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;apollo-core</td><td align="left">5.9.2</td></tr><tr><td align="left">@uipath&#x2F;apollo-react</td><td align="left">4.24.5</td></tr><tr><td align="left">@uipath&#x2F;apollo-wind</td><td align="left">2.16.2</td></tr><tr><td align="left">@uipath&#x2F;auth</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;case-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;cli</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;codedagent-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;codedagents-tool</td><td align="left">0.1.12</td></tr><tr><td align="left">@uipath&#x2F;codedapp-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;common</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;context-grounding-tool</td><td align="left">0.1.1</td></tr><tr><td align="left">@uipath&#x2F;data-fabric-tool</td><td align="left">1.0.2</td></tr><tr><td align="left">@uipath&#x2F;docsai-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;filesystem</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;flow-tool</td><td align="left">1.0.2</td></tr><tr><td align="left">@uipath&#x2F;functions-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;gov-tool</td><td align="left">0.3.1</td></tr><tr><td align="left">@uipath&#x2F;identity-tool</td><td align="left">0.1.1</td></tr><tr><td align="left">@uipath&#x2F;insights-sdk</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;insights-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;integrationservice-sdk</td><td align="left">1.0.2</td></tr><tr><td align="left">@uipath&#x2F;integrationservice-tool</td><td align="left">1.0.2</td></tr><tr><td align="left">@uipath&#x2F;llmgw-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;maestro-sdk</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;maestro-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;orchestrator-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-apiworkflow</td><td align="left">0.0.19</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-bpmn</td><td align="left">0.0.9</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-case</td><td align="left">0.0.9</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-connector</td><td align="left">0.0.19</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-flow</td><td align="left">0.0.19</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-functions</td><td align="left">0.1.1</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-webapp</td><td align="left">1.0.6</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-workflowcompiler</td><td align="left">0.0.16</td></tr><tr><td align="left">@uipath&#x2F;packager-tool-workflowcompiler-browser</td><td align="left">0.0.34</td></tr><tr><td align="left">@uipath&#x2F;platform-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;project-packager</td><td align="left">1.1.16</td></tr><tr><td align="left">@uipath&#x2F;resource-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;resourcecatalog-tool</td><td align="left">0.1.1</td></tr><tr><td align="left">@uipath&#x2F;resources-tool</td><td align="left">0.1.11</td></tr><tr><td align="left">@uipath&#x2F;robot</td><td align="left">1.3.4</td></tr><tr><td align="left">@uipath&#x2F;rpa-legacy-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;rpa-tool</td><td align="left">0.9.5</td></tr><tr><td align="left">@uipath&#x2F;solution-packager</td><td align="left">0.0.35</td></tr><tr><td align="left">@uipath&#x2F;solution-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;solutionpackager-sdk</td><td align="left">1.0.11</td></tr><tr><td align="left">@uipath&#x2F;solutionpackager-tool-core</td><td align="left">0.0.34</td></tr><tr><td align="left">@uipath&#x2F;tasks-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;telemetry</td><td align="left">0.0.7</td></tr><tr><td align="left">@uipath&#x2F;test-manager-tool</td><td align="left">1.0.2</td></tr><tr><td align="left">@uipath&#x2F;tool-workflowcompiler</td><td align="left">0.0.12</td></tr><tr><td align="left">@uipath&#x2F;traces-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;ui-widgets-multi-file-upload</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;uipath-python-bridge</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;vertical-solutions-tool</td><td align="left">1.0.1</td></tr><tr><td align="left">@uipath&#x2F;vss</td><td align="left">0.1.6</td></tr><tr><td align="left">@uipath&#x2F;widget.sdk</td><td align="left">1.2.3</td></tr><tr><td align="left">agentwork-cli</td><td align="left">0.1.4, 0.1.5</td></tr><tr><td align="left">cmux-agent-mcp</td><td align="left">0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7, 0.1.8</td></tr><tr><td align="left">cross-stitch</td><td align="left">1.1.3, 1.1.4, 1.1.5, 1.1.6, 1.1.7</td></tr><tr><td align="left">git-branch-selector</td><td align="left">1.3.3, 1.3.4, 1.3.5, 1.3.6, 1.3.7</td></tr><tr><td align="left">git-git-git</td><td align="left">1.0.8, 1.0.9, 1.0.10, 1.0.11, 1.0.12</td></tr><tr><td align="left">guardrails-ai</td><td align="left">0.10.1</td></tr><tr><td align="left">intercom-client</td><td align="left">7.0.4</td></tr><tr><td align="left">lightning</td><td align="left">2.6.2, 2.6.3</td></tr><tr><td align="left">mbt</td><td align="left">1.2.48</td></tr><tr><td align="left">mistralai</td><td align="left">2.4.6</td></tr><tr><td align="left">ml-toolkit-ts</td><td align="left">1.0.4, 1.0.5</td></tr><tr><td align="left">nextmove-mcp</td><td align="left">0.1.3, 0.1.4, 0.1.5, 0.1.6, 0.1.7</td></tr><tr><td align="left">safe-action</td><td align="left">0.8.3, 0.8.4</td></tr><tr><td align="left">ts-dna</td><td align="left">3.0.1, 3.0.2, 3.0.3, 3.0.4, 3.0.5</td></tr><tr><td align="left">wot-api</td><td align="left">0.8.1, 0.8.2, 0.8.3, 0.8.4</td></tr></tbody></table><h2 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h2><p>这次攻击展示了供应链攻击的新趋势：攻击者不再只盯着包管理器账号，而是将 GitHub Actions、缓存、OIDC、开发者终端、CI&#x2F;CD Secret 和开源包发布流程串联成完整攻击链。</p><p>对于安全团队而言，单纯“升级依赖”已经不够。真正有效的防护需要覆盖从代码提交、CI 执行、凭据签发、包发布到开发者本地环境的全链路。</p><p>这次事件也再次提醒我们：CI&#x2F;CD 是生产系统的一部分，依赖包是执行代码的一部分，开发者机器也是供应链边界的一部分。</p><h2 id="参考资料"><a href="#参考资料" class="headerlink" title="参考资料"></a>参考资料</h2><ul><li><a href="https://www.wiz.io/blog/mini-shai-hulud-strikes-again-tanstack-more-npm-packages-compromised#notable-updates-14">Mini Shai-Hulud Strikes Again: TanStack + more npm Packages Compromised</a></li><li><a href="https://digital.nhs.uk/cyber-alerts/2026/cc-4781">Supply Chain Attack Affecting Numerous npm and PyPI Packages</a></li><li><a href="https://socket.dev/blog/tanstack-npm-packages-compromised-mini-shai-hulud-supply-chain-attack#All-Compromised-Packages">TanStack npm Packages Compromised in Ongoing Mini Shai-Hulud Supply-Chain Attack</a></li></ul>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;2026 年 5 月 11 日，出现了一起针对 npm 与 PyPI 生态的协同供应链攻击。此次攻击同时波及多个知名的 npm 与 PyPI 软件包。&lt;/p&gt;
&lt;p&gt;这不是一次普通的恶意包投放事件。攻击者并未简单依赖窃取 npm 凭据，而是利用 GitHub Actions</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="NPM" scheme="https://ooo.run/tags/NPM/"/>
    
    <category term="安全" scheme="https://ooo.run/tags/%E5%AE%89%E5%85%A8/"/>
    
  </entry>
  
  <entry>
    <title>ChatGPT Business 为成员启用设备代码身份验证</title>
    <link href="https://ooo.run/post/chatgpt-business-enable-codex-device-code.html"/>
    <id>https://ooo.run/post/chatgpt-business-enable-codex-device-code.html</id>
    <published>2026-05-11T07:54:26.000Z</published>
    <updated>2026-05-11T16:07:09.623Z</updated>
    
    <content type="html"><![CDATA[<p>最近 OpenAI 大促销，ChatGPT Business 免费一个席位 48 个月，应该会有小伙伴们打算同时使用两个账户，享受双倍额度。 </p><h2 id="同时使用两个-ChatGPT-账户的方法-CC-Switch"><a href="#同时使用两个-ChatGPT-账户的方法-CC-Switch" class="headerlink" title="同时使用两个 ChatGPT 账户的方法(CC-Switch)"></a>同时使用两个 ChatGPT 账户的方法(CC-Switch)</h2><p>同时使用两个账户时，我们可以使用 <a href="https://github.com/farion1231/cc-switch">CC-Switch</a> 快速切换账户，而不必重新登陆。</p><p>登录了一个账户后，在 CC-Switch 的 Codex 应用中添加一个新的 OpenAI Offical 供应商即可，不过我们启用新的供应商后，再执行 codex 可能会遇到账户错误的提示: </p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Error: account/read failed during TUI bootstrap: account/read failed: email and plan <span class="built_in">type</span> are required <span class="keyword">for</span> chatgpt authentication (code -32600)</span><br></pre></td></tr></table></figure><p>可以直接执行下面的命令，使用设备代码为第二个账户进行登录认证。</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">codex login --device-auth</span><br></pre></td></tr></table></figure><p>但是基于安全原因，设备代码认证默认是关闭的，可以参考下面的方法开启。</p><h2 id="启用设备代码身份验证"><a href="#启用设备代码身份验证" class="headerlink" title="启用设备代码身份验证"></a>启用设备代码身份验证</h2><p>团队的管理员在网页上访问 <strong>工作空间设置</strong> &gt; <strong>权限与角色</strong> ，在右侧开启 <strong>为 Codex CLI 启用设备代码身份验证</strong> 的选项即可。 </p><p><a href="https://chatgpt.com/admin/permissions">https://chatgpt.com/admin/permissions</a></p><p><img src="https://img.nep.me/ooo/codex-device-code-enable.webp" alt="codex-device-code-enable.png"></p><p>然后就可以正常使用使用设备代码完成认证了。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;最近 OpenAI 大促销，ChatGPT Business 免费一个席位 48 个月，应该会有小伙伴们打算同时使用两个账户，享受双倍额度。 &lt;/p&gt;
&lt;h2 id=&quot;同时使用两个-ChatGPT-账户的方法-CC-Switch&quot;&gt;&lt;a href=&quot;#同时使用两个-Chat</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="ChatGPT" scheme="https://ooo.run/tags/ChatGPT/"/>
    
    <category term="Codex" scheme="https://ooo.run/tags/Codex/"/>
    
  </entry>
  
  <entry>
    <title>Anthropic 发布 Claude Mythos Preview，但不会向普通用户开放</title>
    <link href="https://ooo.run/post/anthropic-announced-claude-mythos-preview.html"/>
    <id>https://ooo.run/post/anthropic-announced-claude-mythos-preview.html</id>
    <published>2026-04-08T01:29:19.000Z</published>
    <updated>2026-05-13T07:51:54.243Z</updated>
    
    <content type="html"><![CDATA[<p>2026 年 4 月 8 日，Anthropic 正式发布了有关新的模型 Claude Mythos Preview，并表示基于安全原因不会向普通用户开放该模型。</p><p>Anthropic 表示这是一个全新的通用语言模型，该模型在各个方面都表现出色，尤其在计算机安全任务方面更是卓越非凡。</p><p>在 Anthropic 的测试中，新的模型在网络安全领域展现了超凡能力，能够在用户指示下，识别并利用所有主流操作系统和主流浏览器中的零日漏洞。</p><p>以下是 Anthropic 提供的应用示例：</p><ul><li>发现了一个在 OpenBSD 中存在了 27 年的漏洞 (OpenBSD 是一个以其安全性著称的操作系统) 。</li><li>编写了一个 Web 浏览器漏洞利用程序，将四个漏洞串联起来，绕过了浏览器的沙箱保护。</li><li>Mythos Preview 自主识别出 FFmpeg 最流行的编解码器之一 H.264 中一个存在了 16 年的漏洞。</li><li>Mythos Preview 完全自主地识别并利用了 FreeBSD 中一个存在了 17 年的远程代码执行漏洞，该漏洞允许任何人获取运行NFS 的机器的 root 权限。</li><li>Mythos Preview 发现了一些 Linux 内核漏洞，这些漏洞允许攻击者进行越界写入（例如，通过缓冲区溢出、释放后使用或双重释放漏洞）。</li></ul><p>具体内容可以查看原文链接：<a href="https://red.anthropic.com/2026/mythos-preview/">Assessing Claude Mythos Preview’s cybersecurity capabilities</a></p><p>根据 Mythos Preview 在测试中表现的能力，Anthropic 表示这揭示了一个严峻的事实：人工智能模型的编码能力已经达到了极高的水平，在发现和利用软件漏洞方面，它们几乎可以超越除最熟练的人类之外的所有人。</p><p>因此 Anthropic 启动了 <a href="https://www.anthropic.com/glasswing">Glasswing</a> 项目，汇集所有顶尖企业包含 Amazon、Anthropic、苹果、博通、思科、CrowdStrike、谷歌、摩根大通、Linux 基金会、微软、英伟达等企业，旨在保护世界上最关键的软件。</p><p>如果事实真如 Anthropic 所言，这将标志着 AI 正在重写网络安全的底层规则，我们构建了几十年的数字防线正面临前所未有的危机，“识别漏洞” 将从从人类专家的漫长审计变为 AI 模型的本能。</p><p>而我们普通用户在短期内将无法接触到这一模型，这不免也是一种遗憾。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;2026 年 4 月 8 日，Anthropic 正式发布了有关新的模型 Claude Mythos Preview，并表示基于安全原因不会向普通用户开放该模型。&lt;/p&gt;
&lt;p&gt;Anthropic 表示这是一个全新的通用语言模型，该模型在各个方面都表现出色，尤其在计算机安全</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="AI" scheme="https://ooo.run/tags/AI/"/>
    
    <category term="Claude Mythos" scheme="https://ooo.run/tags/Claude-Mythos/"/>
    
    <category term="Anthropic" scheme="https://ooo.run/tags/Anthropic/"/>
    
  </entry>
  
  <entry>
    <title>如何查看 Antigravity 模型额度与 Google AI Credits 剩余情况</title>
    <link href="https://ooo.run/post/how-to-check-google-ai-credits.html"/>
    <id>https://ooo.run/post/how-to-check-google-ai-credits.html</id>
    <published>2026-03-12T09:51:56.000Z</published>
    <updated>2026-06-12T08:17:46.451Z</updated>
    
    <content type="html"><![CDATA[<div class="flatpaper-note flatpaper-note--danger"><span class="flatpaper-note__icon" aria-hidden="true"></span><div class="flatpaper-note__body"><p>重大更新： 2026 年 5 月 20 日， Google I&#x2F;O 2026 后， 套餐内不再赠送 AI 点数。</p></div></div><p>2026 年 3 月 12 日，Google 再一次收紧了 AI Pro 用户的 <strong>Antigravity</strong> 高级模型调用额度，给 <strong>Gemini 3.1 Pro</strong> 模型也添加了每周刷新限制，不过达到限制时可以通过消耗 Google AI Credits 继续使用，本文将介绍如何查看 Antigravity 不同模型的剩余额度与 <strong>Google AI Credits</strong> 的剩余点数。</p><p>网页上访问 <a href="https://one.google.com/ai/activity">https://one.google.com/ai/activity</a> 即可查看 AI 点数的剩余情况。</p><img src="https://img.nep.me/i/2026/03/check-google-ai-credits.png" style="width:75%;" alt="check-google-ai-credits.png" /><h2 id="查看-Antigravity-IDE-剩余额度"><a href="#查看-Antigravity-IDE-剩余额度" class="headerlink" title="查看 Antigravity IDE 剩余额度"></a>查看 Antigravity IDE 剩余额度</h2><p>如果你没有安装查看额度的插件，可以在 Antigravity IDE 中的右上角点击齿轮图标，选择 <strong>Open Antigravity IDE User Settings</strong>，在打开的窗口左侧点击 <strong>Models</strong> 即可查看不同模型的当前额度剩余情况。</p><p><img src="https://img.nep.me/i/2026/03/antigravity-models-quota-stats.png" alt="antigravity-models-quota-stats.png"></p><blockquote><p>Update: <del>3 月 13 日，打开 Antigravity IDE 设置页面可以看到已重新恢复高级模型的五小时刷新机制，但根据观察使用额度超出 40% 即会变为一周刷新。</del></p></blockquote><blockquote><p>Update: 5 月 20 日，编辑器改名 Antigravity IDE 后优化了额度刷新机制，不再是 5 小时内使用过多后直接变为一周刷新。</p></blockquote><h2 id="查看-Google-AI-Credits-剩余额度"><a href="#查看-Google-AI-Credits-剩余额度" class="headerlink" title="查看 Google AI Credits 剩余额度"></a>查看 Google AI Credits 剩余额度</h2><p>在模型额度界面，我们可以看到有一个开关选项 <strong>Enable AI Credit Overages</strong>，开启后可以通过消耗 AI Credits 来使用模型。</p><blockquote><p>When toggled on, Antigravity will use your AI credits to fulfill model requests once you’re out of model quota. Antigravity will always use your model quota first before using AI credits.</p></blockquote><p><del>如果你是 Google AI Pro &#x2F; Ultra 会员，除了自带了额度以外，每月还可以固定获取一定的 AI 积分。</del></p><p><del>其中 Pro 会员每月可以获得 <strong>1000</strong> 点， Ultra 会员则是 <strong>25000</strong> 点。</del> </p><p><strong>2026 年 5 月 Google 在 Google IO 2026 宣布套餐内不再赠送 AI 点数。</strong></p><p>如果你想查看点数的剩余情况，开启选项即可查看:</p><img src="https://img.nep.me/i/2026/04/antigraviry-enable-ai-credit-overages.png" style="width:75%;" alt="antigraviry-enable-ai-credit-overages.png" /><blockquote><p>如果是家庭组用户，这个点数是所有家庭成员共享的。</p></blockquote>]]></content>
    
    
      
      
    <summary type="html">&lt;div class=&quot;flatpaper-note flatpaper-note--danger&quot;&gt;&lt;span class=&quot;flatpaper-note__icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;&lt;div class=&quot;flatpaper-note__</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Google" scheme="https://ooo.run/tags/Google/"/>
    
  </entry>
  
  <entry>
    <title>解决 Antigravity 通过 SSH 连接远程服务器崩溃的问题</title>
    <link href="https://ooo.run/post/fix-antigravity-ssh-remote-crash-problem.html"/>
    <id>https://ooo.run/post/fix-antigravity-ssh-remote-crash-problem.html</id>
    <published>2026-02-25T03:01:11.000Z</published>
    <updated>2026-03-09T09:00:34.887Z</updated>
    
    <content type="html"><![CDATA[<h2 id="问题详情"><a href="#问题详情" class="headerlink" title="问题详情"></a>问题详情</h2><p>在使用 Google Antigravity 通过 SSH 连接运行在 <strong>PVE</strong> 的 <strong>Linux 虚拟机</strong> 时，会直接崩溃，报错信息如下：</p><blockquote><p>Antigravity server crashed unexpectedly. Please restart to fully restore AI features.</p></blockquote><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><p>在 PVE 中将 Linux 虚拟机的 <strong>CPU 类型</strong> 设置为 <code>host</code>，再尝试连接就可以了。</p><p>参考： <a href="https://discuss.ai.google.dev/t/antigravity-crashes-on-linux-but-works-on-windows/110355/3">Antigravity crashes on Linux, but works on Windows</a></p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;问题详情&quot;&gt;&lt;a href=&quot;#问题详情&quot; class=&quot;headerlink&quot; title=&quot;问题详情&quot;&gt;&lt;/a&gt;问题详情&lt;/h2&gt;&lt;p&gt;在使用 Google Antigravity 通过 SSH 连接运行在 &lt;strong&gt;PVE&lt;/strong&gt; 的 &lt;st</summary>
      
    
    
    
    <category term="笔记" scheme="https://ooo.run/categories/%E7%AC%94%E8%AE%B0/"/>
    
    
    <category term="Antigravity" scheme="https://ooo.run/tags/Antigravity/"/>
    
  </entry>
  
  <entry>
    <title>Anthropic 发布 Claude Opus 4.6 模型，赠送付费用户 50 美元余额</title>
    <link href="https://ooo.run/post/claude-subscription-user-can-get-50-usd-extra-credit.html"/>
    <id>https://ooo.run/post/claude-subscription-user-can-get-50-usd-extra-credit.html</id>
    <published>2026-02-06T01:35:48.000Z</published>
    <updated>2026-03-09T09:00:15.083Z</updated>
    
    <content type="html"><![CDATA[<h2 id="Claude-Opus-4-6-发布"><a href="#Claude-Opus-4-6-发布" class="headerlink" title="Claude Opus 4.6 发布"></a>Claude Opus 4.6 发布</h2><p>今天 Anthropic 发布了最新的 <a href="https://www.anthropic.com/news/claude-opus-4-6">Claude Opus 4.6</a> ，官方表示 Claude Opus 4.6 在编码能力上超越了前代产品。它规划更周密，能够更长时间地执行代理任务，在大规模代码库中运行更可靠，并且拥有更强大的代码审查和调试能力，可以更有效地发现自身错误。</p><p>并且在 Beta 版本中 Opus 模型首次支持 1M tokens 上下文，API 价格方面保持不变。</p><p>Claude Opus 4.6 目前已在 API、Claude Code 中可用。</p><h2 id="更新-Claude-Code"><a href="#更新-Claude-Code" class="headerlink" title="更新 Claude Code"></a>更新 Claude Code</h2><p>运行下面命令即可：</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm install -g @anthropic-ai/claude-code</span><br></pre></td></tr></table></figure><h2 id="Anthropic-赠送付费用户-50-美元"><a href="#Anthropic-赠送付费用户-50-美元" class="headerlink" title="Anthropic 赠送付费用户 50 美元"></a>Anthropic 赠送付费用户 50 美元</h2><p>在推出新模型的同时，Anthropic 还提供给已订阅 Claude Pro &#x2F; MAX 的用户 50 美元的 <a href="https://support.claude.com/en/articles/13613973-claude-opus-4-6-extra-usage-promo#h_bf8366a5e9">福利</a>，用于体验最新的模型。 </p><p>需要手动领取，只需访问 <a href="https://claude.ai/settings/usage">https://claude.ai/settings/usage</a> 点击 <strong>Claim</strong> 即可。</p><p><img src="https://img.nep.me/i/2026/02/claude-50-usd-credit.jpeg" alt="claude-50-usd-credit.jpeg"></p><h3 id="领取条件"><a href="#领取条件" class="headerlink" title="领取条件"></a>领取条件</h3><p>领取 50 美元满足下面的条件：</p><ul><li>在 2 月 4 日之前开通了 Claude Pro &#x2F; MAX 订阅套餐</li><li>在 2 月 16 日之前开启 <strong>extra usage</strong></li></ul><p>所以如果你 在 2 月 4 日之前没有订阅 Claude Pro，无法领取优惠。</p><h3 id="有效期"><a href="#有效期" class="headerlink" title="有效期"></a>有效期</h3><p>领取的 50 美元余额有效期为 60 天。</p><h3 id="截止日期"><a href="#截止日期" class="headerlink" title="截止日期"></a>截止日期</h3><p>在 2 月 16 日之前都可以领取，如果你正在订阅 Claude Pro &#x2F; MAX，领取你的优惠吧。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;Claude-Opus-4-6-发布&quot;&gt;&lt;a href=&quot;#Claude-Opus-4-6-发布&quot; class=&quot;headerlink&quot; title=&quot;Claude Opus 4.6 发布&quot;&gt;&lt;/a&gt;Claude Opus 4.6 发布&lt;/h2&gt;&lt;p&gt;今天 Ant</summary>
      
    
    
    
    <category term="优惠活动" scheme="https://ooo.run/categories/%E4%BC%98%E6%83%A0%E6%B4%BB%E5%8A%A8/"/>
    
    
    <category term="Anthropic" scheme="https://ooo.run/tags/Anthropic/"/>
    
    <category term="Opus" scheme="https://ooo.run/tags/Opus/"/>
    
  </entry>
  
  <entry>
    <title>在 OpenCode 中免费体验 Kimi K2.5 模型</title>
    <link href="https://ooo.run/post/try-kimi-k25-free-in-opencode.html"/>
    <id>https://ooo.run/post/try-kimi-k25-free-in-opencode.html</id>
    <published>2026-02-04T06:58:10.000Z</published>
    <updated>2026-03-13T07:43:55.565Z</updated>
    
    <content type="html"><![CDATA[<h2 id="有关-Kimi-K2-5"><a href="#有关-Kimi-K2-5" class="headerlink" title="有关 Kimi K2.5"></a>有关 Kimi K2.5</h2><p>Kimi 是 <strong>月之暗面</strong> (<a href="https://www.moonshot.ai/">Moonshot AI</a>) 推出的系列模型，最新版本是 Kimi K2.5，点击这里查看 <a href="https://platform.moonshot.cn/docs/guide/kimi-k2-5-quickstart">Kimi K2.5 模型介绍</a></p><p>Kimi K2.5 版本是原生的多模态架构设计，同时支持视觉与文本输入、思考与非思考模式、对话与 Agent 任务。最新版本主要特色：</p><ul><li>代码能力跨越式提升</li><li>超长上下文支持</li><li>长思考能力</li></ul><p>Kimi K2.5 版本获得了广泛的好评，尤其是在代码编辑方面，在付费使用之前，我们可以在 OpenCode 中 <del>免费</del> 使用 Kimi K2.5 版本。</p><blockquote><p>Update: 2025.03 OpenCode Kimi 2.5 的免费体验已经结束，现在可以免费使用的是 <strong>MiniMax 2.5</strong></p></blockquote><h2 id="什么是-OpenCode"><a href="#什么是-OpenCode" class="headerlink" title="什么是 OpenCode"></a>什么是 OpenCode</h2><p><a href="https://opencode.ai/">OpenCode</a> 是一款开源的代码助理软件，终端版本类似 Claude Code，可帮助您使用任何 AI 模型编写和运行代码。它提供基于终端的界面(TUI)、桌面应用程序或 IDE 扩展三种形式。</p><h2 id="安装更新-OpenCode"><a href="#安装更新-OpenCode" class="headerlink" title="安装更新 OpenCode"></a>安装更新 OpenCode</h2><p>如果你尚未安装 OpenCode 或是没有更新到最新的版本，执行下面的命令</p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">npm i -g opencode-ai</span><br></pre></td></tr></table></figure><p>然后运行 <code>opencode</code> 即可打开 TUI 界面 </p><figure class="highlight sh"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">opencode</span><br></pre></td></tr></table></figure><h2 id="切换模型为-Kimi-K2-5"><a href="#切换模型为-Kimi-K2-5" class="headerlink" title="切换模型为 Kimi K2.5"></a>切换模型为 Kimi K2.5</h2><p>在 OpenCode 的 TUI 界面，执行 <code>/models</code> ，即可打开模型选择列表</p><p><img src="https://img.nep.me/i/2026/02/opencode-models.png" alt="opencode-models.png"></p><p>然后选择 <code>Kimi K2.5 Free</code>  即可开始体验。</p><p><img src="https://img.nep.me/i/2026/02/open-code-models-select.png" alt="open-code-models-select.png"></p><p>然后就可以开始对话了！<br><img src="https://img.nep.me/i/2026/02/opencode-ask-kimi.png" alt="opencode-ask-kimi.png"></p><p>不过毕竟是免费，使用时可能会遇到 <code>rate limit...</code> 的提示，通常等一下会自动重新尝试，因此只能作为免费体验。</p><h2 id="价格"><a href="#价格" class="headerlink" title="价格"></a>价格</h2><p>如果使用 API ，每 100 万(1M) tokens 价格为：</p><table><thead><tr><th align="left">模型名称</th><th align="left">输入价格</th><th align="left">缓存命中价格</th><th align="left">输出价格</th><th align="left">上下文长度</th></tr></thead><tbody><tr><td align="left"><strong>Kimi K2.5</strong></td><td align="left">￥4.00</td><td align="left">￥0.70</td><td align="left">￥21.00</td><td align="left">256k</td></tr><tr><td align="left"><strong>Gemini 3</strong> (&lt;200k)</td><td align="left">$2.00</td><td align="left">$0.20</td><td align="left">$12.00</td><td align="left">-</td></tr><tr><td align="left"><strong>Gemini 3 Flash</strong></td><td align="left">$0.50</td><td align="left">-</td><td align="left">$3.00</td><td align="left">-</td></tr><tr><td align="left"><strong>GPT 5.2</strong></td><td align="left">$1.75</td><td align="left">$0.175</td><td align="left">$14.00</td><td align="left">-</td></tr></tbody></table><p>汇率按照 7 计算，Kimi K2.5 的价格与 Gemini 3 Flash 接近。</p><h3 id="Kimi-Code-Plan"><a href="#Kimi-Code-Plan" class="headerlink" title="Kimi Code Plan"></a>Kimi Code Plan</h3><p>Moonshot 提供 Kimi Code Plan 包月套餐，价格可以看这里 <a href="https://www.kimi.com/user/agreement/zh/membershipBenefits">会员权益说明</a>。 </p><table><thead><tr><th align="left">会员权益项目</th><th align="left">Andante</th><th align="left">Moderato</th><th align="left">Allegretto</th></tr></thead><tbody><tr><td align="left"><strong>包月价格</strong></td><td align="left">¥49&#x2F;月</td><td align="left">¥99&#x2F;月</td><td align="left">¥199&#x2F;月</td></tr><tr><td align="left"><strong>包年价格</strong></td><td align="left">¥468&#x2F;年</td><td align="left">¥948&#x2F;年</td><td align="left">¥1908&#x2F;年</td></tr></tbody></table><details class="flatpaper-note flatpaper-note--warning"><summary class="flatpaper-note__title"><span class="flatpaper-note__icon" aria-hidden="true"></span><span class="flatpaper-note__label">modern</span><span class="flatpaper-note__chevron" aria-hidden="true"></span></summary><div class="flatpaper-note__body"><p>AI 模型日新月异，谨慎年付。</p></div></details><p><img src="https://img.nep.me/i/2026/02/kimi-code-price-cny.png" alt="kimi-code-price-cny.png"></p><p>如果访问的是国际版，价格贵了非常多，看描述额度多一些。</p><table><thead><tr><th align="left">会员权益项目</th><th align="left">Moderato</th><th align="left">Allegretto</th><th align="left">Vivace</th></tr></thead><tbody><tr><td align="left"><strong>包月价格</strong></td><td align="left">$19&#x2F;月</td><td align="left">$39&#x2F;月</td><td align="left">$199&#x2F;月</td></tr></tbody></table><p><img src="https://img.nep.me/i/2026/02/kimi-code-price-usd.png" alt="kimi-code-price-usd.png"></p><p>在付款前可以看看 <a href="https://juejin.cn/post/7599920572840509449">我花了4.99元，测了一把Kimi新出的「代码神器」</a></p><h3 id="Claude-Code-相关"><a href="#Claude-Code-相关" class="headerlink" title="Claude Code 相关"></a>Claude Code 相关</h3><p>开通 KimiCode 后是可以直接在 <a href="https://www.kimi.com/code/console">控制台</a> 获取 API Key ，用于在 Claude Code 中使用，官方明确 <a href="https://www.kimi.com/code/docs/benefits.html#%E4%BD%BF%E7%94%A8%E8%8C%83%E5%9B%B4">说明</a> 不禁止在 Claude Code 中使用，但不支持其他产品。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h2 id=&quot;有关-Kimi-K2-5&quot;&gt;&lt;a href=&quot;#有关-Kimi-K2-5&quot; class=&quot;headerlink&quot; title=&quot;有关 Kimi K2.5&quot;&gt;&lt;/a&gt;有关 Kimi K2.5&lt;/h2&gt;&lt;p&gt;Kimi 是 &lt;strong&gt;月之暗面&lt;/strong&gt; (</summary>
      
    
    
    
    <category term="优惠活动" scheme="https://ooo.run/categories/%E4%BC%98%E6%83%A0%E6%B4%BB%E5%8A%A8/"/>
    
    
    <category term="OpenCode" scheme="https://ooo.run/tags/OpenCode/"/>
    
    <category term="Kimi" scheme="https://ooo.run/tags/Kimi/"/>
    
  </entry>
  
  <entry>
    <title>OpenAI 发布桌面版 Codex App ：开启 “AI 智能体” 指挥中心时代</title>
    <link href="https://ooo.run/post/openai-release-codex-app.html"/>
    <id>https://ooo.run/post/openai-release-codex-app.html</id>
    <published>2026-02-03T00:53:15.000Z</published>
    <updated>2026-03-09T09:00:50.327Z</updated>
    
    <content type="html"><![CDATA[<p>OpenAI 正式 <a href="https://openai.com/index/introducing-the-codex-app/">宣布</a> 推出全新的 <a href="https://openai.com/zh-Hans-CN/codex/get-started/">Codex App</a>。这不仅仅是一个简单的聊天窗口，而是一个专为构建、管理和调度 AI Agents（智能体） 设计的强力“指挥中心”。</p><p>目前，该应用已率先登陆 macOS 平台，Windows 版本也正在准备中。</p><h2 id="核心功能：让-AI-深度介入工作流"><a href="#核心功能：让-AI-深度介入工作流" class="headerlink" title="核心功能：让 AI 深度介入工作流"></a>核心功能：让 AI 深度介入工作流</h2><p>Codex App 的推出标志着 OpenAI 从“对话式 AI”向“协作式&#x2F;自动化 AI”的重大跨越。其核心亮点包括：</p><ul><li><p><strong>多任务并行（Multitask Effortlessly）</strong>：<br>用户可以同时运行多个智能体处理不同任务。通过 Worktrees（工作树） 机制，系统能确保不同智能体所做的更改相互隔离，互不干扰，像管理代码分支一样管理 AI 的产出。</p></li><li><p><strong>技能封装（Create &amp; Use Skills）</strong>：<br>用户可以将特定的工具组合与操作规范打包成通用的 Skills 。这些 Skill 可以被重复调用，赋予智能体更强的专业执行力，Codex APP 安装后即内置了很多 Skill，可以做到开箱即用。<br><img src="https://img.nep.me/i/2026/02/codex-app-skills.png" alt="codex-app-skills.png"></p></li><li><p><strong>后台自动化（Set up Automations）</strong>：<br>通过设置定时工作流（Scheduled Workflows），用户可以将重复性的繁琐工作完全委托给 Codex。即使在后台，智能体也能根据预设逻辑自主完成任务。<br><img src="https://img.nep.me/i/2026/02/codex-app-automations.png" alt="codex-app-automations.png"></p></li></ul><h2 id="发布福利：限时免费与额度翻倍"><a href="#发布福利：限时免费与额度翻倍" class="headerlink" title="发布福利：限时免费与额度翻倍"></a>发布福利：限时免费与额度翻倍</h2><p>为了庆祝 Codex App 的上线，OpenAI 首席执行官 Sam Altman 宣布了为期 2 个月 的重磅福利政策：</p><ul><li><strong>门槛降低</strong>： 免费用户（Free）及入门级用户（Go）在未来两个月内也可获得使用权限，体验最新的智能体构建功能。</li><li><strong>付费用户额度翻倍</strong>： 所有付费订阅用户（Plus、Pro）的 Rate Limits（速率限制&#x2F;额度）直接翻倍。</li></ul><blockquote><p>To celebrate the launch of the Codex app, we doubled all rate limits for paid plans for 2 months!<br>And added access for free&#x2F;go.<br>— <a href="https://x.com/sama/status/2018437537103269909">@Sam Altman</a></p></blockquote><h2 id="下载地址"><a href="#下载地址" class="headerlink" title="下载地址"></a>下载地址</h2><p>访问 <a href="https://openai.com/zh-Hans-CN/codex/get-started/">https://openai.com/zh-Hans-CN/codex/get-started/</a> 即可获取。</p><h2 id="支持模型"><a href="#支持模型" class="headerlink" title="支持模型"></a>支持模型</h2><p>目前 Codex APP 中支持 GPT 5.2 与 GPT 5.2-Codex 模型，都包含 Medium、High、Extra High 等各种模式。<br><img src="https://img.nep.me/i/2026/02/codex-app-model-lists.png" style="width:25%;" alt="codex-app-model-lists.png" /></p><h2 id="与-Codex-Web-联动"><a href="#与-Codex-Web-联动" class="headerlink" title="与 Codex Web 联动"></a>与 Codex Web 联动</h2><p>如果打开 Github 的项目，Codex APP 可以与 Codex Web 联动，选择在云端执行任务。<br><img src="https://img.nep.me/i/2026/02/codex-app-runtype.png" style="width:75%;" alt="codex-app-runtype.png" /></p><h2 id="Codex-生态：全场景的-AI-开发闭环"><a href="#Codex-生态：全场景的-AI-开发闭环" class="headerlink" title="Codex 生态：全场景的 AI 开发闭环"></a>Codex 生态：全场景的 AI 开发闭环</h2><p>随着桌面版的发布，OpenAI 终于补齐了最后一块拼图，构建起了一个覆盖云端、终端与桌面的全方位 AI 开发生态。无论你的工作习惯如何，Codex 都能无缝融入：</p><ul><li><strong>Codex Web (ChatGPT)</strong> —— 随时随地的云端协作 深度集成于 ChatGPT 网页端与 App 中。连接 GitHub 后，无需配置任何本地环境，即可直接读取仓库、审查代码或提交轻量级修改。非常适合 Code Review 或快速修复 Bug。</li><li><strong>Codex CLI</strong> —— 极客的终端利器 专为开发者打造的命令行工具。将 AI 注入终端，让你无需离开熟悉的 Shell 环境，仅凭自然语言指令即可完成代码生成、文件编辑和脚本执行，完美契合现有的命令行工作流。</li><li><strong>Codex App</strong> —— 终极“指挥中心” 生态的核心枢纽。作为功能最完整的桌面客户端，它不仅拥有最强的本地读写权限，更是调度多智能体（Agents）并行协作、运行后台自动化任务的“总控台”，专门应对复杂的工程级挑战。</li></ul><p>Codex Web 与 Codex CLI 仍然是代码编写工具，Codex App 作为易用的 GUI 客户端，凭借 Agent Skill 加持，生态不再仅仅是辅助写代码的 Copilot，而是扩展到通用领域，致力于成为能听懂意图、自动执行、全天候待命的“硅基合伙人”，并且也让更多的人可以体验使用到 AI Agents。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;OpenAI 正式 &lt;a href=&quot;https://openai.com/index/introducing-the-codex-app/&quot;&gt;宣布&lt;/a&gt; 推出全新的 &lt;a href=&quot;https://openai.com/zh-Hans-CN/codex/get-sta</summary>
      
    
    
    
    <category term="资讯" scheme="https://ooo.run/categories/%E8%B5%84%E8%AE%AF/"/>
    
    
    <category term="AI" scheme="https://ooo.run/tags/AI/"/>
    
    <category term="OpenAI" scheme="https://ooo.run/tags/OpenAI/"/>
    
    <category term="Codex" scheme="https://ooo.run/tags/Codex/"/>
    
    <category term="Codex APP" scheme="https://ooo.run/tags/Codex-APP/"/>
    
  </entry>
  
</feed>
