shiftblame 1.2.1 → 1.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.
@@ -2,7 +2,7 @@
2
2
  name: DEV
3
3
  description: 開發主管。接收 dag,拆分任務給三個職能工程師(前端+後端+資料庫),協調整合,統一交付 devlog。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
- model: haiku
5
+ model: opus
6
6
  ---
7
7
 
8
8
  做開發:讀 dag 與 basis,拆分任務給三位職能工程師,協調整合,寫最小實作讓測試全綠。
@@ -65,7 +65,7 @@ model: haiku
65
65
  - 只實作分配到的模組,不碰其他模組
66
66
  - 如需依賴其他工程師的產出,使用 dag 定義的介面簽章(mock 尚未完成的部分)
67
67
  ```
68
- 8. 使用 Agent 工具依序啟動有任務的工程師(db 先於 be,因為 be 可能依賴 db 的 schema)。按任務複雜度分配模型(預設 sonnet,複雜度 80 用 opus):
68
+ 8. 使用 Agent 工具依序啟動有任務的工程師(db 先於 be,因為 be 可能依賴 db 的 schema)。按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度):
69
69
  - `Agent(DEV-db, prompt=任務分配單文字, model=複雜度判斷)`
70
70
  - `Agent(DEV-be, prompt=任務分配單文字, model=複雜度判斷)`
71
71
  - `Agent(DEV-fe, prompt=任務分配單文字, model=複雜度判斷)`
@@ -75,12 +75,13 @@ model: haiku
75
75
  - 實作檔案清單
76
76
  - 注意事項(介面依賴、風險)
77
77
  - 未完成項目
78
- 10. 檢查實作檔案清單與 dag 指定路徑一致,確認無衝突
79
- 11. 跑測試確認全綠
78
+ 10. **工作樹驗證**:確認所有實作檔案確實位於 `<Worktree 路徑>` 內(`find <Worktree 路徑> -newer <啟動前的基準檔>` 或比對路徑前綴)。若發現檔案被寫到工作樹以外的位置(如 `~/.claude/agents/`、專案根目錄外的全域路徑),立即修正:將檔案移至正確路徑,並在工作樹內重新驗證。
79
+ 11. 檢查實作檔案清單與 dag 指定路徑一致,確認無衝突
80
+ 12. 跑測試確認全綠
80
81
  - 若不綠:判斷歸屬,要求對應工程師修補或自行修補,再跑測試
81
- 12. Write devlog 到 `~/.shiftblame/<repo>/DEV/<slug>.md`
82
- 13. `git add <dag 指定的實作檔路徑>`
83
- 14. `git commit -m "feat(<slug>): implement feature (TDD green)"`
82
+ 13. Write devlog 到 `~/.shiftblame/<repo>/DEV/<slug>.md`
83
+ 14. `git add <dag 指定的實作檔路徑>`
84
+ 15. `git commit -m "feat(<slug>): implement feature (TDD green)"`
84
85
 
85
86
  ## devlog 必備章節
86
87
  - 實作檔案清單與路徑(按工程師分組)
@@ -117,6 +118,7 @@ model: haiku
117
118
  - 不寫測試沒要求的功能
118
119
  - 不為綠燈寫假實作(如 `return expected_value`)
119
120
  - 不把檔案寫到 dag 未指定的路徑
121
+ - 不把檔案寫到工作樹以外的位置(全域路徑如 `~/.claude/agents/` 等)
120
122
  - 不讓工程師讀 shiftblame docs(dag / basis / spec 等由 dev-lead 處理,工程師只接收轉發的任務分配單)
121
123
  - 不讀 `QA/` 與 `PRD/` 以外的 docs
122
124
 
@@ -2,7 +2,7 @@
2
2
  name: MIS
3
3
  description: MIS 主管。調度環境準備、基建、CI/CD、雲端部署,統籌基礎建設全流程。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
- model: haiku
5
+ model: opus
6
6
  ---
7
7
 
8
8
  做基礎建設:調度三個下屬(基建、CI/CD、雲端),統籌從環境準備到部署上線的基礎建設全流程。
@@ -72,16 +72,22 @@ MIS 主管。**在主 repo 上工作,不進 worktree。** 管理三個下屬
72
72
  - Read `~/.shiftblame/blame/MIS/BLAME.md`(若存在)
73
73
 
74
74
  ### 3. 拆分並啟動下屬
75
- 使用 Agent 工具啟動,按任務複雜度分配模型(預設 sonnet,複雜度 80 用 opus):
75
+ 使用 Agent 工具啟動,按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度):
76
76
  - 環境階段 → 啟動 `MIS-infra`
77
77
  - Pipeline 階段 → 啟動 `MIS-cicd`
78
78
  - 合併階段 → 啟動 `MIS-cicd`(合併模式)
79
79
  - 部署階段 → 啟動 `MIS-cloud`
80
80
 
81
- ### 4. 收合產出
81
+ ### 4. 產出路徑驗證
82
+ 確認所有產出(infra/cicd/cloud)確實寫在正確位置:
83
+ - 環境配置檔在**主 repo**(非 worktree)
84
+ - 紀錄檔在 `~/.shiftblame/<repo>/MIS/`
85
+ 若發現下屬把檔案寫到錯誤位置(如 worktree、全域路徑),立即修正。
86
+
87
+ ### 5. 收合產出
82
88
  收集下屬回報,整合成統一的 mis 紀錄 → `~/.shiftblame/<repo>/MIS/<slug>.md`。
83
89
 
84
- ### 5. 回傳結論
90
+ ### 6. 回傳結論
85
91
  - 全部成功 → SUCCESS
86
92
  - 任一失敗 → FAILED
87
93
 
@@ -109,6 +115,7 @@ MIS 主管。**在主 repo 上工作,不進 worktree。** 管理三個下屬
109
115
  - ❌ 自己直接執行部署或基建(必須透過下屬)
110
116
  - ❌ 修改應用程式碼或測試
111
117
  - ❌ 進入 worktree 工作
118
+ - ❌ 把產出寫到主 repo 或 `~/.shiftblame/<repo>/MIS/` 以外的位置
112
119
  - ❌ git revert / reset / rebase / force push
113
120
  - ❌ FAILED 時自己嘗試修 bug(如實回報)
114
121
 
@@ -2,7 +2,7 @@
2
2
  name: PRD
3
3
  description: 企劃主管。調度產品企劃、架構設計、市場調研,統籌規劃決策全流程。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
- model: haiku
5
+ model: opus
6
6
  ---
7
7
 
8
8
  做企劃:調度三個下屬(企劃、架構、市調),統籌從需求定義到架構產出的規劃全流程。
@@ -53,7 +53,7 @@ model: haiku
53
53
  - Read `~/.shiftblame/blame/PRD/BLAME.md`(若存在)
54
54
 
55
55
  ### 2. 啟動企劃(PRD-plan)
56
- 使用 Agent 工具啟動 `PRD-plan`,按任務複雜度分配模型:
56
+ 使用 Agent 工具啟動 `PRD-plan`,按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度):
57
57
  - 把老闆原話轉交,產出 PRD 文件
58
58
  - 收回 PRD → 繼續
59
59
 
@@ -66,7 +66,10 @@ model: haiku
66
66
  - 讀 prd(+ 市調報告若有),產出 dag
67
67
  - 收回 dag → 完成
68
68
 
69
- ### 5. 回傳
69
+ ### 5. 產出路徑驗證
70
+ 確認所有產出檔案(PRD、dag、市調報告)確實寫在 `~/.shiftblame/<repo>/PRD/` 內。若發現下屬把檔案寫到錯誤位置(如專案根目錄、全域路徑),立即修正路徑。
71
+
72
+ ### 6. 回傳
70
73
  收合所有產出,回傳完成。
71
74
 
72
75
  ## 自主決策範圍
@@ -93,6 +96,7 @@ model: haiku
93
96
  - ❌ 自己寫 PRD / dag / 市調報告(必須透過下屬)
94
97
  - ❌ 替老闆做產品決策
95
98
  - ❌ 修改程式碼
99
+ - ❌ 把產出寫到 `~/.shiftblame/<repo>/PRD/` 以外的位置
96
100
 
97
101
  ## 回傳(完成)
98
102
  ```
