开源 OpenSeek: 给 DeepSeek V4 写了一层 Claude Code 同款的 TUI agent harness - V2EX
请不要在回答技术问题时复制粘贴 AI 生成的内容
lichamnesia

开源 OpenSeek: 给 DeepSeek V4 写了一层 Claude Code 同款的 TUI agent harness

  •  
  •   lichamnesia 7h 23m ago 942 views

    截至 2026/05 ,coding agent 这个赛道在 GitHub 上已经分成几条不同的线:

    • 闭源旗舰: Claude Code ( Anthropic 官方),Cursor 。体验最好,但贵 + 锁定。
    • 开源通用: OpenCode ( 164k+ Star ,Go 写的)、Aider ( Python ,VSCode 替代)、Cline 。
    • DeepSeek 原生: DeepSeek-TUI ( Rust 写的,过去一周从 ~2k 涨到 24k+ Star )。
    • GUI 切换器: cc-switch ( 78k+ Star ,Tauri 写的,管理上面这些 agent 的 provider 配置)。

    如果诉求是 「我想要 Claude Code 同款的工程( MCP / LSP / Plan-Agent-YOLO 三模式 / 真正的 sub-agent fan-out ),但走 DeepSeek V4 把成本压一个数量级」,目前 OpenCode + 手动配 DeepSeek 是一条路,但 OpenCode 的 harness 不是为 DeepSeek 优化的( cache 命中率不显示、reasoning_content 没 replay )。

    DeepSeek-TUI 是另一条路,但是 Rust ,需要装 toolchain 。

    第三条路是我两周前推上 GitHub 的 openseek TS + Bun 写的 TUI agent ,27 providers ,第一公民支持 DeepSeek V4。目前 150 Star

    下面分享一下做这个东西时踩过的几个工程坑,挑了 5 个对 DeepSeek 用户最有用的。


    1. cache-aware prompt assembly (最重要)

    DeepSeek V4 的 prefix cache 把 cached tokens 算 ~10% 价。如果你不主动 claim 这个 discount ,你的成本优势会一夜砍半。

    大部分手搓 agent loop 第一次在 turn 之间 format 不一致就把 cache 干掉了。


    2. reasoning_content replay

    V4 thinking mode 会发 internal-monologue tokens ,用户看不到。非显然部分:下一个 turn 你必须把这些 reasoning tokens 重新喂回模型,不然它会失去线索。

    3. 5 种 compaction ,不是 1 种

    1M context 不等于 1M usable context 。OpenSeek 实现了 5 种:

    策略 触发 用途
    micro/td> 每个 tool result 后 砍 noise ( grep 结果、文件 head/tail )
    auto 累计 token 阈值 自动 summary 老段
    reactive 模型主动请求 模型自己说「这段我不需要了」
    sessionMemory session 结束 跨 session 持久化 (extractMemories)
    snip 用户手动 /snip 精确剪掉一段

    4. 真的 MCP 客户端 (不是 stub)

    支持 Linear / GitHub / Postgres / Browser 任何 MCP server 一行配置接入。

    5. LSP

    跑对应语言的 language server (tsserver / rust-analyzer / pyright / gopls / clangd),每次 edit 之后把 diagnostics 喂回模型。


    整体 spec (v1.0)

    • 27 providers ( OpenAI-compat 19 个 + Anthropic 4 个 + Google 2 个 + ollama + 自定义)
    • 52 个工具 + 108 slash commands ( CCB 反编译参考 + 自写)
    • Plan / Agent / YOLO 三模式 + git worktree 隔离
    • MCP client (stdio + SSE + websocket)
    • LSP feedback (5 种语言)
    • SessionMemory 跨 session 持久化
    • HTTP/SSE Runtime API ( headless 跑)
    • SQLite-backed 任务队列(跨重启)
    • Cost meter + wallet 集成

    文档: openseek.dev 仓库: github.com/LichAmnesia/openseek

    欢迎 star 、提 issue 、聊 DeepSeek V4 用法。如果你跑过其他 TUI agent 觉得这个有问题,DM 我( X @ShenHuang / V2EX 都行)。

    7 replies    2026-05-24 18:19:58 +08:00
    chenxiankong
        1
    chenxiankong  
       7h 1m ago
    cc 直接用 deepseek baseurl 会有啥问题吗?
    lichamnesia
        2
    lichamnesia  
    OP
       6h 36m ago
    @chenxiankong 那得要用 cc-switch 了。harness 的做法会有一些不一样。比如 cache ,算价格等等。
    RockShake
        3
    RockShake  
       5h 32m ago via Android
    官方已经更新文档了,直接直接接入 Claude Code https://api-docs.deepseek.com/zh-cn/guides/agent_integrations/claude_code
    codehz
        4
    codehz  
       5h 21m ago
    建议加个 opencode go 订阅的支持
    samnya
        5
    samnya  
       4h 53m ago
    和现有的那个 deepseek-reasonix 有什么不同吗?我用它做非常多工具调用的任务(比如 IDA Pro 逆向),可以达到 99%的缓存命中率
    teaguexiao
        6
    teaguexiao  
       2h 0m ago
    cache-aware 这个确实是关键,之前直接拿 Claude Code 接 DeepSeek baseurl 用,cache 命中率显示不出来,成本一直估算不准。reasoning_content 必须回放这个坑也踩过,不喂回去模型下一轮直接失忆。
    waterwawa
        7
    waterwawa  
    PRO
       1h 47m ago
    楼主期望的功能,目测 Langcli 都实现了,而且 100%兼容 claude code 、完美适配 Deepseek v4 。
    Langcli 的缓存命中率很高,一般都有 99%+
    About     Help     Advertise     Blog     API     FAQ     Solana     2894 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 12:07 PVG 20:07 LAX 05:07 JFK 08:07
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86