字节笔记本
2026年6月21日
hermes教程-上下文文件
Hermes Agent 会自动发现并加载用于塑造其行为的上下文文件。其中一些文件是项目本地的,并从您的工作目录中发现。SOUL.md 现在是 Hermes 实例的全局文件,仅从 HERMES_HOME 加载。
支持的上下文文件
| 文件 | 用途 | 发现方式 |
|---|---|---|
| .hermes.md / HERMES.md | 项目指令(最高优先级) | 向上遍历至 git 根目录 |
| AGENTS.md | 项目指令、约定、架构 | 启动时的 CWD + 逐步发现子目录 |
| CLAUDE.md | Claude Code 上下文文件(也会被检测) | 启动时的 CWD + 逐步发现子目录 |
| SOUL.md | 此 Hermes 实例的全局个性与语气定制 | 仅 HERMES_HOME/SOUL.md |
| .cursorrules | Cursor IDE 编码约定 | 仅 CWD |
| .cursor/rules/*.mdc | Cursor IDE 规则模块 | 仅 CWD |
信息 — 优先级系统
每个会话仅加载一种项目上下文类型(首个匹配项胜出):
.hermes.md→AGENTS.md→CLAUDE.md→.cursorrules。SOUL.md 始终作为代理身份独立加载(插槽 #1)。
AGENTS.md
AGENTS.md 是主要的项目上下文文件。它告诉代理您的项目结构、应遵循的约定以及任何特殊指令。
逐步子目录发现
在会话启动时,Hermes 将工作目录中的 AGENTS.md 加载到系统提示中。当代理在会话期间(通过 read_file、terminal、search_files 等)进入子目录时,它会逐步发现这些目录中的上下文文件,并在它们变得相关时注入到对话中。
my-project/
├── AGENTS.md ← 启动时加载(系统提示)
├── frontend/
│ └── AGENTS.md ← 当代理读取 frontend/ 文件时发现
├── backend/
│ └── AGENTS.md ← 当代理读取 backend/ 文件时发现
└── shared/
└── AGENTS.md ← 当代理读取 shared/ 文件时发现这种方法相比在启动时加载所有内容有两个优势:
- 避免系统提示膨胀 — 子目录提示仅在需要时出现
- 保留提示缓存 — 系统提示在多次轮次中保持稳定
每个子目录在每个会话中最多检查一次。发现过程还会向上遍历父目录,因此读取 backend/src/main.py 会发现 backend/AGENTS.md,即使 backend/src/ 本身没有上下文文件。
信息
子目录上下文文件会经过与启动上下文文件相同的安全扫描。恶意文件会被阻止。
AGENTS.md 示例
## 项目上下文
这是一个使用 Python FastAPI 后端的 Next.js 14 Web 应用程序。
## 架构
- 前端:使用 App Router 的 Next.js 14,位于 `/frontend`
- 后端:FastAPI,位于 `/backend`,使用 SQLAlchemy ORM
- 数据库:PostgreSQL 16
- 部署:在 Hetzner VPS 上使用 Docker Compose
## 约定
- 所有前端代码使用 TypeScript 严格模式
- Python 代码遵循 PEP 8,全程使用类型提示
- 所有 API 端点返回 `{data, error, meta}` 格式的 JSON
- 测试放在 `__tests__/` 目录(前端)或 `tests/` 目录(后端)
## 重要说明
- 切勿直接修改迁移文件 — 请使用 Alembic 命令
- `.env.local` 文件包含真实 API 密钥,请勿提交
- 前端端口为 3000,后端为 8000,数据库为 5432SOUL.md
SOUL.md 控制代理的个性、语气和沟通风格。有关完整详细信息,请参阅个性页面。
位置:
~/.hermes/SOUL.md- 或者如果您使用自定义主目录运行 Hermes,则为
$HERMES_HOME/SOUL.md
重要细节:
- 如果默认的
SOUL.md不存在,Hermes 会自动生成一个 - Hermes 仅从
HERMES_HOME加载SOUL.md - Hermes 不会探测工作目录中的
SOUL.md - 如果文件为空,则不会向提示中添加任何来自
SOUL.md的内容 - 如果文件有内容,则在扫描和截断后逐字注入该内容
.cursorrules
Hermes 与 Cursor IDE 的 .cursorrules 文件以及 .cursor/rules/*.mdc 规则模块兼容。如果这些文件存在于项目根目录中,并且未找到更高优先级的上下文文件(.hermes.md、AGENTS.md 或 CLAUDE.md),则它们会被加载为项目上下文。
这意味着您现有的 Cursor 约定在使用 Hermes 时会自动生效。
上下文文件如何加载
启动时(系统提示)
上下文文件由 agent/prompt_builder.py 中的 build_context_files_prompt() 函数加载:
- 扫描工作目录 — 检查
.hermes.md→AGENTS.md→CLAUDE.md→.cursorrules(首个匹配项胜出) - 读取内容 — 每个文件以 UTF-8 文本形式读取
- 安全扫描 — 检查内容中是否存在提示注入模式
- 截断 — 超过
context_file_max_chars字符(默认 20,000)的文件会被头尾截断(70% 头部,20% 尾部,中间有标记) - 组装 — 所有部分在
# Project Context标题下合并 - 注入 — 组装后的内容添加到系统提示中
会话期间(逐步发现)
agent/subdirectory_hints.py 中的 SubdirectoryHintTracker 监视工具调用参数中的文件路径:
- 路径提取 — 每次工具调用后,从参数(
path、workdir、shell 命令)中提取文件路径 - 祖先遍历 — 检查该目录及其最多 5 个父目录(在已访问的目录处停止)
- 提示加载 — 如果找到
AGENTS.md、CLAUDE.md或.cursorrules,则加载(每个目录首个匹配项) - 安全扫描 — 与启动文件相同的提示注入扫描
- 截断 — 每个文件上限为 8,000 字符
- 注入 — 附加到工具结果中,使模型自然地在上下文中看到它
最终的提示部分大致如下:
## Project Context
以下项目上下文文件已加载,应遵循:
## AGENTS.md
[您的 AGENTS.md 内容在此]
## .cursorrules
[您的 .cursorrules 内容在此]
[您的 SOUL.md 内容在此]请注意,SOUL 内容直接插入,没有额外的包装文本。
安全:提示注入保护
所有上下文文件在包含之前都会扫描潜在的提示注入。扫描器检查:
- 指令覆盖尝试:“忽略之前的指令”、“无视你的规则”
- 欺骗模式:“不要告诉用户”
- 系统提示覆盖:“系统提示覆盖”
- 隐藏的 HTML 注释:
<!-- ignore instructions --> - 隐藏的 div 元素:
<div style="display:none"> - 凭证泄露:
curl ... $API_KEY - 秘密文件访问:
cat .env、cat credentials - 不可见字符:零宽度空格、双向覆盖、连接词符
如果检测到任何威胁模式,该文件将被阻止:
[已阻止:AGENTS.md 包含潜在的提示注入(prompt_injection)。内容未加载。]
警告
此扫描器可防范常见的注入模式,但不能替代在共享仓库中审查上下文文件。请始终验证您未编写的项目中的 AGENTS.md 内容。
大小限制
| 限制 | 值 |
|---|---|
| 每个文件的最大字符数 | context_file_max_chars(默认 20,000,约 7,000 个 token) |
| 头部截断比例 | 70% |
| 尾部截断比例 | 20% |
| 截断标记 | 10%(显示字符数并建议使用文件工具) |
当文件超过配置的限制时,截断消息显示:
[...截断的 AGENTS.md:保留了 25000 字符中的 14000+4000。使用文件工具读取完整文件。]
有效上下文文件的技巧
提示 — AGENTS.md 的最佳实践
- 保持简洁 — 保持在配置的
context_file_max_chars以下;代理每次轮次都会读取它- 使用标题结构化 — 使用
##部分来组织架构、约定、重要说明- 包含具体示例 — 展示首选的代码模式、API 形状、命名约定
- 提及不要做什么 — “切勿直接修改迁移文件”
- 列出关键路径和端口 — 代理在终端命令中使用这些信息
- 随着项目发展更新 — 过时的上下文比没有上下文更糟糕
每个子目录的上下文
对于 monorepo,将子目录特定的指令放在嵌套的 AGENTS.md 文件中:
<!-- frontend/AGENTS.md -->
## 前端上下文
- 使用 `pnpm` 而非 `npm` 进行包管理
- 组件放在 `src/components/`,页面放在 `src/app/`
- 使用 Tailwind CSS,绝不使用内联样式
- 使用 `pnpm test` 运行测试<!-- backend/AGENTS.md -->
## 后端上下文
- 使用 `poetry` 进行依赖管理
- 使用 `poetry run uvicorn main:app --reload` 运行开发服务器
- 所有端点需要 OpenAPI 文档字符串
- 数据库模型在 `models/`,模式在 `schemas/`