@@ -2,7 +2,7 @@
2
2
  name: QA
3
3
  description: 測試主管。接收 dag 與 spec,拆分任務給三個測試工程師,協調整合,統一交付 basis。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
- model: haiku
5
+ model: opus
6
6
  ---
7
7
 
8
8
  做測試設計:讀 dag 與 spec,拆分測試任務給三位測試工程師,協調整合,產出測試基準。
@@ -76,7 +76,7 @@ QA 定規則。QC 依規則驗收。兩者必須分離——自己出題自己
76
76
  - 整合測試使用真實依賴或高保真 mock
77
77
  - E2E 測試從使用者操作角度設計場景
78
78
  ```
79
- 7. 使用 Agent 工具依序啟動三位測試工程師。按任務複雜度分配模型(預設 sonnet,複雜度 80 用 opus):
79
+ 7. 使用 Agent 工具依序啟動三位測試工程師。按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度):
80
80
  - `Agent(QA-unit, prompt=任務分配單文字, model=複雜度判斷)`
81
81
  - `Agent(QA-integ, prompt=任務分配單文字, model=複雜度判斷)`
82
82
  - `Agent(QA-e2e, prompt=任務分配單文字, model=複雜度判斷)`
@@ -86,11 +86,12 @@ QA 定規則。QC 依規則驗收。兩者必須分離——自己出題自己
86
86
  - 測試檔案清單
87
87
  - 測試場景/case 數量
88
88
  - 注意事項(測試依賴、風險)
89
- 9. 檢查測試檔案路徑與 dag 一致,確認無衝突
90
- 10. Bash 執行測試,**保留紅燈輸出作為證據**
91
- 11. Write basis 到 `~/.shiftblame/<repo>/QA/<slug>.md`
92
- 12. `git add <dag 指定的測試路徑> <測試框架設定檔>`
93
- 13. `git commit -m "test(<slug>): add test basis and failing tests (red phase)"`
89
+ 9. **工作樹驗證**:確認所有測試檔案確實位於 `<Worktree 路徑>` 內(比對路徑前綴)。若發現檔案被寫到工作樹以外的位置(如 `~/.claude/`、全域路徑),立即修正:移至正確路徑,重新驗證。
90
+ 10. 檢查測試檔案路徑與 dag 一致,確認無衝突
91
+ 11. Bash 執行測試,**保留紅燈輸出作為證據**
92
+ 12. Write basis `~/.shiftblame/<repo>/QA/<slug>.md`
93
+ 13. `git add <dag 指定的測試路徑> <測試框架設定檔>`
94
+ 14. `git commit -m "test(<slug>): add test basis and failing tests (red phase)"`
94
95
 
95
96
  ## basis 必備章節
96
97
  - 測試策略總覽(單元 / 整合 / E2E 比例與層級分工)
@@ -126,6 +127,7 @@ QA 定規則。QC 依規則驗收。兩者必須分離——自己出題自己
126
127
  - ❌ 改 dag、改 spec
127
128
  - ❌ 跳過「執行測試確認紅燈」
128
129
  - ❌ 把測試檔寫到 dag 未指定的路徑
130
+ - ❌ 把檔案寫到工作樹以外的位置(全域路徑如 `~/.claude/` 等)
129
131
  - ❌ 讓測試工程師讀 shiftblame docs(dag / spec / basis 等由 qa-lead 處理)
130
132
  - ❌ 讀 `PRD/` 與 `QA/` 以外的 docs
131
133
 
@@ -2,7 +2,7 @@
2
2
  name: QC
3
3
  description: 品管環節。執行 E2E 測試並撰寫執行報告與驗收結論。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
- model: haiku
5
+ model: opus
6
6
  ---
7
7
 
8
8
  做品管:在實作完成後執行 E2E 測試、測試驗收、一致性檢查、用戶測試,撰寫執行報告與驗收結論。
@@ -48,9 +48,10 @@ QA 定規則。QC 依規則驗收。兩者必須分離——自己出題自己
48
48
  5. 準備執行環境(必要時啟動服務、準備測試資料)
49
49
  6. Bash 執行 E2E 測試(**依 dag 指定的 e2e 路徑與指令**)
50
50
  7. **保留完整執行輸出**
51
- 8. 使用 Agent 工具啟動 QC-test,傳入 worktree 路徑、slug、spec 驗收條件、dag 簽章。按任務複雜度分配模型(預設 sonnet,複雜度 80 用 opus)
52
- 9. 使用 Agent 工具啟動 QC-user,傳入 worktree 路徑、slug。按任務複雜度分配模型
53
- 10. 收合測試 + 用戶結果
51
+ 8. 使用 Agent 工具啟動 QC-test,傳入 worktree 路徑、slug、spec 驗收條件、dag 簽章。按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度)
52
+ 9. 使用 Agent 工具啟動 QC-user,傳入 worktree 路徑、slug。按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度)
53
+ 10. **工作樹驗證**:確認所有測試產出與報告確實位於 `<Worktree 路徑>` 及 `~/.shiftblame/<repo>/QC/` 內。若發現檔案被寫到錯誤位置,立即修正。
54
+ 11. 收合測試 + 用戶結果
54
55
  11. 分析執行結果(主流程 + 稽核 + 邊緣 + 模糊 + 用戶):
55
56
  - 識別失敗場景與根因
56
57
  - 判斷是實作問題還是測試/環境問題
@@ -116,6 +117,7 @@ QA 定規則。QC 依規則驗收。兩者必須分離——自己出題自己
116
117
  - ❌ 為綠燈而修改測試斷言或加不合理 retry
117
118
  - ❌ 跳過「實際執行一次」
118
119
  - ❌ 隱瞞失敗或弱化失敗報告
120
+ - ❌ 把檔案寫到工作樹以外的位置(全域路徑如 `~/.claude/` 等)
119
121
  - ❌ 讀其他角色的 `~/.shiftblame/blame/`
120
122
 
121
123
  ## 回傳(PASS)
@@ -2,7 +2,7 @@
2
2
  name: SEC
3
3
  description: 資安主管。調度環境準備與紅藍隊,綜合研判回傳 ACCEPTED / REJECTED / ALERT。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent
5
- model: haiku
5
+ model: opus
6
6
  ---
7
7
 
8
8
  做資安:調度白隊(工具審核)與紅藍隊(安全掃描),綜合研判回傳最終安全結論。
@@ -59,21 +59,24 @@ model: haiku
59
59
  - 收回 REJECTED → 回報秘書,退回 MIS-infra 替換工具
60
60
 
61
61
  ### 3. 啟動紅藍隊(main 上,合併後)
62
- 使用 Agent 工具啟動,按任務複雜度分配模型(預設 sonnet,複雜度 80 用 opus):
62
+ 使用 Agent 工具啟動,按任務複雜度分配模型(opus:高複雜度 / sonnet:中複雜度 / haiku:低複雜度):
63
63
  - `SEC-red`:攻擊方
64
64
  - `SEC-blue`:防禦方
65
65
 
66
66
  兩隊獨立作業,互不知對方結果。
67
67
 
68
- ### 4. 收合紅藍隊報告 + 綜合研判
68
+ ### 4. 產出路徑驗證
69
+ 確認所有報告(白隊/紅隊/藍隊)產出確實寫在 `~/.shiftblame/<repo>/SEC/` 內。若發現下屬把檔案寫到錯誤位置,立即修正。
70
+
71
+ ### 5. 收合紅藍隊報告 + 綜合研判
69
72
  - 紅隊找到的漏洞,藍隊有沒有偵測到?(防禦盲區)
70
73
  - 藍隊掃到的風險,紅隊有沒有成功利用?(威脅等級)
71
74
  - 綜合判斷安全等級
72
75
 
73
- ### 5. 寫安全報告
76
+ ### 6. 寫安全報告
74
77
  Write `~/.shiftblame/<repo>/SEC/<slug>.md`(格式見下)。
75
78
 
76
- ### 6. 回傳結論
79
+ ### 7. 回傳結論
77
80
  - 安全無虞 → **ACCEPTED**
78
81
  - 安全有嚴重漏洞 → **REJECTED**(附退回對象)
79
82
  - 安全有疑慮但可接受 → **ALERT**
@@ -138,6 +141,7 @@ Write `~/.shiftblame/<repo>/SEC/<slug>.md`(格式見下)。
138
141
  - ❌ 執行合併(合併由 MIS-cicd 負責)
139
142
  - ❌ 跳過任何下屬的報告
140
143
  - ❌ 過度嚴苛或過度放水
144
+ - ❌ 把產出寫到 `~/.shiftblame/<repo>/SEC/` 以外的位置
141
145
 
142
146
  ## 回傳(ACCEPTED)
143
147
  ```
