news 2026/10/17 7:59:49

以 Hermes Agent 为执行运行时:Ouroboros 的安装、配置与权限模型实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
以 Hermes Agent 为执行运行时:Ouroboros 的安装、配置与权限模型实战指南
  • AI Agent
  • 人工智能
  • 代码智能体
  • Agent 编排
  • AI 评测
  • CLI
  • 开发工具

【免费下载链接】ouroboros

Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode, Copilot, Kiro and more.

项目地址:https://gitcode.com/gh_mirrors/ouroboros13/ouroboros
点击查看免费下载

本指南讲解如何在 Hermes Agent 作为执行运行时的前提下使用 Ouroboros:从环境检查、ouroboros setup --runtime hermes的一键集成,到 MCP 服务器注册、技能调度、会话恢复与权限模式翻译的底层原理。读完本文,你将掌握把 Hermes CLI 接入 Ouroboros 工作流引擎的完整配置路径,并能依据源码理解--yolo --accept-hooks、quiet 模式输出解析和 Synapse 传递边界等关键机制。

本文以 docs/runtime-guides/hermes.ko.md(韩文版)及其英文原文 docs/runtime-guides/hermes.md 为主体骨架,结合仓库内运行时实现源码展开讲解。

一、集成总览:Ouroboros 如何"驱动"Hermes

Ouroboros(Agent OS)采用"Interview-gated、staged evaluation、budgeted evolution loop"的工作流引擎,其核心特征是把执行动作委托给外部 Agent CLI 运行时,自身负责编排、评估与进化。Hermes Agent 正是受支持的 14 个运行时之一(Claude Code、Codex CLI、Gemini CLI、OpenCode、Copilot、Kiro 等之外的另一成员)。

从架构上看,Hermes 承担"编排器运行时后端"(orchestrator runtime backend)的角色:Ouroboros 通过 shell 调用 Hermes CLI 子进程来执行任务,将 Hermes 包装为符合AgentRuntime协议的适配器。仓库中 src/ouroboros/orchestrator/hermes_runtime.py 定义了HermesCliRuntime类,其注释明确写着:"Orchestrator runtime that executes tasks via the Hermes CLI"——这是整个集成的最核心证据。

集成后的职责划分非常清晰:

  • Ouroboros 负责:Seed 工作流执行、访谈(interview)与歧义评分等仅用 LLM 的流程、技能调度(skill dispatch)、评估与进化循环;
  • Hermes 负责:作为 Agent 运行时执行对话式任务,通过 MCP 暴露 Ouroboros 工具;
  • llm.backend保持独立:切换运行时不会改写 LLM 后端配置。

二、前置要求:Hermes CLI 版本检查

开始集成前,需要先确认本机已安装 Hermes CLI0.8.0 或更高版本:

# 安装确认 hermes version

这条命令会输出 Hermes CLI 的版本号。若命令不存在,需先安装 Hermes CLI 再继续。Ouroboros 运行时要求版本下限 0.8.0,是因为会话管理、quiet 模式输出、--resume恢复等集成能力都依赖该版本及以上的 CLI 行为(详见后文"技术细节"一节)。

三、Setup:三步完成运行时集成

3.1 安装 MCP profile 并选择 Hermes 运行时

使用包隔离启动器(package-isolated launcher)安装 MCP profile,然后执行 runtime 选择命令:

pipx install 'ouroboros-ai[mcp]' # 或: uv tool install 'ouroboros-ai[mcp]' ouroboros setup --runtime hermes

两个安装命令等价,任选其一。[mcp]extra 是必须的——它提供 MCP 服务器相关依赖。

3.2 为什么必须依赖uvx或pipx

Setup 强制要求本机存在uvx(来自 uv)或pipx,原因在于MCP 2 服务器的注册必须经由隔离进程完成:

  • 宿主环境(例如已装有 Claude SDK 的环境)可能混入MCP 1.x 依赖,与 Ouroboros 需要的 MCP 2 协议不兼容;
  • 宿主环境也可能根本没有安装 MCP extra。

因此ouroboros setup --runtime hermes绝不回退到直接执行ouroboros二进制或python -m的方式注册 MCP 服务器——那样会污染依赖。若uvx与pipx均不存在,setup 会在不修改已保存的 Ouroboros 运行时配置的前提下,以非零退出码终止。

