bojansandhaus/tool-repair-skill-for-hermes-and-opencode
Hermes Tool Repair Skill - deterministic tool call repair for LLM agents. Catches common JSON formatting mistakes open models make and fixes them before dispatch, with repair notes that teach the model to self-correct.
Project Overview项目介绍
The repository is a harness-layer tool-call JSON repair utility titled "Tool Repair Skill for Hermes and OpenCode", distributed under the MIT license with a Python 3.10+ core that depends only on the standard library. It sits between the model's raw output and the tool executor, deterministically rewriting five recurring JSON mistakes that open-weight models such as DeepSeek, GLM, Qwen, and Kimi produce — including null field residue, stringified arrays, empty objects where arrays belong, bare strings, and Markdown autolinks leaking into file paths. Installation is handled by copy commands: the OpenCode TypeScript adapter drops into ~/.config/opencode/plugins/, the Claude Code bash-plus-jq hooks land in .claude/hooks/ with two entries in claude.json, and Hermes users toggle agent.tool_repair: true in ~/.hermes/config.yaml after copying tool_repair.py into the agent directory.
The intended workflow is to invoke repair_function_args() immediately after parsing the model's JSON but before dispatch, so only validator-flagged paths are touched and legitimate JSON-shaped payloads stay untouched. The function returns a tuple of repaired arguments plus a list of repair notes, which the harness pipes back to the model as a side-channel, enabling self-correction and breaking the 50+ wasted retry loop described in the README. It targets engineers running local agents on open-weight models who care about tool-call stability and telemetry, and it is particularly relevant for Hermes and OpenCode users, while the Claude Code adapter ships in a limited mode that only blocks and observes rather than mutating arguments.
Dependencies are minimal: the core library needs nothing beyond Python's standard library, the OpenCode adapter is a plain TypeScript plugin, and the Claude Code adapter only requires bash and jq. The README's "How to Install" section also documents a pure-library path — copying references/tool_repair.py anywhere and importing it — so any Python-based agent framework can adopt the fixes without touching the bundled adapters. First-run caveats include the limited Claude Code mode and the need to enable the Hermes config flag; the roadmap still lists schema-aware repairs, per-model telemetry dashboards, and model-specific profiles for DeepSeek, GLM, and Kimi as forthcoming work rather than shipped features.
该仓库是一个 harness 层的工具调用 JSON 修复工具,名为 "Tool Repair Skill for Hermes and OpenCode",以 MIT 协议发布,核心使用 Python 3.10+ 实现,无第三方依赖。它在模型输出与工具执行器之间插入修复逻辑,针对 DeepSeek、GLM、Qwen、Kimi 等开源模型常见的五类 JSON 错误(如 null 字段残留、字符串化数组、空对象、Bare 字符串、Markdown 自动链接)做确定性改写。仓库自带三类适配器:内置 Hermes Python 修改、OpenCode TypeScript 插件(监听 tool.execute.before 钩子)、Claude Code 的 Bash + jq PreToolUse/PostToolUse Hook,可直接拷贝到对应目录启用,README 也说明了将其作为纯 Python 库导入任意代理框架的方法。
典型用法是让代理在解析模型原始 JSON 后立即调用 repair_function_args(),仅对校验器标记的路径下手,避免污染合法数据。返回的 repaired_args 与 repair_notes 一并送回模型,形成可自纠错的侧通道,从而避免 50+ 次无谓重试。目标用户为使用开源模型构建本地代理、关心工具调用稳定性与可观测性的工程师,尤其适合 Hermes Agent、OpenCode 用户;Claude Code 适配器功能受限,仅提供阻断与遥测,不改写参数。
依赖方面,核心库仅依赖标准库;OpenCode 适配器需要将 adapters/opencode/* 拷贝至 ~/.config/opencode/plugins/;Claude Code 适配器需将 .sh 脚本放入 .claude/hooks/ 并在 claude.json 中注册两条 Hook。首次启用需在 Hermes 的 ~/.hermes/config.yaml 中设置 agent.tool_repair: true。仓库路线图还包括 Schema 感知修复、按模型遥测面板与 DeepSeek/GLM/Kimi 的专属修复配置。
请帮我安装这个 DSH 插件。安装前先完成【兼容性检查 + 安全性检查】,检查通过再动手。
插件:tool-repair-skill-for-hermes-and-opencode(bojansandhaus/tool-repair-skill-for-hermes-and-opencode)
仓库:https://github.com/bojansandhaus/tool-repair-skill-for-hermes-and-opencode
本站详情页:https://www.yhbd.top/plugins/bojansandhaus-tool-repair-skill-for-hermes-and-opencode/
本站登记:类型 plugin · 归类 原生 DSH 插件 · 许可证未声明 · ⭐ 4 · 最近提交 2026-06-27 · 主语言 Python
按下面顺序执行,每步先把结论告诉我,再进入下一步:
【1 兼容性检查】
① 我这边:DSH 版本、Node 版本、操作系统、当前 profile(web / desktop)。
② 读它的 README、package.json、插件 manifest,列出它要求的 DSH 版本 / Node 版本 / 操作系统 / 外部依赖 / 需要另外先装的运行时。
③ 逐条比对,结论只写「满足 / 不满足 / 未知」三种;不满足的给出可行替代方案。
④ 检查是否和我已装的插件冲突:命令名重复、skill / tool 重名、端口占用、重复注册的 MCP server。
【2 安全性检查】
① 仓库可信度:和上面「本站登记」是否一致;star / fork 数、创建时间、最近提交,是否归档或长期停更。
② 安装脚本:逐行看 package.json 的 preinstall / install / postinstall,以及 install.sh、setup.ps1 之类脚本。出现 curl|bash、下载后直接执行、混淆代码、访问与插件功能无关的域名,立刻停下来告诉我,不要继续装。
③ 依赖:列出新增依赖,标出无人维护、或与知名包拼写近似的可疑包(typosquatting)。
④ 权限与副作用:它会读写哪些目录、访问哪些域名、需要哪些 DSH 权限(filesystem / network / shell / clipboard 等),以及怎么卸载和回滚。
⑤ 如果它要求 sudo / 管理员权限,或权限明显超出功能所需,先停下来问我。
【3 安装】
上面两步没有「不满足」和「高危项」时才执行;用官方推荐方式安装,不要自行提权。
【4 汇报】
用表格输出:检查项 / 结论 / 依据 / 是否需要我决策。拿不准的一律写「未知」并说明要我怎么确认——不要猜,也不要替我决定。
Send this message to DSH in your current session: it verifies compatibility and security first (answering met / not met / unknown item by item) and only installs once everything checks out — it will stop and ask you if it finds a high-risk item. The box scrolls; the copy is the full prompt. CLI install commands may not be accurate across systems, so DSH is the safer route.把上面这条消息直接发给当前会话里的 DSH:它会先核对兼容性与安全性(逐条给「满足 / 不满足 / 未知」),确认没问题再安装,有高危项会停下来问你。框内可滚动,复制到的是完整提示词;安装命令不一定准确,发给 DSH 更稳。
- No license declared - all rights reserved by default; ask the author before commercial use or redistribution未声明开源许可证 —— 默认「保留所有权利」,商用或再分发前先问作者
- Only 4 stars - very few users, little community feedback星标只有 4,几乎没人在用,遇到问题缺少社区反馈
DSH walks through these 9 checksDSH 会逐条核对这 9 项
Compatibility兼容性
- DSH, Node, OS and profile requirementsDSH 版本 / Node 版本 / 操作系统 / profile 是否满足要求
- External dependencies and runtimes (Electron / Python / Docker, ...)外部依赖与运行时(Electron / Python / Docker 等)是否齐备
- Conflicts with installed plugins: command names, skill / tool names, ports, duplicate MCP registration与已装插件是否冲突:命令名、skill / tool 重名、端口占用、重复 MCP 注册
Security安全性
- Repo matches the facts registered here; archived or abandoned?仓库是否与页面登记一致,是否归档或长期停更
- Safety of preinstall / install / postinstall and install.sh / setup.ps1preinstall / install / postinstall 与 install.sh、setup.ps1 是否安全
- curl|bash, download-then-execute, obfuscation, unrelated domains → stop immediatelycurl|bash、下载即执行、混淆代码、无关域名 → 立刻停止
- Typosquatting or unmaintained packages among the new dependencies新增依赖里有没有 typosquatting 或无人维护的包
- Requested permissions vs. what the feature actually needs申请了哪些权限、是否超出功能所需(filesystem / network / shell / clipboard)
- Any sudo / admin requirement, plus uninstall and rollback是否要求 sudo / 管理员权限,以及卸载与回滚方式
Anything uncertain must be marked unknown with a note on how to confirm it. This site's signal screen is a static snapshot, not a security audit.拿不准的必须标「未知」并说明要我怎么确认。本站的信号筛查是静态快照,不能替代安全审计。
Or use CLI install (for developers)或使用命令行安装(适合开发者)
CLI Install命令行安装
dsh plugin --profile web add github:bojansandhaus/tool-repair-skill-for-hermes-and-opencode
把 bojansandhaus/tool-repair-skill-for-hermes-and-opencode 加入你的 DSH 配置(web profile)即可启用。
READMEREADME
Tool Repair Skill for Hermes and OpenCode
A harness-level fix for LLM tool calling. Catches the common JSON formatting mistakes open models make and fixes them deterministically before the tool executor ever sees them. Ships with adapters for three agent frameworks:
| Adapter | Language | Repair strategy |
|---|---|---|
| Hermes (built-in) | Python | Mutate args pre-dispatch + repair notes via side-channel |
| OpenCode (plugin) | TypeScript | tool.execute.before hook, mutates args directly |
| Claude Code (hooks) | Bash + jq | PreToolUse block + PostToolUse telemetry (limited, no arg mutation) |
Based on the approach that made DeepSeek V4 Pro outperform Opus 4.7 on tool calling (see CommandCode's post and YouTube deep dive).
The Problem
Open models (DeepSeek, GLM, Qwen, Kimi) make the same tiny JSON mistakes in tool calls over and over. Each mistake triggers a validation error. The model retries with the same bad format. The session degrades through 50+ wasted retry cycles. The model never learns because the error messages are opaque.
These mistakes are not random. They are a small finite set of patterns caused by the model's training distribution leaking through the tool boundary.
Harness vs Model
Most people frame this as a model problem: "DeepSeek is bad at tool calling, wait for the next version." That is wrong. It is a harness problem. The harness sits between the model and the tool executor. It decides what to do with the model's output: reject it and waste tokens retrying, or fix it silently and move on. A harness that repairs deterministically turns a bad-at-tool-calling model into a functional one in about 200 lines of code.
The model did not change. The harness got more forgiving in exactly the places it needed to be.
Showing the opening section of the README — the full document lives in the repository以上为 README 开头摘要,完整文档在仓库内 · View the full README on GitHub →在 GitHub 查看完整 README →
titanwings/distilly
YuJunZhiXue/dsh-purge
Clearailhc/clearai-dsh
yejiming/MuseAI
superdesigndev/superdesign-skill
Miaotofu01/Study-Mate