Hermes Agent 生態系教學手冊(Enterprise Edition)

版本:v0.13.0(v2026.5.7 — The Tenacity Release)
適用對象:資深工程師 / 架構師 / DevOps 團隊
授權:MIT License
官方網站hermes-agent.nousresearch.com
GitHubgithub.com/NousResearch/hermes-agent
官方文件hermes-agent.nousresearch.com/docs
Skills Hubagentskills.io
LLM 友善文件llms.txt / llms-full.txt
最後更新:2026 年 5 月 12 日


📑 目錄


第一章:Hermes Agent 概述

1.1 技術背景與發展

Hermes Agent 是由 Nous Research 開發的開源自我改進 AI Agent。Nous Research 是知名的 AI 研究實驗室,以訓練 Hermes、Nomos、Psyche 等開源模型聞名。

發展歷程

版本日期重要里程碑
v0.1.02026.02初始開源發佈,核心 Agent Loop 與 Learning Loop
v0.2.02026.03.12多平台 Gateway(Telegram/Discord/Slack/WhatsApp/Signal/Email/Home Assistant)、MCP Client、Skills 生態系、CLI 皮膚引擎、3,289 測試
v0.3.02026.03.17統一串流架構、Plugin 系統、Native Anthropic Provider、Voice Mode、ACP IDE 整合、Smart Approvals
v0.4.02026.03.23OpenAI-compatible API Server、6 新通訊平台(Signal/DingTalk/SMS/Mattermost/Matrix/Webhook)、MCP OAuth 2.1、@ 上下文參考、Gateway Prompt Caching
v0.5.02026.03.28Hugging Face Provider、Nix Flake、供應鏈安全強化(移除 litellm)、Plugin Lifecycle Hooks、Telegram Private Chat Topics
v0.6.02026.03.30Profiles 多實例隔離、MCP Server Mode、Docker 容器、Fallback Provider Chain、Feishu/WeCom 平台
v0.7.02026.04.03Pluggable Memory Provider、Credential Pool 輪替、Camofox 反偵測瀏覽器、Inline Diff Preview、Secret Exfiltration Blocking
v0.8.02026.04.08背景任務自動通知、Live Model Switching、Google AI Studio(Gemini)、Smart Inactivity Timeout、MCP OAuth 2.1 PKCE、209 PRs
v0.9.02026.04.13Web Dashboard、Fast Mode(/fast)、iMessage(BlueBubbles)、WeChat/WeCom Callback、Termux/Android 支援、hermes backup/import、16 平台、487 commits
v0.10.02026.04.16Nous Tool Gateway(付費訂閱用戶自動取得 Web Search/Image Gen/TTS/Browser 工具,零額外 API Key)
v0.11.02026.04.23Ink TUI 全面重寫、Transport ABC 架構、Native AWS Bedrock、5 新推理路徑(NVIDIA NIM/Arcee AI/Step Plan/Gemini CLI OAuth/Vercel AI Gateway)、GPT-5.5 via Codex OAuth、QQBot(第 17 平台)、Plugin 大幅擴展、/steer 中途導引、Shell Hooks、Orchestrator 子代理、1,556 commits
v0.12.02026.04.30Autonomous Curator(自動技能維護 Agent)、Self-improvement Loop 大幅升級(rubric-based)、5 新 Provider(LM Studio / GMI Cloud / Azure AI Foundry / MiniMax OAuth / Tencent Tokenhub)、Pluggable Gateway Platforms、Microsoft Teams(第 19 平台)、Tencent 元宝(第 18 平台)、Spotify 原生整合(7 工具 + PKCE OAuth)、Google Meet Plugin、ComfyUI v5 內建、Piper 本地 TTS、hermes -z 單次模式、Models Dashboard Tab、Remote Model Catalog、Cold-start 效能提升 ~57%、Langfuse 可觀測性 Plugin、1,096 commits
v0.13.02026.05.07Multi-agent Kanban(持久多 Agent 協作看板:心跳 / 回收 / 殭屍偵測 / 重試預算 / 幻覺閘門)、/goal(跨回合持久目標 — Ralph Loop)、video_analyze 原生影片理解工具、xAI Custom Voices 語音克隆 TTS、Google Chat(第 20 平台)+ 通用平台 Plugin Hooks、Sessions 自動恢復(Gateway 重啟後對話復原)、8 項 P0 安全修正(Secret Redaction 預設開啟、Discord 角色白名單 Guild 隔離 CVSS 8.1、WhatsApp 預設拒絕陌生人、TOCTOU 修正)、Checkpoints v2(狀態持久化重寫 + 真正修剪 + 磁碟護欄)、Post-write Delta Lint(write_file + patch 後自動 lint:Python/JSON/YAML/TOML)、no_agent Cron 模式(純腳本看門狗)、Platform Allowlistsallowed_channels/chats/rooms 全平台)、ProviderProfile ABC(Provider 可插拔化)、API Server X-Hermes-Session-Key(記憶 Session 隔離)、MCP SSE Transport + OAuth 轉發Curator 新子指令archive / prune / list-archived / 同步 run)、ACP /steer + /queue(VS Code/Zed/JetBrains)、Dashboard 升級(Plugins 頁 / Profiles 頁 / 可排序分析表 / 反向代理 X-Forwarded-Prefix / default-large 18px 主題)、SearXNG 原生搜尋後端 + 分離式 Web 工具(搜尋/擷取/瀏覽各自選擇後端)、OpenRouter Response Caching[[as_document]] Skill 媒體路由指令transform_llm_output Plugin Hook7 語言 i18n(中/日/德/西/法/烏/土)、Native Windows 早期測試版(PowerShell 安裝腳本)、6 新 Optional Skills(Shopify / here.now / shop-app / Anthropic 金融服務 / kanban-video-orchestrator / searxng-search)、新模型(DeepSeek v4 Pro / Grok 4.3 / Owl Alpha / tencent hy3-preview / Arcee Trinity Large Thinking)、100 新 CLI 啟動提示、864 commits / 588 PR / 295 貢獻者

核心數據(截至 2026.05.12):

  • GitHub Stars:145,000+
  • Contributors:949+
  • Forks:22,800+
  • 主要語言:Python 88.0%、TypeScript 8.9%
  • 授權:MIT License(可商用)
  • 累計 Releases:12 個(v0.1.0 — v0.13.0)

1.2 與傳統 AI 的差異

graph LR
    subgraph "傳統 AI(ChatGPT 等)"
        A[使用者輸入] --> B[單次推理]
        B --> C[回應輸出]
        C --> D[無學習/無記憶]
    end
    
    subgraph "Hermes Agent"
        E[使用者輸入] --> F[規劃 Planning]
        F --> G[執行 Execution]
        G --> H[學習 Learning]
        H --> I[技能累積 Skill]
        I --> J[長期記憶 Memory]
        J --> F
    end
特性傳統 AI(ChatGPT)Hermes Agent
記憶僅單次對話跨對話長期記憶(FTS5 + Vector DB)+ Session Key 隔離
學習不會學習內建 Learning Loop,自動封裝技能 + Autonomous Curator
工具使用有限(Plugins/GPTs)70+ 內建工具 + MCP 擴展(SSE Transport + OAuth 轉發)
執行環境雲端沙箱本地 / Docker / SSH / Modal / Daytona / Singularity / Vercel Sandbox
多平台Web UI 為主CLI + TUI + 20+ 通訊平台(Telegram/Discord/Slack/Matrix/WhatsApp/Signal/Email/SMS/DingTalk/Feishu/WeCom/WeChat/BlueBubbles/Mattermost/Home Assistant/QQBot/Yuanbao/Microsoft Teams/Google Chat/Webhook 等)
語音有限Voice Mode(STT + TTS)支援 CLI / Telegram / Discord / Discord VC + xAI 語音克隆
模型綁定固定任意 OpenAI-compatible(200+ 模型)+ Provider 可插拔 ABC
多 Agent無原生支援Multi-agent Kanban 持久協作看板(心跳 / 回收 / 殭屍偵測)
持久目標僅單輪指令/goal 跨回合持久目標(Ralph Loop)
國際化僅介面語言7 語言 i18n(中/日/德/西/法/烏/土)
授權閉源MIT(可商用)
成本按月訂閱自控(用多少付多少 Token)
Windows 支援原生Native 早期測試版(PowerShell 安裝)+ WSL2 完整支援

1.3 Agent vs Workflow vs RPA 比較

維度AI Agent(Hermes)Workflow(Airflow 等)RPA(UiPath 等)
決策能力自主決策 + 學習人工定義流程人工錄製腳本
適應性高(動態調整)低(靜態 DAG)低(固定腳本)
學習能力從經驗中學習
處理非結構化任務擅長不擅長不擅長
開發效率自然語言描述任務需要寫 DAG 程式需要錄製/寫腳本
成本Token 為主伺服器資源License + 伺服器
最佳用途複雜、多步驟、需要判斷的任務固定批次流程重複性 UI 操作

1.4 核心設計理念

Hermes Agent 的核心設計理念可歸納為四大支柱:

1.4.1 Learning Loop(學習迴圈)

Agent 在完成複雜任務時,會自動分析過程、提取經驗,並封裝為可重用的 Skill。下次遇到類似問題時,Agent 會自動調用已學會的技能,效率逐步提升。

