Signal
通過本地 signal-cli 子進程發送注重隱私的提醒,無需 SDK、無 Meta、無第三方中轉。
🟢 運行時就緒:Signal 沒有 HTTP API,Minara 在本地調用
signal-cli。 僅支持發送:Signal 協議不支持編輯消息, 因此 helper 會緩衝 token,在最終化時統一發送。
你能獲得什麼
- 通過自己的 Signal 賬戶發送端到端加密提醒
- 無需商業賬戶,無第三方中轉
- 每條消息最多 4 096 個字符(helper 默認值)
- 通過
channel按消息覆蓋收件人,必須是有權發送消息的 E.164 號碼
前置條件
signal-cli 是一個基於 Java 的 Signal 客戶端,負責處理註冊、密鑰材料和發送流程。Minara 不內置該工具,需在主機上單獨安裝,併為 Minara 提供一個手機號。
若 Minara 啟動時 signal-cli 不在主機的 PATH 中,signal 提供商會從網關映射中靜默移除(Agent 仍正常啟動,其他提供商不受影響)。這樣可將 Signal 設計為可選項,不會影響其他用戶的啟動流程。
配置步驟
1. 安裝 signal-cli
macOS(Homebrew):
brew install signal-cliLinux / Docker: 參見上游倉庫說明: github.com/AsamK/signal-cli。 大多數發行版需要 Java 17+ 作為前置依賴。
驗證安裝:
signal-cli --version2. 註冊發送方號碼
使用一個尚未關聯 Signal 賬戶的手機號(或先將其從 Signal 應用解綁):
signal-cli -u +15555550100 registerSignal 會發送一條包含驗證碼的短信。完成註冊:
signal-cli -u +15555550100 verify 123456一次性操作:密鑰會緩存到磁盤,後續發送無需重複註冊。
3. 從 shell 發送測試消息(健全性檢查)
接入 Minara 前,先確認 signal-cli 本身可正常工作:
signal-cli -u +15555550100 send -m "hello" +15555550200收件人的 Signal 應用應在一秒內收到消息。若此步驟失敗,Minara 無法修復該問題,請先排查 signal-cli。
4. 配置 Minara
minara auth messaging add signal或直接寫入項目根目錄的 .env 文件:
SIGNAL_CLI_NUMBER=+15555550100
SIGNAL_RECIPIENT=+15555550200
SIGNAL_CLI_BINARY=signal-cli兩個號碼均須符合嚴格的 E.164 格式:以 + 開頭,包含國家代碼,僅含數字,不含空格或連字符。Minara 會在每次 send_message() 調用時重新驗證收件人,確保錯誤的覆蓋值無法通過。
SIGNAL_CLI_BINARY 為可選項;若 signal-cli 安裝在默認 PATH 查找範圍之外,可將其設置為絕對路徑。
5. 通過 Minara 測試
minara auth messaging test signal安全機制:Signal 為何區別處理
Signal 會啟動一個子進程,屬於 CLAUDE.md §4a
Bucket B
範疇。apps/agent/src/messaging/signal.ts
模塊豁免於 guardCommand / detectJail,原因如下:
- argv 是靜態的:
signal-cli -u <number> send -m <body> -- <recipient>,不會將 LLM 輸入拼接到參數中 - 兩個手機號均在工廠函數初始化時(發送方)及每次發送時(收件人)通過嚴格的 E.164 正則驗證
- 消息體通過獨立的
-m參數槽傳入,不會拼接到命令字符串中 - 收件人前的
--終止符可阻斷以連字符開頭的參數注入嘗試,對已驗證的輸入同樣生效 - 子進程以
shell: false方式啟動,不經過 shell 對特殊字符的解釋
LLM 可見的字符串不會進入 argv。查看源碼可見模塊文檔註釋中對 "Bucket B" 的標註。
覆蓋收件人
send_message({
provider: "signal",
channel: "+15555559999",
text: "Critical: position liquidation imminent",
})故障排查
Minara 啟動時未掛載 signal 提供商
signal-cli不在 PATH 中。運行which signal-cli確認;修復安裝,或將SIGNAL_CLI_BINARY設為絕對路徑- 環境變量未設置。工廠函數要求
SIGNAL_CLI_NUMBER和SIGNAL_RECIPIENT均不為空才能返回網關
"Rate limit exceeded (429)"
- Signal 對自動化發送有較嚴格的發送方頻率限制。請勿頻繁發送;將提醒分散發出,或將多個事件合併為一條消息
"Invalid E.164 format"
- 兩個號碼均須為
+<国家代码><号码>格式,僅含數字,不含空格、連字符或括號。Minara 會拒絕(202) 555-1234,請使用+12025551234
"Unregistered user"
- 收件人未註冊 Signal,或其賬戶已被刪除或解綁。只有 Signal 系統中存在的號碼才能接收消息