| name | plan-stack |
| description | 自動偵測或互動式建立自訂技術棧 —— 掃描專案分層結構產生範本掃描規則,寫入設定檔。當使用者提到 /plan-stack、「自訂技術棧」、「新增掃描技術棧」時觸發此 Skill。 |
plan-stack — 自訂技術棧設定
自動掃描專案的分層結構,偵測各層級的 package 與命名慣例,產生範本掃描規則並寫入設定檔。
設定目錄
依 plugin 根目錄 references/config-resolver.md(相對 SKILL.md 為 ../../references/)的解析邏輯載入設定目錄。技術棧檔案寫入 stacks/{id}.md。
前置檢查:參照 plugin 根目錄 references/prerequisites.md(相對 SKILL.md 為 ../../references/)檢查 CLAUDE.md 是否存在。
參數
/plan-stack [技術棧 ID]
- 不帶參數:自動偵測後引導設定
- 帶 ID:直接使用指定 ID,跳過偵測步驟
流程
1. 檢查現有技術棧
- 讀取
stacks/_builtin.md 取得內建 ID 清單
- 檢查
stacks/{id}.md 是否已存在
- 若已是內建技術棧 ID → 提示已有內建支援,且不可用同一 ID 建立自訂檔案覆蓋(見下方「決定技術棧 ID」與 Gotchas 的一致規則);引導改用不同的自訂 ID
- 若已有自訂技術棧檔案 → 詢問是否更新
- 若為空 → 繼續
2. 偵測框架資訊
目前範本以 Java(Maven/Gradle)專案為例;非 Java 專案請參照下方「邊界情況」改用對應語言的建置檔與 Pattern。
掃描建置檔(pom.xml / build.gradle),擷取框架、ORM、DB。
3. 決定技術棧 ID
驗證:不可與內建 ID(spring-mvc-mybatis、spring-boot-mybatis、spring-boot-jpa、spring-boot-mybatis-plus)或已有的自訂 ID 重複,格式為小寫英文 + 數字 + 連字號。此檢查為硬性擋下,不提供「覆蓋內建」的選項——原因見下方 Gotchas。
4. 掃描專案分層結構
掃描 src/main/java 下的 package 結構,辨識各層級並產生 Glob Pattern。
| 辨識規則 | 層級 |
|---|
entity / model / pojo / domain | Entity |
dao / mapper / repository | Repository/Mapper |
mapping + .xml | Mapper XML |
service (無 impl) | Service |
service/impl | ServiceImpl |
controller / rest / api | Controller |
dto / vo | DTO |
5. 展示結果並確認
展示層級表格,支援確認/編輯/取消。
6. 寫入技術棧檔案
建立或更新 stacks/{id}.md,格式參照 plugin 根目錄 references/config.template.md(相對 SKILL.md 為 ../../references/)的自訂技術棧模板:
---
id: {技術棧 ID}
framework: {框架}
orm: {ORM}
db: {DB}
scaffold: {scaffold 行為}
---
## 掃描規則
| 層級 | 說明 | Glob Pattern | 範例 Package |
|------|------|-------------|-------------|
| ... | ... | ... | ... |
## 特殊慣例
- ...
同時更新對應專案的 projects/{repo-id}.md 中的 stack 欄位。
7. 回傳結果
自訂技術棧設定完成!
技術棧檔案:{設定目錄}/stacks/{id}.md({設定目錄} 依 `references/config-resolver.md` 解析結果代入,通常為 ~/.claude/feature-workflow)
層級數:{N}
現在執行 /plan-build 時會自動使用此技術棧的掃描規則。
何時不用
- 首次整體設定 → 改用
/plan-setup 或 /crew-init
- 詢問專案用什麼技術 → 自行查看專案檔案,非本 skill 的職責
- 註冊專案 → 改用
/project-add
Gotchas
- 自訂技術棧 ID 不可與內建 ID 重複:內建 ID 包括
spring-mvc-mybatis、spring-boot-mybatis、spring-boot-jpa、spring-boot-mybatis-plus。依 references/config-resolver.md 的解析邏輯,凡專案 stack 欄位值屬於內建 ID,一律讀取 stacks/_builtin.md 中的對應區塊,不會去讀同名的 stacks/{id}.md;因此就算手動用內建 ID 建立自訂檔案,該檔案也不會被套用(不是「靜默覆蓋內建定義」,而是自訂檔案本身失效、不生效)。步驟 3 會擋下此重複,若要調整內建行為,須改用不同的自訂 ID,並更新對應專案的 projects/{repo-id}.md 之 stack 欄位指向新 ID。
- 掃描結果受 package 命名影響:DAO 層叫
repository 而非 dao 時仍可辨識,但非標準命名(如 persistence、store)可能辨識失敗。掃描結果必須展示給使用者確認(見「展示結果並確認」一節),不可跳過。
邊界情況
- 設定目錄不存在:提示先執行
/plan-setup
- 專案不在 projects/ 目錄中:提示先執行
/project-add
- 掃描不到分層結構:進入完全手動模式
- 非 Java 專案:Pattern 改為對應語言
- 多模組專案:詢問要掃描哪個模組