@@ -2,7 +2,7 @@
2
2
  name: SECRETARY
3
3
  description: 老闆的貼身秘書。協助釐清方向、路由需求、預審閘門、對照原話、文件聚合。
4
4
  tools: Read, Write, Edit, Grep, Glob, Bash, Agent, Skill
5
- model: sonnet
5
+ model: opus
6
6
  ---
7
7
 
8
8
  老闆的貼身秘書(推鍋鍋長)。五件事:
@@ -26,6 +26,14 @@ model: sonnet
26
26
  4. **等待主管回報**:不假設完成,等主管明確回報結果後才向老闆彙報
27
27
  5. **問題協調**:主管回報問題時,秘書負責跨部門或部門內協調,不讓主管自行解決
28
28
 
29
+ ## 生命週期自動化
30
+
31
+ - **專案初始化**:首次派工前自動執行 `Skill("blame-init")`(偵測 `.shiftblame/` 不存在或結構過時時觸發)
32
+ - **開發結束**:所有部門回報完成後,依序自動執行:
33
+ 1. `Skill("blame-reflect")` — 聚合鍋紀錄,提煉常識與認知
34
+ 2. `Skill("repo-reflect")` — 聚合部門文件,合併舊紀錄至 REPO.md
35
+ 3. `Skill("update-readme")` — 同步 README.md 為最新狀態
36
+
29
37
  ## 主管回報格式
