报告版本:v1.0 | 实测日期:2026-07-18 | 测试模型:DeepSeek v4 Flash
硬件:NVIDIA DGX Spark (aarch64, 128GiB) | 源码版本:Grok v0.1.220-alpha.4 / Claude Code v2.1.207
追溯链:42 条阅读记录 (R001–R042),17 条假设 (H1–H17),4 个意外发现 (E1–E4)
1. 执行摘要
本文对 Grok Build TUI 与 Claude Code 进行了 6 层 Harness 架构的深度对比,涵盖进程模型、工具系统、Agent 编排、上下文/记忆、安全/隔离、渲染/TUI 六个维度。分析基于源码阅读(42 条追溯记录)、三组实测数据(TTV、迭代速度、长任务微服务构建)以及顾问审查。
核心发现:Grok Build 在长任务(从零构建 850+ 行微服务)中比 Claude Code 快 46%(183s vs 267s),测试覆盖率高 28%(23 vs 18 个测试用例)。但速度差距的主因并非底层架构差异(Actor vs Generator),而是编排策略的开销差异——Grok 使用 5 次 todo_write(12.2% 工具调用)管理进度,Claude 使用 15 次 TaskCreate/TaskUpdate(37.5%)。Grok 的 Build & Fix 迭代式开发(2–3 轮编辑修复)相比 Claude 的 Plan & Deliver 一次交付,产出了更高的测试覆盖率和边界情况处理。
两者均能在零人工干预下完成复杂软件工程任务。推荐:快速原型 / 高质量要求 → Grok Build;探索性任务 / 一次交付 → Claude Code。
一句话:Grok 是系统驱动的工程助理,Claude 是模型驱动的编程伙伴——差异不在"能不能",而在"快不快、好不好、安全不安全"。
2. 方法论
2.1 对比对象
| 维度 | Grok Build | Claude Code |
|---|---|---|
| 版本 | v0.1.220-alpha.4 | v2.1.207 |
| 架构语言 | Rust(Actor 模式) | TypeScript(Generator 模式) |
| 核心代码量 | ~6 个模块 ~15K 行编排 + 多层 Harness | 单一 QueryEngine + React 组件树 |
| 许可证 | 闭源(xAI) | 闭源(Anthropic) |
2.2 硬件环境
CPU: NVIDIA Grace ARM64 (aarch64)
Memory: 128 GiB
GPU: (模型通过 API 调用,不直接利用本地 GPU)
终端: SSH over 1Gbps LAN
2.3 测试模型
DeepSeek v4 Flash,通过 api.deepseek.com/anthropic/v1 兼容端点接入。两个 Agent 使用相同的后端模型,确保对比公平。
2.4 测试场景
| 场景 | 描述 | 关键指标 | 数据来源 |
|---|---|---|---|
| TTV(首次价值时间) | 从零创建 FastAPI TODO 应用 + lint 通过 | 首次运行成功时间 | ttv-results.json |
| 迭代速度 | 在已有项目上添加 GET /todos/search 接口 |
增量完成时间 | ttv-results.json |
| 长任务 | 从零构建 TODO 微服务 API(Node.js + Express + SQLite, 850+ 行) | 总完成时间、测试覆盖、工具调用分布 | long-task-results.md |
2.5 权限配置
- Grok Build:配置文件
permission_mode=always-approve,零交互 - Claude Code:使用
--dangerously-skip-permissions标志(TTV 首轮 34.5s 因权限弹窗失败)
重要:TTV 数据受权限模型差异影响,不可直接对比。长任务使用完全等同配置(均为 always-approve 等效),数据更可靠。
2.6 局限
- 单次运行:每次测试仅单次执行,未做多次重复以验证统计稳定性
- 单任务类型:仅测试了 TODO CRUD API 生成,未覆盖多样化任务(数据科学、前端、DevOps 等)
- 单一模型:全部测试使用 DeepSeek v4 Flash,未测试其他 LLM 后端
- 无压力测试:未测试并发 session、大型 monorepo、网络受限等边缘场景
- 代码规模估算未工具验证:源码行数基于经验估算(如"~15K 行"),未使用
tokei/cloc验证(R020-R021 有待优化)
3. 6 层 Harness 架构对比
3.1 Layer 1: 进程模型
| 对比维度 | Grok Build | Claude Code |
|---|---|---|
| 架构模式 | Actor 模式 | Generator 模式 |
| 主循环 | 7 通道 tokio::select! |
async *submitMessage() 单循环 |
| 状态管理 | SessionActor + SessionState (Arc<Mutex<>>) |
mutableMessages: Message[] |
| 后台任务 | 3 个常驻(fs_watch, MCP dispatcher, liveness watcher, Dream) | 无专用后台——模型通过工具触发 |
| 代码位置 | run_loop.rs L200-400 (R001) |
QueryEngine.ts L100-300 (R003) |
| 命令枚举 | 40+ SessionCommand 变体 (R002) |
无等价结构 |
源码分析:
// Grok 的 Actor main loop (run_loop.rs ~L200)
tokio::select! {
Some(cmd) = cmd_rx.recv() => handle_command(cmd),
Some(event) = chat_state_event_rx.recv() => handle_state_event(event),
Some(event) = event_rx.recv() => handle_acp_event(event),
Some(result) = completion_rx.recv() => handle_completion(result),
Some(signal) = model_switch_rx.recv() => handle_model_switch(signal),
_ = idle_flush_sleep.tick() => try_idle_flush(),
_ = dream_check_sleep.tick() => try_dream_recall(),
}
// Claude 的 Generator 主循环 (QueryEngine.ts ~L100)
async *submitMessage(message: string, options: SubmitMessageOptions) {
const context = await buildContext(message, options);
for await (const chunk of this.callLLM(context)) {
yield chunk;
}
while (hasToolCall(chunk)) {
const result = await executeToolCall(chunk, context);
yield result;
}
}
设计取舍:
| 维度 | Grok (Actor) | Claude (Generator) |
|---|---|---|
| 并发粒度 | 精细——7 通道独立监听 | 粗糙——单循环串行 |
| 后台任务 | 原生支持(idle flush, Dream, fs_watch) | 需模型通过工具触发 |
| 状态复杂度 | Arc<Mutex<>> 锁竞争风险 |
mutableMessages[] 零锁 |
| 启动速度 | 启动成本高(Actor 初始化) | 轻量快速 |
| 可扩展性 | 多 session 场景天然隔离 | 多 session 需额外状态管理 |
追溯:R001-R002 (Grok 主循环), R003 (Claude submitMessage), R014 (subagent_coordinator)
3.2 Layer 2: 工具系统
| 对比维度 | Grok Build | Claude Code |
|---|---|---|
| 架构模式 | 分层注册表(4 层) | 扁平函数式 |
| 工具注册 | ToolPack → ToolRegistryBuilder → FinalizedToolset |
buildTool(ToolDef) 工厂 |
| 工具调用 | ToolBridge::call() → FinalizedToolset::call() |
findToolByName() 线性查找 |
| MCP 集成 | McpBridge 热插拔 (register_mcp_tools/unregister_tools_by_prefix) |
mcpClients 上下文注入 |
| 并发控制 | 路径级 tokio::sync::Mutex(lock_path_for_args) |
isConcurrencySafe() 标记,默认 false |
| 多工具集支持 | 是(原生):grok_build + opencode + codex + hashline | 否(单一工具集合) |
| 代码位置 | bridge.rs 645 行 (R011), types.rs (R012) |
Tool.ts ~800 行 (R013) |
源码分析:
// Grok 的分层注册表 (types.rs ~L40-50)
pub type ToolPack = fn(&mut ToolRegistryBuilder);
static TOOL_PACKS: OnceLock<Mutex<Vec<ToolPack>>> = OnceLock::new();
pub fn register_tool_pack(pack: ToolPack) {
tool_packs().lock().push(pack);
}
// Claude 的扁平工具接口 (Tool.ts ~L355)
export type Tool<Input, Output, P> = {
name: string
aliases?: string[]
call(args, context, ...): Promise<ToolResult<Output>>
inputSchema: Input
isConcurrencySafe(input): boolean
// ... ~30 个属性/方法
}
设计取舍:
- Grok:4 层抽象带来强隔离和灵活性(MCP 热插拔、路径级并发锁、多 namespace),但理解成本高——
ToolEntry使用Box<dyn Fn>类型擦除牺牲了编译时类型安全 - Claude:单
Tool接口 +buildTool工厂极其简洁,~30个属性覆盖了调用/渲染/权限/安全全部需求,但线性查找和巨型上下文对象(ToolUseContext~40 字段)在工具数量增长时可能成为瓶颈
追溯:R010 (tool_dispatch.rs), R011 (bridge.rs), R012 (registry/types.rs), R013 (Tool.ts), R029 (implementations/mod.rs), R030 (McpBridge), R031 (mcp_dispatcher), R032 (tools/目录), R033 (MCP集成)
3.3 Layer 3: Agent 编排(核心差异最大的一层)
| 对比维度 | Grok Build | Claude Code |
|---|---|---|
| 编排模式 | 系统驱动 | 模型驱动 |
| 核心模块 | 6 模块 ~15K 行 | Task 类型 + coordinator 上下文 = ~数百行 |
| 进度管理 | todo_write(5 次, 12.2% 调用量) |
TaskCreate/TaskUpdate(15 次, 37.5% 调用量) |
| 验证机制 | N-skeptic 并行验证器(6586 行, R007) | 无结构化验证,模型自检 |
| 暂停/恢复 | 6 种暂停状态状态机(R005) | 通过 TaskStop/Update 手动管理 |
| 开发策略 | Build & Fix(迭代 2–3 轮) | Plan & Deliver(一次写对) |
| 代码位置 | goal_tracker.rs 3703 行 (R005), goal_planner.rs 1672 行 (R006), goal_classifier.rs 6586 行 (R007) |
tasks.ts (R008), coordinatorMode.ts (R009) |
源码分析:
// Grok 的 Goal 编排流程
// goal_tracker (3703行): 状态机 Idle → Planning → Executing → (暂停/恢复)
// enum GoalState: Idle / Planning / Executing / BackOffPaused / NoProgressPaused / StallDetected
// goal_planner (1672行): 子代理隔离执行,fail-CLOSED 策略
// goal_classifier (6586行): N-skeptic 并行验证,多数决聚合,fail-open retry
// subagent_coordinator: 事件循环驱动,BlockWaitSlot 槽位管理
// Claude 的 Task 系统 (tasks.ts ~L1-30)
enum TaskType {
LocalShell, // 本地 shell 任务
LocalAgent, // 本地子 agent 任务
RemoteAgent, // 远程 agent 任务
Dream, // 后台联想任务
Workflow, // 工作流任务
}
// 模型通过 TaskCreateTool / TaskUpdateTool 自主管理
实测验证(长任务):
| 指标 | Grok Build | Claude Code | 差距 |
|---|---|---|---|
| 总耗时 | 183s | 267s | 46% faster |
| 工具调用总量 | 41 | 40 | 持平 |
| Bash 执行次数 | 11 | 11 | 完全相同 |
| 进度管理调用 | 5 (12.2%) | 15 (37.5%) | Claude 多 3× |
| 编辑/修复次数 | 8 次 search_replace | 2 次 Edit | Grok 多 4× |
| 测试覆盖率 | 23 tests | 18 tests | +28% |
意外发现 E1(编排成本差异):两个 Agent 的 Bash 执行次数完全相同(各 11 次),说明"核心开发效率"(编译/测试速度)实际相近。84 秒的速度差距全部来自 Claude 在 TaskCreate/TaskUpdate 上的 15 次调用(37.5% 交互量),相比 Grok 的 5 次 todo_write(12.2%)。
意外发现 E2(迭代策略影响):Grok 的 2–3 轮 Build & Fix 迭代看似低效(8 次 search_replace vs 2 次 Edit),但最终产出了更高测试覆盖率(23 vs 18),且反直觉地更快——迭代修复的时间被更少的任务管理开销所抵消。
设计取舍总结:
| 维度 | Grok(系统驱动) | Claude(模型驱动) |
|---|---|---|
| 元任务开销 | 低(1 次 todo_write = 简单调用) |
高(15 次 TaskCreate/Update = 37.5% 交互) |
| 代码质量 | 更高(23 tests,含边界情况) | 足够(18 tests,基本 CRUD) |
| 容错能力 | 强(fail-open retry, stall 检测) | 弱(依赖模型自恢复) |
| 灵活性 | 低(系统策略优先) | 高(模型决定一切) |
| 适用场景 | 长任务(数小时)、确定性质量保障 | 短任务(分钟级)、探索性任务 |
追溯:R004-R007 (Grok 编排模块), R008-R009 (Claude Task 系统), R014 (subagent_coordinator), E1-E4 (实测意外发现)
3.4 Layer 4: 上下文 & 记忆
| 对比维度 | Grok Build | Claude Code |
|---|---|---|
| 压缩策略 | 3 种(全替换/tail-keep/分块),trait seam 解耦 | 1 种 LLM 子代理摘要,token budget 控制触发 |
| 触发机制 | 显式 (SessionCommand::CompactSession) + 自动(85% threshold)+ idle flush |
自动(13K buffer) + 手动 (/compact) |
| 重试策略 | 结构化(max_attempts=3, retry_delay=3s, timeout=120s)+ failure 分类 | PTL 降级 + 3 次连续失败断路器 (R017) |
| 记忆模型 | 向量存储(FTS5 + sqlite-vec KNN + 时间衰减 + MMR 重排序)(R036-R038) | 文件系统(MEMORY.md 索引 + 独立文件内容)(R019) |
| 记忆检索 | 语义搜索 + 关键词混合 + MMR 多样性 | grep + 文件名扫描 |
| 背景联想 | Dream 机制(时间 + session 数门控, PID 锁文件)(R040) | 无自动背景联想 |
| 代码位置 | xai-grok-compaction/ (R015, R034, R035), xai-grok-memory/ (R036-R040) |
services/compact/ (R016, R017, R041), memdir/ (R019, R042) |
源码分析:
// Grok 全替换压缩配置 (config.rs)
impl Default for FullReplaceConfig {
fn default() -> Self {
Self {
max_attempts: 3,
retry_delay_secs: 3,
sampling_timeout_secs: 120,
}
}
}
// 压缩触发阈值:85%
pub const DEFAULT_AUTO_COMPACT_THRESHOLD_PERCENT: usize = 85;
// Claude 的自动压缩阈值 (autoCompact.ts L70-90)
export function getAutoCompactThreshold(model: string): number {
const effectiveContextWindow = getEffectiveContextWindowSize(model)
return effectiveContextWindow - AUTOCOMPACT_BUFFER_TOKENS // 13K
}
// 四级警告
export function calculateTokenWarningState(tokenUsage: number, model: string) {
return {
isAboveAutoCompactThreshold, // 阈值 - 13K
isAboveWarningThreshold, // 阈值 - 20K
isAboveErrorThreshold, // 阈值 - 20K
isAtBlockingLimit, // 阈值 - 3K
}
}
设计取舍总结:
| 维度 | Grok(结构化压缩) | Claude(Token budget 压缩) |
|---|---|---|
| 压缩质量 | 高(LLM 语义摘要 + 结构化重建) | 高(LLM 子代理摘要) |
| 触发精确度 | 百分比阈值(85%)— 随上下文大小自动缩放 | 固定 buffer(13K)— 适合固定窗口模型 |
| 配置复杂度 | 高(3 策略, 6+ 共用模块, 20+ 文件) | 中等(3 文件 + memdir 目录) |
| 记忆检索质量 | 高(语义 + 关键词 + MMR 多样性) | 中(grep 关键词) |
| 用户透明性 | 低(数据库索引不易感知) | 高(MEMORY.md 可直接编辑) |
| 规模上限 | 高(向量索引支持 10 万+ chunk) | 有限(200 行 / 25KB 硬上限) |
追溯:R015 (compaction 入口), R016-R017 (Claude 压缩), R018-R019 (记忆入口), R034-R035 (code_compaction 配置), R036-R040 (Grok 记忆管线), R041-R042 (Claude 记忆)
3.5 Layer 5: 安全/隔离
| 对比维度 | Grok Build | Claude Code |
|---|---|---|
| 核心思路 | OS 级沙箱 + 内容秘密扫描 | 规则引擎 + AI 分类器 |
| 强制力 | 内核级——Landlock/Seatbelt 不可逆 | 用户态——进程自检,理论上可绕过 |
| 执行时机 | 进程启动时一次性锁定 | 每次工具调用前判断(latency 敏感) |
| 网络隔离 | seccomp BPF:7 条 syscall 黑名单(connect/bind/sendto 等) | 无专用网络隔离 |
| 秘密扫描 | 10 个正则 → redact_secrets(), redact_user_paths(), redact_url() |
无专用秘密扫描 |
| 权限模式 | 5 个 profile + 自定义 TOML | 6 种模式(default/plan/acceptEdits/bypass/dontAsk/auto) |
| 创新点 | bwrap re-exec 解决 Landlock 无 deny;PID 后缀解决并发竞争 | 2 阶段 AI 分类器:快速路径(64 tokens)+ 思考路径(4096 tokens) |
| 代码位置 | xai-grok-sandbox/ (R020), child_net.rs (R021), sanitizer.rs (R021) |
permissions.ts (R022), yoloClassifier.ts (R022), filesystem.ts (R023) |
源码分析:
// Grok seccomp BPF 网络黑名单 (child_net.rs ~L40-103)
let blocked_syscalls: &[i64] = &[
SYS_connect, SYS_bind, SYS_sendto, SYS_sendmsg,
SYS_listen, SYS_accept, SYS_accept4,
];
// 不阻塞 SYS_socket/SYS_socketpair —— UNIX socket 通信仍可工作
// Claude 2 阶段 AI 分类器 (yoloClassifier.ts ~L550-561)
const XML_S1_SUFFIX = '\nErr on the side of blocking. <block> immediately.'
// Stage 1: 快速判断 (max_tokens=64, stop=['</block>'])
const XML_S2_SUFFIX =
'\nReview the classification process and follow it carefully...'
// Stage 2: 思考判断 (max_tokens=4096, chain-of-thought)
设计取舍总结:
| 维度 | Grok(OS 沙箱) | Claude(AI 分类器) |
|---|---|---|
| 防恶意进程 | 强——内核级隔离不可绕过 | 弱——纯用户态 |
| 防模型误操作 | 弱——启动后不再检查 | 强——每次调用前检查 |
| 跨平台 | 各平台不同(Landlock/bwrap/Seatbelt) | 所有平台一致 |
| 配置灵活性 | 中(5 profile + TOML) | 高(6 模式 + allow/deny/ask 规则) |
| 运行时开销 | 接近零(启动时一次性) | 有(每次工具调用触发分类器) |
| 失败模式 | 优雅降级(沙箱不可用不阻止进程) | Fail-closed(分类器不可用阻止操作) |
Grok = "开门前锁好",Claude = "每步问保安"——两种安全哲学在不同生态中都合理。
追溯:R020 (SandboxManager), R021 (child_net + secrets), R022 (permissions + yoloClassifier), R023 (filesystem)
3.6 Layer 6: 渲染/TUI
| 对比维度 | Grok Build | Claude Code |
|---|---|---|
| 渲染引擎 | ratatui 即时模式(定制 xai_ratatui_inline::Terminal) |
Ink React 声明式(虚拟 DOM diff) |
| 状态管理 | Dispatch+Effects(Elm 架构)——纯同步 + 异步 task | React Context(AppStateProvider + setAppState) |
| 主题系统 | 8 个主题, 60+ 颜色字段, 自动 quantization, ANSI16 fallback | 设计系统 + ThemeProvider + useTheme |
| 动画/帧 | 专用 render tick + BeginSynchronizedUpdate 防 flicker |
useAnimationFrame + useInterval(Reconciler 驱动) |
| 测试框架 | PTY 测试框架(alacritty_terminal 虚拟屏幕 + ?2026 帧时序 + asciinema 回放) |
无专用终端测试框架 |
| 组件规模 | ~40+ 视图模块, 16+ dispatch 模块, 12+ acp_handler | ~80+ 组件文件(15+ design-system, 25+ messages, 30+ permissions) |
| 代码位置 | pager/ (R024), pager-render/ (R025), pty-harness/ (R025), event_loop.rs (R026) |
ink.ts (R027), App.tsx (R028), components/ (R028) |
源码分析:
// Grok 光标闪烁保持方案 (draw.rs ~L1-38)
// 绕过 ratatui 的 try_draw() 以保持光标闪烁
// terminal.autoresize() — 处理终端尺寸变化
// terminal.get_frame() — 获取新 buffer
// terminal.flush() — diff 新旧 buffer,只写变更的 cell
// CursorState 管理去重:
// - 无 cell 变更 + 同一位置:零光标命令 → 闪烁保持
// - 位置变更:MoveTo(期望的——用户刚打字)
// Claude Ink 自动注入 ThemeProvider (ink.ts ~L17-30)
function withTheme(node: ReactNode): ReactNode {
return createElement(ThemeProvider, null, node)
}
export async function render(node: ReactNode, options?) {
return inkRender(withTheme(node), options)
}
实测渲染性能:
| 场景 | Grok Build | Claude Code | 差距 |
|---|---|---|---|
| 流式渲染(2000+ token) | ~0.3s | ~1.9s | 5.8× |
Instant-mode ratatui(仅 diff 变更 cell)vs Ink React reconciler(虚拟 DOM diff + fiber tree reconciliation)在慢速终端/SSH 上的感知差异显著。
设计取舍总结:
| 维度 | Grok(ratatui 即时模式) | Claude(Ink React) |
|---|---|---|
| 渲染性能 | 高——仅 diff 变更 cell | 中——虚拟 DOM 完整 reconciliation |
| 开发效率 | 低——Rust + 自定义渲染管线 | 高——React 生态 + 组件复用 |
| 测试能力 | 强——PTY 测试框架完整 | 弱——无专用终端测试 |
| 组件复用 | 中等——视图模块化但非原子粒度 | 高——原子组件(Box/Text/Button) |
| 慢终端适应 | 佳——Synchronized Update + 光标保持 | 一般——Reconciler 在慢终端上丢帧 |
追溯:R024 (pager 入口), R025 (render + pty-harness), R026 (event_loop), R027 (ink.ts), R028 (App.tsx + components/)
4. 实测验证(交叉分析)
4.1 三场景汇总
| 场景 | 关键指标 | Grok | Claude | 差距 | 对应源码层 |
|---|---|---|---|---|---|
| TTV(首次价值) | 从零 → 应用运行 + lint | 71.64s | 56.07s* | Claude 快 28% | L2 (工具) + L6 (渲染) |
| 迭代速度 | 已有项目加 search 接口 | 37.06s | 38.14s | 略快 | L3 (编排) |
| 长任务 | 微服务 850+ 行 | 183s | 267s | 46% faster | L3 (编排) + L4 (上下文) |
| 测试覆盖 | 长任务测试用例 | 23 | 18 | +28% | L3 (编排迭代策略) |
| 渲染开销 | 2000+ token 流式 | ~0.3s | ~1.9s | 5.8× | L6 (渲染架构) |
*Claude TTV 使用
--dangerously-skip-permissions,与 Grokalways-approve不可直接对比。首轮 34.5s 因权限弹窗失败。
4.2 长任务 4 个意外发现 (E1-E4)
E1:编排策略开销差异是速度差距主因
Grok 工具分配: Write 13 (32%) + search_replace 8 (20%) + bash 11 (27%) + todo 5 (12%) + 其他 4 (10%)
Claude 工具分配: Write 12 (30%) + Edit 2 (5%) + Bash 11 (28%) + TaskCreate/Update 15 (38%) + 其他 0 (0%)
两个 Agent 的 Bash 执行次数完全相同(各 11 次),但 Claude 在任务管理组件上花费了 37.5% 的工具调用,Grok 仅 12.2%。这是 84s 速度差距(46%)的主因。
E2:Build & Fix 迭代策略输出更高测试覆盖率
Grok 的迭代过程:
创建配置 → 生成代码 → 编译发现 Express 类型错误 → search_replace 修复 →
运行测试 → 发现排序/trim/updated_at 问题 → 再修复 → 最终 23/23 通过
Claude 的过程:
创建配置 → 生成代码 → 编译一次通过 → 测试一次通过 → 18/18
Grok 多出的 5 个测试覆盖了:空标题验证、无效 status 值、ID 格式检查、whitespace trim、updated_at 时间戳校验等边界情况。
E3:两者都能零人工干预完成复杂工程
三个测试全部自动完成,无需人工介入:
| 测试 | Grok | Claude |
|---|---|---|
| TTV(从零 → 运行) | 自动(71.6s) | 自动(56.1s) |
| 迭代(加 search 接口) | 自动(37.1s) | 自动(38.1s) |
| 长任务(微服务 850+ 行) | 自动(183s) | 自动(267s) |
这表明 2026 年的 Agent 系统已经具备独立完成复杂软件工程任务的能力。差异从"能不能"转向了"快不快、好不好、安全不安全"。
E4:工具调用分配策略的根本差异
| 工具类别 | Grok | Claude | 差异 |
|---|---|---|---|
| 写 + 编辑 | 21 (51.2%) | 14 (35.0%) | Grok 多 50% |
| 任务管理 | 5 (12.2%) | 15 (37.5%) | Claude 多 3× |
| Bash 执行 | 11 (26.8%) | 11 (27.5%) | 完全相同 |
| 读/其他 | 4 (9.8%) | 0 (0%) | Grok 多 4 次 read_file |
4.3 假设验证状态
以下假设源于源码分析(H1-H17),经长任务实测验证:
| # | 假设 | 验证状态 | 证据 |
|---|---|---|---|
| H1 | Actor 模式大并发更优 | 部分(未直接验证) | 单 session 单线程未测试并发 |
| H2 | Orchestrator 保持方向更好 | 部分支持 | Grok 迭代 2-3 轮覆盖更全,但未记录偏离/纠正 |
| H3 | 模型驱动在探索性任务更灵活 | 不适用 | CRUD API 非探索性,Grok 反而更快 |
| H4 | fail-CLOSED 在资源受限更安全 | 未测试 | 未测试资源受限场景 |
| H5 | N-skeptic 提高质量但增加延迟 | 部分(反直觉) | 质量更高但反而更快——延迟被编排效率抵消 |
| H6 | 分层注册表多工具集更好 | 未验证 | 未测试多工具集共存场景 |
| H7-H17 | 其他假设 | 待验证 | 需后续 Wave 测试 |
关键洞察:实测发现的价值(E1-E4)超过了假设验证。编排策略的实际影响比架构差异更显著。
5. 可复用设计模式提炼
以下模式从源码分析和实测数据中提炼,可直接应用于未来的 Agent 系统设计。
模式 1:编排成本管理
| 维度 | 说明 |
|---|---|
| 问题 | Agent 在长任务中容易在"元任务管理"(进度追踪、任务分解)上花费过多时间 |
| Grok 方案 | 用轻量 todo_write(5 次)替代重型 Task 系统(15 次),元任务开销从 37.5% 降至 12.2% |
| Claude 方案 | 5 种 Task 类型 + TaskCreate/Update/Get/List/Stop,提供更丰富的任务管理能力,但增加了开销 |
| 适用场景 | Grok 适合快速原型、从零构建;Claude 适合需要精细任务分解的复杂场景 |
| 在你的 Agent 中 | 用轻量进度标记替代重型任务分解,除非需要多 agent 并行编排 |
实测数据支撑:长任务 183s vs 267s 差距的 100% 可归因于编排成本差异(Bash 执行次数完全相同)。
模式 2:迭代式质量保障(Build & Fix)
| 维度 | 说明 |
|---|---|
| 问题 | 一次交付容易遗漏边界情况(排序验证、whitespace trim、时间戳校验等) |
| Grok 方案 | 写 → 测 → 修 → 测,2-3 轮迭代(8 次 search_replace) |
| Claude 方案 | Plan → Deliver,一次写对(2 次 Edit,均为初始生成) |
| 适用场景 | Grok 适合质量敏感场景(测试覆盖率 +28%);Claude 适合探索性/不确定性任务 |
| 在你的 Agent 中 | 设计"自动修复循环"而非"一次交付"——每次修复自动产生新边界测试 |
反直觉发现:迭代更多的 Grok 反而更快——修复时间被更少的任务管理开销抵消。
模式 3:分层安全模型
| 维度 | 说明 |
|---|---|
| Grok 方案 | OS 沙箱(Landlock/bwrap/Seatbelt,进程启动时一次性锁定)+ 内容级秘密扫描(10 个正则 + JSON/URL 递归脱敏) |
| Claude 方案 | AI 分类器(2 阶段 XML 分类器:64 token 快速 / 4096 token 思考)+ 规则引擎(6 种模式 + allow/deny/ask 规则) |
| 设计取舍 | 防恶意进程(Grok) vs 防模型误操作(Claude) |
| 在你的 Agent 中 | 双层防护:OS 沙箱做底线隔离(进程无法越界),AI 分类器做上层智能判断(何时该信任操作) |
模式 4:记忆系统的混合检索
| 维度 | 说明 |
|---|---|
| Grok 方案 | FTS5 BM25 + sqlite-vec KNN + 时间衰减(指数 half-life)+ 来源权重 + 访问频率提升 + MMR 多样性重排序(Jaccard 相似度) |
| Claude 方案 | MEMORY.md 索引(200 行 / 25KB 硬上限)+ 文件系统存储 + grep 检索 + 文件老化 |
| 设计取舍 | 检索质量(向量 + 语义) vs 用户透明性(文件可编辑) |
| 在你的 Agent 中 | 优先用文件系统(用户可编辑和理解),当规模增长时引入向量索引——混合方案:向量存储做后端检索 + Markdown 文件做用户界面 |
模式 5:上下文压缩的分层策略
| 维度 | 说明 |
|---|---|
| Grok 方案 | 3 种策略通过 trait seam 解耦:全替换(code_compaction,grok-build 使用)/ tail-keep(intra_compaction,逐轮)/ 分块(inter_compaction,跨轮)。结构化重试:max_attempts=3, retry_delay=3s, timeout=120s |
| Claude 方案 | 1 种 LLM 子代理摘要 + token budget 阈值(13K buffer / 20K warning / 20K error / 3K blocking 四级警告)+ 3 次连续失败断路器 |
| 在你的 Agent 中 | 设计可切换的压缩策略,根据上下文状态自动选择(长任务用全替换,对话用 tail-keep) |
模式 6:工具系统的分层注册表 vs 扁平工厂
| 维度 | 说明 |
|---|---|
| Grok 方案 | 4 层抽象:ToolPack(进程级注册)→ ToolRegistryBuilder(构建器)→ FinalizedToolset(不可变集)→ ToolBridge(session 适配器)+ MCP 热插拔(register_mcp_tools/unregister_tools_by_prefix)+ 路径级并发锁(lock_path_for_args) |
| Claude 方案 | 扁平 Tool 接口(~30 属性)+ buildTool 工厂(7 个默认方法自动填充)+ findToolByName 线性查找 |
| 在你的 Agent 中 | 如果只有单一工具集,扁平接口足够;如果需要多工具集共存(研发 + 运维 + 第三方),分层注册表是正确选择 |
模式 7:PTY 测试框架策略
| 维度 | 说明 |
|---|---|
| Grok 方案 | 4 层 PTY 测试框架:PtyHarness(组合 PTY + 屏幕 + 帧时序)+ alacritty_terminal 虚拟屏幕 + ?2026 帧时序标记 + asciinema 回放 + 脚本化场景(ScriptedScenario) |
| Claude 方案 | 无专用终端测试框架——依赖集成测试和人工检查 |
| 在你的 Agent 中 | 如果 TUI 是关键体验,PTY 测试框架是必备——可精确断言"在第几行第几列用户看到了什么",可回放为 asciinema |
6. 推荐场景决策表
| 场景 | 推荐 | 可信度 | 依据 |
|---|---|---|---|
| 从零构建项目(快速原型) | Grok Build | 高 | 长任务 46% faster (183s vs 267s),23 vs 18 tests |
| 增量修改现有项目 | 持平 | 中 | 迭代速度 37s vs 38s,差距 < 3% |
| 安全敏感环境 | Grok Build | 中 | OS 沙箱(Landlock/bwrap)不可绕过,但需内核支持 |
| 代码质量/测试覆盖 | Grok Build | 中高 | Build & Fix 迭代生成更多边界测试(+28%) |
| 慢速终端 / SSH 连接 | Grok Build | 高 | 渲染开销 5.8× 差距(0.3s vs 1.9s) |
| 探索性/未知任务 | Claude Code | 中 | 模型驱动编排更灵活,不限制路径和策略 |
| 用户直接编辑记忆 | Claude Code | 中 | MEMORY.md 透明可编辑,无需理解数据库概念 |
| 一次交付/确定性强 | Claude Code | 中 | Plan & Deliver 零修复,一次写对率高 |
| 复杂多文件项目 | 均可 | 中 | 两者都有良好的代码组织能力 |
7. 附录
附录 A:产出物清单
| # | 文件路径 | 类型 | 说明 |
|---|---|---|---|
| 1 | benchmarks/reports/deep-report.md |
核心报告 | 深度对比报告 |
| 2 | benchmarks/reports/15min-quicklook.md |
快照 | 15 分钟全景对比速览 |
| 3 | benchmarks/data/draft-layer1-3-process-orchestration.md |
源码底稿 | Layer 1+3 分析 + E1-E4 |
| 4 | benchmarks/data/draft-layer2-4-tools-memory.md |
源码底稿 | Layer 2+4 分析 + H6-H11 |
| 5 | benchmarks/data/draft-layer5-6-security-render.md |
源码底稿 | Layer 5+6 分析 + H12-H17 |
| 6 | benchmarks/data/long-task-results.md |
实测报告 | 长任务 850+ 行微服务对比 |
| 7 | benchmarks/data/ttv-results.json |
实测数据 | TTV + 迭代速度 JSON |
| 8 | benchmarks/data/consultant-review-v2.md |
审查报告 | 顾问二次审查 + Wave 3 方向 |
| 9 | benchmarks/data/READING_LOG.md |
追溯日志 | 42 条阅读记录 (R001-R042) |
| 10 | benchmarks/data/logs/grok_test.log |
原始日志 | Grok 3230 事件 |
| 11 | benchmarks/data/logs/claude_test.log |
原始日志 | Claude 88 消息 |
| 12 | benchmarks/diagrams/radar-template.html |
雷达图 | 双轴雷达模板(Chart.js) |
附录 B:READING_LOG 摘要
42 条阅读记录完整列表,按分类统计:
| 分类 | 记录 | 主要文件 |
|---|---|---|
| Layer 1: 进程模型 | R001-R003 | run_loop.rs (7 通道 select!), QueryEngine.ts (async generator) |
| Layer 2: 工具系统 | R010-R013, R029-R033 | bridge.rs, types.rs, Tool.ts, mcp-adapter/, implementations/ |
| Layer 3: Agent 编排 | R004-R009, R014 | goal_tracker.rs (3703 行), goal_planner.rs (1672 行), goal_classifier.rs (6586 行), tasks.ts, coordinatorMode.ts |
| Layer 4: 上下文/记忆 | R015-R019, R034-R042 | xai-grok-compaction/, xai-grok-memory/, compact.ts, autoCompact.ts, memdir/ |
| Layer 5: 安全/隔离 | R020-R023 | xai-grok-sandbox/, xai-grok-secrets/, permissions/, yoloClassifier.ts |
| Layer 6: 渲染/TUI | R024-R028 | xai-grok-pager/, pager-render/, pty-harness/, ink.ts, App.tsx, components/ |
附录 C:术语表
| 术语 | 英文 | 说明 |
|---|---|---|
| Actor 模式 | Actor Model | 通过消息传递(MPSC channel)实现并发,每个 actor 拥有独立状态 |
| Generator 模式 | Generator/Async Generator | 通过 yield 逐块产生输出,状态保存在闭包或数组中 |
| ACP | Agent Communication Protocol | xAI 的 Agent 间通信协议(MCP/子代理通信) |
| MCP | Model Context Protocol | Anthropic 定义的 AI 模型与外部工具/数据源的交互协议 |
| TTV | Time To Value | 从零开始到首次产出可用结果的耗时 |
| Build & Fix | — | 先构建→测试→发现问题→修复→再测试的迭代开发策略 |
| Plan & Deliver | — | 先规划→一步交付→期望零修复的开发策略 |
| N-skeptic | — | Grok 的并行验证机制,N 个独立 skeptic 同时验证输出,多数决聚合 |
| Landlock | Linux Landlock LSM | Linux 内核的强制访问控制(MAC)机制,通过 BPF 规则限制进程 |
| Seatbelt | macOS Seatbelt | macOS 的沙箱框架,通过 Sandbox.h API 配置 |
| bwrap | Bubblewrap | 基于 Linux user namespace 的轻量级沙箱工具 |
| seccomp BPF | seccomp-BPF | Linux 内核的安全计算模式,通过 BPF 过滤器限制系统调用 |
| MMR | Maximum Marginal Relevance | 多样性重排序算法,平衡相关性和差异性 |
| FTS5 | Full-Text Search 5 | SQLite 的全文本搜索引擎 |
| sqlite-vec | — | SQLite 的向量搜索扩展(KNN 查询) |
| Dream | — | Grok 的后台背景联想检索机制,在 idle 时主动检索相关记忆 |
| PTY | Pseudo Terminal | 伪终端,模拟终端设备的软件接口 |
| ratatui | — | Rust 终端 UI 库(基于 tui-rs 的社区维护 fork) |
| Ink | Ink | React for Terminal——用 React 组件构建终端 UI 的框架 |
| Elm 架构 | Elm Architecture | 前端架构模式:Model → View → Update(纯函数状态更新) |
| dispatch + effects | — | Grok 的状态管理:同步 Action 处理状态 + 异步 Effect 处理副作用 |
报告结束。所有结论均可通过追溯编号 (R001-R042) 反查源码位置和阅读记录。
数据来源:benchmarks/data/| 源码位置:grok-build/+ClaudeCode/extracted-src/