1.4.2 Skill System(技能系統)

  • 技能以 Markdown 格式存儲,可讀可編輯
  • 支援社群共享(agentskills.io
  • 技能在使用過程中自我改進
  • 與 Claude Code Skill 標準兼容

1.4.3 Persistent Memory(持久記憶)

  • 短期記憶:當前對話上下文
  • 長期記憶:跨對話持久記憶(MEMORY.md / USER.md)
  • 使用者建模:透過 Honcho 辯證式使用者理解
  • 多種記憶後端:內建、mem0、Supermemory、Honcho、Hindsight 等

1.4.4 Model Agnostic(模型無關)

  • 支援 OpenAI(含 GPT-5.5 via Codex OAuth)、Anthropic、Google AI Studio(Gemini)、OpenRouter(200+ 模型)
  • Nous Portal、z.ai/GLM、Kimi/Moonshot、MiniMax、Qwen(通義千問)、xAI(Grok)、Ollama
  • NVIDIA NIM(Nemotron)、Arcee AI、Hugging Face、GMI Cloud、Xiaomi MiMo、DeepSeek
  • AWS Bedrock(Native Converse API)、GitHub Copilot、Vercel AI Gateway
  • 任何 OpenAI-compatible API 端點
  • 即時切換模型 /model 指令,無需修改程式碼
  • xAI (Grok) 支援 Prompt Caching
  • Fast Mode(/fast):OpenAI Priority Processing + Anthropic Fast Tier
  • v0.13.0 新增模型:DeepSeek v4 Pro、xAI Grok 4.3、OpenRouter Owl Alpha(免費)、Tencent hy3-preview、Arcee Trinity Large Thinking(溫度 + 壓縮覆寫)
  • v0.13.0 Provider 可插拔化ProviderProfile ABC + plugins/model-providers/,第三方 Provider 無需修改核心程式碼即可接入
  • Nous OAuth 跨 Profile 持久化:共享 Token Store,一次登入所有 Profile 共享 Session
  • OpenRouter Response Caching:顯式快取控制(v0.13.0)

1.4.5 Voice Mode(語音模式)

v0.3.0 起新增完整語音互動能力:

  • CLI Voice Mode:在終端中即時語音對話
  • Telegram / Discord:語音備忘錄自動轉文字
  • Discord Voice Channel:即時語音通話
  • 支援多種 STT/TTS 提供者:OpenAI TTS/Whisper、ElevenLabs、MiniMax Speech 2.8、Voxtral Transcribe(Mistral AI)
  • Piper TTS(v0.12.0):完全離線本地 TTS
  • xAI Custom Voices(v0.13.0):語音克隆(voice cloning)TTS 提供者

1.4.6 Web Dashboard(v0.9.0+)

v0.9.0 新增本地 Web Dashboard,可透過瀏覽器管理 Hermes Agent:

  • 設定管理:圖形化設定 Provider、Model、Tools
  • Session 瀏覽:查看與搜尋所有對話歷史
  • Skills 管理:瀏覽、安裝、啟用/停用技能
  • Gateway 監控:管理訊息平台連線狀態
  • Plugin 擴展(v0.11.0):第三方 Plugin 可新增自訂 Tab、Widget
  • Models Tab(v0.12.0):豐富的每模型分析、從瀏覽器切換主模型 / 輔助模型
  • Dashboard Chat Tab(v0.12.0):xterm.js + JSON-RPC sidecar,可在瀏覽器中直接使用 CLI
  • Plugins 頁面(v0.13.0):管理、啟用/停用、查看認證狀態
  • Profiles 管理頁面(v0.13.0):多 Profile 統一管理
  • 可排序分析表格(v0.13.0):互動式欄位排序
  • default-large 主題(v0.13.0):18px 基礎字體大小
  • 反向代理支援(v0.13.0):透過 X-Forwarded-Prefix 支援 URL 前綴部署
  • Docker 啟動(v0.13.0):HERMES_DASHBOARD=1 環境變數可在 Docker 中啟動 Dashboard 為 Side-process
  • i18n 支援:英文 + 中文 + 土耳其文介面、行動裝置響應式設計

1.4.7 Transport 架構(v0.11.0+)

v0.11.0 引入可插拔的 Transport 抽象層,將格式轉換與 HTTP 傳輸從 Agent Core 解耦:

  • AnthropicTransport:Anthropic Messages API
  • ChatCompletionsTransport:OpenAI-compatible 預設路徑
  • ResponsesApiTransport:OpenAI Responses API + Codex
  • BedrockTransport:AWS Bedrock Converse API

1.4.8 Autonomous Curator(v0.12.0+)

v0.12.0 新增自動化技能維護 Agent,可自主管理技能庫:

  • 背景執行:透過 Gateway 的 Cron Ticker 運行,預設每 7 天執行一次
  • 技能評分:自動評估每個 Skill 的品質與使用頻率
  • 合併與清理:合併重複技能、清理長期未使用的技能
  • 報告產出:每次執行產生 logs/curator/run.json + REPORT.md
  • 安全防護:bundled / hub skills 受防護不會被修改,pinned skills 也不會被 curator 變更
  • 狀態查詢hermes curator status 依使用頻率排名技能(most-used / least-used)
  • 統一設定:透過 auxiliary.curator 配置,可從 Dashboard 管理
  • 新子指令(v0.13.0):hermes curator archive(歸檔)、hermes curator prune(修剪)、hermes curator list-archived(列出已歸檔)
  • 同步執行(v0.13.0):手動 hermes curator run 現為同步模式,即時回傳結果無需輪詢

1.4.9 Multi-agent Kanban(v0.13.0+)

v0.13.0 引入持久化多 Agent 協作看板系統,是企業級多 Agent 協作的核心架構:

  • 持久看板:durable multi-profile collaboration board,支援多專案看板(一次安裝,多個 Kanban)
  • Worker 生命週期管理:心跳監測(heartbeat)、工作回收(reclaim)、殭屍偵測(zombie detection)、自動阻擋未完成退出的 Worker
  • 可靠性保障:每任務 max_retries 覆寫、統一的失敗計數器(spawn/timeout/crash)
  • 幻覺閘門:hallucination gate + recovery UX,防止 Worker 聲稱完成了未建立的任務卡
  • Dashboard 整合:Kanban Dashboard 含工作區種類/路徑輸入、每平台 Home-channel 通知切換、任務拖放→執行
  • 跨 Profile 共享:看板、工作區、Worker 日誌可跨 Profile 分享
  • 通用診斷引擎:任務痛苦信號(distress signals)的通用診斷機制
  • Worker 任務所有權:對破壞性工具呼叫強制驗證 Worker 任務所有權
# config.yaml — Kanban 設定範例
kanban:
  enabled: true
  multi_project: true
  max_retries: 3
  heartbeat_interval: 30  # 秒
  zombie_timeout: 300     # 秒
  hallucination_gate: true

1.4.10 Persistent Goals(v0.13.0+)

v0.13.0 引入 /goal 指令,讓 Agent 鎖定目標並跨回合追蹤完成度(Ralph Loop):

  • 跨回合持久:目標不會因對話分頁或 Session 邊界而遺失
  • 目標 Turn Budget:可設定目標允許的最大回合數
  • Ralph Loop:以 Agent-as-action-item 概念將學習迴圈提升為一級原語(first-class primitive)
# 使用 /goal 設定持久目標
> /goal 重構所有 API endpoints 為 RESTful 風格,並撰寫完整測試

# Agent 會持續追蹤進度,跨回合記錄
# 即使中途切換話題,/goal 會在每次對話開始時提醒目標進度

1.4.11 Post-write Delta Lint(v0.13.0+)

v0.13.0 為 write_filepatch 工具新增自動語法檢查,語法錯誤在寫入當下立即浮出,不再向下游傳遞:

  • 支援語言:Python、JSON、YAML、TOML
  • 增量檢查:僅檢查變更的部分(delta),效能影響極小
  • 即時回饋:語法錯誤立即顯示在工具輸出中,Agent 可自動修正

1.4.12 i18n 多語言支援(v0.13.0+)

v0.13.0 將靜態 Gateway + CLI 訊息翻譯為 7 種語言:

  • 支援語言:中文(zh)、日文(ja)、德文(de)、西班牙文(es)、法文(fr)、烏克蘭文(uk)、土耳其文(tr)
  • 設定方式display.language 配置項
  • 文件站:Docs 站新增中文簡體(zh-Hans)語言環境

實務案例:某金融團隊將 Hermes Agent 部署在內部 VPS,使用 Anthropic Claude 作為主模型處理程式碼審查,搭配免費的 MiMo v2 Pro(Nous Portal)進行摘要與壓縮,Token 成本降低 60%。


第二章:整體系統架構

2.1 架構設計概述

Hermes Agent 採用分層架構設計,從前端展示層到底層資料層,每一層都具備可替換和可擴展的特性。以下是企業級部署時的完整架構設計。

2.2 分層架構圖

graph TB
    subgraph "Presentation Layer(展示層)"
        CLI[Terminal CLI
TUI 界面(Ink 重寫)] TG[Telegram Bot] DC[Discord Bot] SK[Slack Bot] WA[WhatsApp] SG[Signal] MX[Matrix] MT[Mattermost] FS_P[Feishu / DingTalk / WeCom] WX[WeChat / iMessage] QQ[QQBot] YB[Yuanbao / Teams] GC[Google Chat] EM[Email / SMS] HA[Home Assistant] WEB[Web API
REST/SSE] DASH[Web Dashboard
React SPA] end subgraph "API Gateway Layer(閘道層)" GW[Hermes Gateway
消息路由 / 認證 / 限流] ACP[ACP Adapter
VS Code / JetBrains / Zed] end subgraph "Agent Layer(代理層)" CORE[Agent Core
Planning / Execution / Loop] SUB[Subagent Pool
平行委派] SKILL[Skill Engine
技能載入 / 自動建立] PLUG[Plugin System
Honcho / Hindsight / RetainDB] end subgraph "Memory Layer(記憶層)" STM[Short-term Memory
Context Window] LTM[Long-term Memory
MEMORY.md / USER.md] FTS[FTS5 Session Search
跨對話搜尋 + Trigram CJK] VDB[(Vector DB
mem0 / Supermemory)] UDB[(User Model
Honcho Dialectic)] end subgraph "Tool Layer(工具層)" TERM[Terminal Backends
Local/Docker/SSH/Modal/Daytona/Vercel] BROW[Browser Engine
Playwright / Camofox] FILE[File Tools
讀寫/搜尋/壓縮] WEB_TOOL[Web Tools
搜尋/擷取/Vision] MCP_T[MCP Servers
外部工具擴展] CRON[Cron Scheduler
排程自動化] end subgraph "Data Layer(資料層)" SQLITE[(SQLite
Sessions / Config)] FS_D[(File System
Skills / Memories)] EXT[(External APIs
LLM Providers)] end CLI --> GW TG --> GW DC --> GW SK --> GW WA --> GW SG --> GW MX --> GW MT --> GW FS_P --> GW WX --> GW QQ --> GW YB --> GW GC --> GW EM --> GW HA --> GW WEB --> GW DASH --> GW ACP --> CORE GW --> CORE CORE --> SUB CORE --> SKILL CORE --> PLUG CORE --> STM CORE --> LTM CORE --> FTS PLUG --> VDB PLUG --> UDB CORE --> TERM CORE --> BROW CORE --> FILE CORE --> WEB_TOOL CORE --> MCP_T CORE --> CRON STM --> SQLITE LTM --> FS_D SKILL --> FS_D CORE --> EXT

2.3 各層級說明

2.3.1 Presentation Layer(展示層)

組件說明連線方式
Terminal CLI / TUI完整 TUI(v0.11.0 Ink 重寫),支援多行編輯、斜線指令自動完成、串流工具輸出、OSC-52 剪貼簿、LaTeX 渲染(v0.12.0)、冷啟動提升 57%本地 stdin/stdout
Web DashboardReact SPA 本地管理介面,設定/Session/Skills/Gateway 管理、Plugin 擴展 TabHTTP(localhost)
Telegram Bot群組/私訊/Forum Topic、語音轉文字、Emoji 審批按鈕、Webhook ModeTelegram Bot API
Discord Bot原生 Slash Commands、頻道控制、Interactive Model Picker、Voice ChannelDiscord Gateway
Slack BotThread 自動回覆、mrkdwn 格式、互動審批按鈕、Multi-Workspace OAuthSlack Events API
WhatsApp透過 WhatsApp Business API 對接Webhook
Signal全 MEDIA 標籤交付(圖片/語音/影片)signal-cli
MatrixTier 1 支援:Reactions、Read Receipts、E2EE、Room Management、CJK 輸入Matrix Client
Mattermost檔案附件交付、訊息串接Mattermost API
Feishu(飛書)互動卡片審批按鈕、ACL 控制、自動重連Feishu Open API
DingTalk(釘釘)企業機器人整合DingTalk API
WeCom(企業微信)企業應用整合、Callback ModeWeCom API
WeChat(微信)Native WeChat via iLink Bot API、Streaming Cursor、Media UploadWeChat API
BlueBubbles(iMessage)macOS 原生 iMessage 整合、Auto-WebhookBlueBubbles API
QQBotQQ 官方 API v2、QR 掃碼設定、Streaming Cursor、DM/Group 管控QQ Official API
Email電子郵件收發整合SMTP/IMAP
SMS簡訊通知交付Twilio / SMS API
Home Assistant智慧家庭整合、語音助理Home Assistant API
Webhook通用 Webhook 接收/推送、Direct-Delivery Mode(v0.11.0)HTTP Webhook
Web APIREST + SSE 串流,可做自訂前端HTTP/SSE
Tencent 元寶騰訊元寶平台整合(v0.12.0 第 18 平台)Pluggable Gateway
Microsoft TeamsTeams 對話整合(v0.12.0 第 19 平台)、Sidebar + Threading + 群聊回退Pluggable Gateway
Google ChatGoogle Chat 整合(v0.13.0 第 20 平台)+ 通用 env_enablement_fn / cron_deliver_env_var Platform-Plugin HooksPluggable Gateway

2.3.2 API Gateway Layer(閘道層)

Gateway 是 Hermes 的消息路由核心,負責:

  • 認證與授權:DM Pairing、allowed_users 白名單
  • 限流與超時:基於活動的智慧超時(非掛鐘計時)
  • 訊息去重:防止重複投遞
  • 多平台路由:統一介面分發到各平台
  • 審批機制:危險指令需透過 /approve 或平台原生按鈕確認
  • Platform Allowlists(v0.13.0):allowed_channels / allowed_chats / allowed_rooms 跨 Slack / Telegram / Mattermost / Matrix / DingTalk
  • Session 自動恢復(v0.13.0):Gateway 重啟後自動恢復中斷的對話
  • 通用 Platform-Plugin Hooks(v0.13.0):env_enablement_fn + cron_deliver_env_var,IRC 與 Teams 已遷移至此機制

2.3.3 Agent Layer(代理層)

組件職責
Agent Core核心循環:接收 → 規劃 → 工具呼叫 → 評估 → 回應
Subagent Pool隔離子代理,支援平行工作流
Skill Engine載入已有技能、複雜任務後自動建立新技能
Plugin System擴展記憶 / CLI / API Hook,如 Honcho、Hindsight

2.3.4 Memory Layer(記憶層)

類型實作用途
Short-termContext Window當次對話上下文管理,支援 /compress 壓縮
Long-termMEMORY.md / USER.md持久化知識、使用者偏好
Session SearchFTS5 + LLM Summarization跨對話搜尋與摘要
Vector DBmem0 / Supermemory語義搜尋、多容器記憶
User ModelHoncho Dialectic辯證式使用者理解與信任分數

2.3.5 Tool Layer(工具層)

Hermes 內建 68+ 工具,分為以下類別:

類別工具說明
Terminalexecute_command, execute_code7 種後端:Local, Docker, SSH, Modal, Daytona, Singularity, Vercel Sandbox
Browserbrowser_open, browser_navigate, browser_consolePlaywright / Camofox 反偵測 / Browser Use 託管 / Firecrawl 雲端 / Lightpanda(v0.12.0)
Fileread_file, write_file, search_files檔案讀寫、搜尋、.zip 文件支援
Webweb_search, web_extract網頁搜尋與內容擷取、Vision 圖像分析、SearXNG 搜尋後端(v0.12.0)
MCP任意 MCP 伺服器OAuth 2.1 PKCE 認證,OSV 惡意軟體掃描
Croncron_add, cron_list, cron_remove自然語言排程,多平台投遞,Per-job workdir(v0.12.0)
Delegationdelegate_task委派子代理執行平行任務
Voicevoice_transcribe, voice_synthesizeSTT/TTS 語音轉文字與文字轉語音

2.3.6 Data Layer(資料層)

儲存技術存放內容
SQLite內建Session 歷史、設定、Cron 排程
File System~/.hermes/Skills、Memories、SOUL.md、Logs
External APIsHTTP/gRPCLLM Provider(OpenAI / Anthropic / OpenRouter 等)

2.4 多 Agent 協作架構

sequenceDiagram
    participant User as 使用者
    participant Main as Main Agent
    participant Sub1 as Subagent-1(Research)
    participant Sub2 as Subagent-2(Coding)
    participant Sub3 as Subagent-3(Testing)
    participant Tools as Tool Layer

    User->>Main: 複雜任務請求
    Main->>Main: 規劃(Task Decomposition)
    
    par 平行委派
        Main->>Sub1: 研究任務
        Sub1->>Tools: web_search / web_extract
        Sub1-->>Main: 研究結果
    and
        Main->>Sub2: 程式開發
        Sub2->>Tools: write_file / execute_code
        Sub2-->>Main: 程式碼
    end
    
    Main->>Sub3: 測試驗證
    Sub3->>Tools: execute_command(pytest)
    Sub3-->>Main: 測試結果
    
    Main->>Main: 整合、學習、技能封裝
    Main-->>User: 完成回報

關鍵特性

  • 隔離性:每個 Subagent 有獨立的 Context Window,不污染主 Agent
  • 零上下文成本:子代理執行結果以摘要形式回傳,不消耗主 Agent 的上下文
  • Credential 共享:子代理共享主 Agent 的 Credential Pool
  • Workspace 路徑提示:自動傳遞工作目錄給子代理

2.5 高可用與擴展性設計

graph TB
    subgraph "高可用架構"
        LB[Load Balancer
Nginx / HAProxy] subgraph "Agent Cluster" A1[Hermes Instance 1
Profile: default] A2[Hermes Instance 2
Profile: team-dev] A3[Hermes Instance 3
Profile: team-ops] end subgraph "Shared Storage" NFS[(NFS / S3
Skills + Memories)] DB[(PostgreSQL
Sessions)] REDIS[(Redis
Cache + Queue)] end subgraph "Model Providers" NP[Nous Portal
免費模型] OR[OpenRouter
200+ 模型] OA[OpenAI
GPT-5.5] AN[Anthropic
Claude] GG[Google AI Studio
Gemini] QW[Qwen / xAI
Grok] NV[NVIDIA NIM
Nemotron] BK[AWS Bedrock] LOCAL[Ollama
本地模型] end end LB --> A1 LB --> A2 LB --> A3 A1 --> NFS A2 --> NFS A3 --> NFS A1 --> DB A2 --> DB A3 --> DB A1 --> REDIS A1 --> NP A1 --> OR A2 --> OA A3 --> AN A3 --> LOCAL

企業級設計要點

  1. 多 Profile 隔離:使用 hermes --profile team-dev 啟動獨立實例,Memory 和 Skill 完全隔離
  2. Model Failover:Credential Pool 支援多個 Provider,主 Provider 失敗自動切換
  3. Serverless 選項:Daytona / Modal 後端,閒置時自動休眠,幾乎零成本
  4. Gateway 集中化:單一 Gateway 程序管理所有通訊平台連線

注意事項:Hermes Agent 目前不支援 Native Windows,企業部署請使用 Linux VM / WSL2 / Docker 容器。


第三章:Hermes Agent 核心機制解析

3.1 Learning Loop(學習迴圈)

Learning Loop 是 Hermes 最核心的差異化設計,使其成為唯一具備「自我改進」能力的開源 Agent。

graph TD
    A[接收任務] --> B[分析 & 規劃]
    B --> C[執行任務
呼叫工具鏈] C --> D{任務複雜度高?} D -->|是| E[自動回顧過程] E --> F[提取經驗模式] F --> G[封裝為 Skill] G --> H[存入技能庫] D -->|否| I[完成回應] H --> I I --> J[週期性 Nudge
提醒持久化知識] J --> K[更新 Memory] K --> A style E fill:#e1f5fe style F fill:#e1f5fe style G fill:#e1f5fe style H fill:#e1f5fe

學習迴圈的三個觸發時機

  1. 任務完成後:Agent 自動評估任務複雜度,對高複雜度任務進行回顧與封裝
  2. 週期性 Nudge:Agent 主動提醒自己持久化重要知識到 MEMORY.md
  3. 使用技能時:如果現有 Skill 在執行過程中發現改進點,會自動更新 Skill 內容

3.1.1 Self-improvement Loop 升級(v0.12.0)

v0.12.0 對 Learning Loop 進行大幅升級:

改進項目說明
Class-first Rubric基於分類評分標準評估 Skill 品質,取代簡單的數值評分
Active-update Bias偏好主動更新現有 Skill 而非建立新 Skill,減少重複
Fork InheritanceFork 的 Skill 自動繼承父 Skill 的執行統計資料
Scoped Toolset自我改進過程僅可存取 memory + skills 工具,不可執行系統指令
Autonomous Curator配合 3.7 節 Curator 自動維護技能庫品質

範例 — Skill 自動建立流程

使用者:幫我分析這個 Spring Boot 專案的安全漏洞

Agent 執行過程:
1. 讀取 pom.xml(了解依賴)
2. 搜尋已知 CVE
3. 掃描程式碼(SQL Injection / XSS 等)
4. 生成報告

Agent 自動回顧:
→ 這個任務涉及多步驟安全分析
→ 封裝為 Skill: "spring-security-audit"
→ 下次呼叫 /spring-security-audit 即可直接使用

3.2 Skill System(技能系統)

3.2.1 技能結構

每個 Skill 是一個目錄,包含一個 Markdown 指令檔:

~/.hermes/skills/
├── bundled/                    # 官方內建技能
│   ├── claude-code/
│   │   └── skill.md
│   ├── popular-web-designs/
│   │   └── skill.md
│   ├── gitnexus-explorer/
│   │   └── skill.md
│   ├── humanizer/              # v0.12.0: 去除 AI 文風
│   │   └── skill.md
│   └── spotify/                # v0.12.0: Spotify 整合技能
│       └── skill.md
├── user/                       # 使用者自建技能
│   ├── spring-security-audit/
│   │   └── skill.md
│   └── bank-api-generator/
│       └── skill.md
└── community/                  # 社群下載技能
    └── research-paper-writing/
        └── skill.md

3.2.2 Skill 範例

# spring-security-audit

## Description
掃描 Spring Boot 專案的常見安全漏洞,包括依賴 CVE、程式碼注入風險、認證配置問題。

## Steps
1. 讀取 pom.xml 或 build.gradle,列出所有依賴版本
2. 使用 web_search 查詢各依賴的已知 CVE
3. 掃描 src/ 目錄中的以下模式:
   - SQL String Concatenation(SQL Injection 風險)
   - @CrossOrigin 無限制(CORS 風險)
   - 硬編碼密碼或 API Key
4. 檢查 Spring Security 配置(SecurityFilterChain)
5. 生成安全報告(表格格式 + 嚴重度 + 修復建議)

## Config
- scan_depth: 3  # 掃描目錄深度
- severity_threshold: medium  # 最低報告嚴重度

3.2.3 技能管理指令

指令說明
/skills列出所有可用技能
/<skill-name>執行特定技能
/skills install <url>從 Skills Hub 安裝技能
/skills create手動建立新技能
自動建立Agent 複雜任務完成後自動封裝

3.2.4 Skills Hub(agentskills.io)

Hermes 支援 agentskills.io 開放標準,技能可在社群間分享與下載。每個技能都有版本控制、使用統計和評分。

3.3 Memory System(記憶系統)

Hermes 的記憶系統分為多層,從短期到長期,提供完整的知識持久化方案。

graph LR
    subgraph "Short-term(短期記憶)"
        CTX[Context Window
當前對話上下文] COMP[Context Compaction
Token 預算壓縮] end subgraph "Mid-term(中期記憶)" SESS[Session Search
FTS5 全文搜尋] SUM[LLM Summarization
跨對話摘要] end subgraph "Long-term(長期記憶)" MEM[MEMORY.md
核心知識] USER[USER.md
使用者偏好] SOUL[SOUL.md
Agent 人格] end subgraph "Plugin Memory(插件記憶)" M0[mem0
語義記憶] SM[Supermemory
多容器記憶] HC[Honcho
辯證式建模] HS[Hindsight
事後分析] end CTX --> COMP COMP --> SESS SESS --> SUM SUM --> MEM MEM --> USER CTX --> M0 CTX --> SM CTX --> HC CTX --> HS

3.3.1 記憶提供者比較

Provider類型適用場景特點
內建檔案個人 / 小團隊MEMORY.md + USER.md,零依賴
mem0Vector語義搜尋場景API v2 相容、Secret 遮蔽
SupermemoryVector多租戶 / 企業多容器支援、search_mode、identity template
Honcho辯證式個人化 Agent信任分數、Holographic Prompt
Hindsight事後分析學習增強事後回顧 + 記憶整理
RetainDB完整 DB大規模部署寫入佇列、檔案工具整合
OpenVikingAPI多租戶伺服器tenant-scoping headers
ByteRover同步即時查詢LLM 呼叫前同步查詢

3.3.2 記憶設定範例

# ~/.hermes/config.yaml
memory:
  provider: supermemory  # 或 mem0, honcho, builtin
  auto_save: true
  nudge_interval: 5      # 每 5 輪對話提醒一次持久化
  
  supermemory:
    containers:
      - name: project-knowledge
        description: "專案技術知識"
      - name: user-preferences  
        description: "使用者偏好與習慣"
    search_mode: hybrid    # keyword + semantic

3.4 Planning / Execution Flow

Hermes Agent 的核心執行流程如下:

stateDiagram-v2
    [*] --> Receive: 接收使用者訊息
    Receive --> Prefetch: Memory Prefetch
    Prefetch --> Plan: 規劃步驟
    Plan --> ToolCall: 呼叫工具
    ToolCall --> Execute: 執行工具
    Execute --> Evaluate: 評估結果
    
    Evaluate --> ToolCall: 需要更多工具
    Evaluate --> Respond: 完成
    
    Respond --> Learn: 學習(自動)
    Learn --> Nudge: 記憶 Nudge
    Nudge --> [*]
    
    Execute --> Approve: 需要審批
    Approve --> Execute: 使用者同意
    Approve --> Reject: 使用者拒絕
    Reject --> Plan: 重新規劃

關鍵機制說明

  1. Memory Prefetch:在 LLM 呼叫前,同步查詢記憶插件,注入相關上下文
  2. Tool Call Coercion:自動轉換工具呼叫參數類型(修正模型傳入字串而非數字的問題)
  3. Oversized Result Handling:過大的工具結果自動存檔,避免破壞性截斷
  4. Approval Gate:危險指令(如 rm -rfgit push --force)需使用者確認
  5. Context Compaction:上下文接近 Token 上限時,自動壓縮保留重要資訊

3.5 Tool Calling 機制

3.5.1 內建 Toolsets

Hermes 將工具組織為 Toolsets(工具集),可個別啟用或停用:

hermes tools                    # 列出所有工具集與狀態
hermes tools enable browser     # 啟用瀏覽器工具集
hermes tools disable delegation # 停用委派工具集
Toolset包含工具預設狀態
coreexecute_command, read_file, write_file, search_files, patch啟用
browserbrowser_open, browser_navigate, browser_console, browser_screenshot停用
webweb_search, web_extract啟用
delegationdelegate_task啟用
mcp外部 MCP 伺服器工具依設定
croncron_add, cron_list, cron_remove, cron_status啟用
codeexecute_code啟用
voicevoice_transcribe, voice_synthesize停用
spotifyspotify_play, spotify_pause, spotify_search 等v0.12.0 停用
kanbankanban_create, kanban_assign, kanban_status 等v0.13.0 啟用
videovideo_analyze(原生影片理解,Gemini + 相容多模態模型)v0.13.0 停用

3.5.2 MCP(Model Context Protocol)擴展

# ~/.hermes/config.yaml
mcp:
  servers:
    - name: github
      command: npx
      args: ["@modelcontextprotocol/server-github"]
      env:
        GITHUB_TOKEN: "${GITHUB_TOKEN}"
    - name: postgres
      command: npx
      args: ["@modelcontextprotocol/server-postgres"]
      env:
        DATABASE_URL: "${DATABASE_URL}"

安全特性

  • OAuth 2.1 PKCE 認證(v0.8.0 新增)
  • OSV 惡意軟體掃描(自動檢測 MCP 套件漏洞)
  • 工具過濾(可限制 MCP 伺服器暴露的工具)
  • SSE Transport(v0.13.0):支援 Server-Sent Events 傳輸協定 + OAuth 轉發
  • Stale-pipe 重試(v0.13.0):過期管道自動以 Session-expired 重試
  • 圖片結果交付(v0.13.0):MCP 工具的圖片結果以 MEDIA 標籤呈現(不再被丟棄)
  • 長連線 Keepalive(v0.13.0):_wait_for_lifecycle_event 定期心跳,防止連線超時
  • TOCTOU 修正(v0.13.0):MCP OAuth 憑證儲存的時間競爭視窗已關閉

3.5.3 Terminal Backends

後端連線方式適用場景
Local本地 Shell開發環境
DockerDocker API隔離執行
SSHSSH 連線遠端伺服器
DaytonaDaytona APIServerless(閒置休眠)
ModalModal APIGPU 計算 / Serverless
SingularityContainerHPC 環境
Vercel SandboxVercel API雲端沙箱執行

瀏覽器後端(v0.8.0 更新):

後端說明適用場景
Playwright本地 Chromium 瀏覽器一般網頁操作
Camofox反偵測 Firefox 瀏覽器需要反偵測的場景
Browser Use託管瀏覽器服務(取代 Browserbase)雲端瀏覽、免本地安裝
Firecrawl雲端網頁擷取服務大規模網頁爬取
# ~/.hermes/config.yaml
terminal:
  backend: docker
  docker:
    image: "python:3.11-slim"
    docker_env:
      PYTHONPATH: "/workspace"
    volumes:
      - "./project:/workspace"

3.6 Model Routing(多模型切換)

Hermes 的 /model 指令支援即時切換模型與 Provider(v0.5.0 引入,v0.8.0 大幅強化):

# CLI 切換
/model anthropic:claude-sonnet-4-20250514
/model openrouter:deepseek/deepseek-r1
/model nous:hermes-3-405b
/model google:gemini-2.5-pro
/model qwen:qwen-max
/model xai:grok-3

# 查看當前模型
/model

# 切換 Provider
hermes model   # 互動式選擇

3.6.1 Credential Pool 與 Failover

# ~/.hermes/config.yaml
providers:
  primary: anthropic
  fallback:
    - openrouter
    - nous
  
  anthropic:
    api_key: "${ANTHROPIC_API_KEY}"
    model: claude-sonnet-4-20250514
  
  openrouter:
    api_key: "${OPENROUTER_API_KEY}"
    model: anthropic/claude-sonnet-4-20250514
  
  nous:
    # OAuth 自動管理
    model: hermes-3-405b

# 輔助模型(壓縮 / Vision / 摘要)
auxiliary:
  provider: nous
  model: mimo-v2-pro  # 免費模型

3.6.2 Model Routing 策略

graph TD
    REQ[推理請求] --> PRI{Primary Provider
可用?} PRI -->|是| CALL1[呼叫 Primary] PRI -->|否| FB1{Fallback 1
可用?} FB1 -->|是| CALL2[呼叫 Fallback 1] FB1 -->|否| FB2{Fallback 2
可用?} FB2 -->|是| CALL3[呼叫 Fallback 2] FB2 -->|否| ERR[錯誤:無可用 Provider] CALL1 --> RES{回應成功?} CALL2 --> RES CALL3 --> RES RES -->|是| OK[返回結果] RES -->|402 付費失敗| RETRY[切換下一個 Provider] RES -->|429 限流| BACKOFF[指數退避 + Jitter 重試] RES -->|500 伺服器錯誤| RETRY RETRY --> FB1 BACKOFF --> REQ

關鍵特性

  • Aggregator-aware Resolution:透過 OpenRouter / Nous Portal 路由時,自動解析最佳模型
  • Payment Fallback:402 錯誤(餘額不足)自動切換下一個 Provider
  • Jittered Retry Backoff:避免多實例同時重試造成的 thundering herd
  • Stale OAuth Recovery:過期 OAuth Token 自動刷新(v0.8.0 修正)

最佳實踐:企業部署建議配置至少 2 個 Provider(Primary + Fallback),並使用免費的 Nous Portal mimo-v2-pro 作為輔助模型。這樣即使主 Provider 當機,Agent 仍可用 Fallback 持續運作。


3.7 Autonomous Curator(自動技能維護)

v0.12.0 引入的 Autonomous Curator 是一個背景運行的自動化 Agent,負責維護技能庫品質,確保 Skills 保持最新、精簡且高品質。

3.7.1 運作原理

graph TD
    CRON["Cron Ticker
(每 7 天觸發)"] --> SCAN["掃描所有 Skills"] SCAN --> GRADE["評分每個 Skill
(品質 + 使用頻率)"] GRADE --> DECIDE{決策} DECIDE -->|低品質| PRUNE["修剪: 刪除或合併"] DECIDE -->|重複| MERGE["合併重複 Skill"] DECIDE -->|高品質| KEEP["保留"] DECIDE -->|可改善| REFINE["精煉: 改善內容"] PRUNE --> REPORT["產出報告"] MERGE --> REPORT KEEP --> REPORT REFINE --> REPORT REPORT --> LOG["logs/curator/run.json"] REPORT --> MD["logs/curator/REPORT.md"]

3.7.2 核心特性

特性說明
Class-first 評分基於 Rubric 的分類評估,非簡單數值打分
Active-update 偏向偏好更新而非刪除,盡量保留學習成果
Fork 繼承Fork 的 Skill 繼承父 Skill 的運行時資料
Scoped ToolsetCurator 僅可存取 memory + skills 工具,不可執行系統指令
安全邊界Bundled / Hub / Pinned Skills 受保護不被修改

3.7.3 CLI 操作

# 手動觸發 Curator
hermes curator

# 查看 Curator 狀態(依使用頻率排名)
hermes curator status

# 查看最近一次 Curator 報告
cat logs/curator/REPORT.md

3.7.4 設定檔

# ~/.hermes/config.yaml
auxiliary:
  curator:
    enabled: true           # 啟用 / 停用
    interval_days: 7        # 執行間隔(天)
    min_quality_score: 0.3  # 品質閾值
    max_skills: 500         # 技能庫上限
    protect_pinned: true    # 保護 pinned skills

企業建議:大型團隊建議將 Curator 間隔設為 3-5 天,並監控 REPORT.md 確保重要技能不被意外修剪。可透過 pinned 標記保護關鍵技能。

3.8 Persistent Goals 與 Ralph Loop

v0.13.0 引入的 /goal 指令,是 Agent 自主性的重要里程碑。Agent 不再僅回應單次對話,而是能鎖定長期目標並跨回合追蹤進度。

3.8.1 運作原理

graph TD
    USER["使用者設定 /goal"] --> LOCK["Agent 鎖定目標"]
    LOCK --> PLAN["制定執行計畫"]
    PLAN --> EXEC["執行步驟"]
    EXEC --> EVAL{"已完成?"}
    EVAL -->|否| TRACK["追蹤進度
(跨回合持久)"] TRACK --> REMIND["新對話開始時
提醒目標進度"] REMIND --> EXEC EVAL -->|是| COMPLETE["標記目標完成"] RESTART["Session 中斷 /
Gateway 重啟"] -.->|自動恢復| TRACK

3.8.2 核心特性

特性說明
跨回合持久目標不因對話分頁、Session 邊界、Gateway 重啟而遺失
Turn Budget可設定目標允許的最大回合數,防止 Agent 無限循環
Ralph Loop將 learning loop 提升為一級原語(first-class primitive)
進度追蹤每次對話開始時自動提醒目標狀態與剩餘步驟

3.8.3 使用範例

# 設定一個跨回合持久目標
> /goal 將整個後端 API 從 REST 遷移到 GraphQL,包括 schema 設計、resolver 實作、測試覆蓋

# Agent 會自動拆解為多個子任務,持續追蹤
# 即使切換話題或重啟 Gateway,目標仍然有效

# 查看當前目標狀態
> /goal status

# 清除目標
> /goal clear

3.9 Post-write Delta Lint(自動語法檢查)

v0.13.0 為 write_filepatch 工具新增即時增量語法檢查機制。Agent 寫入檔案時自動驗證語法正確性,錯誤在當下浮出而非向下游傳遞。

3.9.1 支援格式

格式檢查範圍說明
PythonAST 語法驗證透過內建 linter 檢查語法樹
JSON結構驗證確保有效 JSON 格式
YAML結構驗證確保有效 YAML 格式
TOML結構驗證確保有效 TOML 格式

3.9.2 運作方式

  • 增量檢查(Delta):僅檢查寫入變更的部分,不影響效能
  • 即時回饋:語法錯誤立即顯示在工具輸出中
  • 自動修正:Agent 可根據 lint 結果自動修正錯誤
  • In-proc 執行:linter 在 Agent Process 內執行,無需外部工具

3.10 Checkpoints v2(狀態持久化)

v0.13.0 完全重寫狀態持久化系統,解決舊版 Checkpoint 機制的三大痛點:

舊版問題v2 解決方案
孤立 Shadow Repos 無法清理單一儲存(Single-store)架構
磁碟空間無限膨脹真正的修剪(Real pruning)+ 磁碟護欄(Disk guardrails)
跨 Session 狀態遺失完整的 Session 恢復機制

企業建議:升級到 v0.13.0 後,建議執行一次完整的 Checkpoint 清理以釋放舊版孤立資源。


第四章:安裝與環境建置

4.1 系統需求

需求項目最低要求建議配置
作業系統Linux / macOS / WSL2 / Windows(Early Beta)/ Android (Termux)Ubuntu 22.04 LTS / macOS 14+
Python3.11+3.11(官方測試版本)
Node.js18+22 LTS
記憶體2 GB4 GB+
磁碟空間500 MB2 GB+(含依賴與快取)
網路可連接 LLM API穩定連線
Git2.30+最新版

🪟 Windows 支援(v0.13.0+):Hermes Agent 現提供 Native Windows 早期測試版(Early Beta),可透過 PowerShell 安裝腳本直接安裝。仍建議穩定生產環境使用 WSL2

📱 Android 支援(v0.12.0+):Hermes 可在 Android 的 Termux 環境中運行,安裝方式與 Linux 相同。

4.2 快速安裝(Linux / macOS / WSL2)

4.2.1 一鍵安裝

# 一鍵安裝(處理所有依賴:Python、Node.js、套件、hermes 指令)
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# 重新載入 Shell 環境
source ~/.bashrc    # Bash 使用者
source ~/.zshrc     # Zsh 使用者

# 驗證安裝
hermes --version

4.2.2 手動安裝(從原始碼)

# 1. Clone 專案
git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent

# 2. 安裝 uv(Python 套件管理器)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 3. 建立虛擬環境
uv venv venv --python 3.11
source venv/bin/activate

# 4. 安裝所有依賴
uv pip install -e ".[all]"

# 5. 驗證
python cli.py --version

4.2.3 Homebrew 安裝(macOS)

# v0.6.0+ 支援 Homebrew
brew install hermes-agent

# 升級
brew upgrade hermes-agent

4.3 Native Windows 安裝(Early Beta)

v0.13.0 開始提供 Native Windows 早期測試版支援,無需 WSL2 即可直接在 Windows 上運行。

4.3.1 PowerShell 一鍵安裝

# 以系統管理員身份開啟 PowerShell
# 一鍵安裝(處理所有依賴)
irm https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.ps1 | iex

# 驗證安裝
hermes --version

4.3.2 注意事項

項目說明
狀態Early Beta — 部分功能可能不穩定
建議生產環境仍建議使用 WSL2 或 Linux
Runtime Lockv0.13.0 修正了 Windows runtime-lock offset 問題
路徑轉換ACP Adapter 已支援 Windows cwd → WSL 路徑自動轉換
WSL 互通可保留 WSL interop PATH 在 systemd units 中

企業建議:Windows 開發者建議採用 WSL2 + 完整 Linux 安裝路徑。Native Windows 適合快速原型驗證與個人開發場景。詳細的 WSL2 安裝指南(檔案系統、網路、服務、常見陷阱)已在 v0.13.0 文件大幅擴充。

4.4 Docker / Podman 部署

4.4.1 使用官方 Docker Image

# 拉取映像
docker pull ghcr.io/nousresearch/hermes-agent:latest

# 啟動(互動模式)
docker run -it \
  --name hermes \
  -v ~/.hermes:/root/.hermes \
  -e ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY}" \
  ghcr.io/nousresearch/hermes-agent:latest

# 啟動(Gateway 模式,背景執行)
docker run -d \
  --name hermes-gateway \
  --restart unless-stopped \
  -v ~/.hermes:/root/.hermes \
  -e ANTHROPIC_API_KEY="${ANTHROPIC_API_KEY}" \
  -e TELEGRAM_BOT_TOKEN="${TELEGRAM_BOT_TOKEN}" \
  ghcr.io/nousresearch/hermes-agent:latest \
  hermes gateway start

⚠️ v0.13.0 安全變更:官方 Docker Image 現拒絕以 root 身份運行 Gateway。請確保使用 hermes 使用者或指定 --user 參數。

💡 Dashboard in Docker(v0.13.0):在 Docker 中啟動 Dashboard,只需加入 -e HERMES_DASHBOARD=1 環境變數,Dashboard 會以 Side-process 方式啟動。

4.4.2 自建 Docker Image

# Dockerfile(專案根目錄已提供)
FROM python:3.11-slim

WORKDIR /app

# 安裝系統依賴
RUN apt-get update && apt-get install -y \
    git curl nodejs npm \
    && rm -rf /var/lib/apt/lists/*

# 複製應用程式
COPY . .

# 安裝 Python 依賴
RUN pip install -e ".[all]"

# 安裝 Playwright(瀏覽器工具)
RUN playwright install chromium

ENTRYPOINT ["hermes"]

4.4.3 Docker Compose(企業部署)

# docker-compose.yml
version: '3.8'

services:
  hermes-agent:
    build: .
    container_name: hermes-agent
    restart: unless-stopped
    volumes:
      - hermes-data:/root/.hermes
      - ./projects:/workspace
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - OPENROUTER_API_KEY=${OPENROUTER_API_KEY}
      - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
    ports:
      - "8080:8080"  # API Server
    networks:
      - hermes-net
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2.0'

  hermes-gateway:
    build: .
    container_name: hermes-gateway
    restart: unless-stopped
    command: hermes gateway start
    volumes:
      - hermes-data:/root/.hermes
    environment:
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY}
      - TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
      - DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN}
      - SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN}
    networks:
      - hermes-net

volumes:
  hermes-data:

networks:
  hermes-net:
    driver: bridge

4.5 Nix Flake 安裝

# Nix Flake 安裝(v0.5.0+ 支援)
nix profile install github:NousResearch/hermes-agent

# 或在 NixOS 配置中
{
  inputs.hermes-agent.url = "github:NousResearch/hermes-agent";
  
  # 加入系統套件
  environment.systemPackages = [ inputs.hermes-agent.packages.${system}.default ];
}

4.6 設定 API Key

4.5.1 初始設定精靈

# 執行完整設定精靈(推薦首次使用)
hermes setup

# 精靈將引導完成:
# 1. 選擇 LLM Provider
# 2. 輸入 API Key
# 3. 選擇模型
# 4. 設定工具
# 5. 設定記憶系統
# 6. (可選)設定訊息平台

4.5.2 環境變數設定

建立 .env 檔案:

# ~/.hermes/.env
# === 主要 Provider(至少需要一個)===

# Anthropic(推薦)
ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxxx

# OpenAI
OPENAI_API_KEY=sk-xxxxxxxxxxxxx

# OpenRouter(200+ 模型)
OPENROUTER_API_KEY=sk-or-xxxxxxxxxxxxx

# Nous Portal(免費模型可用)
# 使用 OAuth 登入:hermes auth login nous

# Google AI Studio(Gemini)
GOOGLE_AI_API_KEY=AIzaSyxxxxxxxxxxxx

# Qwen(通義千問)— OAuth 登入
# 使用 OAuth 登入:hermes auth login qwen

# xAI(Grok)
XAI_API_KEY=xai-xxxxxxxxxxxxx

# === 訊息平台 ===
TELEGRAM_BOT_TOKEN=1234567890:ABCDefghIJKLmnoPQRSTuvwxyz
DISCORD_BOT_TOKEN=your-discord-bot-token
SLACK_BOT_TOKEN=xoxb-your-slack-token

# === MCP 伺服器 ===
GITHUB_TOKEN=ghp_xxxxxxxxxxxxx
DATABASE_URL=postgresql://user:pass@localhost:5432/mydb

4.5.3 Nous Portal 登入(免費模型)

# OAuth 登入(瀏覽器會自動開啟)
hermes auth login nous

# 登入後可使用免費模型(如 MiMo v2 Pro)
# 無需 API Key,適合預算有限的團隊

4.7 設定檔說明

4.6.1 主設定檔

# ~/.hermes/config.yaml

# === 模型設定 ===
model:
  provider: anthropic
  model: claude-sonnet-4-20250514
  reasoning_effort: medium   # low / medium / high

# === 輔助模型(壓縮/Vision/摘要)===
auxiliary:
  provider: nous
  model: mimo-v2-pro         # 免費

# === 記憶設定 ===
memory:
  provider: builtin           # builtin / mem0 / supermemory / honcho
  auto_save: true
  nudge_interval: 5

# === 安全設定 ===
security:
  command_approval: smart      # always / smart / never / yolo
  allowed_commands:
    - "git status"
    - "git diff"
    - "npm test"
    - "mvn test"
    - "python -m pytest"

# === 終端後端 ===
terminal:
  backend: local               # local / docker / ssh / daytona / modal
  
# === 工具集 ===
toolsets:
  enabled:
    - core
    - web
    - delegation
    - cron
    - code
  disabled:
    - browser

# === MCP ===
mcp:
  servers: []

# === Gateway ===
gateway:
  platforms:
    telegram:
      enabled: true
      allowed_users: ["your_telegram_id"]
    discord:
      enabled: false
    slack:
      enabled: false

# === 日誌 ===
logging:
  level: INFO                  # DEBUG / INFO / WARNING / ERROR
  file: ~/.hermes/logs/agent.log

4.6.2 設定檔驗證

v0.8.0 起新增結構驗證功能,啟動時會自動檢查 YAML 格式:

# 手動驗證設定
hermes doctor

# 診斷內容:
# ✅ Config YAML syntax valid
# ✅ Provider credentials found
# ✅ Model accessible
# ✅ Memory provider configured
# ✅ No WAL corruption detected
# ⚠️ Browser toolset disabled (optional)

實務案例:某銀行團隊在 WSL2 上安裝 Hermes Agent,使用 Anthropic Claude 作為主 Provider,Nous Portal 免費模型作為輔助,Docker 後端做終端隔離。安裝過程約 5 分鐘,設定精靈引導完成所有配置。


第五章:快速開始(Quick Start)

5.1 第一次對話

# 啟動 Hermes(互動式 CLI)
hermes

# 進入 TUI 界面後,直接輸入問題:
> 你好!請自我介紹一下你的能力

# Agent 會回應其工具、記憶、技能能力
# 使用 Ctrl+C 暫停當前操作
# 使用 /new 開啟新對話
# 使用 /exit 或 Ctrl+D 離開

常用 CLI 指令

指令功能
/new/reset開啟新對話(保留記憶);v0.13.0 支援 /new [session-name] 指定名稱
/model [provider:model]切換模型(v0.13.0 TUI 與 hermes model 一致化 + 內建認證)
/compress壓縮當前上下文(v0.13.0 狀態列顯示壓縮次數)
/usage查看 Token 使用量
/insights [--days N]查看使用洞察
/skills列出可用技能
/personality [name]設定人格
/retry重試上一輪
/undo撤銷上一輪
/busy [steer|queue|interrupt]設定忙碗模式(v0.12.0)
/btw導引中插任務(v0.12.0)
/reload-skills重新載入技能庫(v0.12.0)
/reload熱重載 .env 設定(v0.12.0)
/reload-mcp重建 MCP cached agents(v0.12.0)
/background將任務移至背景執行(v0.12.0)
/mouse互動式滑鼠操作(v0.12.0)
/fast切換 Fast Mode(Priority Processing)
/steer中途導引 Agent 行為(v0.11.0)
/goal設定跨回合持久目標(Ralph Loop)(v0.13.0)
/kanban管理 Multi-agent Kanban 看板(v0.13.0)
/queueACP:對進行中的 Agent 排隊後續指令(v0.13.0)

5.1.1 Non-interactive 單次模式(v0.12.0+)

# 使用 -z 旗標執行單次任務(不進入互動式 TUI)
hermes -z "列出當前目錄下所有 Python 檔案"

# 指定模型與 Provider
hermes -z --model anthropic:claude-sonnet-4-20250514 "審查 main.py 的安全性"
hermes -z --provider openrouter "產生項目摘要"

# 適合 CI/CD 或腳本自動化使用

5.1.2 Background Sessions(v0.12.0+)

# 將當前任務移至背景運行
/background

# 允許平行執行多個任務,主線程可繼續對話
# 背景任務完成後會自動通知

5.1.3 Quick Commands(v0.12.0+)

# 自訂快速指令(直接執行 Shell,不經過 LLM)
# ~/.hermes/config.yaml
quick_commands:
  test: "mvn test"
  lint: "npm run lint"
  deploy: "./scripts/deploy.sh"

# 在 TUI 中使用
/test    # 直接執行 mvn test
/lint    # 直接執行 npm run lint

5.1.4 Opt-in 自動恢復上次對話(v0.12.0+)

# config.yaml
session:
  auto_resume: true    # 啟動時自動復原上次對話記錄

5.2 建立 AI Coding Agent

以下範例展示如何使用 Hermes 作為 Coding Agent 開發一個 REST API:

# 啟動 Hermes 並指定工作目錄
cd /path/to/your/project
hermes

# 開始互動
> 請幫我建立一個 Spring Boot REST API 專案,包含:
> 1. 使用者 CRUD API(/api/users)
> 2. JWT 認證
> 3. PostgreSQL 資料庫
> 4. Swagger 文件
> 5. 完整的單元測試

Agent 執行流程

Agent 會自動:
1. [execute_command] 使用 Spring Initializr 建立專案骨架
2. [write_file] 建立 Entity、Repository、Service、Controller
3. [write_file] 建立 Security 配置(JWT Filter)
4. [write_file] 建立 application.yml(DB 連線)
5. [write_file] 建立 Swagger 配置
6. [write_file] 建立 JUnit 測試
7. [execute_command] 執行 mvn test 驗證
8. [自動學習] 封裝為 "spring-boot-rest-api" Skill

5.3 設定 Memory

# 設定 Memory Provider
hermes setup  # 在 Memory 區段選擇 provider

# 或直接編輯 config.yaml
hermes config set memory.provider supermemory
hermes config set memory.auto_save true

記憶持久化範例

# 告訴 Agent 你的偏好
> 我使用 Java 21,偏好 Clean Architecture,測試框架用 JUnit 5 + Mockito

# Agent 會自動記錄到 MEMORY.md:
# - User prefers Java 21
# - Uses Clean Architecture
# - Testing: JUnit 5 + Mockito

# 下次對話時,Agent 會自動載入這些偏好

5.4 設定 Tools

# 查看所有工具集
hermes tools

# 啟用瀏覽器工具(如需要網頁操作)
hermes tools enable browser

# 設定 MCP 伺服器(擴展工具能力)
hermes config set mcp.servers '[{"name":"github","command":"npx","args":["@modelcontextprotocol/server-github"]}]'

5.5 執行任務範例

範例 1:程式碼審查

> 請審查 src/main/java/com/example/UserService.java,
> 檢查安全性、效能和程式碼品質問題

# Agent 會:
# 1. 讀取檔案
# 2. 分析 SQL Injection / XSS 風險
# 3. 檢查效能瓶頸(N+1 Query 等)
# 4. 檢查 Code Style
# 5. 產出報告 + 修改建議

範例 2:自動化部署腳本

> 幫我寫一個 GitHub Actions CI/CD pipeline,需求:
> - Java 21 + Maven
> - 執行 unit test 和 integration test
> - 建構 Docker image
> - 推送到 GitHub Container Registry
> - 部署到 Kubernetes

# Agent 會產出完整的 .github/workflows/deploy.yml

範例 3:使用 Cron 排程

> 每天早上 9 點幫我:
> 1. 執行 git pull 更新專案
> 2. 執行 mvn test
> 3. 將測試結果傳到 Telegram

# Agent 會使用 cron_add 建立排程任務
# 結果自動透過 Gateway 投遞到指定平台

Per-job workdircontext_from 鏈式排程(v0.12.0+)

# config.yaml — Cron 進階設定
cron:
  jobs:
    daily-test:
      schedule: "0 8 * * *"
      task: "執行完整測試套件並產出報告"
      workdir: "/home/dev/my-project"       # v0.12.0: 指定工作目錄
      deliver_to: telegram
    
    weekly-report:
      schedule: "0 9 * * 1"
      task: "根據上次測試結果產出週報"
      context_from: "daily-test"             # v0.12.0: 從前一任務繼承上下文
      deliver_to: slack

注意事項:Quick Start 階段建議使用 command_approval: smart(預設),Agent 在執行危險指令前會要求確認。熟悉後可考慮調整為 never(自動批准所有安全指令)。


第六章:進階開發(企業級)

6.1 自訂 Skill(技能封裝)

6.1.1 手動建立 Skill

建立目錄結構:

mkdir -p ~/.hermes/skills/user/bank-api-security-check

建立 skill.md

# bank-api-security-check

## Description
銀行 API 安全性檢查技能。依據 OWASP Top 10 和金融法規要求,
對 RESTful API 進行全面安全掃描。

## Triggers
- 使用者提到「安全檢查」、「弱掃」、「安全掃描」

## Steps
1. **掃描 API Controller**
   - 讀取所有 @RestController 類別
   - 檢查是否有 @PreAuthorize 或 @Secured 註解
   - 確認 CSRF 保護狀態

2. **檢查認證機制**
   - 確認 JWT 配置(Token 過期時間、簽發者驗證)
   - 檢查 OAuth2 Scope 設定
   - 確認 CORS 配置是否過於寬鬆

3. **掃描注入風險**
   - SQL Injection:搜尋字串拼接 SQL
   - XSS:檢查輸入是否有 sanitize
   - Command Injection:檢查 Runtime.exec() 使用
   - SSRF:檢查外部 URL 呼叫是否有白名單

4. **檢查敏感資料處理**
   - 確認密碼使用 BCrypt/Argon2 加密
   - 確認 PII 資料是否有遮蔽(Masking)
   - 確認日誌中不包含敏感資訊

5. **產出報告**
   - 格式:Markdown 表格
   - 欄位:風險項目 / 嚴重度 / 檔案位置 / 修復建議
   - 依嚴重度排序(Critical > High > Medium > Low)

## Config
- severity_threshold: medium
- include_owasp_references: true
- output_format: markdown

6.1.2 Skill Config 介面(v0.8.0 新增)

Skills 可以宣告必要的 config.yaml 設定,在安裝時會自動提示使用者:

# skill.md 中加入 Config Block

## Config
- api_scan_depth: 5
  description: "API 掃描深度(目錄層級)"
  required: true
- custom_rules_path: null
  description: "自訂規則檔案路徑"
  required: false

6.1.3 從 Skills Hub 安裝

# 瀏覽社群技能
/skills

# 安裝特定技能
/skills install popular-web-designs
/skills install gitnexus-explorer
/skills install research-paper-writing

# 自動同步到所有 Profiles
hermes update  # 會自動將 bundled skills 同步到所有 profile

6.2 多 Agent 協作設計

6.2.1 Subagent 委派機制

graph TD
    USER[使用者] --> MAIN[Main Agent
任務分解 & 整合] MAIN --> |"delegate_task
(credential sharing)"| SA1[Subagent: Researcher
負責技術調研] MAIN --> |"delegate_task
(workspace hints)"| SA2[Subagent: Developer
負責程式碼開發] MAIN --> |"delegate_task"| SA3[Subagent: Reviewer
負責程式碼審查] SA1 --> |"web_search
web_extract"| WEB[Web Tools] SA2 --> |"write_file
execute_code"| CODE[Code Tools] SA3 --> |"read_file
execute_command"| TEST[Test Tools] SA1 -.-> |摘要回傳| MAIN SA2 -.-> |程式碼回傳| MAIN SA3 -.-> |審查報告| MAIN MAIN --> |最終結果| USER

使用方式

> 請用以下分工完成這個功能:
> 1. 先研究 Spring Boot 3 的 Virtual Threads 最佳實踐
> 2. 根據研究結果開發 API
> 3. 對開發結果進行安全審查
> 
> 使用 subagent 平行處理第 1 和第 2 步

# Agent 會自動使用 delegate_task 工具委派子代理

6.2.2 Programmatic Tool Calling(execute_code)

v0.8.0 的 execute_code 支援透過 RPC 呼叫工具,將多步驟流水線壓縮為單次推理:

# Agent 可以生成並執行這樣的腳本
import json

# 透過 RPC 呼叫多個工具
results = []
files = tool_call("search_files", {"pattern": "*.java", "path": "src/"})
for f in files:
    content = tool_call("read_file", {"path": f})
    if "SQL" in content and "PreparedStatement" not in content:
        results.append({"file": f, "risk": "SQL Injection"})

# 一次性回傳結果,零額外上下文成本
print(json.dumps(results))

6.3 Multi-agent Kanban 實戰

v0.13.0 引入的 Multi-agent Kanban 是企業級多 Agent 協作的核心架構,遠超基本的 Subagent 委派。

6.3.1 架構概述

graph TD
    USER[使用者 / Orchestrator] --> BOARD["Kanban Board
(持久化看板)"] BOARD --> TASK1["Task 1: 後端 API"] BOARD --> TASK2["Task 2: 前端 UI"] BOARD --> TASK3["Task 3: 測試"] subgraph "Worker Pool" W1["Worker Agent 1
(Profile: backend-dev)"] W2["Worker Agent 2
(Profile: frontend-dev)"] W3["Worker Agent 3
(Profile: qa-tester)"] end TASK1 -->|"自動指派"| W1 TASK2 -->|"自動指派"| W2 TASK3 -->|"自動指派"| W3 W1 -.->|"心跳 / 進度"| BOARD W2 -.->|"心跳 / 進度"| BOARD W3 -.->|"心跳 / 進度"| BOARD subgraph "可靠性機制" HB["💓 心跳監測"] ZD["🧟 殭屍偵測"] RC["♻️ 工作回收"] HG["🛡️ 幻覺閘門"] RB["🔄 重試預算"] end BOARD --> HB BOARD --> ZD BOARD --> RC BOARD --> HG BOARD --> RB

6.3.2 設定與使用

# config.yaml — Multi-agent Kanban 完整設定
kanban:
  enabled: true
  multi_project: true         # 支援多專案看板
  max_retries: 3              # 每任務最大重試次數
  heartbeat_interval: 30      # Worker 心跳間隔(秒)
  zombie_timeout: 300         # 殭屍 Worker 判定超時(秒)
  hallucination_gate: true    # 啟用幻覺閘門
  
  # 跨 Profile 共享設定
  sharing:
    board: true               # 共享看板
    workspaces: true           # 共享工作區
    worker_logs: true          # 共享 Worker 日誌
# Kanban 操作指令
/kanban                        # 查看當前看板狀態
/kanban create "重構 API"       # 建立新任務
/kanban assign task-1 backend  # 指派任務到 Profile
/kanban status                 # 查看所有任務進度

# Worker 生命週期管理
hermes kanban workers          # 列出所有 Worker 狀態
hermes kanban diagnostics      # 執行任務診斷引擎

6.3.3 可靠性保障機制

機制說明
心跳監測Worker 定期發送心跳,超時則標記為失聯
殭屍偵測自動偵測 Darwin 和 Linux 環境中的殭屍 Worker
工作回收失聯 Worker 的任務自動回收並重新指派
幻覺閘門防止 Worker 聲稱完成了未建立的任務卡
重試預算每任務可設定 max_retries,超過則標記失敗
統一失敗計數器跨 spawn / timeout / crash 統一計算失敗次數
任務所有權驗證對破壞性工具呼叫強制驗證 Worker 任務所有權
Auto-block未完成退出的 Worker 自動被阻擋

企業建議:Multi-agent Kanban 特別適合大型跨團隊專案,建議搭配 Profile 機制為不同角色(前端/後端/QA/DevOps)配置專屬的 SOUL.md 和技能集。

6.4 長期記憶設計(Vector DB)

6.3.1 使用 Supermemory(推薦企業使用)

# ~/.hermes/config.yaml
memory:
  provider: supermemory
  
  supermemory:
    # 多容器設計
    containers:
      - name: technical-knowledge
        description: "技術知識庫(架構/設計模式/最佳實踐)"
      - name: project-context
        description: "專案上下文(需求/決策/變更記錄)"
      - name: team-preferences
        description: "團隊偏好(程式風格/工具設定/流程)"
    
    search_mode: hybrid     # keyword + semantic
    identity_template: "enterprise-developer"

6.3.2 使用 mem0

# ~/.hermes/config.yaml
memory:
  provider: mem0
  
  mem0:
    api_key: "${MEM0_API_KEY}"     # Cloud 版
    # 或使用 mem0.json 進行本地配置
    prefetch_context: true          # LLM 呼叫前預取
    secret_redaction: true          # 自動遮蔽敏感資訊

6.3.3 記憶架構設計(企業級)

graph TB
    subgraph "記憶分層策略"
        L1[L1: 對話快取
Context Window
TTL: 單次對話] L2[L2: 對話搜尋
FTS5 Session Search
TTL: 永久] L3[L3: 知識庫
Vector DB
TTL: 永久] L4[L4: 使用者建模
Honcho Dialectic
TTL: 永久] end L1 -->|壓縮與摘要| L2 L2 -->|語義索引| L3 L3 -->|行為分析| L4 L4 -->|人格化回應| L1 L3 -->|RAG 擷取| L1 L2 -->|歷史查詢| L1

6.5 任務拆解(Task Decomposition)

Hermes Agent 自動進行任務拆解,但你可以透過 Prompt 引導更精確的分解:

> 我要重構整個訂單系統,請先分析後提出分階段執行計畫:
> 
> 系統現況:
> - Monolithic Spring Boot 2.7
> - 16 個 REST API
> - PostgreSQL 資料庫
> - 無單元測試
> 
> 目標:
> - 升級到 Spring Boot 3.2
> - 導入 Clean Architecture
> - 補齊單元測試(>80% 覆蓋率)
> - 保持向後相容

# Agent 會產出分階段計畫:
# Phase 1: 架構分析 & 依賴盤點
# Phase 2: Spring Boot 3.2 升級
# Phase 3: Clean Architecture 重構
# Phase 4: 測試補齊
# Phase 5: 效能測試 & 上線

6.6 Workflow Orchestration

6.5.1 使用 Cron 建立自動化流程

> 建立以下自動化流程:
> 
> 1. 每天 08:00 - 檢查 GitHub 上的新 Issue,摘要傳到 Slack
> 2. 每天 18:00 - 執行程式碼品質掃描,結果傳到 Telegram
> 3. 每週一 09:00 - 生成週報(本週 commits / issues / PRs 摘要)

6.5.2 使用 Context Files 定義工作流

在專案根目錄建立 AGENTS.md

# AGENTS.md - 專案上下文

## 專案說明
這是一個銀行核心系統的 REST API,使用 Spring Boot 3.2 + Java 21。

## 開發規範
- 所有 API 必須有輸入驗證
- 所有 Service 必須有 JUnit 測試
- 所有 Repository 方法必須使用 Parameterized Query
- 程式碼風格遵循 Google Java Style

## 部署流程
1. 通過 CI(mvn verify)
2. SonarQube 掃描通過
3. Docker build & push
4. K8s rolling update

## 安全要求
- 所有 API 需 JWT 認證
- 敏感資料需加密存儲
- 日誌不得包含 PII

Agent 在每次對話中都會載入此檔案,確保輸出符合專案規範。

6.5.3 Profile-based 多團隊工作流

# 建立不同團隊的 Profile
hermes --profile team-backend     # 後端團隊
hermes --profile team-frontend    # 前端團隊
hermes --profile team-devops      # DevOps 團隊

# 每個 Profile 有獨立的:
# - Skills(技能)
# - Memory(記憶)
# - Config(設定)
# - SOUL.md(人格)

注意事項:多 Agent 協作時,注意 Token 成本。建議使用 /usage 定期查看消耗。子代理回傳的結果會以摘要形式進入主 Agent 的上下文,有效控制成本。

6.7 SOUL.md 與 Personality 系統

SOUL.md 是 Hermes Agent 的人格定義檔案,決定 Agent 的說話風格、行為準則和限制條件。每個 Profile 可以有獨立的 SOUL.md。

6.6.1 SOUL.md 結構

# SOUL.md
你是「Hermes」,一個專業的 AI 開發助理。

## 性格特質
- 精確、專業、注重細節
- 主動提供替代方案
- 遇到不確定的問題時,會明確告知並提供最佳猜測

## 專業領域
- Java / Spring Boot 開發
- DevOps / CI/CD 流程
- 系統架構設計

## 語言偏好
- 使用繁體中文回應
- 程式碼註解使用英文
- 專有名詞保留原文

## 限制
- 不得修改生產環境設定
- 不得刪除 Git 分支
- 敏感資訊必須遮蔽

## 輸出格式
- 程式碼使用 Markdown Code Block
- 表格使用 Markdown 表格
- 重要警告使用 ⚠️ 標記

6.6.2 Personality 切換

# 設定人格
/personality professional    # 專業模式
/personality friendly        # 友善模式
/personality concise         # 精簡模式

# 自訂人格(寫入 SOUL.md)
> 請調整你的人格為:專業但友善的金融科技顧問

6.6.3 多 Profile SOUL.md 管理

# 每個 Profile 有獨立 SOUL.md
~/.hermes/profiles/
├── default/
│   └── SOUL.md          # 預設人格
├── team-backend/
│   └── SOUL.md          # 後端團隊:專注 Java / Spring Boot
├── team-devops/
│   └── SOUL.md          # DevOps:專注部署 / 監控
└── customer-service/
    └── SOUL.md          # 客服:親切有禮、遵守合規

企業建議:為不同團隊或場景建立專屬 Profile + SOUL.md,確保 Agent 在各場景中表現一致。金融客服場景務必在 SOUL.md 中明確列出合規限制。

6.8 Context Files(專案上下文檔案)

Context Files 是放在專案目錄中的特殊檔案,Agent 會在每次對話啟動時自動載入,確保輸出始終符合專案規範。

6.7.1 支援的 Context Files

檔案位置用途
AGENTS.md專案根目錄專案上下文、規範、技術棧說明
SOUL.md~/.hermes/ 或 Profile 目錄Agent 人格定義
MEMORY.md~/.hermes/memories/持久化知識與經驗
USER.md~/.hermes/memories/使用者偏好記錄
.hermesignore專案根目錄排除 Agent 不應讀取的檔案

6.7.2 AGENTS.md 最佳實踐

# AGENTS.md

## 專案概述
[簡短描述專案目標和技術棧]

## 技術規範
[列出程式語言版本、框架、套件管理器等]

## 程式碼風格
[定義 coding standard、命名慣例、註解要求]

## 安全要求
[列出安全合規要求、禁止的操作]

## Git 工作流
[定義分支策略、commit 格式、PR 規範]

## 測試要求
[定義測試框架、覆蓋率目標]

## 部署流程
[定義 CI/CD 流程、環境配置]

6.7.3 .hermesignore 範例

# .hermesignore — 排除 Agent 不應讀取的檔案
*.env
**/secrets/**
**/node_modules/**
**/.git/**
**/target/**
**/build/**
*.log
credentials.yaml

實務案例:某團隊在 AGENTS.md 中詳細定義了 Spring Boot 開發規範,Agent 在生成程式碼時自動遵循 Google Java Style、自動加入 JavaDoc、自動使用 Parameterized Query,大幅減少 Code Review 的修改量。

6.9 Plugin 系統(v0.12.0+ / v0.13.0 擴充)

v0.12.0 將 Gateway 重構為 Pluggable Gateway,第三方 Plugin 可以擴展平台、工具、Dashboard 元件等,形成完整的生態系統。

6.9.1 Plugin 架構

graph TB
    subgraph "Plugin Host(Gateway)"
        REGISTRY["Plugin Registry"]
        LIFECYCLE["Lifecycle Manager
install → init → start → stop"] end subgraph "Plugin 類型" PLAT["platform-*
通訊平台"] MODEL["model-*
模型 Provider"] TOOL["tool-*
工具擴展"] DASH["dashboard-*
Dashboard Widget"] OBS["observability-*
可觀測性"] end REGISTRY --> PLAT REGISTRY --> MODEL REGISTRY --> TOOL REGISTRY --> DASH REGISTRY --> OBS

6.9.2 內建 Plugin 清單(v0.12.0 + v0.13.0)

Plugin類型說明
plugins/platform-teams平台Microsoft Teams 整合(第 19 平台)
plugins/platform-yuanbao平台騰訊元寶整合(第 18 平台)
plugins/model-lmstudio模型LM Studio first-class Provider
plugins/model-azure-foundry模型Azure AI Foundry Provider
plugins/model-tencent模型Tencent Tokenhub Provider
plugins/tool-spotify工具Spotify 原生整合(7 工具 + PKCE OAuth)
plugins/tool-google-meet工具Google Meet 加入/轉錄/發言
plugins/tool-comfyui工具ComfyUI v5 圖像生成(預設內建)
plugins/tool-touchdesigner工具TouchDesigner-MCP(預設內建)
plugins/observability-langfuse可觀測性Langfuse tracing + metrics
plugins/hermes-achievements擴展成就系統 gamification
plugins/platform-google-chat平台Google Chat 整合(v0.13.0 第 20 平台)+ 通用 Platform-Plugin Hooks
plugins/model-providers/*模型ProviderProfile ABC — Provider 可插拔化(v0.13.0)

6.9.2.1 v0.13.0 Plugin 新功能

功能說明
transform_llm_output Hook新生命週期掛鉤:在 LLM 輸出到達對話前進行 reshape / filter。適用於上下文窗口壓縮器和內容過濾器
env_enablement_fn Hook平台 Plugin 可定義環境變數啟用函式(IRC、Teams 已遷移)
cron_deliver_env_var HookCron 交付環境變數掛鉤
ProviderProfile ABCplugins/model-providers/ 目錄下的第三方 Provider 可插拔,無需修改核心程式碼
Dashboard Plugins 頁面圖形化管理 Plugin:啟用/停用、查看認證狀態
SRI 完整性Dashboard Plugin 腳本採用 Subresource Integrity 驗證
# plugins/my-output-filter/__init__.py — 使用 transform_llm_output hook
from hermes.plugins import PluginBase, hook

class OutputFilterPlugin(PluginBase):
    name = "my-output-filter"
    version = "1.0.0"
    
    @hook("transform_llm_output")
    async def filter_output(self, output: str) -> str:
        """在 LLM 輸出送入對話前進行過濾/變形"""
        # 例如:移除敏感資訊、壓縮上下文
        return output.replace("INTERNAL_SECRET", "[REDACTED]")

6.9.3 Spotify 整合範例

# 安裝 Spotify Plugin(v0.12.0 預設已內建)
hermes plugins enable spotify

# 首次使用會啟動 PKCE OAuth 流程
# 瀏覽器自動開啟 Spotify 授權頁面

# 之後可直接對 Agent 下達音樂指令:
> 播放一些適合寫程式的 Lo-fi 音樂
> 暫停播放
> 建立一個名為「Coding Vibes」的播放清單

提供的 7 個工具

  • spotify_play — 播放音樂/播放清單
  • spotify_pause — 暫停播放
  • spotify_next / spotify_prev — 上/下一首
  • spotify_search — 搜尋音樂
  • spotify_create_playlist — 建立播放清單
  • spotify_current — 查看當前播放

6.9.4 Google Meet 整合

# config.yaml
plugins:
  google_meet:
    enabled: true
    credentials: "${GOOGLE_MEET_CREDENTIALS}"  # OAuth 或 Service Account

功能:加入會議、即時轉錄、語音發言、會後自動產出會議摘要與行動項目。

6.9.5 自訂 Plugin 開發

# plugins/my-custom-tool/__init__.py
from hermes.plugins import PluginBase, tool

class MyCustomPlugin(PluginBase):
    name = "my-custom-tool"
    version = "1.0.0"
    
    @tool(description="執行自訂業務邏輯")
    async def my_action(self, param: str) -> str:
        # 實作你的工具邏輯
        return f"執行完成: {param}"

企業建議:善用 Plugin 系統將內部系統(JIRA、Confluence、內部 API)封裝為 Plugin,讓 Agent 能直接操作企業工具鏈。


第七章:Voice Mode(語音模式)

7.1 語音模式概述

Hermes Agent v0.3.0+ 支援完整的語音互動能力,可在 CLI、Telegram、Discord 等平台進行即時語音對話。語音模式整合 STT(語音轉文字)和 TTS(文字轉語音)雙向轉換,適用於免手動操作場景。

graph LR
    subgraph "語音輸入"
        MIC[麥克風 / 語音備忘錄]
        STT[STT 引擎
Whisper / Voxtral / Deepgram] end subgraph "Agent 處理" AGENT[Hermes Agent
理解 → 規劃 → 執行] end subgraph "語音輸出" TTS[TTS 引擎
OpenAI TTS / ElevenLabs / MiniMax / Piper] SPK[喇叭 / 語音訊息] end MIC --> STT STT --> AGENT AGENT --> TTS TTS --> SPK

7.2 支援的 STT / TTS 提供者

7.2.1 STT(語音轉文字)提供者

Provider說明語言支援特點
OpenAI WhisperOpenAI 官方 STT99+ 語言高準確率、即時串流
Voxtral TranscribeMistral AI 最新 STT多語言v0.8.0+ 新增、高效能
Deepgram企業級 STT30+ 語言低延遲、即時串流
本地 Whisper自託管 Whisper 模型99+ 語言離線可用、隱私保護

7.2.2 TTS(文字轉語音)提供者

Provider說明語音選擇特點
OpenAI TTSOpenAI 官方 TTS6 種語音自然流暢
ElevenLabs高品質語音合成自訂語音語音克隆、高擬真度
MiniMax Speech 2.8MiniMax TTS預設語音v0.8.0 新增
Piper TTS本地開源 TTS多種語音模型v0.12.0 新增,完全離線、零成本、低延遲
xAI Custom VoicesxAI 語音克隆 TTS自訂克隆語音v0.13.0 新增,支援語音克隆(voice cloning)

7.3 CLI 語音互動

# 啟用語音模式
hermes --voice

# 或在對話中切換
/voice on     # 開啟語音
/voice off    # 關閉語音

# 設定 STT/TTS Provider
hermes config set voice.stt_provider openai
hermes config set voice.tts_provider elevenlabs
# ~/.hermes/config.yaml
voice:
  enabled: false                # 預設關閉
  stt_provider: openai          # openai / voxtral / deepgram / local
  tts_provider: openai          # openai / elevenlabs / minimax / piper / xai
  
  openai:
    stt_model: whisper-1
    tts_model: tts-1
    tts_voice: alloy             # alloy / echo / fable / onyx / nova / shimmer
  
  elevenlabs:
    api_key: "${ELEVENLABS_API_KEY}"
    voice_id: "your-voice-id"
  
  # xAI Custom Voices(v0.13.0 新增)
  xai:
    api_key: "${XAI_API_KEY}"
    voice_id: "your-cloned-voice-id"  # 語音克隆 ID
  
  voxtral:
    api_key: "${MISTRAL_API_KEY}"   # Mistral AI API Key
  
  # v0.12.0: Piper 本地 TTS
  piper:
    model: "zh_CN-huayan-medium"  # 本地模型名稱
    speaker_id: 0                 # 說話者 ID
    # 模型存放於 ~/.hermes/tts/piper/models/
    # 首次使用自動下載

7.3.1 Pluggable TTS Provider Registry(v0.12.0+)

v0.12.0 將 TTS 架構重構為可插拔式註冊表,允許第三方 Plugin 新增 TTS 引擎:

# 自訂 TTS Provider
tts:
  providers:
    my_custom_tts:
      plugin: "plugins/tts-my-engine"
      endpoint: "http://localhost:5500/api/tts"
      voice: "default"

7.4 Telegram / Discord 語音互動

Telegram 和 Discord 支援語音備忘錄自動轉錄:

使用者:[傳送語音備忘錄]
Agent:
  1. 自動用 STT 轉錄語音為文字
  2. 處理轉錄後的文字指令
  3. 以文字或語音回應(依設定)

Telegram 設定

# config.yaml
gateway:
  platforms:
    telegram:
      enabled: true
      voice_transcription: true    # 自動轉錄語音備忘錄
      voice_response: false        # 是否以語音回應

7.5 Discord Voice Channel 即時語音

Hermes 支援加入 Discord Voice Channel 進行即時語音對話:

# Discord Voice Channel 設定
gateway:
  platforms:
    discord:
      enabled: true
      voice_channel:
        enabled: true
        auto_join: false          # 是否自動加入語音頻道
        wake_word: "hermes"       # 喚醒詞

使用流程

  1. 在 Discord 邀請 Hermes Bot 加入語音頻道
  2. Bot 監聽語音並使用 STT 轉錄
  3. 偵測到喚醒詞或被 @mention 時開始處理
  4. 使用 TTS 語音回應

7.6 企業語音整合建議

場景建議配置說明
開發團隊CLI Voice + Whisper邊 coding 邊語音下指令
客服系統Telegram Voice + ElevenLabs自然語音客服回應
會議記錄Discord VC + Voxtral即時會議記錄與摘要
離線環境Local Whisper + Local TTS無需網路的語音互動

安全提醒:語音資料可能包含敏感資訊。企業環境建議使用本地 Whisper 模型或確保語音資料傳輸加密(TLS)。不要在語音中傳輸密碼、API Key 等敏感資訊。


第八章:Web Application 整合

8.1 整合架構設計

graph TB
    subgraph "Frontend(前端層)"
        VUE[Vue 3 / React
Chat UI + Dashboard] end subgraph "Backend(後端層)" API[Spring Boot / FastAPI
業務邏輯 API] AGENT_SVC[Agent Service
Hermes 封裝層] end subgraph "Hermes Agent Layer" HERMES[Hermes Agent
CLI / API Mode] GW[Hermes Gateway
多平台消息] MCP_SRV[MCP Server
暴露業務工具] end subgraph "Data Layer" BIZ_DB[(Business DB
PostgreSQL)] AGENT_DB[(Agent DB
SQLite / Vector)] CACHE[(Redis
Cache + Queue)] end VUE -->|REST/WebSocket| API VUE -->|SSE Stream| AGENT_SVC API --> BIZ_DB API --> CACHE AGENT_SVC -->|HTTP API / CLI| HERMES HERMES --> GW HERMES -->|MCP Protocol| MCP_SRV MCP_SRV --> BIZ_DB HERMES --> AGENT_DB

8.2 FastAPI 後端整合

8.2.1 Agent-as-a-Service API

# agent_service.py
from fastapi import FastAPI, HTTPException
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
import subprocess
import asyncio
import json

app = FastAPI(title="Hermes Agent Service", version="1.0.0")

class AgentRequest(BaseModel):
    """Agent 請求模型"""
    message: str
    session_id: str | None = None
    profile: str = "default"
    model: str | None = None

class AgentResponse(BaseModel):
    """Agent 回應模型"""
    response: str
    session_id: str
    tokens_used: int
    tools_called: list[str]

@app.post("/api/agent/chat", response_model=AgentResponse)
async def chat(request: AgentRequest):
    """
    與 Hermes Agent 進行對話
    
    - **message**: 使用者訊息
    - **session_id**: 對話 Session ID(可選,用於延續對話)
    - **profile**: Agent Profile(預設 default)
    - **model**: 指定模型(可選)
    """
    cmd = ["hermes", "chat", "--message", request.message]
    
    if request.session_id:
        cmd.extend(["--session", request.session_id])
    if request.profile != "default":
        cmd.extend(["--profile", request.profile])
    if request.model:
        cmd.extend(["--model", request.model])
    
    try:
        result = await asyncio.create_subprocess_exec(
            *cmd,
            stdout=asyncio.subprocess.PIPE,
            stderr=asyncio.subprocess.PIPE
        )
        stdout, stderr = await result.communicate()
        
        if result.returncode != 0:
            raise HTTPException(status_code=500, detail=stderr.decode())
        
        output = json.loads(stdout.decode())
        return AgentResponse(
            response=output["response"],
            session_id=output["session_id"],
            tokens_used=output.get("tokens_used", 0),
            tools_called=output.get("tools_called", [])
        )
    except json.JSONDecodeError:
        return AgentResponse(
            response=stdout.decode(),
            session_id=request.session_id or "new",
            tokens_used=0,
            tools_called=[]
        )

@app.post("/api/agent/stream")
async def stream_chat(request: AgentRequest):
    """SSE 串流模式 - 即時回傳 Agent 回應"""
    async def generate():
        cmd = ["hermes", "chat", "--message", request.message, "--stream"]
        process = await asyncio.create_subprocess_exec(
            *cmd,
            stdout=asyncio.subprocess.PIPE,
            stderr=asyncio.subprocess.PIPE
        )
        
        async for line in process.stdout:
            text = line.decode().strip()
            if text:
                yield f"data: {json.dumps({'content': text})}\n\n"
        
        yield f"data: {json.dumps({'done': True})}\n\n"
    
    return StreamingResponse(generate(), media_type="text/event-stream")

@app.get("/api/agent/skills")
async def list_skills():
    """列出所有可用技能"""
    result = subprocess.run(
        ["hermes", "skills", "--json"],
        capture_output=True, text=True
    )
    return json.loads(result.stdout)

@app.post("/api/agent/skill/{skill_name}")
async def execute_skill(skill_name: str, request: AgentRequest):
    """執行指定技能"""
    message = f"/{skill_name} {request.message}"
    request.message = message
    return await chat(request)

8.2.2 啟動 Agent Service

# 安裝依賴
pip install fastapi uvicorn pydantic

# 啟動服務
uvicorn agent_service:app --host 0.0.0.0 --port 8000 --reload

# API 文件:http://localhost:8000/docs

8.3 Spring Boot 後端整合

8.3.1 Agent Client 封裝

/**
 * Hermes Agent 客戶端
 * 透過 HTTP 呼叫 Agent Service 或直接呼叫 CLI
 */
@Service
@Slf4j
public class HermesAgentClient {

    private final WebClient webClient;
    
    @Value("${hermes.agent.url:http://localhost:8000}")
    private String agentUrl;

    public HermesAgentClient(WebClient.Builder builder) {
        this.webClient = builder.baseUrl(agentUrl).build();
    }

    /**
     * 與 Agent 對話
     * @param message 使用者訊息
     * @param sessionId Session ID(可選)
     * @return Agent 回應
     */
    public Mono<AgentResponse> chat(String message, String sessionId) {
        AgentRequest request = new AgentRequest();
        request.setMessage(message);
        request.setSessionId(sessionId);
        
        return webClient.post()
            .uri("/api/agent/chat")
            .bodyValue(request)
            .retrieve()
            .bodyToMono(AgentResponse.class)
            .doOnError(e -> log.error("Agent 呼叫失敗", e))
            .onErrorResume(e -> Mono.just(
                AgentResponse.error("Agent 暫時無法回應,請稍後再試")
            ));
    }

    /**
     * SSE 串流對話
     */
    public Flux<String> streamChat(String message) {
        AgentRequest request = new AgentRequest();
        request.setMessage(message);
        
        return webClient.post()
            .uri("/api/agent/stream")
            .bodyValue(request)
            .retrieve()
            .bodyToFlux(String.class);
    }

    /**
     * 執行指定技能
     */
    public Mono<AgentResponse> executeSkill(String skillName, String message) {
        AgentRequest request = new AgentRequest();
        request.setMessage(message);
        
        return webClient.post()
            .uri("/api/agent/skill/{skill}", skillName)
            .bodyValue(request)
            .retrieve()
            .bodyToMono(AgentResponse.class);
    }
}

8.3.2 REST Controller

/**
 * 智能助手 API Controller
 */
@RestController
@RequestMapping("/api/assistant")
@RequiredArgsConstructor
public class AssistantController {

    private final HermesAgentClient agentClient;

    @PostMapping("/chat")
    public Mono<ResponseEntity<AgentResponse>> chat(
            @RequestBody @Valid ChatRequest request) {
        return agentClient.chat(request.getMessage(), request.getSessionId())
            .map(ResponseEntity::ok);
    }

    @PostMapping("/stream")
    public Flux<ServerSentEvent<String>> streamChat(
            @RequestBody @Valid ChatRequest request) {
        return agentClient.streamChat(request.getMessage())
            .map(content -> ServerSentEvent.<String>builder()
                .data(content)
                .build());
    }

    @PostMapping("/code-review")
    public Mono<ResponseEntity<AgentResponse>> codeReview(
            @RequestBody @Valid CodeReviewRequest request) {
        String prompt = String.format(
            "請審查以下程式碼的安全性和品質:\n```java\n%s\n```",
            request.getCode()
        );
        return agentClient.executeSkill("code-review", prompt)
            .map(ResponseEntity::ok);
    }
}

8.4 前端整合(Vue / React)

8.4.1 Vue 3 Chat 組件

<template>
  <div class="agent-chat">
    <div class="messages" ref="messagesRef">
      <div v-for="msg in messages" :key="msg.id"
           :class="['message', msg.role]">
        <div class="content" v-html="renderMarkdown(msg.content)"></div>
        <div class="meta">
          <span v-if="msg.tokens">{{ msg.tokens }} tokens</span>
          <span v-if="msg.tools?.length">
            工具:{{ msg.tools.join(', ') }}
          </span>
        </div>
      </div>
      <div v-if="isStreaming" class="message assistant streaming">
        <div class="content">{{ streamContent }}</div>
        <span class="typing-indicator">▋</span>
      </div>
    </div>
    
    <div class="input-area">
      <textarea v-model="input" 
                @keydown.enter.ctrl="sendMessage"
                placeholder="輸入訊息(Ctrl+Enter 發送)"
                rows="3"></textarea>
      <button @click="sendMessage" :disabled="isStreaming">
        {{ isStreaming ? '回應中...' : '發送' }}
      </button>
    </div>
  </div>
</template>

<script setup>
import { ref, nextTick } from 'vue'
import { marked } from 'marked'

const messages = ref([])
const input = ref('')
const isStreaming = ref(false)
const streamContent = ref('')
const sessionId = ref(null)
const messagesRef = ref(null)

const AGENT_API = '/api/agent'

async function sendMessage() {
  if (!input.value.trim() || isStreaming.value) return
  
  const userMsg = input.value.trim()
  input.value = ''
  
  messages.value.push({
    id: Date.now(),
    role: 'user',
    content: userMsg
  })
  
  isStreaming.value = true
  streamContent.value = ''
  
  try {
    const response = await fetch(`${AGENT_API}/stream`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        message: userMsg,
        session_id: sessionId.value
      })
    })
    
    const reader = response.body.getReader()
    const decoder = new TextDecoder()
    
    while (true) {
      const { done, value } = await reader.read()
      if (done) break
      
      const text = decoder.decode(value)
      const lines = text.split('\n')
      
      for (const line of lines) {
        if (line.startsWith('data: ')) {
          const data = JSON.parse(line.slice(6))
          if (data.done) break
          streamContent.value += data.content
        }
      }
      
      await nextTick()
      scrollToBottom()
    }
    
    messages.value.push({
      id: Date.now(),
      role: 'assistant',
      content: streamContent.value
    })
  } catch (error) {
    messages.value.push({
      id: Date.now(),
      role: 'error',
      content: `錯誤:${error.message}`
    })
  } finally {
    isStreaming.value = false
    streamContent.value = ''
  }
}

