News Hacker|极客洞察

267 8 小时前 github.com
🤔Dirac 以 Gemini-3-flash-preview 登顶 TerminalBench:Cline 深改 fork、AST 与 harness 争议
这分数到底在测模型,还是测 harness 有多会整活?

🎯 讨论背景

Dirac 是一个开源 AI coding agent,起源于 Cline(一个开源的 VSCode/CLI 编码代理)的深度 fork,同时提供 CLI。帖子宣称它在 Gemini-3-flash-preview 上跑 TerminalBench(一个面向终端编码任务的 benchmark)拿到 65%,高于 Google 官方结果 48%。评论几乎立刻把焦点放在 harness(包裹模型的工具链)上,因为它的卖点不是换了一个更强的 model,而是 hash-anchored edits、tree-sitter AST 上下文选择、批量工具调用和代码执行。讨论还延伸到不同语言支持、与 OpenCode、pi.dev、Forge Code 的对比,以及 telemetry(遥测)和隐私默认值是否足够透明。

📌 讨论焦点

哈希锚点与 AST 提效

评论首先把 Dirac 的优势拆成几块:用 Hash-Anchored edits 让编辑定位更稳定,用 AST / tree-sitter 决定哪些符号和文件进上下文,默认优先给 file skeleton 而不是整文件内容。有人补充,grep 在大仓库里会把同名符号、bundled packages、巨大文件一起拖进来,反而把 context window 塞爆。也有人强调批量执行读写和允许模型现场跑 bash/python/perl 脚本,等于把很多原本要靠模型“猜”的步骤交给工具完成。还有人觉得这种结构化浏览/编辑对 LLM 比对人类更友好,甚至和 JetBrains 的 structure search-and-replace、Clojure 的结构化工具很像。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7]

harness 争议

许多人把这次高分解读成 harness 的胜利,认为同一 model 在不同 harness 下的差距可能比换 model 还大。也有人主张直接比较 model+harness 的笛卡尔积,而不是只看单一榜单,因为 benchmark 数字本质上是 prompt、toolchain 和模型一起作用的结果。围绕公平性,评论要求补一个不同 model family 的对照,页面上明确写出所有结果都来自 Gemini-3-flash-preview,并最好补上 completion time 和 output tokens。还有人提到 TerminalBench 的严格 timeout 会让慢模型天然吃亏,ARC-AGI-3 之类的 benchmark 也在试图限制 harness。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10]

语言支持与索引一致性

关于 AST 能力的适用范围,评论先问是不是只支持少数语言,回应说它用的是 tree-sitter WASMs,当前大约覆盖 14 种语言;没有 parser 时 agent 仍能跑,只是 AST 相关功能不可用。Dirac 还把 symbols DB 放在 workspace 目录里的 sqlite 中,并根据时间戳做增量更新,这样可以让符号查询更快。问题是长任务里它可能比当前编辑状态慢一步,出现 stale references;如果每次编辑后都同步重索引,又会破坏 batching 带来的速度优势。最后还有人提到它会在编辑前后抓 LSP 错误状态做 diff,算是一种折中。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8]

与其他 agent 的比较

不少评论把 Dirac 当作 Cline(一个开源 coding agent)的重度 fork 来看,重点关心 plan+act mode、CLI、VSCode extension 这些既有能力是否还在。有人问 OpenCode(另一款开源编码代理)、pi.dev、Forge Code(终端 agent)等工具能不能通过插件或同类特性实现同样效果,暗示这些功能未必非得整套重写 harness。也有实战反馈说,在大型 Rust 重构里它比 OpenCode 更稳,但在普通 Go 项目上 Gemini 仍可能选错 bash 命令、没按代码库习惯改动。另一类反馈则是接入本地 llama.cpp(本地推理项目)/LMStudio(本地模型工具)、工作场所的 LLM proxy,或用 skills 减少成本,说明很多人把它当成可替换的 agent 工作流底座。

[来源1] [来源2] [来源3] [来源4] [来源5] [来源6] [来源7] [来源8] [来源9] [来源10] [来源11] [来源12] [来源13] [来源14] [来源15] [来源16] [来源17] [来源18]

Telemetry 与隐私

Telemetry 这一点引发了明显的不信任。有人翻出它会向 dirac.run/v1/event 发送 machine ID、token usage、model info、errors 和平台信息,还会周期性拉取 feature flags;web search / web fetch 甚至会经 api.dirac.run 转发请求内容。批评者认为这对一个只有单人维护的工具来说太激进,而且默认不是明显的关闭状态,所以直接放弃使用。回应则强调这些做法继承自 Cline fork,没有恶意,也不存储 PII,但它依然提醒大家:agent 工具的默认数据流向同样重要。

[来源1] [来源2] [来源3] [来源4]

上下文裁剪与 subagents

还有一条比较细的分支在讨论 context management 和 subagents。有人想知道是否应该裁剪旧的 tool call response、做自动 compaction,或者把主 agent 只保留一个 run_agent 工具,让子代理去做搜索和执行。回应里提到,如果 API 支持 caching,过度 pruning 会打断 prefix cache,损失 90% 折扣的缓存收益;但在没有缓存或恢复会话的情况下,裁剪近期无关内容仍可能划算。关于 subagents,则有人提醒它们可能会陷入循环、迟迟不返回,所以主 agent 需要能监控和接管。

[来源1] [来源2] [来源3] [来源4]

📚 术语解释

TerminalBench: 面向终端/CLI coding agent 的 benchmark,任务通常在隔离环境中执行。

harness: 包裹 model 的工具链与执行框架,负责工具调用、上下文管理和流程控制。

AST: Abstract Syntax Tree,代码的语法结构树,用来做结构化搜索、定位和编辑。

tree-sitter WASM: 把 tree-sitter 编译成 WebAssembly 的解析器,便于在多语言代码上做结构化分析。

Hash-Anchored edits: 用哈希锚点稳定定位代码片段的增量编辑方式,减少文本位置漂移。

LSP: Language Server Protocol,IDE 用来提供代码分析、补全和诊断的协议。