源码佐证位于 src/ouroboros/cli/commands/setup.py 的_register_hermes_mcp_server:当_detect_mcp_entry()返回None时,直接输出错误提示"Install uv/uvx or pipx, then re-run setup"并返回False,从而跳过对~/.hermes/config.yaml的写入。

3.3 Setup 完成的三个动作

执行ouroboros setup --runtime hermes后,setup 流程会依次完成三件事:

  1. 配置~/.ouroboros/config.yaml:将orchestrator.runtime_backend设为hermes,并记录 Hermes CLI 路径;
  2. 安装 Ouroboros 技能到~/.hermes/skills/autonomous-ai-agents/ouroboros/:将打包的SKILL.md技能发布到 Hermes 技能目录;
  3. 在~/.hermes/config.yaml中注册 Ouroboros MCP 服务器。

对应源码逻辑位于 src/ouroboros/cli/commands/setup.py 的_setup_hermes函数:它先解析现有配置(不存在时用fresh_config_data()创建默认值),写入orch["runtime_backend"] = "hermes"与orch["hermes_cli_path"] = hermes_path,再调用_install_hermes_artifacts()(内部走 src/ouroboros/hermes/artifacts.py 的install_hermes_skills)安装技能,最后通过_commit_runtime_activation原子化注册 MCP 服务器。注意技能目标路径若已是指向别处的符号链接,setup 会直接拒绝激活(refused symlinked skill target),且整个流程带 rollback 机制,失败时恢复原技能快照。

3.4 两种启动器对应的 MCP 注册条目

使用uvx时,生成的 Hermes 宿主配置条目如下:

mcp_servers: ouroboros: command: uvx args: [--isolated, --python, ">=3.12", --from, "ouroboros-ai[mcp]", ouroboros, mcp, serve] enabled: true

--isolated确保在隔离环境中解析;--python ">=3.12"指定 Python 版本下限;--from "ouroboros-ai[mcp]"指定来源包;最终执行的命令是ouroboros mcp serve(启动 MCP 服务器)。

只有pipx时,注册条目变为:

mcp_servers: ouroboros: command: pipx args: [run, --spec, "ouroboros-ai[mcp]", ouroboros, mcp, serve] enabled: true

两者都保证 Ouroboros 的 MCP 2 服务器在独立进程中运行,与宿主 Python 环境隔离。注册逻辑同样见 src/ouroboros/cli/commands/setup.py 的_register_hermes_mcp_server:它读取(或新建)~/.hermes/config.yaml,在mcp_servers映射中写入ouroboros条目并以原子写方式保存。

四、使用方式:工作流执行与技能脚本化

4.1 运行时后端与 LLM 后端的解耦

配置完成后,Ouroboros 会以 Hermes 作为编排器运行时后端,但不会改写llm.backend。这一点在 setup 源码中有显式注释:"Set runtime to Hermes. Do not rewrite llm.backend until Hermes also supports the LLM-only adapter contract used elsewhere in Ouroboros."(见 src/ouroboros/cli/commands/setup.py_setup_hermes)。

因此,访谈(interview)、歧义评分(ambiguity scoring)等仅依赖 LLM 的流程,仍会继续使用用户已配置的 LLM 适配器;Hermes 后端只在需要执行 Agent 任务的场景生效。仓库中确实存在独立的 Hermes LLM 适配器 src/ouroboros/providers/hermes_cli_adapter.py(HermesCliLLMAdapter,基于hermes chat -Q做单轮补全),说明 Hermes 既可以作运行时后端,也可以在 LLM 层使用。

4.2 执行工作流

ouroboros run seed.yaml --runtime hermes

--runtime hermes显式指定本次执行使用 Hermes 运行时。Seed 文件(如seed.yaml)描述工作流的访谈、验收标准与执行目标,Ouroboros 会将其交给 Hermes 会话执行。

4.3 在 Hermes 会话中用ooo前缀调用技能

在 Hermes 会话内,可以在命令前加ooo前缀来触发 Ouroboros 技能:

hermes chat -q "ooo interview 'Build a new CLI tool'" hermes chat -q "ooo run seed.yaml"

第一条命令以静默(quiet)方式发起 Ouroboros 访谈技能;第二条直接执行 Seed 工作流。

4.4 共享ooo技能调度路由器

