1. 背景: 閉じられた npm パッケージのソース コードを読み取る方法は?
クロード・コード (@anthropic-ai/claude-code) は、Anthropic の有名な AI コーディング エージェント ツールであり、npm パッケージ として配布されています。特別な点: Anthropic オリジナルの TypeScript ソース コードは開きません --- Bun でビルドされたバンドルのみを出荷します。
###1.1. npm バンドルが読み取り可能なのはなぜですか?
ツリーシェイク ESM スタイルの Bun バンドルの 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 に公開すると、コードは公開アーティファクトになります。 npm パッケージのリバース エンジニアリングは、結果を使用する際に ToS または著作権に違反しない限り合法です。
###1.2.復元されたフォルダー構造
クロードコードコード/
§── main.tsx ← メインエントリポイント
§── QueryEngine.ts ← コア会話ループ
§── buddy/ ← 🐾 バーチャルペットシステム (NEW!)
│ §── コンパニオン.ts ← ロールロジック(PRNG+レアリティ)
│ §── CompanionSprite.tsx ← ASCII レンダラー (Ink/React)
│ §── sprites.ts ← 18種×3フレーム
│ §── types.ts ← 種族・レアリティ・ステータスタイプ
│ §──prompt.ts ← LLM コンパニオンの紹介
│ └── useBuddyNotification.tsx ← ティザーウィンドウ
§── Bridge/ ← リモートセッションシステム
│ §── BridgeMain.ts ← ブリッジループ(再接続・バックオフ)
│ §── sessionRunner.ts ← 子プロセススポナー
│ §── workSecret.ts ← JWT + WebSocket URL
│ └─ types.ts ← プロトコルの種類
§── コマンド/
│ §── Ultraplan.tsx ← 🚀 マルチエージェントプランニング
│ §── ステッカー/ ← イースターエッグ: StickerMule
│ └── [35以上のコマンド]
§── コーディネーター/
│ └─ coordinatorMode.ts ← マルチエージェントコーディネーター
└── タスク/
§── LocalAgentTask/ ← サブエージェント(ローカル)
§── RemoteAgentTask/ ← サブエージェント(クラウドCCR)
§── DreamTask/ ← バックグラウンド非同期タスク
└── InProcessTeammateTask/ ← インプロセスエージェント
2. クロードコードの全体的なアーキテクチャ
###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
結果: ブートごとに ~175ms 節約。開発者の入力による claude 毎日何十回も --- これが本当の UX の勝利です。
3. 隠し機能 #1: 「バディ」システム --- ターミナル内の仮想ペット
これは最も衝撃的な発見です。フォルダの奥深くに隠されている buddy/ は完全な バーチャル ペット コンパニオン システムであり、端末に直接組み込まれています。
###3.1.バディはどんな感じですか?
コンパニオンは入力ボックスの隣に座っており、時々吹き出しが表示されます。 UI 全体は、Ink (React ターミナル) 経由で ASCII アート を使用してレンダリングされます。
╭───────────────────╮
│ これをコーディングするのは実は楽しい :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。レアリティシステム --- 確率デコード
ソース コードでは 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)
レジェンド ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ フロア: 50 (ステータス範囲: 50-100)
伝説のピークステータスに到達可能 min(100, 50 + 50 + rand*30) = 100 --- キャップアウト!
###3.6.吹き出しとインタラクティブシステム
吹き出しのレンダリング方法 (CompanionSprite.tsx):
╭─────────────────╮
│ コンテンツを 30 文字/行で折り返す。 │
│ 斜体のテキスト、フェード時の dimColor │
╰───────────────╯
↑ 尻尾: 「上」または「下」
バブルのライフサイクル:
┌─────────┐ ┌─────────┐ ┌─────────┐
│ addNotif │───▶│ BUBBLE_SHOW = 20 │───▶│ FADE_WINDOW │
│ (トリガー) │ │ ティック (~10 秒) │ │ = 6 ティック │
━━━━━━━━━━━━━━━━━━┘ ━━━━━━━━┘ ━━━━━━┬────────┘
│ dimColor=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.`
賢いデザイン: クロード (メイン LLM) コンパニオンのふりをしません -- ユーザーがコンパニオンと話すときにのみ「沈黙」します。コンパニオンは、別のプロンプト コンテキストによって駆動される独自の吹き出しを介して応答します。
###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。ティーザー ウィンドウとロールアウト ロジック
// 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 クロード コードの最強のスラッシュ コマンドですが、最も隠されています。 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 --- セッション認証メカニズム
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. WebSocketをsession_ingress_tokenで接続する
###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 は別のクロード コード CLI (ヘッドレス) を実行します。プロンプトに「ultraplan」という単語が含まれている場合、CLI がトリガーされます。 /ultraplan 自分自身→無限ループ。解決策: プロンプトをラップ <system-reminder> タグとフレーズはキーワードを避けてください。
ユーザー → /ultraplan "認証をビルド"
│
▼
CCR (ヘッドレス CC) は次のプロンプトを受け取ります。
<system-reminder>
次の詳細な計画を作成します: 認証の構築
[ここでは「ウルトラプラン」という言葉を使用しないでください]
</system-reminder>
│
▼CCRブラウザストリップ <system-reminder> UIから
モデルには「詳細な計画を作成...」が表示されます。
CCR フィルター: 「ウルトラプラン」→フィルターされた理由「不明なスキル」を参照?そうではありません!
実際のプロンプトには「ultraplan」という単語が含まれていないため、
5. ブリッジ システム --- リモート コード セッション
###5.1.概要
Bridge は、Claude Code が claude.ai Web インターフェイスから 同時に複数のセッションからタスクを受信できるようにするシステムです。開発者は、ローカル マシン上で実行されているクロード コードに複数のリポジトリ タスクを割り当てることができます。
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-session | cwd で 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.コーディネーターモード --- マルチエージェント調整
export function isCoordinatorMode(): boolean {
if (feature('COORDINATOR_MODE')) {
return isEnvTruthy(process.env.CLAUDE_CODE_COORDINATOR_MODE)
}
return false
}
コーディネーター モードは、クロード コード インスタンスが オーケストレーター の役割を果たす特別なモードです --- これが使用されます TeamCreateTool ワーカーエージェントを生成するには、 SendMessageTool 彼らとコミュニケーションを取るため、そして TeamDeleteTool 掃除に。
コーディネーター (CLAUDE_CODE_COORDINATOR_MODE=1)
│
§─ TEAM_CREATE_TOOL → ワーカー 1 をスポーン
§─ TEAM_CREATE_TOOL → ワーカー 2 をスポーン
│
§─ SEND_MESSAGE_TOOL → 「リサーチアプローチA」
§─ SEND_MESSAGE_TOOL → 「リサーチアプローチB」
│
│ [ワーカーは並行して動作します]
│
§─ ワーカー 1 から結果を受け取る
§─ Worker 2 から結果を受け取る
│
§─ 合成
§─ TEAM_DELETE_TOOL → ワーカー 1 をクリーンアップ
§─ TEAM_DELETE_TOOL → Worker 2 のクリーンアップ
└─ 最終計画書を返却
7. 対カナリア難読化 --- 内部コードネーム保護技術
###7.1.問題
Anthropic には カナリア検出 を実行する CI/CD パイプラインがあります。出力バンドルをスキャンして、内部モデルのコード名 ( tengu、 opus46、など)が公共の遺物に漏洩しました。
問題: Buddy システム内の種名が内部モデルのコード名と一致します。文字列リテラルのままにすると、スキャナーはビルドするたびにエラーを報告します。
###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)."
1 つの種のみをコード化する場合、どの種が内部コードネームであるかがすぐにわかり、モデルのコードネームをリバース エンジニアリングします。すべて同じにエンコードする → どれが競合しているのかわかりません。
###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
Canary チェックは実際の コード名 (他の場所ではまだ文字列リテラルである) に対して引き続き機能しますが、動物の種は誤検知を避けるためにエンコードされています。
8. 隠しスラッシュコマンドの完全なリスト
コマンド/
§── Ultraplan.tsx 🚀 マルチエージェントプランニング (30 分クラウド)
§── buddy/ 🐾 バーチャルペットシステム
§── ステッカー/ 🎨 StickerMule リダイレクト
§── teleport/ 📡 セッションをリモートにテレポートします
§── 音声/ 🎤 音声入力
§── thinkback/ 🔄 思考ステップを再生する
§── thinkback-play/ ▶️ 思考アニメーションを再生する
§── bughunter/ 🐛 自動バグハンティングエージェント
§── ctx_viz/ 📊 コンテキストウィンドウの視覚化
§── heapdump/ 🔍 V8 ヒープダンプ (デバッグメモリ)
§── perf-issue/ ⚡ プロフィールを使用して perf の問題を報告する
§── Sandbox-toggle/ 🔒 サンドボックス モードを切り替えます
§── rewind/ ⏪ 会話をチェックポイントまで巻き戻す
§── dream/ 💭 (DreamTask システム)
§── シェア/ 🔗 シェアセッション
§── インサイト/ 📈 使用状況のインサイト
§── 簡潔/ 📝 会話の要約
§── コンパクト/ 🗜️ コンパクトなコンテキストウィンドウ
§── Ultraplan.tsx 📋 UltraPlan
§── アドバイザー/ 🤖 モデルアドバイザー設定
§── デスクトップ/ 🖥️ デスクトップ統合
§── モバイル/ 📱 モバイルコンパニオン
§── 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 →ブラウザでクロードコードステッカーショップが開きます。
9. 機能フラグ システム --- GrowthBook + Statsig
###9.1. 2 つの並列フィーチャー フラグ システム
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 つのテクニック:
-
投機的 I/O: アプリの読み込みが開始されるとすぐに、結果が必要になる前に非同期操作を開始します。 Claude Code はこの方法で 1 回の起動あたり 175 ミリ秒を節約します。
-
決定的ランダム性のためのシード PRNG: ランダムだが再現可能 (アバター、コンパニオン、テスト データ) が必要な場合は、Mulberry32 + userId シードが正しいパターンです。
-
CI/CD でのカナリア検出: ビルド アーティファクトをスキャンして漏洩したシークレット/コード名を検出することは、効果的で安価な保護層です。
セキュリティについて
ガイドライン: npm パッケージ内のコードは パブリックです。どんなに縮小または難読化しても、リバース エンジニアリングは可能です。
Anthropic はこれを知っています --- だからこそ:
- シークレットはバンドルではなく、サーバー側の設定 (GrowthBook) にあります。
- セッション トークンは動的に取得され、ハードコードは不要です
- カナリア検出 CI パイプライン
機密性の高いビジネス ロジックを含む npm パッケージを出荷する場合: 敵対者がコードを読み取り、適切なセキュリティ モデルを設計できると想定してください。
この記事は、npm パッケージから抽出されたソース コードの直接分析に基づいています。 @anthropic-ai/claude-code v2.1.89 (2026 年 3 月 31 日リリース)。すべてのコード スニペットは、npm レジストリの公開アーティファクトからのものです。
