# A2 — 讓 CLI agent 每次都照同一套方法做事
> **繁體中文** | [简体中文](./A2-cli-workflow.zh-Hans.md) | [English](./A2-cli-workflow.en.md)
> [← A1 — 安全完成第一個 CLI 任務](A1-cli-intro.md) · **Track A: CLI Power User** 第 2 站 · [下一站:Stage 5 的 Track A 核心](../../stages/05-claude-code-ecosystem.md#-進入條件與閱讀路線)
這一站只解決一個問題:**怎麼讓 CLI agent 下次進到同一個 repo,還記得同一套做事方法?**
你會把每次都要知道的規則寫進專案規則檔,把常常重複的步驟做成 **Skill**。臨時任務才留在單次 prompt。這樣就像把「每天都要重新交代」改成「牆上有守則,工具箱裡有操作卡」。
## 🧩 先認識三個核心詞
| 核心詞 | 它是什麼、像什麼 | A2 怎麼用 | 不適合放什麼 |
|:---|:---|:---|:---|
| **Project instructions(專案規則)** | 每次進工作室都要看的共同守則 | 放專案用途、禁止事項、測試指令與交付格式 | 不放只用一次的任務或長篇參考資料 |
| **Skill(操作卡)** | 有需要時才拿出的可重用操作卡 | 放 review、release、整理文件等重複流程 | 不是每家 CLI 都使用相同路徑、權限或 frontmatter |
| **One-off prompt(單次提示)** | 只交代今天這一件事的便條 | 放本次任務、範圍、輸入與成功條件 | 不用它重複貼上每次都相同的專案規則 |
## 📌 學習目標
- 用四個欄位寫出一份短而清楚的專案規則。
- 把重複的 review 流程做成一個只讀 Skill。
- 分清哪些內容可以共用,哪些檔名、權限與命令要跟著工具調整。
展開時間、先備條件、環境與費用
- **時間**:先完成 CLI-5、CLI-6;CLI-7、CLI-8 可以之後再做,不必一次做完。
- **先備條件**:完成 [A1](A1-cli-intro.md),會看 `git status`、`git diff`,並有一個不含秘密、可復原的 demo repo。
- **環境**:選一個主用 CLI agent。Claude Code、Codex、Gemini CLI、OpenCode 的檔名不完全相同,下方有對照。
- **費用**:寫規則檔與 Skill 不會產生模型費用;請 CLI 測試時可能使用額度或 API token。以當日官方 usage/pricing 頁為準。
還沒完成 A1 時,先回去跑一次「只讀取 → 看計畫 → 小改動 → `git diff` → 復原」。
## 📚 必修閱讀
1. 先看你主用工具的 project-instructions 官方文件:Codex 看 [`AGENTS.md`](https://learn.chatgpt.com/docs/agent-configuration/agents-md)、Claude Code 看 [`CLAUDE.md`](https://code.claude.com/docs/en/memory)、Gemini CLI 看 [`GEMINI.md`](https://geminicli.com/docs/cli/gemini-md/)、OpenCode 看 [`AGENTS.md`](https://opencode.ai/docs/rules)。
2. 再看你主用工具的 Skill 文件:[Codex/ChatGPT](https://learn.chatgpt.com/docs/build-skills)、[Claude Code](https://code.claude.com/docs/en/skills)、[Gemini CLI](https://geminicli.com/docs/cli/using-agent-skills/)、[OpenCode](https://opencode.ai/docs/skills/)。
3. 最後回看 [Stage 2 — Prompt 設計](../../stages/02-prompt-engineering.md),把「任務、範圍、成功條件」補進單次 prompt。
展開四個 CLI 的規則檔與 Skill 位置
官方資料查核日:**2026-08-30 UTC**。
| 工具 | 專案規則 | Project Skill | 要注意什麼 |
| Codex | AGENTS.md | .agents/skills/<name>/SKILL.md | 規則會依目錄分層;較近的規則較晚載入 |
| Claude Code | CLAUDE.md | .claude/skills/<name>/SKILL.md | 舊 .claude/commands/ 仍相容,但新流程優先用 Skill |
| Gemini CLI | GEMINI.md | .agents/skills/<name>/SKILL.md 或 .gemini/skills/… | Skill 啟用時會要求同意;不要把秘密放進 Skill |
| OpenCode | AGENTS.md 優先;無此檔時用 CLAUDE.md | .opencode/skills/…、.agents/skills/… 或 .claude/skills/… | 先查 rules、skills 與 permission 設定 |
共同的是「要交代哪些事」;不同的是檔名、搜尋位置、權限與額外設定。不要把一個工具的專屬功能當成所有 CLI 都有。
## 🛠 動手練習
### 動手練習 CLI-5:做一張最小專案規則卡
**成果:** CLI agent 每次進 repo,都知道這個專案做什麼、不能碰什麼、怎麼驗證,以及完成時要回報什麼。
展開上方「四個 CLI 的規則檔與 Skill 位置」,選你的工具,再把這四件事放進對應的規則檔:
```markdown
# 專案規則
- 用途:這是一個練習用文件 repo。
- 不可做:不要刪檔、不要讀取秘密、不要自動 commit 或 push。
- 驗證:修改後執行 `git diff --check`。
- 回報:說明改了什麼、驗證結果,以及仍未處理的事。
```
這張卡只放「每次都要知道」的事。長篇教學、API 參考與偶爾才用的流程不要塞進來。
展開 CLI-5 的建立與驗證步驟
1. 在乾淨的 demo repo 建立你主工具使用的規則檔。先執行 `git status --short`,不要蓋到別人的未完成修改。
2. 把上面的四欄換成這個 demo repo 的真實內容。指令必須可以複製執行;不要寫「把格式弄好」這種看不出成功與否的句子。
3. 開一個新的 CLI session,請它只讀規則並用自己的話重述。若它找不到檔案,先查官方的檔名與載入範圍。
4. 給一個會碰到禁止事項的測試,例如「直接 commit 這個改動」。正確結果是 agent 停下來或先詢問,而不是自行 commit。
5. 先用 `git status --short -- <規則檔路徑>` 看它是舊檔還是新檔。
- 舊檔:用 `git diff -- <規則檔路徑>` 檢查。只有確認開始前該檔乾淨,才用 `git restore -- <規則檔路徑>` 復原。
- 新檔:Git 會顯示 `??`;`git restore` 不能移除它。可以保留它當練習成果。若不要,先核對完整路徑,再用檔案管理員只刪除這一個檔案,最後重跑 `git status --short -- <規則檔路徑>`。
沒有任何行數能保證規則一定好。只保留會改變行為的內容;某段只在特定任務使用時,把它移到 Skill 或其他按需文件。
### 動手練習 CLI-6:把重複 review 做成 Skill
**成果:** 你能叫 agent 執行同一套只讀 review,輸出 `PASS` 或具體問題,不會自己 commit、push 或部署。
Claude Code 使用 `.claude/skills/review-changes/SKILL.md`;Codex、Gemini CLI、OpenCode 可使用 `.agents/skills/review-changes/SKILL.md`。建立檔案後放入:
```markdown
---
name: review-changes
description: Review the current git diff and report concrete risks. Use when the user asks to review local changes.
---
1. Read `git diff --no-ext-diff HEAD` without changing files.
2. Check for secrets, unsafe commands, broken links, and missing verification.
3. Report `PASS` when no problem is found; otherwise list each problem with its file and reason.
4. Do not edit, commit, push, deploy, or send messages.
```
`name` 是操作卡名稱;`description` 告訴 agent 何時拿這張卡。正文才是要照著做的步驟。
展開 CLI-6 的測試、權限與相容說明
1. 先讀完 `SKILL.md`,確認沒有下載陌生程式、讀取秘密或改變外部系統的步驟。
2. 在 demo repo 做一個小文件改動,但不要 commit。請 agent「review my local changes」,觀察它是否找到 Skill;也可依工具文件手動啟用。
3. 對照 `git diff` 檢查回報。測試後執行 `git status --short`,確認 Skill 沒有偷偷改檔。
4. 想在多個 CLI 共用時,先共用上面的核心內容,再依每個工具調整資料夾、權限與工具專屬 frontmatter。未知欄位可能被忽略,不要假設所有設定都有效。
Claude Code 的 `.claude/commands/.md` 目前仍能建立同名 `/name`,但 Skills 已包含 custom commands,並支援附加檔案與按需載入。新教學使用 Skill;只有維護舊專案時才需要理解 legacy command。
### 動手練習 CLI-7:把大任務切成看得見的小步驟
**成果:** 你能把一個可復原的文件任務拆成「盤點 → 計畫 → 修改 → 驗證」,每一步都有看得見的結果。
展開 CLI-7 的比較練習與 multi-agent 延伸
選一個小任務,例如「替兩份 README 補上同一個執行指令」。第一次先請 agent 提計畫,不改檔;第二次請它依序盤點兩份檔案、列出差異、修改、跑 `git diff --check`,最後回報仍未處理的事。
比較兩次結果時,只問:有沒有漏檔、能不能復原、驗證是否真的執行。不要為了看起來厲害,把每個小步驟都分派給不同 agent。任務需要互相等待、會改同一批檔案,或你還說不清成功條件時,先用單一 agent。
完整的 subagent、agent team、背景工作與審查流程放在 [Stage 5.5](../../stages/05-claude-code-ecosystem.md#55--subagentsclaude-code-原生-multi-agent-機制-2025-新功能)。A2 只練習把工作切清楚。
### 動手練習 CLI-8:做一張 portable prompt 對照卡
**成果:** 你能保留同一個任務核心,並清楚標出換工具時要改的檔名、權限、命令與啟用方式。
展開 CLI-8 的跨工具測試步驟
1. 共用核心只寫四欄:任務、範圍、禁止事項、成功條件。
2. 在第一個 CLI 的乾淨 demo repo 跑一次,記錄 CLI 版本、模型/provider、權限設定與 `git diff`。
3. 復原後再換第二個 CLI。不要讓兩個會寫檔的 session 同時操作同一個目錄。
4. 另外記下差異:project-instructions 檔名、Skill 位置、shell/sandbox 權限、工具名稱、登入與費用。
「Portable」代表核心意思容易搬,不代表整段文字與設定可以零修改複製。若第二個工具沒有同名功能,就回到成功條件,選它真正支援的方法。
## 🎯 精選 Projects
推薦度是本學習地圖的編輯建議,不是 GitHub stars。`⭐⭐⭐⭐⭐` 表示:如果你選那個 CLI 路徑,這份官方文件或工具是必讀/必做;不是叫你讀完所有五星列。
下面按用途分成五組。同一組只顯示一次分類欄,避免重複文字把表格撐亂。
| 分類 | 專案/文件 | 評分 | 用途 | 來源 |
| 官方專案規則 | Codex AGENTS.md | ⭐⭐⭐⭐⭐ | 先看: 分層載入與優先順序 適用: 替 Codex 寫 repo 規則 | |
Claude Code CLAUDE.md | ⭐⭐⭐⭐⭐ | 先看: 何時放規則、何時移到 Skill 適用: 替 Claude Code 寫持續規則 | |
Gemini CLI GEMINI.md | ⭐⭐⭐⭐⭐ | 先看: 目錄範圍與載入方式 適用: 替 Gemini CLI 放專案 context | |
OpenCode AGENTS.md | ⭐⭐⭐⭐⭐ | 先看: rules 載入、合併與 fallback 適用: 替 OpenCode 寫規則 | |
| 官方 Skill 文件 | Codex/ChatGPT Build skills | ⭐⭐⭐⭐⭐ | 先看: SKILL.md 結構與載入位置 適用: 做 Codex 可重用流程 | |
Claude Code Skills | ⭐⭐⭐⭐⭐ | 先看: 按需載入、legacy commands、權限 適用: 做 Claude Code Skill | |
Gemini CLI Agent Skills | ⭐⭐⭐⭐⭐ | 先看: discovery、安裝同意與啟用同意 適用: 管理 Gemini CLI Skill | |
OpenCode Agent Skills | ⭐⭐⭐⭐⭐ | 先看: 支援位置、frontmatter、permission 適用: 做 OpenCode Skill | |
| 標準與可讀範例 | Agent Skills specification | ⭐⭐⭐⭐ | 先看: 共同格式的最低要求 適用: 想讓核心內容較容易跨工具 | |
claude-plugins-official
| ⭐⭐⭐⭐⭐ | 先看: 官方 plugin 內的 Skills 與 commands 適用: 想看 Skill 如何被打包分享 | |
skills
| ⭐⭐⭐⭐ | 先看: 工程工作中使用的短 Skill 範例 適用: 想比較不同寫法 | |
superpowers
| ⭐⭐⭐⭐ | 先看: 真實 workflow 如何拆成 Skills 適用: 完成第一個 Skill 後再看 | |
| 索引與 prompt 練習 | awesome-claude-code
| ⭐⭐⭐ | 先看: 按類型找 Claude Code 資源 適用: 已知道需求、想找更多範例 | |
prompt-eng-interactive-tutorial
| ⭐⭐⭐⭐ | 先看: 一步一步比較 prompt 寫法 適用: CLI-8 卡在共用核心時 | |
| Repo context 工具 | repomix
| ⭐⭐⭐⭐⭐ | 先看: 產生一次性的 codebase 快照 適用: 需要把 repo 內容整理給 agent | |
openwiki
| ⭐⭐⭐⭐ | 先看: 建立可持續更新的 repo wiki 適用: 大型 repo 需要按需查文件 | |
## ✅ 進 Stage 5 前的自我檢查
- [ ] 我能用自己的話分清專案規則、Skill、單次 prompt。
- [ ] 我的規則卡有用途、禁止事項、驗證指令、交付格式,而且 agent 能讀到。
- [ ] 我的 review Skill 只讀取變更,測試後 `git status --short` 沒有多出非預期修改。
- [ ] 我知道「共用核心」不等於「所有 CLI 的檔名與權限都一樣」。
四項都做到,就進入 [Stage 5 的 Track A 核心](../../stages/05-claude-code-ecosystem.md#-進入條件與閱讀路線),先讀 5.1–5.4,再前往 A3。若還沒做到,先回 demo repo 重跑 CLI-5 或 CLI-6,不必先讀完所有補充資料。
展開常見問題與修正方式
- **規則寫很多,agent 還是漏掉**:先刪掉背景故事與重複句,只留可以觀察的行為。必須每次固定執行的安全檢查,應使用工具提供的 hook/policy,而不是只靠文字提醒。
- **Skill 沒出現**:檢查資料夾、`SKILL.md` 大小寫、YAML frontmatter 與工具支援的位置,再依官方方式 reload 或重開 session。
- **Skill 自己做了危險動作**:把 deploy、send、commit、push 改為只能由使用者明確啟用,並先用只讀版本測試。第三方 Skill 要先讀完內容和 scripts。
- **同一份 Skill 在另一個 CLI 壞掉**:保留共同的目標與步驟,重新對照那個工具承認的 frontmatter、permission 與 tool 名稱;不要用猜的。
- **專案資訊太多**:專案規則只當地圖,細節放在 `docs/`、Skill 的 `references/` 或其他按需文件。規則越長不代表越可靠。
> 安全底線:規則與 Skill 都是文字指令,不是絕對防護。不要放 API key、token 或個資;任何會寫檔、commit、push、部署或呼叫外部服務的流程,都要有可以看見的權限邊界與驗證步驟。