MINARA
使用 Minara客戶端與界面消息平臺

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-cli

Linux / Docker: 參見上游倉庫說明: github.com/AsamK/signal-cli。 大多數發行版需要 Java 17+ 作為前置依賴。

驗證安裝:

signal-cli --version

2. 註冊發送方號碼

使用一個尚未關聯 Signal 賬戶的手機號(或先將其從 Signal 應用解綁):

signal-cli -u +15555550100 register

Signal 會發送一條包含驗證碼的短信。完成註冊:

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,原因如下:

  1. argv 是靜態的:signal-cli -u <number> send -m <body> -- <recipient>,不會將 LLM 輸入拼接到參數中
  2. 兩個手機號均在工廠函數初始化時(發送方)及每次發送時(收件人)通過嚴格的 E.164 正則驗證
  3. 消息體通過獨立的 -m 參數槽傳入,不會拼接到命令字符串中
  4. 收件人前的 -- 終止符可阻斷以連字符開頭的參數注入嘗試,對已驗證的輸入同樣生效
  5. 子進程以 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_NUMBERSIGNAL_RECIPIENT 均不為空才能返回網關

"Rate limit exceeded (429)"

  • Signal 對自動化發送有較嚴格的發送方頻率限制。請勿頻繁發送;將提醒分散發出,或將多個事件合併為一條消息

"Invalid E.164 format"

  • 兩個號碼均須為 +<国家代码><号码> 格式,僅含數字,不含空格、連字符或括號。Minara 會拒絕 (202) 555-1234,請使用 +12025551234

"Unregistered user"

  • 收件人未註冊 Signal,或其賬戶已被刪除或解綁。只有 Signal 系統中存在的號碼才能接收消息

參考

本頁目錄