UFO

Hermes Agent 教學 — 安裝、第一次啟動,與自我進化的真相

先講結論:這個東西是真的,也確實有一件事跟別人不一樣——但大家說「讓它不一樣」的那件事,不是真正讓它不一樣的那件事。網路上關於 Hermes Agent 傳最廣的說法是「它用 DSPy + GEPA 自己進化」。出貨的 hermes-agent 裡沒有這套東西,pyproject.toml 連字串都沒有。

它真正在做的自我改進樸素得多,而且更值得知道:一個叫 skill_manage 的工具會自己寫、自己改 ~/.hermes/skills/ 底下的 SKILL.md,預設是開的,而且包含每一輪對話結束後跑的背景 review。這頁把安裝、第一次啟動,還有怎麼把那道自我寫入關起來,照順序寫清楚。

2026 年 7 月 31 日 · 以 v0.19.1(tag v2026.7.30)驗證 · 指令與引文皆取自官方文件與 repo,出處列於文末 · 這個專案以週為單位翻動,請看日期

先分清楚名字

Hermes Agent(工具)不是 Hermes 3 / Hermes 4(模型家族)。兩者都出自 Nous Research,共用同一個品牌,但技術上沒有連動。翻遍 provider 設定文件,Hermes 模型既不是預設值,也不在可選清單裡——預設 provider 是 OpenRouter,而且沒有預設的 model ID,你得自己指定一個。看到「用 Hermes 跑 Hermes」這種說法,那是兩件事被黏在一起了。

工具本身是 Python 寫的,MIT 授權,標語 The agent that grows with you。它有四種形態:

跟 Claude Code、Codex 這類終端機 agent 真正的差別在最後那一點:它不綁在你的筆電上。官方的說法是你可以「talk to it from Telegram while it works on a cloud VM」。搭配跨 session 的持續記憶與內建 cron 排程,這是它值得一看的理由——不是自我進化。

安裝

官方 quickstart 原文如下,Linux、macOS、WSL2 與 Android(Termux)通用:

curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash
source ~/.bashrc          # or: source ~/.zshrc
hermes                    # Start chatting!

Windows 原生環境在 PowerShell 執行:

