名称: 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 已配置。您想做什么?”
选项:
如果用户选择"仅更新 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 工具提示:
问题: “找到上次设置会话。您想恢复还是重新开始?”
选项:
- 从步骤 $LAST_STEP 恢复 - 继续上次停止的地方
- 重新开始 - 从头开始(清除保存的状态)
如果用户选择"重新开始":
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 "设置成功完成。状态已清除。"
使用模式
此技能处理三种场景:
- 初始设置(无标志):首次安装向导
- 本地配置(
--local):配置项目特定设置 (.claude/CLAUDE.md) - 全局配置(
--global):配置全局设置 (~/.claude/CLAUDE.md)
模式检测
检查用户调用中的标志:
- 如果存在
--local标志 → 跳过预设置检查,转到本地配置(步骤 2A) - 如果存在
--global标志 → 跳过预设置检查,转到全局配置(步骤 2B) - 如果存在
--force标志 → 跳过预设置检查,运行初始设置向导(步骤 1) - 如果无标志 → 先运行预设置检查,然后如果需要,运行初始设置向导(步骤 1)
步骤 1:初始设置向导(默认行为)
注意:如果恢复且 lastCompletedStep >= 1,根据 configType 跳到适当步骤。
使用 AskUserQuestion 工具提示用户:
问题: “我应该在何处配置 oh-my-claudecode?”
选项:
- 本地(此项目) - 在当前项目目录中创建
.claude/CLAUDE.md。适用于项目特定配置。 - 全局(所有项目) - 为所有 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
这将:
- 安装 HUD 包装脚本到
~/.claude/hud/omc-hud.mjs - 在
~/.claude/settings.json中配置statusLine - 报告状态并提示重启如果需要
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’时,应该使用哪种并行执行模式作为默认?”
选项:
- 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 stats、omc agents、omc tui)。
询问用户:“您想安装 OMC CLI 以进行独立分析吗?(推荐用于跟踪令牌使用和成本)”
选项:
- 是(推荐) - 全局安装 CLI 工具以使用
omc stats、omc agents等 - 否 - 跳过 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:
问题: “我应该使用哪种任务管理工具来跟踪工作?”
选项:
- 内置 Tasks(默认) - 使用 Claude Code 的原生 TaskCreate/TodoWrite。任务仅限会话。
- Beads (bd) - Git 支持的持久任务。跨会话生存。[仅在检测到时显示]
- 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 的实验性功能。”
选项:
- 是,启用团队(推荐) - 启用实验性功能并配置默认值
- 否,跳过 - 保持团队禁用(稍后可启用)
如果用户选择是:
步骤 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 工具:
问题: “队友应如何显示?”
选项:
- 自动(推荐) - 如果在 tmux 中则使用分屏,否则进程内。适用于大多数用户。
- 进程内 - 所有队友在您的主终端中。使用 Shift+Up/Down 选择。随处可用。
- 分屏 (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: “团队默认应生成多少个代理?”
选项:
- 3 个代理(推荐) - 速度和资源使用之间的良好平衡
- 5 个代理(最大) - 大型任务的最大并行性
- 2 个代理 - 保守,适用于较小项目
问题 2: “队友默认应使用哪种代理类型?”
选项:
- executor(推荐) - 通用代码实现代理
- build-fixer - 专用于构建/类型错误修复
- 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 上打星来支持项目吗?”
选项:
- 是,打星! - 给仓库打星
- 不用了,谢谢 - 跳过而无进一步提示
- 稍后再说 - 跳过而无进一步提示
如果用户选择"是,打星!":
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 获取详情。