Hermes 与 Codex CLI、OpenCode 共用无状态的ouroboros.router解析器,用于精确调度ooo与/ouroboros:两种命令形态。调度管道是确定性的五步流程(详见 docs/guides/ooo-skill-dispatch-router.md):

  1. 解析精确的ooo <skill>与/ouroboros:<skill>命令前缀;
  2. 根据打包的SKILL.md文件解析技能名或别名;
  3. 加载并校验mcp_tool/mcp_argsfrontmatter;
  4. 替换mcp_args中支持的模板($1与$CWD);
  5. 返回与运行时无关的调度元数据。

该路由器无状态、不做日志记录,不组装AgentMessage、不调用 MCP handler、不从自由文本推断入口。新增或修改命令只需改动对应SKILL.md的 frontmatter,无需修改 Hermes 解析器分支或 MCP 服务器特例;日志、消息组装与 MCP 调用都由运行时内部处理。仓库中技能示例见 skills/ooo/SKILL.md,frontmatter 中包含name: ooo与描述,MCP 侧则只暴露普通工具(如ouroboros_execute_seed、ouroboros_pm_interview、ouroboros_evaluate),对ooo语法与频道标识完全无感知。

五、配置:自定义 Hermes CLI 路径

可在~/.ouroboros/config.yaml中自定义 Hermes CLI 路径:

orchestrator: runtime_backend: hermes hermes_cli_path: ~/.local/bin/hermes
  • runtime_backend: hermes:声明运行时后端为 Hermes;
  • hermes_cli_path: ~/.local/bin/hermes:指定 Hermes 可执行文件位置。

hermes_cli_path支持~展开(~/.local/bin/hermes)、绝对路径(/path/to/hermes)以及相对路径。配置模型的定义位于 src/ouroboros/config/models.py,字段注释明确说明其支持形式;运行时在 src/ouroboros/orchestrator/hermes_runtime.py 的_resolve_cli_path中按"显式参数 →get_hermes_cli_path()配置 →shutil.which("hermes")在 PATH 中查找 → 默认名hermes"的优先级解析最终路径,并对其做expanduser()展开。

六、技术细节:会话、权限与输出解析

6.1 会话管理:quiet 模式session_id与--resume

Ouroboros 通过Hermes CLI 在 quiet 模式(-Q)下输出的session_id追踪 Hermes 会话,并用该 ID 配合--resume标志恢复对话。

源码中会话 ID 的格式被精确约束为正则表达式(见 src/ouroboros/orchestrator/hermes_runtime.py):

^session_id:\s+(?P<session_id>\d{8}_\d{6}_[a-f0-9]+)\s*$

即形如YYYYMMDD_HHMMSS_xxxxxx(8 位日期_6 位时间_十六进制后缀)。execute_task在构造 CLI 参数时,若存在 resume handle(RuntimeHandle或其旧式resume_session_id),会追加--resume <session_id>,使多轮编排流程恢复之前的会话而非新开一个(源码注释:"multi-turn orchestrator flows resume the prior session instead of starting a fresh one")。每个成功的AgentMessage结果都会携带新的RuntimeHandle(含native_session_id),供下一轮继续使用。

6.2 权限模式:bypassPermissions的翻译

无论是开启新的 Hermes 回合,还是恢复已有回合,Seed 执行都会强制启用bypassPermissions。运行时将该契约翻译为 Hermes 原生标志--yolo --accept-hooks:

# 源码示意(HermesCliRuntime.execute_task 内) if self._permission_mode.strip().lower() in { "bypasspermissions", "bypass_permissions", "bypass", "yolo", }: args.extend(["--yolo", "--accept-hooks"])

这样做的目的是:危险命令审批(dangerous-command approvals)与首次出现的 shell 钩子审批(previously unseen shell-hook approvals)不会阻塞无头(headless)运行——这正是自动化批处理场景所要求的。反之,权限模式在运行时能力表中被标记为TRANSLATED(翻译型支持),见HermesCliRuntime.capabilities的声明。

6.3 输出解析:剥离推理块与横幅

Ouroboros 解析 Hermes CLI 输出,提取最终响应与会话元数据;在程序化(quiet)执行模式下,自动剥离推理块(reasoning blocks)与横幅(banners)。

_parse_quiet_output的实现逻辑(src/ouroboros/orchestrator/hermes_runtime.py):

  • 逐行扫描输出,用 6.1 节的正则捕获首个session_id:行,其余行作为用户可见内容;
  • _strip_reasoning_prelude识别┌─ Reasoning开头的推理头部,跳过│/├/└构成的框线行,直至遇到真实内容;
  • 识别 Hermes 横幅行(╭/┌开头、含Hermes、╮/┐结尾),直接丢弃。

