精选
为什么选中它
待人工精选——以下事实来自源码仓库。
它能做什么
Tool search & slimming for DeepSeek Harness: Hermes-style progressive disclosure — search, describe, and call long-tail tools on demand
适合谁
想用 DSH 获得这项能力的用户;装前建议先看源码和文档。
风险提示
- 没有明确许可证,使用前确认授权。
Tool search & slimming for DeepSeek Harness: Hermes-style progressive disclosure — search, describe, and call long-tail tools on demand
待人工精选——以下事实来自源码仓库。
Tool search & slimming for DeepSeek Harness: Hermes-style progressive disclosure — search, describe, and call long-tail tools on demand
想用 DSH 获得这项能力的用户;装前建议先看源码和文档。
dsh plugin --profile web add github:Letter2025/dsh-tool-search 作者没有声明支持的平台。
tool_search, tool_describe, tool_call replace the deferred schemas. - Tiered disclosure — the visible listing shrinks automatically as the catalog grows. - Conversational setup — the bundled tool-slimmer-setup skill groups your tools by talking to you, and guides configuring the rerank model. - User or project config — groups/matcher live in ~/.dsh/dsh-tool-search.json (global) or <workspace>/.dsh/dsh-tool-search.json (per project), your choice. ## Install sh dsh plugin --profile web add dsh-tool-search ## How it works Inspired by Hermes Agent's Tool Search. On every turn, the plugin's system-prompt/assemble listener computes the tier and replaces the model-visible tools: | Tier | Condition | Model sees | | --- | --- | --- | | 0 | Small catalog / nothing deferrable | Every tool, bridge absent | | 1 | Grouped manifest fits the budget | Bridge + ## group name/description listing | | 2 | Only names fit | Bridge + names-only listing | | 3 | Even names overflow | Bridge + one line per group (name: count) | Budget = min(thresholdPct% × contextWindow, listingMaxTokens), recomputed every turn. The manifest rides a runtime context, so it survives complete-prompt composition. Dynamic injection: searching, describing, or calling a deferred tool warms it into the session's visible set (LRU-bounded by maxWarmTools), so its full schema is injected into the context for later turns — the model pulls tools into context on demand instead of keeping everything. When tool_call runs, the plugin executes the real tool by name through ctx.tools.execute, so approvals, guards, and session events all reference the underlying tool — never the bridge. tool_search ranks with the configured rerank matcher and falls back to keyword matching (exact name > name tokens > description tokens) when no matcher is configured or the rerank call fails. ## Setup (conversational) Ask your agent: > 帮我配置 dsh-tool-search 的工具分组 The tool-slimmer-setup skill will read the catalog, propose groups, confirm with you, ask whether the config should be global or per-project, and guide you through configuring the rerank matcher (required for tool_search and preload). ## Configuration Static tuning lives in your profile cordis.patch.yml (restart to change): yaml - id: tool-search config: enabled: auto # auto | on | off thresholdPct: 5 # listing budget as % of context window listingMaxTokens: 4000 configScope: auto # user | project | auto (project file wins when present) core: [todo_write] # extra always-eager tools maxWarmTools: 8 # LRU cap for dynamically injected tools Tool groups, the matcher, and preload live in the runtime file (~/.dsh/dsh-tool-search.json for user scope): json { "version": 1, "scope": "user", "groups": [ { "name": "git", "tools": ["git_status", "git_diff"] }, { "name": "mcp-github", "prefixes": ["mcp_github_"] } ], "matcher": { "endpoint": "https://dashscope.aliyuncs.com/compatible-mode/v1/rerank", "apiKey": "sk-...", "model": "qwen3-reranker", "topN": 20 }, "preload": { "enabled": false, "topK": 5 }, "core": ["read_file", "write_file"] } - groups: exact tool names and/or name prefixes; a tool belongs to the first matching group. - matcher: an OpenAI-compatible /v1/rerank endpoint — the only matcher type. tool_search returns setup guidance until one is configured. - preload: optional; when enabled (with a matcher), the session's first turn semantically preloads the top-K matching tools into the eager set. - The file is watched by mtime and hot-reloads; changes take effect on the next turn. ## Bridge tools | Tool | Purpose | | --- | --- | | tool_search(query, limit?) | Search the deferred catalog (rerank, keyword fallback) and return ranked {name, description, group} matches; matches are injected into the visible context | | tool_describe(name) | Load the full schema of one deferred tool; the tool is injected into the visible context | | tool_call(name, arguments) | Invoke a deferred tool by real name; approvals/guards/events use the real tool; the tool is injected into the visible context | ## Design notes & pitfalls - Slimming only rewrites the model-visible surface (system-prompt/assemble); the registry stays complete, so deferred tools remain executable. - The bridge, the two setup tools, and skill are always eager and never defer themselves. - Keyword matching is only a fallback: rerank is the primary ranking; without a matcher or on rerank failure, search degrades to keyword matching (exact name > name tokens > description tokens) and never errors. - See DESIGN.md for the full architecture. ## Links - GitHub - npm - Design doc ## License MIT不看 Star,人工一条条挑的。
把 DSH 的 settings.yaml 做成可视化看板:所有已注册的 settings namespace——包括官方界面从未覆盖的第三方插件配置——都渲染成可编辑表单。项目还早,但方向很对:告别手改 YAML。
给 DSH 的 DIY 轨迹可视化:把 agent 的计划与执行画成图,不用翻原始日志也能看清它在干嘛。项目还早,但补上了「一眼看懂 agent 在做什么」这个真实缺口。
从 Claude Code / Codex 把活派给 DSH:在宿主内拉起带分级预设的 DSH agent 会话,看原生子代理进度,还能借它的多模态桥给纯文本的 DSH 补上视觉和生图。编排型插件,把 DSH 变成其他编码 agent 的后端。