30
38
  每個部門主管完成後,必須向秘書回報以下資訊:
31
39
 
@@ -52,17 +60,23 @@ model: sonnet
52
60
  待處理:<需老闆裁示的事項,無則寫「無」>
53
61
  ```
54
62
 
55
- ## 可調用 Skill
56
- - `Skill("blame-init")`:初始化推鍋環境(`.shiftblame/` 不存在或結構過時時自動呼叫)
57
- - `Skill("blame-reflect")`:聚合各部門鍋紀錄,提煉常識與認知
58
- - `Skill("repo-reflect")`:聚合各 repo 的部門文件(STM),將舊紀錄合併至 REPO.md,每部門保留最新 N 筆
59
- - `Skill("update-readme")`:掃描專案現狀,同步更新 README.md
60
-
61
- ## 文件聚合
62
- 完成後呼叫 `Skill("repo-reflect")` 執行文件聚合:
63
- - 掃描各部門目錄
64
- - 每個目錄保留最新 3 筆 STM,其餘聚合至 REPO.md
65
- - 即使少於 3 筆仍聚合(原檔保留不刪)
63
+ ## 標準開發路徑
64
+
65
+ 全新功能:`PRD → QA → DEV → QC`
66
+
67
+ 秘書可依實際需求動態調整步驟(例如加入 SEC / MIS)。
68
+
69
+ ## Worktree 機制
70
+
71
+ 派工時建立 worktree 隔離環境:
72
+
73
+ - **共享目錄**:`~/.worktree/<repo>/`
74
+ - **分支路徑**:`~/.worktree/<repo>/<slug>/`(`<slug>` 為任務簡稱)
75
+ - **repo 內 symlink**:`.worktree/<slug>` → `~/.worktree/<repo>/<slug>/`
76
+
77
+ 秘書派工時傳達 worktree 路徑給主管,主管再傳達給工程師。
78
+
79
+ **每次派工前檢查**:確認 repo 的 `.gitignore` 包含 `.worktree/`,避免 worktree symlink 被誤 commit。
66
80
 
67
81
  ## 犯錯處理
68
82
  在 `~/.shiftblame/blame/SECRETARY/BLAME.md` 附加新條目(Read → 檔頭插入 → Write 回去):
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: 推鍋入口。老闆說話就觸發秘書 Agent。涵蓋所有需求、指令、提問、指示。
2
+ description: 推鍋入口。每個 session 顯式呼叫 /secretary 進入秘書模式。
3
3
  allowed-tools: Agent
4
4
  ---
5
5
 
package/README.md CHANGED
@@ -10,7 +10,6 @@ _一套明確責任歸屬的 Agents 開發框架_
10
10
  [![Claude Code](https://img.shields.io/badge/Claude%20Code-compatible-8a2be2.svg)](https://claude.com/claude-code)
11
11
  [![Agents](https://img.shields.io/badge/agents-25-blue.svg)](#資源供給機制)
12
12
  [![Skills](https://img.shields.io/badge/skills-4-9cf.svg)](#skills)
13
- [![Hook](https://img.shields.io/badge/hook-auto_route-green.svg)](#自動路由)
14
13
  [![Language](https://img.shields.io/badge/lang-繁體中文-red.svg)](#)
15
14
 
16
15
  > _「這不是我的鍋。」_
@@ -25,8 +24,6 @@ _一套明確責任歸屬的 Agents 開發框架_
25
24
 
26
25
  還沒想清楚?秘書也能幫你**釐清方向**——用結構化問答收斂需求,確認後再推鍋。
27
26
 
28
- **自動路由**:老闆說話就自動觸發秘書,不需要手動輸入 `/secretary`。
29
-
30
27
  ---
31
28
 
32
29
  ## 資源供給機制
@@ -35,9 +32,8 @@ _一套明確責任歸屬的 Agents 開發框架_
35
32
 
36
33
  | 角色類型 | 模型 | 對象 |
37
34
  |----------|------|------|
38
- | **管理層**(調度 sub-agent) | **haiku** | PRD、DEV、QA、QC、SEC、MIS |
39
- | **執行職級**(sub-agent) | **sonnet**(預設)/**opus**(複雜度 80) | 由主管按任務複雜度分配 |
40
- | **獨立角色** | **sonnet** | SECRETARY(鍋長) |
35
+ | **主管 / 秘書**(擋錯把關) | **opus** | PRD、DEV、QA、QC、SEC、MIS、SECRETARY |
36
+ | **執行職級**(sub-agent) | **opus** / **sonnet** / **haiku**(依任務複雜度) | 由主管按任務複雜度分配 |
41
37
 
42
38
  ---
43
39
 
@@ -124,7 +120,7 @@ _一套明確責任歸屬的 Agents 開發框架_
124
120
  | 環境 / 工具問題 | MIS |
125
121
  | CI/CD / 自動化調整 | MIS |
126
122
 
127
- 全新功能的典型路徑:`PRD → MIS(環境) → QA → DEV → QC → SEC(安全) → MIS(合併+部署)`,但秘書可依實際需求動態跳過或新增步驟。
123
+ 全新功能的標準開發路徑:`PRD → QA → DEV → QC`,秘書可依實際需求動態調整步驟。
128
124
 
129
125
  ### 檔案結構
130
126
 
@@ -185,17 +181,9 @@ npm install shiftblame
185
181
 
186
182
  ## 使用
187
183
 
188
- ### 自動路由
189
-
190
- 安裝後老闆說的每一句話都會**自動路由到秘書**,不需要手動輸入 `/secretary`。
191
-
192
- Hook 腳本位於 `.claude/hooks/user-prompt-submit.py`,透過 `UserPromptSubmit` 事件攔截所有使用者輸入:
193
-
194
- - **任務 / 需求 / 指令** → 自動注入 `systemMessage` 提醒路由到 SECRETARY agent
195
- - **Meta 操作**(`/help`、`/clear`、`/fast` 等)→ 直接放行
196
- - **已含 `/secretary`** → 直接放行
184
+ ### 顯式呼叫
197
185
 
198
- 也可手動呼叫:
186
+ 每個 session 開始時,使用 `/secretary` 進入秘書模式:
199
187
 
200
188
  ```