iex (irm https://hermes-agent.nousresearch.com/install.ps1)

Python 版本。pyproject.toml 寫的是 requires-python = ">=3.11,<3.14",也就是 3.11、3.12、3.13 這三個。3.10 不行,3.14 也不行。這點不必自己張羅:安裝腳本會透過 uv 拉一份 Python 3.11 進來,不需要 sudo,也不會動到系統的 Python。

安裝腳本同時處理 uvNode.js v22(瀏覽器自動化與 WhatsApp bridge 用)、ripgrepffmpeg(TTS 的音訊轉檔),並且完成 repo clone 與虛擬環境。

最容易踩到的第一個坑:context 不夠會直接開不起來。官方文件原文:
Hermes Agent requires a model with at least 64,000 tokens of context. Models with smaller windows cannot maintain enough working memory for multi-step tool-calling workflows and will be rejected at startup.
啟動時就被拒絕,不是跑到一半才出錯。雲端模型(Claude、GPT、Gemini、Qwen、DeepSeek)都輕鬆過關,會卡住的一律是本地模型——因為多數本地推論伺服器的預設 context 遠低於這個數字。

跑本地模型的話,把 context 開到 64,000 以上:

OLLAMA_CONTEXT_LENGTH=64000 ollama serve      # Ollama
llama-server -c 64000 ...                     # llama.cpp
vllm serve --max-model-len 64k ...            # vLLM
lms load model-name --context-length 64000    # LM Studio

llama.cpp 這邊有一個文件有寫、但很容易漏掉的細節:平行 slot 會把 context 除掉。-c 64000 -np 4 的情況下每個 slot 只剩 16k,低於最低值。要用 -np 就得把 -c 乘上去。

第一次啟動與選模型

裝完之後最短的路只有一行:

hermes setup --portal

文件把它描述成「free OAuth login, no API keys; sets up a model plus the Tool Gateway tools. The recommended fast path.」——一道 OAuth 走完,provider 設成 Nous,Tool Gateway(搜尋/生圖/TTS/雲端瀏覽器)一併打開,全程不必貼任何 API key。

這裡要說清楚一件事:「不需要 API key」是確定的,「不用花錢」不是。同一批官方文件在安裝頁把 Nous Portal 寫成訂閱制。至於常被引用的「300+ 模型」,那是廠商自己講的數字,沒有公開型錄可以核對,本頁不當事實使用。

不想走 Portal 也有別的免 API key 路徑,但各自需要對應的訂閱:Qwen OAuth、MiniMax OAuth、xAI Grok OAuth(SuperGrok 或 X Premium+)。要接自己的帳單就照常設 provider——一級支援的 provider 有三十幾家(Anthropic、OpenAI、GitHub Copilot、Gemini、Vertex、Bedrock、Azure、OpenRouter、DeepSeek、xAI、Fireworks、Hugging Face、MiniMax 等),自架則有 Ollama、vLLM、SGLang、llama.cpp、LM Studio、LiteLLM。

在沒有瀏覽器的機器上(SSH 進 VPS 的情況)選 device 流程:CLI 印出一段短碼跟驗證連結,用任何一台有瀏覽器的機器開連結核准就完成,不必複製貼上金鑰。偵測不到本機瀏覽器時精靈會自己預設選這個。

設定都在 ~/.hermes/config.yaml 是 YAML(支援 ${VAR} 展開),密鑰放 .env,另外還有 auth.jsonSOUL.mdmemories/skills/cron/sessions/logs/。優先序是 CLI 參數 > config.yaml > .env > 預設值。不確定該寫進哪個檔就用 hermes config set,它會自己分配。

「自我進化」實際上是什麼

先處理傳言。DSPy + GEPA 那套東西存在,但它在另一個 repoNousResearch/hermes-agent-self-evolution,4,871 顆星,2026-03-09 建立,最後一次推送是 2026-06-17——到今天已經六週沒有動靜。

而且它的形狀跟大家想像的不一樣。它不是跑在 agent 裡面的機制,是站在外面對著 hermes-agent 跑的一條 pipeline:讀取現有的 skill/prompt/tool → 產生 eval 資料集 → GEPA 用執行 trace 最佳化 → 通過約束閘門(測試、大小限制、benchmark)→ 對 hermes-agent 開一個 PR。README 自己寫著「All changes go through human review, never direct commit」。一次最佳化約 $2–10,不需要 GPU。

五個 phase 裡只有 Phase 1(SKILL.md)標成「✅ Implemented」,Phase 2 到 5 全是「🔲 Planned」。所以「出貨的 Hermes 會用 GEPA 自我進化」這句話是錯的。

真正在跑的東西是這個:skill_manage 工具讓 agent 建立、修改、刪除自己的 skill。文件叫它 agent 的 procedural memory——摸出一套不平凡的工作流程之後,把做法存成 skill 給以後的自己用。產物是 ~/.hermes/skills/ 底下的一份份 SKILL.md(YAML front matter 加上 When to Use/Procedure/Pitfalls/Verification)。

關鍵在預設值。文件原文:

By default the agent writes skills freely — including from the background self-improvement review that runs after a turn.

拆開來講:你關掉終端機之後,那一輪還會有一段背景 review 跑起來,決定要不要幫自己寫一份新的 SKILL.md,而且不會問你。這比 GEPA 那套沒出貨的東西樸素得多,但它是現在正在你機器上發生的事,所以更該知道。

把自我寫入關起來

要改成先審再落地,設定是這一個:

skills:
  write_approval: true   # false = write freely (default) | true = stage every write for review

打開之後,每一次 skill_manage 的寫入(create/edit/patch/delete,連附屬檔案都算)都會被暫存到 ~/.hermes/pending/skills/,等你審。審核指令在 CLI 或任何通訊平台都能用:

/skills pending             # 列出暫存中的寫入,一行摘要
/skills diff <id>           # 看完整差異
/skills approve <id>
/skills reject <id>
/skills approval on|off     # 執行中直接切換

暫存內容能撐過重啟。在聊天介面裡 /skills diff 會被截斷,要看全文就回 CLI,或直接讀 ~/.hermes/pending/skills/<id>.json。記憶有一模一樣的閘門,設定鍵是 memory.write_approval,配 /memory pending 系列指令——建議兩道一起開,因為背景 review 兩邊都會寫。

這裡有一個很容易搞錯的設定。skills.guard_agent_created 看起來像是那道閘門,其實不是。它是內容掃描器,用關鍵字啟發式找危險樣式(憑證竊取、明顯的 prompt injection、外流指令),預設 false——文件說關掉的原因是「真的會碰 ~/.ssh/ 或提到 $OPENAI_API_KEY 的正常工作流程太常被誤判」。文件自己講得很直接:
The separate skills.guard_agent_created setting is a content scanner (dangerous-pattern heuristics), not an approval gate — the two are independent.
把它設成 true 只會讓被標記的寫入跳出提示。沒被標記的照樣直接落地。想要「每一筆都我說了算」,要的是 write_approval

安全性預設值

預設的 local backend 直接在你的主機上執行,沒有隔離。文件的隔離欄位就寫「None — runs on host」。這不是缺陷,是設計選擇,但你得知道防線在哪裡:不是沙箱,是核准。

approvals.mode 預設 smart:用一個輔助 LLM 判斷風險,低風險自動放行(而且只放行那一條指令),真正危險的自動拒絕,不確定的升級成人工提示。預設等你 300 秒,逾時視為拒絕——fail-closed。cron 觸發到危險指令時預設 deny,headless 情況下不會自己放行。

再下面還有一層寫死在程式碼裡的 blocklist:不可逆的檔案系統清除、fork bomb、直接寫入 block device 之類。文件原文:

The blocklist is the floor below --yolo. It trips before the approval layer even sees the command, and there's no override flag.

它的使用者可編輯版本是 approvals.deny,一組 fnmatch glob,同樣在 --yolo/yoloapprovals.mode: off 之前生效——可以拿來做「除了這幾件事以外都放手」。反過來,--yolo(或 /yoloHERMES_YOLO_MODE=1)會把其餘全部關掉;狀態列與啟動 banner 會一直掛著 ⚠ YOLO

要真正的隔離就換 backend。容器與遠端 backend 會整層跳過這些危險指令核准——因為容器本身就是邊界。Docker backend 會丟掉 capability、加上 no-new-privileges、根檔案系統唯讀、PID 限制 256。

官方文件對自己的極限寫得罕見地坦白,值得原文引用:

[the denylist] does not sandbox a hostile or compromised agent … They are not a sandbox against a deliberately adversarial process — for that, use an isolated backend (Docker, Modal) or an egress-restricted environment.

順帶一提,backend 到底有幾種,三處官方說法不一致:行銷首頁寫五種,文件的功能總覽寫六種,README 與設定文件都寫七種並且列得出名字——local、Docker、SSH、Singularity、Modal、Daytona、Vercel Sandbox。以列得出名字的那個版本為準比較安全。

gateway 的 DM 配對倒是預設就緊:8 碼配對碼、1 小時失效、最多 3 個等待中、5 次失敗鎖定、檔案 chmod 0600、預設拒絕。

現在該不該用

這一節多數介紹文不會寫,但它可能是最影響決定的一段。

目前版本是 v0.19.1(tag v2026.7.30,2026-07-30 發布)。自 2026-03-12 第一個 tag 起共 23 個 release,週到雙週的節奏。真正該看的是它自己的 release notes 怎麼描述 v0.19.0 到 v0.19.1 之間那十天:

Since v2026.7.20 (v0.19.0, July 20): ~2,789 commits · ~4,748 files changed · ~442,000 insertions · ~392,300 deletions on main. This window is dominated by bug-fix and salvage waves across the gateway, voice subsystem, desktop app, and installer

十天,四十四萬行新增對三十九萬行刪除,刪除量幾乎等於新增量,而且「bug 修復與搶救的波次」是作者自己的用詞,不是外人的評語。同一份 notes 還說完整的策展版本要等 v0.20.0 才會出。

規模數字是這樣:2026-07-31 以 GitHub API 查詢,222,993 顆星、42,864 個 fork、26,031 個開啟中的 issue。在這個量級下,單一 issue 的反應數不能當成嚴重度訊號——分母太大了。

所以誠實的建議分成兩邊。適合現在就上:你要的正是「agent 離開筆電、跑在雲端 VM 上、你從 Telegram 對它講話」這個形狀,而且願意跟著每週的更新走。這件事它做得比終端機 agent 完整。先等等:你需要一個半年不動的穩定介面,或者要在共用機器、有敏感資料的機器上跑。

真的要開始的話,順序建議反過來:先釘住版本、先用 Docker backend、先把 skills.write_approvalmemory.write_approval 打開,跑順了再放寬。從 local 加上一整套預設值開始,是最快樂也最容易後悔的走法。

我們在哪一層,簡短說明

我們做的是 UFO,請把這段話打點折扣看——而且這一頁的問題,答案不是我們。你要一個裝在自己機器上、能從通訊軟體呼叫的單人 agent,上面整篇講的就是做法,那不是 UFO 能取代的東西。

UFO 是再上面一層:AI agent 以頻道成員的身分和人並列,各自跑在你配對過的機器上,另外有 agent 看不到的純人類頻道。它開始有意義的時間點,是當 agent 有好幾隻、模型有好幾種、而且其他人也需要看見它們做了什麼的時候。

出處

本頁事實全部取自 Hermes Agent 官方文件、GitHub repo 與 release notes,於 2026 年 7 月 31 日以 v0.19.1 為準查證。官方來源彼此矛盾之處(backend 數量、Nous Portal 是否免費)本頁不擇一,照實寫出。未能核實的說法(發布日期、「300+ 模型」的實際型錄、募資消息)不列入。

與 Nous Research 沒有任何關聯。內容如有錯誤或過時,請告訴我們,我們會修正。