From e1f56ae79380d2286c7570eea689342fb7958ea5 Mon Sep 17 00:00:00 2001 From: empty Date: Sun, 11 Jan 2026 18:10:08 +0800 Subject: [PATCH] Add interactive configuration to installation scripts Features: - Ask user whether to configure CLAUDE.md - Support both user-level and project-level configuration - For project-level: prompt for target directory - Append content (never overwrite existing files) - Detect existing configuration to avoid duplicates - Auto-create project constitution section for new files Scripts updated: - install.sh (macOS/Linux) - install.ps1 (Windows PowerShell) Co-Authored-By: Claude --- install.ps1 | 168 +++++++++++++++++++++++++++++++++++++++++++++++++++- install.sh | 167 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 332 insertions(+), 3 deletions(-) diff --git a/install.ps1 b/install.ps1 index 490e92d..760d7a6 100644 --- a/install.ps1 +++ b/install.ps1 @@ -7,6 +7,42 @@ $RepoUrl = "https://git.let5see.xyz/let5see/skills.git" $TempDir = Join-Path $env:TEMP "skills-install-$(Get-Random)" $SkillsDir = Join-Path $env:USERPROFILE ".claude\skills" +$ClaudeMdContent = @" +## Codex 协作配置 + +本项目使用 `codex-collab` skill 进行 Codex CLI 协作。 + +### 快速安装 + +```powershell +irm https://git.let5see.xyz/let5see/skills/raw/main/install.ps1 | iex +``` + +### 核心原则 + +**指导原则**: +- Codex 是协作伙伴,而非唯一真理来源 +- 必须有独立思考,对 Codex 的建议保持批判性审视 +- 通过辩论和讨论达成最优方案 + +**职责分工**: +- **Claude Code**:代码编写、文档编写、简单任务直接执行 +- **Codex**:代码查找定位、逻辑梳理、代码审查、方案设计、问题诊断 + +**关键规范**: +- 查找/搜索任务 → 必须调用 Codex +- 方案设计阶段 → 使用 `sandbox="read-only"` +- 代码实现 → Claude Code 基于方案重写生产级代码 +- 完成编码后 → 立即让 Codex 审查 + +### 详细文档 + +参考:`$env:USERPROFILE\.claude\skills\codex-collab\SKILL.md` +或在线查看:https://git.let5see.xyz/let5see/skills + +--- +"@ + Write-Host "🚀 正在安装 Claude Code Skills..." -ForegroundColor Green Write-Host "" @@ -66,7 +102,7 @@ foreach ($skillDir in $skillDirs) { Remove-Item -Recurse -Force $TempDir Write-Host "" -Write-Host "✅ 安装完成!" -ForegroundColor Green +Write-Host "✅ Skills 安装完成!" -ForegroundColor Green Write-Host "" Write-Host "已安装 $installedCount 个 skills:" -ForegroundColor Cyan @@ -74,5 +110,135 @@ Get-ChildItem -Path $SkillsDir -Directory | ForEach-Object { Write-Host " - $($_.Name)" -ForegroundColor White } +Write-Host "" +Write-Host "────────────────────────────────────────" -ForegroundColor Cyan +Write-Host "📝 是否要配置 Codex 协作规则到 CLAUDE.md?" -ForegroundColor Yellow +Write-Host "" +Write-Host "这将帮助 Claude Code 更好地与 Codex 协作。" -ForegroundColor Gray +Write-Host "不会被覆盖现有内容,只会追加配置。" -ForegroundColor Gray +Write-Host "" +Write-Host " [1] 用户级配置 (~/.claude/CLAUDE.md) - 所有项目生效" -ForegroundColor White +Write-Host " [2] 项目级配置 (./CLAUDE.md) - 仅当前项目生效" -ForegroundColor White +Write-Host " [0] 跳过配置" -ForegroundColor White +Write-Host "" +Write-Host "────────────────────────────────────────" -ForegroundColor Cyan + +$choice = Read-Host "请选择 [0/1/2]" + +switch ($choice) { + "1" { + # 用户级配置 + $ClaudeMdPath = Join-Path $env:USERPROFILE ".claude\CLAUDE.md" + Write-Host "" + Write-Host "📄 写入用户级配置: $ClaudeMdPath" -ForegroundColor Cyan + + # 创建目录(如果不存在) + $claudeDir = Split-Path $ClaudeMdPath -Parent + if (-not (Test-Path $claudeDir)) { + New-Item -ItemType Directory -Path $claudeDir -Force | Out-Null + } + + # 检查文件是否已存在 + if (Test-Path $ClaudeMdPath) { + # 检查是否已包含配置标记 + $content = Get-Content $ClaudeMdPath -Raw + if ($content -match "## Codex 协作配置") { + Write-Host " ⚠ 检测到已存在 Codex 协作配置,跳过写入" -ForegroundColor Yellow + } else { + # 追加配置 + Add-Content -Path $ClaudeMdPath -Value "`n$ClaudeMdContent" + Write-Host " ✓ 配置已追加到文件末尾" -ForegroundColor Green + } + } else { + # 创建新文件 + $projectConstitution = @" +## 项目宪法遵循规则(最高优先级) + +进入任何项目目录时,**必须首先**执行以下检查: + +1. 检查项目根目录是否存在 `CLAUDE.md` 文件 +2. 若存在,**完整阅读**该文件内容 +3. 将其作为该项目的"宪法",严格遵循其中定义的所有规则 + +**优先级规则**: +- 项目级 `CLAUDE.md` > 本全局配置 +- 若规则冲突,以项目级为准 + +"@ + Set-Content -Path $ClaudeMdPath -Value "$projectConstitution`n$ClaudeMdContent" + Write-Host " ✓ 已创建新配置文件" -ForegroundColor Green + } + } + + "2" { + # 项目级配置 + Write-Host "" + $projectDirInput = Read-Host "请输入项目目录路径 (默认为当前目录)" + $projectDir = if ([string]::IsNullOrWhiteSpace($projectDirInput)) { + Get-Location + } else { + $projectDirInput + } + + # 转换为绝对路径 + $projectDir = (Resolve-Path $projectDir).Path + $ClaudeMdPath = Join-Path $projectDir "CLAUDE.md" + + Write-Host "" + Write-Host "📄 写入项目级配置: $ClaudeMdPath" -ForegroundColor Cyan + + # 检查目录是否存在 + if (-not (Test-Path $projectDir)) { + Write-Host " ✗ 错误: 目录不存在: $projectDir" -ForegroundColor Red + exit 1 + } + + # 检查文件是否已存在 + if (Test-Path $ClaudeMdPath) { + # 检查是否已包含配置标记 + $content = Get-Content $ClaudeMdPath -Raw + if ($content -match "## Codex 协作配置") { + Write-Host " ⚠ 检测到已存在 Codex 协作配置,跳过写入" -ForegroundColor Yellow + } else { + # 追加配置 + Add-Content -Path $ClaudeMdPath -Value "`n$ClaudeMdContent" + Write-Host " ✓ 配置已追加到文件末尾" -ForegroundColor Green + } + } else { + # 创建新文件 + $projectConstitution = @" +## 项目宪法遵循规则(最高优先级) + +进入任何项目目录时,**必须首先**执行以下检查: + +1. 检查项目根目录是否存在 `CLAUDE.md` 文件 +2. 若存在,**完整阅读**该文件内容 +3. 将其作为该项目的"宪法",严格遵循其中定义的所有规则 + +**优先级规则**: +- 项目级 `CLAUDE.md` > 用户级配置 +- 若规则冲突,以项目级为准 + +"@ + Set-Content -Path $ClaudeMdPath -Value "$projectConstitution`n$ClaudeMdContent" + Write-Host " ✓ 已创建新配置文件" -ForegroundColor Green + } + } + + "0" { + Write-Host "" + Write-Host "⏭ 跳过配置" -ForegroundColor Yellow + } + + default { + Write-Host "" + Write-Host "⚠ 无效选择,跳过配置" -ForegroundColor Yellow + } +} + +Write-Host "" +Write-Host "────────────────────────────────────────" -ForegroundColor Cyan +Write-Host "🎉 安装完成!" -ForegroundColor Green Write-Host "" Write-Host "提示: 重启 Claude Code 以加载新的 skills" -ForegroundColor Yellow +Write-Host "────────────────────────────────────────" -ForegroundColor Cyan diff --git a/install.sh b/install.sh index 233496a..0413d00 100755 --- a/install.sh +++ b/install.sh @@ -8,13 +8,48 @@ set -e REPO_URL="https://git.let5see.xyz/let5see/skills.git" TEMP_DIR="/tmp/skills-install-$$" SKILLS_DIR="$HOME/.claude/skills" +CLAUDE_MD_CONTENT=" +## Codex 协作配置 + +本项目使用 \`codex-collab\` skill 进行 Codex CLI 协作。 + +### 快速安装 + +\`\`\`bash +bash <(curl -s https://git.let5see.xyz/let5see/skills/raw/main/install.sh) +\`\`\` + +### 核心原则 + +**指导原则**: +- Codex 是协作伙伴,而非唯一真理来源 +- 必须有独立思考,对 Codex 的建议保持批判性审视 +- 通过辩论和讨论达成最优方案 + +**职责分工**: +- **Claude Code**:代码编写、文档编写、简单任务直接执行 +- **Codex**:代码查找定位、逻辑梳理、代码审查、方案设计、问题诊断 + +**关键规范**: +- 查找/搜索任务 → 必须调用 Codex +- 方案设计阶段 → 使用 \`sandbox=\"read-only\"\` +- 代码实现 → Claude Code 基于方案重写生产级代码 +- 完成编码后 → 立即让 Codex 审查 + +### 详细文档 + +参考:\`~/.claude/skills/codex-collab/SKILL.md\` +或在线查看:https://git.let5see.xyz/let5see/skills + +--- +" echo "🚀 正在安装 Claude Code Skills..." echo "" # 创建临时目录 echo "📦 下载 skills..." -git clone "$REPO_URL" "$TEMP_DIR" --depth 1 +git clone "$REPO_URL" "$TEMP_DIR" --depth 1 --quiet # 确保 skills 目录存在 mkdir -p "$SKILLS_DIR" @@ -37,9 +72,137 @@ done rm -rf "$TEMP_DIR" echo "" -echo "✅ 安装完成!" +echo "✅ Skills 安装完成!" echo "" echo "已安装的 skills:" ls -1 "$SKILLS_DIR" | sed 's/^/ - /' echo "" + +# 询问是否配置 CLAUDE.md +echo "────────────────────────────────────────" +echo "📝 是否要配置 Codex 协作规则到 CLAUDE.md?" +echo "" +echo "这将帮助 Claude Code 更好地与 Codex 协作。" +echo "不会被覆盖现有内容,只会追加配置。" +echo "" +echo " [1] 用户级配置 (~/.claude/CLAUDE.md) - 所有项目生效" +echo " [2] 项目级配置 (./CLAUDE.md) - 仅当前项目生效" +echo " [0] 跳过配置" +echo "" +echo "────────────────────────────────────────" +read -p "请选择 [0/1/2]: " choice + +case $choice in + 1) + # 用户级配置 + CLAUDE_MD_PATH="$HOME/.claude/CLAUDE.md" + echo "" + echo "📄 写入用户级配置: $CLAUDE_MD_PATH" + + # 创建目录(如果不存在) + mkdir -p "$(dirname "$CLAUDE_MD_PATH")" + + # 检查文件是否已存在 + if [ -f "$CLAUDE_MD_PATH" ]; then + # 检查是否已包含配置标记 + if grep -q "## Codex 协作配置" "$CLAUDE_MD_PATH"; then + echo " ⚠ 检测到已存在 Codex 协作配置,跳过写入" + else + # 追加配置 + echo "" >> "$CLAUDE_MD_PATH" + echo "$CLAUDE_MD_CONTENT" >> "$CLAUDE_MD_PATH" + echo " ✓ 配置已追加到文件末尾" + fi + else + # 创建新文件 + cat > "$CLAUDE_MD_PATH" << 'EOF' +## 项目宪法遵循规则(最高优先级) + +进入任何项目目录时,**必须首先**执行以下检查: + +1. 检查项目根目录是否存在 `CLAUDE.md` 文件 +2. 若存在,**完整阅读**该文件内容 +3. 将其作为该项目的"宪法",严格遵循其中定义的所有规则 + +**优先级规则**: +- 项目级 `CLAUDE.md` > 本全局配置 +- 若规则冲突,以项目级为准 + +EOF + echo "$CLAUDE_MD_CONTENT" >> "$CLAUDE_MD_PATH" + echo " ✓ 已创建新配置文件" + fi + ;; + + 2) + # 项目级配置 + echo "" + read -p "请输入项目目录路径 (默认为当前目录): " project_dir + project_dir=${project_dir:-.} + + # 转换为绝对路径 + if [[ "$project_dir" = "." ]]; then + project_dir="$(pwd)" + elif [[ ! "$project_dir" = /* ]]; then + project_dir="$(pwd)/$project_dir" + fi + + CLAUDE_MD_PATH="$project_dir/CLAUDE.md" + echo "" + echo "📄 写入项目级配置: $CLAUDE_MD_PATH" + + # 检查目录是否存在 + if [ ! -d "$project_dir" ]; then + echo " ✗ 错误: 目录不存在: $project_dir" + exit 1 + fi + + # 检查文件是否已存在 + if [ -f "$CLAUDE_MD_PATH" ]; then + # 检查是否已包含配置标记 + if grep -q "## Codex 协作配置" "$CLAUDE_MD_PATH"; then + echo " ⚠ 检测到已存在 Codex 协作配置,跳过写入" + else + # 追加配置 + echo "" >> "$CLAUDE_MD_PATH" + echo "$CLAUDE_MD_CONTENT" >> "$CLAUDE_MD_PATH" + echo " ✓ 配置已追加到文件末尾" + fi + else + # 创建新文件 + cat > "$CLAUDE_MD_PATH" << 'EOF' +## 项目宪法遵循规则(最高优先级) + +进入任何项目目录时,**必须首先**执行以下检查: + +1. 检查项目根目录是否存在 `CLAUDE.md` 文件 +2. 若存在,**完整阅读**该文件内容 +3. 将其作为该项目的"宪法",严格遵循其中定义的所有规则 + +**优先级规则**: +- 项目级 `CLAUDE.md` > 用户级配置 +- 若规则冲突,以项目级为准 + +EOF + echo "$CLAUDE_MD_CONTENT" >> "$CLAUDE_MD_PATH" + echo " ✓ 已创建新配置文件" + fi + ;; + + 0) + echo "" + echo "⏭ 跳过配置" + ;; + + *) + echo "" + echo "⚠ 无效选择,跳过配置" + ;; +esac + +echo "" +echo "────────────────────────────────────────" +echo "🎉 安装完成!" +echo "" echo "提示: 重启 Claude Code 以加载新的 skills" +echo "────────────────────────────────────────"