這份是 living 檔:每棒就地 Edit,只描述「此刻」。歷史脈絡看同資料夾的
FR-171-LOG.md。
| 項目 | 值 |
|---|---|
| 最後更新 | 2026-11-01(第 1 棒,首腦,討論稿 v1 交出、等決策者裁 D1~D12) |
| branch | BE feature/FR-139;Agent/jedi 主線(本棒未動) |
| 母案卡 | 未開(討論階段不開卡) |
| 本棒角色 | 首腦(分析決策人員),走 big-feature-workflow,不開 subagent |
| 階段 | Step 2 討論稿已交,未拍板;design.md 未寫、Notion 未開卡 |
| 接手前必讀 | §0 讀序 |
這節寫一次,之後各棒不動。
決策者原話(2026-10-31):
之前都是只能等心跳由 agent 發訊息給本體,後來才有了臨時 token 的模式讓本體可以主動跟 agent 溝通,所以現在應該算是可以雙向溝通?我想要把等待心跳的功能都改掉,除了原本的心跳功能,因為我覺得這太偷懶了而且越塞越多,不可能都只依靠心跳來處理事情。
討論中追加的三個要求(2026-10-31):
2026-11-01 另一 session 的決策者裁示(memory feedback_no_heartbeat_piggyback_messaging):「之後不要再用心跳帶訊息了,這機制真的雷到一個不行。」心跳只表存活;Agent→主系統的結果/進度走專用端點當下送、送不到進 outbox;主系統→Agent 走資料面。這條比討論稿 v1 更激進(v1 的主題 B 仍讓心跳帶設定同步,只是加版本號),接手首腦要把這條併進去重審主題 B,見 §3。
目標長什麼樣:一條指令通道(主系統→Agent 8443,派工/重啟/升級/換證/取消,打不通退回主系統 DB 的單子由心跳或下次直推補);心跳只表存活(設定同步改專用端點或帶版本號,依 11-01 裁示重審);兩個方向同一套「60 秒、綁方法路徑、綁 jti、自己私鑰簽」的簽章規則;憑證一年自動換、CA 與簽章公鑰走信任錨清單可輪換;主系統四份 client 收一份、Agent 守門一條規則。
本棒在大圖的位置:第 1 棒,探脈+討論稿 v1。前作 FR-170 第 4 棒「P4 分析」是起點,FR-170 P0~P3 已於 10-31 合回主線。
docs/features/FR-171-2610-agent-command-channel/discussion.md 全讀(或開 discussion.html)——§2 現況地圖、§4 九個洞、§5 六主題、§7 D1~D12feedback_no_heartbeat_piggyback_messaging(docs/claude/memory/)——11-01 裁示,討論稿 v1 寫在它之前FR-171-LOG.md 第 1 棒 blockguidant_agent/sync/api/data_plane_auth.py、sync/app/enroll.py、sync/adapters/cert_files.py(prior_key_proof)、sync/domain/agent_auth.py.venv/lib/python3.11/site-packages/jedi_remote_agent/):common/agent_auth/jwt_util.py、possession.py、app/service/agent_enrollment_service.py、agent_enroll_token_service.pyinfra/remote_agent/agent_credential_client.py、agent_update_notify_client.py、core/plugins/remote_agent.py(build_adapters)| 項目 | 狀態 |
|---|---|
| 登記 | docs/features/README.md FR-171 列已加(commit 03feb84ae) |
| 討論稿 | discussion.md v1,6 張 mermaid、D1~D12;已 build 站;未經決策者拍板 |
| design.md | 未寫 |
| Notion | 未開母卡與子卡 |
| 雛形 | 未畫(D11 建議不畫整頁,管理頁多一欄即可) |
| 程式 | 本棒零改動 |
| Agent 主線 | 3ab1253(FR-170 合回);1.4.8 已於 11-01 推 189(另一 session) |
| 裁示 | 何時 | 誰 |
|---|---|---|
| WebSocket/長連線不做;SaaS 不開 8443 時才再議 | 2026-10-29 FR-170 §3.x;10-31 本案前置重申 | 決策者 |
| 心跳不再帶訊息(指令、結果、進度、清單);心跳只表存活;事件走專用端點 | 2026-11-01 | 決策者(另一 session) |
| 換證必須全自動,客戶與原廠零人工 | 2026-10-31 | 決策者 |
| 機制要統一,不接受做一半 | 2026-10-31 | 決策者 |
| 「三種票共用一把私鑰是洞」撤回:RFC 8725 現況合規,分鑰是縱深(D10 仍建議順手做) | 2026-10-31 | 首腦自撤 |
| 「CA 縮到 3 年定期換」撤回:NIST 要求能換不是排程換 | 2026-10-31 | 首腦自撤 |
| 私鑰永遠在 Agent 產生、不經網路;主系統「發動換證」只能是叫 Agent 自己換 | 2026-10-31 | 首腦提、決策者未反對 |
🔴 下一個動作:接手首腦等決策者裁 D1~D12。裁之前先做一件事:把 11-01「心跳不帶訊息」裁示對照討論稿主題 B 重審。v1 主題 B 是「心跳帶 config_versions、主系統只回有變的」,仍是心跳帶設定;11-01 裁示下應改成「主系統設定有變→直推 POST /config 通知(或走指令通道);Agent 啟動與重連時主動 GET /agents/config?versions=… 拉」。改完出 v2 再請決策者裁。
決策者 10-31 討論中提出、v1 尚未落地的修正(接手要併進 v2):
之後順序:拍板 → design.md(含 handoff/cards.py 驗批)→ Notion 母卡+子卡(四欄齊全)→ 停,工作坊派。釘版套件(jedi-agent-protocol、jedi-remote-agent)有改動,批 1 前要開環境卡。
⚠️ 這節是建議清單,不是執行授權。接手方讀完盤點完即停,等決策者發令。
remote_agents.status。grep 過 cancel client 與 credential client 確實沒看到;remote_agent_adapter.py 與 probe client 沒細讀。verify:grep -n "status\|enabled\|assert_agent_can_call" infra/upload_file/remote_agent_adapter.py .venv/lib/python3.11/site-packages/jedi_detection/infra/detection_tools/connector/agent_probe_client.py。proves_prior_key 不看舊證到期日(只驗 CA 簽發、CN、簽章),所以過期後仍可換證,寬限在程式層已成立。agent_cancel_client 打 /detection/cancel),不在心跳。discussion.md 對應 sequenceDiagram 的 Note 內有無特殊字元。openssl -days 3650,已確認 10 年。cd ~/Projects/Billows/Audit-Manager/compliance-manager-be
git status --short | grep -v "^??" ; git log --oneline -3
ls docs/features/FR-171-2610-agent-command-channel/
grep -n "FR-171" docs/features/README.md | cut -c1-60
cat docs/claude/memory/feedback_no_heartbeat_piggyback_messaging.md | head -5
git -C ~/Projects/Billows/Audit-Manager/evidence-agent log --oneline -1~/guidant-agent-local/start-agent.sh(venv evidence-agent-knWYPLiu-py3.13)連 DEV BE 8000。.venv/lib/python3.11/site-packages/)。notion-card-templates,一張卡一個 repo,登記型檔不同批。