dowafu 0.3.2 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -5
- package/README_zh-tw.md +9 -6
- package/dist/audit.js +8 -2
- package/package.json +1 -2
- package/publish/en/.agents/skills/find-holes-external/SKILL.md +0 -450
- package/publish/en/.agents/skills/preflight/SKILL.md +0 -137
- package/publish/en/.agents/skills/wrap/SKILL.md +0 -64
- package/publish/en/.claude/agents/explore-haiku.md +0 -8
- package/publish/en/.claude/agents/hole-finder-cost.md +0 -15
- package/publish/en/.claude/agents/hole-finder-feasibility.md +0 -15
- package/publish/en/.claude/agents/hole-finder-safety.md +0 -15
- package/publish/en/.claude/agents/hole-finder.md +0 -14
- package/publish/en/.claude/skills/find-holes/SKILL.md +0 -114
- package/publish/en/.claude/skills/find-holes-external/SKILL.md +0 -463
- package/publish/en/.claude/skills/preflight/SKILL.md +0 -198
- package/publish/en/.claude/skills/wrap/SKILL.md +0 -61
- package/publish/en/README.md +0 -106
- package/publish/en/workflow_spec.md +0 -71
- package/publish/zh-tw/.agents/skills/find-holes-external/SKILL.md +0 -593
- package/publish/zh-tw/.agents/skills/preflight/SKILL.md +0 -168
- package/publish/zh-tw/.agents/skills/wrap/SKILL.md +0 -65
- package/publish/zh-tw/.claude/agents/explore-haiku.md +0 -8
- package/publish/zh-tw/.claude/agents/hole-finder-cost.md +0 -15
- package/publish/zh-tw/.claude/agents/hole-finder-feasibility.md +0 -15
- package/publish/zh-tw/.claude/agents/hole-finder-safety.md +0 -15
- package/publish/zh-tw/.claude/agents/hole-finder.md +0 -14
- package/publish/zh-tw/.claude/skills/find-holes/SKILL.md +0 -140
- package/publish/zh-tw/.claude/skills/find-holes-external/SKILL.md +0 -609
- package/publish/zh-tw/.claude/skills/preflight/SKILL.md +0 -241
- package/publish/zh-tw/.claude/skills/wrap/SKILL.md +0 -62
- package/publish/zh-tw/README.md +0 -91
- package/publish/zh-tw/workflow_spec.md +0 -65
|
@@ -1,241 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: preflight
|
|
3
|
-
description: 開工前檢查這個專案的環境有沒有把工作流程靜默停用:流程規範那一章的內容讀不讀得到、skill 與 lens 齊不齊、tmp/ 有沒有被 gitignore。Claude Code 另查 auto-compact 與 subagent 模型;其他 host 另查 dowafu 跑不跑得起來。只讀、只報告,不改任何設定。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# preflight — 環境前置檢查
|
|
7
|
-
|
|
8
|
-
**第一次在一個專案用這套流程之前,先跑這個。** 派工、實作、收尾都做完了才發現環境早就
|
|
9
|
-
把流程靜默停用,那整段工是白做的。
|
|
10
|
-
|
|
11
|
-
假設你面對的是一個**完全沒接觸過這套東西**的專案:可能一樣都沒裝、可能裝一半、
|
|
12
|
-
可能檔案都在、但你其實讀不到。三種狀態要分得出來,而且**它們都不會報錯**。
|
|
13
|
-
|
|
14
|
-
> **只讀、只報告,不要改任何設定檔。** 那是使用者的東西,其中幾項還是全域的,動了會
|
|
15
|
-
> 影響他所有專案。查完列表,讓他自己決定改不改。
|
|
16
|
-
|
|
17
|
-
**本文分三節。第 1 節所有人都要查,第 2、3 節二選一:**
|
|
18
|
-
|
|
19
|
-
| 你是 | 查哪些 |
|
|
20
|
-
| --- | --- |
|
|
21
|
-
| 任何 agent | 第 1 節 |
|
|
22
|
-
| **Claude Code** | 第 1 節 + **第 2 節** |
|
|
23
|
-
| **其他 host** | 第 1 節 + **第 3 節**(第 2 節那幾項對你不存在,查了只會得到一堆「查不到」) |
|
|
24
|
-
|
|
25
|
-
> **判準是「誰在跑你」,不是「你背後是哪個模型」。** Claude Code 用 `settings.json` 接
|
|
26
|
-
> 相容 API 或別家模型當 BYOK 時,它**仍然是 Claude Code**——`autoCompactEnabled`、
|
|
27
|
-
> `CLAUDE_CODE_SUBAGENT_MODEL` 那些照樣生效,走第 2 節。反過來,別的 host 就算選了
|
|
28
|
-
> Claude 當模型,也走第 3 節。
|
|
29
|
-
>
|
|
30
|
-
> **不確定就兩節都查**,把查不到的如實標成「查不到」。
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
## 1. 不分環境都要查
|
|
35
|
-
|
|
36
|
-
指令在 repo 根目錄下跑。**你的工作目錄不保證落在哪裡,先 `cd` 過去再說。**
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
cd <repo 根的絕對路徑>
|
|
40
|
-
|
|
41
|
-
echo "=== 流程規範 ==="
|
|
42
|
-
ls CLAUDE.md AGENTS.md workflow_spec.md 2>&1
|
|
43
|
-
# 這條只幫你定位「內容寫在哪個檔」。它有命中 ≠ 你讀得到——判準見下。
|
|
44
|
-
# 兩種寫法都要找:專案本來那一章的語言,未必和你裝的語言套件相同。
|
|
45
|
-
grep -nE "規劃→實作→驗收|Plan → Implement → Accept" CLAUDE.md AGENTS.md workflow_spec.md 2>/dev/null
|
|
46
|
-
|
|
47
|
-
echo "=== skill 與 lens ==="
|
|
48
|
-
ls .claude/skills/ 2>/dev/null
|
|
49
|
-
ls .claude/agents/hole-finder*.md 2>/dev/null
|
|
50
|
-
|
|
51
|
-
echo "=== tmp/ ==="
|
|
52
|
-
git check-ignore -q tmp && echo "已忽略" || echo "未忽略"
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### 流程規範讀不讀得到
|
|
56
|
-
|
|
57
|
-
**判準只有一條:「規劃→實作→驗收流程規範(主從形態)」這一章的內容,你現在讀得到嗎?**
|
|
58
|
-
|
|
59
|
-
**那一章可能是以另一種語言的標題存在的。** 語言套件各帶各的副本,所以本來就有這一章的專案
|
|
60
|
-
最後會變成兩份——兩種語言,而只有一份會自動載入。上面那道 grep 兩種寫法都找就是為了這個;
|
|
61
|
-
**命中超過一個檔時,先讀下一段再下判斷。**
|
|
62
|
-
|
|
63
|
-
讀得到就算通過。內容是直接貼在入口檔裡、還是用 `@` 之類的方式引入的,**那是使用者的
|
|
64
|
-
選擇,不在檢查範圍內**。
|
|
65
|
-
|
|
66
|
-
讀不到就標成不符合,然後**自己去找一下**(多半在 repo 根的 `workflow_spec.md`),
|
|
67
|
-
讀完在回報裡註明「規範不在自動載入範圍內,本次是手動讀取的」——讓使用者知道換個
|
|
68
|
-
session 又會漏掉。
|
|
69
|
-
|
|
70
|
-
**找到不只一份,就要講明哪一份會被自動載入。** 專案可能本來就把這一章內嵌在入口檔裡,
|
|
71
|
-
而根目錄又多一份 `workflow_spec.md`——兩份的語言還可能不同(語言套件各裝各的)。
|
|
72
|
-
這時只回報「內容讀得到」不夠:要指出**你 context 裡的是哪一份**,以及兩份之間沒有任何
|
|
73
|
-
同步機制。自動載入的那一份,才是之後每個 session 真正生效的那一份。
|
|
74
|
-
|
|
75
|
-
> **為什麼會讀不到?** 入口檔因 host 而異:Claude Code 讀 `CLAUDE.md`(**不讀
|
|
76
|
-
> `AGENTS.md`**),其他 host 多半讀 repo 根的 `AGENTS.md`。而 `@xxx.md` 是 Claude Code
|
|
77
|
-
> 的 import 語法,**別的 host 不會展開它**——那時你看到的只是一行字,規範內容從來沒進
|
|
78
|
-
> 過你的 context。這不代表專案設定錯了,是你這一側的差異。
|
|
79
|
-
|
|
80
|
-
### skill 與 lens
|
|
81
|
-
|
|
82
|
-
`.claude/skills/find-holes-external/` 與 lens 定義在不在。**回報你實際看到的檔名,
|
|
83
|
-
缺哪個就點名**——「看到三個」不算檢查,是哪三個才算。
|
|
84
|
-
|
|
85
|
-
應該有四個,四個都算正常:
|
|
86
|
-
|
|
87
|
-
| 檔 | 是什麼 |
|
|
88
|
-
| --- | --- |
|
|
89
|
-
| `hole-finder.md` | 通用 lens |
|
|
90
|
-
| `hole-finder-cost.md` | 成本 |
|
|
91
|
-
| `hole-finder-feasibility.md` | 可行性 |
|
|
92
|
-
| `hole-finder-safety.md` | 安全、併發、失敗態 |
|
|
93
|
-
|
|
94
|
-
> 上面那道 glob 的 `*` 前面沒有連字號是刻意的:`hole-finder-*.md` 配不到
|
|
95
|
-
> `hole-finder.md`,拿它去數卻期待四個,怎麼數都對不起來。
|
|
96
|
-
|
|
97
|
-
**lens 缺了不要自己補寫**——它是 spoke 的 system prompt 來源,自己寫的版本會讓產出跟
|
|
98
|
-
稽核判準對不上。
|
|
99
|
-
|
|
100
|
-
### `tmp/`
|
|
101
|
-
|
|
102
|
-
未被 gitignore 就標成不符合:spoke 回報含規劃書原文,會被 commit 進版控。
|
|
103
|
-
**不要自己改 `.gitignore`**,問使用者。
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
## 2. 如果你是 Claude Code 的 agent
|
|
108
|
-
|
|
109
|
-
**你如果要用外派(`/find-holes-external`),第 3 節的第一項與第四項你也要查**——
|
|
110
|
-
不管是哪個 host 在驅動,CLI 都得跑得起來、設定都得到位。第 3 節其餘部分才是其他 host 專屬的。
|
|
111
|
-
|
|
112
|
-
下面兩項只影響 **Claude Code 自己的內派 sub-agent**。外派(`find-holes-external` 走
|
|
113
|
-
`dowafu`)的 spoke 模型由工單的 `_dispatch.md` 決定,**不受這兩項影響**——
|
|
114
|
-
這個專案只跑外派的話,這一節查了也不會改變什麼。
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
cd <repo 根的絕對路徑>
|
|
118
|
-
|
|
119
|
-
echo "=== settings(由低到高優先序)==="
|
|
120
|
-
for f in ~/.claude/settings.json .claude/settings.json .claude/settings.local.json; do
|
|
121
|
-
[ -f "$f" ] && { echo "--- $f"; cat "$f"; }
|
|
122
|
-
done
|
|
123
|
-
|
|
124
|
-
echo "=== 環境變數 ==="
|
|
125
|
-
echo "DISABLE_AUTO_COMPACT=${DISABLE_AUTO_COMPACT:-(未設)}"
|
|
126
|
-
echo "CLAUDE_CODE_SUBAGENT_MODEL=${CLAUDE_CODE_SUBAGENT_MODEL:-(未設)}"
|
|
127
|
-
|
|
128
|
-
echo "=== agent 定義的模型 ==="
|
|
129
|
-
grep -H "^model:" .claude/agents/*.md 2>/dev/null || echo "(沒有 agent 定義,或都沒指定 model)"
|
|
130
|
-
|
|
131
|
-
echo "=== 主模型與 effort ==="
|
|
132
|
-
grep -h "\"model\"\|\"effortLevel\"" ~/.claude/settings.json .claude/settings.json .claude/settings.local.json 2>/dev/null || echo "(未設,用預設)"
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### auto-compact
|
|
136
|
-
|
|
137
|
-
**`autoCompactEnabled` 沒有出現在任何一層 settings = 不符合**,因為它的預設值是 `true`。
|
|
138
|
-
不要把「沒看到設定」讀成「沒問題」——那會讓這條檢查永遠通過。
|
|
139
|
-
|
|
140
|
-
流程規範要求 context 吃緊時走 `/wrap` 交接、關 session 重啟,而不是 compact
|
|
141
|
-
(compact 是有損壓縮,壓完之後熱 session 的價值已經沒了)。
|
|
142
|
-
|
|
143
|
-
相關的還有 `autoCompactWindow`(100000–1000000)與環境變數 `DISABLE_AUTO_COMPACT`。
|
|
144
|
-
|
|
145
|
-
### subagent 模型
|
|
146
|
-
|
|
147
|
-
`settings.json` **沒有**「預設 subagent 模型」這個鍵——但**有一個環境變數會一刀切**。
|
|
148
|
-
解析順序由高到低四層,**全部攤出來給使用者看**:
|
|
149
|
-
|
|
150
|
-
1. **`CLAUDE_CODE_SUBAGENT_MODEL` 環境變數**(設成別名或 model ID 時)
|
|
151
|
-
2. 每次呼叫傳入的 `model` 參數
|
|
152
|
-
3. `.claude/agents/*.md`(或 `~/.claude/agents/`)的 `model:` frontmatter
|
|
153
|
-
4. 主對話的模型(frontmatter 省略時的預設就是這個)
|
|
154
|
-
|
|
155
|
-
**第 1 層會蓋掉所有 agent 定義檔的 `model:`**,包含刻意設成 opus 的那些——
|
|
156
|
-
「一設下去內派全變輕量模型」就是它。而且它是**全域的,在 A 專案設的會影響 B 專案**。
|
|
157
|
-
|
|
158
|
-
`availableModels` 允許清單會再過濾上面三層:被擋的家族別名換成該家族允許的最新版本,
|
|
159
|
-
其他情況**退回繼承主對話的模型**。所以 frontmatter 寫 `model: opus` **不保證跑 opus**。
|
|
160
|
-
|
|
161
|
-
**只查其中一層就回報「沒問題」會漏掉最常見的那個。**
|
|
162
|
-
|
|
163
|
-
**壓低的後果是靜默的**:內派 sub-agent 全部變成輕量模型,找漏洞照跑、照產出、照收尾,
|
|
164
|
-
只是品質整個掉下來,沒有任何地方會提示。
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
## 3. 如果你不是 Claude Code 的 agent
|
|
169
|
-
|
|
170
|
-
第 2 節那兩項對你不存在,跳過。你要確認的是下面四件事,**按這個順序**——前一項不成立,
|
|
171
|
-
後面查了也沒有意義。
|
|
172
|
-
|
|
173
|
-
### 一、`dowafu` 在哪、跑不跑得起來
|
|
174
|
-
|
|
175
|
-
**這是首要條件。** 工具起不來,工單寫得再好都派不出去;等到派工當下才發現,
|
|
176
|
-
會白費一次組工單的工。
|
|
177
|
-
|
|
178
|
-
```bash
|
|
179
|
-
dowafu --version
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
印得出版本號就過。印不出來只有兩種情況:
|
|
183
|
-
|
|
184
|
-
| 症狀 | 意思 | 怎麼回報 |
|
|
185
|
-
| --- | --- | --- |
|
|
186
|
-
| `Operation not permitted` | **沙箱擋的**,不是沒安裝。CLI 多半裝在家目錄底下,而沙箱預設不讀家目錄 | 照 host 的提示放行後重試。順帶告訴使用者:API key(`~/.config/dowafu/.env`)與對外網路同樣被擋,派工時一併要放行 |
|
|
187
|
-
| `command not found` | 可能沒裝,也可能裝在 PATH 之外 | 問使用者 CLI 裝在哪(請他跑 `which dowafu`),**不要自己搜檔案系統** |
|
|
188
|
-
|
|
189
|
-
**`command -v dowafu` 查不到不代表沒安裝**,別拿那個當判準。
|
|
190
|
-
|
|
191
|
-
**既沒回來也沒報錯,是第三種情況:它在等。** 不帶 `--yes` 時 CLI 會印出確認提示並卡在
|
|
192
|
-
stdin 上,而這在不同 host 會表現成逾時、表現成沒有輸出、或表現成「要不要幫你送出輸入」。
|
|
193
|
-
**記下你的環境是哪一種**——派工當下會再遇到一次,而那個時機點知道就晚了。
|
|
194
|
-
|
|
195
|
-
### 二、lens 定義與 skill 在不在
|
|
196
|
-
|
|
197
|
-
見第 1 節的「skill 與 lens」。有一點對你特別重要:
|
|
198
|
-
|
|
199
|
-
**lens 定義是 CLI 要讀的,不是你要讀的。** 它是 `dowafu` 組 spoke system prompt
|
|
200
|
-
的來源,你只要確認**檔案在**就好,不必自己讀懂內容。skill 才是你要讀的。
|
|
201
|
-
|
|
202
|
-
### 三、流程規範的內容,在你讀得到的地方
|
|
203
|
-
|
|
204
|
-
見第 1 節的「流程規範讀不讀得到」,判準相同:**那一章的內容,你現在讀得到嗎。**
|
|
205
|
-
|
|
206
|
-
**這一項你比 Claude Code 更容易踩空**,值得多看一眼。`@xxx.md` 是 Claude Code 的 import
|
|
207
|
-
語法,你不會展開它——入口檔裡若只有那一行,你看到的就是一行字,而**你很可能以為自己
|
|
208
|
-
已經讀過規範了**。實際檢查你的 context 裡有沒有那章的內容,別憑印象。
|
|
209
|
-
|
|
210
|
-
### 四、CLI 的設定到位了嗎——`dowafu --doctor`
|
|
211
|
-
|
|
212
|
-
```bash
|
|
213
|
-
dowafu --doctor
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
它會印出設定目錄解析到哪、`.env` 在不在、**哪幾家有 key**(只看有沒有,不印值)、
|
|
217
|
-
內建的型號白名單、以及找到哪幾支 lens 定義。不呼叫 API、不花錢,**而且不需要工單**——
|
|
218
|
-
這正是它在「什麼都還沒有」的時候能用的原因。
|
|
219
|
-
|
|
220
|
-
缺的項目照它印的回報。**不要主動幫使用者寫 key,也不要請他把 key 貼進這段對話**——
|
|
221
|
-
貼進來的東西會留在這段對話的歷史裡。幫他建目錄、放一份空範本可以,值要由他自己填進檔案。
|
|
222
|
-
|
|
223
|
-
`dowafu --doctor` 只印得出錯誤時,那與第一項是同一個發現:CLI 從這裡跑不起來,
|
|
224
|
-
下面幾項都還輪不到。
|
|
225
|
-
|
|
226
|
-
---
|
|
227
|
-
|
|
228
|
-
## 4. 輸出
|
|
229
|
-
|
|
230
|
-
一張表,最多一頁:
|
|
231
|
-
|
|
232
|
-
| 項目 | 狀態 | 現況 | 怎麼改 |
|
|
233
|
-
| --- | :-: | --- | --- |
|
|
234
|
-
| 流程規範 | ✗ | 「規劃→實作→驗收流程規範」那章的內容不在我的 context 裡;已手動讀取 `workflow_spec.md` 補上 | 若希望每個 session 都自動載入,需調整入口檔的接法 |
|
|
235
|
-
| `tmp/` | ✓ | 已被 `.gitignore` 忽略 | — |
|
|
236
|
-
|
|
237
|
-
**表格開頭先寫明你是哪種 host、走的是第 2 節還是第 3 節**,不要讓使用者以為沒查的那幾項
|
|
238
|
-
已經查過了。
|
|
239
|
-
|
|
240
|
-
**「查不到」要跟「符合」分開標。** 讀不到某個檔、或某項無法判定時,如實寫查不到,
|
|
241
|
-
不要當成通過——這個 skill 存在的理由就是抓靜默失效,自己先靜默失效就沒有意義了。
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: wrap
|
|
3
|
-
description: 實作收尾與驗收前置檢查:自檢專案的完成條件全綠、確認 report/runbook/issue_log 齊備、產出使用者手測清單與 diff 對照摘要、提示切 session(不 compact)。實作 session 完工或 context 吃緊時使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# wrap — 實作收尾
|
|
7
|
-
|
|
8
|
-
你是實作 spoke,正在收尾。先判定模式:
|
|
9
|
-
|
|
10
|
-
- **完工收尾**(預設):工作項已完成 → 走第 1–4 節。
|
|
11
|
-
- **中途交接**:context 吃緊、工作未完 → 直接走第 5 節(不適用「全綠才收工」)。
|
|
12
|
-
|
|
13
|
-
## 1. 自檢全綠
|
|
14
|
-
|
|
15
|
-
完成條件**以該專案 AGENTS.md 訂的為準**。沒有訂就看 `package.json` 的 `scripts`,**有哪些跑哪些**(`test`/`lint`/`typecheck`/`build`)。
|
|
16
|
-
|
|
17
|
-
- **不要為了湊數字自行加工具**(例如專案沒有 lint 就別裝 ESLint)
|
|
18
|
-
- **也不要因為「看起來沒必要」跳過已存在的 script**
|
|
19
|
-
|
|
20
|
-
兩條執行細節:
|
|
21
|
-
|
|
22
|
-
- 測試**只跑本次改到的模組**,判定範圍見該專案 AGENTS.md 測試規範。禁止接 `| sort`/`| head`/`| tail`——那會吃掉失敗訊息
|
|
23
|
-
- `typecheck` 與 `build` 若是兩個獨立 script,**分開跑、不要合併**。build 設定常把測試檔排除在外,只有 typecheck 涵蓋得到;合併之後「建置失敗」與「測試型別錯」也會無法區分
|
|
24
|
-
|
|
25
|
-
任何一項不綠:先修好再繼續收尾,**不得帶紅收工**。
|
|
26
|
-
|
|
27
|
-
## 2. 文件檢查
|
|
28
|
-
|
|
29
|
-
- **report**:已產出?含「施工中修正」節(實作偏離規劃之處)?
|
|
30
|
-
- **runbook**:已產出?含機器測不到部分的手測步驟(環境、路徑、操作順序、預期結果)?
|
|
31
|
-
- **issue_log**:本輪 report 產出後的修正是否逐筆記錄?(report/runbook 不回頭改,見 AGENTS.md 文件紀律)
|
|
32
|
-
|
|
33
|
-
## 3. 產出驗收包(給使用者的最終訊息)
|
|
34
|
-
|
|
35
|
-
依序呈現:
|
|
36
|
-
|
|
37
|
-
1. **手測清單**:從 runbook 抽出使用者要親手驗的項目,逐條列(步驟+預期結果),不要叫使用者自己去翻 runbook。
|
|
38
|
-
2. **diff 對照摘要**:實際改動檔案清單 vs 規劃書檔案清單,逐一對應;**超出規劃的改動明確標出**(夾帶是驗收紅線)。
|
|
39
|
-
3. **待決事項**:實作中發現但未處理的問題(記 issue_log 待後續,或需使用者裁決的)。
|
|
40
|
-
|
|
41
|
-
## 4. 收尾提醒
|
|
42
|
-
|
|
43
|
-
- **不建議 commit**——依 AGENTS.md Git 安全規範,先呈 diff 給使用者確認。
|
|
44
|
-
- **不用 compact**:若 context 已吃緊,明講「本 session 建議收工,後續修補可續用本 session(熱修補);若本 session 已冷或被切割,開新 session 依 report+issue_log 冷啟動」。
|
|
45
|
-
- 修補波期間:每修一筆 append issue_log。
|
|
46
|
-
|
|
47
|
-
## 5. 中途交接(context 吃緊、未完工)
|
|
48
|
-
|
|
49
|
-
**不 compact**——compact 後地圖已被有損壓縮,熱 session 的價值已死;改寫交接文後關 session。
|
|
50
|
-
|
|
51
|
-
1. 更新 todo 狀態(已完成/進行中/未動)。
|
|
52
|
-
2. 寫交接文 `_docs/<領域>/handoff_<主題>.md`(首份無版號,之後 `handoff_<主題>_v<n>.md`)。
|
|
53
|
-
**一次一份新檔,不 append 到舊份**——舊份留著當歷史,不回頭改。
|
|
54
|
-
表頭列出日期、交接原因、分支狀態,以及**前一份的連結與取代關係**
|
|
55
|
-
(例:「前一份 `handoff_<主題>_v4.md`——內容已完成,本檔取代」),內容:
|
|
56
|
-
- 規劃書路徑+目前做到第幾個工作項
|
|
57
|
-
- 改到一半的檔案清單+各自狀態(例:「X.ts 已改完未測」「Y.ts 改一半,缺 Z」)
|
|
58
|
-
- 目前紅綠狀態(哪些測試綠、哪些紅、為什麼)
|
|
59
|
-
- 下一步(具體到「打開哪個檔做什麼」)
|
|
60
|
-
- 環境備註與陷阱(dev server 埠、flaky 測試、workaround)
|
|
61
|
-
3. 本輪已完成的修正照常記 issue_log。
|
|
62
|
-
4. 給使用者一行接續指令:「新 session 開場:`依 <plan路徑> 續作,先讀 <handoff路徑> 與 issue_log`」。
|
package/publish/zh-tw/README.md
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# publish/ — 要複製到別的專案去用的東西
|
|
2
|
-
|
|
3
|
-
三樣,落地位置各不相同:
|
|
4
|
-
|
|
5
|
-
| 這裡的 | 落到目標專案的 | 是什麼 |
|
|
6
|
-
| --- | --- | --- |
|
|
7
|
-
| `.claude/skills/<name>/` | `.claude/skills/<name>/` | skill——給讀這個目錄的 host |
|
|
8
|
-
| `.agents/skills/<name>/` | `.agents/skills/<name>/` | 同樣的 skill,給讀開放規格目錄的 host |
|
|
9
|
-
| `.claude/agents/*.md` | `.claude/agents/` | lens 定義——spoke 的 system prompt 來源 |
|
|
10
|
-
| `workflow_spec.md` | 專案根目錄 | 規劃→實作→驗收流程規範 |
|
|
11
|
-
|
|
12
|
-
> **`.claude/agents/` 不要跟著搬。** 那是 CLI 硬編的路徑(`--repo-root` 底下的
|
|
13
|
-
> `.claude/agents`),跟 host 讀哪裡無關——它是工具在讀,不是 agent 在讀。
|
|
14
|
-
|
|
15
|
-
## 安裝
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
TARGET=<目標專案路徑>
|
|
19
|
-
mkdir -p "$TARGET/.claude/skills" "$TARGET/.claude/agents" "$TARGET/.agents/skills"
|
|
20
|
-
cp -R .claude/skills/. "$TARGET/.claude/skills/"
|
|
21
|
-
cp -R .agents/skills/. "$TARGET/.agents/skills/"
|
|
22
|
-
cp .claude/agents/*.md "$TARGET/.claude/agents/"
|
|
23
|
-
cp workflow_spec.md "$TARGET/"
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**全部整檔覆蓋**,沒有需要手工拼接的部分。
|
|
27
|
-
|
|
28
|
-
> **`.claude/` 與 `.agents/` 兩個都要複製,不要因為「這個專案不用 Claude」就跳過
|
|
29
|
-
> `.claude/`。** 底下的 `agents/` 是 CLI 的資料目錄——它是工具在讀,跟你的 agent 是誰
|
|
30
|
-
> 無關。漏了的話乾跑會中止並印出它找不到的路徑(不會花到錢),但你得回頭補一次。
|
|
31
|
-
|
|
32
|
-
裝完之後在目標專案跑 **`preflight`**——它會檢查接線有沒有做、環境有沒有把流程靜默停用。
|
|
33
|
-
這些失效**都不會報錯**,只會安靜地讓流程不生效。
|
|
34
|
-
|
|
35
|
-
**skill 不保證是 `/` 指令。** 有的 host 會自動掛載這兩個目錄並提供 `/名稱`,有的兩者
|
|
36
|
-
都沒有。叫不動的話直接指名檔案:「照 `.agents/skills/preflight/SKILL.md` 執行」。
|
|
37
|
-
|
|
38
|
-
### 兩份 skill 的關係
|
|
39
|
-
|
|
40
|
-
`.agents/skills/` 那份是從 `.claude/skills/` 衍生的——**內容相同,只拿掉了只有特定
|
|
41
|
-
host 才成立的段落**。它的 frontmatter `metadata` 記著來源檔的 sha256,來源改了、衍生版
|
|
42
|
-
沒跟上,發佈前檢查會擋下來。**要改一律改 `.claude/skills/` 那份**,再回頭看衍生版。
|
|
43
|
-
|
|
44
|
-
## 把 `workflow_spec.md` 接進目標專案
|
|
45
|
-
|
|
46
|
-
Claude Code **讀 `CLAUDE.md`、不讀 `AGENTS.md`**;而 `AGENTS.md` 規格本身**沒有定義任何
|
|
47
|
-
import 機制**。兩種讀者得分別交代,否則其中一邊會靜默漏讀整份規範。
|
|
48
|
-
|
|
49
|
-
在目標專案的 `AGENTS.md` 尾端加:
|
|
50
|
-
|
|
51
|
-
```markdown
|
|
52
|
-
## 工作流程規範
|
|
53
|
-
|
|
54
|
-
見 `workflow_spec.md`(專案根目錄)。下一行的 `@` 是 Claude Code 的 import 語法,
|
|
55
|
-
會自動載入該檔;其他工具請自行開啟。
|
|
56
|
-
|
|
57
|
-
@workflow_spec.md
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
三個細節,弄錯了不會報錯、只會安靜地沒作用:
|
|
61
|
-
|
|
62
|
-
- **`@` 不能包在反引號裡**——包了就是字面文字,不會 import
|
|
63
|
-
- 路徑**相對於含 import 的那個檔**,不是相對工作目錄
|
|
64
|
-
- import 可遞迴,上限**四層**;`CLAUDE.md` → `AGENTS.md` → `workflow_spec.md` 是兩層
|
|
65
|
-
|
|
66
|
-
目標專案若沒有 `CLAUDE.md`,另建一個、內容一行 `@AGENTS.md` 即可(官方建議做法)。
|
|
67
|
-
|
|
68
|
-
### 專案本來就有一章流程規範時
|
|
69
|
-
|
|
70
|
-
很多專案本來就有一份,直接貼在入口檔裡——而且語言可能跟你剛裝的這套不同,因為每個語言
|
|
71
|
-
套件各帶各的 `workflow_spec.md`。就這樣把檔案複製進去,專案裡會變成**兩份、而且沒有任何
|
|
72
|
-
機制保證同步**;真正管到每個 session 的是入口檔會自動載入的那一份——**是本來就在的那章,
|
|
73
|
-
不是你剛裝的那個檔**。
|
|
74
|
-
|
|
75
|
-
二選一,另一份要拿掉:
|
|
76
|
-
|
|
77
|
-
- **留 `workflow_spec.md`**(建議):把入口檔裡舊的那一章刪掉,換成上面那段 import
|
|
78
|
-
- **留內嵌的那一章**:把它的內容換成你要統一的語言那份 `workflow_spec.md` 的內容,
|
|
79
|
-
並且**不要**把 `workflow_spec.md` 複製進專案
|
|
80
|
-
|
|
81
|
-
不論走哪一條,專案裡最後**只留一份**。裝完跑一次 `preflight`——它會回報實際在 context
|
|
82
|
-
裡的是哪一份,所以這個決定就算漏掉了,還有一道會抓到。
|
|
83
|
-
|
|
84
|
-
## 這裡不准出現的東西
|
|
85
|
-
|
|
86
|
-
`publish/` 的內容會在一個不知道來源專案存在的地方執行,所以不得出現絕對路徑、來源專案的
|
|
87
|
-
名稱與文件檔名、只有來源專案成立的指令,以及實測數字與樣本數討論(那些是依據,不是操作)。
|
|
88
|
-
|
|
89
|
-
例外:`_docs/` 這個名字可以出現——它是 CLI 硬編的 spoke 禁區,屬工具層保留目錄。
|
|
90
|
-
|
|
91
|
-
同步前先跑來源專案的發佈前檢查,它會把上面這些掃一遍。
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# 工作流程規範
|
|
2
|
-
|
|
3
|
-
## 規劃→實作→驗收流程規範(主從形態)
|
|
4
|
-
|
|
5
|
-
> 規劃書是決策過程的有損投影;誰持有活脈絡,誰做那件事就便宜。本節依此組織:規劃與裁決在有脈絡的 hub,執行在工單制的 spoke,品質裁決交給數字。
|
|
6
|
-
|
|
7
|
-
### 角色
|
|
8
|
-
|
|
9
|
-
| 角色 | 職責 | 權限 |
|
|
10
|
-
| --- | --- | --- |
|
|
11
|
-
| **使用者** | 做不做、目標、狀態變更(動工/阻擋/終止) | 裁量權**無需舉證**,一句話生效 |
|
|
12
|
-
| **hub**(有脈絡的長對話) | 討論聚焦、寫規劃、發工單、融合 spoke 回報、對照初衷分析差異 | **版本只從 hub 出** |
|
|
13
|
-
| **spoke**(工單制 session) | 實作(=審查+實作)、量測(benchmark)、找漏洞(可選) | 無版本權、無狀態欄、無裁決權 |
|
|
14
|
-
|
|
15
|
-
### 流程總覽
|
|
16
|
-
|
|
17
|
-
```
|
|
18
|
-
0. 決策討論(hub+使用者)→ decision 文件
|
|
19
|
-
1. 規劃(hub,依必答檢查)→ plan 文件 → 使用者直接審定
|
|
20
|
-
(可選:使用者點名找漏洞 spoke——need-to-know 工單、產出意見不產裁決;skill:`/find-holes-external` 外派、`/find-holes` 內派 sub-agent)
|
|
21
|
-
2. 實作(spoke,「依 X 文件實作」開場)→ 完成條件 = `pnpm run test`/`lint`/`tsc`/`build` 全綠 → report+runbook(收尾 skill:/wrap)
|
|
22
|
-
3. 熱修補(同 session 續命至修補波結束)→ 每修一筆 append issue_log,不回頭同步 report/runbook
|
|
23
|
-
4. 驗收(使用者):行為驗收(照 runbook 手測)+ diff 過目(忠於規劃、無夾帶)+ 商業判斷 → commit/PR
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
### 文件紀律
|
|
27
|
-
|
|
28
|
-
- 六種文件各司其職:**decision** 記 why/**plan** 記 how/**facts**(append-only)記已驗事實/**report** 記交付狀態(產出後不回改)/**runbook** 記手測步驟/**issue_log** 記修補帳(append-only,雜亂即正常)。
|
|
29
|
-
- 新版只寫差異;背景一行引用 decision,不重述。
|
|
30
|
-
- 文件狀態欄變更權專屬使用者;**文件不得自訂翻案條件**(「本文件只能被 X 推翻」即紅旗)。
|
|
31
|
-
|
|
32
|
-
### 出處三規則(防走私)
|
|
33
|
-
|
|
34
|
-
1. 「依使用者裁示/已定案」**必附出處**(原話、時間、回答的是什麼問題);無出處視為未定案。程序性回答(「還沒」「等一下」)不得升格為實體決定。
|
|
35
|
-
2. 驗收門檻**必附推導**(同機制的實測基準或使用者指定);模型自擬數字無效。門檻校準的基準須同機制——一次改兩個變數,門檻先失效。
|
|
36
|
-
3. 先例引用**給尺不給屍**:判決只在「同問題+同成本結構」下可移植;「那案死了這個也會死」不是論證。
|
|
37
|
-
|
|
38
|
-
### 品質賭注條款
|
|
39
|
-
|
|
40
|
-
模型/prompt/呼叫機制的選擇一律由 benchmark 裁決:事前訂死門檻、不事後翻案;未達門檻不強行採用;負結果連同結果檔入檔,後續同類提案須先面對既有量測。
|
|
41
|
-
|
|
42
|
-
### 實作 session 紀律
|
|
43
|
-
|
|
44
|
-
- 開場先列 todo(TodoWrite,穿越 context 壓縮的錨);大量讀檔偵察派 sub-agent(context 防火牆)。
|
|
45
|
-
- **不用 compact**(有損,且 compact 後熱 session 價值已死):context 吃緊 → 在最後一個自然斷點收尾——完工走 `/wrap`,**未完工走 `/wrap` 中途交接模式**(寫交接文 `handoff_<主題>.md`,之後每次交接開新版本檔 `handoff_<主題>_v<n>.md`、表頭指出取代哪一份,不 append 舊份)→ 關 session → 新 session 依規劃書+交接文冷啟動。發現對話開頭是 "This session is being continued" → 重讀規劃書,不信摘要裡的規格。
|
|
46
|
-
**「context 吃緊」由使用者判斷,不要憑感覺自行宣告**——模型量不到自己的 context,主觀判斷的誤報遠多於命中。除非使用者說了、或有實際數字,否則只在自然斷點提一句「要不要收尾」,不要反覆提醒、更不要因此中斷正在做的工作項。
|
|
47
|
-
- 施工中偏離規劃 → 記入 report(施工中修正節);同檔順手修(無關 lint 錯等)允許,記 issue_log。
|
|
48
|
-
|
|
49
|
-
### 撰寫實作規劃書時的必答檢查(MUST)
|
|
50
|
-
|
|
51
|
-
每一條在規劃書中須有明確答案或明文標註「刻意接受的取捨」,不得留白:
|
|
52
|
-
|
|
53
|
-
1. **引用即驗證**:每一句「既有機制已涵蓋/零改動/本來就有 X 過濾」,必須實際打開該檔案把**完整語意**追完(含分支、聯集/副表、fallback 路徑),不能只憑檔名、註解或行號。引用時附上支持結論的關鍵語意,不只附位置。
|
|
54
|
-
**本條同樣適用於驗收 spoke 的引用**(內派與外派皆同):驗「spoke 說的那段註解在不在」不夠,還要驗「**註解說的還成不成立**」——註解會與程式碼漂移。實測案例:spoke 引用某檔頭註解宣稱「該元件在 provider 範圍之外」,hub 確認註解存在且措辭吻合便判為事實正確,但那段架構早已被搬進 provider 內,**結論是錯的**。
|
|
55
|
-
2. **失敗態與時間窗**:每個機制寫出失敗時的行為——排程沒跑之前?重試用盡之後?併發競態?「最多 N 次」後面沒接「用盡則…」就是未完成的設計。
|
|
56
|
-
3. **計費呼叫的閘門順序**:任何產生外部 API 成本的呼叫(LLM/STT/圖片生成/embedding),限額或 gate 檢查必須在呼叫**之前**;「成功後才扣次」須另配前置唯讀 pre-check,並回答「超限之後每一次請求會發生什麼、成本是多少」。
|
|
57
|
-
4. **新端點防護必答**:任何新增的 API route 必須明寫 auth 層級、rate limit、request body 大小上限三項;「不需要」也要寫出理由。若專案內已有同型漏洞的修復案例,引用其文件作為標準。
|
|
58
|
-
5. **可實作性驗證**:每個「後端驗證 X/程式層保證 Y」,回答後端技術上做得到嗎、需要什麼依賴;做不到的改為可實作的替代(如前置粗篩 + 後置精確判斷兩段式)。
|
|
59
|
-
6. **雙向生命週期**:任何「上架/下架、啟用/停用、時效」機制,兩個方向都要有定義(只寫下架掃描沒寫上架回填 = 缺口);索引類副本(embedding、變體、快取、投影)在狀態變更時是否全部連動。
|
|
60
|
-
|
|
61
|
-
### 獨立審查
|
|
62
|
-
|
|
63
|
-
規劃書不送任何獨立 session 審查、不得建議恢復;歷史 `_docs` 中的「給審查閘的指引」不再適用。乾淨視角一律以「找漏洞 spoke」形式存在(見流程總覽第 1 步的兩個 skill)。
|
|
64
|
-
|
|
65
|
-
---
|