bojansandhaus/tool-repair-skill-for-hermes-and-opencode

Plugin插件 Native原生 ⭐ 4 Prompts & Skills提示词与技能

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 的专属修复配置。

Pre-install check安装前体检Compatibility · Security兼容性 · 安全性 2 warnings2 项注意
  • 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

License: MIT Python 3.10+ GitHub

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 →

← 上一个 Prev dsh-track 下一个 Next dsh-calculator →