OMC设置Skill omc-setup

这个技能用于设置和配置 oh-my-claudecode,一个 Claude Code 插件,提供智能并行执行、AI代理团队协作、实时状态显示和自动化开发工作流。关键词:Claude Code, AI智能体, 并行执行, 设置配置, 开发工具, 自动化插件, 团队协作, 状态监控。

AI智能体 0 次安装 0 次浏览 更新于 3/11/2026

名称: omc-setup 描述: 设置和配置 oh-my-claudecode(您唯一需要学习的命令)

OMC 设置

这是您唯一需要学习的命令。运行此命令后,其他一切都会自动完成。

注意:本指南中所有 ~/.claude/... 路径在设置环境变量 CLAUDE_CONFIG_DIR 时会遵循该变量。

预设置检查:是否已配置?

关键:在进行任何操作之前,检查设置是否已完成。这可以防止用户在每次更新后重新运行完整设置向导。

# 检查设置是否已完成
CONFIG_FILE="$HOME/.claude/.omc-config.json"

if [ -f "$CONFIG_FILE" ]; then
  SETUP_COMPLETED=$(jq -r '.setupCompleted // empty' "$CONFIG_FILE" 2>/dev/null)
  SETUP_VERSION=$(jq -r '.setupVersion // empty' "$CONFIG_FILE" 2>/dev/null)

  if [ -n "$SETUP_COMPLETED" ] && [ "$SETUP_COMPLETED" != "null" ]; then
    echo "OMC 设置已于: $SETUP_COMPLETED 完成"
    [ -n "$SETUP_VERSION" ] && echo "设置版本: $SETUP_VERSION"
    ALREADY_CONFIGURED="true"
  fi
fi

如果已配置(且未使用 --force 标志)

如果 ALREADY_CONFIGURED 为真且用户未传递 --force--local--global 标志:

使用 AskUserQuestion 工具提示:

问题: “OMC 已配置。您想做什么?”

选项:

  1. 仅更新 CLAUDE.md - 下载最新的 CLAUDE.md,无需重新运行完整设置
  2. 重新运行完整设置 - 进入完整的设置向导
  3. 取消 - 退出而不做更改

如果用户选择"仅更新 CLAUDE.md":

  • 检测本地 (.claude/CLAUDE.md) 或全局 (~/.claude/CLAUDE.md) 配置是否存在
  • 如果本地存在,运行步骤 2A 的下载/合并脚本
  • 如果仅全局存在,运行步骤 2B 的下载/合并脚本
  • 跳过所有其他步骤
  • 报告成功并退出

如果用户选择"重新运行完整设置":

  • 继续步骤 0(恢复检测)

如果用户选择"取消":

  • 退出而不做任何更改

强制标志覆盖

如果用户传递 --force 标志,跳过此检查并直接进行设置。

优雅的中断处理

重要:此设置过程在每个步骤后保存进度。如果中断(Ctrl+C 或连接丢失),设置可以从上次停止处恢复。

状态文件位置

  • .omc/state/setup-state.json - 跟踪已完成的步骤

恢复检测(步骤 0)

在开始任何步骤之前,检查现有状态:

# 检查现有设置状态
STATE_FILE=".omc/state/setup-state.json"

# 跨平台 ISO 日期到时间戳转换
iso_to_epoch() {
  local iso_date="$1"
  local epoch=""
  # 先尝试 GNU date(Linux)
  epoch=$(date -d "$iso_date" +%s 2>/dev/null)
  if [ $? -eq 0 ] && [ -n "$epoch" ]; then
    echo "$epoch"
    return 0
  fi
  # 尝试 BSD/macOS date
  local clean_date=$(echo "$iso_date" | sed 's/[+-][0-9][0-9]:[0-9][0-9]$//' | sed 's/Z$//' | sed 's/T/ /')
  epoch=$(date -j -f "%Y-%m-%d %H:%M:%S" "$clean_date" +%s 2>/dev/null)
  if [ $? -eq 0 ] && [ -n "$epoch" ]; then
    echo "$epoch"
    return 0
  fi
  echo "0"
}

if [ -f "$STATE_FILE" ]; then
  # 检查状态是否过时(超过 24 小时)
  TIMESTAMP_RAW=$(jq -r '.timestamp // empty' "$STATE_FILE" 2>/dev/null)
  if [ -n "$TIMESTAMP_RAW" ]; then
    TIMESTAMP_EPOCH=$(iso_to_epoch "$TIMESTAMP_RAW")
    NOW_EPOCH=$(date +%s)
    STATE_AGE=$((NOW_EPOCH - TIMESTAMP_EPOCH))
  else
    STATE_AGE=999999  # 如果没有时间戳,强制重新开始
  fi
  if [ "$STATE_AGE" -gt 86400 ]; then
    echo "上次设置状态已超过 24 小时。重新开始。"
    rm -f "$STATE_FILE"
  else
    LAST_STEP=$(jq -r ".lastCompletedStep // 0" "$STATE_FILE" 2>/dev/null || echo "0")
    TIMESTAMP=$(jq -r .timestamp "$STATE_FILE" 2>/dev/null || echo "unknown")
    echo "找到上次设置会话(步骤 $LAST_STEP 完成于 $TIMESTAMP)"
  fi
fi

如果状态存在,使用 AskUserQuestion 工具提示:

问题: “找到上次设置会话。您想恢复还是重新开始?”

选项:

  1. 从步骤 $LAST_STEP 恢复 - 继续上次停止的地方
  2. 重新开始 - 从头开始(清除保存的状态)

如果用户选择"重新开始":

