- 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.
本指南讲解如何在 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 流程会依次完成三件事:
- 配置
~/.ouroboros/config.yaml:将orchestrator.runtime_backend设为hermes,并记录 Hermes CLI 路径; - 安装 Ouroboros 技能到
~/.hermes/skills/autonomous-ai-agents/ouroboros/:将打包的SKILL.md技能发布到 Hermes 技能目录; - 在
~/.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):
- 解析精确的
ooo <skill>与/ouroboros:<skill>命令前缀; - 根据打包的
SKILL.md文件解析技能名或别名; - 加载并校验
mcp_tool/mcp_argsfrontmatter; - 替换
mcp_args中支持的模板($1与$CWD); - 返回与运行时无关的调度元数据。
该路由器无状态、不做日志记录,不组装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/hermesruntime_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_prompt | TRANSLATED | Hermes 将系统提示与工具指引组装进用户消息(## System Instructions/## Tooling Guidance) |
tool_restriction | TRANSLATED | 工具集通过提示词内联传递 |
empty_tool_restriction | IGNORED | 不产生原生空工具约束 |
permission_mode | TRANSLATED | 翻译为--yolo --accept-hooks |
reasoning_effort | IGNORED | hermes 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 的完整路径可概括为:
- 安装 Hermes CLI(≥ 0.8.0)并确认
hermes version可用; - 通过
pipx或uv tool安装ouroboros-ai[mcp],确保uvx或pipx存在; - 执行
ouroboros setup --runtime hermes,完成三件事:写~/.ouroboros/config.yaml、安装技能到~/.hermes/skills/autonomous-ai-agents/ouroboros/、在~/.hermes/config.yaml注册 MCP 服务器; - 用
ouroboros run seed.yaml --runtime hermes执行工作流,或在 Hermes 会话中用ooo//ouroboros:前缀触发技能; - 需要时在
~/.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.
相关推荐
PostHog 摄入警告 `cannot_merge_already_identified` 全解析:为什么 identify/alias 被静默拒绝合并,以及如何修复
PostHog 摄入警告 cannot_merge_already_identified 全解析:为什么 identify/alias 被静默拒绝合并,以及如何
AI Agent人工智能代码智能体Agent 编排AI 评测CLI开发工具Ouroboros Grok Build CLI 运行时接入指南:以 xAI grok 为执行后端的无头编排实战
Ouroboros Grok Build CLI 运行时接入指南:以 xAI grok 为执行后端的无头编排实战 导读 本文讲解如何在 Ouroboros Ag
AI Agent人工智能代码智能体Agent 编排AI 评测CLI开发工具OneUptime Runbook 配置与安全指南:Agent 执行模型、超时上限与权限体系全解析
OneUptime Runbook 配置与安全指南:Agent 执行模型、超时上限与权限体系全解析 导读 本文以 OneUptime 开源仓库中的 Runboo
可观测性后端运维前端云原生微服务AI Agent
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考