Slash Command47 repo starsupdated 1mo ago
setup
项目初始化,配置 Claude Code 项目和 Hooks
Install in Claude Code
Copymkdir -p ~/.claude/commands && curl -fsSL https://raw.githubusercontent.com/xiaobei930/cc-best/HEAD/commands/setup.md -o ~/.claude/commands/setup.mdThen start a new Claude Code session; the slash command loads automatically.
Definition
setup.md
# /setup - 项目初始化
初始化 Claude Code 项目配置。支持 **Plugin 模式** 和 **Clone 模式**。
## 使用方式
```bash
# 完整初始化(默认)
/cc-best:setup
# 仅配置 hooks(修复插件 hooks 问题)
/cc-best:setup --hooks
# 配置 hooks 到全局
/cc-best:setup --hooks --global
# 配置 hooks 到项目
/cc-best:setup --hooks --project
# 验证 hooks 配置是否正确
/cc-best:setup --verify
# 交互式配置向导
/cc-best:setup --interactive
```
---
## 参数说明
| 参数 | 说明 |
| --------------- | ---------------------------------------- |
| `--hooks` | 仅配置 hooks,跳过其他初始化步骤 |
| `--global` | 配置到全局 `~/.claude/settings.json` |
| `--project` | 配置到项目 `.claude/settings.local.json` |
| `--verify` | 验证 hooks 配置是否正确(诊断模式) |
| `--interactive` | 交互式配置向导,按需选择安装组件 |
---
## 执行步骤
### 0. 检查 --verify 参数
如果使用 `--verify` 参数,执行验证模式:
```bash
# 运行 hooks 验证脚本
node <SCRIPT_PATH>/verify-hooks.js
```
验证脚本会检查:
- ✅ 脚本路径是否存在
- ✅ timeout 是否在合理范围 (1ms - 10min)
- ✅ matcher 语法是否正确
- ✅ 生命周期事件是否有效
验证完成后输出诊断报告和修复建议,然后退出。
### 1. 检测运行模式
```
如果存在 scripts/node/hooks/ 目录:
→ Clone 模式
否则:
→ Plugin 模式,定位插件缓存目录
```
### 2. 运行初始化脚本
使用 Node.js 脚本(跨平台兼容)执行初始化:
```bash
# 检测并运行初始化脚本
# Plugin 模式:脚本位于插件目录
# Clone 模式:脚本位于项目目录
# 优先使用 Node.js(跨平台)
if command -v node &> /dev/null; then
# 查找脚本位置(Plugin 或 Clone 模式)
if [ -f "scripts/node/init.js" ]; then
node scripts/node/init.js
fi
else
# 回退到 Bash(仅 Unix)
if [ -f "scripts/shell/init.sh" ]; then
bash scripts/shell/init.sh
fi
fi
```
初始化脚本会自动:
- 检测运行模式(Plugin/Clone)
- 创建 `.claude/settings.local.json`
- 创建必要目录结构
- 初始化 Memory Bank 文件
- Plugin 模式下从插件目录复制模板
- Clone 模式下创建 Hookify 规则文件
### 3. 清理旧版本 Hooks 配置
> ⚠️ **v0.6.3 升级**: 如果从旧版本升级,全局 settings.json 可能有冗余的 hooks 配置需要清理。
**检查并清理**:
1. 读取全局配置 `~/.claude/settings.json`
2. 检查是否存在 `hooks` 字段,且包含 `${CLAUDE_PLUGIN_ROOT}/scripts/node/hooks/` 路径
3. 如果存在,这是旧版本遗留配置,应该删除 `hooks` 字段
4. 告知用户:「已清理旧版本 hooks 配置,现在通过插件内置 hooks/hooks.json 自动生效」
```javascript
// 清理逻辑示例
const settingsPath = path.join(os.homedir(), ".claude/settings.json");
const settings = JSON.parse(fs.readFileSync(settingsPath, "utf8"));
if (settings.hooks) {
const hasOldHooks = JSON.stringify(settings.hooks).includes(
"scripts/node/hooks/",
);
if (hasOldHooks) {
delete settings.hooks;
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
console.log("✅ 已清理旧版本 hooks 配置");
}
}
```
### 4. 配置 Hooks(Plugin 模式)
> ℹ️ **v0.6.3+**: Hooks 现在通过插件内置 `hooks/hooks.json` 自动生效,无需手动配置。
> 如果需要自定义或覆盖,可以使用 `/cc-best:setup --hooks` 手动配置。
**自动生效的 Hooks**:
插件安装后,以下 hooks 自动启用:
| Hook | 触发条件 | 功能 |
| ---------------------- | --------------- | ------------ |
| `validate-command.js` | Bash 命令执行前 | 阻止危险命令 |
| `pause-before-push.js` | git push 前 | 推送确认 |
| `protect-files.js` | 文件写入前 | 保护敏感文件 |
| `format-file.js` | 文件写入后 | 自动格式化 |
| `session-check.js` | 会话启动时 | 项目健康检查 |
**手动配置(可选)**:
如果插件内置 hooks 不生效,可以运行 `/cc-best:setup --hooks` 手动配置。
配置位置选择:
1. 全局配置 (`~/.claude/settings.json`) - 所有项目生效(推荐)
2. 项目配置 (`.claude/settings.local.json`) - 仅当前项目生效
**路径获取方式**(跨平台):
```javascript
const os = require("os");
const path = require("path");
// 获取插件绝对路径(推荐使用 CLAUDE_PLUGIN_ROOT 环境变量)
const pluginPath = process.env.CLAUDE_PLUGIN_ROOT;
// 如果不在 hook 上下文中,可手动查找:
const homeDir = os.homedir();
const cacheDir = path.join(homeDir, ".claude/plugins/cache/cc-best/cc-best");
// 缓存目录下按版本号存放,如 0.8.2/、0.9.0/ 等
```
**Hooks 配置模板**:
```json
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node <PLUGIN_PATH>/scripts/node/hooks/validate-command.js",
"timeout": 5
}
]
}
]
}
}
```
⚠️ **注意**: 路径**不要用引号包裹**(如 `\"...\"`),否则 Windows 下会失败
### 5. 更新 CLAUDE.md
将模板占位符替换为实际项目信息:
- `{{PROJECT_NAME}}` → 项目名称
- `{{PROJECT_DESCRIPTION}}` → 项目描述
- `{{DATE}}` → 当前日期 (YYYY-MM-DD)
- `{{CURRENT_PHASE}}` → 当前阶段(如"开发中"、"MVP")
**询问用户**获取这些信息,然后使用 Edit 工具更新 CLAUDE.md。
### 6. 选择运行模式
**询问用户**选择 iterate 运行模式:
| 模式 | 管线 | 适用场景 |
| ------ | ------------------------------- | ---------------- |
| `full` | PM → Lead → Designer → Dev → QA | 完整项目开发 |
| `lite` | Dev → Verify → Commit | 快速编码、小改动 |
根据选择写入 `memory-bank/config.json`:
```json
{
"mode": "full"
}
```
> **默认**: 如果用户跳过选择,使用 `full` 模式。
---
## 输出
初始化完成后输出:
```
✅ 项目初始化完成
已创建/检查:
- [x] .claude/settings.local.json
- [x] .claude/screenshots/
- [x] .claude/logs/
- [x] memory-bank/
- [x] docs/
Hooks 配置:
- [x] 已写入 ~/.claude/settings.json(全局)
- 包含:validate-command, pause-before-push, protect-files, format-file, session-check
下一步:
1. 确认 CLAUDE.md 中的项目信息
2. 编辑 memory-bank/tech-stack.md 定义技术栈
3. 运行 /cc-best:pm 开始第一个需求
```
---
## 模式差异
| 模式 | settings.local.json 来源 | Hooks 配置 | Hookify 规则 |
| ------ | ------------------------ | ------------------------------ | ------------------ |
| Plugin | 插件目录模板 | 需要手动配置(此命令自动处理) | 由 hooks.json 提供 |
| Clone | 项目目录模板 | 使用相对路径 | 复制 .example 文件 |
---
## 配置层次
```
优先级(高 → 低):
1. .claude/settings.local.json(项目本地,不提交)
2. .claude/settings.json(项目级,可提交)
3. ~/.claude/settings.json(全局用户配置)
```
**推荐策略**:
- **安全类 hooks**(validate-command, protect-files)→ 全局配置
- **格式化 hooks**(format-file)→ 项目配置(不同项目可能有不同格式化规则)
---
## --interactive 交互式配置向导
交互模式提供分步引导,按需选择安装组件。
### 第 1 步:选择安装级别
```
请选择安装级别:
[1] 全局安装 (~/.claude/settings.json) - 所有项目生效
[2] 项目安装 (.claude/settings.local.json) - 仅当前项目
[3] 两者都安装 - 安全 hooks 全局 + 格式化 hooks 项目
```
### 第 2 步:选择 Rules 集
根据项目技术栈选择要启用的规则集(多选):
```
通用规范(默认启用):
[✓] common/ - 方法论、编码标准、代码风格、安全、测试、性能
语言专属规范(根据项目选择):
[ ] frontend/ - 前端: 样式、测试、安全、性能
[ ] java/ - Java: 样式、测试、安全、性能
[ ] csharp/ - C#: 样式、测试、安全、性能
[ ] cpp/ - C++: 样式、测试、安全、性能
[ ] embedded/ - 嵌入式: ESP32 样式、测试、安全、性能
[ ] ui/ - UI 设计: 设计规范、无障碍
```