| name | opencode-workflow-skills |
| description | 安裝開工/收工/初始化三大工作流程技能(完整版)。當使用者說「裝工作流程技能」「安裝開工收工技能」「裝三大技能」「startup shutdown project-init」「讓 OpenCode 會開工收工」時載入。本技能會在 ~/.config/opencode/skills/ 建立 startup、shutdown、project-init 三個全域技能,並設定 opencode.json 權限。 |
開工/收工/初始化 三大技能(OpenCode 完整版)
更新日期:2026-07-27
裝完這一包,你只要對 OpenCode 說三句話,專案就能在任何電腦、任何 AI Agent 之間無縫接續:
| 口令 | 技能 | 它會做什麼 |
|---|
| 「初始化專案」 | project-init | 幫這個資料夾建立專案藍圖 AGENTS.md + 交接檔 handoff.md;有 GitHub 就順便建私有 repo,有 Obsidian 就建詳細筆記 |
| 「開工」 | startup | 讀藍圖+交接檔,回報「上次做到哪、上次在哪台電腦收工、git 狀態、建議下一步」 |
| 「收工」 | shutdown | 更新藍圖進度、改寫交接檔、git commit + push、詳細紀錄寫進 Obsidian |
設計核心一句話:開工是「讀」,收工是「寫」。 兩個流程永不重疊、不衝突。
三個層級:你裝到哪,技能就做到哪
這三個技能會自動偵測你的工具,不用選版本、不用改設定:
| 層級 | 需要先裝什麼 | 你會得到 |
|---|
| L1 本地 | 什麼都不用(建議專案放在你的雲端硬碟資料夾) | AGENTS.md+handoff.md,換電腦靠雲端硬碟自動同步 |
| L2 +GitHub | 懶人包 07-github(gh auth login 已登入) | 版本控制+雲端備份 |
| L3 +Obsidian | 懶人包 04-obsidian(Obsidian MCP 可用) | 專案詳細筆記(第二大腦) |
三層資訊的讀取頻率不同,這是整套設計的靈魂:
AGENTS.md+handoff.md:每個 session 都讀(只放交接必需的精簡資訊)
- GitHub:指定才讀(備份與歷史)
- Obsidian:有需要才讀(完整脈絡與細節)
先備條件
請 OpenCode 幫我執行以下步驟
步驟一:建立三個技能資料夾
Windows(PowerShell):
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\startup"
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\shutdown"
New-Item -ItemType Directory -Force "$HOME\.config\opencode\skills\project-init"
Mac/Linux:
mkdir -p ~/.config/opencode/skills/startup
mkdir -p ~/.config/opencode/skills/shutdown
mkdir -p ~/.config/opencode/skills/project-init
⚠️ 檔名一定要是全大寫的 SKILL.md,資料夾名要跟技能的 name 一模一樣,OpenCode 才掃得到。
步驟二:建立 startup(開工)技能
把下面整段內容原封不動寫入 ~/.config/opencode/skills/startup/SKILL.md
(不要把最外層的 ```` 圍籬符號寫進檔案,檔案第一行必須是 ---):
---
name: startup
description: 開工接續助手(三層級自動偵測)。當使用者說「開工」、「開始工作」、「我來了」、「上次做到哪」、「我們繼續」、「接下來呢」、「接續工作」、「來吧」等任何要接續上次工作的請求時,請一定要使用此技能。本技能會讀取 AGENTS.md 專案藍圖與 handoff.md 交接檔、檢查 git 狀態(含遠端 fetch)、辨識上次是否在另一台電腦收工、建議下一步該做什麼。
---
# 開工接續助手(三層級)
新對話開始時,幫使用者快速進入「上次做到哪」的脈絡,避免從零開始解釋。
## 核心原則
1. **開工是「讀」、收工是「寫」**——本技能只讀、只報告,不改任何檔案
2. **不主動 `git pull`**(避免覆蓋本地未 commit 變動,只提醒「要不要 pull」)
3. **30 分鐘內 fetch 過就跳過**(避免單台多對話冗餘)
4. **Obsidian 有需要才讀**——L3 筆記是詳細背景資料,開工預設不讀、只列出路徑
5. 跟收工(shutdown)技能是**對偶關係**:收工存進去、開工讀出來
## 層級偵測(開工看「這個專案」建到哪層)
- **L1**:專案有 `AGENTS.md`/`handoff.md` → 讀
- **L2**:專案有 `.git` → 做 git 檢查
- **L3**:`AGENTS.md` 同步層級表登記了 Obsidian 路徑,且**目前有可用的 Obsidian MCP 工具**(例如能列出 vault 目錄、讀寫筆記的工具)→ 列出筆記路徑(不主動讀)
> 判斷 L3 時請看「你手上實際有哪些工具」,不要假設特定的工具名稱——不同的 Obsidian MCP 名稱不一樣。
> 注意:偵測依據是「專案有什麼」,不是「電腦有什麼」。低層級電腦打開高層級專案時做得到的照做、做不到的註明(優雅降級)。
## 開工 SOP(依序執行)
### L1:讀藍圖與交接檔(永遠執行)
1. **讀 `AGENTS.md`**:專案目標、路線圖進度、工作約定(摘要,不全文倒出)
2. **讀 `handoff.md`**:上次做到哪、目前狀態、下一步、注意事項
3. **檢查「最後更新」欄**:
- 取得這台電腦的名稱——Windows(PowerShell)用 `$env:COMPUTERNAME`;Mac/Linux 用 `hostname`
- 若**更新者的電腦名 ≠ 這台電腦** → 特別標示「⚠️ 上次在另一台電腦(名稱)收工」,並確認雲端硬碟同步已完成(看 `handoff.md` 的檔案時間戳是否與交接檔內寫的時間吻合;若本地檔案明顯過舊,提醒等雲端同步完再開工)
- 若 `handoff.md` 的更新時間比 舊很多 → 提醒「上次可能沒有正式收工」
:若專案沒有 /:
有 Obsidian MCP → 改讀 或 的「上次做到哪」段
讀完提議:「這個專案還沒有 AGENTS.md+handoff.md,要不要用『初始化專案』補建?」(提議即可,不主動建)
:
clean → 「本地工作區乾淨」
有未 commit 變動 → 列出,提醒「上次有未完成的修改,要繼續還是放棄?」
:
先看 的最後修改時間(用你手上的檔案工具讀取時間戳即可,)
檔案不存在,或距離現在 → 執行:
在報告中列出筆記路徑(例:),註明「需要詳細背景時我再去讀」
只有兩種情況才主動讀: 的「下一步」明確指向筆記內容,或使用者要求
給使用者(不要冗長):
最後,不要自己擅自繼續。
❌ 主動 (會撞本地未 commit 變動)
❌ 修改 //Obsidian 筆記(那是收工的事)
❌ 沒有交接檔時硬建一個(先問使用者)
❌ 開工就把 Obsidian 筆記全文讀進來(違反「有需要才讀」的分層設計)
❌ 把藍圖與交接檔內容(要摘要、保持精簡)
| 面向 | 收工 | 開工 |
|------|------|------|
| 主要動作 | 摘要今天做什麼 | 摘要上次做什麼 |
| AGENTS.md / handoff.md | | |
| Git 動作 | add + commit + push | status + fetch(不 pull) |
| Obsidian | 寫詳細紀錄 | 只列路徑、需要才讀 |
| 對外副作用 | 推 GitHub、改檔案 | (只讀、只報告) |
所有訊息使用
專案藍圖檔名固定是(跨 Agent 開放標準)。Mac/Linux 會區分大小寫,寫成小寫會變成「檔案在、Agent 卻讀不到」
步驟三:建立 shutdown(收工)技能
把下面整段內容原封不動寫入 ~/.config/opencode/skills/shutdown/SKILL.md:
---
name: shutdown
description: 收工同步助手(三層級自動偵測)。當使用者說「收工」、「結束了」、「下班」、「準備換電腦」、「同步」、「先到這裡」、「換電腦繼續做」等任何要結束工作並保存進度的請求時,請一定要使用此技能。本技能會更新 AGENTS.md 進度與 handoff.md 交接檔、git commit + push、把詳細紀錄寫進 Obsidian,確保下次(或在另一台電腦、或換一個 Agent)打開能無縫接續。
---
# 收工同步助手(三層級)
對話結束前,把這次的工作保存到專案建到的每一層:
| 層級 | 收工動作 | 給誰看 |
|------|---------|--------|
| L1 本地 | 更新 `AGENTS.md` 進度+改寫 `handoff.md` | 下一個 session 的任何 Agent、任何電腦 |
| L2 GitHub | commit + push | 版本歷史+雲端備份 |
| L3 Obsidian | 詳細紀錄寫進 `專案工作流程.md` | 未來需要完整脈絡的自己 |
## 核心原則
1. **開工是「讀」、收工是「寫」**——`handoff.md` 是收工的必寫項,這是跨電腦/跨 Agent 交接的生命線
2. **不在 vacuum 中執行**——先從對話脈絡盤點今天做了什麼
3. **只動需要動的**——沒實質進度(只是問問題、沒改檔案)就不跑同步
4. **有疑問先問人**——commit 前先給訊息草稿等點頭;不確定要不要 add 的檔案先問
5. **精簡與詳細分家**——`handoff.md` 只放交接必需資訊,完整脈絡(決策原因、踩坑細節)寫 Obsidian,兩邊不重複
## 層級偵測(收工看「這個專案」建到哪層)
- **L1**:專案有 `AGENTS.md`/`handoff.md` → 更新(沒有就提議先跑「初始化專案」)
- **L2**:專案有 `.git` → commit + push
- **L3**:`AGENTS.md` 登記了 Obsidian 路徑,且**目前有可用的 Obsidian MCP 工具**(能讀寫 vault 筆記的工具)→ 寫詳細紀錄
> 判斷 L3 請看你手上實際有哪些工具,不要假設特定工具名稱。
> 低層級電腦打開高層級專案:做得到的照做,做不到的在 `handoff.md` 註明(例:「本次在無 Obsidian 的電腦收工,L3 筆記未更新」),回到高層級電腦時補。
## 收工 SOP(依序執行)
### L1:更新藍圖與交接檔(永遠執行)
1. **盤點本次成果**:從對話歷史摘要——完成了哪些檔案、做了什麼決定、踩了什麼坑
2. **更新 `AGENTS.md`**:
- 路線圖 checklist:勾掉完成項、新增發現的待辦
- 「資料夾結構」有新增檔案就補
3. (整份重寫,不是往下堆):
⏯️ 目前做到哪:本次最後完成的動作
🚦 目前狀態:可運行?哪些做一半?
➡️ 下一步:具體、可執行的 1-3 項
⚠️ 注意事項:新踩的坑、暫時 workaround
🕐 最後更新:時間+更新者(Agent 名 @ 電腦名)+ Git push 狀態(先寫「待推」,L2 完成後回填)
電腦名取得方式:Windows(PowerShell)用 ;Mac/Linux 用
看變動 → 擬 commit 訊息(標題:動詞+對象;正文 3-5 條 bullet 描述變動+為什麼)→
commit →
:成功 → ;失敗 → ,並在回報中特別提醒(沒推成功,另一台電腦就拿不到 GitHub 備份)
不要 add:、API key、憑證檔、untracked 的不明新檔(先問)
更新 :
「⏯️ 上次做到哪」段:同步 handoff 摘要
「🗓️ 最近更動紀錄」表格:加一行(日期+摘要+同步狀態)
「🕳️ 踩坑筆記」:有新坑就依分類補(含原因與解法,這裡寫詳細版)
決策紀錄:本次做了什麼取捨、為什麼(handoff 不放這些,放這裡)
表格超過 30 行 → 提醒使用者歸檔到
沒做到的項目用 ⚠️ 或 ❌ 並說明原因。
若本次改過 底下的全域設定或技能,要特別提醒使用者:,換電腦要自己再裝一次或另外複製。
❌ 對「沒實質進度」的對話也跑同步
❌ 沒更新 就收工(那是下次開工的唯一線索)
❌ commit message 寫「更新」、「修改」這種沒資訊的字
❌ 自動 add untracked 的新檔或敏感檔(要使用者確認)
❌ 把該寫進 Obsidian 的長篇細節塞進 (交接檔要保持一頁內讀完)
| 面向 | 收工 | 開工 |
|------|------|------|
| AGENTS.md / handoff.md | | |
| Git 動作 | add + commit + push | status + fetch(不 pull) |
| Obsidian | 寫詳細紀錄 | 只列路徑、需要才讀 |
| 對外副作用 | 推 GitHub、改檔案 | 無 |
所有訊息使用
專案藍圖檔名固定是(Mac/Linux 會區分大小寫)
Windows+雲端硬碟資料夾內的 repo,第一次操作若遇 git 寫入錯誤:
步驟四:建立 project-init(初始化專案)技能
把下面整段內容原封不動寫入 ~/.config/opencode/skills/project-init/SKILL.md:
---
name: project-init
description: 專案初始化技能(三層級自動偵測)。當使用者說「初始化專案」、「專案初始化」、「幫這個專案做初始化」、「開新專案」、「建立專案藍圖」、「幫我 init 專案」等要為當前資料夾建立專案基礎建設的請求時,請一定要使用此技能。本技能會依這台電腦的工具鏈自動建到最高可用層級:L1 本地(AGENTS.md + handoff.md)→ L2 GitHub(私有 repo)→ L3 Obsidian(專案詳細筆記)。
---
# 專案初始化技能(三層級自動偵測)
## 設計理念
一套技能、三個層級。**這台電腦裝了什麼工具,就自動建到哪個層級**——不用問使用者「你要第幾層級」。
| 層級 | 平台 | 建立的東西 | 讀取時機 |
|------|------|-----------|---------|
| L1 本地 | 專案資料夾(建議放在你的雲端硬碟資料夾) | `AGENTS.md`(專案藍圖)+`handoff.md`(交接檔) | **每個 session 都讀** |
| L2 GitHub | 私有 repo | git 版本控制+雲端備份 | 指定才讀 |
| L3 Obsidian | 第二大腦 vault | `專案工作流程.md`(詳細筆記) | 有需要才讀 |
> 為什麼藍圖叫 `AGENTS.md` 而不是 `CLAUDE.md`?因為 AGENTS.md 是跨 Agent 開放標準——OpenCode、Claude Code、Codex、Gemini CLI 都讀得懂。專案層的檔案刻意用開放格式,任何 Agent 接手都能無縫工作。
> **檔名必須全大寫 `AGENTS.md`**:Windows 不分大小寫所以寫錯也能動,但 Mac/Linux 分大小寫,小寫的 `agents.md` 會變成「檔案明明在、Agent 卻讀不到」。
## 層級偵測(初始化看「這台電腦」有什麼)
依序檢查,決定本次能建到第幾層級:
1. **L1**:無條件可建
2. **L2**:跑 `gh auth status`,成功(已登入 GitHub CLI)→ 可建
3. **L3**:目前有可用的 Obsidian MCP 工具(能列目錄、建立筆記的工具)→ 可建
- 請依「你手上實際有哪些工具」判斷,不要假設特定的工具名稱
檢查完先告訴使用者:「這台電腦可初始化至第 N 層級」,再開始執行。
## 初始化 SOP(依序執行)
### L1:本地藍圖(永遠執行)
1. **掃描資料夾現況**:列出既有檔案,若已有 `AGENTS.md` 或 `handoff.md` → 停下來問使用者是否要覆蓋
2. **詢問使用者**:專案名稱、一句話目標、關鍵時程(沒有就留白,不要硬編)
3. **建立 `AGENTS.md`**:用下方範本為底,填入實際內容;「資料夾結構」區塊由掃描結果自動生成
4. **建立 `handoff.md`**:用下方範本為底,「目前做到哪」填「專案初始化完成」,更新者填 Agent 名+電腦名
- 電腦名:Windows(PowerShell)用 `$env:COMPUTERNAME`;Mac/Linux 用 `hostname`
5. 若路徑含「雲端硬碟」「My Drive」「Google Drive」→ 提醒使用者確認雲端硬碟桌面版的同步圖示已打勾(檔案要真的躺在雲端,換電腦才拿得到)
確認 通過(沒過就跳過 L2,並告訴使用者「先跑懶人包 07-github」)
先建立 (避免把敏感檔推上去,這是唯一在本技能處理的 git 相關動作):
依懶人包 的做法,把這個資料夾變成 GitHub 上的 repo 並推上去
(repo 的英文名字要先問使用者)
同步層級表的 GitHub 欄(repo 網址)
在 vault 根目錄建立與專案資料夾的資料夾
建立 ,內容包含:專案背景與詳細脈絡、決策紀錄(為什麼這樣做)、素材與相關筆記連結、🕳️ 踩坑筆記、🗓️ 最近更動紀錄表格(第一行寫今天的初始化)
同步層級表的 Obsidian 欄(vault 內路徑)
給使用者一個層級 checklist:
❌ 未經確認就覆蓋既有的 /
❌ 把藍圖檔名寫成小寫 (Mac/Linux 會讀不到)
❌ 電腦沒 /Obsidian 時報錯中斷(正確行為:跳過該層級、在回報中註明原因)
❌ 把 、API key 之類敏感檔 commit 進 git
❌ 建 public repo(預設一律 private,使用者明說才轉公開)
所有訊息與檔案內容使用
Windows+雲端硬碟資料夾內跑 git 若遇寫入錯誤:
之後的日常循環交給搭檔技能:開工(startup)讀、收工(shutdown)寫
步驟五:設定 opencode.json 權限
打開(或建立)~/.config/opencode/opencode.json,確認裡面有這一段:
{
"permission": {
"skill": {
"startup": "allow",
"shutdown": "allow",
"project-init": "allow",
"*": "ask"
}
}
}
意思是:這三個技能可以直接用,其他技能一律先問你。
⚠️ 如果 opencode.json 已經有內容(例如前面懶人包加的 MCP 設定),不要整份覆蓋,只要把 "permission" 這個區塊合併進去就好。JSON 每個區塊之間要有逗號、最後一項不能有逗號。
步驟六:重啟 OpenCode
OpenCode 只有在啟動時才會掃描技能目錄。 剛剛新增的三個資料夾,要完全關掉 OpenCode 再重新打開,才會被認得。
(在終端機按 Ctrl + C 結束,或直接關掉視窗,再重新輸入 opencode 啟動。)
驗證步驟
重啟之後依序做這三件事:
1. 確認技能被掃到
跟 OpenCode 說:
「列出你現在可用的技能,有沒有 startup、shutdown、project-init?」
三個都要出現。沒出現 → 看下面「常見問題」第一題。
2. 測試「開工」
cd 到任何一個專案資料夾,然後說:
「開工」
正常的話會看到類似這樣的結構化摘要(沒有 AGENTS.md 的資料夾,它會問你要不要初始化,這也算成功):
📂 專案:<資料夾名>(第 1 層級)
📘 上次做到哪:(尚未建立 handoff.md)
➡️ 建議下一步:要不要先跑「初始化專案」?
3. 測試「初始化專案」+「收工」
找一個新的空資料夾,說「初始化專案」,看它有沒有建出 AGENTS.md(確認是全大寫)和 handoff.md。
接著隨便改一個檔案,說「收工」,看它有沒有回報 L1/L2/L3 checklist。
完成回報格式
請 OpenCode 用這個格式回報:
## 三大技能安裝完成
- startup:~/.config/opencode/skills/startup/SKILL.md ✅
- shutdown:~/.config/opencode/skills/shutdown/SKILL.md ✅
- project-init:~/.config/opencode/skills/project-init/SKILL.md ✅
- opencode.json 權限:permission.skill 三項 allow 已設定 ✅
- 重啟 OpenCode:已完成 ✅
- 驗證 1/技能清單:三個技能都掃到 ✅
- 驗證 2/說「開工」:有正常回報摘要 ✅
- 驗證 3/說「初始化專案」:AGENTS.md(大寫)+ handoff.md 已建立 ✅
沒過的項目用 ⚠️ 或 ❌ 並說明原因。
常見問題
| 問題 | 解法 |
|---|
| 技能沒出現在可用清單 | ①檔名要全大寫 SKILL.md ②資料夾名要跟 frontmatter 的 name 一致 ③最上面的 --- 前後不能有空行或多餘文字 ④沒重啟 OpenCode |
| 說「開工」沒反應 | 完全關掉 OpenCode 再開一次;還是不行就檢查 opencode.json 的 permission.skill 有沒有寫對 |
寫進去的 SKILL.md 開頭多了 ``` | 外層的圍籬符號是懶人包的排版用的,不要寫進檔案。檔案第一行必須是 --- |
| Mac/Linux 上 Agent 說找不到專案藍圖 | 檢查檔名是不是被寫成小寫 agents.md。一定要大寫 AGENTS.md——Windows 不分大小寫所以看不出問題,Mac/Linux 會直接讀不到 |
| 「初始化專案」跳過了 L2 | gh auth status 沒過。先做懶人包 07-github |
| 「初始化專案」跳過了 L3 | 這台電腦沒有 Obsidian MCP。先做懶人包 04-obsidian,或之後在另一台電腦說「補建第三層級」 |
| 雲端硬碟資料夾裡跑 git 出現寫入錯誤 | git config windows.appendAtomically false(Windows+雲端硬碟的已知坑) |
| 兩台電腦可以同時開工同一個專案嗎? | 不建議——雲端硬碟會產生「衝突副本」。開工技能會顯示上次收工的電腦與時間,幫你避開 |