Communitygithub.com

AndreasInk/AgentAlertsSkill

為 Codex / Claude 等 AI 代理設定自動化,將 iPhone 即時動態、小工具、通知及控制中心 widget 更新推送至你的 iPhone。

AgentAlertsSkill 是什麼?

這個技能讓 AI 代理(如 Codex 或 Claude)能直接向 iPhone 推送即時動態(Live Activity)、主畫面小工具、通知以及控制中心 widget 更新。開發者可以定義訊號來源、觸發條件,並指定顯示在哪些介面上(例如鎖定畫面、動態島、通知中心)。技能提供一個標準化的 webhook 端點與 JSON 酬載結構,協助代理在運行時安全地發送更新。它支援託管運行環境(將 token 儲存在 secret manager)與本機 Mac 環境(將 token 寫入 `~/.config/agent-alerts/token.env`),同時要求對 shell 腳本的存取權限進行嚴格控制。驗證流程則包含酬載格式檢查、token 來源、權限與端點可用性測試。設計上特別注重安全,token 絕不會暴露在提示文字、URL、命令列參數或日誌中。

相容平台✓Claude Code✓Codex CLI✓Cursor
npx skills add AndreasInk/AgentAlertsSkill

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Agent Alerts 設定

設計自動化流程、設定託管 webhook,並將運行時的發送工作交給 $agent-alerts-execution。在設定過程中請勿發送,除非使用者要求進行冒煙測試。

開始使用

請引導使用者前往:

https://www.andreas.ink/agent

依照頁面上的流程,在 iPhone 上與 Agent Alerts 完成連線。該流程會產生一個僅供發送的 token,供運行時使用。請勿要求使用者將該 token 貼到對話中。

設定 Webhook

  1. 為運行時命名,並在公開設定頁面上完成連線流程。
  2. 為運行時選擇 token 存放位置:
    • 託管運行環境:將單次使用的 token 存放在該運行環境的 secret manager 中,變數名稱設為 AGENTALERTS_AGENT_TOKEN。
    • 本機 Mac:在使用者同意的 ~/.config/agent-alerts/token.env 檔案中,放入只有一行內容 AGENTALERTS_AGENT_TOKEN=<token>,並將檔案權限設為 0600。
  3. 請使用者直接在選定的 secret store 中輸入 token,不要透過 AI 對話進行。切勿要求他們將 token 貼到 agent 對話中。
  4. 使用內建於 ../agent-alerts-execution/scripts/send_webhook.sh 的端點。僅在設定頁面提供不同的 HTTPS 端點時,才設定 AGENTALERTS_WEBHOOK_URL。
  5. 只允許對該端點進行 HTTPS 連線。
  6. 僅授權 send_webhook.sh 的完整絕對路徑進行無人值守執行,不可授予廣泛的 shell 存取權限。

切勿將 token 放入提示文字、URL、查詢字串、日誌、原始碼檔案、版本追蹤的設定檔、shell 歷史記錄或命令參數中。

準備並驗證測試

將 ../agent-alerts-execution/assets/compact-webhook-payload.json 複製為一個可寫入的酬載檔案,並替換其中的範例值。請使用穩定且唯一的冪等鍵(idempotency key)來標示事件。

驗證酬載:

../agent-alerts-execution/scripts/send_webhook.sh --check payload.json

驗證酬載、token 來源、權限與端點(不實際發送):

../agent-alerts-execution/scripts/send_webhook.sh --check-config payload.json

然後發送一次非敏感測試:

../agent-alerts-execution/scripts/send_webhook.sh payload.json

對於無人值守的自動化流程,請使用實際儲存的執行器重複執行 --check-config 與測試發送。兩者都必須在無需使用者確認提示的情況下完成。如果執行器無法執行指定的輔助腳本或無法連線到端點,請回報 AGENTALERTS_SCRIPT_NOT_AUTHORIZED 並停止。

設計警示

定義以下項目:

  1. 訊號來源、資料來源與觸發條件。
  2. good、warning 和 critical 的對應映射。
  3. 跳過條件、靜音時段與排除規則。
  4. 穩定的 activity_id 或通知識別碼。
  5. 顯示介面:live_activity、widget 及/或 notification。
  6. 操作按鈕文字與安全的目標 URL 或應用程式 deep link。
  7. 如果警示會在稍後或重複執行,則需一個可持久化的排程器。

Agent Alerts 負責傳送更新,但不會讓 agent 的工作階段保持存活。若警示在未來或重複執行,必須在目前工作階段關閉後,排程器仍保持註冊狀態,否則視為未完成,並回報 AGENTALERTS_SCHEDULER_NOT_DURABLE。

酬載契約

一般警示請使用簡潔的 webhook 主體:

{
  "title": "建置完成",
  "summary": "所有測試通過。",
  "status": "good",
  "activity_id": "build-monitor",
  "source_name": "Codex",
  "surfaces": ["live_activity", "notification"],
  "idempotency_key": "build-monitor-2026-07-29T18-30-00Z"
}

Webhook 需要的標頭:

Authorization: Bearer <AGENTALERTS_AGENT_TOKEN>
Content-Type: application/json
Idempotency-Key: <與 idempotency_key 相同>

輔助腳本會自動加上這些標頭,不會在程序參數中暴露 token。請務必使用此輔助腳本,不要手動重新發送請求。

簡潔模式發送的預設行為是:更新一個名為 webhook 的活動、使用正式環境、並同時啟用 live_activity 和 notification(當這些欄位被省略時)。若自動化流程需要不同的結果,請明確設定這些欄位。

對於小工具、控制中心 widget 狀態、建造佈局或其他進階欄位,請使用 webhook 的完整 snake_case 契約,並附上巢狀的 payload 物件。請勿將完整的 payload 物件與簡潔模式的 title、summary、status、source_name 或 deep_link 欄位混用。

文案與傳送規則

保持可見文案的完整性,並遵守以下字數限制:

欄位最大字元數
source_name14
title32
summary96

請勿依賴自動截斷或自行加上省略號。

  • live_activity:更新動態島或鎖定畫面。
  • widget:需要其 widget 識別碼、一個小型非機密的快照,並啟用重新載入功能。
  • notification:需要一個穩定的執行緒識別碼來進行分組。
  • 控制中心 widget 狀態:在活躍的 warning 或 critical 狀態時應設為 true,在已清除或已解決的狀態時設為 false。

運行時交接

寫下一段精確的運行時指令:

使用 $agent-alerts-execution。首先評估已設定的跳過條件。若需要發送,將準備好的 Agent Alerts JSON 寫入已核准的酬載路徑,然後使用已授權的絕對路徑呼叫 send_webhook.sh 並帶入該檔案。僅從 AGENTALERTS_AGENT_TOKEN 或已核准的 token.env 檔案中讀取 token。回傳傳回的狀態、目標、成功與失敗次數,請勿印出任何機密資訊。

設定只有在以下情況才算完成:實際的執行器能在無需互動的情況下驗證設定並發送,必要時排程器是可持久化的,並且回報的結果不會誇大裝置端顯示的送達狀態。

相關技能