用一句话让AI把代码写完,听起来很美。但真正跑过的人都知道,麻烦往往不在写代码那一步,而在写到一半的时候——它悄悄把你原本的需求改了,然后交上来一份"看起来完成了"的东西。
codsh 0.23.0 想解决的就是这个。这个版本给 /ship 这条链路加了一层叫 Mission Contract 的控制面,核心逻辑只有一句:验收标准一旦封存,就不许再动。
![]()
先说清楚它是什么
codsh 是一个跑在 open dsh 上的终端编码代理,官方定位是 DeepSeek-native,而不是 Claude Code 的环境包装器。它对外暴露的入口始终是同一个命令:/ship,一句话进去,验证过的代码出来。
0.23.0 做的事情,是给这个循环装上控制面。用发布说明里的说法,目标是让验收标准保持封存状态,让"漂移"直接阻断运行,而不是把目标悄悄改写掉,同时交付必须有记录在案的证据。
封存之后,六样东西不许再改
当 Gate 1 确认规格之后,/ship 会从封存的主线、范围外内容以及验收标准里,编译出一份机器可校验的 Mission Contract,落地成 mission.contract.json 这个文件。
封存之后进入不可变状态,涉及的内容包括:
- 主线(Main Track)
- 范围外内容(Out of Scope)
- 质询环节的决策
- 原始措辞
- 验收标准
- 契约 JSON 本身
对这几项的受保护写入会被直接拒绝。外部漂移会中止运行,并且留在磁盘上供人检查——不是静默吞掉,是停下来让你看。
四道关卡,各管一段
除了不可变机制,这个版本还配了三个组件,加上封存本身,构成一条完整的防线。
对齐门(Alignment Gate)负责拒绝那些缺少需求映射、或者试图写入不可变记忆的写操作。漂移检测器(Drift Detector)给计划和动作打分,对照封存内容判断偏离程度——这里有个关键设定:主线被重写属于阻断项,而不是被接受的改写。验证器(Verifier)则把验收标准和记录下来的证据做匹配,没有匹配上,交付就不算完成。
换句话说,过去那种"AI说做完了就算做完了"的路径,在这套机制下走不通。
为什么不能"聊个计划就开干"
临时拼出来的代理计划活在对话记忆里。它们会漂移,验收最后变成一种感觉。
/ship 的做法是把人的投影留在 Markdown 里,把运行方拥有的契约放在磁盘上。整条链路是:预检 → wayfinder → 质询 → 规格(Gate 1)→ 工单(Gate 2)→ 落地(TDD)→ 基于证据的完成。
工作在进行中时,你能看到一张全景图:TTY 覆盖层用 Ctrl+G 呼出,还有一个工单数量提示,附带本地 Web 流程图的 URL,以及流程图本身。有一点值得注意,/ship 不会自动打开浏览器。
这个版本还顺手改了两处
一是质询访谈之前加了 wayfinder,用来明确目的地和待定决策,和具体实现分开。二是收紧了父代理与子代理的协作:每一轮只有一个父代理拥有的工单,调查、落地、评审各自使用全新上下文的子代理,而问题、关卡和最终证明留在父代理手里。
安装方面,Node 版本要求 ≥22.19,通过 npm 安装 codsh-cli 和 codsh-bundle 的 0.23.0 版本。如果已经在匹配的 dsh 上,单独装 codsh-cli 就够了。API 密钥走 DEEPSEEK_API_KEY,也可以通过 ~/.dsh/settings.yaml 配置任何 OpenAI 兼容的路由。
它不适合所有场景
发布说明里有一句挺实在的提醒:如果只是很小的改动,普通对话或者 ⇧Tab 计划模式就够了。/ship 是多阶段的,会刻意多烧 token。
至于从 Claude Code 或 Codex 迁过来的人,官方给的说法是"不同的框架,不同的产品"。用环境变量把 Claude Code 指向 DeepSeek 是能跑通的,但那是另一条路,codsh 走的是 dsh 上的原生路径。哪些能对应、哪些还缺,官方指向了 issue #64 让人自己对照。
官方还放了一个画廊页面,里面每个项目都始于一句请求,配了真实截图和可运行结果。仓库、官网和画廊链接都在项目主页上。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.