# 附录 VI:用户体验与彩蛋
> 优秀的工具不只完成任务,它们还会让使用过程本身变得有趣。
---
## 附录 VI-A:Buddy 虚拟伴侣
### 功能描述
Buddy 是一个隐藏在输入框旁边的小动物伴侣——它偶尔会冒泡说话、对对话做出反应,甚至在被直接呼唤时用一句话回应。每位用户的伴侣由**用户 ID 哈希值确定性生成**,外观与属性不会随机变化,但可能随时间"成长"。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/buddy/companion.ts` | 伴侣生成逻辑(PRNG、属性摇骰) |
| `src/buddy/types.ts` | 类型定义(物种、稀有度、属性、帽子) |
| `src/buddy/sprites.ts` | ASCII art 精灵图(多帧动画) |
| `src/buddy/prompt.ts` | 注入 LLM 的伴侣介绍 Attachment |
| `src/buddy/CompanionSprite.tsx` | 精灵图渲染 React 组件 |
| `src/buddy/useBuddyNotification.tsx` | 通知气泡 Hook |
### 物种(18 种)
| 分组 | 物种 |
|------|------|
| 水生 | duck、goose、octopus、axolotl |
| 陆生 | cat、rabbit、turtle、snail、capybara |
| 奇幻 | dragon、ghost、blob、mushroom、robot |
| 胖乎 | chonk、penguin |
| 植物 | cactus、owl |
物种名称通过 `String.fromCharCode` 运行时构造,防止字面量出现在构建产物中(规避模型代号金丝雀检测)。
### 稀有度(5 级)
```typescript
type Rarity = 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary'
// 稀有度对应的最低属性基础值(floor)
const RARITY_FLOOR = { common: 5, uncommon: 15, rare: 25, epic: 35, legendary: 50 }
```
### 属性系统
```typescript
const STAT_NAMES = ['DEBUGGING', 'PATIENCE', 'CHAOS', 'WISDOM', 'SNARK']
// 生成规则:
// - 随机选一个"峰值属性"(满值附近)
// - 随机选一个"倒霉属性"(最低值)
// - 其余属性在 floor 以上随机散布
```
### 外观组合
- **眼睛**(6 种):`·`、`✦`、`×`、`◉`、`@`、`°`
- **帽子**(8 种):none、crown、tophat、propeller、halo、wizard、beanie、tinyduck
- **闪亮**(shiny):罕见变体,颜色不同
### 确定性生成
```typescript
// Mulberry32 PRNG:以 hash(userId) 为种子
function mulberry32(seed: number): () => number
// 哈希函数:优先使用 Bun.hash,回退到 FNV-1a
function hashString(s: string): number
// 生成流程:hash(userId) → seed → PRNG → rollRarity + pick(species) + rollStats
```
### 与 LLM 集成
`getCompanionIntroAttachment()` 在每次新对话开始时,向 LLM 注入一个 `companion_intro` 类型的 Attachment,告知模型伴侣的名字和物种,让模型在对话中适当配合(但不扮演伴侣)。受 `feature('BUDDY')` 功能 gate 控制。
---
## 附录 VI-B:Effort Level(输出质量档位)
### 功能描述
Effort Level 允许用户(或自动化脚本)向 Claude 传达期望的"思考深度",从快速草稿到全力以赴。背后对应 API 的 `budget_tokens` 参数,控制模型允许使用多少思考 token。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/utils/effort.ts` | 档位定义、模型兼容性检查、数值解析 |
### 档位定义
```typescript
const EFFORT_LEVELS = ['low', 'medium', 'high', 'max'] as const
// 等价形式:也支持 0-1 之间的浮点数(如 0.8)
type EffortValue = EffortLevel | number
```
### 模型支持矩阵
```typescript
// 支持 effort 参数的模型(modelSupportsEffort)
opus-4-6 ✓ sonnet-4-6 ✓ haiku ✗ 旧版 sonnet/opus ✗
// 支持 'max' 档位的模型(modelSupportsMaxEffort)
opus-4-6 ✓ 其他所有模型 ✗
// 注:'max' 档位仅 Opus 4.6 支持,其他模型传入会报 API 错误
// Anthropic 内部用户(USER_TYPE=ant)可解锁更多模型
```
### 关键常量/配置
```bash
# 强制所有模型支持 effort 参数(测试用)
export CLAUDE_CODE_ALWAYS_ENABLE_EFFORT=1
```
---
## 附录 VI-C:Claude in Chrome(浏览器集成)
### 功能描述
将 Claude Code 与 Chrome/Chromium 浏览器深度集成:Claude 可以读取当前网页内容、截图、执行 DOM 操作,实现"看网页 → 思考 → 操作浏览器"的自动化循环。通过 Native Messaging 或 Bridge(云端中继)与浏览器扩展通信。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/utils/claudeInChrome/common.ts` | 浏览器配置、socket 路径管理 |
| `src/utils/claudeInChrome/mcpServer.ts` | MCP Server 入口(集成 `@ant/claude-for-chrome-mcp`) |
| `src/utils/claudeInChrome/setup.ts` | Native Messaging Host 安装 |
| `src/utils/claudeInChrome/setupPortable.ts` | 多平台 Chromium 浏览器支持 |
| `src/utils/claudeInChrome/chromeNativeHost.ts` | 与浏览器扩展的 stdio 通信 |
| `src/commands/chrome/chrome.tsx` | `/chrome` 命令交互菜单 |
### 支持的浏览器(`ChromiumBrowser` 类型)
Chrome、Chromium、Edge、Brave、Opera、Vivaldi、Arc 等主流 Chromium 系浏览器,支持 macOS / Linux / Windows 三平台。
### 通信架构
```
浏览器扩展(chrome-extension://)
│
├── Native Messaging(本地 stdio,低延迟)
│ ↓
│ chromeNativeHost.ts
│
└── Bridge(云端中继,可穿透防火墙)
↓
mcpServer.ts → @ant/claude-for-chrome-mcp
```
Bridge 模式由功能 gate 控制;Anthropic 内部用户(`USER_TYPE=ant`)始终使用 Bridge。
### 权限模式
```typescript
const PERMISSION_MODES = ['ask', 'skip_all_permission_checks', 'follow_a_plan']
```
### 关键 URL
```typescript
const CHROME_EXTENSION_URL = 'https://claude.ai/chrome'
const CHROME_PERMISSIONS_URL = 'https://clau.de/chrome/permissions'
```
---
## 附录 VI-D:Desktop Handoff(桌面切换)
### 功能描述
`/desktop` 命令提供从 Claude Code CLI 到 Claude 桌面应用(macOS 原生 App)的无缝切换入口,允许用户将当前会话"传递"给桌面应用继续。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/commands/desktop/desktop.tsx` | 命令入口,渲染 `DesktopHandoff` 组件 |
| `src/components/DesktopHandoff.tsx` | 切换 UI 组件(显示切换选项/状态) |
### 工作机制
`/desktop` 命令仅渲染 `<DesktopHandoff>` 组件,具体的协议握手(URL scheme 或深度链接)在组件内处理。主要用于 macOS 用户在终端与桌面 App 之间平滑切换工作场景。
---
## 附录 VI-E:/btw 侧边提问
### 功能描述
`/btw <问题>` 命令允许用户在不中断当前主流对话的情况下,向 Claude 提出一个**侧边问题**。问题以独立的轻量 Agent 查询处理,答案以气泡形式展示,不会影响主对话的上下文。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/commands/btw/btw.tsx` | 侧边问题 UI 组件(`BtwSideQuestion`) |
| `src/utils/sideQuestion.ts` | `runSideQuestion()`:独立 Agent 查询封装 |
| `src/utils/forkedAgent.ts` | 获取 cache-safe 参数(`getLastCacheSafeParams()`) |
### 工作机制
```
用户输入 /btw 这段代码有没有 bug?
│
├── 获取 getLastCacheSafeParams()(复用已有 prompt cache)
├── runSideQuestion(question, context)
│ └── 调用 LLM,使用精简 system prompt
└── 结果以 Markdown 气泡展示,不写入主对话历史
```
使用 `getLastCacheSafeParams()` 让侧边查询复用主对话的 prompt cache 前缀,避免额外 token 消耗。
---
## 附录 VI-F:颜色主题 (/color)
### 功能描述
`/color` 命令允许用户切换 Claude Code 界面的配色方案,改变 Agent 响应、工具调用、系统消息等 UI 元素的颜色风格。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/commands/color/color.ts` | 颜色主题选择逻辑 |
### 工作机制
可选主题列表存储在配置中,用户选择后写入 `~/.claude/settings.json`,下次启动时生效(无需重启)。
---
## 附录 VI-G:Bug Hunter(/bughunter)
### 功能描述
`/bughunter` 是一个专门为代码 bug 排查调优的模式,加载专用的 system prompt 和工具集,引导 Claude 系统性地检测、复现、定位并修复 bug。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/commands/bughunter/index.js` | 命令入口(内部实现,源码经编译) |
---
## 附录 VI-H:上下文可视化 (/ctx_viz)
### 功能描述
`/ctx_viz` 命令将当前对话的上下文使用情况以可视化方式展示,帮助用户了解 context window 的占用分布(工具定义、系统提示、对话历史各占多少 token)。
### 核心文件
| 文件 | 说明 |
|------|------|
| `src/commands/ctx_viz/index.js` | 命令入口(编译产物) |
---
## 附录 VI 源码快速导航
```
用户体验与彩蛋
├── Buddy 虚拟伴侣
│ └── src/buddy/ ← 6 个文件
│ ├── companion.ts ← PRNG 生成(Mulberry32)
│ ├── types.ts ← 18 种物种、5 档稀有度、5 种属性
│ ├── sprites.ts ← ASCII art 多帧动画
│ ├── prompt.ts ← companion_intro Attachment
│ ├── CompanionSprite.tsx ← React 渲染
│ └── useBuddyNotification.tsx ← 气泡通知 Hook
│
├── Effort Level
│ └── src/utils/effort.ts ← 4 档(low/medium/high/max),模型兼容矩阵
│
├── Claude in Chrome
│ └── src/utils/claudeInChrome/ ← 7 个文件
│ ├── common.ts ← 浏览器配置(7+ 种 Chromium 浏览器)
│ ├── mcpServer.ts ← @ant/claude-for-chrome-mcp 集成
│ ├── setup.ts ← Native Messaging Host 安装
│ └── chromeNativeHost.ts ← 与扩展的 stdio 通信
│
├── Desktop Handoff
│ └── src/commands/desktop/ ← CLI → 桌面 App 无缝切换
│
├── /btw 侧边提问
│ └── src/commands/btw/ ← 不打断主流对话的快速提问
│
├── /color 颜色主题
│ └── src/commands/color/
│
├── /bughunter
│ └── src/commands/bughunter/ ← 专项 bug 排查模式
│
└── /ctx_viz 上下文可视化
└── src/commands/ctx_viz/ ← Context window 使用分布展示
```
---
## 下一附录
→ [appendix-VII-testing.md](appendix-VII-testing)(测试基础设施与数据治理:VCR 录制回放、Tips 系统、Grove、Referral、Agent Summary)