dsh-anchored-standard
一个实验性DeepSeek Harness agent预设:先用最小对齐提示(Minimal-aligned prompt)引导首次模型请求,使用Minimal预设的真实工具模式(bash + str_replace_editor),且不自动注入工作区/技能上下文;在首次持久工具调用或回复后,再暴露完整的Standard工具目录。
这是社区项目,并非官方DeepSeek预设,与DeepSeek无关联,亦未获其背书。
为什么
DeepSeek V4 Pro对API可见的工具目录有强条件依赖。在Project2评估中,Standard和PTC分别得91分和92分,而官方Minimal预设得99分和96分。但永久停留在Minimal意味着放弃Standard预设更广泛的工具集。
Anchored Standard将初始轨迹选择与后续工具使用分离:
- 保留Minimal完整的系统提示词。
- 在首次模型请求时暴露Minimal预设的真实工具模式——持久的
bash+str_replace_editor,与官方Minimal组合字节一致。Issue #11测得,在适配器默认maxTokens(256000)下,这种精确的模式锚定5/5运行全部成功,零let me首行;而所有standard系列模式(pwsh/read、仅pwsh、沙箱bash/read)11/11落入standard类行为。工具模式的身份是256000下首次请求的决定性变量,因此无需输出上限。 - 在首次请求时同样剥离自动注入的上下文——AGENTS.md/CLAUDE.md工作区摘要和可用技能提醒,真正的Minimal从不挂载这些(
tool-bootstrap行中的suppressedContextSources)。用户主动的技能手势不会被过滤,且从第二次请求起两种注入恢复正常。 - 当会话记录首个持久提升信号——
tool/call或首个assistant/message,以先到者为准——后,暴露所有Standard工具。请求#1始终看到引导目录;请求#2始终看到完整目录,因此纯文本首次回复无法再将会话困在引导阶段。(tool-bootstrap行中的promoteOn选择触发条件:默认either、tool-call或assistant-message。) - 从持久会话事件推导阶段,使恢复和重载时保持该状态。
引导目录在所有平台相同:Minimal对(bash/str_replace_editor)。预设的shell是持久PTY bash(沙箱Standard bash行被禁用——两者都将bash名字注册到同一层,工具注册表拒绝重复;Windows本来就没有沙箱bash)。pwsh在Windows上保留在提升后的目录中。
结果
Project2 V4.1b,DeepSeek V4 Pro,reasoningEffort=max,Windows原生:
| 运行 | 能力 | 推理块 | we | let's | let me | 可见回复 |
|---|---|---|---|---|---|---|
| r1 | 98 | 193 | 179 | 88 | 1 | 1 |
| r2 | 99 | 162 | 165 | 98 | 0 | 1 |
两次运行恰好发出两个工具目录快照:两个工具的Minimal引导,随后是25个工具的Standard目录。该结果是此任务的可复现证据,而非声称跨模型或工作负载的普遍改进。
跨版本证据(issue #11,Windows + 官方端点,仅首次请求轨迹):在适配器默认maxTokens下,Minimal工具模式锚定5/5(We need modify…首行,we 1.4,let me 0.0),而pwsh/read、仅pwsh、沙箱bash/read全部产生standard类首行11/11——工具模式而非输出上限是256000下首次请求的决定性变量。
完整方法论和聚合证据见xiaobright/modeltest。
兼容性
开发和测试环境:
- DeepSeek Harness
0.1.0-rc.5 - 仓库提交
47f9438 - Windows上的Node.js 24
在0.1.0-rc.5源码检出中,bootstrapMaxTokens能到达实际首次请求(第一个request/header记录上限,adapterDefaults保持为空),因为llm.prepareCall仅在提议配置无maxTokens时才物化默认maxTokens。issue #11中观察到一个预构建配置文件包(CLI启动器报告0.1.0-rc.6)用adapterDefaults.maxTokens覆盖了提议的上限;在那里上限是无操作。因此默认组合仅依赖Minimal工具模式(在适配器默认下无需上限即可锚定),并将bootstrapMaxTokens作为标准模式引导的可选配置。
DeepSeek Harness目前是开发者预览版,明确允许破坏性变更。此预设是Standard组合的完整快照,使用新版本前请审查上游变更。
安装
克隆此仓库,然后将整个preset目录复制到用户预设根目录下,ID为anchored-standard。
PowerShell:
$target = Join-Path $env:USERPROFILE '.dsh\.agent-presets\anchored-standard'
if (Test-Path -LiteralPath $target) { throw "Preset already exists: $target" }
New-Item -ItemType Directory -Force -Path (Split-Path -Parent $target) | Out-Null
Copy-Item -Recurse -LiteralPath '.\preset' -Destination $target
Linux/macOS:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/anchored-standard"
cp -R preset "$dsh_home/.agent-presets/anchored-standard"
完全重启DeepSeek Harness,创建空白会话,选择Anchored Standard(实验性)。不要从不同预设切换活动会话。
验证
导出会话JSONL并检查request/header事件。复现清单(issue #11要求前两项,因为两者都是决定锚定的变量):
- 首次请求
config.maxTokens值:未设置bootstrapMaxTokens(默认)时,第一个header记录适配器默认值(例如使用adapterDefaults.maxTokens: true时为256000);设置上限后记录上限(例如无maxTokens适配器默认时的1024)。 - 首次请求工具模式来源:第一个header的
tools数组必须恰好为["bash", "str_replace_editor"]——官方Minimal预设的真实模式,而非Standard的pwsh/read。 - 首次请求的消息不应包含AGENTS.md/CLAUDE.md摘要,也不应包含可用技能提醒——只有用户消息和最小人格系统提示;
- 在首次工具调用或首次助手回复之后,下一个变更的header应包含完整的Standard目录;
- 后续请求应保持该完整目录并恢复标准上下文注入。
运行本地零依赖测试:
npm test
重要行为
- 默认
promoteOn: either下,会话在首次持久tool/call或首次assistant/message后提升,以先到者为准——请求#1看到引导目录,之后所有请求看到完整目录。因此纯文本首次回复仍会在请求#2提升;设置promoteOn: tool-call可恢复原始行为,即首次响应若未进行工具调用则永不提升。 - 工具执行失败仍会提升会话,因为持久
tool/call已存在。 - 首次请求的输出预算默认不设上限:Minimal工具模式在适配器默认maxTokens下即可锚定,因此
bootstrapMaxTokens为可选。设置后,首次请求被限流,提升后显式移除上限(下一个请求的种子提议会携带前一个header的maxTokens)。 - Minimal对在提升后保持挂载,因此提升后的目录是Standard目录加
bash(持久)和str_replace_editor——Standard沙箱bash行被禁用,转而使用持久shell(相同工具名,同一层;见“为什么”)。read/write/edit工具保持沙箱文件系统,而str_replace_editor使用预设的本地文件系统。 - 引导工具缺失时降级为完整目录并发出一次性警告,而不是使请求失败,因此组合漂移不会毁掉会话;无效的
promoteOn值则在预设挂载时即失败。 - 提升决策按会话在进程生命周期内记忆化;持久事件扫描每个进程每会话运行一次。
- 会话未提升时,前置步骤过滤器会剥离
source.kind包含在suppressedContextSources(默认:agent-instructions和skill-catalog,即Standard在Minimal之上添加的两个自动注入)中的消息。将列表设为[]可禁用上下文过滤;添加其他source.kind值可抑制更多。过滤失败时降级为保留所有消息,而不是吞掉上下文。 - 工具目录只变更一次,因此请求前缀缓存连续性也在第一个和第二个模型请求之间变更一次。
- 此预设与shell访问具有相同的信任级别。安装前请审查其文件。
- 插件不执行网络请求,也不添加遥测。
Zero-Anchored Standard(实验性)
一种额外测试模式,不改变上述Anchored Standard逻辑。它使用相同的最小对齐系统提示,但不在首次请求时暴露两个工具,而是注入一个固定的零工具锚定回合:
- 当用户发送第一条消息时,
anchor-turn插件在其前面预先添加一条固定用户消息——“本轮为测试。工具尚未开放;所有工具将在下一轮开放。” - 首个真实模型请求携带零工具,因此会话的首个推理链遵循零注入“we”轨迹。
- 该锚定回复变为持久后,暴露完整Standard目录,真实消息在所有工具就绪后继续。
锚定在第一条消息时——而非会话创建时——保持空白会话预设切换器可用。子代理始终看到完整目录。
实测行为(opencode-go,DeepSeek V4 Pro,reasoningEffort=max):锚定请求稳定为“we”风格,零let me;后续携带工具的请求回到“The user wants…/Let me”风格。此模式用于对比零工具首轮是否值得额外一次模型调用——而非声称工具轮保持“we”风格。
作为独立预设ID安装:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/zero-anchored-standard"
cp -R zero-anchored-standard "$dsh_home/.agent-presets/zero-anchored-standard"
重启DeepSeek Harness,创建空白会话,选择Zero-Anchored Standard(实验性),然后发送第一条消息。
Whoami Standard(实验性)
零工具锚定思想的易用性变体:首轮是自然的自我介绍提示,而非固定测试消息;用户的真实首条消息推迟到下一轮。无论用户先输入什么,会话恰好预热一轮,处理真实消息时一切就绪:
- 当用户发送第一条消息时,
whoami-turn插件在其前面预先添加一条固定用户消息——“你是谁”——放入next-turn收件箱队列。 - dsh每轮只认领恰好一条
next-turn消息,因此首个模型请求在空工具面上只看到锚定消息,并以自我介绍回复;该回复即提升信号。 - 真实消息在下一轮被认领,此时提升后的常驻目录(shell、
str_replace_editor、发现工具)已解锁——更重的Standard工具通过一次dev_tool_search即可使用。
锚定文本可通过whoami-turn行的text选项配置(默认“你是谁”)。在第一条消息时——而非会话创建时——锚定保持空白会话预设切换器可用;子代理始终看到完整目录。代价是每个会话多一次模型调用:锚定轮总是执行,即使第一条消息很紧急。
该预设通过../preset/引用与preset/目录共享插件模块,因此也需安装该目录(见上文“安装”部分)。
作为独立预设ID安装:
dsh_home="${DSH_HOME:-$HOME/.dsh}"
mkdir -p "$dsh_home/.agent-presets"
test ! -e "$dsh_home/.agent-presets/whoami-standard"
cp -R whoami-standard "$dsh_home/.agent-presets/whoami-standard"
重启DeepSeek Harness,创建空白会话,选择Whoami Standard(实验性),然后发送第一条消息——自我介绍轮先运行,你的消息将在下一轮获得完整工具支持并得到回答。
官方生态系统指南
DeepSeek目前要求社区插件作者在自己的GitHub项目中发布插件,并添加dsh-plugin仓库主题以便被发现。官方仓库目前不接受外部拉取请求,也不强制要求社区仓库模板。见官方CONTRIBUTING.md。
许可证
MIT。preset/agent.cordis.yml衍生自DeepSeek Harness Standard预设;原始DeepSeek版权和MIT声明保留在NOTICE中。