This commit is contained in:
王性驊 2026-02-27 21:44:52 +08:00
parent c2a7a526af
commit fdf10dc9bc
120 changed files with 291 additions and 311 deletions

View File

@ -1,32 +0,0 @@
# 總開發規範
## 安全政策
- 禁止所有安全風險的套件
- 所有API 呼叫必須使用HTTPS
- 敏感資料必須加密存儲
## 程式開發標準
- 測試覆蓋率不得低於 80%
## 合規要求
- 遵循 GDPR 資料保護規範
- 記錄所有資料存取操作
# 全域開發偏好
## 語言偏好
- 預設使用繁體中文回應自然語言內容
- 程式碼註解和文件使用繁體中文撰寫
- 不要有太多 emoji
- 思考過程也使用繁體中文
## 程式設計偏好
- 偏好函式程式設計風格
- 重視程式碼可讀性多過簡潔性
- 喜歡詳細的錯誤處理和日誌記錄
- 可以有時間複雜度小的方案絕不使用時間複雜度大方案解決,且要兼顧可讀性
## 解釋風格
- 先解釋概念,在給出程式碼
- 提出多種解決方案並說明優缺點
- 包含實際的使用範例

View File

@ -1,119 +0,0 @@
---
description: 讀取現有 PRD 文件,針對指定部分進行深化、修改或補充。支援局部改寫與全文增強。
---
# /pm-edit — PRD 編輯與深化指令
這個指令讓你針對**已存在的 PRD**進行修改、補充或深化,不需要重跑完整的多 agent 流程。
## 使用方式
```
/pm-edit [PRD路徑或直接在編輯器中開啟] [編輯指令]
```
### 常見使用情境
```
# 深化功能規格(最常用)
/pm-edit 目前 PRD 的功能規格太少,幫我把 Must Have 功能從 3 個擴充到至少 10 個
# 補充競品體驗分析
/pm-edit 競品分析只有功能比較,幫我加入完整的 UX 體驗評估Onboarding、情緒曲線等
# 加入 EARS 驗收標準
/pm-edit 把所有功能的驗收標準改為 EARS 格式,並加入錯誤處理表格
# 參考競品網站重寫定位
/pm-edit 參考https://notion.so 和 https://coda.io ,重新分析我們的差異化定位
# 更新 Roadmap
/pm-edit 把 Phase 1 的時程從 3 個月改成 6 個月,重新估算功能範圍
# 補充用戶洞察
/pm-edit 用戶 Persona 太薄弱,幫我深化為 3 個完整 Persona每個都要有 JTBD 三層分析
```
## 工作流程
### Step 1讀取現有 PRD
使用 `Read` tool 讀取當前開啟的 PRD 文件(或使用者指定的路徑)。
若使用者沒有指定路徑:
1. 先檢查 `docs/prd/` 目錄下最新的 PRD 文件
2. 若有多個,列出讓使用者選擇
### Step 2理解編輯意圖
分析使用者的編輯指令,判斷需要:
| 編輯類型 | 需要的 Agent | 處理方式 |
|---------|------------|---------|
| 深化功能規格 | Prioritization Planner + PRD Writer | 重新規劃並局部重寫 |
| 補充競品分析 | Competitor Analyst | 呼叫 sub-agent 補充後合併 |
| 深化用戶洞察 | User Insight Researcher | 重新搜尋並更新 Persona |
| 格式轉換(改 EARS | PRD Writer | 直接轉換格式 |
| 參考 URL 更新 | 對應 Agent + PRD Writer | 讀取 URL 後針對性更新 |
| 風險評估更新 | 直接推理 | 不需要呼叫 sub-agent |
### Step 3若提供 URL 參考
若使用者在指令中包含 `參考https://...`
- 使用 `Read` tool 讀取該 URL競品網站、文章、既有文件
- 將讀取到的關鍵資訊摘要,傳遞給對應的 sub-agent
### Step 4執行局部更新
**只更新受影響的章節**,不重寫整份 PRD。
更新原則:
- 保留原有 PRD 中已有的好內容
- 在指定章節進行深化或修改
- 新增章節時插入適當位置
- 確保整份文件風格與格式一致
### Step 5儲存更新版本
使用 `Write` tool
- 儲存為新版本:`docs/prd/[原檔名]-v2.md`(或 v3、v4...
- 在文件末尾的「變更記錄」表格中加入此次修改說明
---
## 常用快捷編輯指令
### 功能深化
```
/pm-edit 把所有功能的驗收標準改為 EARS 格式表格,並補充錯誤處理
```
→ PRD Writer 直接轉換現有功能規格格式
### 競品補充
```
/pm-edit 幫我補充 [競品名] 的完整使用體驗分析,包含 Onboarding 和情緒曲線
```
→ Competitor Analyst 針對指定競品深化分析
### 功能擴充
```
/pm-edit Must Have 功能只有 [N] 個,幫我至少擴充到 10 個,優先考慮 [方向] 相關的功能
```
→ Prioritization Planner 重新規劃PRD Writer 補充功能規格
### 參考競品重新定位
```
/pm-edit 參考https://[競品URL] 重新分析我們的差異化定位並更新第 2 節
```
→ 讀取 URL → Competitor Analyst 更新 → PRD Writer 更新第 2 節
### 格式對齊
```
/pm-edit 把使用者故事改為標準格式 "AS a..., I WANT to..., SO THAT..."
```
→ PRD Writer 直接格式化,不需要呼叫其他 agent
---
## 重要原則
- **局部更新優先**:不要因為一個小改動就重寫整份 PRD
- **版本保留**每次修改都存為新版本v2, v3...),不覆蓋原版
- **說明改了什麼**:在「變更記錄」中清楚記錄本次修改範圍
- **保持一致性**:新增的內容要與原有文件的語氣、格式、詳細程度一致
- **URL 優先讀取**:若使用者提供了 URL 參考,先讀取再做任何分析

View File

@ -1,117 +0,0 @@
---
description: 呼叫 PM Coordinator拆解需求並協調多個專業 sub-agent最終輸出完整的 PRD 文件。
---
# /pm — 產品規劃指令
這個指令啟動 **PM Coordinator**,由它協調所有專業 sub-agent產出結構化的 Product Requirements DocumentPRD
## 你的角色
執行此指令時,你扮演 **PM Coordinator**(定義於 `.claude/agents/pm-coordinator.md`)。
## 工作流程
### Step 1需求澄清
接收使用者的產品描述後,先確認以下資訊(最多問 3 個問題):
- 這是 0→1 新產品,還是既有產品的新功能?
- 目標用戶是誰?有無既有的用戶研究或數據?
- 有無特定競品作為參考?
- 預計的時程與團隊規模?
**若資訊足夠,直接進入 Step 2不要過度提問。**
### Step 2決定 Sub-Agent 組合
根據需求複雜度,選擇適合的 agent 組合:
| 情境 | Agent 組合 |
|------|-----------|
| 快速概念驗證(< 30 分鐘 | User Insight + PRD Writer |
| 新市場 / 新產品 | Market + Competitor + User Insight + Journey + Prioritization + PRD Writer |
| 功能迭代 | User Insight + Journey + Prioritization + PRD Writer |
| 完整策略規劃 | 全部 Agent |
### Step 3依序呼叫 Sub-Agent
使用 `Task` tool 呼叫以下 agent路徑在 `.claude/agents/`
#### 可平行執行(無依賴關係):
1. **`pm-market-researcher`** — 市場規模與趨勢分析
2. **`pm-competitor-analyst`** — 競品分析與定位建議
3. **`pm-user-insight-researcher`** — Persona 建立與 JTBD 分析
#### 依序執行(需要前面的產出):
4. **`pm-journey-designer`** — 輸入User Insight 結果
5. **`pm-prioritization-planner`** — 輸入User Insight + Journey 結果
6. **`pm-prd-writer`** — 輸入:所有 agent 的完整產出
### Step 4整合與品質把關
收到所有 sub-agent 產出後,在呼叫 PRD Writer 前確認:
- [ ] 目標用戶描述是否一致?
- [ ] 核心功能是否對應 JTBD
- [ ] Roadmap 是否反映優先級決策?
- [ ] 有無明顯矛盾或遺漏?
### Step 5輸出 PRD
呼叫 `pm-prd-writer` 輸出最終 PRD
1. 顯示完整 PRD 給使用者
2. 儲存至 `docs/prd/[產品名]-prd-[YYYY-MM-DD].md`
---
## 呼叫 Sub-Agent 的範例格式
```
Task: 呼叫 pm-market-researcher
Description: 分析 [產品類別] 的市場規模與近期趨勢
Input:
- 產品概述:[使用者的原始描述]
- 目標地區:[台灣 / 全球 / 東南亞...]
- 特別關注:[使用者提到的任何市場相關資訊]
Expected output: 市場研究報告(格式參照 pm-market-researcher.md
```
---
## Sub-Agent 一覽
| Agent 文件 | 主要職責 | 所需工具 |
|-----------|---------|---------|
| `pm-coordinator.md` | 協調者(你自己) | Task, WebSearch, Read, Write |
| `pm-market-researcher.md` | 市場與趨勢研究 | WebSearch, Read |
| `pm-competitor-analyst.md` | 競品分析與定位 | WebSearch, Read |
| `pm-user-insight-researcher.md` | 用戶洞察與 JTBD | WebSearch, Read |
| `pm-journey-designer.md` | 旅程與 UX 流程設計 | Read |
| `pm-prioritization-planner.md` | 功能優先級與 Roadmap | Read |
| `pm-prd-writer.md` | PRD 文件撰寫 | Write, Read |
---
## 使用範例
```
/pm 我想做一個幫助獨立接案者管理客戶與發票的 SaaS 工具,
目標用戶是台灣的設計師和工程師,
預計 3 個月內上線 MVP只有我一個工程師和一個設計師。
```
```
/pm 我們的電商平台需要新增一個 AI 推薦功能,
希望提升用戶的二次購買率,
參考競品Amazon、momo、蝦皮。
```
---
## 重要注意事項
- **不要自己做市場研究**:交給 `pm-market-researcher` sub-agent
- **不要跳過澄清**:需求不清楚是後續所有浪費的根源
- **輸出前做整合**:各 sub-agent 的輸出可能有矛盾,需要你統一
- **保持語言一致**:整份 PRD 使用繁體中文,技術術語可保留英文
- **PRD 必須可執行**:驗收標準應具體、可測試,不能是模糊描述

55
claude/CLAUDE.md Normal file
View File

@ -0,0 +1,55 @@
# 總開發規範
## 安全政策
- 禁止所有安全風險的套件
- 所有 API 呼叫必須使用 HTTPS
- 敏感資料必須加密存儲
- 絕不在原始碼中寫死 secretsAPI keys、密碼、token
- 所有使用者輸入必須驗證;使用參數化查詢防止 SQL injection
- 發現安全問題時:立即停止 → 使用 **security-reviewer** agent → 修復後繼續
## 程式開發標準
- 測試覆蓋率不得低於 80%
- 優先不可變資料immutability永遠回傳新物件不直接修改原物件
- 檔案大小:一般 200-400 行,最多 800 行;超過時拆分
- 錯誤處理:每一層都要明確處理,不可靜默吞掉錯誤
## 合規要求
- 遵循 GDPR 資料保護規範
- 記錄所有資料存取操作
## Agent 使用規範
- 複雜功能請求 → 先用 **planner** agent 規劃
- 寫完程式碼後 → 立即用 **code-reviewer** agent
- 新功能或 bug fix → 用 **tdd-guide** agent先寫測試
- 架構決策 → 用 **architect** agent
- 獨立任務盡量平行啟動多個 agent不要依序執行
## Git 規範
- Commit message 格式:`<type>: <description>`
- Types: feat, fix, refactor, docs, test, chore, perf, ci
- PR 時用 `git diff [base-branch]...HEAD` 分析完整變更
## 模型選擇
- **Haiku**:輕量 agent、頻繁呼叫的 worker
- **Sonnet**主要開發工作、orchestration
- **Opus**:複雜架構決策、深度研究分析
# 全域開發偏好
## 語言偏好
- 預設使用繁體中文回應自然語言內容
- 程式碼註解和文件使用繁體中文撰寫
- 不要有太多 emoji
- 思考過程也使用繁體中文
## 程式設計偏好
- 偏好函式程式設計風格
- 重視程式碼可讀性多過簡潔性
- 喜歡詳細的錯誤處理和日誌記錄
- 可以有時間複雜度小的方案絕不使用時間複雜度大方案解決,且要兼顧可讀性
## 解釋風格
- 先解釋概念,在給出程式碼
- 提出多種解決方案並說明優缺點
- 包含實際的使用範例

View File

@ -0,0 +1,82 @@
---
description: 讀取現有 PRD 文件,針對指定部分進行深化、修改或補充。支援局部改寫與全文增強。
---
# /pm-edit — PRD 編輯與深化
針對**已存在的 PRD** 進行修改、補充或深化,不需要重跑完整流程。
## 使用方式
```
# 深化功能規格
/pm-edit 目前 PRD 的功能規格太少,幫我把 Must Have 功能擴充到至少 10 個
# 補充競品體驗分析
/pm-edit 競品分析只有功能比較,幫我加入完整的 UX 體驗評估
# 加入 EARS 驗收標準
/pm-edit 把所有功能的驗收標準改為 EARS 格式
# 參考競品網站重寫定位
/pm-edit 參考https://notion.so 和 https://coda.io ,重新分析差異化定位
# 更新 Roadmap
/pm-edit 把 Phase 1 時程從 3 個月改成 6 個月
# 補充用戶洞察
/pm-edit 用戶 Persona 太薄弱,幫我深化痛點分析
```
## 工作流程
### Step 1讀取現有 PRD
使用 `Read` tool 讀取當前開啟的 PRD或使用者指定的路徑
若未指定路徑:
1. 檢查 `docs/prd/` 目錄下最新的 PRD
2. 若有多個,列出讓使用者選擇
### Step 2判斷需要哪個 Agent
| 編輯類型 | 需要的 Agent |
|---------|-------------|
| 深化功能規格 | PM Strategist + PM Writer |
| 補充競品分析 | PM Researcher |
| 深化用戶洞察 | PM User Analyst |
| 格式轉換(改 EARS | PM Writer |
| 參考 URL 更新 | PM Researcher + PM Writer |
| 風險評估更新 | 直接推理,不需呼叫 Agent |
| Roadmap 調整 | PM Strategist |
### Step 3若提供 URL
若指令中包含 `參考https://...`
- 先用 web-to-markdown skill 爬取 URL
- 將爬取內容傳給對應 Agent
### Step 4執行局部更新
**只更新受影響的章節**,不重寫整份 PRD。
更新原則:
- 保留原有好內容
- 在指定章節進行深化或修改
- 新增章節插入適當位置
- 確保整份文件風格格式一致
### Step 5儲存新版本
- 存為新版本:`[原檔名]-v2.md`v3、v4...
- 在「變更記錄」中加入修改說明
---
## 重要原則
- **局部更新優先**:不要因小改動重寫整份 PRD
- **版本保留**:每次存為新版本,不覆蓋原版
- **說明改了什麼**:在變更記錄中清楚記錄
- **保持一致性**:新增內容要與原文風格一致
- **URL 優先讀取**:有提供 URL 的話,先讀取再分析

111
claude/commands/pm.md Normal file
View File

@ -0,0 +1,111 @@
---
description: 呼叫完整 PM 流程,依序執行研究、用戶洞察、策略規劃,最終輸出結構完整的 PRD 文件。
---
# /pm — 完整產品規劃
啟動完整的產品規劃流程,依序呼叫 4 個專業 Agent最終產出結構化的 PRD。
## 使用方式
```
/pm 我想做一個幫助獨立接案者管理客戶與發票的 SaaS 工具,
目標用戶是台灣的設計師和工程師,
預計 3 個月內上線 MVP只有我一個工程師和一個設計師。
/pm 我們的電商平台需要新增一個 AI 推薦功能,
參考競品Amazon、momo、蝦皮。
```
## 工作流程
### Step 1需求澄清
接收使用者的產品描述後,快速確認以下資訊(**最多問 3 個問題**
- 這是 0→1 新產品,還是既有產品的新功能?
- 目標用戶是誰?
- 有無特定競品作為參考(名稱或 URL
- 預計時程與團隊規模?
**若資訊足夠,直接進入 Step 2。**
### Step 2決定執行範圍
根據需求複雜度選擇 Agent 組合:
| 情境 | Agent 組合 |
|------|-----------|
| 快速概念驗證(< 30 分鐘 | PM User Analyst + PM Writer |
| 新市場 / 新產品 | 全部 4 個 Agent |
| 功能迭代 | PM User Analyst + PM Strategist + PM Writer |
| 完整策略規劃 | 全部 4 個 Agent |
### Step 3建立草稿目錄
建立 `docs/prd/drafts/[產品名稱]-[YYYY-MM-DD]/` 目錄。
### Step 4依序呼叫 Agent
#### 可平行執行(無依賴):
1. **`pm-researcher`**`.claude/agents/pm-researcher.md`
- 市場規模 + 趨勢 + 競品功能盤點 + UX 體驗
- 輸出:`01-market-research.md` + `02-competitor-analysis.md`
2. **`pm-user-analyst`**`.claude/agents/pm-user-analyst.md`
- 真實用戶痛點挖掘
- 輸出:`03-user-insights.md`
#### 依序執行(需前面產出):
3. **`pm-strategist`**`.claude/agents/pm-strategist.md`
- 讀取 User Analyst 和 Researcher 的報告 → 旅程設計 + 功能排序 + Roadmap
- 輸出:`04-journey-strategy.md` + `05-prioritization.md`
4. **`pm-writer`**`.claude/agents/pm-writer.md`
- 讀取所有草稿 → 一致性檢查 → 整合為完整 PRD
- 輸出:`docs/prd/[產品名]-prd-[YYYY-MM-DD].md`
### Step 5品質把關
在呼叫 PM Writer 前確認:
| 項目 | 最低標準 |
|------|---------|
| 功能數量Must Have | ≥ 8 個 |
| 用戶痛點 | ≥ 8 個具體痛點 |
| 競品數量 | ≥ 3 個完整分析 |
| 旅程流程 | ≥ 1 Macro + 2 Micro Journey |
| 風險清單 | ≥ 5 個 |
未達標則要求對應 Agent 補充,**不要自行湊數**。
### Step 6輸出 PRD
最終 PRD 存至 `docs/prd/[產品名]-prd-[YYYY-MM-DD].md`,同時顯示給使用者。
---
## Agent 一覽
| Agent | 主要職責 | 使用的 Skills |
|-------|---------|-------------|
| `pm-researcher` | 市場研究 + 競品分析 | web-research, web-to-markdown, competitor-profiling |
| `pm-user-analyst` | 用戶痛點挖掘 | web-research, user-voice-mining |
| `pm-strategist` | 旅程設計 + 功能排序 + Roadmap | prioritization-framework |
| `pm-writer` | PRD 整合撰寫 | report-writer |
---
## 重要注意事項
- **不要自己做市場研究**:交給 `pm-researcher`
- **不要跳過澄清**:需求不清楚是後續所有浪費的根源
- **輸出前做整合**:各 Agent 產出可能有矛盾,需統一
- **語言一致**:繁體中文,技術術語保留英文
- **PRD 必須可執行**:驗收標準應具體、可測試
---
## 若已有部分研究
如果之前已經執行過 `/pm-research``/pm-user``/pm` 會自動讀取草稿資料夾中已有的報告,**跳過已完成的步驟**,從缺少的部分繼續。

View File

@ -1,6 +1,6 @@
# Development Workflow
> This file extends [common/git-workflow.md](./git-workflow.md) with the full feature development process that happens before git operations.
> This file extends [common/git-workflow.md](git-workflow.md) with the full feature development process that happens before git operations.
The Feature Implementation Workflow describes the development pipeline: planning, TDD, code review, and then committing to git.
@ -26,4 +26,4 @@ The Feature Implementation Workflow describes the development pipeline: planning
4. **Commit & Push**
- Detailed commit messages
- Follow conventional commits format
- See [git-workflow.md](./git-workflow.md) for commit message format and PR process
- See [git-workflow.md](git-workflow.md) for commit message format and PR process

View File

@ -21,4 +21,4 @@ When creating PRs:
5. Push with `-u` flag if new branch
> For the full development process (planning, TDD, code review) before git operations,
> see [development-workflow.md](./development-workflow.md).
> see [development-workflow.md](development-workflow.md).

View File

@ -135,14 +135,14 @@ Add to your `~/.claude/settings.json`.
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh pre"
"command": "~/claude/skills/continuous-learning-v2/hooks/observe.sh pre"
}]
}],
"PostToolUse": [{
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh post"
"command": "~/claude/skills/continuous-learning-v2/hooks/observe.sh post"
}]
}]
}
@ -154,8 +154,8 @@ Add to your `~/.claude/settings.json`.
The Python CLI will create these automatically, but you can also create them manually:
```bash
mkdir -p ~/.claude/homunculus/{instincts/{personal,inherited},evolved/{agents,skills,commands}}
touch ~/.claude/homunculus/observations.jsonl
mkdir -p ~/claude/homunculus/{instincts/{personal,inherited},evolved/{agents,skills,commands}}
touch ~/claude/homunculus/observations.jsonl
```
### 3. Use the Instinct Commands
@ -185,13 +185,13 @@ Edit `config.json`:
"version": "2.0",
"observation": {
"enabled": true,
"store_path": "~/.claude/homunculus/observations.jsonl",
"store_path": "~/claude/homunculus/observations.jsonl",
"max_file_size_mb": 10,
"archive_after_days": 7
},
"instincts": {
"personal_path": "~/.claude/homunculus/instincts/personal/",
"inherited_path": "~/.claude/homunculus/instincts/inherited/",
"personal_path": "~/claude/homunculus/instincts/personal/",
"inherited_path": "~/claude/homunculus/instincts/inherited/",
"min_confidence": 0.3,
"auto_approve_threshold": 0.7,
"confidence_decay_rate": 0.05
@ -209,7 +209,7 @@ Edit `config.json`:
},
"evolution": {
"cluster_threshold": 3,
"evolved_path": "~/.claude/homunculus/evolved/"
"evolved_path": "~/claude/homunculus/evolved/"
}
}
```

View File

@ -4,7 +4,7 @@
# Captures tool use events for pattern analysis.
# Claude Code passes hook data via stdin as JSON.
#
# Hook config (in ~/.claude/settings.json):
# Hook config (in ~/claude/settings.json):
#
# If installed as a plugin, use ${CLAUDE_PLUGIN_ROOT}:
# {
@ -20,16 +20,16 @@
# }
# }
#
# If installed manually to ~/.claude/skills:
# If installed manually to ~/claude/skills:
# {
# "hooks": {
# "PreToolUse": [{
# "matcher": "*",
# "hooks": [{ "type": "command", "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh pre" }]
# "hooks": [{ "type": "command", "command": "~/claude/skills/continuous-learning-v2/hooks/observe.sh pre" }]
# }],
# "PostToolUse": [{
# "matcher": "*",
# "hooks": [{ "type": "command", "command": "~/.claude/skills/continuous-learning-v2/hooks/observe.sh post" }]
# "hooks": [{ "type": "command", "command": "~/claude/skills/continuous-learning-v2/hooks/observe.sh post" }]
# }]
# }
# }

View File

@ -33,7 +33,7 @@ Edit `config.json` to customize:
"min_session_length": 10,
"extraction_threshold": "medium",
"auto_approve": false,
"learned_skills_path": "~/.claude/skills/learned/",
"learned_skills_path": "~/claude/skills/learned/",
"patterns_to_detect": [
"error_resolution",
"user_corrections",
@ -70,7 +70,7 @@ Add to your `~/.claude/settings.json`:
"matcher": "*",
"hooks": [{
"type": "command",
"command": "~/.claude/skills/continuous-learning/evaluate-session.sh"
"command": "~/claude/skills/continuous-learning/evaluate-session.sh"
}]
}]
}

View File

@ -6,14 +6,14 @@
# - Stop runs once at session end (lightweight)
# - UserPromptSubmit runs every message (heavy, adds latency)
#
# Hook config (in ~/.claude/settings.json):
# Hook config (in ~/claude/settings.json):
# {
# "hooks": {
# "Stop": [{
# "matcher": "*",
# "hooks": [{
# "type": "command",
# "command": "~/.claude/skills/continuous-learning/evaluate-session.sh"
# "command": "~/claude/skills/continuous-learning/evaluate-session.sh"
# }]
# }]
# }
@ -21,7 +21,7 @@
#
# Patterns to detect: error_resolution, debugging_techniques, workarounds, project_specific
# Patterns to ignore: simple_typos, one_time_fixes, external_api_issues
# Extracted skills saved to: ~/.claude/skills/learned/
# Extracted skills saved to: ~/claude/skills/learned/
set -e
@ -36,7 +36,7 @@ if [ -f "$CONFIG_FILE" ]; then
echo "[ContinuousLearning] jq is required to parse config.json but not installed, using defaults" >&2
else
MIN_SESSION_LENGTH=$(jq -r '.min_session_length // 10' "$CONFIG_FILE")
LEARNED_SKILLS_PATH=$(jq -r '.learned_skills_path // "~/.claude/skills/learned/"' "$CONFIG_FILE" | sed "s|~|$HOME|")
LEARNED_SKILLS_PATH=$(jq -r '.learned_skills_path // "~/claude/skills/learned/"' "$CONFIG_FILE" | sed "s|~|$HOME|")
fi
fi

View File

@ -1,6 +1,6 @@
---
name: security-scan
description: Scan your Claude Code configuration (.claude/ directory) for security vulnerabilities, misconfigurations, and injection risks using AgentShield. Checks CLAUDE.md, settings.json, MCP servers, hooks, and agent definitions.
description: Scan your Claude Code configuration (claude/ directory) for security vulnerabilities, misconfigurations, and injection risks using AgentShield. Checks CLAUDE.md, settings.json, MCP servers, hooks, and agent definitions.
origin: ECC
---
@ -52,7 +52,7 @@ Run against the current project's `.claude/` directory:
npx ecc-agentshield scan
# Scan a specific path
npx ecc-agentshield scan --path /path/to/.claude
npx ecc-agentshield scan --path /path/to/claude
# Scan with minimum severity filter
npx ecc-agentshield scan --min-severity medium

View File

@ -160,7 +160,7 @@ Obtain via Bash: `date -u +%Y-%m-%dT%H:%M:%SZ`. Never use a date-only approximat
},
"skills": {
"skill-name": {
"path": "~/.claude/skills/skill-name/SKILL.md",
"path": "~/claude/skills/skill-name/SKILL.md",
"verdict": "Keep",
"reason": "Concrete, actionable, unique value for X workflow",
"mtime": "2026-01-15T08:30:00Z"

View File

@ -3,28 +3,28 @@
# Usage: quick-diff.sh RESULTS_JSON [CWD_SKILLS_DIR]
# Output: JSON array of changed/new files to stdout (empty [] if no changes)
#
# When CWD_SKILLS_DIR is omitted, defaults to $PWD/.claude/skills so the
# When CWD_SKILLS_DIR is omitted, defaults to $PWD/claude/skills so the
# script always picks up project-level skills without relying on the caller.
#
# Environment:
# SKILL_STOCKTAKE_GLOBAL_DIR Override ~/.claude/skills (for testing only;
# SKILL_STOCKTAKE_GLOBAL_DIR Override ~/claude/skills (for testing only;
# do not set in production — intended for bats tests)
# SKILL_STOCKTAKE_PROJECT_DIR Override project dir detection (for testing only)
set -euo pipefail
RESULTS_JSON="${1:-}"
CWD_SKILLS_DIR="${SKILL_STOCKTAKE_PROJECT_DIR:-${2:-$PWD/.claude/skills}}"
GLOBAL_DIR="${SKILL_STOCKTAKE_GLOBAL_DIR:-$HOME/.claude/skills}"
CWD_SKILLS_DIR="${SKILL_STOCKTAKE_PROJECT_DIR:-${2:-$PWD/claude/skills}}"
GLOBAL_DIR="${SKILL_STOCKTAKE_GLOBAL_DIR:-$HOME/claude/skills}"
if [[ -z "$RESULTS_JSON" || ! -f "$RESULTS_JSON" ]]; then
echo "Error: RESULTS_JSON not found: ${RESULTS_JSON:-<empty>}" >&2
exit 1
fi
# Validate CWD_SKILLS_DIR looks like a .claude/skills path (defense-in-depth).
# Validate CWD_SKILLS_DIR looks like a claude/skills path (defense-in-depth).
# Only warn when the path exists — a nonexistent path poses no traversal risk.
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" && "$CWD_SKILLS_DIR" != */.claude/skills* ]]; then
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" && "$CWD_SKILLS_DIR" != */claude/skills* ]]; then
echo "Warning: CWD_SKILLS_DIR does not look like a .claude/skills path: $CWD_SKILLS_DIR" >&2
fi

View File

@ -3,25 +3,25 @@
# Usage: scan.sh [CWD_SKILLS_DIR]
# Output: JSON to stdout
#
# When CWD_SKILLS_DIR is omitted, defaults to $PWD/.claude/skills so the
# When CWD_SKILLS_DIR is omitted, defaults to $PWD/claude/skills so the
# script always picks up project-level skills without relying on the caller.
#
# Environment:
# SKILL_STOCKTAKE_GLOBAL_DIR Override ~/.claude/skills (for testing only;
# SKILL_STOCKTAKE_GLOBAL_DIR Override ~/claude/skills (for testing only;
# do not set in production — intended for bats tests)
# SKILL_STOCKTAKE_PROJECT_DIR Override project dir detection (for testing only)
set -euo pipefail
GLOBAL_DIR="${SKILL_STOCKTAKE_GLOBAL_DIR:-$HOME/.claude/skills}"
CWD_SKILLS_DIR="${SKILL_STOCKTAKE_PROJECT_DIR:-${1:-$PWD/.claude/skills}}"
GLOBAL_DIR="${SKILL_STOCKTAKE_GLOBAL_DIR:-$HOME/claude/skills}"
CWD_SKILLS_DIR="${SKILL_STOCKTAKE_PROJECT_DIR:-${1:-$PWD/claude/skills}}"
# Path to JSONL file containing tool-use observations (optional; used for usage frequency counts).
# Override via SKILL_STOCKTAKE_OBSERVATIONS env var if your setup uses a different path.
OBSERVATIONS="${SKILL_STOCKTAKE_OBSERVATIONS:-$HOME/.claude/observations.jsonl}"
OBSERVATIONS="${SKILL_STOCKTAKE_OBSERVATIONS:-$HOME/claude/observations.jsonl}"
# Validate CWD_SKILLS_DIR looks like a .claude/skills path (defense-in-depth).
# Validate CWD_SKILLS_DIR looks like a claude/skills path (defense-in-depth).
# Only warn when the path exists — a nonexistent path poses no traversal risk.
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" && "$CWD_SKILLS_DIR" != */.claude/skills* ]]; then
if [[ -n "$CWD_SKILLS_DIR" && -d "$CWD_SKILLS_DIR" && "$CWD_SKILLS_DIR" != */claude/skills* ]]; then
echo "Warning: CWD_SKILLS_DIR does not look like a .claude/skills path: $CWD_SKILLS_DIR" >&2
fi

Some files were not shown because too many files have changed in this diff Show More