第一篇:Hermes Agent × 鸿蒙开发环境搭建——一个 AI Agent 怎么帮你写 ArkTS
「这是上一篇的续篇,没看过的可以先去第一篇了解背景:(44岁被裁60天,我用AI给健忘的母亲建了款鸿蒙App44岁程序员被裁,母亲健忘导致家庭矛盾,血压飙到180。我用AI - 掘金)」
这套环境已经帮我写了几个月 ArkTS 代码,零成本,全免费。 我把搭建过程完整写下来,你跟着做就行。
前言:为什么我选 Hermes Agent,而不是 Claude Code
你可能注意到我在第一篇文章里提到——我被裁,直接原因就是 Claude Code 和 OpenCode CLI。
听起来很讽刺对吧?被 AI 裁了,然后又用 AI 来写代码。
但这也说明一件事:工具本身没有立场,关键看谁在用、怎么用。
市面上 AI Coding Agent 不少:Claude Code、OpenCode CLI、Cursor、GitHub Copilot……我最终选了 Hermes Agent,几个原因:
| 对比项 | Claude Code | Cursor | Hermes Agent |
|---|---|---|---|
| 费用 | 需要 API 付费 | $20/月 起步 | 完全开源免费 |
| 模型 | 只能用 Claude | 自己带模型 | 任意模型,我用的 DeepSeek 极便宜 |
| 技能记忆 | 无 | 无 | 会记住你的开发习惯,越用越好用 |
| 平台 | 终端 | IDE | 终端+微信+Telegram全平台 |
| 鸿蒙适配 | 不认识 ArkTS | 不认识 ArkTS | 我给它装了 ArkTS 规则,它会了 |
最打动我的是最后一条。Hermes 有个「技能(Skills)」系统——你教它一次,它记住,下次自己就会了。我给它装了一套 ArkTS 语法规则,从此它写出来的代码不会再犯莫名其妙的编译错误。
一、安装 Hermes Agent(逐步骤)
先声明:我的环境是 WSL(Windows Subsystem for Linux),Ubuntu 26.04。Windows/macOS/Linux 步骤大同小异。
步骤 1:一键安装
打开终端,执行:
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
安装脚本会:
- 检查系统依赖(Python 3.10+、Node.js 18+、Git)
- 克隆 Hermes Agent 仓库到
~/.hermes/hermes-agent/ - 创建 Python 虚拟环境并安装依赖包
- 创建默认配置
~/.hermes/config.yaml
安装完成后,重启终端(或者 exec $SHELL -l 重新加载 shell)。
步骤 2:验证安装
hermes --version
正常应该输出版本号,例如 v0.x.x。
如果提示 command not found,检查 ~/.local/bin 是否在 PATH 中:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
步骤 3:配置 DeepSeek
我用的是 DeepSeek(性价比最高),配置方式:
hermes config set model.default deepseek-v4-flash
hermes config set model.provider deepseek
然后编辑 API Key:
hermes config env-path # 查看 .env 文件路径
打开那个文件,添加:
DEEPSEEK_API_KEY=sk-你的key
没有 Key?去 platform.deepseek.com 注册。充值 10 块钱能用很久。具体价格以官网实时为准。
步骤 4:健康检查
hermes doctor
它会逐项检查所有依赖是否就绪。我第一次遇到两个常见问题:
问题 A:Playwright Chromium not installed
cd ~/.hermes/hermes-agent
PLAYWRIGHT_HOST_PLATFORM_OVERRIDE="ubuntu24.04-x64" npx playwright install chromium
这是 Ubuntu 26.04 太新导致的,强制指定 24.04 的版本即可。
问题 B:系统依赖缺少
sudo apt install -y libnss3 libnspr4 libdbus-1-3 libatk1.0-0t64 \
libatk-bridge2.0-0t64 libcups2t64 libdrm2 libxkbcommon0 \
libxcomposite1 libxdamage1 libxfixes3 libxrandr2 libgbm1
解决完所有 ⚠️ 后再跑一遍 hermes doctor,直到全部 ✓。
步骤 5:试运行
hermes chat -q "你好"
如果 Hermes 能正常回复,安装完成。
二、针对鸿蒙开发做配置
装好只是开始。真正让它成为「鸿蒙开发助手」,还需要一些关键配置。
1. 启用必要的工具集 —— 但不花一分钱
Hermes 的工具集(Toolsets)就像你的工具箱。开发鸿蒙需要这几个:
hermes tools enable terminal # 执行命令、编译、构建
hermes tools enable file # 读写文件、搜索代码
hermes tools enable web # 查文档、搜索方案
terminal 是核心——Hermes 可以直接在 WSL 里跑命令行编译。
web 我特别说一下。Hermes 的 web 工具默认依赖在线搜索服务,很多需要 API Key,一搜就花钱。我的方案是自己搭 SearXNG。
SearXNG 是一个开源的元搜索引擎,它聚合 Google、Bing、百度、搜狗等多个搜索引擎的结果,通过 Docker 自部署,不花一分钱,隐私还好。
搭建步骤:
# 1. 创建配置目录
mkdir -p ~/.hermes/searxng/core-config
# 2. 下载官方 docker-compose 配置(如果 GitHub raw 无法访问,去官网手动下载)
cd ~/.hermes/searxng
curl -fsSL https://raw.githubusercontent.com/searxng/searxng/master/container/docker-compose.yml -o docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/searxng/searxng/master/container/.env.example -o .env
# 3. 创建 SearXNG 配置文件 core-config/settings.yml:
在 ~/.hermes/searxng/core-config/settings.yml 写入:
use_default_settings: true
general:
instance_name: "searxng-hermes"
donation_url: false
enable_metrics: false
search:
safe_search: 0
autocomplete: "google"
default_lang: "zh-CN"
formats:
- html
- json
server:
secret_key: "改成你自己的随机密钥"
limiter: false
image_proxy: false
disable_public_endpoints: false
engines:
- name: baidu
engine: baidu
shortcut: bd
enabled: true
timeout: 10.0
categories: general
- name: sogou
engine: sogou
shortcut: sg
enabled: true
timeout: 10.0
categories: general
- name: bing
engine: bing
shortcut: bing
enabled: true
timeout: 10.0
categories: general
- name: duckduckgo
engine: duckduckgo
shortcut: ddg
enabled: true
timeout: 10.0
categories: general
- name: google
engine: google
shortcut: gg
enabled: true
timeout: 10.0
categories: general
- name: wikipedia
engine: wikipedia
shortcut: wp
enabled: true
timeout: 10.0
categories: general
# 4. 修复 WSL 下权限问题(重要!不然后续容器启动会报权限拒绝)
sudo chown -R $USER:$USER ~/.hermes/searxng/
# 5. 启动 SearXNG
cd ~/.hermes/searxng
docker compose up -d
# 6. 验证是否启动成功
curl "http://localhost:8080/search?q=鸿蒙开发&format=json"
看到 JSON 结果就说明搭好了。
配置 Hermes 对接 SearXNG:
编辑 ~/.hermes/config.yaml,添加:
web:
backend: searxng
searxng_url: http://localhost:8080
或者直接设置环境变量:
export SEARXNG_URL="http://localhost:8080"
注意事项(踩坑经验):
| 常见问题 | 原因 | 解决 |
|---|---|---|
| JSON API 返回 403 | 缺 json format 或 disable_public_endpoints 配置 | 确保 settings.yml 里两个都配了 |
| 容器启动报权限拒绝 | WSL 下 Docker 改了文件所有者 | sudo chown -R $USER:$USER ~/.hermes/searxng/ |
| 改完配置不生效 | 容器启动后加载的是内存配置 | cd ~/.hermes/searxng && docker compose restart core |
| 国内无法下载 GitHub raw | 网络限制 | 手动创建 docker-compose.yml,内容去 SearXNG GitHub 复制 |
从此 Hermes 搜技术文档、查报错信息,走的都是你自己的搜索引擎——免费、无广告、不限次数。
省钱思路:能用开源自部署解决的,绝不花 API 订阅费。
2. 安装鸿蒙相关的技能
这是我发现 Hermes 最牛逼的功能。
——我自己踩了无数 ArkTS 的坑,把这些坑写成了一套「技能」,直接装进 Hermes 里:
hermes skills install harmonyos-arkts-rules
这个技能里有什么?
它是一份 SKILL.md 文件,包含了 66+ 条 ArkTS 语法约束和 API 规范。我摘几条你感受一下:
| # | 规则 | 正确做法 |
|---|---|---|
| 1 | 禁止 any / unknown | 显式指定具体类型 |
| 14 | 禁止解构赋值 | 逐字段赋值 |
| 26 | 禁止 delete 属性 | 声明可空类型赋值 null |
| 33 | 禁止函数表达式 | 箭头函数 |
| 52 | 禁止 # 私有标识符 | private 关键字 |
| 53 | 禁止动态字段访问 obj["field"] | obj.field |
| 66 | 禁止 throw err(任意类型) | throw new Error(err.message) |
| 67 | 禁止 @Builder 内用 let/const | 直接传参或移出 Builder |
| 69 | 禁止 spread 运算符 ... | 显式传参,逐字段赋值 |
不止这些语法规则,技能里还包含了大量实战复盘的坑:
- Repeat + virtualScroll 的正确用法 vs 错误用法(函数派生数组问题、totalCount 动态同步)
- @Builder 值传递 vs @ComponentV2 @Param 引用传递(UI 不刷新的根因分析)
- @Param 单例 + @Trace 布尔值不刷新的修复方案(private 直接持有引用)
- Repeat.key() 必须用稳定 id,禁用 JSON.stringify(流式更新时组件重建的坑)
- aboutToAppear 生命周期铁律(勿 async、勿 pushPathByName)
- PersistenceV2 多 key 不一致陷阱(不同 key = 不同数据空间)
- 工具调用结果卡片渲染(纯 @Trace 驱动,摒弃 NodeContainer + @Monitor)
安装后,每次 Hermes 写 ArkTS 代码时会自动加载这些规则。不用再说「用 ArkTS 规范写」——它自动就按规范来了。
完整 SKILL.md 在
~/.hermes/skills/software-development/harmonyos-arkts-rules/SKILL.md,装了技能后可以直接看全部内容。
3. 配置个性化指令(SOUL.md)
打开 ~/.hermes/SOUL.md,可以告诉 Hermes 你的偏好和约束。我的 SOUL.md 里写了类似这样的内容:
你在 WSL 环境下工作。鸿蒙项目路径在 /mnt/d/workspace/my-parents-helper/。 ArkTS 代码请严格遵守 harmonyos-arkts-rules 技能中的语法规范。 用户偏好:边改边编译验证,每次小改动后立即构建确认不报错。
这样每次对话 Hermes 都知道你的环境和偏好,不用反复说。
4. 自定义 MCP:直接在终端查鸿蒙 SDK API
鸿蒙的官方 API 文档是有的,但要在官网一层一层点进去找,很麻烦。而且纯血鸿蒙迭代快(API 版本从 12 跳到 15+),网上搜到的很多信息已经过时了。
我也听说过有现成的鸿蒙 MCP 服务,但本着 "不花钱、不求人" 的原则,我换了一条路。
思路:把本地 SDK 目录下的 .d.ts 文件变成 Hermes 可直接搜索的 MCP 接口。
Hermes 支持对接 MCP(Model Context Protocol)服务器——可以理解为一种"工具扩展"机制。我配置了一个自定义 MCP 服务,提供两个工具:
mcp_harmonyos_sdk_search_harmonyos_api(query)—— 按关键字搜索 .d.ts 文件mcp_harmonyos_sdk_get_harmonyos_api_detail(path)—— 读取指定文件的完整声明
前置条件:安装鸿蒙 Command Line Tools
Hermes 在 WSL 里运行,要访问鸿蒙 SDK 文件,需要命令行工具集:
- 在 DevEco Studio 里下载 SDK(或者从华为官网下载 Command Line Tools 独立包)
- 配置环境变量指向 SDK 路径
- 确认 SDK 目录下有
api/或类似目录存放.d.ts文件
MCP 配置方式:
编辑 ~/.hermes/config.yaml,在 MCP 部分添加:
mcp:
servers:
- name: harmonyos-sdk-api
command: python3
args:
- /path/to/your/mcp-server.py
env:
SDK_PATH: "/path/to/harmonyos/sdk"
这个 MCP 服务会遍历 SDK 目录下所有的 .d.ts 文件,建立索引,Hermes 就可以直接搜索到任何 API 的签名。
实际效果:
你:鸿蒙里怎么做生物识别认证?
Hermes:调用 mcp_harmonyos_sdk_search_harmonyos_api 搜索…
找到 userAuth 模块的 .d.ts 文件,读取签名…
然后告诉你:userAuth.getAuthInstance() 参数是 … 返回值是 …
这样查到的 API 信息是第一手的、100% 准确的,不需要依赖任何第三方文档或网络搜索。
三、日常开发工作流
工具搭好了,怎么用?先说一个重要原则:
绝不使用 Hermes Agent 创建项目或模块。
项目和模块一律手动通过 DevEco Studio 创建和配置。原因有两个:
- 省 token:每次让 AI 生成整个项目框架,返回几万行代码,浪费一大半。
- 避免依赖问题:DevEco Studio 创建项目时会自动配置 hap 包依赖、签名信息、资源索引。Hermes 生成的框架漏掉任何一环,修复起来极其麻烦。
Hermes 只负责写业务代码和逻辑,不碰项目结构。
我的日常工作流大概是这样的:
场景 1:写一个新组件
我:帮我在 feature/chat 模块下创建一个语音输入的 ArkTS 组件
Hermes:好的,根据 harmonyos-arkts-rules 规范,
我使用了 @ComponentV2 装饰器,@Param 传参…
它写完代码,会顺便帮你运行编译检查。一条命令的事。
场景 2:查鸿蒙 API
鸿蒙的 API 文档说实话——有,但不太好找。Hermes 可以帮你查。
比如我需要用「生物识别登录」功能,直接问:
我:鸿蒙里怎么做指纹认证?
Hermes:HarmonyOS 的指纹认证通过 userAuth 模块实现…
它甚至能帮你查到具体的 .d.ts 文件里的签名,不用自己去翻文档。
场景 3:调试报错
我:编译报错 H1001,Repeat 列表渲染不更新
Hermes:这个错误在 harmonyos-arkts-rules 技能里有记录。
原因是 @Builder 参数传值不触发 UI 重渲染,
改成引用传递 @ComponentV2 + @Param 即可。
它真的能记住。因为它之前帮你处理过的类似问题,已经被记录到技能里了。
场景 4:重构代码
我:我想把 ChatListView 拆成 CardBuilder 和 EntryContentGenerator
Hermes:好,我先分析当前 ChatListView 的依赖关系…
然后按模块拆分,每拆一个编译一次验证。
它会严格按照你「边改边编译」的习惯来,不会一次改一堆文件让你去解编译错误。
四、这些功能为什么重要
你可能会想:这不就是高级点的 ChatGPT 吗?
区别在于三个字——上下文。
- ChatGPT:你跟它聊一个项目,每次重新开窗口,它不记得你的代码
- Claude Code:有文件上下文,但每次会话是独立的
- Hermes:它记得你的项目结构、你的编码习惯、你踩过的坑、你偏好的工作方式。而且这些记忆跨会话持续存在。
这就是为什么它"越用越好用"。用了一个月之后,你不用再跟它说「用 ArkTS 组件规范写」,它自动就会。
五、费用统计(很多人在意的点)
说实话,我第一个月花了大概 100 块。
因为踩了不少坑——不懂的时候用 web 搜索搜了好多次计费服务、试过不同模型、让 AI 建过项目框架浪费了很多 token。
但如果你按照我上面写的方案走——自建 SearXNG 免搜索费、本地 MCP 免查文档费、DevEco Studio 手动建项目免框架费——至少能省一半。
| 项目 | 我的实际 | 按方案优化后 |
|---|---|---|
| DeepSeek API | ~100 元/月(踩坑期) | ~50 元/月 |
| 文档搜索 | 0 元(自建 SearXNG) | 0 元 |
| SDK API 查询 | 0 元(本地 MCP) | 0 元 |
| Hermes Agent 本身 | 0 元(开源) | 0 元 |
| 合计 | ~100 元/月 | ~50 元/月 |
注意: DeepSeek 定价极低(以官网实时价格为准),按正常开发用量一个月充几十块足够用了。
把你踩过的坑绕过去,就是我写这篇的价值。
六、遇到问题怎么办
搭建过程中不可能一帆风顺。下面是我知道的求助渠道:
| 渠道 | 地址 | 适合问 |
|---|---|---|
| Hermes Agent GitHub Issues | github.com/NousResearc… | Hermes 自身 bug、功能建议 |
| Hermes Agent Discord | 在 GitHub 仓库 README 里找链接 | 实时求助、社区交流 |
| SearXNG 官方文档 | docs.searxng.org | Docker 部署、引擎配置 |
| DeepSeek 开发者文档 | platform.deepseek.com | API Key、计费 |
| 鸿蒙开发者社区 | developer.huawei.com | SDK 安装、API 用法 |
最后一个建议: 这套环境不需要一次全部搭完。可以先装 Hermes + 配 DeepSeek,能用起来之后再慢慢加 SearXNG、MCP、技能。一点点来,别想一次性搞定所有。
「上一篇讲了为什么做这个App,这篇讲怎么搭环境。下一篇讲后端。」
下篇预告
下一篇我写:用 AI Agent 做全栈鸿蒙应用——AGC 认证 + CloudDB + 云函数一条龙。
这是 my-parents-helper 最核心的后端链路,从登录到数据存储到云函数调用,Hermes 实际帮我完成的全过程。
关注我 seal_._jing,一起见证一个 44 岁独立开发者的鸿蒙 App 诞生之路。
发布时间:2026年6月
作者:seal_jing,一个被裁后自己写 App 的中年程序员