← 全部课程
Hermes 本机审计evidence map
打开报告目录
本机配置审计 · 2026-10-04

Hermes Agent
提示词与操作权限

一份针对当前实际运行 gateway 的完整来源图谱:提示词从哪里来、何时生效、如何叠加,以及授权调用者最终能做什么。

运行版本
Hermes Agent 0.19.0
活动 Profile
默认 · ~/.hermes
模型通道
gpt-5.6-luna / Codex
权限判断
权限面:高
00

结论先行

01

当前运行的不是 /Applications/Hermes.app,而是 launchd 启动的 Hermes Agent 0.19.0 源码安装。代码位于 /Users/kaiqismac/.hermes/hermes-agent,运行配置根是 /Users/kaiqismac/.hermes。

02

最主要的人为提示词来源是 SOUL.md、MEMORY.md、USER.md 与 ~/.hermes/skills/;部分技能通过符号链接实际来自 ~/.agents/skills/。

03

Hermes 内置操作指示主要来自 agent/prompt_builder.py、agent/system_prompt.py 与各工具 schema/实现。

04

当前权限相当宽:approvals.mode: off,本机 shell、文件、Python、浏览器与屏幕操作均可用;无 Hermes 出站网络防火墙;computer-use 当前没有 gateway 人工确认回调;Discord 管理操作没有 Hermes 确认层。

05

仍不是完全无限制:terminal 保留内置灾难性命令硬阻断;进程不是 root;macOS TCC、文件系统权限与外部平台 API 权限仍生效;Feishu、Discord、WhatsApp 调用者均有配对或白名单限制。

06

本次只进行读取和诊断,没有修改 Hermes 配置、提示词、技能、记忆、配对记录,也没有重启服务或执行配置迁移。

01

实际运行入口

先确认哪个安装和哪个进程真正拥有提示词解释权,避免把 GUI、备份或旧文件误判为生效配置。

项目当前状态位置
Gatewaylaunchd 常驻、自动重启/Users/kaiqismac/Library/LaunchAgents/ai.hermes.gateway.plist:5
启动命令Python 执行 hermes_cli.main gateway run --replaceai.hermes.gateway.plist:8
HERMES_HOME明确指定为 /Users/kaiqismac/.hermesai.hermes.gateway.plist:27
进程工作目录/Users/kaiqismac/.hermesai.hermes.gateway.plist:18
Agent 逻辑工作目录/Users/kaiqismacgateway 将 terminal.cwd: . 解析为用户目录
CLI 包装器清除 PYTHONPATH/PYTHONHOME 后启动 venv 内 Hermes/Users/kaiqismac/.local/bin/hermes:1
实际版本Hermes Agent 0.19.0,Git commit 41a07f5b8451f88a8b8b5adfc0cfdc2ada0a1f90/Users/kaiqismac/.hermes/hermes-agent
模型gpt-5.6-luna / openai-codex/Users/kaiqismac/.hermes/config.yaml:1
API 传输Codex Responses API;系统提示词放入 instructionsagent/transports/codex.py:107

HERMES_HOME 解析优先级

进程内 context-local override
  → HERMES_HOME
  → 默认 ~/.hermes

对应实现:/Users/kaiqismac/.hermes/hermes-agent/hermes_constants.py:106。

02

所有提示词和指示来源

“提示词”不仅是一个文本文件。身份、记忆、技能索引、平台上下文、工具 schema 与会话历史共同构成模型实际看到的指示。

来源状态作用
/Users/kaiqismac/.hermes/SOUL.md生效替换内置默认身份提示词
/Users/kaiqismac/.hermes/memories/MEMORY.md生效注入长期环境、偏好和稳定事实
/Users/kaiqismac/.hermes/memories/USER.md生效注入用户画像
/Users/kaiqismac/.hermes/skills/生效技能名称和描述进入技能索引;正文按需加载
/Users/kaiqismac/.agents/skills/间接生效经 ~/.hermes/skills 内符号链接进入 Hermes
agent/prompt_builder.py生效内置行为规则、工具规则、平台提示、Codex 指示
agent/system_prompt.py生效按 stable/context/volatile 三层组装系统提示词
/Users/kaiqismac/.hermes/state.db生效保存每个会话的完整系统提示词快照、历史消息和路由状态
gateway/session.py每轮生效生成当前平台、频道和会话动态上下文
工具 JSON schema生效作为独立于 system prompt 的工具使用说明发送给模型
Feishu / Discord / WhatsApp 平台提示生效提供消息格式和媒体发送方式

