🚀 Herald
Herald 是一個自託管的 MCP 服務器,它使用 Anthropic 的官方 Custom Connectors 協議,將 Claude Chat 與 Claude Code 連接起來。讓你可以直接在手機上編寫代碼,真正實現隨時隨地進行代碼開發。
🚀 快速開始
前提條件
安裝
curl -fsSL https://raw.githubusercontent.com/btouchard/herald/main/install.sh | sh
或者從源代碼構建(需要 Go 1.26+)
git clone https://github.com/btouchard/herald.git
cd herald && make build
配置
mkdir -p ~/.config/herald
cp configs/herald.example.yaml ~/.config/herald/herald.yaml
運行
herald serve
編輯 ~/.config/herald/herald.yaml,添加你的域名和項目:
server:
host: "127.0.0.1"
port: 8420
public_url: "https://herald.yourdomain.com"
auth:
client_id: "herald-claude-chat"
projects:
my-api:
path: "/home/you/projects/my-api"
description: "Main backend API"
default: true
allowed_tools:
- "Read"
- "Write"
- "Edit"
- "Bash(git *)"
- "Bash(go *)"
- "Bash(make *)"
git:
auto_branch: true
branch_prefix: "herald/"
然後從 Claude Chat 進行連接:
- Claude Chat → 設置 → 自定義連接器
- 添加連接器:
https://herald.yourdomain.com/mcp
- 通過 OAuth 進行身份驗證
- 完成 —— Claude Chat 現在有 10 個新工具來控制你的工作站
使用 ngrok 快速開始(無需反向代理)
如果你沒有域名或反向代理,可以使用 ngrok 通過 HTTPS 立即暴露 Herald:
獲取 ngrok 認證令牌
在 ngrok.com 上註冊(免費計劃即可),並從 儀表盤 獲取認證令牌。
在配置中啟用隧道
編輯 ~/.config/herald/herald.yaml:
tunnel:
enabled: true
provider: "ngrok"
authtoken: "2abc..."
運行 Herald
herald serve
使用橫幅中顯示的 ngrok URL 從 Claude Chat 進行連接。就是這麼簡單 —— 無需 Traefik、Caddy 或 DNS 設置。
注意:ngrok 隧道是可選的。如果你已經有反向代理(Traefik/Caddy),將 tunnel.enabled 設置為 false,並像往常一樣使用你的域名。
完整配置參考
server:
host: "127.0.0.1"
port: 8420
public_url: "https://herald.yourdomain.com"
log_level: "info"
log_file: ""
auth:
client_id: "herald-claude-chat"
access_token_ttl: 1h
refresh_token_ttl: 720h
redirect_uris:
- "https://claude.ai/oauth/callback"
- "https://claude.ai/api/oauth/callback"
- "https://claude.ai/api/mcp/auth_callback"
database:
path: "~/.config/herald/herald.db"
retention_days: 90
execution:
claude_path: "claude"
model: "claude-sonnet-4-5-20250929"
default_timeout: 30m
max_timeout: 2h
work_dir: "~/.config/herald/work"
max_concurrent: 3
max_prompt_size: 102400
max_output_size: 1048576
env:
CLAUDE_CODE_ENTRYPOINT: "herald"
CLAUDE_CODE_DISABLE_AUTO_UPDATE: "1"
projects:
my-api:
path: "/home/you/projects/my-api"
description: "Main backend API"
default: true
allowed_tools:
- "Read"
- "Write"
- "Edit"
- "Bash(git *)"
- "Bash(go *)"
- "Bash(make *)"
max_concurrent_tasks: 1
git:
auto_branch: true
auto_stash: true
auto_commit: true
branch_prefix: "herald/"
tunnel:
enabled: false
provider: "ngrok"
authtoken: ""
rate_limit:
requests_per_minute: 200
burst: 100
✨ 主要特性
核心特性
- 原生 MCP 橋接 —— 使用 Anthropic 的官方自定義連接器協議,不是黑客手段,不是包裝器,也不是代理。
- 異步任務執行 —— 啟動任務、檢查進度、獲取結果。Claude Code 在後臺運行,你可以同時做其他事情。
- Git 分支隔離 —— 每個任務在自己的分支上運行,主分支保持不變。
- 會話恢復 —— 支持多輪 Claude Code 對話,可從上次中斷的地方繼續。
- 雙向橋接 —— Claude Code 可以通過
herald_push 將會話上下文推送到 Herald,以便在其他設備上進行遠程監控和繼續操作。
多項目支持
- 多個項目 —— 可以根據需要配置任意數量的項目,每個項目都有自己的設置。
- 按項目限制工具使用 —— 精確控制 Claude Code 可以使用的工具,每個項目都有完整的沙箱環境。
操作特性
- MCP 推送通知 —— Herald 通過 MCP 服務器通知直接將任務更新推送到 Claude Chat,無需輪詢。
- SQLite 持久化 —— 任務在服務器重啟後仍然存在,擁有完整的歷史記錄,並且可以完全搜索。
工程特性
- 單二進制文件 —— 一個約 15MB 的 Go 可執行文件,無需 Docker、運行時或 node_modules。
- 零 CGO —— 純 Go 實現,可交叉編譯到 Linux、macOS、Windows、ARM 等平臺。
- 6 個依賴項 —— chi、mcp-go、modernc/sqlite、uuid、yaml、testify,這就是整個依賴樹。
💻 使用示例
基礎用法
你可以在沙發上,用手機打開 Claude Chat 並輸入:
"Refactor the auth middleware in my-api to use JWT instead of session cookies. Run the tests."
四分鐘後,任務完成。分支創建、代碼重構、測試通過、更改提交,所有工作都由你的工作站完成,你甚至不需要打開筆記本電腦。
高級用法
正向流程:Claude Chat → Herald → Claude Code
You (Claude Chat) Herald Claude Code
───────────────── ────── ───────────
"Refactor auth..." ──► start_task
→ creates branch
→ spawns Claude Code ──► reads codebase
refactors code
runs tests
commits changes
◄── task_id: herald-a1b2c3d4
"How's it going?" ──► check_task
◄── ✅ Completed (4m 12s)
4 files changed (+127/-23)
"Show me the diff" ──► get_diff
◄── auth/middleware.go
+func ValidateJWT(...)
-func CheckSession(...)
反向流程:Claude Code → Herald
如果你在終端中工作,想在手機上繼續,可以讓 Claude Code 將會話推送到 Herald:
You (terminal) Claude Code Herald
────────────── ─────────── ──────
"Push this to Herald" ──► herald_push
→ session_id, summary,
files, branch ──► linked task created
🔗 visible in list_tasks
You (phone, later) Claude Chat Herald
────────────────── ─────────── ──────
"What sessions are list_tasks
waiting for me?" ──► (status: linked) ──► 🔗 herald-a1b2c3d4
my-api / feat/auth
"Resume that session" ──► start_task
(session_id) ──► picks up where you left off
📚 詳細文檔
MCP 工具
Herald 通過 MCP 協議自動向 Claude Chat 暴露 10 個工具:
| 工具 |
功能 |
start_task |
啟動一個 Claude Code 任務,立即返回一個 ID,支持優先級、超時、會話恢復和 Git 分支選項。 |
check_task |
檢查任務狀態和進度,可選擇包含最近的輸出。 |
get_result |
獲取已完成任務的完整結果(summary、full 或 json)。 |
list_tasks |
列出任務,並可根據狀態、項目、時間範圍進行過濾。 |
cancel_task |
取消正在運行或排隊的任務,可選擇恢復 Git 更改。 |
get_diff |
獲取任務分支或未提交更改的 Git 差異。 |
list_projects |
列出配置的項目及其 Git 狀態。 |
read_file |
從項目中讀取文件(路徑安全,無法跳出項目根目錄)。 |
herald_push |
將 Claude Code 會話推送到 Herald,以便在其他設備上進行遠程監控和繼續操作。 |
get_logs |
查看日誌和活動歷史記錄。 |
🔧 技術細節
架構
Claude Chat (mobile/web)
→ HTTPS (MCP Streamable HTTP + OAuth 2.1)
→ Traefik / Caddy (TLS termination)
→ Herald (Go binary, port 8420)
├── MCP Handler (/mcp)
├── OAuth 2.1 Server (PKCE, token rotation)
├── Task Manager (goroutine pool, priority queue)
├── Executor Registry (pluggable backends, default: Claude Code)
├── SQLite (persistence)
└── MCP Notifications (server push via SSE)
設計原則:單二進制文件(所有內容編譯到一個 Go 可執行文件中)、異步優先(每個任務是一個 goroutine)、無狀態 MCP 與有狀態後端、故障安全(Herald 崩潰不會終止正在運行的 Claude Code 進程)。
技術棧
| 組件 |
選擇 |
原因 |
| 語言 |
Go 1.26 |
單二進制文件、交叉編譯、goroutine |
| MCP |
mcp-go |
可流式 HTTP,官方協議支持 |
| 路由器 |
chi |
輕量級,與標準庫兼容 |
| 數據庫 |
modernc.org/sqlite |
純 Go,零 CGO |
| 日誌記錄 |
log/slog |
Go 標準庫,結構化 |
| 配置 |
gopkg.in/yaml.v3 |
標準 YAML |
6 個直接依賴項,無 ORM,無日誌框架,無構建工具鏈。
安全機制
Herald 將 Claude Code 暴露到網絡中,因此安全至關重要:
| 層面 |
保護措施 |
| 網絡 |
僅綁定到 127.0.0.1,通過內置的 ngrok 隧道或反向代理(Traefik/Caddy)實現 HTTPS。 |
| 認證 |
使用 OAuth 2.1 與 PKCE,每個請求都需要有效的 Bearer 令牌。 |
| 令牌 |
訪問令牌有效期為 1 小時,刷新令牌有效期為 30 天,每次使用時輪換。 |
| 文件系統 |
所有文件操作都有路徑遍歷保護,阻止符號鏈接逃逸。 |
| 執行 |
按項目限制工具使用,不使用 --dangerously-skip-permissions。 |
| 速率限制 |
每個令牌每分鐘 200 個請求(可配置)。 |
| 超時 |
每個任務都有截止時間(默認 30 分鐘),防止進程失控。 |
| 提示信息 |
原封不動地傳遞給 Claude Code,無注入、無增強、無重寫。 |
| 審計 |
每個操作都記錄時間戳和身份信息。 |
📄 許可證
本項目採用 AGPL-3.0 許可證。由 Benjamin Touchard 開發。
如果你覺得 Herald 節省了你的時間,請在 GitHub 上給項目點個星,這有助於其他人發現該項目。
路線圖
| 版本 |
狀態 |
重點 |
| v0.1 |
✅ 已完成 |
核心 MCP 服務器、異步任務、Git 集成、OAuth 2.1、SQLite |
| v0.2 |
🚧 進行中 |
共享內存 —— Claude Chat 和 Claude Code 之間的雙向上下文 |
| v0.3 |
🚀 未來 |
穩定 API、插件系統 |
如果你有想法,請 提交一個 issue,我們會根據用戶需求進行開發。
貢獻
Herald 處於早期 alpha 階段,這是塑造項目的最佳時機。
git clone https://github.com/btouchard/herald.git
cd herald
make build && make test
git checkout -b feat/your-feature
make lint && make test
提交信息遵循 Conventional Commits 規範(feat:、fix:、refactor:、docs:)。
無論是修復 bug、添加新的通知後端還是改進文檔,所有貢獻都非常歡迎。
為什麼選擇 Herald?
| 比較項 |
Herald |
複製粘貼工作流 |
其他工具 |
| 官方協議 |
MCP 自定義連接器 |
無 |
自定義 API,不穩定 |
| 代碼本地存儲 |
始終 |
是 |
取決於具體工具 |
| 支持手機使用 |
原生支持 |
否 |
很少支持 |
| 自託管 |
100% |
無 |
通常是 SaaS |
| 依賴項 |
6 個 |
無 |
50 - 200+ |
| 設置時間 |
約 5 分鐘 |
無 |
30 分鐘以上 |
| 需要 CGO |
否 |
無 |
通常需要 |
Herald 使用 Anthropic 為其自身集成構建的相同協議,無需逆向工程、非官方 API 或可能在下次更新時失效的黑客手段。