Chuyển đến nội dung chính

深入研究 Claude Code 原始碼:Buddy Virtual Pet、UltraPlan Multi-Agent 和 Hidden Architecture

Duy Tran25 分鐘
深入研究 Claude Code 原始碼:Buddy Virtual Pet、UltraPlan Multi-Agent 和 Hidden Architecture

1.背景:如何閱讀封閉的npm套件的原始碼?

克勞德碼(@anthropic-ai/claude-code)是 Anthropic 著名的 AI 編碼代理工具,以 npm 套件 的形式發布。特別之處:Anthropic 不開放原始 TypeScript 原始碼 --- 他們只提供使用 Bun 建置的捆綁包。

1.1。為什麼 npm 套件可讀?

以 tree-shaken ESM 風格捆綁 Claude 代碼 --- 不使用像 Terser 這樣具有最大程度破壞的重型混淆器。結果:函數名、變數名和模組結構幾乎完好無損。 TypeScript 來源中的註解在建置過程後也保持不變。

npm install @anthropic-ai/claude-code
# → 解壓縮後:43MB,只有 19 個文件,主包 ~40MB

提取管道概述:

flowchart LR
    A["npm registry\n@anthropic-ai/claude-code\nv2.1.89"] -->|npm install| B["Bundle Bun\n~40MB .js"]
    B -->|"AST parse\n(acorn/babel)"| C["Module graph\nphục hồi"]
    C -->|"Rename vars\ndựa trên context"| D["TypeScript gốc\n~90% readable"]
    D -->|"Đọc comments\n+ types"| E["Source code\ncó thể phân tích"]

    style A fill:#e8f4f8
    style E fill:#e8f8e8

結果:數百個文件 .ts / .tsx 目錄結構清晰,技術註解完整,類型註解完整。一個閉源 npm 包能夠透露這麼多信息,這是非常罕見的。

技術說明: 這不是駭客攻擊。當您發佈到 npm 時,程式碼就是公共工件。只要您在使用結果時不違反 ToS 或版權,對 npm 套件進行逆向工程就是合法的。

1.2。恢復的資料夾結構

克勞德代碼代碼/
├── main.tsx ← 主入口點
├── QueryEngine.ts ← 核心對話循環
├── buddy/ ← 🐾 虛擬寵物系統(新!)
│ ├──companion.ts ← 滾動邏輯(PRNG + 稀有度)
│ ├── CompanionSprite.tsx ← ASCII 渲染器 (Ink/React)
│ ├── sprites.ts ← 18種×3幀
│ ├── types.ts ← 物種/稀有度/統計類型
│ ├── Prompt.ts ← LLM 配對介紹
│ └── useBuddyNotification.tsx ← Teaser 窗口
├── 橋接/ ← 遠端會話系統
│ ├──bridgeMain.ts ← 橋接循環(重連/退避)
│ ├── sessionRunner.ts ← 子進程產生器
│ ├── workSecret.ts ← JWT + WebSocket URL
│ └── types.ts ← 協定類型
├── 命令/
│ ├── ultraplan.tsx ← 🚀 多智能體規劃
│ ├── 貼紙/ ← 彩蛋:StickerMule
│ └── [35+指令]
├── 協調員/
│ └── coordinatorMode.ts ← 多智能體協調器
└── 任務/
    ├── LocalAgentTask/ ← 子代理程式(本地)
    ├── RemoteAgentTask/ ← 子代理(雲CCR)
    ├── DreamTask/ ← 後台非同步任務
    └── InProcessTeammateTask/ ← 進程內代理

2.Claude Code整體架構

2.1。技術堆疊

在討論具體功能之前,有必要清楚地了解 Claude Code 是基於什麼構建的:

graph TB
    subgraph "Runtime Layer"
        BUN["⚡ Bun Runtime\n(không phải Node.js)"]
        BUNDLE["Bun Bundle\n(tree-shaken ESM)"]
    end

    subgraph "UI Layer"
        INK["Ink (React cho terminal)\nvadimdemedes/ink"]
        RC["React Compiler\nreact/compiler-runtime"]
        INK --> RC
    end

    subgraph "Core Engine"
        QE["QueryEngine.ts\nConversation loop"]
        TOOLS["40+ Tools\nBash/File/Web/Agent..."]
        CMDS["35+ Commands\n/slash commands"]
    end

    subgraph "Infrastructure"
        GW["GrowthBook\nFeature flags + A/B"]
        DD["Datadog\nAnalytics + tracing"]
        ZOD["Zod v4\nRuntime validation"]
    end

    subgraph "Remote"
        BRIDGE["Bridge System\nRemote sessions"]
        CCR["Cloud Code REPL\n(CCR) server-side"]
    end

    BUN --> INK
    INK --> QE
    QE --> TOOLS
    QE --> CMDS
    QE --> GW
    QE --> BRIDGE
    BRIDGE --> CCR