当前 SOUL.md 的实际内容

You are Hermes Agent, an intelligent AI assistant created by Nous Research. You are helpful, knowledgeable, and direct. You assist users with a wide range of tasks including answering questions, writing and editing code, analyzing information, creative work, and executing actions via your tools. You communicate clearly, admit uncertainty when appropriate, and prioritize being genuinely useful over being verbose unless otherwise directed below. Be targeted and efficient in your exploration and investigations.

加载函数:agent/prompt_builder.py:1888。该文件不存在时才回退到 DEFAULT_AGENT_IDENTITY:agent/prompt_builder.py:139。

当前确实进入系统提示词的内置规则

已精确确认存在

  • Hermes 自身帮助和配置说明
  • 任务完成、不要伪造结果
  • 可并行时并行调用工具
  • 长期记忆与历史会话搜索规则
  • 技能发现和加载规则
  • 中途 steering message 的解释
  • 工具调用强制规则
  • GPT/Codex 执行纪律
  • macOS computer-use 操作规则
  • 可用技能索引、profile 保护、环境和平台提示

当前 Feishu 提示词中不存在

  • Google 模型专用指示
  • 专门的 CODING_AGENT_GUIDANCE
  • Nous subscription 提示
  • session ID
  • 当前 personality
  • cwd 项目说明文件
  • 自定义全局或频道 system prompt
身份:agent/prompt_builder.py:139
Hermes 帮助:agent/prompt_builder.py:149
记忆 / 会话搜索 / 技能:agent/prompt_builder.py:160 / :183 / :189
工具 / 任务完成 / 并行:agent/prompt_builder.py:304 / :339 / :382
Codex / computer-use / 平台:agent/prompt_builder.py:403 / :625 / :666
完整组装:agent/system_prompt.py:152
03

系统提示词如何加载与叠加

基础提示词按会话缓存;动态会话信息和频道覆盖在每次 gateway 请求时另行拼接;工具 schema 又是一条独立指示通道。

Tier 01Stable

SOUL、内置规则、技能索引、环境、profile 与平台提示

Tier 02Context

调用方 system_message 与项目上下文;当前为空

Tier 03Volatile

MEMORY、USER、可选外部记忆与日期/模型元数据

Per turnGateway

Current Session Context、频道提示与 ephemeral override

ParallelTool schemas

工具说明、历史消息、工具结果与按需加载技能正文

A. 会话级缓存基础提示词

Stable 层

  1. SOUL.md,不存在时使用内置默认身份
  2. Hermes 帮助指示
  3. 任务完成、并行调用、工具使用规则
  4. memory/session-search/skills 等工具专用规则
  5. OpenAI/Codex 操作指示
  6. computer-use 指示
  7. 当前可用技能索引
  8. 环境提示
  9. 默认 profile 保护说明
  10. 平台提示

Context 层

  1. 调用方提供的 system_message
  2. 项目上下文文件

当前 gateway 的 Context 层为空。

Volatile 层

  1. MEMORY.md
  2. USER.md
  3. 可选外部 memory provider
  4. 日期、模型、provider、平台元数据

当前未配置外部 memory provider。

B. 每次 gateway 请求额外拼接

  1. 动态 Current Session Context
  2. 平台旧式 channel_prompts
  3. 匹配的 channel_overrides[*].system_prompt
  4. 若无频道 override,则使用全局 ephemeral prompt
全局 ephemeral:gateway/run.py:5546
频道提示选择:gateway/run.py:5581
动态会话上下文:gateway/session.py:450
每轮最终拼接:gateway/run.py:21937
当前状态

