Hermes 也可以像 Codex 一样读取项目级上下文文件。区别在于:Telegram 对话本身只有一个窗口,Hermes 必须先知道“本轮任务要操作哪个项目目录”,才能进入项目、读取规则,再按规则做事。
这篇文章整理一套适合日常使用的约定:每个项目放自己的 AGENTS.md,每次下任务时带上项目路径,必要时用 /new 和 /title 分隔上下文。这样不管是写 Hugo 文章、检查 Matrix 容器,还是维护某个 Docker Compose 项目,Hermes 都能把不同项目的规则分开处理。
Hermes 支持哪些项目上下文文件
Hermes 会识别项目目录里的上下文文件,常见包括:
AGENTS.mdCLAUDE.md.cursorrules
这些文件的作用是告诉机器人:这个项目是什么、文件怎么放、哪些命令必须验证、哪些目录禁止删除、哪些信息不能输出。
要注意的是,Hermes 需要先知道当前项目路径。比如 Telegram 里的默认工作目录可能是:
/home/hermesuser/.hermes/profiles/code这个目录只是 Hermes profile 的运行目录,不一定是你的业务项目。如果只说“去改那个项目”,Hermes 不会自动知道应该读取哪个项目的 AGENTS.md。
正确的说法是直接给出项目路径:
小工,进 /home/hermesuser/wiki 这个项目,看 AGENTS.md,然后帮我改 xxx。Hermes 收到后,推荐按这个顺序工作:
- 进入指定项目目录。
- 读取
AGENTS.md、CLAUDE.md或相关README。 - 查看
git status和项目结构。 - 按项目规则修改。
- 运行验证命令。
- 汇报修改内容、验证结果和剩余风险。
下任务时怎么区分不同项目
最稳的格式是:
项目:/path/to/project
任务:做 xxx例如:
项目:/home/hermesuser/wiki
任务:新增一篇 RouterOS 备份说明。或者:
项目:/home/hermesuser/data/docker_data/matrix
任务:检查 compose 配置和最近日志。这类写法会把项目路径明确锁定到本轮任务里。Hermes 后续读取上下文文件、执行命令和解释结果,都应该围绕这个目录展开。
推荐的项目目录结构
一个长期维护的项目,建议至少有这些文件:
/project-name/
├── AGENTS.md
├── README.md
├── docker-compose.yml
├── .env.example
├── scripts/
├── docs/
└── ...AGENTS.md 用来写给 Hermes 的项目规则,README.md 写给人看,.env.example 只放变量名和示例值,不放真实密钥。
一个 Docker 运维项目的 AGENTS.md 可以这样写:
# AGENTS.md
## 项目说明
这是 Matrix / LiveKit 部署项目。
## 工作规则
- 修改前先看 git status。
- 不要提交真实密钥。
- Docker 项目文件放在本目录。
- 修改 compose 后必须运行 docker compose config。
- 改完要给出验证命令和真实结果。
## 常用命令
- docker compose ps
- docker compose logs --tail=100
- docker compose config
## 禁止事项
- 不要删除 data/、postgres/、media_store/。
- 不要在最终回复里输出 token/password。以后你只要说:
小工,进这个项目处理一下。只要上下文里已经明确“这个项目”是哪一个,Hermes 就应该按这个目录里的 AGENTS.md 规则来。
Telegram 单窗口怎么避免混乱
Telegram 只有一个聊天窗口时,最容易发生的问题是:上一轮还在写 Wiki,下一轮突然检查 Synapse 日志,机器人可能仍然带着旧项目的上下文。
可以按轻重使用下面几种办法。
方法一:每次带项目路径
这是最简单、最实用的办法。
项目 /home/hermesuser/wiki:帮我整理 RouterOS 备份文档。项目 /home/hermesuser/data/docker_data/synapse:帮我检查容器日志。项目 /home/hermesuser/data/docker_data/livekit:帮我升级 compose。每次任务开头都写清项目,Hermes 就能把工作目录和项目规则绑定到本轮任务。
方法二:切项目时使用 /new
如果你准备从一个项目切到另一个项目,建议先发:
/new然后再发:
项目:/home/hermesuser/wiki
任务:把今天 Matrix 备份流程写成文档。/new 的作用是开启新的上下文,减少旧任务对新任务的干扰。尤其是从“运维排错”切到“写文章”、从“生产服务器”切到“本地仓库”时,很值得用。
方法三:用 /title 标记当前会话
如果这个 Telegram 会话会长期围绕一个主题使用,可以给它取标题:
/title matrix-livekit部署或者:
/title wiki-routeros文档这样以后翻历史记录时更容易知道这一段对话主要处理了哪个项目。
方法四:长期项目用不同 profile
如果项目之间权限、工具、模型、Telegram Token 或记忆完全不同,可以拆成不同 Hermes profile:
codeprofile:通用开发和运维。matrixprofile:专门处理 Matrix / Synapse。wikiprofile:专门维护知识库。
不过这属于更重的隔离方式。日常使用时,先做到“项目路径 + AGENTS.md + /new”通常已经足够。
Skill 和 AGENTS.md 怎么分工
Hermes 的 skill 是全局能力,项目里的 AGENTS.md 是本项目规则。两者不冲突,最好分工使用。
可以这样理解:
| 类型 | 解决什么问题 | 示例 |
|---|---|---|
| Skill | 这类任务通常怎么做 | Matrix / LiveKit 部署、Hugo 文章流程、Hysteria2 节点部署 |
| AGENTS.md | 这个项目具体怎么做 | 哪些目录不能删、哪个仓库要提交、修改后跑什么验证 |
例如:
- Matrix / LiveKit / coturn / NPM:触发
matrix-livekit-deploy。 - Synapse server notice:触发
synapse-server-notice-sender。 - Synapse Docker 备份恢复仓库:触发
synapse-docker-recovery-backup。 - Hysteria2 节点:触发
debian13-hysteria2-node。 - Gost / MWSS / Nginx / FreeBSD Reality:触发
gost-mwss-nginx-deploy。 - Hugo 文章:触发
hugo-post-workflow。
真正执行时,应先看项目 AGENTS.md,再结合对应 skill。skill 解决“这类事的经验流程”,AGENTS.md 解决“这个项目的边界和规矩”。
推荐的实际工作流
长期来看,可以给每个项目都放一个 AGENTS.md:
/home/hermesuser/wiki/AGENTS.md
/home/hermesuser/data/docker_data/synapse/AGENTS.md
/home/hermesuser/data/docker_data/livekit/AGENTS.md
/home/hermesuser/data/docker_data/npm/AGENTS.md然后每次找 Hermes 时这样说:
小工,项目 /home/hermesuser/wiki,先看 AGENTS.md,然后把今天 Matrix 备份流程写成文档。或者:
小工,项目 /home/hermesuser/data/docker_data/synapse,先看 AGENTS.md,检查一下 Synapse 是否正常。Hermes 应按下面的顺序处理:
- 进入项目目录。
- 读取
AGENTS.md。 - 查看 git 状态、文件结构和关键配置。
- 执行任务。
- 运行验证命令。
- 汇报改了什么、验证结果和剩余风险。
一句话约定
你这边用“项目路径、/new、/title、每个项目的 AGENTS.md”区分项目。
Hermes 这边用“当前任务指定的工作目录、项目上下文文件、当前会话上下文、已安装 skills 和必要的历史检索”区分项目。
最稳的口诀是:
每次给 Hermes:项目路径 + 任务。这样即使 Telegram 只有一个窗口,多个项目也不会轻易串线。