2.2。啟動優化-精確到每毫秒

查看文件的開頭 main.tsx:

// Side-effects chạy NGAY khi file được import:
// 1. profileCheckpoint --- bắt đầu đo thời gian
// 2. startMdmRawRead --- fire MDM subprocesses (plutil/reg query) song song
//    với 135ms còn lại của import chain
// 3. startKeychainPrefetch --- fire cả 2 macOS keychain reads song song
//    (~65ms tiết kiệm trên mỗi lần khởi động macOS)

profileCheckpoint('main_tsx_entry');
startMdmRawRead();        // parallel: đọc MDM config
startKeychainPrefetch();  // parallel: đọc keychain OAuth tokens

這是 I/O 的「推測執行」:一旦檔案開始加載,就會並行觸發 3 個副作用 --- 當 JS 解析剩餘的 135 毫秒導入鏈時,所有副作用都會運行。導入完成後,結果就準備好了。

gantt
    title Startup Timeline Claude Code (macOS, ước tính)
    dateFormat X
    axisFormat %Lms

    section Sequential (cũ)
    Parse imports          : 0, 135
    Keychain read #1       : 135, 200
    Keychain read #2       : 200, 265
    MDM read               : 265, 310
    App ready              : 310, 315

    section Parallel (thực tế)
    Parse imports          : 0, 135
    Keychain #1 + #2 + MDM : crit, 0, 65
    App ready              : 135, 140

結果:每次啟動節省了 175 毫秒。隨著開發人員打字 claude 每天幾十次——這是真正的使用者體驗勝利。


3.隱藏功能#1:「好友」系統---終端機中的虛擬寵物

這是最令人震驚的發現。隱藏在資料夾深處 buddy/ 是一個完整的虛擬寵物伴侶系統,直接嵌入到終端中。

3.1。巴迪長什麼樣?

Buddy 物種目錄 --- 18 個十六進位編碼的物種,每個物種都有自己的 5 行 ASCII 精靈和稀有度系統

同伴坐在輸入框旁邊,有時會出現對話氣泡。整個 UI 透過 Ink(React 終端)使用 ASCII art 進行渲染:

