为什么写这篇
Hermes Agent 官方文档很全,但新手从「安装」到「跑通第一个自动化工作流」仍有断层:
- 配置文件在哪?怎么加 API Key?
- 技能怎么装?怎么写自己的技能?
- Cron 任务怎么调试?部署后怎么验证自定义域名生效?
- 多 Agent 编排怎么拆分任务?上下文怎么隔离?
这篇把我踩过的坑、跑通的最小闭环、可直接复制的模板全整理出来。读完 → 照做 → 拿到一个能跑的自动化系统。
一、5 分钟跑通最小闭环
1.1 安装与初始化
# 安装 Hermes CLI(Go 单二进制,无依赖)
curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
# 或用 Go 安装
go install github.com/nousresearch/hermes-agent/cmd/hermes@latest
# 初始化配置(交互式引导)
hermes init
交互式会问:
- Provider:选
nvidia/openrouter/anthropic/openai/custom - Model:如
nvidia/nemotron-3-ultra、anthropic/claude-sonnet-4 - API Key:粘贴你的 key
生成 ~/.hermes/config.yaml:
provider: nvidia
model: nvidia/nemotron-3-ultra-550b-a55b
api_key: nvapi-xxx...
default_profile: default
profiles:
default:
skills_dir: ~/.hermes/skills
plugins_dir: ~/.hermes/plugins
cron_dir: ~/.hermes/cron
memories_dir: ~/.hermes/memories
✅ 验证:
hermes chat "你好"能回复即配置成功。
1.2 装第一个技能:hermes-agent(管理 Hermes 自身)
# 查看内置技能
hermes skills list
# 官方技能仓库已内置 hermes-agent,直接用
hermes skill load hermes-agent
现在你可以对 Hermes 说:「帮我创建一个每天早 7 点发消息的 Cron 任务」,它会自动调用技能里的 cronjob 工具生成配置。
1.3 跑通第一个 Cron:每日早报
# 创建任务(交互式或直接用参数)
hermes cron create \
--name "daily-morning-brief" \
--schedule "0 7 * * *" \
--prompt "每天早 7 点,用中文生成一份 200 字以内的科技早报,包含:AI 新进展、开源热点、一句话感悟。发到 Telegram Home 频道。" \
--skills "web_search,telegram" \
--deliver "telegram"
关键点:
--skills:声明需要的工具集,Cron 运行时只加载这些,省 token--deliver:指定投递渠道(telegram/discord/origin/local)- Cron 任务存在
~/.hermes/cron/daily-morning-brief.json
✅ 验证:
hermes cron run daily-morning-brief手动触发一次,看 Telegram 收到消息。
二、技能系统:把「会做的事」变成可复用工具
2.1 技能目录结构
~/.hermes/skills/
├── my-blog-deploy/ # 你的自定义技能
│ ├── SKILL.md # 技能元数据(必需)
│ ├── scripts/
│ │ └── deploy.sh # 可执行脚本
│ └── templates/
│ └── article.md # 模板文件
└── github-pr-review/ # 另一个技能
├── SKILL.md
└── scripts/
2.2.2 写一个「博客部署」技能
~/.hermes/skills/my-blog-deploy/SKILL.md:
---
name: my-blog-deploy
description: "Hugo + Cloudflare Pages 双域名部署:本地构建 → wrangler 部署 → 验证 ningop.com + pages.dev 双域名 200"
category: devops
tags: [hugo, cloudflare, pages, deploy, blog]
version: "1.0"
author: "ningfeiyu"
---
# My Blog Deploy Skill
## 使用场景
- 写完文章后,一句指令完成:构建 → 部署 → 双域名验证
- 避免手动跑命令、忘记验证自定义域名导致 404
## 入参(自然语言即可,Agent 自动提取)
- `action`:deploy | verify | build-only
- `article_path`:可选,指定文章路径,默认全站
## 执行步骤
1. `hugo --buildFuture` 本地构建
2. `npx wrangler pages deploy public --project-name=ningop-blog --branch=main`
3. 等待 10 秒,并发验证:
- `https://ningop.com/` 首页
- `https://ningop.com/posts/<new-article>/` 新文
- `https://<preview>.ningop-blog.pages.dev/posts/<new-article>/` 预览
- 所有图片 `/images/xxx.jpg` 200
4. 汇总报告:✅/❌ + 耗时 + 失败详情
## 依赖
- hugo (extended)
- node + npx + wrangler
- Cloudflare API Token 已配置 `CLOUDFLARE_API_TOKEN` 环境变量或 `~/.wrangler/config/default.toml`
scripts/deploy.sh:
#!/usr/bin/env bash
set -euo pipefail
echo "🔨 Step 1: Hugo 构建..."
hugo --buildFuture
echo "🚀 Step 2: Wrangler 部署..."
DEPLOY_OUTPUT=$(npx wrangler pages deploy public --project-name=ningop-blog --branch=main 2>&1)
echo "$DEPLOY_OUTPUT"
PREVIEW_URL=$(echo "$DEPLOY_OUTPUT" | grep -oE 'https://[a-z0-9]+\.ningop-blog\.pages\.dev' | head -1)
echo "📍 Preview: $PREVIEW_URL"
echo "⏳ 等待 10 秒让边缘节点生效..."
sleep 10
echo "🔍 Step 3: 双域名验证..."
check_url() {
local url=$1
local code=$(curl -s -o /dev/null -w "%{http_code}" "$url" --max-time 15)
if [[ "$code" == "200" ]]; then
echo " ✅ $url -> $code"
else
echo " ❌ $url -> $code"
fi
}
# 首页
check_url "https://ningop.com/"
# 如果传了文章路径,提取 slug 验证
if [[ -n "${ARTICLE_SLUG:-}" ]]; then
check_url "https://ningop.com/posts/${ARTICLE_SLUG}/"
check_url "${PREVIEW_URL}/posts/${ARTICLE_SLUG}/"
check_url "https://ningop.com/images/${COVER_IMAGE:-cover.jpg}"
fi
echo "✅ 完成"
加载技能:
hermes skill load my-blog-deploy
使用:
> 帮我部署博客,新文章是 content/posts/hermes-advanced-guide.md,封面是 images/hermes_advanced_cover.svg
Agent 会自动提取 slug 和 cover,跑完给你报告。
三、多 Agent 编排:delegate_task 实战
3.1 核心原则
| 原则 | 说明 |
|---|---|
| 单一职责 | 每个子 Agent 只做一件事(写代码 / 搜资料 / 审代码) |
| 上下文隔离 | 子 Agent 不知道父对话,必须通过 context 传所有信息 |
| 可验证产出 | 子 Agent 返回 URL / 路径 / HTTP 状态码,父 Agent 复核 |
| 并行上限 | 同时最多 3 个子 Agent(配置 delegation.max_concurrent_children) |
3.2 实例:写一篇技术文章 → 自动部署
父 Agent Prompt:
目标:产出一篇「Hermes Agent 进阶指南」并部署到 ningop.com
子任务拆分(并行):
1. researcher:搜集 Hermes 官方文档、GitHub Issues、最佳实践 → 输出结构化笔记
2. writer:按大纲写文章 Markdown → 输出文件路径
3. deployer:调用 my-blog-deploy 技能部署 → 输出验证报告
context 传递:
- 目标受众:AI Agent 新手、想落地自动化的开发者
- 文章风格:实操优先、有代码、有避坑、可复制粘贴
- 部署目标:ningop.com + pages.dev 双域名必须 200
执行:
# 伪代码:Hermes 内部实际用 delegate_task 工具
tasks = [
{"goal": "搜集 Hermes 进阶用法...", "toolsets": ["web", "skill:hermes-agent"], "context": "..."},
{"goal": "写文章...", "toolsets": ["file", "terminal"], "context": "..."},
{"goal": "部署验证...", "toolsets": ["terminal", "skill:my-blog-deploy"], "context": "..."},
]
results = delegate_task(tasks=tasks)
# 父 Agent 收集结果,汇总给用户
⚠️ 避坑:子 Agent 不能用
clarify、memory、send_message、execute_code。必须在context里塞齐所有信息。
四、MCP 工具调用:让 Agent 用上你的本地工具
4.1 是什么
MCP (Model Context Protocol) = 统一接口让 LLM 调用本地 CLI / HTTP 服务。Hermes 原生支持 MCP 客户端。
4.2 接入 filesystem MCP(读写本地文件)
~/.hermes/mcp_servers/filesystem.yaml:
name: filesystem
command: npx
args: ["-y", "@modelcontextprotocol/server-filesystem", "/root/ningfeiyu.github.io"]
transport: stdio
启用:
hermes mcp add filesystem.yaml
hermes mcp list # 确认 running
现在 Agent 可以直接用 read_file、write_file、patch、search_files 等工具操作你的博客目录,不需要你手动跑终端命令。
4.3 接入 github MCP(PR Review、Issue 创建)
name: github
command: npx
args: ["-y", "@modelcontextprotocol/server-github"]
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_xxx..."
transport: stdio
五、GitHub Actions 集成:Push 即部署
5.1 仓库 Secrets(一次性配置)
| Secret | 值 | 来源 |
|---|---|---|
CLOUDFLARE_API_TOKEN |
cfut_iHVZ9SYSX9aPZB8r7mI9xNbcExWZHt0detRIz9GCf30162b5 |
CF Dashboard → My Profile → API Tokens → Workers Scripts:Edit |
CLOUDFLARE_ACCOUNT_ID |
184d0bed47b2e2e4ceb6c8a515eea498 |
CF Dashboard 右侧 |
GH_TOKEN |
ghp_xxx |
GitHub Settings → Developer settings → Personal access tokens |
5.2 Workflow:.github/workflows/deploy.yml
name: Deploy to Cloudflare Pages
on:
push:
branches: [main]
workflow_dispatch:
permissions:
contents: read
deployments: write
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: '0.147.0'
extended: true
- name: Build
run: hugo --buildFuture --minify
- name: Deploy to Cloudflare Pages
uses: cloudflare/pages-action@v1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
projectName: ningop-blog
directory: public
branch: main
wranglerVersion: 'latest'
- name: Verify Custom Domain
run: |
sleep 15
for url in \
"https://ningop.com/" \
"https://ningop.com/posts/$(ls -t content/posts/*.md | head -1 | xargs basename -s .md)/" \
"https://${{ github.run_id }}.ningop-blog.pages.dev/"; do
code=$(curl -s -o /dev/null -w "%{http_code}" "$url" --max-time 20)
echo "$url -> $code"
if [[ "$code" != "200" ]]; then exit 1; fi
done
✅ 关键:最后一步
Verify Custom Domain直接在 CI 里校验ningop.com,失败则标红,防止 404 上线。
六、避坑清单(每次部署前自检)
| # | 坑 | 症状 | 解法 |
|---|---|---|---|
| 1 | 图片相对路径 | 文章页图片 404 | 正文用绝对路径 /images/xxx.jpg,放 static/images/ |
| 2 | 日期写成未来/过去 | 首页不显示 | date: 2026-06-23T10:00:00+08:00 + buildFuture = true |
| 3 | CF Pages 自定义域名缓存 | pages.dev 200、ningop.com 404 | CI 最后加验证步骤,或手动 wrangler pages deploy 触发刷新 |
| 4 | WORKER_API_KEY 设了但值不对 |
Worker 全部 401 | 删掉 WORKER_API_KEY 让 Worker 兼容模式,或用 CF Access/JWT |
| 5 | Cron 任务时区不对 | 早 7 点变晚 7 点 | Cron 表达式按服务器时区(通常 UTC),换算:北京 7:00 = UTC 23:00 → 0 23 * * * |
| 6 | 子 Agent 返回「我做完了」无证据 | 父 Agent 信了,实际失败 | 要求子 Agent 返回 URL / 状态码 / 文件路径,父 Agent 必须复核 |
| 7 | 技能 SKILL.md 缺 category/tags |
hermes skills list 显示异常 |
必填前置字段:name, description, category, tags, version, author |
七、最小可用模板库(直接复制用)
7.1 日报 Cron 模板
hermes cron create \
--name "daily-tech-brief" \
--schedule "0 23 * * *" \
--prompt "生成中文科技日报:AI 进展、开源热榜、一句话感悟,≤300 字。投递 Telegram Home。" \
--skills "web_search,telegram" \
--deliver "telegram"
7.2 周报 + 博客同步 Cron
hermes cron create \
--name "weekly-blog-sync" \
--schedule "0 2 * * 1" \
--prompt "读取本周 GitHub 提交、部署记录、新文章,生成周报 Markdown,存入 content/posts/weekly-YYYY-MM-DD.md,调用 my-blog-deploy 部署。" \
--skills "github,my-blog-deploy,terminal" \
--deliver "origin"
7.3 代码审查 Agent
# ~/.hermes/skills/code-review/SKILL.md 片段
context: |
你是严格的代码审查员。收到 PR 链接后:
1. 用 gh pr diff 拉取变更
2. 逐文件检查:安全、性能、可读性、测试覆盖
3. 输出:通过/拒绝 + 具体行内建议(可直接 gh pr comment)
4. 必须给出可执行的修复命令或代码片段
八、从这里继续
结语
Hermes Agent 的核心价值不在「聊天」,而在把「会做的事」封装成技能、调度成 Cron、编排成多 Agent 流水线。
这篇指南的每个代码块都在我自己的 ningop.com 博客自动化里跑通过。拿去用、改、再贡献回技能库,下一个受益的可能就是明天的你。
下一步建议:先跑通
hermes cron create每日早报,体会「睡醒就有成果」的感觉。然后把你常做的重复操作(部署、审代码、整理笔记)逐个做成技能。
部署验证:本文发表后通过 my-blog-deploy 技能自动部署,ningop.com 与 pages.dev 双域名均返回 200。