值得注意的兼容性细节:Hermes 0.11 将可恢复的会话标记写入stderr,而旧版本写入 stdout。因此运行时对两个流都做一次_parse_quiet_output,取任意一个解析出的session_id(stdout_session_id or stderr_session_id),既兼容新旧版本,又不会把成功的 stderr 诊断混入面向用户的内容。

6.4 流超时与子进程守护(源码细节)

HermesCliRuntime还内置了流读取超时守护:启动输出超时默认 60 秒,stdout 空闲超时默认 300 秒,均可通过环境变量OUROBOROS_HERMES_STARTUP_TIMEOUT_SECONDS与OUROBOROS_HERMES_IDLE_TIMEOUT_SECONDS覆盖(优先级:显式参数 → 环境变量 → 类默认值;0/负值表示禁用守卫,交由生成 watchdog 负责活性)。由于 Hermes 在 quiet 模式下模型工作时可能合法地不产生 stdout,该空闲超时设计保持保守。此外,子进程环境会通过build_child_env构建,剥离 Ouroboros 标记变量并限制最大嵌套深度为 5,防止递归调用失控(Hermes 与 codex/copilot/kiro 的差异是:不剥离CLAUDE_CODE相关键,这一点在源码中被显式注释保留)。

6.5 技能拦截路径(可选深度)

execute_task在唤起 Hermes 之前,会先通过共享路由器解析技能调度:若命中ooo//ouroboros:命令,则直接在本地调用 Ouroboros MCP handler(ouroboros_execute_seed、ouroboros_interview、ouroboros_evaluate等),将拦截结果作为AgentMessage流返回,不进入 Hermes 子进程;未命中的提示词才走完整 Hermes 执行路径。访谈技能还支持跨回合保持:_build_tool_arguments会把ouroboros_interview的session_id写入RuntimeHandle.metadata,续回合时丢弃initial_context并注入session_id与answer,从而在多轮访谈中保留上下文。

七、Active Conductor 与 Synapse:诚实的边界声明

对已安装的 Hermes 进行实际探测(probe)后,Ouroboros 发现:会话标记(session marker)虽然输出了,但无法从 Hermes 的会话存储中重新打开(resume)该会话——即 CLI 层面能打印 session ID,存储层却无法恢复。

基于这一实证结果,Ouroboros不宣称 Hermes 支持 Synapse 传递(Synapse delivery),也不会仅凭"CLI 标志存在"就认定会话连续性成立。具体表现:

  • inform、after_turn、检查点redirect、硬replace等传递请求全部被拒绝(fail closed),而不是假装成功;
  • 普通 Hermes 执行与观察者(observer)进度报告照常工作,不受影响;
  • 主宿主(main host)会用用户对话所使用的语言,明确说明该传递方式不受支持,避免误导。

这一设计体现了 Ouroboros 在集成边界上的严谨性:宁可明确拒绝不成立的传递能力,也不牺牲会话一致性与可追溯性。

八、已知能力边界(从源码确认)

结合 src/ouroboros/orchestrator/hermes_runtime.py 的capabilities声明,可以整理出 Hermes 后端的参数支持情况:

