需启用HERMES_SKILLS_AUTO_PATCH=true并复现失败调用触发自动补丁;若未生效,可手动调用skill_manage精准修补、基于错误日志反向生成补丁或回滚版本。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在运行 Hermes Agent 时遭遇技能执行失败,且希望系统自动识别错误、分析日志上下文并生成语义对齐的修复补丁,则需激活其内置的 Skill 补丁机制。该机制依赖结构化异常日志、预设修复策略与安全写入流程,可在不中断服务的前提下完成流程级自我修复。以下是具体操作路径:
一、启用并验证自动补丁触发机制
此方法通过环境变量控制全局补丁开关,并复现失败调用以触发检测逻辑,确保补丁流程已就绪。系统仅在满足连续失败、参数校验失败或工具异常退出等预设条件时启动 patch 动作。
1、检查环境变量是否启用:echo $HERMES_SKILLS_AUTO_PATCH
2、若输出为空或为 false,则执行 export HERMES_SKILLS_AUTO_PATCH=true 并写入 shell 配置文件。
3、复现一次已知失败技能调用:hermes skills run my_http_fetch --url https://invalid.example
4、观察终端输出中是否出现 [PATCH] Detected failure in skill 'my_http_fetch', initiating patch 字样。
5、确认补丁已写入:ls -la ~/.hermes/skills/my_http_fetch/SKILL.md | awk '{print $6,$7,$8}'
二、手动调用 skill_manage 执行字段级精准修补
当自动触发未生效或需干预修复内容时,可跳过失败检测阶段,直接使用 skill_manage 工具定向修改 YAML 定义或步骤描述,支持 required 字段重置、steps 流程重写及陷阱说明补充。
1、进入目标技能根目录:cd ~/.hermes/skills/my_http_fetch
2、重写执行步骤:skill_manage --action patch --field steps --value "1、发起 GET 请求;2、校验 HTTP 状态码;3、解析 JSON 响应体"
3、修正必填参数列表:skill_manage --action patch --field required --value '["url", "timeout"]'
4、验证补丁后结构合法性:hermes skills validate my_http_fetch
5、检查 SKILL.md 中 steps 和 required 字段是否已同步更新。
三、基于失败日志反向构造补丁指令
该路径适用于报错信息明确指向缺失字段、超时阈值不足或响应格式不匹配等场景。Agent 会解析 KeyError、ConnectionTimeout、JSONDecodeError 等异常类型,匹配错误模式库,提取关键缺失要素并生成语义一致的补丁内容。
1、定位最近一次失败会话的 JSON 日志:ls -t ~/.hermes/sessions/*.json | head -n 1
2、提取错误堆栈中的异常类型与关键字段:jq -r '.error | select(test("KeyError|Timeout|JSONDecode"))' $(ls -t ~/.hermes/sessions/*.json | head -n 1)
3、若返回 KeyError: 'timeout',则构造补丁:skill_manage --action patch --field required --value '["url", "timeout"]'
4、若返回 ConnectionTimeout,追加超时参数定义:skill_manage --action patch --field parameters --value '{"timeout": {"type": "integer", "default": 30}}'
5、确认新参数已注入 SKILL.md 的 parameters 区块:timeout 字段出现在 parameters 下且 default 值为 30。
四、验证补丁执行效果与安全性
补丁写入后必须执行原子性校验与运行时验证,防止语法错误或逻辑冲突导致技能不可用。验证涵盖 YAML 解析、字段存在性、步骤可执行性及沙箱内调用结果。
1、强制重新加载技能定义:hermes skills reload my_http_fetch
2、执行带 timeout 参数的成功调用:hermes skills run my_http_fetch --url https://httpbin.org/get --timeout 30
3、检查输出中是否包含 status: success 且 response.body 不为空。
4、查看补丁安全扫描日志:grep -i "patch.*sanitized\|whitelist" ~/.hermes/logs/agent.log | tail -n 1
5、确认输出含 [SECURITY] Patch applied and validated against whitelist。