╭──────────────────────────────────╮
│ 編碼其實很有趣:3 │
╰──────────────────────────────────╯
              │
    __
  <(· )___    ← companion (duck, frame 0)
   (  ._>
    `--´
───────────────────────────────────
  > |                              ← input cursor

Ba frame idle animation (tick mỗi 500ms):

Frame 0 (rest):    Frame 1 (fidget):   Frame 2 (move):
    __                 __                  __
  <(· )___           <(· )___            <(· )___
   (  ._>             (  ._>              (  .__>
    `--´               `--´~              `--´

3.2。 18 個擁有自己精靈的物種

mindmap
  root((18 Species))
    Birds
      duck
      goose
      owl
      penguin
    Fantasy
      dragon
      ghost
      blob
      chonk
    Animals
      cat
      rabbit
      turtle
      snail
      capybara
      axolotl
    Objects
      robot
      cactus
      mushroom
      octopus

每個物種都有一個 5 行 × 12 個字元 × 3 幀的精靈集。鵝範例:

幀 0: 幀 1: 幀 2:
     ({E}> ({E}> ({E}>>
     || || ||
   _(__)_ _(__)_ _(__)_
    ^^^^ ^^^^ ^^^^

({E} 是眼睛的佔位符 --- 渲染時替換為眼睛類型字元)

3.3。管道誕生伴侶---詳解

這是最重要的技術部分。每個使用者都有一個永久同伴,完全由他們的 userId 標識:

flowchart TD
    A["userId (lấy từ Claude account)"] -->|"+ SALT 'friend-2026-401'"| B["key string"]
    B -->|"FNV-1a hash\n(fallback: Bun.hash)"| C["32-bit integer seed"]
    C -->|"Mulberry32 PRNG\ninitialize"| D["rng() function\n→ [0, 1) deterministic"]

    D -->|"rollRarity(rng)"| E{"Rarity Roll\n(weighted)"}
    E -->|"weighted table"| F["Rarity\ncommon/uncommon/\nrare/epic/legendary"]

    D -->|"pick(rng, SPECIES)"| G["Species\n(18 loài)"]
    D -->|"pick(rng, EYES)"| H["Eye type\n·✦×◉@°"]
    D -->|"if rarity != common"| I["Hat type"]
    D -->|"rng() < 0.01"| J{"Shiny?\n1% chance"}
    D -->|"rollStats(rng, rarity)"| K["Stats RPG\npeak/dump/normal"]
    D -->|"Math.floor(rng() * 1e9)"| L["inspirationSeed\n(cho lời thoại)"]

    F --> M["CompanionBones"]
    G --> M
    H --> M
    I --> M
    J --> M
    K --> M
    L --> M

    M -->|"getGlobalConfig()\n.companion?"| N{Đã hatched?}
    N -->|"Chưa"| O["/buddy → Hatch companion\nlưu vào config"]
    N -->|"Rồi"| P["Load companion\ntừ global config"]

    style J fill:#ffe8cc
    style O fill:#e8ffe8

3.4。 Mulberry32 PRNG --- 為什麼選擇它?

function mulberry32(seed: number): () => number {
  let a = seed >>> 0
  return function () {
    a |= 0
    a = (a + 0x6d2b79f5) | 0          // additive step
    let t = Math.imul(a ^ (a >>> 15), 1 | a)
    t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t
    return ((t ^ (t >>> 14)) >>> 0) / 4294967296
  }
}

為什麼選擇 Mulberry32 Math.random()?

Math.random()桑葚32
種子❌不可能✅ 是的
確定性❌✅ 相同的種子 → 相同的結果
尺寸內建約 10 行程式碼
速度快等價快
使用案例一般隨機種子卷

與 Math.random(),每次重新啟動克勞德代碼時,您都會獲得不同的同伴。有了 Mulberry32 + userId 種子,伴侶就永遠屬於你 --- 就像一個化身。

3.5。稀有度系統---機率解碼

稀有度系統-統計樓層依等級增加,傳奇樓層為50/100

原始碼沒有直接宣告RARITY_WEIGHTS,但是從下限值和rollRarity邏輯,我們可以推斷出分佈:

pie title Phân phối Rarity (ước tính từ code)
    "Common" : 50
    "Uncommon" : 30
    "Rare" : 12
    "Epic" : 6
    "Legendary" : 2

依比例統計樓層:

普通 ░░░░░░░░░░ 樓層:5(統計範圍:5-75)
罕見 ░░░░░░░░░░░░░░░樓層:15(統計範圍:15-85)
罕見 ░░░░░░░░░░░ 樓層:25(統計範圍:25-95)
史詩 ░░░░░░░░░░░░░░░░░░░░░░░░░樓層:35(統計範圍:35-100)
傳奇 ░░░░░░░░░░░░░░░░░░░░░░░░░░░░100) 統計

可以達到傳奇的巔峰狀態 min(100, 50 + 50 + rand*30) = 100 --- 上限!

3.6。語音氣泡與互動系統

語音氣泡如何渲染(CompanionSprite.tsx):

  ╭──────────────────────────────────╮
  │ 以 30 個字元/行換行內容。 │
  │ 斜體文本,淡入淡出時顏色變暗 │
  ╰──────────────────────────────────╯
               ↑ 尾部:“頂部”或“底部”

氣泡生命週期:
  ┌──────────────┐ ┐────────────────────┐ ┌────────────┐
  │ addNotif │────▶│ BUBBLE_SHOW = 20 │────▶│ FADE_WINDOW │
  │ (觸發) │ │ 滴答聲 (~10 秒) │ │ = 6 滴答聲 │
  └──────────────┘ └────────────────────┘ └──────┬────────┘
                                                       │ 暗色=true
                                                       ▼
                                                 ┌────────────┐
                                                 │ 隱藏的氣泡 │
                                                 └────────────┘

當使用者在聊天中透過名字呼叫同伴時,LLM 會被注入系統提示:

`When the user addresses ${name} directly (by name), 
its bubble will answer. Your job in that moment is to 
stay out of the way: respond in ONE line or less.
Don't explain that you're not ${name} --- they know.`

巧妙的設計:Claude(主要法學碩士)不會假裝自己是同伴——他只在使用者與同伴交談時「沉默」。在另一個提示情境的驅動下,同伴透過自己的語音氣泡進行回應。

3.7。 /buddy pet --- 5個漂浮的心形動畫幀

const PET_HEARTS = [
  `   ♥    ♥   `,   // frame 0: 2 tim xa nhau
  `  ♥  ♥   ♥  `,   // frame 1: tim dày hơn
  ` ♥   ♥  ♥   `,   // frame 2: tim trải rộng
  `♥  ♥      ♥ `,   // frame 3: tim bay ra hai bên
  '·    ·   ·  ',   // frame 4: fade thành dấu chấm
];
// PET_BURST_MS = 2500ms tổng → ~500ms/frame

可視化:

t=0ms: t=500ms: t=1000ms: t=1500ms: t=2000ms:
  ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ ♥ · · ·
  下面的同伴精靈

3.8。 Teaser 視窗和卷展邏輯

// Local date, not UTC --- 24h rolling wave across timezones.
// Teaser window: April 1-7, 2026 only. Command stays live forever after.
export function isBuddyTeaserWindow(): boolean {
  if ("external" === 'ant') return true;  // Anthropic internal: luôn true
  const d = new Date();
  return d.getFullYear() === 2026 && d.getMonth() === 3 && d.getDate() <= 7;
}

這是關於推出的一個非常有趣的設計決策:

timeline
    title Buddy Rollout Timeline
    Apr 1 : isBuddyTeaserWindow() = true
           : Rainbow /buddy teaser xuất hiện lúc boot
           : 15000ms xong rồi tắt
    Apr 1-7 : User thấy teaser mỗi lần mở Claude Code
             : /buddy command hoạt động
    Apr 7 : Teaser window đóng
           : Nhưng /buddy vẫn live (isBuddyLive() = true mãi mãi)
    Mãi mãi : Companion feature live forever

使用本地時間而不是 UTC 的原因:如果使用 UTC,全球所有用戶都會在同一 UTC 時間接收預告片 → 會導致伺服器負載激增。使用當地時間→連續24小時均勻負載。


4.隱藏功能#2:UltraPlan --- 多智能體規劃引擎

4.1。什麼是UltraPlan?

UltraPlan架構---從本地CLI→CCR雲端→並行代理→協調器→計劃

/ultraplan 是克勞德·科德最強的斜線命令,但也是最隱密的。它不是 Claude Code 自行規劃,而是將任務傳送到雲端,其中多個代理並行運行長達 30 分鐘以創建全面的計劃。

sequenceDiagram
    participant U as User
    participant CC as Claude Code (local)
    participant CCR as Cloud Code REPL (CCR)
    participant A1 as Agent 1
    participant A2 as Agent 2
    participant AN as Agent N

    U->>CC: /ultraplan "refactor auth system"
    CC->>CC: checkRemoteAgentEligibility()
    CC->>CC: Lấy seed_plan + blurb từ context
    CC->>CCR: teleportToRemote() via WebSocket
    Note over CCR: session_ingress_token auth
    CCR->>A1: Spawn agent (opus-4.6)
    CCR->>A2: Spawn agent (opus-4.6)
    CCR->>AN: Spawn agent N
    par Parallel exploration
        A1->>A1: Explore approach A
        A2->>A2: Explore approach B
        AN->>AN: Explore approach N
    end
    Note over CCR: Coordinator tổng hợp
    CCR-->>CC: pollForApprovedExitPlanMode()
    Note right of CC: Timeout: 30 phút
    CC-->>U: Kế hoạch hoàn chỉnh

4.2。 CCR 會話架構

flowchart TD
    subgraph "Local Machine"
        CLI["Claude Code CLI\nultraplan.tsx"]
        RC["Remote Control\n/bridge/bridgeMain.ts"]
    end

    subgraph "CCR Server (Cloud)"
        INGRESS["session-ingress\nWebSocket endpoint"]
        COORD["Coordinator\ncoordinatorMode.ts"]
        W1["Worker Agent 1\n(opus-4.6)"]
        W2["Worker Agent 2\n(opus-4.6)"]
        WN["Worker Agent N"]
        TEAM["TeamCreate/TeamDelete Tools\n(multi-agent coordination)"]
    end

    CLI -->|"teleportToRemote()\nwork_secret (base64url JWT)"| INGRESS
    INGRESS --> COORD
    COORD -->|"TEAM_CREATE_TOOL"| W1
    COORD -->|"TEAM_CREATE_TOOL"| W2
    COORD -->|"TEAM_CREATE_TOOL"| WN
    W1 -->|"SEND_MESSAGE_TOOL"| COORD
    W2 -->|"SEND_MESSAGE_TOOL"| COORD
    WN -->|"SEND_MESSAGE_TOOL"| COORD
    COORD -->|"EXIT_PLAN_MODE"| RC
    RC -->|"pollForApprovedExitPlanMode()"| CLI

    style COORD fill:#fff3e0
    style CLI fill:#e8f4f8

4.3。 WorkSecret --- Session認證機制

type WorkSecret = {
  version: number
  session_ingress_token: string  // JWT cho WebSocket auth
  api_base_url: string           // CCR server URL
  sources: Array<{
    type: string
    git_info?: { type: string; repo: string; ref?: string; token?: string }
  }>
  auth: Array<{ type: string; token: string }>
  claude_code_args?: Record<string, string> | null
  mcp_config?: unknown | null
  environment_variables?: Record<string, string> | null
  use_code_sessions?: boolean   // CCR v2 selector
}

WorkSecret是base64url編碼並透過 --work-secret 生成子進程時的標誌。流程:

1./ultraplan觸發器
2. CLI 從橋接 API 檢索 work_secret
3. 解碼base64url → JSON → 驗證版本 === 1
4. buildSdkUrl(api_base_url, sessionId)
   → wss://host/v1/session_ingress/ws/{id} (生產)
   → ws://host/v2/session_ingress/ws/{id} (本機)
5. 使用session_ingress_token連接WebSocket

4.4。防自觸發技術

// Phrasing deliberately avoids the feature name because
// the remote CCR CLI runs keyword detection on raw input before
// any tag stripping, and a bare "ultraplan" in the prompt would
// self-trigger as /ultraplan, which is filtered out of headless mode
// as "Unknown skill"

// prompt.txt là <system-reminder> để CCR browser ẩn scaffolding
// nhưng model vẫn thấy full text
const _rawPrompt = require('../utils/ultraplan/prompt.txt');

問題:CCR 運行不同的 Claude Code CLI(無頭)。如果提示包含「ultraplan」一詞,CLI 將觸發 /ultraplan 自身 → 無限循環。解決方案:將提示包起來 <system-reminder> 標籤和措辭避免關鍵字。

使用者 → /ultraplan“建置身份驗證”
         │
         ▼
CCR(無頭CC)收到提示:
  <system-reminder>
    建立詳細計劃:建置身份驗證
    [這裡不要使用「ultraplan」這個字]
  </system-reminder>
         │
         ▼ CCR 瀏覽器條 <system-reminder> 從使用者介面
  模型看到:“創建詳細計劃......”
  CCR過濾器:看到「ultraplan」→過濾原因「未知技能」?不是!
              因為「ultraplan」一詞不在實際提示中

5. 橋接系統 --- 遠端程式碼會話

5.1。概述

Bridge 是一個允許 Claude Code 從 claude.ai Web 介面同時接收來自多個會話的任務的系統。開發人員可以將多個儲存庫任務指派給在本機電腦上執行的 Claude Code。

flowchart LR
    subgraph "claude.ai (Web)"
        DASH["Dashboard"]
        SESS["Session Queue"]
    end

    subgraph "Local Machine"
        BRIDGE["Bridge Loop\nbridgeMain.ts"]
        SPAWNER["Session Spawner\nsessionRunner.ts"]
        subgraph "Sessions"
            S1["Session 1\n(git worktree A)"]
            S2["Session 2\n(git worktree B)"]
            S3["Session 3\n(same-dir)"]
        end
    end

    DASH -->|"assign task"| SESS
    SESS -->|"work poll\n(HTTP long-poll)"| BRIDGE
    BRIDGE -->|"spawn child\nprocess"| SPAWNER
    SPAWNER -->|"SpawnMode: worktree"| S1
    SPAWNER -->|"SpawnMode: worktree"| S2
    SPAWNER -->|"SpawnMode: same-dir"| S3
    S1 -->|"tool activity\nevents"| BRIDGE
    S2 -->|"tool activity\nevents"| BRIDGE
    BRIDGE -->|"session done"| SESS

5.2。 SpawnMode --- 管理工作目錄的 3 種方法

type SpawnMode = 'single-session' | 'worktree' | 'same-dir'
生成模式描述使用時
single-sessioncwd 中的 1 個會話,會話完成後橋會停止簡單的遠端控制
worktree每個會話都有一個單獨的(隔離的)git worktree安全並行多任務
same-dir所有公共會話 cwd可能有衝突,謹慎使用

5.3。退避和重新連接邏輯

const DEFAULT_BACKOFF: BackoffConfig = {
  connInitialMs: 2_000,      // thử lại lần đầu sau 2s
  connCapMs: 120_000,        // tối đa wait 2 phút giữa các lần retry
  connGiveUpMs: 600_000,     // bỏ cuộc sau 10 phút
  generalInitialMs: 500,
  generalCapMs: 30_000,
  generalGiveUpMs: 600_000,  // 10 phút
}

更聰明的睡眠檢測:

function pollSleepDetectionThresholdMs(backoff: BackoffConfig): number {
  return backoff.connCapMs * 2  // = 240_000ms = 4 phút
}

如果 2 次輪詢之間的間隔超過 4 分鐘 → 系統假定電腦已進入睡眠狀態。喚醒時,錯誤預算將被重置而不是累積。

5.4。會話ID相容層

// CCR v2 compat layer gây ra mismatch session IDs:
// - công việc poll trả về "session_xxxx" (v1 format)
// - worker thực tế dùng "cse_xxxx" (v2 format)
// Cả hai cùng UUID body, chỉ khác prefix

export function sameSessionId(a: string, b: string): boolean {
  if (a === b) return true
  const aBody = a.slice(a.lastIndexOf('_') + 1)
  const bBody = b.slice(b.lastIndexOf('_') + 1)
  return aBody.length >= 4 && aBody === bBody
}

例如: session_abc123 和 cse_staging_abc123 被視為同一會話。


6.任務系統---多智能體架構

6.1。所有任務類型

classDiagram
    class TaskState {
        <<union>>
    }
    class LocalShellTask {
        +status: running|done
        +command: string
    }
    class LocalAgentTask {
        +status: running|pending|done
        +isBackgrounded: boolean
        +agentId: string
    }
    class RemoteAgentTask {
        +status: running|pending|done
        +sessionId: string
        +bridgeConnection
    }
    class InProcessTeammateTask {
        +status: running|done
        +teamId: string
    }
    class LocalWorkflowTask {
        +nodes: WorkflowNode[]
        +status
    }
    class DreamTask {
        +status
        +dreamContent
    }
    class MonitorMcpTask {
        +mcpServer: string
        +status
    }

    TaskState <|-- LocalShellTask
    TaskState <|-- LocalAgentTask
    TaskState <|-- RemoteAgentTask
    TaskState <|-- InProcessTeammateTask
    TaskState <|-- LocalWorkflowTask
    TaskState <|-- DreamTask
    TaskState <|-- MonitorMcpTask

6.2。 Coordinator模式---多Agent協調

export function isCoordinatorMode(): boolean {
  if (feature('COORDINATOR_MODE')) {
    return isEnvTruthy(process.env.CLAUDE_CODE_COORDINATOR_MODE)
  }
  return false
}

協調器模式是一種特殊模式,其中 Claude Code 實例扮演 協調器 的角色 --- 它被使用 TeamCreateTool 生成工人代理, SendMessageTool 與他們溝通,並且 TeamDeleteTool 進行清理。

協調員(CLAUDE_CODE_COORDINATOR_MODE=1)
    │
    ├─ TEAM_CREATE_TOOL → 產生 Worker 1
    ├─ TEAM_CREATE_TOOL → 產生工人 2
    │
    ├─ SEND_MESSAGE_TOOL → “研究方法A”
    ├─ SEND_MESSAGE_TOOL → “研究方法B”
    │
    │ 【工人並行作業】
    │
    ├─ 接收Worker 1的結果
    ├─ 接收Worker 2的結果
    │
    ├─ 合成
    ├─ TEAM_DELETE_TOOL → 清理Worker 1
    ├─ TEAM_DELETE_TOOL → 清理Worker 2
    └─ 回傳最終計劃

7. 反金絲雀混淆---內部代號保護技術

7.1。問題

Anthropic 有一個運行 金絲雀檢測 的 CI/CD 管道:掃描輸出包以檢測內部模型代號(例如 tengu, opus46等)洩漏到公共工件中。

問題:好友系統中的物種名稱與內部模型代號相符。如果您保留字串文字,掃描器將在您每次建置時報告錯誤。

7.2。解決方案

// buddy/types.ts
const c = String.fromCharCode

// Mỗi species được encode bằng hex charcode
export const duck     = c(0x64,0x75,0x63,0x6b)             as 'duck'
export const goose    = c(0x67,0x6f,0x6f,0x73,0x65)         as 'goose'
export const octopus  = c(0x6f,0x63,0x74,0x6f,0x70,0x75,0x73) as 'octopus'
// ... 18 species đều bị encode tương tự

**為什麼要對所有 18 個物種進行編碼,而不僅僅是衝突的物種? **

// Comment giải thích:
// "All species encoded uniformly; `as` casts are type-position only (erased pre-bundle)."

如果我們只對一個物種進行編碼,我們立即知道哪個物種是內部代號→對模型代號進行逆向工程。編碼全部相同 → 無法判斷哪一個有衝突。

7.3。機構圖

flowchart LR
    subgraph "Source TypeScript"
        S1["const duck = 'duck'  ← String literal"]
        S2["const X = 'codename' ← Model codename!!"]
    end

    subgraph "Canary Scanner"
        GREP["grep build output\nfor excluded-strings.txt"]
        ALERT["🚨 Alert: codename leaked!"]
    end

    subgraph "Bundle Output"
        B1["const duck = 'duck'"]
        B2["const X = 'codename'  ← FOUND!"]
    end

    S1 --> B1
    S2 --> B2
    B2 -->|"grep matches"| GREP
    GREP --> ALERT

    style ALERT fill:#ffcccc
    style S2 fill:#ffeeee
    style B2 fill:#ffeeee
flowchart LR
    subgraph "Source TypeScript (fixed)"
        F1["const c = String.fromCharCode\nconst duck = c(0x64,0x75,...)\nconst X = c(0x63,0x6f,...)"]
    end

    subgraph "Canary Scanner"
        GREP["grep build output\nfor excluded-strings.txt"]
        OK["✅ No literal found"]
    end

    subgraph "Bundle Output"
        B1["const duck = c(0x64,...)  ← No literal!"]
        B2["SYNTHETIC_OUTPUT = 'SynOut'"]
    end

    F1 --> B1
    B1 -->|"grep: string không tìm thấy\nvì là runtime-constructed"| GREP
    GREP --> OK

    style OK fill:#ccffcc

金絲雀檢查仍然適用於實際的代號(在其他地方仍然是字串文字),而物種動物則被編碼以避免誤報。


8. 隱藏斜線指令的完整列表

命令/
├── ultraplan.tsx 🚀 多智能體規劃(30 分鐘雲)
├── 好友/🐾 虛擬寵物系統
├── Stickers/ 🎨 StickerMule 重定向
├── teleport/ 📡 將會話傳送到遠端
├── 語音/ 🎤 語音輸入
├── 回想/🔄 重播思考步驟
├── thinkback-play/ ▶️ 回放思考動畫
├── bughunter/ 🐛 自動 bug 狩獵代理
├── ctx_viz/ 📊 上下文視窗視覺化
├── heapdump/ 🔍 V8 堆轉儲(調試記憶體)
├── perf-issue/ ⚡ 使用設定檔報告效能問題
├── sandbox-toggle/ 🔒 切換沙箱模式
├── 快退/ ⏪ 將對話快退到檢查點
├── 夢想/💭(DreamTask系統)
├── 分享/ 🔗 分享會
├── 見解/ 📈 使用見解
├── 簡短/📝 總結對話
├── 緊湊/ 🗜️ 緊湊上下文窗口
├── ultraplan.tsx 📋 UltraPlan
├── Advisor/ 🤖 模型顧問設置
├── 桌面/ 🖥️ 桌面集成
├── 手機/📱 手機伴侶
├── good-claude/👍 標記良好的回應
├── ant-trace/ 🔬 內部人類追踪
└── ...

特別: /stickers

export async function call(): Promise<LocalCommandResult> {
  const url = 'https://www.stickermule.com/claudecode'
  await openBrowser(url)
  return { type: 'text', value: 'Opening sticker page in browser...' }
}

溫和的營銷復活節彩蛋。類型 /stickers → 瀏覽器開啟 Claude Code 貼圖商店。


9. 特徵標誌系統 --- GrowthBook + Statsig

9.1。兩個並行的特徵標誌系統

flowchart TD
    subgraph "Feature Flag Sources"
        GB["GrowthBook\n(primary - A/B testing\n+ gradual rollout)"]
        ST["Statsig\n(secondary - gates)"]
        ENV["Env override\nHAS_GB_ENV_OVERRIDE"]
    end

    subgraph "Gate Types"
        CACHED["checkGate_CACHED_OR_BLOCKING\n(fast path: disk cache\nslow path: server fetch)"]
        STALE["checkStatsigFeatureGate\n_CACHED_MAY_BE_STALE\n(cache only)"]
    end

    subgraph "Gated Features"
        BUDDY["BUDDY feature\nisBuddyLive()"]
        MULTI["tengu_ccr_bridge\n_multi_session\n(32 parallel sessions)"]
        ULTRA["tengu_ultraplan_model\nopus46 default"]
        SCRATCH["tengu_scratch\nscratchpad mode"]
        COORD["COORDINATOR_MODE"]
    end

    GB --> CACHED
    ST --> STALE
    ENV --> GB
    CACHED --> BUDDY
    CACHED --> MULTI
    CACHED --> ULTRA
    STALE --> SCRATCH
    ENV --> COORD

9.2。多會話 Bridge 的推出策略

/**
 * GrowthBook gate cho multi-session spawn modes.
 * Rollout staged via targeting rules: ants first, then gradual external.
 * Uses BLOCKING check (không dùng stale cache) để không từ chối nhầm.
 */
async function isMultiSessionSpawnEnabled(): Promise<boolean> {
  return checkGate_CACHED_OR_BLOCKING('tengu_ccr_bridge_multi_session')
}

const SPAWN_SESSIONS_DEFAULT = 32  // max 32 sessions song song

Anthropic 首先向內部使用者(「螞蟻」)推出多會話,然後逐漸向外部使用者推出。這是最佳實踐:Anthropic 本人就是第一隻小白鼠。


10.值得學習的實作細節

10.1。 safeFilenameId --- 防止路徑遍歷

export function safeFilenameId(id: string): string {
  // Sanitize session ID cho filename, ngăn path traversal (../, /)
  return id.replace(/[^a-zA-Z0-9_-]/g, '_')
}

簡單但真實。來自伺服器的會話 ID 不受信任 --- 在用作檔案名稱之前必須進行清理。

10.2。 PermissionRequest --- 每次呼叫工具權限

// Control request từ child CLI khi cần permission cho tool cụ thể
type PermissionRequest = {
  type: 'control_request'
  request_id: string
  request: {
    subtype: 'can_use_tool'
    tool_name: string
    input: Record<string, unknown>  // Parameters của tool call
    tool_use_id: string
  }
}

將權限請求橋轉發到伺服器(claude.ai UI),以便使用者批准/拒絕每個特定工具呼叫,而不是整個工具類別。細化權限模型。

10.3。 SessionActivity---即時狀態顯示

const TOOL_VERBS: Record<string, string> = {
  Read: 'Reading',
  Write: 'Writing',
  Edit: 'Editing',
  MultiEdit: 'Editing',
  Bash: 'Running',
  Glob: 'Searching',
  Grep: 'Searching',
  WebFetch: 'Fetching',
  WebSearch: 'Searching',
  Task: 'Running task',
}
// STATUS_UPDATE_INTERVAL_MS = 1_000

儀表板每 1 秒更新一次處理動詞:「讀取 package.json」、「編輯 src/auth.ts」 --- 小 UX 但值得學習。


11. 結論:經驗教訓

關於產品設計

Buddy/Companion 是智慧遊戲化的一個範例:不是一個離散的迷你遊戲,而是一個自然整合到工作流程中的伴侶。從userId捲動→永久同伴→使用者有附件。稀有度系統→社交分享(「我有傳奇水豚」)。語音氣泡→同伴的「存在感」而不會破壞焦點。

技術上

您應該立即應用的 3 種技巧:

  1. 推測性 I/O:應用程式開始載入後,在需要結果之前立即啟動非同步操作。 Claude Code 以這種方式節省了 175 毫秒/啟動時間。

  2. 確定性隨機性的種子 PRNG:當您想要隨機但可重複的(頭像、同伴、測試資料)時,Mulberry32 + userId 種子是正確的模式。

  3. CI/CD 中的金絲雀偵測:掃描建置工件以尋找洩漏的秘密/代號是一種有效且便宜的保護層。

關於安全

指南:npm 套件中的程式碼是 公開。無論多麼縮小或混淆,它仍然可以被逆向工程。

人類知道這一點——這就是為什麼:

  • 秘密位於伺服器端配置(GrowthBook)中,而不是在捆綁包中
  • 會話令牌是動態取得的,沒有硬編碼
  • 金絲雀偵測CI管道

如果您正在交付具有敏感業務邏輯的 npm 套件:假設對手可以讀取您的程式碼並設計適當的安全模型。


_本文基於直接分析npm套件中提取的源碼 @anthropic-ai/claude-code v2.1.89(2026 年 3 月 31 日發布)。所有程式碼片段均來自 npm 註冊表上的公共工件。 _