能力参数支持级别说明
system_promptTRANSLATEDHermes 将系统提示与工具指引组装进用户消息(## System Instructions/## Tooling Guidance)
tool_restrictionTRANSLATED工具集通过提示词内联传递
empty_tool_restrictionIGNORED不产生原生空工具约束
permission_modeTRANSLATED翻译为--yolo --accept-hooks
reasoning_effortIGNOREDhermes chat无逐调用 effort 参数,其config.yaml的reasoning_effort是全局而非按调用路由,无法按 AC 确定性分发

此外,若通过 Hermes 后端使用 LLM-only 补全(src/ouroboros/providers/hermes_cli_adapter.py),注意其不支持allowed_tools工具信封:quiet 输出不暴露工具调用事件,无法做事后信封审计,配置allowed_tools会被直接拒绝并建议传None。模型名会经安全正则^[A-Za-z0-9_./:@-]+$校验,不合规则回退到默认模型。

九、总结与快速上手清单

把 Hermes 接入 Ouroboros 的完整路径可概括为:

  1. 安装 Hermes CLI(≥ 0.8.0)并确认hermes version可用;
  2. 通过pipx或uv tool安装ouroboros-ai[mcp],确保uvx或pipx存在;
  3. 执行ouroboros setup --runtime hermes,完成三件事:写~/.ouroboros/config.yaml、安装技能到~/.hermes/skills/autonomous-ai-agents/ouroboros/、在~/.hermes/config.yaml注册 MCP 服务器;
  4. 用ouroboros run seed.yaml --runtime hermes执行工作流,或在 Hermes 会话中用ooo//ouroboros:前缀触发技能;
  5. 需要时在~/.ouroboros/config.yaml的orchestrator段自定义hermes_cli_path。

值得记住的关键事实:llm.backend不会被运行时切换改写;Seed 执行强制bypassPermissions(翻译为--yolo --accept-hooks);quiet 模式的session_id是会话恢复的唯一凭据;Hermes 不支持 Synapse 传递,相关请求会被诚实拒绝。这套边界清晰的集成模型,使 Hermes 既能作为独立的 Agent 执行环境,又能无缝接入 Ouroboros 的访谈门控、分阶段评估与预算化进化循环。

  • AI Agent
  • 人工智能
  • 代码智能体
  • Agent 编排
  • AI 评测
  • CLI
  • 开发工具

【免费下载链接】ouroboros

Agent OS: the agent gets smarter on its own. We just hold the line: Interview-gated, staged evaluation, budgeted evolution loop. MCP server, 14 runtimes: Claude Code, Codex CLI, Gemini CLI, OpenCode, Copilot, Kiro and more.

项目地址:https://gitcode.com/gh_mirrors/ouroboros13/ouroboros
点击查看免费下载

相关推荐

上一篇:Lap性能调优指南:10个技巧让超大照片库浏览更流畅
下一篇:从想法到可发布的产品:Auto-Company 三周期收敛规则与显式发布门禁机制详解

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 6:22:18

python编写带界面的软件,需要安装哪些插件

1 详细需求&#xff1a; Windows系统&#xff0c;需要打包exe&#xff0c;界面不复杂。 2 方案 针对你 Windows 平台 打包 exe 界面不复杂的需求&#xff0c;最稳妥、省心的方案是 Tkinter PyInstaller。如果希望界面稍微现代一点&#xff0c;可以用 CustomTkinter&#xff…

作者头像 李华
网站建设 2026/10/16 11:01:34

编译原理实验三:语义分析从符号表到类型检查的完整实现与避坑指南

简介&#xff1a;这份资源是编译原理课程实验三的语义分析实现包&#xff0c;面向正在学习编译原理、需要动手完成编译器前端实验的高校学生与自学者。它聚焦词法分析与语法分析之后的语义检查环节&#xff0c;帮助理解类型检查、作用域解析、常量折叠等核心概念在Java中的落地…

作者头像 李华
网站建设 2026/10/13 20:12:07

OpenCV多目标追踪实战:KCF算法原理、代码实现与避坑指南

简介&#xff1a;这份资源面向计算机视觉初学者与需要完成课程大作业的学生&#xff0c;围绕OpenCV与Python实现多目标追踪&#xff0c;重点解决视频序列中多个运动目标的连续识别与定位问题&#xff0c;并支持鼠标交互自定义选取追踪对象。包内共6个文件&#xff0c;以2个py脚…

作者头像 李华
网站建设 2026/10/17 19:16:10

WAIC 2026 刚散场,书生S2-397B 就靠“追平万亿参数“刷屏了

WAIC 2026 刚散场&#xff0c;书生S2-397B 就靠"追平万亿参数"刷屏了 【免费下载链接】Intern-S2-397B 项目地址: https://ai.gitcode.com/InternLM/Intern-S2-397B WAIC 2026 的聚光灯还落在周伯文主旨演讲里那句"AI 科学元认知时刻"上&#xff0…

作者头像 李华
网站建设 2026/10/15 3:38:13

分治算法全解析:从归并排序到动态规划优化实战

1. 分治思想&#xff1a;先拆到底&#xff0c;再逐层缝合1.1 用生活场景理解分治先聊一个面试官最爱问的底层问题&#xff1a;为什么分治能优化时间复杂度&#xff1f;我习惯用一个整理书桌的类比来解释——你有一堆混杂的笔记要按日期排序&#xff0c;如果直接全局排序&#x…

作者头像 李华