function renderMarkdown(text) {
  return marked.parse(text || '')
}

function scrollToBottom() {
  if (messagesRef.value) {
    messagesRef.value.scrollTop = messagesRef.value.scrollHeight
  }
}
</script>

8.5 Agent-as-a-Service API 設計

8.5.1 API 規格

MethodEndpoint說明
POST/api/agent/chat對話(同步回應)
POST/api/agent/stream對話(SSE 串流)
GET/api/agent/skills列出技能
POST/api/agent/skill/{name}執行技能
GET/api/agent/sessions列出對話歷史
GET/api/agent/sessions/{id}取得對話詳情
DELETE/api/agent/sessions/{id}刪除對話
GET/api/agent/usageToken 使用統計
POST/api/agent/memory/search搜尋記憶

8.5.2 整合架構圖

graph LR
    subgraph "Client Apps"
        WEB_APP[Web Application
Vue / React] MOBILE[Mobile App
React Native] BOT[Chat Bot
Telegram / Discord] end subgraph "API Gateway" NGINX[Nginx / Kong
Rate Limit + Auth] end subgraph "Agent Service Cluster" SVC1[Agent Service 1
Profile: general] SVC2[Agent Service 2
Profile: code-review] SVC3[Agent Service 3
Profile: security] end subgraph "Hermes Instances" H1[Hermes Agent
General] H2[Hermes Agent
Code Expert] H3[Hermes Agent
Security Expert] end WEB_APP --> NGINX MOBILE --> NGINX BOT --> NGINX NGINX --> SVC1 NGINX --> SVC2 NGINX --> SVC3 SVC1 --> H1 SVC2 --> H2 SVC3 --> H3