没有 agent.system_prompt、HERMES_EPHEMERAL_SYSTEM_PROMPT、channel_overrides、平台 channel_prompts 或 prefill 文件。

全局 ephemeral:
HERMES_EPHEMERAL_SYSTEM_PROMPT
  → config.yaml 中 agent.system_prompt

Prefill:
HERMES_PREFILL_MESSAGES_FILE
  → 顶层 prefill_messages_file
  → agent.prefill_messages_file

C. system prompt 之外仍会影响模型的内容

  • 工具 JSON schema
  • 已有会话消息历史
  • 工具调用和返回结果
  • 已加载的技能正文
  • gateway steering 消息
  • Feishu 评论、会议邀请等事件合成的用户提示

主要存储于 /Users/kaiqismac/.hermes/state.db 与 /Users/kaiqismac/.hermes/sessions/。

04

项目规则文件的查找顺序

项目上下文采取“首种匹配”策略,不会将所有生态的规则文件无条件叠加。

  1. .hermes.md 或 HERMES.md,从 cwd 向上查到 Git 根
  2. cwd 下的 AGENTS.md
  3. cwd 下的 CLAUDE.md
  4. cwd 下的 .cursorrules 与 .cursor/rules/*.mdc

实现位于 agent/prompt_builder.py:1946、:1965、:1983、:2016。

当前有效状态

Gateway 逻辑 cwd 是 /Users/kaiqismac,该位置不存在上述文件,所以当前没有项目规则被注入。SOUL.md 独立于这套优先级。

源码目录自身的 /Users/kaiqismac/.hermes/hermes-agent/AGENTS.md 不会因为 gateway 安装在那里就获得提示词权限。非 CLI gateway 路径专门阻止安装目录被误当作项目上下文。

05

技能提示词现状

文件树

  • 141 个普通 SKILL.md
  • 18 个分类 DESCRIPTION.md
  • 27 个符号链接

加载方式

基础系统提示词只包含名称、描述、适用平台/工具条件和加载信息。完整 SKILL.md 仅在预加载、查看或调用后进入上下文。

符号链接使 /Users/kaiqismac/.agents/skills/ 也成为真实有效的 Hermes 指示来源。

状态技能索引说明
当前打开的 Feishu 会话178 个条目会话已固定
当前文件系统 fresh prompt180 个条目新建/重建后生效

仅 fresh prompt 新增的两个技能:

  • agent-skill-symlink
  • egolite-native-skill-patcher

技能索引缓存

  • 文件:/Users/kaiqismac/.hermes/.skills_prompt_snapshot.json
  • 权限:0600
  • 大小约 101 KB
  • 当前 manifest 已与技能目录不匹配

因此已打开 Feishu 会话继续使用旧的 178 项索引;新会话或提示词重建会重新扫描并使用当前 180 项索引。Snapshot 是缓存,不是高于源文件的独立规则层。

06

会话提示词快照

每个平台会话都保留自己的组合结果。因此“磁盘上的最新提示词”和“当前打开会话实际使用的提示词”可能不同。

完整系统提示词保存在 /Users/kaiqismac/.hermes/state.db 的 sessions.system_prompt 字段中。

平台持久化提示词长度记忆/画像新鲜度
Feishu36,881 字符当前 MEMORY.md 和 USER.md 均匹配
WhatsApp37,164 字符USER.md 当前,MEMORY.md 为较旧版本
Discord36,555 字符USER.md 当前,MEMORY.md 为较旧版本

记忆、技能等文件更新后,通常要等新建会话、会话重置或上下文压缩触发系统提示词重建,才会替换已打开会话中的旧快照。不建议直接编辑 state.db。

07

操作权限审计

当前整体权限较高。最关键的事实不是“有哪些工具”,而是这些工具在什么审批、沙箱和操作系统边界下运行。

核心设置 · 高风险
approvals:
  mode: 'off'
  destructive_slash_confirm: false

位置:/Users/kaiqismac/.hermes/config.yaml:119。mode: off 在 Hermes 审批层中等价于 YOLO:普通危险 shell 命令与整段 execute_code 脚本不再询问人工确认。

审批链

解析失败 / 内置硬阻断
  → 用户 approvals.deny
  → mode=off、YOLO 等审批绕过
  → command_allowlist
  → 普通危险检测 / Tirith
  → 人工审批
  • approvals.deny=[]
  • command_allowlist=[]
  • approvals.mode=off
  • Tirith 虽配置为启用,但普通可恢复扫描位于 mode-off 快捷路径之后,实际被绕过;Tirith 还配置为 fail-open
硬阻断:tools/approval.py:503
用户 deny:tools/approval.py:525
审批绕过:tools/approval.py:2597
审批流程:tools/approval.py:2799
命令 guard:tools/approval.py:3335
Python guard:tools/approval.py:3807

Terminal

Backend 为 local,逻辑 cwd 是用户 home,persistent shell 已启用,不在 Docker/container 沙箱中。命令以当前 macOS 用户身份执行,无普通人工确认。

仍无条件阻断:递归删除根目录/系统目录/home、mkfs、向原始块设备 dd 或重定向、fork bomb、kill-all-processes、shutdown/reboot、init/telinit 0/6、systemctl poweroff/reboot、解析限制/异常命令,以及未配置 sudo 密码时通过 stdin 猜测或传入密码。

这些是 shell 字符串保护,不是完整 OS 沙箱;普通 Python 文件/进程 API 不一定经过相同模式检查。

高风险

文件读写

没有 project-root 限制;HERMES_WRITE_SAFE_ROOT 未设置。文件工具自身禁止写入 SSH、云服务/容器凭据、Hermes secret/auth、常见凭据文件、关键 /etc 文件、Hermes state.db、session、pairing 和 MCP token store。

实现:agent/file_safety.py:28、:64、safe-root :83、跨 profile :417。

源码明确说明这只是 defense in depth。Terminal 或普通 Python 仍可尝试访问当前 OS 用户有权限访问的路径。

高风险

execute_code

运行上限 300 秒、最多 50 个 Hermes RPC 工具调用、mode=project,使用当前 session cwd 和虚拟环境。

可嵌套调用 web_search、web_extract、read_file、write_file、search_files、patch、terminal。

子进程环境会清除大多数 API key/token,输出会 secret redaction;但 Python 自身仍可使用普通文件、subprocess 与网络 API。mode=project 不是 filesystem sandbox。

高风险

Computer Use

具备截屏、鼠标键盘输入和窗口/前台应用操作能力。cua-driver 位于 /Users/kaiqismac/.local/bin/cua-driver,版本 0.7.0;TCC identity com.trycua.driver 已获得 Accessibility 与 Screen Recording。

Schema 虽写明非 capture 操作需要批准,但 gateway 没有 CLI inner callback,Feishu plugin 没有审批 hook,也无其他安全审批 plugin。Callback 不存在时工具内部默认允许。

实际结果:当前 gateway 的非截屏 computer-use 操作可不经人工确认执行。实现:tools/computer_use/tool.py:341。这与 terminal 的 approvals.mode 是两个独立问题。

高风险

Browser / Web / Network

本地 headless 浏览器,不连接用户现有浏览器/CDP,不录制 session。导航、点击、输入、按键和 JS evaluate 均无人工确认;restrict_evaluate=false。

可读取 Hermes 浏览器 profile 的 cookie/storage/form 值,并发起页面同源请求。虽然 allow_private_urls=false,但私网 guard 面向非本地 backend;当前 local backend 可访问 localhost/LAN。

Hermes iron-proxy 出站防火墙禁用:binary 不存在、daemon 未运行、无代理配置和 CA。Terminal、Python、browser、web 均可直接出站。Web backend 是 brave-free,提取上限 15,000 字符。

高风险

Discord Admin

延迟工具 discord 可搜索成员、获取消息和创建公开 thread;discord_admin 可列服务器/频道/角色/成员/pin,pin/unpin/删除消息,以及添加/移除成员角色。

discord.server_actions 未配置,所以所有当前实现且 API 能力允许的 action 均暴露。Mutation 没有 Hermes 人工确认,直接请求 Discord REST API;最终由 bot token 权限和角色层级限制。

当前没有 ban、kick 或删除频道 action。实现:tools/discord_tool.py:569、:581、:617、:1073。

高风险

Memory / Skills

解析默认值为 memory.write_approval=false、skills.write_approval=false、skills.agent_created_guard=false。Memory 与 Skill 修改不经过额外 staged approval;schema 中“创建/删除前确认”只是软指示。

后台 review 可在若干轮后更新 memory/skill:Memory nudge 每 10 轮、Skill 每 15 轮、至少 6 轮后可 flush/review。Skill curator 每 7 天运行,30 天 stale、90 天 archive,可改变未来技能集合。

中风险

会话与隐私

session_search 可搜索本机过去 Hermes 会话,无额外审批。privacy.redact_pii=false,动态 session context 中的平台 user/chat ID 可能原样发送给模型 provider。

security.redact_secrets=true,secret 输出检测仍启用。本报告没有复现任何 ID、消息内容、credential 或 memory/profile 内容。

中风险

破坏性 Slash

destructive_slash_confirm=false。授权调用者执行 /new、/undo,以及 CLI 下的 /clear 时,没有额外确认。这主要破坏会话上下文,不等同于删除整个系统文件。

中风险
08

外部调用者权限

工具能力很强,但并非任何网络用户都能触发。平台入口目前都有限定,具体 ID 已从报告中移除。

平台当前准入方式
Feishu1 个已批准 pairing 用户,0 pending;静态 allowlist 为空,allow-all=false;群消息要求 @mention,gateway 仍检查授权
Discord1 个静态允许用户;allow-all 未开;无额外允许角色;bot 消息仅 mention 模式
WhatsAppself-chat 模式;1 个允许用户;allow-all 未开

Feishu 当前配对文件:

/Users/kaiqismac/.hermes/platforms/pairing/feishu-approved.json
/Users/kaiqismac/.hermes/platforms/pairing/feishu-pending.json
/Users/kaiqismac/.hermes/platforms/pairing/_rate_limits.json

这些文件权限均为 0600。旧目录 /Users/kaiqismac/.hermes/pairing/ 为空,不是当前配对存储位置。

09

当前未生效或仅条件生效

来源状态
config.yaml 内 personality 文本已定义多个,但最新平台会话未选择任何一个
cwd 项目规则文件当前 home cwd 下不存在
专门 coding-agent prompt当前 Feishu 提示词中不存在
agent.system_prompt未配置
HERMES_EPHEMERAL_SYSTEM_PROMPT未设置
channel_overrides未配置
平台 channel_prompts未配置
Prefill message 文件未配置
外部 memory provider未配置
Shell hooks / first-use allowlist没有 hook 配置;allowlist 文件不存在
MCP serversmcp_servers: {}
Cron prompts/jobs当前 0 个 job
管理员 /etc/hermes overlay不存在
HERMES_MANAGED_DIR未设置
Google 模型提示 / Nous subscription / session ID当前模型不使用 / 当前为空 / 未开启 --pass-session-id
源码目录 AGENTS.mdgateway 不授予提示词权限
旧配置备份loader 不自动读取
/Applications/Hermes.app版本 0.17.0;不是当前 0.19.0 gateway
/Applications/Hermes Studio.app独立产品,不是当前 agent
遗留 wake Python 文件parser 未注册,当前无效
10

配置合并优先级

内置 defaults
  ← ~/.hermes/config.yaml
  ← 管理员 managed config 按叶子键覆盖
  ← 部分 invocation / session / runtime override

管理员层位置:

HERMES_MANAGED_DIR 指定目录
  → /etc/hermes

实现:hermes_cli/managed_scope.py:52、hermes_cli/config.py:7867。本机不存在 managed 层,所以当前实际是内置 defaults 加用户 config.yaml。

长进程缓存行为

配置缓存以路径、mtime 和文件大小为键。运行中若后来写入错误 YAML,进程会保留最后一次成功解析的配置,而不是立即回退 defaults。因此短时间内磁盘文件和进程内配置可能不同;本次未发现该情况。

11

凭据和敏感文件

以下文件含认证或凭据状态。审计确认了位置和加载关系,但没有输出其值:

/Users/kaiqismac/.hermes/.env
/Users/kaiqismac/.hermes/auth.json
/Users/kaiqismac/.hermes/auth.lock

OpenAI Codex 当前已认证。这些文件与 config.yaml、memory/profile、pairing 文件大多为 mode 0600。

12

平台专用提示

Feishu

  • 标识 Feishu/Lark workspace
  • 支持 Markdown
  • MEDIA:/absolute/path 发送图片、音频和文件

Discord

  • 标识 Discord server/group chat
  • MEDIA: 路径和 Markdown 图片 URL 可转为附件

WhatsApp

  • 说明 Markdown 转换
  • 不建议表格
  • MEDIA: 或图片 URL 可发送原生附件

Feishu 事件提示

评论与会议邀请可合成事件专用用户输入,不属于全局 system prompt。

plugins/platforms/feishu/feishu_comment_rules.py
plugins/platforms/feishu/feishu_comment.py
plugins/platforms/feishu/feishu_meeting_invite.py
13

OS 层最后限制

Gateway 身份

  • 普通本地用户 uid 501
  • 属于 staff,并在本机 admin 等用户组
  • 不是 root
  • Hermes sudo integration 未启用
  • 未配置 SUDO_PASSWORD

Gateway Python TCC

  • Documents/Desktop/Downloads:允许
  • Accessibility:允许
  • Full Disk Access:拒绝
  • 直接 Screen Recording:拒绝

CuaDriver TCC

  • Accessibility:允许
  • Screen Recording:允许

含义

直接 Python 进程和 computer-use driver 的 TCC 能力不同。Computer-use 可以通过已授权的独立 driver 截屏和输入,但 gateway Python 本身没有 Full Disk Access 或直接 Screen Recording。

14

其他发现

Config schema 可迁移

当前 _config_version: 32,位置 /Users/kaiqismac/.hermes/config.yaml:136。Hermes 报告可迁移到 schema 33;现有配置仍正常加载,本次没有执行迁移。

Jarvis wake LaunchAgent 已失效

/Users/kaiqismac/Library/LaunchAgents/com.hermes.jarvis-wake.plist
/Users/kaiqismac/.hermes/bin/hermes-wake-jarvis.sh

它仍注册为自动启动/keepalive,但调用 hermes wake ...。Hermes 0.19.0 已不再注册 wake 子命令,因此 LaunchAgent 持续以状态 2 失败;相关语音唤醒提示和参数当前不生效。

远端隐藏提示无法从本机枚举

本机 Codex adapter 未发现第二份本地 developer/system prompt。Hermes 组合提示词进入 Responses API 的 instructions;内部 role=system 消息从 input list 移除以避免重复;转换器仅重放 user、assistant、tool 与 encrypted reasoning 项。

实现:agent/codex_responses_adapter.py:335。

审计边界

远端 https://chatgpt.com/backend-api/codex 仍可能由服务端附加不可见指示。这些指示不存储在本机,无法通过本地文件审计枚举。

15

最值得优先收紧的项目

以下只是后续建议。本次审计没有应用任何修改。

  1. 将 approvals.mode 从 off 改为 manual 或合适的 smart 模式。
  2. 为 gateway computer-use 增加真正的人工审批 callback 或 plugin policy。
  3. 限制或禁用 discord_admin 的消息删除与角色修改 action。
  4. 配置 HERMES_WRITE_SAFE_ROOT,或改用隔离 terminal/backend。
  5. 启用有效的出站网络策略。
  6. 将 privacy.redact_pii 打开。
  7. 恢复破坏性 slash command 的确认。
  8. 修复或删除失效的 Jarvis wake LaunchAgent。
审计状态

只读检查已完成。未修改 Hermes 配置、服务、提示词、技能、记忆或授权状态。

Hermes Agent 本机提示词与权限审计
依据活动进程、launchd、解析后配置、源码加载路径、会话数据库和平台状态交叉验证。所有凭据、平台身份与个人记忆内容均已隐去。

Read-only · Verified