Section: Core Features · URL: https://hermesbible.com/docs/user-guide/features/built-in-plugins
Hermes 隨附了一組小型內建外掛,這些外掛與程式碼庫一同發佈,位於 <repo>/plugins/<name>/,會與使用者安裝於 ~/.hermes/plugins/ 的外掛一起自動載入。它們使用與第三方外掛相同的外掛介面 — hooks、tools、slash commands — 只是由核心團隊在程式碼庫內維護。
請參閱 Plugins 頁面了解一般外掛系統,或參閱 Build a Hermes Plugin 來撰寫自己的外掛。
發現機制
PluginManager 會依序掃描四個來源:
- Bundled —
<repo>/plugins/<name>/(本頁面所記錄的內容) - User —
~/.hermes/plugins/<name>/ - Project —
./.hermes/plugins/<name>/(需啟用HERMES_ENABLE_PROJECT_PLUGINS=1) - Pip entry points —
hermes_agent.plugins
當名稱衝突時,較後的來源會覆蓋前面的 — 例如名為 disk-cleanup 的使用者外掛會取代內建版本。
plugins/memory/ 和 plugins/context_engine/ 被刻意排除在內建掃描之外。這些目錄使用各自的發現路徑,因為記憶體提供者(memory providers)和上下文引擎(context engines)是透過 hermes memory setup / context.engine 設定來單獨選取的提供者。
內建外掛採用 opt-in 機制
內建外掛出廠時預設為停用狀態。發現機制會找到它們(它們會出現在 hermes plugins list 和互動式 hermes plugins UI 中),但除非你明確啟用,否則不會載入任何外掛:
hermes plugins enable disk-cleanup
或透過 ~/.hermes/config.yaml:
plugins:
enabled:
- disk-cleanup
這與使用者安裝的外掛使用相同的機制。內建外掛永遠不會自動啟用 — 不論是全新安裝,還是現有使用者升級到較新版的 Hermes。你始終需要明確選擇啟用。
要關閉內建外掛:
hermes plugins disable disk-cleanup
# 或:從 config.yaml 的 plugins.enabled 中移除
目前隨附的外掛
程式碼庫在 plugins/ 目錄下隨附了以下內建外掛。全部採用 opt-in — 透過 hermes plugins enable <name> 啟用。
| 外掛 | 類型 | 用途 |
|---|---|---|
disk-cleanup | hooks + slash command | 自動追蹤暫存檔案,並在工作階段結束時清理 |
security-guidance | hooks | 在 write_file/patch 時進行危險程式碼模式匹配,並附加安全性警告(或封鎖) — 共 25 條規則(基於 Anthropic claude-plugins-official 的 Apache-2.0 分支) |
observability/langfuse | hooks | 將對話輪次 / LLM 呼叫 / 工具追蹤至 Langfuse |
observability/nemo_relay | hooks | 將可观測性事件(對話輪次 / LLM 呼叫 / 工具)轉送至 NVIDIA NeMo 端點 |
teams_pipeline | standalone | Microsoft Teams 會議管線 — 基於 Graph API,以逐字稿為主的會議摘要 |
spotify | backend (7 tools) | 原生 Spotify 播放、佇列、搜尋、播放清單、專輯、音樂庫 |
google_meet | standalone | 加入 Meet 通話、即時字幕轉錄、可選的即時雙向音訊 |
image_gen/openai | image backend | OpenAI gpt-image-2 圖片生成後端(FAL 的替代方案) |
image_gen/openai-codex | image backend | 透過 Codex OAuth 使用 OpenAI 圖片生成 |
image_gen/xai | image backend | xAI grok-2-image 後端 |
hermes-achievements | dashboard tab | Steam 風格的收藏徽章,根據你真實的 Hermes 工作階段歷史生成 |
kanban/dashboard | dashboard tab | 多代理調度器的看板 UI — 任務、評論、分派、看板切換。參閱 Kanban Multi-Agent。 |
記憶體提供者(plugins/memory/*)和上下文引擎(plugins/context_engine/*)在 Memory Providers 頁面中另行列出 — 它們分別透過 hermes memory 和 hermes plugins 管理。以下是兩個長駐 hooks 類型外掛的完整說明。
disk-cleanup
自動追蹤並移除工作階段期間建立的暫存檔案 — 測試腳本、暫存輸出、排程日誌、過時的瀏覽器設定檔 — 無需代理人記得呼叫工具。
運作方式:
| Hook | 行為 |
|---|---|
post_tool_call | 當 write_file / terminal / patch 建立的檔案符合 test_*、tmp_* 或 *.test.* 模式,且位於 HERMES_HOME 或 /tmp/hermes-* 時,會靜默地將其追蹤為 test / temp / cron-output。 |
on_session_end | 如果在該輪中有自動追蹤的測試檔案,會執行安全的 quick 清理並記錄一行摘要。否則保持靜默。 |
刪除規則:
| 類別 | 閾值 | 需確認 |
|---|---|---|
test | 每次工作階段結束 | 從不 |
temp | 追蹤後超過 7 天 | 從不 |
cron-output | 追蹤後超過 14 天 | 從不 |
| HERMES_HOME 下的空目錄 | 始終清理 | 從不 |
research | 超過 30 天,且超過 10 個最新項目 | 始終需要(僅限 deep 模式) |
chrome-profile | 追蹤後超過 14 天 | 始終需要(僅限 deep 模式) |
| 大於 500 MB 的檔案 | 永不自動刪除 | 始終需要(僅限 deep 模式) |
Slash command — 在 CLI 和 gateway 工作階段中皆可使用 /disk-cleanup:
/disk-cleanup status # 分類統計 + 前 10 大檔案
/disk-cleanup dry-run # 預覽而不刪除
/disk-cleanup quick # 立即執行安全清理
/disk-cleanup deep # quick + 列出需要確認的項目
/disk-cleanup track <path> <category> # 手動追蹤
/disk-cleanup forget <path> # 停止追蹤(不刪除)
狀態儲存 — 所有資料位於 $HERMES_HOME/disk-cleanup/:
| 檔案 | 內容 |
|---|---|
tracked.json | 追蹤的路徑,包含類別、大小和時間戳 |
tracked.json.bak | 上述檔案的原子寫入備份 |
cleanup.log | 每次追蹤 / 跳過 / 拒絕 / 刪除的僅附加審計軌跡 |
安全性 — 清理作業僅會處理 HERMES_HOME 或 /tmp/hermes-* 下的路徑。Windows 掛載點(/mnt/c/...)會被拒絕。知名的頂層狀態目錄(logs/、memories/、sessions/、cron/、cache/、skills/、plugins/、以及 disk-cleanup/ 本身)即使為空也不會被移除 — 全新安裝不會在第一次工作階段結束時被清空。
啟用: hermes plugins enable disk-cleanup(或在 hermes plugins 中勾選)。
停用: hermes plugins disable disk-cleanup。
security-guidance
在寫入檔案時進行快速模式匹配的安全性警告。當代理人的 write_file / patch / skill_manage 呼叫內容中包含已知危險的程式碼模式 — pickle.load、未使用 SafeLoader 的 yaml.load、eval(、os.system、subprocess(..., shell=True)、JS 的 child_process.exec、React 的 dangerouslySetInnerHTML、原始 .innerHTML = / .outerHTML = / document.write、Node 的 crypto.createCipher、AES ECB 模式、停用 TLS 驗證、易受 XXE 攻擊的 xml.etree / minidom 解析器、不含 SRI 的 <script src="//..." >、未使用 weights_only=True 的 torch.load、GitHub Actions ${{ github.event.* }} 注入 — 外掛會在工具結果中附加一個 ⚠️ Security guidance 區塊。
檔案仍然會被寫入。模型在下一輪的工具訊息中讀取警告,然後可以修正程式碼或記錄為什麼在該情境下該寫法是安全的。模式匹配存在不可忽視的誤報率,因此預設行為是警告(而非封鎖)。
覆蓋範圍: 共 25 條規則,涵蓋不安全的反序列化、命令注入、XSS 攻擊點、加密陷阱、XXE、供應鏈(SRI)以及 CI/CD 工作流程注入。模式資料是 Anthropic 的 claude-plugins-official 的逐字 Apache-2.0 分支 — 請參閱外掛的 LICENSE 和 NOTICE 檔案以確認出處。
模式:
| 環境變數 | 效果 |
|---|---|
| (未設定) | warn 模式(預設)— 檔案會被寫入,警告附加在結果中 |
SECURITY_GUIDANCE_BLOCK=1 | block 模式 — 拒絕寫入,警告作為封鎖原因回傳 |
SECURITY_GUIDANCE_DISABLE=1 | 停用開關 — 外掛載入但不做任何事 |
啟用: hermes plugins enable security-guidance(或在 hermes plugins 中勾選)。
停用: hermes plugins disable security-guidance。
目前尚未實作的功能: 上游 Anthropic 外掛還有兩個額外層級 — 在代理人每次處理涉及檔案變更的輪次時進行 LLM diff 審查,以及在提交時進行跨檔案的資料流追蹤審查。這兩個功能尚未移植。代理人可以透過 demand_task 按需執行這些審查。
observability/langfuse
將 Hermes 的對話輪次、LLM 呼叫和工具調用追蹤至 Langfuse — 一個開源的 LLM 可观测性平台。每個輪次對應一個 span,每次 API 呼叫對應一個 generation,每次工具呼叫對應一個 tool observation。使用量統計、按類型的 token 計數和成本估算來自 Hermes 標準的 agent.usage_pricing 數據,因此 Langfuse 儀表板看到的分類(input / output / cache_read_input_tokens / cache_creation_input_tokens / reasoning_tokens)與 hermes logs 中顯示的完全一致。
該外掛採用 fail-open 設計:未安裝 SDK、缺少憑證,或 Langfuse 臨時性錯誤 — 全部在 hook 中靜默忽略。代理迴圈永遠不會受到影響。
設定方式(互動式 — 建議):
hermes tools # → Langfuse Observability → Cloud 或 Self-Hosted
設定精靈會收集你的金鑰、執行 pip install langfuse,並將 observability/langfuse 加入 plugins.enabled。重啟 Hermes 後,下一個輪次就會發送追蹤數據。
設定方式(手動):
pip install langfuse
hermes plugins enable observability/langfuse
然後將憑證放入 ~/.hermes/.env:
HERMES_LANGFUSE_PUBLIC_KEY=pk-lf-...
HERMES_LANGFUSE_SECRET_KEY=sk-lf-...
HERMES_LANGFUSE_BASE_URL=https://cloud.langfuse.com # 或你的自架網址
運作方式:
| Hook | 行為 |
|---|---|
pre_api_request / pre_llm_call | 開啟(或重用)一個以輪次為單位的根 span「Hermes turn」。為此 API 呼叫啟動一個 generation 子 observation,輸入為序列化的近期訊息。 |
post_api_request / post_llm_call | 關閉 generation,附加 usage_details、cost_details、finish_reason、助理輸出和工具呼叫。若無工具呼叫且內容非空,則關閉輪次。 |
pre_tool_call | 以清理過的 args 啟動一個 tool 子 observation。 |
post_tool_call | 以清理過的 result 關閉 tool observation。read_file 的內容會被摘要化(head + tail + 省略行數),以確保大量檔案讀取不會超過 HERMES_LANGFUSE_MAX_CHARS。 |
工作階段分組基於 Hermes 工作階段 ID(或子代理人的 task ID),透過 langfuse.propagate_attributes 實現,因此單一 hermes chat 工作階段中的所有內容都位於同一個 Langfuse 工作階段下。
驗證:
hermes plugins list # observability/langfuse 應顯示 "enabled"
hermes chat -q "hello" # 在 Langfuse UI 中查看 "Hermes turn" 追蹤
可選調校(在 .env 中設定):
| 變數 | 預設值 | 用途 |
|---|---|---|
HERMES_LANGFUSE_ENV | — | 追蹤資料上的環境標籤(production、staging …) |
HERMES_LANGFUSE_RELEASE | — | 版本標籤 |
HERMES_LANGFUSE_SAMPLE_RATE | 1.0 | 傳遞給 SDK 的取樣率(0.0–1.0) |
HERMES_LANGFUSE_MAX_CHARS | 12000 | 訊息內容 / 工具參數 / 工具結果的每欄位截斷字數 |
HERMES_LANGFUSE_DEBUG | false | 將外掛的詳細日誌輸出至 agent.log |
Hermes 前綴和標準 SDK 環境變數(LANGFUSE_PUBLIC_KEY、LANGFUSE_SECRET_KEY、LANGFUSE_BASE_URL)皆可接受 — 兩者同時設定時,Hermes 前綴優先。
效能: Langfuse 客戶端在第一次 hook 呼叫後會被快取。若憑證或 SDK 缺失,此決定也會被快取 — 後續的 hook 會快速返回,無需重新檢查環境變數或重新載入設定。
停用: hermes plugins disable observability/langfuse。外掛模組仍會被發現,但在你重新啟用之前不會執行任何模組程式碼。
google_meet
讓代理人可以加入、轉錄並參與 Google Meet 通話 — 在會議中做筆記、事後摘要討論內容、針對特定要點進行後續跟進,以及(可選地)透過 TTS 將回覆語音輸入通話中。
新增功能:
- 一個使用瀏覽器自動化的無頭虛擬參與者,透過 Meet URL 加入會議
- 透過已設定的 STT 提供者進行會議音訊的即時轉錄
- 代理人可調用的
meet_summarize/meet_speak/meet_followup工具組 - 會議後的產出(逐字稿、按發言者標註的筆記、待辦事項)儲存於
~/.hermes/cache/google_meet/<meeting_id>/
設定:
hermes plugins enable google_meet
# 首次使用時會提示你透過外掛的 OAuth 流程登入 —
# 需要具有 Meet 存取權限的 Google 帳戶。如果會議啟用了
# 「僅受邀者可加入」,可能需要主持人批准。
從聊天中使用:
「加入 meet.google.com/abc-defg-hij 並做筆記。通話結束後,發送一份包含待辦事項的摘要給我。」
代理人會啟動會議加入流程,在通話進行中將轉錄內容串流回其上下文,並在會議結束時(或你要求停止時)產生結構化摘要。
使用時機: 需要機器人為異步參與者轉錄 + 摘要的定期站會;需要結構化筆記的證詞式訪談;任何你原本需要使用 Fireflies / Otter / Grain 的場合。如果你不希望有 AI 在旁聽 — 不要啟用此功能。
停用: hermes plugins disable google_meet。所有已快取的逐字稿和錄音會保留在 ~/.hermes/cache/google_meet/ 中,直到你手動刪除。
hermes-achievements
為儀表板新增一個 Steam 風格的成就分頁 — 60 多個可收集的分級徽章,根據你真實的 Hermes 工作階段歷史生成。工具鏈成就、除錯模式、vibe-coding 連續紀錄、skill/memory 使用情況、模型/提供者多樣性、生活作息特徵(週末和夜間工作階段)。最初由 @PCinkusz 作為外部外掛開發;納入核心程式碼庫以便與 Hermes 功能更新保持同步。
運作方式:
- 在儀表板後端掃描整個
~/.hermes/state.db工作階段歷史 - 每個工作階段的統計資料以
(started_at, last_active)指紋快取,因此後續掃描時只會重新分析新增或變更的工作階段 - 首次掃描在背景執行緒中運行 — 即使資料庫有數千個工作階段,儀表板也不會因此阻塞
- 解鎖狀態持久化至
$HERMES_HOME/plugins/hermes-achievements/state.json
等級晉升: 銅 → 銀 → 金 → 鑽石 → 奧林匹克。每張卡片都有一個「計算方式」區塊,列出正在追蹤的確切指標。
成就狀態:
| 狀態 | 意義 |
|---|---|
| Unlocked | 至少達到一個等級 |
| Discovered | 已知成就,進度可見,尚未獲得 |
| Secret | 在 Hermes 偵測到你歷史中第一個相關訊號之前隱藏 |
API — 路由掛載於 /api/plugins/hermes-achievements/:
| 端點 | 用途 |
|---|---|
GET /achievements | 完整目錄,包含每個徽章的解鎖狀態(首次冷掃描進行中時回傳待處理佔位符) |
GET /scan-status | 背景掃描器狀態:idle / running / failed、上次耗時、執行次數 |
GET /recent-unlocks | 最近解鎖的 20 個徽章,最新的在前 |
GET /sessions/{id}/badges | 主要在某個特定工作階段中獲得的徽章 |
POST /rescan | 手動同步重新掃描(阻塞;在使用者點擊重新掃描按鈕時使用) |
POST /reset-state | 清除解鎖歷史和已快取的快照 |
狀態檔案 — 位於 $HERMES_HOME/plugins/hermes-achievements/:
| 檔案 | 內容 |
|---|---|
state.json | 解鎖歷史:你已獲得哪些徽章以及何時獲得。在 Hermes 更新時保持穩定。 |
scan_snapshot.json | 上次完成的掃描結果(儀表板載入時立即提供) |
scan_checkpoint.json | 以指紋為鍵的每工作階段統計快取(加速暖掃描) |
效能說明:
- 約 8,000 個工作階段的冷掃描需要幾分鐘。它在第一次儀表板請求時於背景執行緒中運行;UI 會顯示待處理佔位符並輪詢
/scan-status。 - 冷掃描期間的增量結果 — 掃描器每約 250 個工作階段發佈一次部分快照,因此每次儀表板重新整理時都會看到更多徽章被解鎖。無需盯著零值等上一分鐘。
- 暖掃描會重用每個
started_at+last_active指紋與快取相符的工作階段統計資料 — 即使在大量歷史資料上也能在幾秒內完成。 - 記憶體中快照的 TTL 為 120 秒;過期的請求會立即提供舊快照並觸發背景重新整理。你永遠不會因為 TTL 過期而看著轉圈圖示等待。
啟用: 無需啟用 — hermes-achievements 是一個僅限儀表板的外掛(無生命週期 hooks、無模型可見工具)。它會在首次啟動時自動註冊為 hermes dashboard 的分頁。plugins.enabled 設定僅用於控制生命週期/工具類外掛;儀表板外掛純粹透過其 dashboard/manifest.json 被發現。
退出方式: 刪除或重新命名 plugins/hermes-achievements/dashboard/manifest.json,或在 ~/.hermes/plugins/hermes-achievements/ 中以同名使用者外掛覆蓋(且不提供儀表板)。$HERMES_HOME/plugins/hermes-achievements/ 下的狀態檔案會保留 — 重新安裝時會保留你的解鎖歷史。
新增內建外掛
內建外掛的撰寫方式與任何其他 Hermes 外掛完全相同 — 請參閱 Build a Hermes Plugin。唯一的差異是:
- 目錄位於
<repo>/plugins/<name>/而非~/.hermes/plugins/<name>/ - 在
hermes plugins list中,manifest 來源顯示為bundled - 同名的使用者外掛會覆蓋內建版本
一個外掛適合作為內建外掛的條件:
- 沒有可選依賴項(或是已被
pip install .[all]包含的依賴) - 行為惠及多數使用者,採用 opt-out 而非 opt-in
- 邏輯與生命週期 hooks 緊密結合,否則代理人需要記得呼叫
- 補充核心功能,但不會擴展模型可見的工具介面
反面範例 — 應保持為可安裝的使用者外掛而非內建的:需要 API 金鑰的第三方整合、利基工作流程、大型依賴樹、以及預設會實質改變代理人行為的任何內容。