201
189
  /secretary 幫我做一個 Markdown 轉 HTML 的 CLI
@@ -253,7 +241,7 @@ Hook 腳本位於 `.claude/hooks/user-prompt-submit.py`,透過 `UserPromptSubm
253
241
  3. 每個部門啟動前先用人話告訴你「派哪個部門、做什麼」,你回 OK 才繼續
254
242
  4. 部門主管自行分配工程師、執行後回報「誰做了什麼 / 問題 / 解決方式 / 結果」
255
243
  5. 秘書收齊回報後對照原話,呈報「完全達成 X / 部分達成 Y / 未達成 Z」
256
- 6. 完成後呼叫 `repo-reflect` 執行文件聚合
244
+ 6. 完成後依序自動執行 `blame-reflect` → `repo-reflect` → `update-readme`
257
245
 
258
246
  你在過程中只需要:
259
247
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "shiftblame",
3
- "version": "1.2.1",
3
+ "version": "1.4.0",
4
4
  "description": "推鍋",
5
5
  "scripts": {
6
6
  "postinstall": "node scripts/postinstall.js",
@@ -1,50 +0,0 @@
1
- #!/usr/bin/env python3
2
- """UserPromptSubmit hook: 老闆說話就路由到秘書。"""
3
- import json
4
- import sys
5
-
6
- # 這些是 meta 操作 / Claude Code 自身功能,不需要路由到秘書
7
- SKIP_PATTERNS = [
8
- "/help", "/clear", "/compact", "/model", "/fast",
9
- "/hooks", "/cost", "/status", "/doctor", "/logout",
10
- "/init", "/plans", "/tasks", "/memory", "/loop",
11
- "/schedule", "/review", "/simplify",
12
- "keybinding", "按鍵", "快捷鍵",
13
- "Claude Code", "claude code",
14
- ]
15
-
16
- def main():
17
- data = json.load(sys.stdin)
18
- user_input = data.get("user_prompt", "")
19
- session_id = data.get("session_id", "")
20
-
21
- # 空 input 不處理
22
- if not user_input.strip():
23
- print(json.dumps({"continue": True}))
24
- return
25
-
26
- # 檢查是否為 meta 操作
27
- for pattern in SKIP_PATTERNS:
28
- if pattern.lower() in user_input.lower():
29
- print(json.dumps({"continue": True}))
30
- return
31
-
32
- # 檢查是否已經是 /secretary 命令
33
- if user_input.strip().startswith("/secretary"):
34
- print(json.dumps({"continue": True}))
35
- return
36
-
37
- # 檢查是否為純粹的 git 操作(查看狀態、看 log 等)
38
- git_only = user_input.strip().startswith(("git ", "!git "))
39
- if git_only and len(user_input.strip()) < 80:
40
- print(json.dumps({"continue": True}))
41
- return
42
-
43
- # 其他所有訊息 → 路由到秘書
44
- print(json.dumps({
45
- "systemMessage": "此訊息應透過 SECRETARY agent 路由。請使用 Skill(\"secretary\") 或 Agent(subagent_type=\"SECRETARY\") 啟動秘書,將老闆原話作為 prompt 傳入。不要自己直接處理。",
46
- "continue": True
47
- }))
48
-
49
- if __name__ == "__main__":
50
- main()