基线:
main@a8d3cb7(0.2.0,app-server 架构落地后)· 日期 2026-08-02 核查方式:逐项对源码验证(不采信BEHAVIOR_PARITY.md,该表历史上多次落后于代码) 实跑验证:pnpm install→pnpm typecheck通过 →pnpm testexit 0,无失败用例
本文是一次性的现状评估,用于确定下一阶段优先级。它不替代
CODEX_ALIGNMENT_PLAN.md(架构路线的事实源),
也不替代 BEHAVIOR_PARITY.md(Claude 兼容矩阵的历史快照)。
DeepCode 已经不缺"功能"。内核层(工具、hooks、skills、plugins、MCP、sessions、sandbox、 sub-agent、cron)与 Claude Code 基本同级,0.2.0 又补上了 Codex 式的 app-server + Thread/Turn/Item 协议 + 瘦客户端 + 凭证边界——这是最贵、最不显眼、也最难补的一层,已经做完了。
真正的差距集中在三处,且都不是"再加一个功能"能解决的:
| # | 差距 | 一句话 |
|---|---|---|
| A | 终端交互层落后一代 | readline 行式 REPL vs Claude Code 的 Ink TUI / Codex 的 ratatui TUI。无颜色、无 diff、无 reasoning 展示、审批只有 y/n/a。用户 90% 时间在这里。 |
| B | 安全默认姿态与 Codex 相反 | Codex:沙箱默认开 + 审批策略是独立轴。DeepCode:沙箱默认关,一个 mode 同时表达权限档位与审批策略——alignment plan §5.5 已判定要拆,尚未做。 |
| C | 能力建成了但没有出口 | workspace/diff + review apply/revert 在 protocol 和 VS Code 有,桌面端 0 个 UI 入口;桌面端 0 个 slash 命令(PlusMenu 仍写着 "palette lands in v0.2")。 |
一句话:后端已经是 Codex 级,前端还是 v0.1 级。下一阶段的 ROI 几乎全在 UI 出口,而不在功能清单。
| DeepCode | Claude Code | Codex | |
|---|---|---|---|
| 模型 | DeepSeek 单一供应商(chat/reasoner/v4-flash/v4-pro) | Claude 全家族 + Bedrock/Vertex | GPT-5.x-Codex 家族 |
| 实现 | TypeScript monorepo + Tauri(Rust) 外壳 | TypeScript/Ink | Rust (codex-rs) |
| 商业面 | 个人/OSS,无云端 | 云端账号、团队、Enterprise/MDM | 云端账号、Codex Cloud |
| 定价意识 | 深(cache-hit 计价、reasoner 分档、/cost 命中率) |
有 /cost |
有用量视图 |
不要按"功能清单对齐"来做规划。DeepCode 的护城河是"DeepSeek 上最好的本地 agent", 竞品的一半功能(云端任务、团队、MDM)在这个定位下没有价值。
图例:✅ 有且可用 · 🟡 有但受限 · ⚠️ 有实现但无用户出口 · ❌ 无
| 能力 | DeepCode | Claude Code | Codex | 备注 |
|---|---|---|---|---|
| Read/Write/Edit/Glob/Grep | ✅ | ✅ | ✅ | Edit 语义对齐(唯一匹配) |
| Bash + 真取消 | ✅ | ✅ | ✅ | 0.2.0 补了 POSIX 进程组 |
| NotebookEdit | ✅ | ✅ | ❌ | |
| WebFetch / WebSearch | ✅ | ✅ | 🟡 | DDG/SearXNG,无付费搜索 |
| TodoWrite | ✅ | ✅ | ✅ | |
| Sub-agent (Task) | 🟡 深度 1 | ✅ 多层 + 自定义 agent | ✅ | 深度 1 是刻意的安全上限 |
| 后台任务 | ✅ | ✅ | 🟡 | session 级持久 |
| 定时任务 | ✅ launchd | ✅ | ❌ | DeepCode 独有 |
| Plan mode | ✅ | ✅ | ✅ | |
| Worktree 隔离 | ✅ | ✅ | ✅ | 0.2.0 修了强删 branch 丢工作 |
| 自动 compaction | ✅ | ✅ | ✅ | 0.8 阈值 |
| Rewind / checkpoint | ✅ 5 操作 | ✅ | 🟡 | |
| 图片输入 | ❌ 仅骨架 | ✅ | ✅ | vision/index.ts 无 provider |
| 推理链展示 | ❌ 被丢弃 | ✅ | ✅ | 见 F9 |
| DeepCode | Claude Code | Codex | |
|---|---|---|---|
| 沙箱默认 | ❌ 默认关(sandbox.enabled 未设 → 裸 /bin/sh -c) |
🟡 可选 | ✅ 默认开(Seatbelt / Landlock) |
| 沙箱能力 | ✅ seatbelt + bwrap + DNS 级域名白名单 | 🟡 | ✅ |
| 权限档 vs 审批策略 | ❌ 一个 mode 混表达 6 档 |
🟡 mode + rules | ✅ 两条正交轴(sandbox × approval) |
| 目录信任门禁 | ✅ 逐叶 provenance + trust gate | ✅ | ✅ |
| hook 命令逐条审核 | ✅ deepcode hooks trust <hash> |
🟡 | — |
| 凭证不入 renderer | ✅ 0.2.0 已做 | ✅ | ✅ |
| 审批时看 diff | ❌ 纯文本 y/n/a | ✅ | ✅ |
| DeepCode | Claude Code | Codex | |
|---|---|---|---|
| MCP client | ✅ stdio/http/sse/OAuth/elicitation/resources | ✅ | ✅ |
| 自身作为 MCP server | ✅ deepcode mcp serve |
✅ | ✅ |
| Hooks(10 事件 × 5 handler) | ✅ | ✅ | 🟡 |
| Skills | ✅ | ✅ | ✅ |
| Plugins + marketplace | ✅ | ✅ | ❌ |
| 自定义 slash 命令 | ✅ | ✅ | ✅ |
| 记忆文件 | ✅ DEEPCODE.md + AGENTS.md 层级 + @import |
✅ CLAUDE.md |
✅ AGENTS.md |
| 读 Claude Code 原有资产 | ❌ 需手动 mv ~/.claude → ~/.deepcode |
— | — |
| DeepCode | Claude Code | Codex | |
|---|---|---|---|
| CLI 交互 | 🟡 readline 行式 | ✅ Ink 全屏 TUI | ✅ ratatui TUI |
| Headless | ✅ text/json/stream-json | ✅ | ✅ exec --json |
| 桌面 App | ✅ Tauri(macOS) | ✅ Mac/Win + Web | 🟡 Web/IDE |
| VS Code | 🟡 7 命令,无 chat 侧栏 | ✅ 深度集成 | ✅ 深度集成 |
| 其他编辑器 | ✅ LSP bridge | 🟡 JetBrains | 🟡 |
| 统一协议 | ✅ 13 method + capability | 内部 SDK | ✅ app-server |
| 跨端恢复 | 🟡 消息级可以,item 级不行 | ✅ | ✅ |
| 云端/团队 | ❌ | ✅ | ✅ |
DeepCode CLI 是 node:readline 的行式 REPL(apps/cli/src/repl.ts),没有任何 TUI 框架。
| 交互 | DeepCode | Claude Code | Codex |
|---|---|---|---|
| 渲染 | 纯文本,无 ANSI 颜色 | 全屏 Ink,语法高亮 | 全屏 ratatui |
| 工具调用展示 | 一行 + 结果截断 200 字符 | 折叠卡片 + diff | 结构化 + diff |
| 编辑 diff | ❌ 完全不显示 | ✅ 彩色 diff | ✅ |
| 推理内容 | ❌ thinking_delta 直接丢弃 |
✅ | ✅ reasoning |
| 审批 UI | [y]/[n]/[a] 单行,看不到要改什么 |
菜单 + diff 预览 | /approvals |
| 模式切换 | 只能 /mode xxx |
Shift+Tab 循环 |
/approvals |
@ 文件补全 |
❌(@ 仅用于 MCP resource) |
✅ 模糊补全 | ✅ /mention |
| 图片粘贴 | ❌ | ✅ | ✅ |
| 转录回看 | ❌ | ✅ Ctrl+R |
✅ |
| statusline | 🟡 core 有模块,CLI 未渲染 | ✅ | ✅ |
影响:DeepSeek reasoner 是本项目的核心卖点,而 CLI 把它的思考过程整个丢掉了;同时 "agent 改了什么"在批准前后都看不见——两点合起来让可信度感知比竞品低一档,与功能多少无关。
已有:三栏 shell、会话侧栏(搜索/重命名/归档/删除)、聊天流 + ToolCard、内联审批、 AskUserQuestion、模式/模型/effort 下拉、Inspector、FilePanel(Source/Diff/History)、 右侧活动栏、语音输入、设置族屏、更新横幅。
缺口(按影响排序):
- 0 个 slash 命令。
PlusMenu的 "Slash command" 只往输入框插一个/,描述写着 "palette lands in v0.2"——而现在就是 v0.2.0。CLI 的 38 个命令桌面端一个都用不了。 - Review 工作流没有 UI。
protocol-agent.ts已实现diff()/applyFindings()/revertAction(),但screens/+components/里没有任何调用。有引擎没有方向盘。 - 恢复会话丢结构。resume 会调
resumeProtocolThread(),但 UI 转录是从 canonical session 的 role/content 消息重建的——协议持久化的 tool_call / approval / review_finding item 恢复后不显示。 - 无 Projects 两级概念;无长任务状态机(只有
busy布尔)。
- VS Code:7 个命令(Open Panel / Run on selection / Review current diff / Apply finding / Apply all / Revert / Diagnostics)。已是协议瘦客户端,review 闭环只有这里最完整, 但缺持续的 chat 侧栏。
- LSP:12 个
workspace/executeCommand+deepcode/protocolEvent。作为编辑器兼容层合理, 且是三方里唯一提供通用 LSP 桥的(Neovim/Emacs 用户的差异化优势)。
- F1.
--help宣传了 5 个不生效的 flag。--agents/--mcp-config/--plugin-dir/--plugin-url/--strict在parse-args.ts被解析进ParsedArgs,但全仓无任何消费点, 而helpText()的 OVERRIDES 段把它们当成可用功能列出。与已修的--permission-mode同一类坑。 - F2.
--bare的 help 文案描述的是另一个功能。 help 写 "No plugins / MCP / skills", 实现只是跳过启动 banner。真正"关插件"的是--no-plugins。 - F3. 版本号与发布状态不一致。
CHANGELOG.md已写[0.2.0],但 cli / desktop /tauri.conf.json都还是0.1.6。 - F4. 定位叙事自相矛盾。 README 已改为不承诺 1:1 parity,但
helpText()首行仍是(Claude Code parity)、cli package description 是parity with Claude Code、MIGRATION_FROM_CLAUDE_CODE.md开头仍是 "targets Claude Code parity" 且/login标注 "n/a"(实际已实现)。
- F5. 沙箱默认关闭。
sandbox/index.ts在!config?.enabled时直接裸/bin/sh -c, 且配置无默认值。seatbelt + bwrap + DNS 白名单都已实现并有测试,默认关是纯粹的浪费。 - F6.
mode仍混表达权限档位与审批策略。 alignment plan §5.5 明确要拆,但VALID_MODES仍是 6 个混合值,CLI 也没有--sandbox。这是与 Codex 最本质的差距,并损害可解释性。 - F7. 桌面端 review 能力无出口(见 §3.2-2)。
- F8. 恢复会话丢失结构化 item(见 §3.2-3)。
- F9. CLI/桌面均丢弃 reasoning。
- F10. CLI 工具结果硬截断 200 字符,大输出无法查看。
- F11. 审批无 diff 预览。
- F12.
deepcode upgrade输出泄漏内部文档编号("see §4b")。 - F13. 图片输入是空壳(DeepSeek 无 vision 模型,接口已定义但无 provider、无 UI)。
- F14.
CLAUDE.md不被 memory loader 读取,仅在"缺失提醒"里判断存在性;迁移靠手动mv。 对"从 Claude Code 迁移"这个主要获客路径,这是最大的一颗砂子。 - F15. 协议缺
thread/list/fork/archive/search,客户端回落 legacy session API, 形成两套读路径。
- CLI 渲染层。不必上 Ink,三件事拉平大半差距:工具卡片着色 + Edit/Write 彩色 diff;
审批时打印将要发生的 diff / 命令全文,选项扩为
y / n / a / d(iff);reasoning 灰色折叠流。 改动集中在repl.ts的formatEvent+ 审批回调,小改动、大观感。 - 桌面 slash 命令面板。CLI 已有 38 个命令的纯函数实现,桌面缺的只是"输入
/→ 弹出过滤 列表 → 走 SessionContext"。 - 桌面 Changes/Review 面板。协议侧全部就绪,只需一个右栏 tab:
workspace/diff列文件 → 看 hunk → Apply/Revert。这是 Codex 的招牌体验,DeepCode 是三方里唯一"有引擎无方向盘"的。
- 沙箱默认开 +
--sandbox正交轴:read-only / workspace-write / danger-full-access, 与mode(审批策略)正交;bypassPermissions降级为"不问但仍沙箱",另设显式的--dangerously-*才彻底放开。一次消化 F5 + F6。 - 恢复时重放结构化 item:resume 走
thread/read的 items 而非 session 消息投影。 - 协议补
thread/list/archive/fork,消除客户端两套读路径。
- 一次性清掉 F1–F4。
- 只读支持
~/.claude/与CLAUDE.md:获客成本最低的一项,让 Claude Code 用户装完直接跑, 而不是先做 5 步mv。
| 项 | 理由 |
|---|---|
| 云端任务 / 团队协作 / MDM | 与"本地 DeepSeek agent"定位无关,成本极高 |
| 图片输入 | DeepSeek 无 vision 模型,接了也没有后端;保留骨架即可 |
/teleport /desktop /migrate-installer /terminal-setup |
依赖各自专有基础设施,复刻只是空壳命令 |
| 多 provider 支持 | 稀释定位,并让 effort/pricing/cache 差异化失效 |
| 追 Codex 每周变化 | alignment plan §8 已写明只对齐稳定原则,正确 |
本文 §4 的清单是 2026-08-02 的快照。已落地的部分记录在这里,不回改上面的快照—— 让一份评估随实现悄悄变形,正是它自己批评的那种漂移。
| 发现 | 状态 | PR |
|---|---|---|
F1 --help 宣传 5 个不生效的 flag |
✅ 已从 help 移除并在使用时告警 | #217 |
F2 --bare 文案错误 |
✅ | #217 |
| F3 版本号不一致 | ✅ 全部对齐 0.2.0 + 一致性测试 + release 补 stamp | #217 |
| F4 定位叙事矛盾 | ✅ | #217 |
| F5 沙箱默认关 | ✅ 默认 workspace-write |
#226 |
F6 mode 混表达两件事 |
✅ --sandbox 正交轴 |
#226 |
| F7 桌面 review 能力无出口 | ✅ Changes 面板 | #220 |
| F8 恢复丢结构化 item | ✅ resume 走 thread 快照的 items | #229 |
| F9 丢弃 reasoning | ✅ CLI 流式 + 桌面折叠块(协议新增 reasoning.delta) |
#218 · #230 |
| F10 工具结果硬截断 200 字符 | ✅ 改为中段省略 | #218 |
| F11 审批无 diff 预览 | ✅ | #218 |
F12 upgrade 泄漏内部文档编号 |
✅ | #217 |
| F13 图片输入空壳 | — | |
F14 不读 CLAUDE.md / ~/.claude |
✅ 就地读取 | #227 |
F15 协议缺 thread/list / fork / archive |
✅ 三方法 + threadManagement capability |
#231 |
| A 桌面 0 个 slash 命令 | ✅ 命令面板 | #219 |
deepcode --version一直印0.1.0:它读 core 的VERSION常量,而 release 工作流只 patchapps/cli/package.json。每个发布版的--version/--help//upgrade//bug都是错的。(#217)- macOS 沙箱一旦启用就读不到工作目录:profile 是
(deny default)且没有 cwd 规则, Linux 侧却 bind 了 cwd 读写。没人撞上是因为默认没人开得起来。(#226) - 桌面事件信封被 payload 覆盖:
{ kind: 'event', ...payload }里review_action的 payload 自带kind: 'apply'|'revert',把信封判别字段覆盖掉了;按文档形状过滤的消费者 会静默丢弃这些事件。之所以没人发现,是因为在此之前根本没有消费者。(#220) - skills / sub-agents 同名不去重:同名 skill 会被向模型描述两次,同名 agent 由
.find()解析到先扫到的那个。(#227) format:check不覆盖.css:一个 postcss 解析不了的样式表能通过格式门禁;只有 Playwright 旅程能发现。(本 PR 已把 css 纳入 glob)
- 桌面事件信封只是第一处。
item.completed里不带payload.message的 item 全部被丢弃—— approval / ask_user / error / review_finding 由 app-server 忠实持久化,然后再也不显示; 恢复会话看不到自己的 review findings。(#229) - 协议根本不传 reasoning,只有
reasoningTokens。桌面不是投影 bug,是线上没有东西可投。(#230) - 协议能起、能读、能恢复线程,但不能枚举线程,所以想做 thread picker 的客户端只能自己去读 session 目录——桌面走 Tauri 命令,自带一套行结构和排序。(#231)
- rebase 冲突解决要做结构校验。两次"保留双方"的正则合并分别吃掉了一个 CSS 右花括号和一个
describe()结尾;"没有冲突标记了"不等于文件还能解析。两次都是 CI/Playwright 抓到的。
桌面侧栏的 archive / delete 仍走 Tauri。已做。顺带发现侧栏连列表都还在直连 Tauri:thread/archive已经服务,但按钮还没改用它—— 这是"消除第二个读取者"的后半截。window.deepcode.sessions.list()早就优先走 协议了,但Sidebar.tsx绕过 shim 直接listSessions()——所以"第二个读取者"其实一直是三处 而不是两处。delete 协议侧原本没有方法,新增thread/delete:app-server 是 thread 存储的 单一 owner,renderer 越过它删文件可能把正在写的 writer 的地板抽掉。Linux (bwrap) 侧只共享了 sandbox 模式解析,没有在 Linux 主机上做过 #226 那样的实测。已补:bwrap 集成测试新增 mode 轴(read-only 可读不可写 / workspace-write 可读可写 / danger-full-access 不包 bwrap),Linux CI 用DC_REQUIRE_BWRAP=1禁止静默跳过。 实测立刻抓到一个真 bug:buildLinuxBwrapArgs末尾无条件--bind cwd cwd, bwrap 后绑定覆盖先绑定,所以--sandbox read-only在 Linux 上根本不只读。 macOS 侧没有这个问题(写权限只来自allowWrite)—— 正是"只在一个平台上实测过" 的代价。- 图片输入仍是空壳(有意保留:DeepSeek 无 vision 模型)。
Claude Code 侧的对照来自实际能力核对。Codex 侧基于其公开的稳定设计(codex-rs 分层、
app-server 的 thread/turn/item、--sandbox × --ask-for-approval 双轴、ratatui TUI、
worktrees、AGENTS.md、config.toml、Cloud/PR review),与 CODEX_ALIGNMENT_PLAN.md §2
引用的 2026-08-01 官方文档一致;具体命令名与最新版行为请以官方文档为准——本报告的结论不
依赖任何单条命令级细节。