rm -f ".omc/state/setup-state.json"
echo "先前状态已清除。开始新设置。"

保存进度辅助函数

完成每个主要步骤后,保存进度:

# 保存设置进度(在每个步骤后调用)
# 用法:save_setup_progress STEP_NUMBER
save_setup_progress() {
  mkdir -p .omc/state
  cat > ".omc/state/setup-state.json" << EOF
{
  "lastCompletedStep": $1,
  "timestamp": "$(date -Iseconds)",
  "configType": "${CONFIG_TYPE:-unknown}"
}
EOF
}

完成时清除状态

成功完成设置(步骤 7/8)后,移除状态文件:

rm -f ".omc/state/setup-state.json"
echo "设置成功完成。状态已清除。"

使用模式

此技能处理三种场景:

  1. 初始设置(无标志):首次安装向导
  2. 本地配置(--local:配置项目特定设置 (.claude/CLAUDE.md)
  3. 全局配置(--global:配置全局设置 (~/.claude/CLAUDE.md)

模式检测

检查用户调用中的标志:

  • 如果存在 --local 标志 → 跳过预设置检查,转到本地配置(步骤 2A)
  • 如果存在 --global 标志 → 跳过预设置检查,转到全局配置(步骤 2B)
  • 如果存在 --force 标志 → 跳过预设置检查,运行初始设置向导(步骤 1)
  • 如果无标志 → 先运行预设置检查,然后如果需要,运行初始设置向导(步骤 1)

步骤 1:初始设置向导(默认行为)

注意:如果恢复且 lastCompletedStep >= 1,根据 configType 跳到适当步骤。

使用 AskUserQuestion 工具提示用户:

问题: “我应该在何处配置 oh-my-claudecode?”

选项:

  1. 本地(此项目) - 在当前项目目录中创建 .claude/CLAUDE.md。适用于项目特定配置。
  2. 全局(所有项目) - 为所有 Claude Code 会话创建 ~/.claude/CLAUDE.md。适用于各处一致行为。

步骤 2A:本地配置(–local 标志或用户选择 LOCAL)

关键:这总是从 GitHub 下载新的 CLAUDE.md 到本地项目。不要使用 Write 工具 - 仅使用 bash curl。

创建本地 .claude 目录

# 在当前项目中创建 .claude 目录
mkdir -p .claude && echo ".claude 目录已准备"

下载新的 CLAUDE.md

# 定义目标路径
TARGET_PATH=".claude/CLAUDE.md"

# 下载前提取旧版本
OLD_VERSION=$(grep -m1 "^# oh-my-claudecode" "$TARGET_PATH" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "none")

# 备份现有文件
if [ -f "$TARGET_PATH" ]; then
  BACKUP_DATE=$(date +%Y-%m-%d_%H%M%S)
  BACKUP_PATH="${TARGET_PATH}.backup.${BACKUP_DATE}"
  cp "$TARGET_PATH" "$BACKUP_PATH"
  echo "已将现有 CLAUDE.md 备份到 $BACKUP_PATH"
fi

# 下载新的 OMC 内容到临时文件
TEMP_OMC=$(mktemp /tmp/omc-claude-XXXXXX.md)
trap 'rm -f "$TEMP_OMC"' EXIT
curl -fsSL "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/CLAUDE.md" -o "$TEMP_OMC"

if [ ! -s "$TEMP_OMC" ]; then
  echo "错误:下载 CLAUDE.md 失败。中止。"
  rm -f "$TEMP_OMC"
  return 1
fi

# 从下载内容中剥离现有标记(幂等性)
if grep -q '<!-- OMC:START -->' "$TEMP_OMC"; then
  # 提取标记间的内容
  sed -n '/<!-- OMC:START -->/,/<!-- OMC:END -->/{//!p}' "$TEMP_OMC" > "${TEMP_OMC}.clean"
  mv "${TEMP_OMC}.clean" "$TEMP_OMC"
fi

if [ ! -f "$TARGET_PATH" ]; then
  # 新安装:用标记包装
  {
    echo '<!-- OMC:START -->'
    cat "$TEMP_OMC"
    echo '<!-- OMC:END -->'
  } > "$TARGET_PATH"
  rm -f "$TEMP_OMC"
  echo "已安装 CLAUDE.md(新)"
else
  # 合并:保留 OMC 标记外的用户内容
  if grep -q '<!-- OMC:START -->' "$TARGET_PATH"; then
    # 有标记:替换 OMC 部分,保留用户内容
    BEFORE_OMC=$(sed -n '1,/<!-- OMC:START -->/{ /<!-- OMC:START -->/!p }' "$TARGET_PATH")
    AFTER_OMC=$(sed -n '/<!-- OMC:END -->/,${  /<!-- OMC:END -->/!p }' "$TARGET_PATH")
    {
      [ -n "$BEFORE_OMC" ] && printf '%s
' "$BEFORE_OMC"
      echo '<!-- OMC:START -->'
      cat "$TEMP_OMC"
      echo '<!-- OMC:END -->'
      [ -n "$AFTER_OMC" ] && printf '%s
' "$AFTER_OMC"
    } > "${TARGET_PATH}.tmp"
    mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
    echo "已更新 OMC 部分(用户自定义保留)"
  else
    # 无标记:用标记包装新内容,将旧内容附加为用户部分
    OLD_CONTENT=$(cat "$TARGET_PATH")
    {
      echo '<!-- OMC:START -->'
      cat "$TEMP_OMC"
      echo '<!-- OMC:END -->'
      echo ""
      echo "<!-- 用户自定义(从先前 CLAUDE.md 迁移) -->"
      printf '%s
' "$OLD_CONTENT"
    } > "${TARGET_PATH}.tmp"
    mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
    echo "已迁移现有 CLAUDE.md(添加 OMC 标记,保留旧内容)"
  fi
  rm -f "$TEMP_OMC"
fi

# 提取新版本并报告
NEW_VERSION=$(grep -m1 "^# oh-my-claudecode" "$TARGET_PATH" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "unknown")
if [ "$OLD_VERSION" = "none" ]; then
  echo "已安装 CLAUDE.md:$NEW_VERSION"
elif [ "$OLD_VERSION" = "$NEW_VERSION" ]; then
  echo "CLAUDE.md 未变:$NEW_VERSION"
else
  echo "已更新 CLAUDE.md:$OLD_VERSION -> $NEW_VERSION"
fi

注意:下载的 CLAUDE.md 包括上下文持久性说明,使用 <remember> 标签以在对话压缩中生存。

注意:如果找到现有 CLAUDE.md,在下载新版本前会备份到 .claude/CLAUDE.md.backup.YYYY-MM-DD

强制:总是运行此命令。不要跳过。不要使用 Write 工具。

备用 如果 curl 失败: 告诉用户手动从以下地址下载: https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/CLAUDE.md

验证插件安装

grep -q "oh-my-claudecode" ~/.claude/settings.json && echo "插件已验证" || echo "插件未找到 - 运行:claude /install-plugin oh-my-claudecode"

确认本地配置成功

完成本地配置后,保存进度并报告:

# 保存进度 - 步骤 2 完成(本地配置)
mkdir -p .omc/state
cat > ".omc/state/setup-state.json" << EOF
{
  "lastCompletedStep": 2,
  "timestamp": "$(date -Iseconds)",
  "configType": "local"
}
EOF

OMC 项目配置完成

  • CLAUDE.md:已更新为来自 GitHub 的最新配置,位于 ./.claude/CLAUDE.md
  • 备份:先前 CLAUDE.md 备份到 .claude/CLAUDE.md.backup.YYYY-MM-DD(如果存在)
  • 范围:项目 - 仅适用于此项目
  • 钩子:由插件提供(无需手动安装)
  • 代理:28+ 可用(基础 + 分层变体)
  • 模型路由:基于任务复杂度的 Haiku/Sonnet/Opus

注意:此配置是项目特定的,不会影响其他项目或全局设置。

如果使用了 --local 标志,清除状态并在此停止

rm -f ".omc/state/setup-state.json"

不要继续到 HUD 设置或其他步骤。

步骤 2B:全局配置(–global 标志或用户选择 GLOBAL)

关键:这总是从 GitHub 下载新的 CLAUDE.md 到全局配置。不要使用 Write 工具 - 仅使用 bash curl。

下载新的 CLAUDE.md

# 定义目标路径
TARGET_PATH="$HOME/.claude/CLAUDE.md"

# 下载前提取旧版本
OLD_VERSION=$(grep -m1 "^# oh-my-claudecode" "$TARGET_PATH" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "none")

# 备份现有文件
if [ -f "$TARGET_PATH" ]; then
  BACKUP_DATE=$(date +%Y-%m-%d_%H%M%S)
  BACKUP_PATH="${TARGET_PATH}.backup.${BACKUP_DATE}"
  cp "$TARGET_PATH" "$BACKUP_PATH"
  echo "已将现有 CLAUDE.md 备份到 $BACKUP_PATH"
fi

# 下载新的 OMC 内容到临时文件
TEMP_OMC=$(mktemp /tmp/omc-claude-XXXXXX.md)
trap 'rm -f "$TEMP_OMC"' EXIT
curl -fsSL "https://raw.githubusercontent.com/Yeachan-Heo/oh-my-claudecode/main/docs/CLAUDE.md" -o "$TEMP_OMC"

if [ ! -s "$TEMP_OMC" ]; then
  echo "错误:下载 CLAUDE.md 失败。中止。"
  rm -f "$TEMP_OMC"
  return 1
fi

# 从下载内容中剥离现有标记(幂等性)
if grep -q '<!-- OMC:START -->' "$TEMP_OMC"; then
  # 提取标记间的内容
  sed -n '/<!-- OMC:START -->/,/<!-- OMC:END -->/{//!p}' "$TEMP_OMC" > "${TEMP_OMC}.clean"
  mv "${TEMP_OMC}.clean" "$TEMP_OMC"
fi

if [ ! -f "$TARGET_PATH" ]; then
  # 新安装:用标记包装
  {
    echo '<!-- OMC:START -->'
    cat "$TEMP_OMC"
    echo '<!-- OMC:END -->'
  } > "$TARGET_PATH"
  rm -f "$TEMP_OMC"
  echo "已安装 CLAUDE.md(新)"
else
  # 合并:保留 OMC 标记外的用户内容
  if grep -q '<!-- OMC:START -->' "$TARGET_PATH"; then
    # 有标记:替换 OMC 部分,保留用户内容
    BEFORE_OMC=$(sed -n '1,/<!-- OMC:START -->/{ /<!-- OMC:START -->/!p }' "$TARGET_PATH")
    AFTER_OMC=$(sed -n '/<!-- OMC:END -->/,${  /<!-- OMC:END -->/!p }' "$TARGET_PATH")
    {
      [ -n "$BEFORE_OMC" ] && printf '%s
' "$BEFORE_OMC"
      echo '<!-- OMC:START -->'
      cat "$TEMP_OMC"
      echo '<!-- OMC:END -->'
      [ -n "$AFTER_OMC" ] && printf '%s
' "$AFTER_OMC"
    } > "${TARGET_PATH}.tmp"
    mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
    echo "已更新 OMC 部分(用户自定义保留)"
  else
    # 无标记:用标记包装新内容,将旧内容附加为用户部分
    OLD_CONTENT=$(cat "$TARGET_PATH")
    {
      echo '<!-- OMC:START -->'
      cat "$TEMP_OMC"
      echo '<!-- OMC:END -->'
      echo ""
      echo "<!-- 用户自定义(从先前 CLAUDE.md 迁移) -->"
      printf '%s
' "$OLD_CONTENT"
    } > "${TARGET_PATH}.tmp"
    mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
    echo "已迁移现有 CLAUDE.md(添加 OMC 标记,保留旧内容)"
  fi
  rm -f "$TEMP_OMC"
fi

# 提取新版本并报告
NEW_VERSION=$(grep -m1 "^# oh-my-claudecode" "$TARGET_PATH" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "unknown")
if [ "$OLD_VERSION" = "none" ]; then
  echo "已安装 CLAUDE.md:$NEW_VERSION"
elif [ "$OLD_VERSION" = "$NEW_VERSION" ]; then
  echo "CLAUDE.md 未变:$NEW_VERSION"
else
  echo "已更新 CLAUDE.md:$OLD_VERSION -> $NEW_VERSION"
fi

注意:如果找到现有 CLAUDE.md,在下载新版本前会备份到 ~/.claude/CLAUDE.md.backup.YYYY-MM-DD

清理遗留钩子(如果存在)

检查是否存在旧的手动钩子并移除以防止重复:

# 移除遗留的 bash 钩子脚本(现在由插件系统处理)
rm -f ~/.claude/hooks/keyword-detector.sh
rm -f ~/.claude/hooks/stop-continuation.sh
rm -f ~/.claude/hooks/persistent-mode.sh
rm -f ~/.claude/hooks/session-start.sh
echo "遗留钩子已清理"

检查 ~/.claude/settings.json 中的手动钩子条目。如果存在 “hooks” 键,其中包含指向 bash 脚本的 UserPromptSubmit、Stop 或 SessionStart 条目,则通知用户:

注意:在 settings.json 中找到遗留钩子。由于插件现在自动提供钩子,应移除这些。从 ~/.claude/settings.json 中移除 “hooks” 部分以防止重复钩子执行。

验证插件安装

grep -q "oh-my-claudecode" ~/.claude/settings.json && echo "插件已验证" || echo "插件未找到 - 运行:claude /install-plugin oh-my-claudecode"

确认全局配置成功

完成全局配置后,保存进度并报告:

# 保存进度 - 步骤 2 完成(全局配置)
mkdir -p .omc/state
cat > ".omc/state/setup-state.json" << EOF
{
  "lastCompletedStep": 2,
  "timestamp": "$(date -Iseconds)",
  "configType": "global"
}
EOF

OMC 全局配置完成

  • CLAUDE.md:已更新为来自 GitHub 的最新配置,位于 ~/.claude/CLAUDE.md
  • 备份:先前 CLAUDE.md 备份到 ~/.claude/CLAUDE.md.backup.YYYY-MM-DD(如果存在)
  • 范围:全局 - 适用于所有 Claude Code 会话
  • 钩子:由插件提供(无需手动安装)
  • 代理:28+ 可用(基础 + 分层变体)
  • 模型路由:基于任务复杂度的 Haiku/Sonnet/Opus

注意:钩子现在由插件系统自动管理。无需手动钩子安装。

如果使用了 --global 标志,清除状态并在此停止

rm -f ".omc/state/setup-state.json"

不要继续到 HUD 设置或其他步骤。

步骤 3:设置 HUD 状态行

注意:如果恢复且 lastCompletedStep >= 3,跳到步骤 3.5。

HUD 在 Claude Code 的状态栏中显示实时状态。调用 hud 技能来设置和配置:

使用 Skill 工具调用:hud 带有参数:setup

这将:

  1. 安装 HUD 包装脚本到 ~/.claude/hud/omc-hud.mjs
  2. ~/.claude/settings.json 中配置 statusLine
  3. 报告状态并提示重启如果需要

HUD 设置完成后,保存进度:

# 保存进度 - 步骤 3 完成(HUD 设置)
mkdir -p .omc/state
CONFIG_TYPE=$(cat ".omc/state/setup-state.json" 2>/dev/null | grep -oE '"configType":\s*"[^"]+"' | cut -d'"' -f4 || echo "unknown")
cat > ".omc/state/setup-state.json" << EOF
{
  "lastCompletedStep": 3,
  "timestamp": "$(date -Iseconds)",
  "configType": "$CONFIG_TYPE"
}
EOF

步骤 3.5:清理过时的插件缓存

清理旧的缓存插件版本以避免冲突:

# 清理过时的插件缓存版本(跨平台)
node -e "const p=require('path'),f=require('fs'),h=require('os').homedir(),d=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude'),b=p.join(d,'plugins','cache','omc','oh-my-claudecode');try{const v=f.readdirSync(b).filter(x=>/^\d/.test(x)).sort((a,c)=>a.localeCompare(c,void 0,{numeric:true}));if(v.length<=1){console.log('缓存已清理');process.exit()}v.slice(0,-1).forEach(x=>{f.rmSync(p.join(b,x),{recursive:true,force:true})});console.log('已清理',v.length-1,'个过时缓存版本')}catch{console.log('未找到缓存目录(新安装正常)')}"

步骤 3.6:检查更新

通知用户如果有新版本可用:

# 检测已安装版本(跨平台)
node -e "
const p=require('path'),f=require('fs'),h=require('os').homedir();
const d=process.env.CLAUDE_CONFIG_DIR||p.join(h,'.claude');
let v='';
// 先尝试缓存目录
const b=p.join(d,'plugins','cache','omc','oh-my-claudecode');
try{const vs=f.readdirSync(b).filter(x=>/^\d/.test(x)).sort((a,c)=>a.localeCompare(c,void 0,{numeric:true}));if(vs.length)v=vs[vs.length-1]}catch{}
// 其次尝试 .omc-version.json
if(v==='')try{const j=JSON.parse(f.readFileSync('.omc-version.json','utf-8'));v=j.version||''}catch{}
// 第三尝试 CLAUDE.md 头部
if(v==='')for(const c of['.claude/CLAUDE.md',p.join(d,'CLAUDE.md')]){try{const m=f.readFileSync(c,'utf-8').match(/^# oh-my-claudecode.*?(v?\d+\.\d+\.\d+)/m);if(m){v=m[1].replace(/^v/,'');break}}catch{}}
console.log('已安装:',v||'(未找到)');
"

# 检查 npm 获取最新版本
LATEST_VERSION=$(npm view oh-my-claude-sisyphus version 2>/dev/null)

if [ -n "$INSTALLED_VERSION" ] && [ -n "$LATEST_VERSION" ]; then
  # 简单版本比较(假设语义化版本)
  if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
    echo ""
    echo "有更新可用:"
    echo "  已安装:v$INSTALLED_VERSION"
    echo "  最新:   v$LATEST_VERSION"
    echo ""
    echo "要更新,运行:claude /install-plugin oh-my-claudecode"
  else
    echo "您使用的是最新版本:v$INSTALLED_VERSION"
  fi
elif [ -n "$LATEST_VERSION" ]; then
  echo "最新版本可用:v$LATEST_VERSION"
fi

步骤 3.7:设置默认执行模式

使用 AskUserQuestion 工具提示用户:

问题: “当您说’fast’或’parallel’时,应该使用哪种并行执行模式作为默认?”

选项:

  1. ultrawork(最大能力) - 使用所有代理层,包括复杂任务的 Opus。适用于挑战性工作,质量最重要。(推荐)

将偏好存储在 ~/.claude/.omc-config.json 中:

# 读取现有配置或创建空对象
CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# 设置 defaultExecutionMode(将 USER_CHOICE 替换为 "ultrawork" 或 "")
echo "$EXISTING" | jq --arg mode "USER_CHOICE" '. + {defaultExecutionMode: $mode, configuredAt: (now | todate)}' > "$CONFIG_FILE"
echo "默认执行模式设置为:USER_CHOICE"

注意:此偏好仅影响通用关键字(“fast”、“parallel”)。显式关键字(“ulw”)总是覆盖此偏好。

步骤 3.8:安装 CLI 分析工具(可选)

OMC CLI 提供独立的令牌分析命令(omc statsomc agentsomc tui)。

询问用户:“您想安装 OMC CLI 以进行独立分析吗?(推荐用于跟踪令牌使用和成本)”

选项:

  1. 是(推荐) - 全局安装 CLI 工具以使用 omc statsomc agents
  2. - 跳过 CLI 安装,仅使用插件技能

CLI 安装说明

CLI(omc 命令)不再支持通过 npm/bun 全局安装。

所有功能都通过插件系统提供:

  • 使用 /oh-my-claudecode:omc-help 获取指导
  • 使用 /oh-my-claudecode:omc-doctor 进行诊断

跳过此步骤 - 插件提供所有功能。

步骤 3.8.5:选择任务管理工具

首先,检测可用的任务工具:

# 检测 beads (bd)
BD_VERSION=""
if command -v bd &>/dev/null; then
  BD_VERSION=$(bd --version 2>/dev/null | head -1 || echo "installed")
fi

# 检测 beads-rust (br)
BR_VERSION=""
if command -v br &>/dev/null; then
  BR_VERSION=$(br --version 2>/dev/null | head -1 || echo "installed")
fi

# 报告发现
if [ -n "$BD_VERSION" ]; then
  echo "找到 beads (bd):$BD_VERSION"
fi
if [ -n "$BR_VERSION" ]; then
  echo "找到 beads-rust (br):$BR_VERSION"
fi
if [ -z "$BD_VERSION" ] && [ -z "$BR_VERSION" ]; then
  echo "未找到外部任务工具。使用内置 Tasks。"
fi

如果既未检测到 beads 也未检测到 beads-rust,跳过此步骤(默认为内置)。

如果检测到 beads 或 beads-rust,使用 AskUserQuestion:

问题: “我应该使用哪种任务管理工具来跟踪工作?”

选项:

  1. 内置 Tasks(默认) - 使用 Claude Code 的原生 TaskCreate/TodoWrite。任务仅限会话。
  2. Beads (bd) - Git 支持的持久任务。跨会话生存。[仅在检测到时显示]
  3. Beads-Rust (br) - 轻量级 Rust 端口 beads。[仅在检测到时显示]

(仅在检测到相应工具时显示选项 2/3)

存储偏好:

CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# USER_CHOICE 基于用户选择为 "builtin"、"beads" 或 "beads-rust"
echo "$EXISTING" | jq --arg tool "USER_CHOICE" '. + {taskTool: $tool, taskToolConfig: {injectInstructions: true, useMcp: false}}' > "$CONFIG_FILE"
echo "任务工具设置为:USER_CHOICE"

注意: beads 上下文说明将在下次会话启动时自动注入。配置生效无需重启。

步骤 4:验证插件安装

grep -q "oh-my-claudecode" ~/.claude/settings.json && echo "插件已验证" || echo "插件未找到 - 运行:claude /install-plugin oh-my-claudecode"

步骤 5:提供 MCP 服务器配置

MCP 服务器扩展 Claude Code 的附加工具(网络搜索、GitHub 等)。

询问用户:“您想配置 MCP 服务器以增强功能吗?(Context7、Exa 搜索、GitHub 等)”

如果是,调用 mcp-setup 技能:

/oh-my-claudecode:mcp-setup

如果否,跳到下一步。

步骤 5.5:配置代理团队(可选)

注意:如果恢复且 lastCompletedStep >= 5.5,跳到步骤 6。

代理团队是 Claude Code 的实验性功能,让您生成 N 个协调代理,在共享任务列表上工作,并具有代理间消息传递。团队默认禁用,需要通过 settings.json 启用。

参考:https://code.claude.com/docs/en/agent-teams

使用 AskUserQuestion 工具提示:

问题: “您想启用代理团队吗?团队让您生成协调代理(例如,/team 3:executor 'fix all errors')。这是 Claude Code 的实验性功能。”

选项:

  1. 是,启用团队(推荐) - 启用实验性功能并配置默认值
  2. 否,跳过 - 保持团队禁用(稍后可启用)

如果用户选择是:

步骤 5.5.1:在 settings.json 中启用代理团队

关键:代理团队需要在 ~/.claude/settings.json 中设置 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS。这必须谨慎完成以保留现有用户设置。

首先,读取当前的 settings.json:

SETTINGS_FILE="$HOME/.claude/settings.json"

if [ -f "$SETTINGS_FILE" ]; then
  echo "找到当前 settings.json"
  cat "$SETTINGS_FILE"
else
  echo "未找到 settings.json - 将创建一个"
fi

然后使用 Read 工具读取 ~/.claude/settings.json(如果存在)。使用 Edit 工具合并团队配置,同时保留所有现有设置。

如果 settings.json 存在并有 env,将新环境变量合并进去:

{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}

使用 jq 安全合并而不覆盖现有设置:

SETTINGS_FILE="$HOME/.claude/settings.json"

if [ -f "$SETTINGS_FILE" ]; then
  # 将环境变量合并到现有设置中,保留其他一切
  TEMP_FILE=$(mktemp)
  jq '.env = (.env // {} | . + {"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"})' "$SETTINGS_FILE" > "$TEMP_FILE" && mv "$TEMP_FILE" "$SETTINGS_FILE"
  echo "已将 CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 添加到现有 settings.json"
else
  # 创建仅包含团队环境变量的新 settings.json
  mkdir -p "$(dirname "$SETTINGS_FILE")"
  cat > "$SETTINGS_FILE" << 'SETTINGS_EOF'
{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}
SETTINGS_EOF
  echo "已创建启用团队的 settings.json"
fi

重要:可能的话,Edit 工具是修改 settings.json 的首选,因为它保留格式和注释。当文件需要结构合并时,上述 jq 方法是备用方案。

步骤 5.5.2:配置队友显示模式

使用 AskUserQuestion 工具:

问题: “队友应如何显示?”

选项:

  1. 自动(推荐) - 如果在 tmux 中则使用分屏,否则进程内。适用于大多数用户。
  2. 进程内 - 所有队友在您的主终端中。使用 Shift+Up/Down 选择。随处可用。
  3. 分屏 (tmux) - 每个队友在自有窗格中。需要 tmux 或 iTerm2。

如果用户选择除 “自动” 外的任何选项,将 teammateMode 添加到 settings.json:

SETTINGS_FILE="$HOME/.claude/settings.json"

# TEAMMATE_MODE 基于用户选择为 "in-process" 或 "tmux"
# 如果用户选择"自动"(这是默认),跳过此步骤
jq --arg mode "TEAMMATE_MODE" '. + {teammateMode: $mode}' "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" && mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE"
echo "队友显示模式设置为:TEAMMATE_MODE"

步骤 5.5.3:在 omc-config 中配置团队默认值

使用 AskUserQuestion 工具进行多个问题:

问题 1: “团队默认应生成多少个代理?”

选项:

  1. 3 个代理(推荐) - 速度和资源使用之间的良好平衡
  2. 5 个代理(最大) - 大型任务的最大并行性
  3. 2 个代理 - 保守,适用于较小项目

问题 2: “队友默认应使用哪种代理类型?”

选项:

  1. executor(推荐) - 通用代码实现代理
  2. build-fixer - 专用于构建/类型错误修复
  3. designer - 专用于 UI/前端工作

将团队配置存储在 ~/.claude/.omc-config.json 中:

CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# 将 MAX_AGENTS、AGENT_TYPE 替换为用户选择
echo "$EXISTING" | jq \
  --argjson maxAgents MAX_AGENTS \
  --arg agentType "AGENT_TYPE" \
  '. + {team: {maxAgents: $maxAgents, defaultAgentType: $agentType, monitorIntervalMs: 30000, shutdownTimeoutMs: 15000}}' > "$CONFIG_FILE"

echo "团队配置已保存:"
echo "  最大代理数:MAX_AGENTS"
echo "  默认代理:AGENT_TYPE"
echo "  模型:队友继承您的会话模型"

注意: 队友没有单独的模型默认值。每个队友都是完整的 Claude Code 会话,继承您配置的模型。由队友生成的子代理可以使用任何模型层。

验证 settings.json 完整性

所有修改后,验证 settings.json 是有效的 JSON 并包含预期键:

SETTINGS_FILE="$HOME/.claude/settings.json"

# 验证 JSON 有效
if jq empty "$SETTINGS_FILE" 2>/dev/null; then
  echo "settings.json:有效 JSON"
else
  echo "错误:settings.json 是无效 JSON!从备份恢复..."
  # 步骤 2 的备份应仍存在
  exit 1
fi

# 验证团队环境变量存在
if jq -e '.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' "$SETTINGS_FILE" > /dev/null 2>&1; then
  echo "代理团队:已启用"
else
  echo "警告:未在 settings.json 中找到代理团队环境变量"
fi

# 为用户审查显示最终 settings.json
echo ""
echo "最终 settings.json:"
jq '.' "$SETTINGS_FILE"

如果用户选择否:

跳过此步骤。代理团队将保持禁用。用户稍后可以通过添加到 ~/.claude/settings.json 来启用:

{
  "env": {
    "CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
  }
}

或通过运行 /oh-my-claudecode:omc-setup --force 并选择启用团队。

保存进度

# 保存进度 - 步骤 5.5 完成(团队配置)
mkdir -p .omc/state
CONFIG_TYPE=$(cat ".omc/state/setup-state.json" 2>/dev/null | grep -oE '"configType":\s*"[^"]+"' | cut -d'"' -f4 || echo "unknown")
cat > ".omc/state/setup-state.json" << EOF
{
  "lastCompletedStep": 5.5,
  "timestamp": "$(date -Iseconds)",
  "configType": "$CONFIG_TYPE"
}
EOF

步骤 6:检测从 2.x 升级

检查用户是否有现有配置:

# 检查现有 2.x 工件
ls ~/.claude/commands/ralph-loop.md 2>/dev/null || ls ~/.claude/commands/ultrawork.md 2>/dev/null

如果找到,这是从 2.x 升级。

步骤 7:显示欢迎消息

对于新用户:

OMC 设置完成!

您无需学习任何命令。我现在具有自动激活的智能行为。

自动发生什么:
- 复杂任务 -> 我并行化并委派给专家
- "plan this" -> 我开始规划访谈
- "don't stop until done" -> 我持续直到验证完成
- "stop" 或 "cancel" -> 我智能停止当前操作

魔法关键字(可选高级用户快捷键):
只需在请求中自然地包含这些词:

| 关键字 | 效果 | 示例 |
|---------|--------|---------|
| ralph | 持久模式 | "ralph: 修复身份验证 bug" |
| ralplan | 迭代规划 | "ralplan 此功能" |
| ulw | 最大并行性 | "ulw 重构 API" |
| plan | 规划访谈 | "plan 新端点" |
| team | 协调代理 | "/team 3:executor 修复错误" |

**ralph 包括 ultrawork:** 当您激活 ralph 模式时,它自动包括 ultrawork 的并行执行。无需组合关键字。

团队:
生成具有共享任务列表和实时消息传递的协调代理:
- /oh-my-claudecode:team 3:executor "修复所有 TypeScript 错误"
- /oh-my-claudecode:team 5:build-fixer "修复 src/ 中的构建错误"
团队使用 Claude Code 原生工具(TeamCreate/SendMessage/TaskCreate)。

MCP 服务器:
运行 /oh-my-claudecode:mcp-setup 添加如网络搜索、GitHub 等工具。

HUD 状态行:
状态栏现在显示 OMC 状态。重启 Claude Code 以查看。

CLI 分析(如果安装):
- omc           - 完整仪表板(统计 + 代理 + 成本)
- omc stats     - 查看令牌使用和成本
- omc agents    - 按成本查看代理细分
- omc tui       - 启动交互式 TUI 仪表板

就这样!只需正常使用 Claude Code。

对于从 2.x 升级的用户:

OMC 设置完成!(从 2.x 升级)

好消息:您的现有命令仍然有效!
- /ralph、/ultrawork、/plan 等仍然功能正常

3.0 中的新功能:
您不再需要那些命令。现在一切都是自动的:
- 只需说 "don't stop until done" 而不是 /ralph
- 只需说 "fast" 或 "parallel" 而不是 /ultrawork
- 只需说 "plan this" 而不是 /plan
- 只需说 "stop" 而不是 /cancel

魔法关键字(高级用户快捷键):
| 关键字 | 与旧...相同 | 示例 |
|---------|----------------|---------|
| ralph | /ralph | "ralph: 修复 bug" |
| ralplan | /ralplan | "ralplan 此功能" |
| ulw | /ultrawork | "ulw 重构 API" |
| plan | /plan | "plan 端点" |
| team | (新!) | "/team 3:executor 修复错误" |

团队(新!):
生成具有共享任务列表和实时消息传递的协调代理:
- /oh-my-claudecode:team 3:executor "修复所有 TypeScript 错误"
- 使用 Claude Code 原生工具(TeamCreate/SendMessage/TaskCreate)

HUD 状态行:
状态栏现在显示 OMC 状态。重启 Claude Code 以查看。

CLI 分析(如果安装):
- omc           - 完整仪表板(统计 + 代理 + 成本)
- omc stats     - 查看令牌使用和成本
- omc agents    - 按成本查看代理细分
- omc tui       - 启动交互式 TUI 仪表板

您的工作流程不会中断 - 只是变得更容易了!

步骤 8:询问关于给仓库打星

首先,检查 gh CLI 是否可用且已认证:

gh auth status &>/dev/null

如果 gh 可用且已认证:

使用 AskUserQuestion 工具提示用户:

问题: “如果您喜欢 oh-my-claudecode,您想通过在 GitHub 上打星来支持项目吗?”

选项:

  1. 是,打星! - 给仓库打星
  2. 不用了,谢谢 - 跳过而无进一步提示
  3. 稍后再说 - 跳过而无进一步提示

如果用户选择"是,打星!":

gh api -X PUT /user/starred/Yeachan-Heo/oh-my-claudecode 2>/dev/null && echo "感谢打星! ⭐" || true

注意: 如果 API 调用不工作,静默失败 - 绝不阻塞设置完成。

如果 gh 不可用或未认证:

echo ""
echo "如果您喜欢 oh-my-claudecode,考虑给仓库打星:"
echo "  https://github.com/Yeachan-Heo/oh-my-claudecode"
echo ""

清除设置状态并标记完成

步骤 8 完成后(无论打星选择如何),清除临时状态并标记设置为已完成:

# 设置完成 - 清除临时状态文件
rm -f ".omc/state/setup-state.json"

# 在持久配置中标记设置为已完成(防止更新时重新运行完整设置)
CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"

# 从 CLAUDE.md 获取当前 OMC 版本
OMC_VERSION=""
if [ -f ".claude/CLAUDE.md" ]; then
  OMC_VERSION=$(grep -m1 "^# oh-my-claudecode" .claude/CLAUDE.md 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "unknown")
elif [ -f "$HOME/.claude/CLAUDE.md" ]; then
  OMC_VERSION=$(grep -m1 "^# oh-my-claudecode" "$HOME/.claude/CLAUDE.md" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "unknown")
fi

if [ -f "$CONFIG_FILE" ]; then
  EXISTING=$(cat "$CONFIG_FILE")
else
  EXISTING='{}'
fi

# 添加 setupCompleted 时间戳和版本
echo "$EXISTING" | jq --arg ts "$(date -Iseconds)" --arg ver "$OMC_VERSION" \
  '. + {setupCompleted: $ts, setupVersion: $ver}' > "$CONFIG_FILE"

echo "设置成功完成!"
echo "注意:未来更新将仅刷新 CLAUDE.md,而非完整设置向导。"

保持更新

安装 oh-my-claudecode 更新后(通过 npm 或插件更新):

自动:只需运行 /oh-my-claudecode:omc-setup - 它将检测您已配置并提供快速"仅更新 CLAUDE.md"选项,跳过完整向导。

手动选项

  • /oh-my-claudecode:omc-setup --local 仅更新项目配置
  • /oh-my-claudecode:omc-setup --global 仅更新全局配置
  • /oh-my-claudecode:omc-setup --force 重新运行完整向导(重新配置偏好)

这确保您拥有最新功能和代理配置,而无需重复完整设置的令牌成本。

帮助文本

当用户运行 /oh-my-claudecode:omc-setup --help 或仅 --help 时,显示:

OMC 设置 - 配置 oh-my-claudecode

用法:
  /oh-my-claudecode:omc-setup           运行初始设置向导(或更新如果已配置)
  /oh-my-claudecode:omc-setup --local   配置本地项目 (.claude/CLAUDE.md)
  /oh-my-claudecode:omc-setup --global  配置全局设置 (~/.claude/CLAUDE.md)
  /oh-my-claudecode:omc-setup --force   强制完整设置向导即使已配置
  /oh-my-claudecode:omc-setup --help    显示此帮助

模式:
  初始设置(无标志)
    - 首次设置的交互式向导
    - 配置 CLAUDE.md(本地或全局)
    - 设置 HUD 状态行
    - 检查更新
    - 提供 MCP 服务器配置
    - 配置团队模式默认值(代理数量、类型、模型)
    - 如果已配置,提供快速更新选项

  本地配置(--local)
    - 下载新的 CLAUDE.md 到 ./.claude/
    - 备份现有 CLAUDE.md 到 .claude/CLAUDE.md.backup.YYYY-MM-DD
    - 项目特定设置
    - 使用此选项在 OMC 升级后更新项目配置

  全局配置(--global)
    - 下载新的 CLAUDE.md 到 ~/.claude/
    - 备份现有 CLAUDE.md 到 ~/.claude/CLAUDE.md.backup.YYYY-MM-DD
    - 适用于所有 Claude Code 会话
    - 清理遗留钩子
    - 使用此选项在 OMC 升级后更新全局配置

  强制完整设置(--force)
    - 绕过"已配置"检查
    - 从头运行完整设置向导
    - 当您想重新配置偏好时使用

示例:
  /oh-my-claudecode:omc-setup           # 首次设置(或更新 CLAUDE.md 如果已配置)
  /oh-my-claudecode:omc-setup --local   # 更新此项目
  /oh-my-claudecode:omc-setup --global  # 更新所有项目
  /oh-my-claudecode:omc-setup --force   # 重新运行完整设置向导

更多信息:https://github.com/Yeachan-Heo/oh-my-claudecode

可选规则模板

OMC 包括您可以复制到项目的 .claude/rules/ 目录以进行自动上下文注入的规则模板:

模板 目的
coding-style.md 代码风格、不变性、文件组织
testing.md TDD 工作流、80% 覆盖率目标
security.md 秘密管理、输入验证
performance.md 模型选择、上下文管理
git-workflow.md 提交约定、PR 工作流
karpathy-guidelines.md 编码纪律 — 编码前思考、简单性、外科手术式更改

复制:

mkdir -p .claude/rules
cp "${CLAUDE_PLUGIN_ROOT}/templates/rules/"*.md .claude/rules/

templates/rules/README.md 获取详情。