為 Agent 設計命令列的 10 大黃金原則 (10 Principles for Agent-Native CLIs)
原始來源與檔名:20260512_2026-05-05T093915+0800-10 Principles for Agent-Native CLIs.md
來源:[[@trevin]] / X (Twitter) — 2026-05-04
原始檔名:2026-05-05T093915+0800-10 Principles for Agent-Native CLIs.md
NAPKIN | 餐巾紙
餐巾紙公式
Agent-Native CLI = Tier 1 (Defensive) + Tier 2 (Compounding). Tier 1 = Non-interactive + JSON + Actionable Errors + Safe Retries + Bounded. Tier 2 = Vocabulary Consistency + Introspection + Async
--wait+ Profiles + 2-way I/O.
越來越多的 CLI 工具(如 Cloudflare Wrangler, HeyGen CLI)開始將「Agent (AI代理)」視為第一級使用者,而不僅僅是人類。這篇文章總結了設計 Agent-Native CLI 的 10 大原則。它分為兩層:第一層是「防禦性」,確保 Agent 不會在執行時卡死(如避免互動式按 Y/N、確保輸出 JSON);第二層是「複利效應」,透過統一命名詞彙、版本化內省 (Introspection) 和處理非同步任務 (--wait),讓 Agent 越用越順手,並大幅降低 Token 消耗與重試錯誤。
一句話
如果你的命令列工具 (CLI) 是設計給 AI 使用的,請拋棄人類中心主義的設計。Agent 看不懂漂亮的 ANSI 彩色表格,也會因為一個預期外的互動式選項
[y/N]而永遠卡死。這篇指南詳細列出了 10 個核心原則:從強制支援無頭模式 (--force)、結構化輸出 (--json)、到提供自我描述 API (agent-context) 以及針對非同步任務的同步等待機制 (--wait)。設計給 Agent 用的 CLI,最終也會成為對人類最友善的 CLI。
餐巾紙草圖
[ Human CLI vs Agent-Native CLI ]
Human CLI:
$ deploy
> Are you sure? [y/N]: y
> [Loading Bar...] Success!
Agent CLI (Tier 1 & 2):
$ deploy --force --wait --json --profile=prod
{"status": "success", "job_id": "8f2a", "url": "..."}
If Error:
Human CLI: "Invalid option."
Agent CLI: "Error: --visibility must be one of: public, private (got: secret)"
ROUND 1: SKELETON | 骨架掃描
“這篇文章在說什麼”
- 背景: 繼 Cloudflare 和 HeyGen 推出針對 Agent 最佳化的 CLI 後,作者更新了設計原則,分為防禦性(不讓 Agent 崩潰)與複利性(賦能 Agent)兩大層。
- Tier 1: Table Stakes (防禦性底線):
- 預設非互動 (Non-interactive): Agent 無法回答
[y/N]。必須有--force繞過確認,且必須準確判斷非 TTY 環境。 - 結構化輸出 (JSON): 必須有標準的
--json參數(而不是一下--format=json一下--output json)。錯誤輸出至 stderr,結果至 stdout。 - 具教導性的錯誤 (Errors that teach): 當 Agent 輸入錯誤值時,錯誤訊息必須列出「所有有效選項 (Enum)」,讓 Agent 能一次重試成功。
- 安全重試與明確的變更 (Safe retries): 創建資源的操作應該具備冪等性 (Idempotent)。危險操作必須有明確的 flag 和
--dry-run。 - 限制回應大小 (Bounded responses): 列表必須分頁或截斷,並提示 Agent 如何過濾。這省下海量 Token。
- 預設非互動 (Non-interactive): Agent 無法回答
- Tier 2: Compounding (複利賦能):
6. 跨 CLI 詞彙一致性: 用
list不要用ls;用get不要用info。Agent 跨工具的泛化學習依賴於這種全域標準。 7. 三層內省 (Three-layer introspection):--help給人類看;agent-context提供版本化的 JSON Schema 供 Agent 讀取結構;SKILL.md提供工作流教學。 8. 支援非同步執行的同步等待 (--wait): 不要讓 Agent 自己寫 Polling (輪詢) 迴圈!CLI 應該提供--wait幫忙等待 Job 完成並回傳最終結果。 9. 持久化身份 (Profiles): 提供 Profile 機制儲存常用配置,讓 Agent 不用每次都輸入 8 個相同的 flag。 10. 雙向 I/O (--deliver&feedback): 讓產出物直接送達目標(如直接轉送 webhook)減少 Agent 的檔案搬運;並提供feedback指令讓 Agent 遇到摩擦時能回報給開發者。
ROUND 2: DISSECTION | 血肉解剖
“憑什麼這麼說”
核心論證鏈
- 成本與上下文的浪費: Agent 在 CLI 前的每一次「卡死」、每一次解析錯誤的表格、每一次猜測
--help中的變數,燃燒的都是使用者的 API 費用與上下文額度。Agent-Native 設計的本質是「為 Token 經濟學做最佳化」。 - 手動維護無法保證一致性: 第 6 點和第 7 點指出,人類在 PR 審查時一定會漏掉命名不一致(例如
infovsget)。唯一的解法是基於統一的 Schema 生成 CLI,這樣才能保證所有子指令的--json行為與命名詞彙絕對統一。
關鍵證據
- Cloudflare CLI 透過 Schema 一次生成 CLI、SDK、Terraform 和 MCP Server,並透過強制規定(Always
get, neverinfo;Always--force, never--skip-confirmations)達到了驚人的一致性。 - 非同步操作(第 8 點):舉例說明如果沒有
--wait,Agent 必須自己撰寫並執行錯誤率極高的輪詢腳本,而一個簡單的--waitflag 就能將多個對話回合壓縮成一個,大幅降低出錯率。
邊界條件
- 若開發者僅依賴 Schema 自動產生所有 CLI 文件與幫助指令,可能會導致面對「人類」使用者時,缺乏具有溫度的情境教學(也就是為何作者說仍然需要第三層的 SKILL.md 工作流清單)。
ROUND 3: SOUL | 靈魂提取
“還能怎么用”
- 知識連結: 第 7 點提到的
SKILL.md完美對應了《The Claude Skills Folder That Automates 90% of Workflow》中提及的實作。第 8 點的--wait呼應了 Agent 對於 Workflow 長時間任務的狀態管理挑戰。 - 深層洞見: “Design for agents first, and humans benefit.” (Agent 優先,人類受惠)。 過去我們認為機器可讀性 (Machine-readable) 會犧牲人類體驗。但在 CLI 領域,冪等性、清晰的錯誤枚舉、無頭模式和 Profile 管理,對於使用 Shell Script 的人類工程師來說,同樣是夢寐以求的頂級體驗。
- 行動呼籲:
如果你在團隊內負責維護內部 CLI 或開發新的自動化腳本,立刻檢查兩件事:1. 它遇到無效輸入時,會不會在錯誤訊息中印出所有有效選項? 2. 你的刪除操作有沒有提供跳過詢問的
--force參數?把這 10 點貼在牆上作為你們 CLI 開發的檢核表。