dsh-ark
No description
- Stars
- 0
- Language
- TypeScript
- Created
- Aug 27, 2026
- Updated
- Aug 27, 2026
Introduction
dsh-ark
DeepSeek Harness 的 Ark 模式:三个冻结的 minimal wire 预设
(bash + str_replace_editor),所有扩展能力都通过 dsh-ark CLI 侧信道交付。
| 预设 | 对应模式 | CLI 目录 |
|---|---|---|
ark | standard | standard |
ark-code | code (PTC) | code |
ark-cordis | cordis | cordis |
项目目的
本项目是针对 deepseek-v4-pro-0813 对 deepseek-harness minimal 预设的
系统提示词与 tool schema 存在过拟合问题而设计的 workaround。
具体来说,deepseek-v4-pro-0813 在 minimal 预设的固定提示词和极简工具面上
表现最为稳定;一旦切换到 standard / code / cordis 等模式的原生 persona 与更大、
更复杂的 tool schema,模型行为容易变得不稳定或不符合预期。dsh-ark 因此将 Ark
系列预设统一冻结在 minimal 的 wire 表面(bash + str_replace_editor),不让
standard / code / cordis 的扩展工具直接进入模型请求,而是通过 dsh-ark CLI
侧信道按需代理执行,从而同时获得:
- minimal 预设的稳定性;
- standard / code / cordis 的完整能力目录。
原理
核心思路是“冻结模型可见面,扩展能力走 CLI 侧信道”:
- 模型请求中只保留 minimal 风格的系统提示词,以及
bash、str_replace_editor两个工具,避免大而杂的 tool schema 干扰模型。 - 其它模式的能力(指令、技能、工具、MCP、宿主桥等)由
dsh-arkCLI 封装, 通过 bash 侧信道按需调用。 - CLI 根据当前会话的
DSH_ARK_MODE(standard/code/cordis)加载 对应目录,把原本需要以 tool schema 注入模型的能力,改为模型用一条 bash 命令触发、CLI 代理执行的模式。
使用方法
-
安装插件:
dsh plugin --profile web add dsh-ark dsh web -
在客户端中选择 Ark-* 预设:
Ark:standard 目录Ark-Code:code 目录Ark-Cordis:cordis 目录
-
会话启动后,按需在 bash 中运行
dsh-ark <domain> <action>即可使用对应 模式的扩展能力,例如:dsh-ark tools list dsh-ark mcp list dsh-ark bridge status
安装
dsh plugin --profile web add dsh-ark
dsh web
安装后,dsh --profile web --dump-config 必须输出
agent-presets.default: ark,且预设名册中必须包含 ark、ark-code 与
ark-cordis。宿主插件会在启动时为每个预设写一个模式专属的
$DSH_HOME/.agent-presets/<mode>/shellrc.sh —— 即官方 harness-home 用户预设根目录 ——
持久 bash 通过 --rcfile 加载该文件,因此无需配置 PATH 即可访问
dsh-ark guide 及其它侧信道命令。会话开始时,ark 宿主插件会在第一个请求中注入
一个合成的 "dsh-ark guide 已运行并返回了该输出" turn;当 dsh compaction 把可见的
guide 结果遮蔽之后,它会再次注入同一对(见 docs/dsh-ark-design.md 4.6)。
只有当注入的输出不再可见时,模型才需要自己运行 dsh-ark guide。
shellrc 会导出 DSH_ARK_MODE(用于选择 CLI 目录)和 DSH_ARK_WORKSPACE
(把每条 dsh-ark 命令固定到 shell 启动时捕获的会话工作区根目录,而不是持久 shell
可变的 pwd)。
本地测试发布
要在本地 dsh 的 web 与 dsh-tui profile 上就地验证全新构建的检出,而不经过真正的
发布流程,运行:
pnpm run test:publish
它会执行 pnpm pack(触发 prepack 并重建 lib/),把结果复制到
dist/dsh-ark-current.tgz(已被 gitignore),重写
$DSH_HOME/profiles/{web,dsh-tui}/package.json 中 dependencies.dsh-ark 的条目,
使其指向该绝对 file: 路径,然后调用 dsh plugin add,让 pnpm 把新 tarball 重新
解压进每个 profile 的 node_modules/dsh-ark/。传 pnpm run test:publish:dry 可以
只打包而不改动 profile 清单。要回滚到 registry 已发布的版本,运行
dsh plugin --profile web remove dsh-ark && dsh plugin --profile dsh-tui remove dsh-ark。
CLI
dsh-ark [--json] [--no-color] <domain> <action> [options]
guide 打印当前模式与会话工作区对应的 Ark 会话指引(会话开始时运行一次)
instructions 展示/列出 AGENTS.md + CLAUDE.md 指令链
skills 从项目/用户根目录列出/展示技能
tools 列出/查看可用性/调用工具,外加每个工具的 --help 结构
mcp 配置合并 + stdio/streamable-http MCP 客户端
run-code 仅 v1 协议;执行返回 UNAVAILABLE_IN_V1
bridge 经过认证的宿主桥:status/list/schema/call
version 包版本
示例:
dsh-ark --help
dsh-ark guide # 报告固定的会话工作区与当前 ark 模式
dsh-ark instructions show
dsh-ark skills list # ark-cordis 会话会附带打包的 cordis 技能
dsh-ark tools list # 依据已安装的预设列出 standard/code/cordis 目录
dsh-ark tools call read '{"file_path":"/tmp/x"}'
dsh-ark tools grep --help
dsh-ark mcp list
dsh-ark mcp call memory search '{"query":"TODO"}'
dsh-ark bridge status
dsh-ark bridge call job_list '{}'
dsh-ark bridge call subagent '{"prompt":"..."}' --wait
没有 --preset 选项。目录由已安装的 ark 预设选择,并通过生成的 shellrc 导出为
DSH_ARK_MODE。
运行时模型
- 运行时从不导入固定的
@deepseek-ai/dsh-*registry 版本。CLI 从DSH_ARK_DSH_PACKAGES_DIR或$DSH_HOME/profiles/node_modules解析用户安装的 dsh 包依赖图,并在使用前探测结构化的能力契约。 - 活动目录由生成的 shellrc 中的
DSH_ARK_MODE(standard、code或cordis) 选择;直接调用 CLI 时默认standard。没有状态文件、不改变环境、无持久化。 - 宿主插件在最终提示组装边界强制冻结的 wire 表面:对 ark 会话,宿主/全局工具
schema(例如 dsh-tui 的
ask_user_question)会从请求中移除并被记录日志。 - Phase 2 在
$DSH_HOME/ark/{bridge.sock,bridge.token}(均为 0600)下增加了一个 经过认证的 Unix-socket 宿主桥。dsh-ark bridge通过活跃会话 agent 与宿主审批/ 沙箱栈发现并执行完整的模式目录。其它宿主插件注入的工具保持在冻结的模型 wire 之外, 再以source: proxy条目动态出现在dsh-ark bridge list/dsh-ark tools list中;它们与内置工具一样通过同一ark.executeTool宿主管线执行。长时委派返回宿主 拥有的bridgeJobId以便轮询,且 CLI 从不 daemon 化。 - 桥状态限定在
$DSH_HOME内:每个 dsh 实例拥有自己的 socket/token/jobs,每个请求 都绑定到生成 shell 所继承的DSH_SESSION_ID与DSH_ARK_MODE对应的活跃会话。 完整机制及其信任边界见docs/phase2/session-binding.md。 - MCP 配置:全局
$DSH_HOME/ark/mcp.yml、项目<projectRoot>/.dsh/ark-mcp.yml、显式的DSH_ARK_MCP_CONFIG覆盖。 - 退出码:
0成功,2用法错误,3未找到,4不可用,5上游/IO/执行失败,124超时。
可追溯性
实现由 OpenSpec 跟踪:
- 活动 spec:
openspec/specs/dsh-ark/spec.md - 活动 change:
openspec/changes/release-prep-preset-layout - 已归档 v1 change:
openspec/changes/archive/2026-08-16-implement-dsh-ark-v1 - 已归档 wire-guard change:
openspec/changes/archive/2026-08-16-implement-ark-wire-guard - 已归档 phase 2 change:
openspec/changes/archive/2026-08-24-implement-dsh-ark-phase2 - 已归档 upstream-compat change:
openspec/changes/archive/2026-08-24-harden-dsh-ark-upstream-compat - 已归档 dynamic-tool-proxy change:
openspec/changes/archive/2026-08-24-implement-dynamic-tool-proxy
运行 openspec validate --all --strict 校验记录。
开发
pnpm install
pnpm run sync-upstream
pnpm run check:upstream-contracts
pnpm run build
pnpm test
pnpm test:bwrap # 未带 bwrap userns 的本地 runner 默认跳过
pnpm pack --dry-run
兼容性矩阵:docs/compatibility.md。
维护指南:docs/dsh-ark-maintenance.md。
发布清单:docs/release-checklist.md。
桥实例/会话绑定报告:docs/phase2/session-binding.md。
不变量与完整实现计划见 docs/dsh-ark-design.md。
致谢
感谢 xiaobright/dsh-anchored-standard 等相关研究,为本项目的思路提供了重要参考。