最佳實踐:企業 Web 整合建議使用 Agent Service 中間層(FastAPI/Spring Boot),而非直接暴露 Hermes CLI。這樣可以:(1)統一認證與授權(2)加入請求限流(3)整合業務邏輯(4)多實例負載平衡。


第九章:企業級最佳實踐

9.1 安全性設計

9.1.1 API Key 管理

層級做法
開發環境.env 檔案(加入 .gitignore
CI/CDGitHub Secrets / Vault
生產環境HashiCorp Vault / AWS Secrets Manager
旋轉策略每 90 天輪換 API Key
# 不要這樣做 ❌
export ANTHROPIC_API_KEY=sk-ant-real-key-here

# 應該這樣做 ✅
# .env 檔案(不入版控)
ANTHROPIC_API_KEY=${vault:secret/hermes/anthropic-key}

9.1.2 指令審批(Command Approval)

# ~/.hermes/config.yaml
security:
  command_approval: smart      # 推薦企業使用

  # 永久白名單(無需審批)
  allowed_commands:
    - "git status"
    - "git diff"
    - "git log"
    - "mvn test"
    - "mvn verify"
    - "npm test"
    - "python -m pytest"
    - "ls"
    - "cat"
    - "grep"
  
  # 永久黑名單(永遠需要審批)
  # rm -rf, git push --force, DROP TABLE 等自動觸發

審批模式比較

模式說明適用環境
always所有指令都需審批高安全環境(銀行核心系統)
smart智慧判斷,危險指令要求審批一般企業(推薦)
never不審批(白名單仍生效)信任環境
yolo完全不審批(--yolo flag)僅限開發測試

9.1.3 MCP 安全

  • OAuth 2.1 PKCE(v0.5.0+):所有 MCP 伺服器連線支援標準 OAuth 認證
  • OSV 掃描:自動檢測 MCP 套件是否有已知漏洞
  • 工具過濾:可限制 MCP 伺服器暴露給 Agent 的工具
  • OAuth TOCTOU 關閉(v0.13.0):MCP OAuth 憑證儲存的時間競爭窗口已修正
  • SSE Transport OAuth 轉發(v0.13.0):SSE 連線自動轉發 OAuth 認證

9.1.4 安全強化(v0.5.0 — v0.13.0 持續強化)

防護項目實作
SSRF 防護合併 SSRF 保護,阻擋內網存取
Timing Attack計時攻擊緩解
Tar Traversaltar 解壓路徑穿越防護
Credential Leakage憑證洩露防護
Cross-session Isolation跨 Session 隔離
Cron Path TraversalCron 路徑穿越防護
Workdir Sanitization所有終端後端的工作目錄清理
Secret Exfiltration Blocking瀏覽器 URL 與 LLM 回應掃描機密模式(v0.7.0+)
Shell InjectionSandbox 寫入的 Shell 注入中和化(v0.9.0+)
Git Argument InjectionGit 參數注入防護(v0.9.0+)
Hardline Blocklist不可恢復指令永久封鎖清單(v0.12.0)
Secret Redaction 預設關閉避免 patch 損壞,需手動啟用(v0.12.0)
Secret Redaction 預設開啟v0.13.0 翻轉預設:Redaction 現為預設開啟,確保機密不外洩
Discord 角色白名單 Guild 隔離修正 CVSS 8.1 跨 Guild DM 繞過漏洞,DISCORD_ALLOWED_ROLES 現限定原始 Guild(v0.13.0)
WhatsApp 拒絕陌生人預設拒絕未知聯絡人訊息,不在自聊中回應(v0.13.0)
MCP OAuth TOCTOU關閉 MCP OAuth 憑證儲存的時間競爭窗口(v0.13.0)
auth.json TOCTOU關閉 CLI 憑證寫入的時間競爭窗口(v0.13.0)
Browser SSRF Floor強制雲端元資料 SSRF 底線保護(v0.13.0)
Cron Prompt Injection掃描已組裝的提示(含 Skill 內容)檢測 Prompt Injection(v0.13.0)
hermes debug share 遮蔽上傳時自動遮蔽日誌內容中的機密(v0.13.0)
檔案權限.env / auth.json / state.db 還原為 0600 權限(v0.13.0)
Dashboard SRIDashboard Plugin 腳本採用 Subresource Integrity 完整性驗證(v0.13.0)
Meet ServerNode 伺服器綁定 localhost,Token 檔案限制 owner read(v0.13.0)
Sensitive-write 擴展敏感寫入目標擴展覆蓋 Shell RC 和憑證檔案(v0.13.0)
YOLO Mode 強化強化 YOLO 模式環境變數解析,防止引號布林值繞過(v0.13.0)
OSV-Scanner CICI 加入 OSV-Scanner + Dependabot(僅 GitHub Actions)(v0.13.0)

9.2 成本控制

9.2.1 Token 成本策略

graph TD
    A[使用者請求] --> B{任務複雜度}
    B -->|簡單| C[免費模型
MiMo v2 Pro / Nous Portal] B -->|中等| D[中階模型
Claude Haiku / GPT-4o-mini] B -->|複雜| E[高階模型
Claude Sonnet / GPT-4o] B -->|極複雜| F[最強模型
o1 / Claude Opus] C --> G[成本: ~$0] D --> H[成本: ~$0.001/次] E --> I[成本: ~$0.01/次] F --> J[成本: ~$0.1/次]

9.2.2 成本控制設定

# config.yaml
model:
  provider: anthropic
  model: claude-sonnet-4-20250514

# 使用免費模型做輔助任務
auxiliary:
  provider: nous
  model: mimo-v2-pro     # 免費!

# Context 壓縮策略
context:
  auto_compress: true
  compress_threshold: 0.8  # 上下文使用 80% 時觸發壓縮

9.2.3 成本監控

# 查看使用量
/usage

# 查看 N 天內的使用洞察
/insights --days 7

# 範例輸出:
# 過去 7 天:
# - 總 Token:125,430
# - 估計成本:$2.35
# - 對話數:45
# - 技能使用:12 次
# - 最常用工具:execute_command(38%), write_file(25%)

9.3 效能優化

9.3.1 Context Compaction(上下文壓縮)

# 手動壓縮
/compress

# 自動壓縮(config.yaml)
context:
  auto_compress: true
  compress_threshold: 0.8

Token 預算尾部保護(v0.8.0 新增):壓縮時優先保留最近的工具結果和使用者訊息。

9.3.2 Cold-start 效能優化(v0.12.0)

v0.12.0 大幅優化 TUI 冷啟動效能,啟動時間縮短約 57%

# v0.11.0: ~2.1s 冷啟動
# v0.12.0: ~0.9s 冷啟動(-57%)
hermes  # 幾乎即時啟動

9.3.3 Configurable Prompt Cache TTL(v0.12.0)

# config.yaml
prompt_caching:
  cache_ttl: 300          # 預設 5 分鐘(秒)
  # cache_ttl: 3600       # 可設為 1 小時(opt-in)
  # 減少重複 System Prompt 的 Token 消耗

9.3.4 Programmatic Tool Calling

使用 execute_code 將多步驟操作壓縮為單次推理呼叫:

# 傳統方式(多次推理,高 Token 消耗)
Agent → read_file(a.java) → read_file(b.java) → read_file(c.java) → 分析
# 4 次推理 = 4x Token 成本

# Programmatic 方式(單次推理,低 Token 消耗)
Agent → execute_code("讀取所有 .java 並分析") → 結果
# 1 次推理 + 本地執行 = 1x Token 成本

9.3.3 非同步處理

# 背景任務 + 自動通知(v0.8.0 新增 notify_on_complete)
> 在背景執行完整測試套件,完成後通知我

# Agent 使用 execute_command 的 background + notify_on_complete
# 測試完成後自動通知到 CLI / Telegram / Discord

9.3.4 Subagent 平行化

# 委派子代理平行處理,減少總等待時間
> 請同時做以下三件事:
> 1. 搜尋最新的 Spring Boot 安全修補
> 2. 掃描 src/ 中的程式碼品質問題
> 3. 檢查 Docker Compose 配置是否正確

# 三個 subagent 平行執行
# 總時間 ≈ max(task1, task2, task3) 而非 sum(task1+task2+task3)

9.4 Logging / Monitoring

9.4.1 集中式日誌(v0.8.0)

# Hermes 自動寫入日誌
~/.hermes/logs/agent.log    # INFO+ 級別
~/.hermes/logs/errors.log   # WARNING+ 級別

# 即時查看日誌
hermes logs                  # tail -f agent.log
hermes logs --errors         # 只看錯誤
hermes logs --filter "tool"  # 過濾特定關鍵字

9.4.2 與 ELK Stack 整合

# filebeat.yml
filebeat.inputs:
  - type: log
    paths:
      - /root/.hermes/logs/agent.log
    json.keys_under_root: true
    fields:
      service: hermes-agent
      environment: production

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  index: "hermes-agent-%{+yyyy.MM.dd}"

9.4.3 與 Prometheus 整合

# 自訂 Prometheus metrics exporter
from prometheus_client import Counter, Histogram, start_http_server

agent_requests = Counter(
    'hermes_agent_requests_total',
    'Total agent requests',
    ['status', 'model']
)

token_usage = Histogram(
    'hermes_agent_tokens_used',
    'Tokens used per request',
    buckets=[100, 500, 1000, 5000, 10000, 50000]
)

tool_calls = Counter(
    'hermes_agent_tool_calls_total',
    'Total tool calls',
    ['tool_name']
)

# 啟動 metrics endpoint
start_http_server(9090)

9.4.4 Grafana Dashboard 建議指標

指標面板內容
Request Rate每分鐘請求數(by model / profile)
Token Usage每小時 Token 消耗(by provider)
Error Rate錯誤率(by error type)
Tool Usage工具使用排行
LatencyP50 / P95 / P99 回應時間
Cost每日 / 每週 / 每月成本趨勢
Active Sessions活躍對話數
Skill Usage技能使用頻率

9.4.5 Langfuse 可觀測性 Plugin(v0.12.0)

v0.12.0 內建 Langfuse observability plugin,提供端到端的 LLM 操作追蹤:

# config.yaml
plugins:
  langfuse:
    enabled: true
    public_key: "${LANGFUSE_PUBLIC_KEY}"
    secret_key: "${LANGFUSE_SECRET_KEY}"
    host: "https://cloud.langfuse.com"  # 或自託管

Langfuse 提供

  • Trace 追蹤:每次 Agent 對話的完整呼叫鏈(Prompt → Tools → Response)
  • 成本分析:按模型、使用者、時間段的 Token 成本明細
  • 品質評估:LLM 回應品質的自動與人工評分
  • A/B 測試:不同 Prompt / Model 的效果比較

9.5 錯誤處理與重試機制

9.5.1 Jittered Retry Backoff(v0.8.0)

Hermes v0.8.0 內建指數退避 + 隨機抖動的重試機制:

重試間隔 = min(base_delay * 2^attempt + random_jitter, max_delay)

第 1 次重試: ~1s + jitter
第 2 次重試: ~2s + jitter
第 3 次重試: ~4s + jitter
第 4 次重試: ~8s + jitter
最大間隔: 30s

9.5.2 Provider Failover

# 自動 failover 配置
providers:
  primary: anthropic
  fallback:
    - openrouter
    - nous
  
  # 402 付費失敗 → 切換下一個
  # 429 限流 → 指數退避
  # 500 伺服器錯誤 → 切換下一個
  # OAuth 過期 → 自動刷新

9.5.3 企業級錯誤處理建議

錯誤場景處理策略
API 暫時不可用指數退避重試(最多 4 次)
Token 餘額不足(402)自動切換 Fallback Provider
速率限制(429)指數退避 + Jitter
模型不支援工具呼叫顯示警告,建議切換模型
Context 溢出自動 Compaction
工具執行失敗重試或改用替代工具
網路中斷自動重連(Gateway 支援)

實務案例:某金融企業使用 Hermes Agent 做 24/7 自動化監控。透過 Cron 排程每小時檢查系統健康度,搭配 Telegram 通知。Provider Failover 確保即使某個 API 當機,Agent 仍可用備援模型持續運作,系統可用性達 99.9%。

9.6 Tips & Best Practices

以下是根據官方文檔和社群經驗整理的最佳實踐清單:

9.6.1 開發效率

技巧說明
使用 AGENTS.md在專案根目錄放置 AGENTS.md,Agent 會自動載入專案規範
善用 Skill 封裝複雜的重複任務封裝為 Skill,一次定義多次使用
使用 /compress長對話時定期壓縮上下文,節省 Token 並維持效能
善用 Subagent複雜任務使用 delegate_task 平行處理,減少總等待時間
Context Files建立完整的 AGENTS.md + SOUL.md,確保輸出品質一致
Programmatic Tool Calling使用 execute_code 批次操作,將多步驟壓縮為單次推理

9.6.2 成本優化

技巧節省幅度說明
免費輔助模型~60%使用 Nous Portal mimo-v2-pro 處理壓縮/摘要
自動壓縮~30%設定 context.auto_compress: true
模型分級~50%簡單任務用小模型,複雜任務用大模型
/insights 監控-定期查看 Token 使用趨勢,識別浪費

9.6.3 安全運作

技巧說明
command_approval: smart不要使用 yolo 模式在生產環境
白名單機制明確列出允許的指令,縮小攻擊面
Gateway allowed_users限制可與 Agent 對話的使用者
API Key 輪換每 90 天輪換,使用 Vault 管理
MCP OAuth啟用 OAuth 2.1 PKCE 認證所有 MCP 連線
日誌審計啟用集中式日誌,定期審計 Agent 行為

9.6.4 維運穩定

技巧說明
Provider Failover至少配置 2 個 Provider
hermes doctor升級後必執行,驗證環境完整性
備份 ~/.hermes/每日備份 Skills、Memories、Config
Health CheckDocker / K8s 配置 hermes doctor --quick
Profile 隔離不同團隊使用不同 Profile,避免互相干擾

第十章:部署與維運(DevOps)

10.1 Docker 部署

10.1.1 生產級 Docker 配置

# Dockerfile.production
FROM python:3.11-slim AS builder

WORKDIR /app

# 安裝系統依賴
RUN apt-get update && apt-get install -y --no-install-recommends \
    git curl ca-certificates \
    && rm -rf /var/lib/apt/lists/*

# 安裝 Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
    && apt-get install -y nodejs \
    && rm -rf /var/lib/apt/lists/*

# 安裝 uv
RUN curl -LsSf https://astral.sh/uv/install.sh | sh

# 複製依賴檔案
COPY pyproject.toml uv.lock ./

# 安裝依賴
RUN /root/.cargo/bin/uv pip install --system -e ".[all]"

# --- Production Stage ---
FROM python:3.11-slim

WORKDIR /app

# 複製已安裝的套件
COPY --from=builder /usr/local/lib/python3.11 /usr/local/lib/python3.11
COPY --from=builder /usr/local/bin /usr/local/bin
COPY --from=builder /usr/bin/node /usr/bin/node

# 複製應用程式
COPY . .

# 非 root 使用者
RUN useradd -m hermes && \
    mkdir -p /home/hermes/.hermes && \
    chown -R hermes:hermes /home/hermes

USER hermes

HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
    CMD hermes doctor --quick || exit 1

ENTRYPOINT ["hermes"]

⚠️ v0.13.0 安全強制:官方 Docker Image 現拒絕以 root 身份運行 Gateway。上述 USER hermes 為必要配置。Runtime node_modules 目錄會自動 chown 為 hermes 使用者。

💡 Docker Dashboard(v0.13.0):加入 HERMES_DASHBOARD=1 環境變數,Dashboard 會以 Side-process 啟動。加入 -p 3000:3000 暴露 Dashboard 連接埠。

10.1.2 Docker Compose 生產部署

# docker-compose.production.yml
version: '3.8'

services:
  hermes-agent:
    build:
      context: .
      dockerfile: Dockerfile.production
    container_name: hermes-agent
    restart: unless-stopped
    volumes:
      - hermes-data:/home/hermes/.hermes
      - ./workspace:/workspace
    env_file:
      - .env.production
    ports:
      - "127.0.0.1:8080:8080"
    networks:
      - hermes-net
    deploy:
      resources:
        limits:
          memory: 4G
          cpus: '2.0'
        reservations:
          memory: 1G
          cpus: '0.5'
    logging:
      driver: "json-file"
      options:
        max-size: "50m"
        max-file: "3"
    healthcheck:
      test: ["CMD", "hermes", "doctor", "--quick"]
      interval: 60s
      timeout: 10s
      retries: 3

  hermes-gateway:
    build:
      context: .
      dockerfile: Dockerfile.production
    container_name: hermes-gateway
    restart: unless-stopped
    command: ["gateway", "start"]
    volumes:
      - hermes-data:/home/hermes/.hermes
    env_file:
      - .env.production
    networks:
      - hermes-net
    depends_on:
      hermes-agent:
        condition: service_healthy

volumes:
  hermes-data:
    driver: local

networks:
  hermes-net:
    driver: bridge

10.2 Kubernetes 部署

10.2.1 K8s Deployment

# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hermes-agent
  labels:
    app: hermes-agent
spec:
  replicas: 2
  selector:
    matchLabels:
      app: hermes-agent
  template:
    metadata:
      labels:
        app: hermes-agent
    spec:
      containers:
        - name: hermes-agent
          image: ghcr.io/your-org/hermes-agent:v0.11.0
          resources:
            requests:
              memory: "1Gi"
              cpu: "500m"
            limits:
              memory: "4Gi"
              cpu: "2000m"
          envFrom:
            - secretRef:
                name: hermes-secrets
          volumeMounts:
            - name: hermes-data
              mountPath: /home/hermes/.hermes
            - name: workspace
              mountPath: /workspace
          livenessProbe:
            exec:
              command: ["hermes", "doctor", "--quick"]
            initialDelaySeconds: 30
            periodSeconds: 60
          readinessProbe:
            exec:
              command: ["hermes", "doctor", "--quick"]
            initialDelaySeconds: 10
            periodSeconds: 30
      volumes:
        - name: hermes-data
          persistentVolumeClaim:
            claimName: hermes-data-pvc
        - name: workspace
          persistentVolumeClaim:
            claimName: workspace-pvc

---
apiVersion: v1
kind: Service
metadata:
  name: hermes-agent-svc
spec:
  selector:
    app: hermes-agent
  ports:
    - port: 8080
      targetPort: 8080
  type: ClusterIP

---
apiVersion: v1
kind: Secret
metadata:
  name: hermes-secrets
type: Opaque
stringData:
  ANTHROPIC_API_KEY: "sk-ant-xxxxx"
  OPENROUTER_API_KEY: "sk-or-xxxxx"
  TELEGRAM_BOT_TOKEN: "12345:ABCdef"

10.2.2 PersistentVolumeClaim

# k8s/pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: hermes-data-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard

10.3 CI/CD 流程

10.3.1 GitHub Actions Pipeline

# .github/workflows/hermes-deploy.yml
name: Hermes Agent Deploy

on:
  push:
    branches: [main]
    paths:
      - 'hermes/**'
      - 'Dockerfile*'
      - 'docker-compose*.yml'

env:
  REGISTRY: ghcr.io
  IMAGE_NAME: ${{ github.repository }}/hermes-agent

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: '3.11'
      
      - name: Install dependencies
        run: |
          pip install -e ".[all,dev]"
      
      - name: Run tests
        run: |
          python -m pytest tests/ -q
      
      - name: Security scan
        run: |
          pip install safety
          safety check

  build-image:
    needs: build-and-test
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write
    steps:
      - uses: actions/checkout@v4
      
      - name: Log in to Container Registry
        uses: docker/login-action@v3
        with:
          registry: ${{ env.REGISTRY }}
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          file: Dockerfile.production
          push: true
          tags: |
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}

  deploy:
    needs: build-image
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to Kubernetes
        uses: azure/k8s-deploy@v4
        with:
          manifests: k8s/
          images: |
            ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}

10.4 滾動升級

10.4.1 Kubernetes Rolling Update 策略

# k8s/deployment.yaml 的 spec.strategy
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0      # 升級期間不停機
      maxSurge: 1             # 最多多 1 個 Pod

10.4.2 Hermes 內建升級

# 使用內建升級指令
hermes update

# 注意事項(v0.8.0 修正):
# - 升級不會 kill 正在運行的 gateway service
# - 升級後 bundled skills 會自動同步到所有 profiles
# - 升級後建議執行 hermes doctor 驗證

10.5 災難復原(DR)

10.5.1 備份策略

備份項目路徑頻率方式
設定檔~/.hermes/config.yaml每次修改Git 版控
Skills~/.hermes/skills/每日rsync / S3
Memories~/.hermes/memories/每日rsync / S3
Sessions DB~/.hermes/sessions.db每日SQLite backup
SOUL.md~/.hermes/SOUL.md每次修改Git 版控
.env~/.hermes/.env每次修改Vault

10.5.2 備份腳本

#!/bin/bash
# backup-hermes.sh

BACKUP_DIR="/backup/hermes/$(date +%Y%m%d)"
HERMES_HOME="$HOME/.hermes"

mkdir -p "$BACKUP_DIR"

# 備份設定
cp "$HERMES_HOME/config.yaml" "$BACKUP_DIR/"
cp "$HERMES_HOME/SOUL.md" "$BACKUP_DIR/" 2>/dev/null

# 備份 Skills
tar czf "$BACKUP_DIR/skills.tar.gz" -C "$HERMES_HOME" skills/

# 備份 Memories
tar czf "$BACKUP_DIR/memories.tar.gz" -C "$HERMES_HOME" memories/ 2>/dev/null

# 備份 Session DB(SQLite)
sqlite3 "$HERMES_HOME/sessions.db" ".backup '$BACKUP_DIR/sessions.db'"

# 上傳到 S3(可選)
# aws s3 sync "$BACKUP_DIR" "s3://your-bucket/hermes-backup/$(date +%Y%m%d)/"

echo "Backup completed: $BACKUP_DIR"

10.5.3 RTO / RPO 建議

場景RPO 建議RTO 建議策略
開發環境24h1h每日備份
測試環境24h2h每日備份
生產環境1h30min多副本 + 即時備份
金融環境0(零丟失)15min主從 + 即時同步

實務案例:某銀行團隊在 Kubernetes 上部署 Hermes Agent,使用 ReadWriteMany PVC 共享 Skills 和 Memories。每日凌晨透過 CronJob 備份到 S3,搭配 Rolling Update 策略實現零停機升級。RTO 目標 15 分鐘,RPO 目標 1 小時。


第十一章:升級與版本管理

11.1 升級策略

11.1.1 版本號規則

Hermes Agent 使用語義化版本(附日期標籤):

v0.8.0 (v2026.4.8)
│ │ │    │    │ │
│ │ │    │    │ └── 日(Day)
│ │ │    │    └──── 月(Month)
│ │ │    └───────── 年(Year)
│ │ └────────────── Patch(修復版本)
│ └──────────────── Minor(功能版本)
└────────────────── Major(大版本)

11.1.2 升級流程

graph TD
    A[查看新版本] --> B[閱讀 Release Notes]
    B --> C{是否有破壞性變更?}
    C -->|是| D[在測試環境驗證]
    C -->|否| E[直接升級]
    D --> F{測試通過?}
    F -->|是| E
    F -->|否| G[回報問題 / 等待修復]
    E --> H[執行升級]
    H --> I[hermes update]
    I --> J[hermes doctor]
    J --> K{診斷通過?}
    K -->|是| L[完成升級]
    K -->|否| M[檢查錯誤日誌]
    M --> N[hermes logs --errors]
    N --> O{可修復?}
    O -->|是| P[修復後重試]
    O -->|否| Q[回滾到前版]

11.1.3 升級指令

# 方式 1:使用內建升級指令(推薦)
hermes update

# 方式 1a:免確認升級(v0.13.0,適合 CI/CD)
hermes update --yes     # 或 -y

# 方式 1b:升級前預檢(v0.12.0)
hermes update --check   # 預覽可升級版本與破壞性變更

# 方式 2:手動升級(pip)
pip install --upgrade hermes-agent

# 方式 3:從原始碼升級
cd ~/hermes-agent
git pull origin main
uv pip install -e ".[all]"

# 方式 4:Docker 映像升級
docker pull ghcr.io/nousresearch/hermes-agent:latest
docker-compose up -d --force-recreate

# 升級後驗證
hermes --version
hermes doctor

11.1.4 升級注意事項(v0.8.0 特告)

項目說明
Skills 同步升級後 bundled skills 會自動同步到所有 Profiles
Gateway 保護hermes update 不再 kill 正在運行的 gateway service
Config 驗證啟動時會自動驗證 config.yaml 結構
OpenClaw 移轉如果從 OpenClaw 升級,使用 hermes claw migrate

11.1.5 v0.12.0 升級特別注意事項

項目說明
Node.js建議升級至 v22 LTS,影響 TUI 冷啟動效能
Secret Redaction預設已關閉,避免 patch 損壞,如需請手動啟用
Pluggable Providers所有 Provider 已移至 plugins/model-* 架構
Curator 預設啟用自動技能維護預設開啟,可透過 auxiliary.curator.enabled: false 關閉
Remote Model CatalogOpenRouter / Nous Portal 模型目錄改為遠端拉取

11.1.6 v0.13.0 升級特別注意事項

項目說明
Secret Redaction預設翻轉為開啟,如遇 patch 損壞可透過 security.redaction: false 關閉
Checkpoints v2新的 Checkpoint 格式,舊 Checkpoint 不會自動遷移,需要手動清除後重建
hermes update --yes升級指令新增 -y / --yes 旗標,跳過確認直接升級(適合 CI)
ProviderProfile ABC自訂 Provider 需改寫為繼承 ProviderProfile ABC 介面
Docker Root 拒絕Gateway 現拒絕以 root 身份運行,必須使用非 root 使用者
Windows Early Beta原生 Windows 支援為早期測試階段,WSL 仍為企業推薦方案
display.language新增 i18n 設定項,支援 zhjadeesfruktr
Kanban多 Agent Kanban 預設停用,需手動設定 kanban.enabled: true

11.2 相容性管理

11.2.1 版本相容性矩陣

Hermes 版本PythonNode.jsLLM Provider APIMCP
v0.5.x3.11+18+OpenAI v11.0
v0.6.x3.11+18+OpenAI v11.0
v0.7.x3.11+18+OpenAI v11.0 + OAuth
v0.8.x3.11+18+OpenAI v11.0 + OAuth 2.1
v0.9.x – v0.10.x3.11+18+OpenAI v11.0 + OAuth 2.1
v0.11.x3.11+20+OpenAI v1 + Responses1.0 + OAuth 2.1
v0.12.x3.11+22 LTSOpenAI v1 + Responses1.0 + OAuth 2.1
v0.13.x3.11+22 LTSOpenAI v1 + Responses1.0 + OAuth 2.1 + SSE

11.2.2 Provider 相容性

Provider支援版本備註
AnthropicClaude 3+Thinking block signature 管理
OpenAIGPT-4+自動修正工具呼叫參數類型
OpenRouter全部200+ 模型,aggregator-aware routing
Google AI StudioGemini 2+v0.8.0 新增原生支援,models.dev 自動偵測
Nous Portal全部免費 mimo-v2-pro 可用
Ollama全部本地模型,支援 Cloud auth
z.ai/GLM全部端點自動偵測與快取
MiniMax全部context length 修正、MiniMax TTS Speech 2.8
xAI (Grok)全部prompt caching 支援
Qwen(通義千問)全部OAuth Provider 支援、Portal request
Kimi/Moonshot全部OpenAI 相容端點

11.3 Migration 設計

11.3.1 從 OpenClaw 移轉

如果你之前使用 OpenClaw(Hermes 的前身),可以自動移轉:

# 互動式移轉(推薦)
hermes claw migrate

# 預覽移轉內容(不執行)
hermes claw migrate --dry-run

# 僅移轉使用者資料(不含 Secrets)
hermes claw migrate --preset user-data

# 覆寫已存在的衝突
hermes claw migrate --overwrite

# 移轉 workspace 指令
hermes claw migrate --workspace-target

移轉內容清單

項目來源目標
SOUL.md~/.openclaw/SOUL.md~/.hermes/SOUL.md
MemoriesMEMORY.md + USER.md~/.hermes/memories/
Skills使用者技能~/.hermes/skills/openclaw-imports/
指令白名單approval patterns~/.hermes/config.yaml
訊息設定platform configs~/.hermes/config.yaml
API KeysTelegram / OpenRouter / OpenAI 等~/.hermes/.env
TTS 資源workspace audio~/.hermes/assets/
AGENTS.mdworkspace 指令專案目錄

11.3.2 版本間 Migration

# Config migration 由 hermes doctor 自動偵測
hermes doctor

# 如果有 config 結構變更,會自動建議修改
# 例如:
# ⚠️ Config migration needed:
#   - memory_mode → recall_mode (Honcho)
#   - reasoning_effort 統一到 config.yaml

注意事項:大版本升級(如 v0.x → v1.x)前,務必先閱讀 Release Notes 的 Breaking Changes 區塊,並在測試環境驗證後再升級生產環境。


第十二章:實戰案例

12.1 AI Coding Agent

場景描述

團隊需要一個 AI Coding Agent 來輔助日常開發工作,包括程式碼撰寫、審查、測試和文件產出。

架構設計

graph LR
    DEV[開發人員] -->|CLI 或 VS Code| HERMES[Hermes Agent
Profile: coding] HERMES --> |read/write| CODE[專案程式碼
Git Repository] HERMES --> |execute| BUILD[建構工具
Maven / Gradle / npm] HERMES --> |execute| TEST[測試框架
JUnit / pytest] HERMES --> |search| WEB[技術文件
Web Search] HERMES --> |MCP| GH[GitHub MCP
PR / Issues] HERMES --> |記憶| MEM[專案知識庫
架構 / 規範 / 決策]

設定檔

# AGENTS.md(放在專案根目錄)
# AI Coding Agent 上下文

## 技術棧
- Java 21 / Spring Boot 3.2
- Maven
- JUnit 5 + Mockito
- PostgreSQL 16
- Clean Architecture

## 程式碼規範
- Google Java Style
- 每個 public 方法必須有 JavaDoc
- 測試覆蓋率 > 80%
- 不得使用 System.out.println

## Git 工作流
- feature/* → develop → main
- Conventional Commits
- PR 需要 2 人 review
# config.yaml
model:
  provider: anthropic
  model: claude-sonnet-4-20250514

security:
  command_approval: smart
  allowed_commands:
    - "mvn *"
    - "git status"
    - "git diff"
    - "git log"

toolsets:
  enabled: [core, web, delegation, code]

mcp:
  servers:
    - name: github
      command: npx
      args: ["@modelcontextprotocol/server-github"]

使用範例

# 1. 開發新功能
> 幫我開發使用者 CRUD API,遵循 AGENTS.md 中的規範

# 2. 程式碼審查
> 請審查 git diff 中的變更,檢查安全性和效能

# 3. 測試補齊
> 幫 UserService 補齊單元測試,目標覆蓋率 90%

# 4. 自動化 PR
> 幫我建立 PR,標題遵循 Conventional Commits

# 5. 排程(每日定時)
> 每天早上 9 點執行 mvn verify,結果傳到 Slack

12.2 智慧客服 Agent

場景描述

為銀行建立智慧客服系統,Agent 能理解客戶問題、查詢知識庫、處理常見業務。

架構設計

graph TB
    subgraph "客戶端"
        TG[Telegram]
        LINE[LINE]
        WEB[Web Chat]
    end
    
    subgraph "Hermes Gateway"
        GW[消息路由
認證 / 限流] end subgraph "Agent Layer" CS[客服 Agent
Profile: customer-service] KB[知識庫 Skill
FAQ / 產品 / 流程] ESC[升級 Skill
轉接真人客服] end subgraph "Backend" API[銀行 API
帳戶查詢 / 交易記錄] CRM[CRM 系統
客戶資料] end TG --> GW LINE --> GW WEB --> GW GW --> CS CS --> KB CS --> ESC CS -->|MCP| API CS -->|MCP| CRM

SOUL.md 設定

# SOUL.md
你是「小安」,XX 銀行的智慧客服助理。

## 性格特質
- 親切有禮、專業可靠
- 說話簡潔明瞭
- 遇到無法處理的問題,主動告知並轉接真人客服

## 限制
- 不能提供投資建議
- 不能洩漏其他客戶的資料
- 不能修改客戶帳戶(只能查詢)
- 敏感資訊必須遮蔽(帳號僅顯示末 4 碼)

## 語言
- 使用繁體中文
- 稱呼客戶為「您」

客服知識庫 Skill

# bank-customer-service

## Description
銀行客服知識庫,處理客戶常見問題。

## FAQ Categories
1. **帳戶查詢**:餘額、交易記錄、對帳單
2. **信用卡**:帳單、繳費、掛失、額度
3. **匯款**:國內匯款、國際匯款、轉帳限額
4. **貸款**:房貸、信貸、車貸進度查詢
5. **其他**:營業時間、ATM 據點、網銀問題

## Escalation Rules
- 客戶連續 3 次表示不滿意 → 轉接真人
- 涉及交易爭議 → 轉接真人
- 涉及帳戶異常 → 轉接真人 + 通知風控

12.3 銀行流程自動化 Agent

場景描述

自動化銀行內部 IT 作業流程,包括定時報表、系統監控、變更管理。

架構設計

graph TB
    subgraph "排程系統"
        CRON[Hermes Cron
排程管理] end subgraph "自動化任務" RPT[報表 Agent
每日/週/月報表] MON[監控 Agent
系統健康檢查] CHG[變更 Agent
部署前檢查] end subgraph "工具" DB[(Database
報表查詢)] GIT[Git Repository
程式碼掃描] JIRA[Jira / Issue
工單管理] DOCKER[Docker/K8s
部署狀態] end subgraph "通知" TG_N[Telegram
即時通知] MAIL[Email
報表分發] SK_N[Slack
團隊通知] end CRON --> RPT CRON --> MON CRON --> CHG RPT -->|MCP| DB MON --> DOCKER CHG --> GIT CHG --> JIRA RPT --> TG_N RPT --> MAIL MON --> TG_N CHG --> SK_N

Cron 排程設定

# 1. 每日報表(每天 08:00)
> 每天早上 8 點:
> - 查詢 PostgreSQL 取得昨日交易統計
> - 產生摘要報表(表格格式)
> - 傳送到 Telegram 群組和 Email

# 2. 系統監控(每小時)
> 每小時:
> - 檢查所有 K8s Pod 狀態
> - 檢查 DB connection pool
> - 檢查 API 回應時間
> - 如有異常,立即通知 Telegram

# 3. 部署前檢查(觸發式)
> 當收到 "部署檢查 [環境]" 訊息時:
> - 執行 mvn verify
> - 執行安全掃描(/bank-api-security-check)
> - 檢查 Jira 是否有未關閉的相關 Bug
> - 產出部署檢查報告

自動化報表範例輸出

# XX銀行系統日報 - 2026/04/09

## 交易統計
| 類型 | 筆數 | 金額(萬元)|
|------|------|------------|
| 轉帳 | 12,345 | 45,678 |
| 匯款 | 1,234 | 23,456 |
| 刷卡 | 34,567 | 12,345 |

## 系統健康度
- API 可用率:99.97%
- 平均回應時間:45ms(P99: 200ms)
- 錯誤率:0.03%
- DB Connection Pool:65/100

## 安全事件
- ⚠️ 偵測到 3 次異常登入嘗試(已鎖定)
- ✅ CVE 掃描:無新漏洞

## 待處理項目
- JIRA-1234:修復對帳差異問題(High,已指派)
- JIRA-1235:優化查詢效能(Medium,待指派)

實務案例:某銀行導入 Hermes Agent 自動化流程後,IT 團隊每日例行作業時間從 2 小時縮短至 15 分鐘。報表產出從人工製作改為自動化,錯誤率從 5% 降至 0.1%。系統異常平均偵測時間從 30 分鐘縮短至 5 分鐘。

12.4 多媒體創作 Agent

場景描述

結合 v0.12.0 新增的 ComfyUI v5、Spotify 整合和 TouchDesigner-MCP,建立多媒體內容創作 Agent。

架構設計

graph LR
    USER[創作者] -->|描述需求| AGENT[Hermes Agent
Profile: creative] AGENT -->|圖像生成| COMFY[ComfyUI v5
Stable Diffusion] AGENT -->|音樂控制| SPOTIFY[Spotify Plugin
PKCE OAuth] AGENT -->|視覺效果| TD[TouchDesigner-MCP
即時互動視覺] AGENT -->|影片腳本| WRITE[寫作 Skill
文案 / 分鏡] COMFY --> OUTPUT[創作成果] SPOTIFY --> OUTPUT TD --> OUTPUT WRITE --> OUTPUT

設定檔

# config.yaml
model:
  provider: anthropic
  model: claude-sonnet-4-20250514

plugins:
  spotify:
    enabled: true
  comfyui:
    enabled: true
    endpoint: "http://localhost:8188"   # 本地 ComfyUI 伺服器
  touchdesigner:
    enabled: true

toolsets:
  enabled: [core, web, code, browser]

使用範例

# 1. 生成行銷素材
> 幫我用 ComfyUI 生成一張企業年度報告的封面圖,
> 風格:科技感、藍色調、包含數據視覺化元素

# 2. 音樂配合
> 搜尋一首適合產品發布會的背景音樂,加到播放清單

# 3. 互動視覺
> 用 TouchDesigner 設計一個即時數據看板的原型

實務案例:某行銷團隊使用 Hermes Creative Agent 將素材製作時間從 3 天縮短至 2 小時,搭配 ComfyUI 自動生成的圖像與 Spotify 配樂,單月產出效率提升 10 倍。


第十三章:常見問題(FAQ)

Q1:Agent 無法學習 / 不建立 Skill?

可能原因

  1. 任務複雜度不夠高,Agent 判定不需要封裝
  2. Memory provider 未正確設定

解決方法

# 確認記憶設定
hermes config get memory.provider

# 手動觸發技能建立
> 請將剛才的操作流程封裝為一個技能

# 查看已有技能
/skills

Q2:Memory 佔用過多空間?

解決方法

# 查看記憶大小
du -sh ~/.hermes/memories/

# 壓縮 Session 資料庫
sqlite3 ~/.hermes/sessions.db "VACUUM;"

# 清理舊 Session
> 幫我清理 30 天前的 session 資料

# 如果使用 Vector DB,定期清理低相關性記憶
# mem0 / Supermemory 都有自動清理機制

Q3:Token 成本過高?

優化策略

策略效果做法
使用免費輔助模型節省 ~60%auxiliary.model: mimo-v2-pro
自動 Context 壓縮節省 ~30%context.auto_compress: true
Programmatic Tool Calling節省 ~50%用 execute_code 批次工具呼叫
選擇較小模型節省 ~70%簡單任務用 Haiku / 4o-mini
Subagent 委派節省上下文複雜任務分拆到子代理

Q4:模型切換失敗?

常見問題與解法

# 錯誤:Stale OAuth credentials
hermes auth login nous   # 重新登入

# 錯誤:Model not found
/model                   # 查看可用模型清單

# 錯誤:402 Payment Required
# → 自動切換到 fallback provider
# → 或充值 API 額度

# 錯誤:Non-agentic model warning
# → 切換到支援 tool-use 的模型(如 Claude Sonnet / GPT-4o)

# 診斷工具
hermes doctor

Q5:Gateway 連線不穩定?

排查步驟

# 1. 檢查 gateway 狀態
hermes gateway status

# 2. 查看日誌
hermes logs --filter "gateway"

# 3. 重啟 gateway
hermes gateway restart

# 4. 診斷
hermes doctor

# 5. 常見修復
# Telegram:檢查 BOT_TOKEN 是否正確
# Discord:確認 Bot 權限(不需要 members intent)
# Slack:確認 Event Subscription URL

Q6:Windows 環境怎麼用?

# 方式 1:WSL2(企業推薦)
wsl --install
curl -fsSL https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash

# 方式 2:Native Windows Early Beta(v0.13.0 新增)
irm https://hermes-agent.nousresearch.com/install.ps1 | iex
# 注意:Native Windows 為早期測試版,
# 不支援 Gateway / Voice / Docker 工具
# 企業生產環境仍建議使用 WSL2

Q7:如何與 VS Code 整合?

# Hermes 支援 ACP(Agent Communication Protocol)
# 可與 VS Code / JetBrains / Zed 整合

# 在 VS Code 中使用 Hermes 作為 AI Agent:
# 1. 安裝 Hermes VS Code 擴展
# 2. 設定 ACP adapter
# 3. 即可在 IDE 中直接呼叫 Hermes

# 或者直接在 VS Code Terminal 中使用 hermes CLI

Q8:MCP 伺服器連線失敗?

# 1. 確認 MCP 伺服器可用
npx @modelcontextprotocol/server-github --version

# 2. 確認環境變數已設定
echo $GITHUB_TOKEN

# 3. 檢查 OAuth 認證(v0.8.0)
# MCP OAuth 2.1 PKCE 需要瀏覽器互動

# 4. 檢查 OSV 掃描結果
# 如果套件有已知漏洞,Hermes 會阻擋安裝

Q9:Voice Mode 無法使用?

排查步驟

# 1. 確認已啟用語音工具集
hermes tools enable voice

# 2. 確認 STT/TTS Provider 設定
hermes config get voice.stt_provider
hermes config get voice.tts_provider

# 3. 確認 API Key 已配置
# OpenAI Whisper → 需要 OPENAI_API_KEY
# Voxtral → 需要 MISTRAL_API_KEY
# ElevenLabs → 需要 ELEVENLABS_API_KEY

# 4. 確認麥克風權限(CLI Voice Mode)
# macOS: 系統偏好設定 → 隱私權 → 麥克風
# Linux: 確認 PulseAudio / PipeWire 正常

# 5. 診斷
hermes doctor

Q10:如何查看 Agent 的完整執行日誌?

# 即時查看日誌
hermes logs

# 只看錯誤
hermes logs --errors

# 過濾特定關鍵字
hermes logs --filter "tool_call"
hermes logs --filter "memory"

# 日誌位置
~/.hermes/logs/agent.log     # INFO+ 級別
~/.hermes/logs/errors.log    # WARNING+ 級別

Q11:如何在多個專案間切換?

# 方式 1:使用不同 Profile
hermes --profile project-a
hermes --profile project-b

# 方式 2:在不同工作目錄啟動(會自動載入當前目錄的 AGENTS.md)
cd /path/to/project-a && hermes
cd /path/to/project-b && hermes

# 方式 3:使用 /new 重置對話但保留記憶
/new

Q12:Autonomous Curator 會刪除重要技能嗎?(v0.12.0)

Curator 的安全邊界

  • Bundled Skills(內建技能):永遠不會被修改或刪除
  • Hub Skills(社群安裝的技能):受保護,不會被修改
  • Pinned Skills:使用者手動標記的技能受保護
  • 使用者自建技能:低品質或長期未使用的「可能」被修剪
# 保護重要技能
hermes skills pin my-important-skill

# 關閉 Curator
hermes config set auxiliary.curator.enabled false

# 檢查 Curator 最近的操作報告
cat ~/.hermes/logs/curator/REPORT.md

Q13:hermes -z 和普通模式有何不同?(v0.12.0)

# -z 模式(非互動式,適合腳本與 CI/CD)
hermes -z "列出所有待修 bug"
# → 直接執行一次任務後退出,不進入 TUI
# → 不會記錄 session history
# → 可用 --model / --provider 指定模型

# 普通模式(互動式 TUI)
hermes
# → 進入持久對話,支援多輪互動
# → 記錄 session history
# → 支援所有 slash 指令

Q14:如何使用 Background Sessions?(v0.12.0)

# 在對話中,將耗時任務移至背景
> 幫我對整個 src/ 目錄做安全掃描
/background    # 將此任務移至背景

# 繼續在主對話中工作
> 幫我修改 README.md

# 背景任務完成後會自動通知
# [Background] 安全掃描完成,發現 2 個中風險問題

Q15:如何配置 Prompt Cache?(v0.12.0)

# config.yaml
prompt_caching:
  cache_ttl: 300         # 預設 5 分鐘
  # cache_ttl: 3600      # 高頻使用場景可設為 1 小時
  # 適用於 System Prompt 不常變更的場景
  # 可有效降低重複 Token 消耗

Q16:Multi-agent Kanban 如何設定?(v0.13.0)

# config.yaml
kanban:
  enabled: true
  max_concurrent: 4      # 同時運行的子代理數量
  auto_spawn: true        # 自動依任務生成子代理
# 使用 /kanban 查看看板狀態
/kanban

# 使用 /goal 設定持久化目標(Ralph Loop)
/goal 完成 API 重構並通過所有測試

Q17:如何啟用 i18n(多語系)介面?(v0.13.0)

# config.yaml
display:
  language: zh    # 繁體中文
  # 支援: zh, ja, de, es, fr, uk, tr

Q18:video_analyze 工具怎麼用?(v0.13.0)

# 在對話中直接分析影片
> 請分析這段影片的內容:/path/to/video.mp4

# 支援格式:MP4、WebM 等常見格式
# 需要 LLM Provider 支援 Vision(如 Claude Sonnet、GPT-4o)

附錄 A:檢查清單(Checklist)

A.1 安裝檢查清單

  • 確認作業系統為 Linux / macOS / WSL2
  • 確認 Python 3.11+ 已安裝
  • 確認 Node.js 22 LTS 已安裝(v0.12.0+ 建議)
  • 確認 Git 已安裝
  • 執行 curl -fsSL ... | bash 安裝 Hermes
  • 執行 source ~/.bashrc 重新載入 Shell
  • 執行 hermes --version 確認安裝成功
  • 執行 hermes setup 完成初始設定
  • 執行 hermes doctor 確認無問題

A.2 API Key 設定檢查清單

  • 至少設定一個 LLM Provider(Anthropic / OpenAI / OpenRouter)
  • 設定輔助模型(建議 Nous Portal 免費 mimo-v2-pro)
  • API Key 存放在 .env 檔案(不入版控)
  • .env 已加入 .gitignore
  • 生產環境 API Key 透過 Vault 或 Secret Manager 管理

A.3 安全檢查清單

  • command_approval 設定為 smartalways
  • allowed_commands 白名單已配置
  • 生產環境未使用 --yolo flag
  • MCP 伺服器有 OAuth 認證
  • API Key 定期輪換(建議 90 天)
  • 日誌中無敏感資訊洩漏
  • Gateway allowed_users 白名單已設定

A.4 生產部署檢查清單

  • Docker 映像使用多階段建構
  • 容器以非 root 使用者執行
  • Health Check 已配置
  • 資源限制已設定(memory / cpu)
  • 日誌已導向集中式日誌系統
  • 備份策略已制定並執行
  • Provider Failover 已配置(至少 2 個 Provider)
  • 監控告警已設定(Token 使用量 / 錯誤率 / 回應時間)

A.5 團隊導入檢查清單

  • 建立專案 AGENTS.md(專案上下文)
  • 建立團隊 SOUL.md(Agent 人格定義)
  • 建立團隊 Profile(hermes --profile team-xxx
  • 建立常用 Skills(如程式碼審查、安全掃描)
  • 建立 Cron 排程(如每日報表、系統監控)
  • 建立使用規範(哪些任務適合 / 不適合交給 Agent)
  • 團隊成員完成基礎訓練
  • 設定 Token 預算上限

A.6 升級檢查清單

  • 閱讀 Release Notes(特別是 Breaking Changes)
  • 在測試環境驗證
  • 備份 ~/.hermes/ 目錄
  • 執行 hermes update
  • 執行 hermes doctor 驗證
  • 確認所有 Skills 正常載入
  • 確認 Gateway 連線正常
  • 確認 Memory Provider 正常
  • 更新 Docker 映像版本(如使用容器部署)

附錄 B:指令速查表

B.1 CLI 指令

指令說明
hermes啟動互動式 CLI
hermes model互動式選擇模型與 Provider
hermes tools列出所有工具集與狀態
hermes tools enable <name>啟用工具集
hermes tools disable <name>停用工具集
hermes config set <key> <value>設定單項配置
hermes config get <key>查看單項配置
hermes setup執行完整設定精靈
hermes gateway start啟動訊息平台閘道
hermes gateway stop停止閘道
hermes gateway status查看閘道狀態
hermes gateway setup設定閘道平台
hermes auth login <provider>OAuth 登入 Provider
hermes auth remove <provider>移除 Provider 憑證
hermes claw migrate從 OpenClaw 移轉
hermes update升級到最新版本
hermes doctor診斷環境問題
hermes logs查看 Agent 日誌
hermes logs --errors只查看錯誤日誌
hermes --profile <name>使用指定 Profile 啟動
hermes --voice啟用語音模式
hermes --version顯示版本資訊
hermes -z "<task>"Non-interactive 單次模式(v0.12.0)
hermes -z --model <m>單次模式指定模型(v0.12.0)
hermes curator手動觸發 Curator(v0.12.0)
hermes curator status查看 Curator 技能排名(v0.12.0)
hermes curator archive歸檔低品質技能(v0.13.0)
hermes curator prune清理已歸檔技能(v0.13.0)
hermes curator list-archived列出已歸檔技能(v0.13.0)
hermes update --check升級預檢(v0.12.0)
hermes update --yes免確認升級(v0.13.0)
hermes fallback管理 Fallback Provider(v0.12.0)
hermes plugins list列出已安裝 Plugin(v0.12.0)
hermes plugins enable <name>啟用 Plugin(v0.12.0)
hermes gateway list列出所有已設定平台(v0.13.0)
hermes kanban查看 Kanban 看板狀態(v0.13.0)

B.2 對話中斜線指令

指令說明
/new/reset開啟新對話(保留記憶)
/model [provider:model]切換模型
/compress壓縮當前上下文
/usage查看 Token 使用量
/insights [--days N]查看使用洞察
/skills列出可用技能
/<skill-name>執行特定技能
/personality [name]設定人格
/retry重試上一輪
/undo撤銷上一輪
/voice on/off開關語音模式
/approve批准待審指令
/deny拒絕待審指令
/stop中斷當前操作
/platforms查看連線平台狀態
/status查看 Agent 狀態
/busy [steer|queue|interrupt]忙碗模式(v0.12.0)
/btw中插任務導引(v0.12.0)
/background移至背景執行(v0.12.0)
/reload熱重載 .env(v0.12.0)
/reload-skills重新載入技能庫(v0.12.0)
/reload-mcp重建 MCP cached agents(v0.12.0)
/mouse互動式滑鼠操作(v0.12.0)
/fast切換 Fast Mode
/steer中途導引 Agent 行為(v0.11.0)
/goal設定持久化目標(Ralph Loop)(v0.13.0)
/kanban顯示 Multi-agent Kanban 看板(v0.13.0)
/queue查看任務佇列(v0.13.0)

附錄 C:環境變數參考

環境變數說明必要性
ANTHROPIC_API_KEYAnthropic API 金鑰至少一個 Provider
OPENAI_API_KEYOpenAI API 金鑰至少一個 Provider
OPENROUTER_API_KEYOpenRouter API 金鑰至少一個 Provider
GOOGLE_AI_API_KEYGoogle AI Studio API 金鑰選用
XAI_API_KEYxAI (Grok) API 金鑰選用
NVIDIA_API_KEYNVIDIA NIM API 金鑰選用
AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEYAWS Bedrock 認證選用
HF_TOKENHugging Face Inference API Token選用
GMI_API_KEYGMI Cloud API 金鑰選用
DEEPSEEK_API_KEYDeepSeek API 金鑰選用
DASHSCOPE_API_KEYAlibaba Cloud / Qwen API 金鑰選用
MISTRAL_API_KEYMistral AI API 金鑰(Voxtral STT)選用
TELEGRAM_BOT_TOKENTelegram Bot TokenGateway 需要
DISCORD_BOT_TOKENDiscord Bot TokenGateway 需要
SLACK_BOT_TOKENSlack Bot TokenGateway 需要
GITHUB_TOKENGitHub Token(MCP / Copilot 用)MCP 需要
DATABASE_URLPostgreSQL 連線字串(MCP 用)MCP 需要
ELEVENLABS_API_KEYElevenLabs TTS API 金鑰Voice 需要
MEM0_API_KEYmem0 Cloud API 金鑰mem0 記憶需要
HERMES_PORTAL_BASE_URL自訂 Nous Portal URL選用
HERMES_HOME自訂 Hermes 主目錄(預設 ~/.hermes選用
AI_GATEWAY_API_KEYVercel AI Gateway API 金鑰選用
LM_STUDIO_URLLM Studio 本地端點(v0.12.0)選用
AZURE_AI_FOUNDRY_KEYAzure AI Foundry API 金鑰(v0.12.0)選用
AZURE_AI_FOUNDRY_ENDPOINTAzure AI Foundry 端點(v0.12.0)選用
TENCENT_TOKENHUB_KEY騰訊 Tokenhub API 金鑰(v0.12.0)選用
MINIMAX_API_KEYMiniMax API 金鑰(v0.12.0 PKCE)選用
SPOTIFY_CLIENT_IDSpotify Client ID(v0.12.0)Spotify 需要
SPOTIFY_CLIENT_SECRETSpotify Client Secret(v0.12.0)Spotify 需要
LANGFUSE_PUBLIC_KEYLangfuse Public Key(v0.12.0)可觀測性選用
LANGFUSE_SECRET_KEYLangfuse Secret Key(v0.12.0)可觀測性選用
GOOGLE_MEET_CREDENTIALSGoogle Meet 憑證(v0.12.0)Meet 需要
HERMES_DASHBOARD設為 1 啟動 Dashboard Side-process(v0.13.0)選用
DISCORD_ALLOWED_ROLESDiscord Guild 角色白名單(v0.13.0 安全修正)選用
XAI_API_KEYxAI Custom Voices TTS API 金鑰(v0.13.0)Voice 需要
GOOGLE_CHAT_WEBHOOKGoogle Chat Webhook URL(v0.13.0)Gateway 需要

附錄 D:Provider 完整清單

截至 v0.13.0,Hermes Agent 支援 35+ 可插拔式 Provider,均透過 ProviderProfile ABC + plugins/model-* 架構載入:

#Provider說明版本
1OpenAIGPT-4o / GPT-5.5 / o1 / o3v0.1.0+
2AnthropicClaude Sonnet / Opus / Haikuv0.1.0+
3OpenRouter200+ 模型聚合v0.1.0+
4Nous PortalHermes 3 / MiMo v2 Pro(免費)v0.3.0+
5Google AI StudioGemini 2.5 Pro / Flashv0.4.0+
6Ollama本地模型v0.4.0+
7z.ai / GLM智譜模型v0.5.0+
8Kimi / MoonshotKimi 系列v0.5.0+
9MiniMaxMiniMax 模型 + TTSv0.5.0+
10Qwen(通義千啎)Qwen 系列v0.5.0+
11xAIGrok 3 / Grok 3 miniv0.6.0+
12DeepSeekDeepSeek v3 / v4v0.6.0+
13Hugging FaceInference APIv0.7.0+
14GitHub CopilotCodex OAuthv0.8.0+
15Xiaomi MiMoMiMo 模型v0.9.0+
16AWS BedrockConverse API(Native)v0.11.0+
17NVIDIA NIMNemotron 系列v0.11.0+
18Arcee AI企業微調模型v0.11.0+
19GMI CloudGMI 雲端推理v0.11.0+
20Step Plan階段規劃推理v0.11.0+
21Gemini CLI OAuthGoogle CLI OAuth 流程v0.11.0+
22Vercel AI GatewayVercel 網關v0.11.0+
23LM Studio本地 first-class Providerv0.12.0
24Azure AI FoundryAzure 雲端推理v0.12.0
25GMI CloudGMI 雲端推理(升級)v0.12.0
26MiniMax OAuthPKCE OAuth 流程v0.12.0
27Tencent Tokenhub騰訊雲模型v0.12.0
28xAI Custom Voices語音克隆 TTS Providerv0.13.0
29SearXNG原生搜尋引擎 Providerv0.13.0
30-35+OpenAI-compatible任何相容 API 端點全版本

v0.13.0 新增模型

模型Provider說明
DeepSeek v4 ProDeepSeek最新代推理模型
Grok 4.3xAI升級版 Grok
Owl AlphaOpenRouter免費模型
hy3-previewTencent預覽版模型
Arcee Trinity Large ThinkingArcee AI支援溫度 + 壓縮覆寫

說明:v0.12.0 將所有 Provider 重構為 Pluggable 架構,v0.13.0 進一步引入 ProviderProfile ABC 介面,第三方可自行開發 Provider Plugin 並載入 Hermes。


參考資源

資源連結
官方文件hermes-agent.nousresearch.com/docs
GitHubgithub.com/NousResearch/hermes-agent
Skills Hubagentskills.io
Discord 社群discord.gg/NousResearch
Nous Portalportal.nousresearch.com
OpenRouteropenrouter.ai
Issue TrackerGitHub Issues
討論區GitHub Discussions
Voice Mode 指南Use Voice Mode with Hermes
MCP 使用指南Use MCP with Hermes
WSL2 網路指南WSL2 Networking Guide

文件版本:v4.0.0
基於 Hermes Agent:v0.13.0 (v2026.5.7,The Tenacity Release)
建立日期:2026 年 4 月 9 日
最後更新:2026 年 5 月 12 日
維護者:技術架構團隊