Files
ewoooc/docs/guides/ty-ai-standards-onboarding.md

309 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ty-ai-standards 新專案接入指令書
> Legacy notice: 本文件屬於 Claude 時代的 onboarding 指南,保留供歷史查閱,不再是本專案正式規範。
> 目前請以根目錄 `AGENTS.md`、`CONSTITUTION.md`、`docs/adr/README.md`、`docs/memory/README.md` 為準。
> 本文件由統帥產生,可直接轉發給負責新專案的 Claude Code session。
> 執行前無需額外背景知識,照順序執行即可。
---
## 一、你的任務
將本機已建立的「ty-ai-standards 全域架構」套用到 **這個專案**
全域架構已就緒於 `~/.claude/`,你的工作是為本專案建立 **Local 層**
---
## 二、全域架構現況(已完成,勿修改)
`~/.claude/` 已包含:
| 路徑 | 內容 |
|------|------|
| `~/.claude/CLAUDE.md` | 全域憲法P7/P9/P10、三紅線、12-agent 委派表 |
| `~/.claude/settings.json` | 全域設定claude-sonnet-4-6 + 10 個 hooks |
| `~/.claude/hooks/` | 10 個 hookbranch-protection / commit-quality / python-quality / yaml-validator / large-file-warner / mcp-health / audit-log / suggest-compact / cost-tracker / session-summary |
| `~/.claude/agents/` | 10 個 agentcritic / debugger / planner / fullstack-engineer / refactor-specialist / migration-engineer / onboarder / tool-expert / vuln-verifier / web-researcher |
**全域 hooks 在本 session 已自動生效,無需重複安裝。**
---
## 三、hooks 合併規則(必讀)
Claude Code 的 hooks 採 **全域 + 專案 同時執行**(不覆蓋,疊加)。
因此:
- 全域 `commit-quality.js` 已掃描通用 secretOpenAI / GitHub / AWS / Anthropic
+ 讀取本專案的 `.claude/hooks/secrets.local.json` 補充專案專屬 pattern
- **本專案 settings.json 不需要再呼叫 commit-quality.js**(避免重複執行)
---
## 四、P7 執行計畫(六步,逐步完成)
### Step 1 — 讀取現況(禁止跳過)
執行以下指令,**全部讀完再開始動手**
```bash
# 1a. 確認全域架構
ls ~/.claude/hooks/
ls ~/.claude/agents/
# 1b. 讀取本專案現有 .claude/ 狀態
ls .claude/ 2>/dev/null || echo "無 .claude/ 目錄"
ls .claude/hooks/ 2>/dev/null
cat .claude/settings.json 2>/dev/null
# 1c. 讀取現有 CLAUDE.md
cat CLAUDE.md 2>/dev/null
# 1d. 確認分支策略
git log --oneline -5
git remote -v
```
---
### Step 2 — 建立 .claude/ 結構
```bash
mkdir -p .claude/hooks
mkdir -p .claude/agents
```
---
### Step 3 — 複製全域 agents
```bash
for f in ~/.claude/agents/*.md; do
name=$(basename "$f")
if [[ ! -f ".claude/agents/$name" ]]; then
cp "$f" ".claude/agents/$name"
echo "✅ agents/$name"
else
echo "⏭️ agents/$name 已存在,跳過"
fi
done
```
若本專案有**專案專屬 agent**(如 db-expert.md在此步驟後加入 `.claude/agents/`
---
### Step 4 — 建立三個設定檔
#### 4a. `.claude/hooks/branch-protection.local.json`
根據本專案分支策略選擇:
```bash
# 選項 Amain 可直接 commitpush-to-deploy 模式,如 momo
echo '{"protectedBranches": ["production"]}' > .claude/hooks/branch-protection.local.json
# 選項 Bmain 受保護,必須開 feature branch
echo '{"protectedBranches": ["main", "production"]}' > .claude/hooks/branch-protection.local.json
```
#### 4b. `.claude/hooks/secrets.local.json`
填入**本專案使用的 Token/Key 格式**,讓全域 commit-quality.js 自動載入:
```json
[
{"pattern": "PATTERN_REGEX", "label": "Token 名稱"},
{"pattern": "ANOTHER_PATTERN", "label": "另一個 Token"}
]
```
常見範例(按需選用):
```json
[
{"pattern": "\\d{8,12}:[A-Za-z0-9_-]{35}", "label": "Telegram Bot Token"},
{"pattern": "TELEGRAM[_\\s]*TOKEN\\s*=\\s*[\"']?[^\\s\"']{20,}", "label": "Telegram Token 環境變數"},
{"pattern": "glpat-[a-zA-Z0-9_-]{20}", "label": "Gitea/GitLab PAT"},
{"pattern": "GITEA[_\\s]*TOKEN\\s*=\\s*[\"']?[^\\s\"']{20,}", "label": "Gitea Token 環境變數"}
]
```
#### 4c. `.claude/settings.json`
**如果本專案已有 settings.json**:讀完後手動合併,保留現有欄位,只更新 hooks 格式。
**如果本專案沒有 settings.json**:直接建立:
```json
{
"permissions": {
"defaultMode": "bypassPermissions",
"additionalDirectories": ["/tmp"]
},
"hooks": {
"PreToolUse": [
{
"matcher": "",
"hooks": [
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/<project>-guard.js"},
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/large-file-warner.js"},
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/mcp-health.js"}
]
}
],
"PostToolUse": [
{
"matcher": "",
"hooks": [
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/audit-log.js"},
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/suggest-compact.js"}
]
}
],
"Stop": [
{
"matcher": "",
"hooks": [
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/cost-tracker.js"},
{"type": "command", "command": "node $CLAUDE_PROJECT_DIR/.claude/hooks/session-summary.js"}
]
}
]
}
}
```
注意:
- `commit-quality.js` 不需列入(全域已跑)
- `<project>-guard.js` 是**本專案專屬的生產環境保護 hook**(見 Step 5
- `$CLAUDE_PROJECT_DIR` 是 Claude Code 自動注入的環境變數,指向專案根目錄
---
### Step 5 — 建立專案 guard hook
參考 momo-prod-guard.js為本專案寫一個 `<project>-guard.js`
**最小可用版本**(無任何阻擋,只稽核):
```javascript
// .claude/hooks/<project>-guard.js
const { spawnSync } = require('child_process');
let d = '';
process.stdin.on('data', c => d += c);
process.stdin.on('end', () => {
try {
const i = JSON.parse(d);
const cmd = String(i.tool_input?.command || '');
// 在此加入本專案需要阻擋的危險操作
// 參考: momo-prod-guard.js 的寫法
} catch (e) {}
process.stdout.write(d);
});
```
**需要阻擋的常見危險操作**(按本專案需求選用):
- `docker compose down -v`(刪 volume
- `kubectl delete namespace`
- `--remove-orphans`(如有多專案共存 Docker
- 直接操作 production DB
---
### Step 6 — 更新 CLAUDE.md
**保留**本專案現有的所有專案索引(環境、服務、指令等)。
**移除**與全域重複的通用規則P7/P9/P10、三紅線、委派表——這些由 `~/.claude/CLAUDE.md` 自動 concatenate 補全。
**在檔案頂部加入一行**
```markdown
> 全域工作流程P7/P9/P10、三紅線、委派表見 `~/.claude/CLAUDE.md`
```
**在檔案底部加入安全架構說明**
```markdown
## 安全架構bypassPermissions
本專案採用 `permissions.defaultMode: "bypassPermissions"` + Hook 自動政策。
| Hook | 觸發點 | 防護內容 |
|------|--------|---------|
| `<project>-guard.js` | PreToolUse | 專案危險操作阻擋 |
| `large-file-warner.js` | PreToolUse | >2MB 阻擋,>500KB 警告 |
| `mcp-health.js` | PreToolUse | MCP 冷卻保護 |
| `audit-log.js` | PostToolUse | Bash 指令稽核 |
| `suggest-compact.js` | PostToolUse | 50 次工具呼叫後建議 /compact |
| `cost-tracker.js` | Stop | Token 用量追蹤 |
| `session-summary.js` | Stop | 對話快照存檔 |
全域 Hook`~/.claude/hooks/`同時生效branch-protection / commit-quality / python-quality / yaml-validator
```
---
### Step 7 — 驗證 & commit
```bash
# 確認所有檔案就位
ls .claude/
ls .claude/hooks/
ls .claude/agents/
cat .claude/settings.json
# 確認 .gitignore 有排除 settings.local.json
grep "settings.local.json" .gitignore || echo ".claude/settings.local.json" >> .gitignore
# Commit
git add CLAUDE.md .claude/ .gitignore
git status # 最後確認一次
git commit -m "feat(claude): 套用 ty-ai-standards Global-Local 架構"
git push
```
---
## 五、完成後的架構圖
```
~/.claude/ ← 全域層(所有專案共用)
├── CLAUDE.md ← P7/P9/P10 + 三紅線 + 委派表
├── settings.json ← 全域 hooks 清單
├── hooks/ ← 10 個通用 hooks自動生效
└── agents/ ← 10 個通用 agents
<project>/.claude/ ← 本地層(本專案專屬)
├── settings.json ← bypassPermissions + 專案 hooks
├── agents/ ← 全域 agents 副本 + 專案特規 agent
└── hooks/
├── <project>-guard.js ← 專案危險操作保護
├── secrets.local.json ← 專案 Token pattern全域 commit-quality 自動載入)
└── branch-protection.local.json ← 分支保護覆蓋設定
```
---
## 六、判斷表:遇到衝突時
| 情況 | 做法 |
|------|------|
| 現有 settings.json 超大 | 讀清楚再合併,**不整個覆蓋** |
| 現有 hooks 已有 shell 版本 | 保留,並列執行;或改寫成 `.js` 統一管理 |
| CLAUDE.md 有大量專案規則 | **全部保留**,只加全域參照那一行,去掉通用重複段落 |
| 專案用 main 直接 push | `branch-protection.local.json``{"protectedBranches": ["production"]}` |
| 專案有 PR 審查流程 | `branch-protection.local.json``{"protectedBranches": ["main", "production"]}` |
| 現有 secret hook 已掃某 pattern | 不需加入 secrets.local.json避免雙重告警 |
---
## 七、完成判斷DoD
- [ ] `~/.claude/` 全域架構確認存在10 hooks + 10 agents
- [ ] `.claude/settings.json` 格式正確(`defaultMode: "bypassPermissions"` + 物件格式 hooks
- [ ] `.claude/hooks/secrets.local.json` 填入專案 Token pattern
- [ ] `.claude/hooks/branch-protection.local.json` 設定符合分支策略
- [ ] `.claude/agents/` 有 10 個通用 agents含專案特規 agent
- [ ] `CLAUDE.md` 加入全域參照、移除重複通用規則、加入安全架構說明
- [ ] `.gitignore``.claude/settings.local.json`
- [ ] Commit 成功push 成功