Loading...
Loading...
Setup and configure oh-my-claudecode (the ONLY command you need to learn)
npx skill4agent add yeachan-heo/oh-my-claudecode omc-setup~/.claude/...CLAUDE_CONFIG_DIR# Check if setup was already completed
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 was already completed on: $SETUP_COMPLETED"
[ -n "$SETUP_VERSION" ] && echo "Setup version: $SETUP_VERSION"
ALREADY_CONFIGURED="true"
fi
fiALREADY_CONFIGURED--force--local--global--force.omc/state/setup-state.json# Check for existing setup state
STATE_FILE=".omc/state/setup-state.json"
# Cross-platform ISO date to epoch conversion
iso_to_epoch() {
local iso_date="$1"
local epoch=""
# Try GNU date first (Linux)
epoch=$(date -d "$iso_date" +%s 2>/dev/null)
if [ $? -eq 0 ] && [ -n "$epoch" ]; then
echo "$epoch"
return 0
fi
# Try 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
# Check if state is stale (older than 24 hours)
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 # Force fresh start if no timestamp
fi
if [ "$STATE_AGE" -gt 86400 ]; then
echo "Previous setup state is more than 24 hours old. Starting fresh."
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 "Found previous setup session (Step $LAST_STEP completed at $TIMESTAMP)"
fi
firm -f ".omc/state/setup-state.json"
echo "Previous state cleared. Starting fresh setup."# Save setup progress (call after each step)
# Usage: 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
}rm -f ".omc/state/setup-state.json"
echo "Setup completed successfully. State cleared."--local--global--local--global--force.claude/CLAUDE.md~/.claude/CLAUDE.md# Create .claude directory in current project
mkdir -p .claude && echo ".claude directory ready"# Define target path
TARGET_PATH=".claude/CLAUDE.md"
# Extract old version before download
OLD_VERSION=$(grep -m1 "^# oh-my-claudecode" "$TARGET_PATH" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "none")
# Backup existing
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 "Backed up existing CLAUDE.md to $BACKUP_PATH"
fi
# Download fresh OMC content to temp file
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 "ERROR: Failed to download CLAUDE.md. Aborting."
rm -f "$TEMP_OMC"
return 1
fi
# Strip existing markers from downloaded content (idempotency)
if grep -q '<!-- OMC:START -->' "$TEMP_OMC"; then
# Extract content between markers
sed -n '/<!-- OMC:START -->/,/<!-- OMC:END -->/{//!p}' "$TEMP_OMC" > "${TEMP_OMC}.clean"
mv "${TEMP_OMC}.clean" "$TEMP_OMC"
fi
if [ ! -f "$TARGET_PATH" ]; then
# Fresh install: wrap in markers
{
echo '<!-- OMC:START -->'
cat "$TEMP_OMC"
echo '<!-- OMC:END -->'
} > "$TARGET_PATH"
rm -f "$TEMP_OMC"
echo "Installed CLAUDE.md (fresh)"
else
# Merge: preserve user content outside OMC markers
if grep -q '<!-- OMC:START -->' "$TARGET_PATH"; then
# Has markers: replace OMC section, keep user content
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\n' "$BEFORE_OMC"
echo '<!-- OMC:START -->'
cat "$TEMP_OMC"
echo '<!-- OMC:END -->'
[ -n "$AFTER_OMC" ] && printf '%s\n' "$AFTER_OMC"
} > "${TARGET_PATH}.tmp"
mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
echo "Updated OMC section (user customizations preserved)"
else
# No markers: wrap new content in markers, append old content as user section
OLD_CONTENT=$(cat "$TARGET_PATH")
{
echo '<!-- OMC:START -->'
cat "$TEMP_OMC"
echo '<!-- OMC:END -->'
echo ""
echo "<!-- User customizations (migrated from previous CLAUDE.md) -->"
printf '%s\n' "$OLD_CONTENT"
} > "${TARGET_PATH}.tmp"
mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
echo "Migrated existing CLAUDE.md (added OMC markers, preserved old content)"
fi
rm -f "$TEMP_OMC"
fi
# Extract new version and report
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 "Installed CLAUDE.md: $NEW_VERSION"
elif [ "$OLD_VERSION" = "$NEW_VERSION" ]; then
echo "CLAUDE.md unchanged: $NEW_VERSION"
else
echo "Updated CLAUDE.md: $OLD_VERSION -> $NEW_VERSION"
fi<remember>.claude/CLAUDE.md.backup.YYYY-MM-DDgrep -q "oh-my-claudecode" ~/.claude/settings.json && echo "Plugin verified" || echo "Plugin NOT found - run: claude /install-plugin oh-my-claudecode"# Save progress - Step 2 complete (Local config)
mkdir -p .omc/state
cat > ".omc/state/setup-state.json" << EOF
{
"lastCompletedStep": 2,
"timestamp": "$(date -Iseconds)",
"configType": "local"
}
EOF.claude/CLAUDE.md.backup.YYYY-MM-DD--localrm -f ".omc/state/setup-state.json"# Define target path
TARGET_PATH="$HOME/.claude/CLAUDE.md"
# Extract old version before download
OLD_VERSION=$(grep -m1 "^# oh-my-claudecode" "$TARGET_PATH" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' || echo "none")
# Backup existing
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 "Backed up existing CLAUDE.md to $BACKUP_PATH"
fi
# Download fresh OMC content to temp file
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 "ERROR: Failed to download CLAUDE.md. Aborting."
rm -f "$TEMP_OMC"
return 1
fi
# Strip existing markers from downloaded content (idempotency)
if grep -q '<!-- OMC:START -->' "$TEMP_OMC"; then
# Extract content between markers
sed -n '/<!-- OMC:START -->/,/<!-- OMC:END -->/{//!p}' "$TEMP_OMC" > "${TEMP_OMC}.clean"
mv "${TEMP_OMC}.clean" "$TEMP_OMC"
fi
if [ ! -f "$TARGET_PATH" ]; then
# Fresh install: wrap in markers
{
echo '<!-- OMC:START -->'
cat "$TEMP_OMC"
echo '<!-- OMC:END -->'
} > "$TARGET_PATH"
rm -f "$TEMP_OMC"
echo "Installed CLAUDE.md (fresh)"
else
# Merge: preserve user content outside OMC markers
if grep -q '<!-- OMC:START -->' "$TARGET_PATH"; then
# Has markers: replace OMC section, keep user content
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\n' "$BEFORE_OMC"
echo '<!-- OMC:START -->'
cat "$TEMP_OMC"
echo '<!-- OMC:END -->'
[ -n "$AFTER_OMC" ] && printf '%s\n' "$AFTER_OMC"
} > "${TARGET_PATH}.tmp"
mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
echo "Updated OMC section (user customizations preserved)"
else
# No markers: wrap new content in markers, append old content as user section
OLD_CONTENT=$(cat "$TARGET_PATH")
{
echo '<!-- OMC:START -->'
cat "$TEMP_OMC"
echo '<!-- OMC:END -->'
echo ""
echo "<!-- User customizations (migrated from previous CLAUDE.md) -->"
printf '%s\n' "$OLD_CONTENT"
} > "${TARGET_PATH}.tmp"
mv "${TARGET_PATH}.tmp" "$TARGET_PATH"
echo "Migrated existing CLAUDE.md (added OMC markers, preserved old content)"
fi
rm -f "$TEMP_OMC"
fi
# Extract new version and report
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 "Installed CLAUDE.md: $NEW_VERSION"
elif [ "$OLD_VERSION" = "$NEW_VERSION" ]; then
echo "CLAUDE.md unchanged: $NEW_VERSION"
else
echo "Updated CLAUDE.md: $OLD_VERSION -> $NEW_VERSION"
fi~/.claude/CLAUDE.md.backup.YYYY-MM-DD# Remove legacy bash hook scripts (now handled by plugin system)
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 "Legacy hooks cleaned"~/.claude/settings.jsonNote: Found legacy hooks in settings.json. These should be removed since the plugin now provides hooks automatically. Remove the "hooks" section from ~/.claude/settings.json to prevent duplicate hook execution.
grep -q "oh-my-claudecode" ~/.claude/settings.json && echo "Plugin verified" || echo "Plugin NOT found - run: claude /install-plugin oh-my-claudecode"# Save progress - Step 2 complete (Global config)
mkdir -p .omc/state
cat > ".omc/state/setup-state.json" << EOF
{
"lastCompletedStep": 2,
"timestamp": "$(date -Iseconds)",
"configType": "global"
}
EOF~/.claude/CLAUDE.md.backup.YYYY-MM-DD--globalrm -f ".omc/state/setup-state.json"hudsetup~/.claude/hud/omc-hud.mjsstatusLine~/.claude/settings.json# Save progress - Step 3 complete (HUD setup)
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# Clear stale plugin cache versions
CACHE_DIR="$HOME/.claude/plugins/cache/omc/oh-my-claudecode"
if [ -d "$CACHE_DIR" ]; then
LATEST=$(ls -1 "$CACHE_DIR" | sort -V | tail -1)
CLEARED=0
for dir in "$CACHE_DIR"/*; do
if [ "$(basename "$dir")" != "$LATEST" ]; then
rm -rf "$dir"
CLEARED=$((CLEARED + 1))
fi
done
[ $CLEARED -gt 0 ] && echo "Cleared $CLEARED stale cache version(s)" || echo "Cache is clean"
else
echo "No cache directory found (normal for new installs)"
fi# Detect installed version
INSTALLED_VERSION=""
# Try cache directory first
if [ -d "$HOME/.claude/plugins/cache/omc/oh-my-claudecode" ]; then
INSTALLED_VERSION=$(ls -1 "$HOME/.claude/plugins/cache/omc/oh-my-claudecode" | sort -V | tail -1)
fi
# Try .omc-version.json second
if [ -z "$INSTALLED_VERSION" ] && [ -f ".omc-version.json" ]; then
INSTALLED_VERSION=$(grep -oE '"version":\s*"[^"]+' .omc-version.json | cut -d'"' -f4)
fi
# Try CLAUDE.md header third (local first, then global)
if [ -z "$INSTALLED_VERSION" ]; then
if [ -f ".claude/CLAUDE.md" ]; then
INSTALLED_VERSION=$(grep -m1 "^# oh-my-claudecode" .claude/CLAUDE.md 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | sed 's/^v//')
elif [ -f "$HOME/.claude/CLAUDE.md" ]; then
INSTALLED_VERSION=$(grep -m1 "^# oh-my-claudecode" "$HOME/.claude/CLAUDE.md" 2>/dev/null | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+' | sed 's/^v//')
fi
fi
# Check npm for latest version
LATEST_VERSION=$(npm view oh-my-claude-sisyphus version 2>/dev/null)
if [ -n "$INSTALLED_VERSION" ] && [ -n "$LATEST_VERSION" ]; then
# Simple version comparison (assumes semantic versioning)
if [ "$INSTALLED_VERSION" != "$LATEST_VERSION" ]; then
echo ""
echo "UPDATE AVAILABLE:"
echo " Installed: v$INSTALLED_VERSION"
echo " Latest: v$LATEST_VERSION"
echo ""
echo "To update, run: claude /install-plugin oh-my-claudecode"
else
echo "You're on the latest version: v$INSTALLED_VERSION"
fi
elif [ -n "$LATEST_VERSION" ]; then
echo "Latest version available: v$LATEST_VERSION"
fi~/.claude/.omc-config.json# Read existing config or create empty object
CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"
if [ -f "$CONFIG_FILE" ]; then
EXISTING=$(cat "$CONFIG_FILE")
else
EXISTING='{}'
fi
# Set defaultExecutionMode (replace USER_CHOICE with "ultrawork" or "ecomode")
echo "$EXISTING" | jq --arg mode "USER_CHOICE" '. + {defaultExecutionMode: $mode, configuredAt: (now | todate)}' > "$CONFIG_FILE"
echo "Default execution mode set to: USER_CHOICE"echo "$EXISTING" | jq '. + {ecomode: {enabled: false}}' > "$CONFIG_FILE"
echo "Ecomode disabled completely"omc statsomc agentsomc tuiomc statsomc agentsomc/oh-my-claudecode:help/oh-my-claudecode:doctor# Detect beads (bd)
BD_VERSION=""
if command -v bd &>/dev/null; then
BD_VERSION=$(bd --version 2>/dev/null | head -1 || echo "installed")
fi
# Detect beads-rust (br)
BR_VERSION=""
if command -v br &>/dev/null; then
BR_VERSION=$(br --version 2>/dev/null | head -1 || echo "installed")
fi
# Report findings
if [ -n "$BD_VERSION" ]; then
echo "Found beads (bd): $BD_VERSION"
fi
if [ -n "$BR_VERSION" ]; then
echo "Found beads-rust (br): $BR_VERSION"
fi
if [ -z "$BD_VERSION" ] && [ -z "$BR_VERSION" ]; then
echo "No external task tools found. Using built-in Tasks."
fiCONFIG_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 is "builtin", "beads", or "beads-rust" based on user selection
echo "$EXISTING" | jq --arg tool "USER_CHOICE" '. + {taskTool: $tool, taskToolConfig: {injectInstructions: true, useMcp: false}}' > "$CONFIG_FILE"
echo "Task tool set to: USER_CHOICE"grep -q "oh-my-claudecode" ~/.claude/settings.json && echo "Plugin verified" || echo "Plugin NOT found - run: claude /install-plugin oh-my-claudecode"/oh-my-claudecode:mcp-setupsettings.json/team 3:executor 'fix all errors'CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS~/.claude/settings.jsonSETTINGS_FILE="$HOME/.claude/settings.json"
if [ -f "$SETTINGS_FILE" ]; then
echo "Current settings.json found"
cat "$SETTINGS_FILE"
else
echo "No settings.json found - will create one"
fi~/.claude/settings.jsonenv{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}SETTINGS_FILE="$HOME/.claude/settings.json"
if [ -f "$SETTINGS_FILE" ]; then
# Merge env var into existing settings, preserving everything else
TEMP_FILE=$(mktemp)
jq '.env = (.env // {} | . + {"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"})' "$SETTINGS_FILE" > "$TEMP_FILE" && mv "$TEMP_FILE" "$SETTINGS_FILE"
echo "Added CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS to existing settings.json"
else
# Create new settings.json with just the teams env var
mkdir -p "$(dirname "$SETTINGS_FILE")"
cat > "$SETTINGS_FILE" << 'SETTINGS_EOF'
{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}
SETTINGS_EOF
echo "Created settings.json with teams enabled"
fiteammateModeSETTINGS_FILE="$HOME/.claude/settings.json"
# TEAMMATE_MODE is "in-process" or "tmux" based on user choice
# Skip this if user chose "Auto" (that's the default)
jq --arg mode "TEAMMATE_MODE" '. + {teammateMode: $mode}' "$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" && mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE"
echo "Teammate display mode set to: TEAMMATE_MODE"~/.claude/.omc-config.jsonCONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"
if [ -f "$CONFIG_FILE" ]; then
EXISTING=$(cat "$CONFIG_FILE")
else
EXISTING='{}'
fi
# Replace MAX_AGENTS, AGENT_TYPE with user choices
echo "$EXISTING" | jq \
--argjson maxAgents MAX_AGENTS \
--arg agentType "AGENT_TYPE" \
'. + {team: {maxAgents: $maxAgents, defaultAgentType: $agentType, monitorIntervalMs: 30000, shutdownTimeoutMs: 15000}}' > "$CONFIG_FILE"
echo "Team configuration saved:"
echo " Max agents: MAX_AGENTS"
echo " Default agent: AGENT_TYPE"
echo " Model: teammates inherit your session model"SETTINGS_FILE="$HOME/.claude/settings.json"
# Verify JSON is valid
if jq empty "$SETTINGS_FILE" 2>/dev/null; then
echo "settings.json: valid JSON"
else
echo "ERROR: settings.json is invalid JSON! Restoring from backup..."
# The backup from Step 2 should still exist
exit 1
fi
# Verify teams env var is present
if jq -e '.env.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS' "$SETTINGS_FILE" > /dev/null 2>&1; then
echo "Agent teams: ENABLED"
else
echo "WARNING: Agent teams env var not found in settings.json"
fi
# Show final settings.json for user review
echo ""
echo "Final settings.json:"
jq '.' "$SETTINGS_FILE"~/.claude/settings.json{
"env": {
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1"
}
}/oh-my-claudecode:omc-setup --force# Save progress - Step 5.5 complete (Teams configured)
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# Check for existing 2.x artifacts
ls ~/.claude/commands/ralph-loop.md 2>/dev/null || ls ~/.claude/commands/ultrawork.md 2>/dev/nullOMC Setup Complete!
You don't need to learn any commands. I now have intelligent behaviors that activate automatically.
WHAT HAPPENS AUTOMATICALLY:
- Complex tasks -> I parallelize and delegate to specialists
- "plan this" -> I start a planning interview
- "don't stop until done" -> I persist until verified complete
- "stop" or "cancel" -> I intelligently stop current operation
MAGIC KEYWORDS (optional power-user shortcuts):
Just include these words naturally in your request:
| Keyword | Effect | Example |
|---------|--------|---------|
| ralph | Persistence mode | "ralph: fix the auth bug" |
| ralplan | Iterative planning | "ralplan this feature" |
| ulw | Max parallelism | "ulw refactor the API" |
| eco | Token-efficient mode | "eco refactor the API" |
| plan | Planning interview | "plan the new endpoints" |
| team | Coordinated agents | "/team 3:executor fix errors" |
**ralph includes ultrawork:** When you activate ralph mode, it automatically includes ultrawork's parallel execution. No need to combine keywords.
TEAMS:
Spawn coordinated agents with shared task lists and real-time messaging:
- /oh-my-claudecode:team 3:executor "fix all TypeScript errors"
- /oh-my-claudecode:team 5:build-fixer "fix build errors in src/"
Teams use Claude Code native tools (TeamCreate/SendMessage/TaskCreate).
MCP SERVERS:
Run /oh-my-claudecode:mcp-setup to add tools like web search, GitHub, etc.
HUD STATUSLINE:
The status bar now shows OMC state. Restart Claude Code to see it.
CLI ANALYTICS (if installed):
- omc - Full dashboard (stats + agents + cost)
- omc stats - View token usage and costs
- omc agents - See agent breakdown by cost
- omc tui - Launch interactive TUI dashboard
That's it! Just use Claude Code normally.OMC Setup Complete! (Upgraded from 2.x)
GOOD NEWS: Your existing commands still work!
- /ralph, /ultrawork, /plan, etc. all still function
WHAT'S NEW in 3.0:
You no longer NEED those commands. Everything is automatic now:
- Just say "don't stop until done" instead of /ralph
- Just say "fast" or "parallel" instead of /ultrawork
- Just say "plan this" instead of /plan
- Just say "stop" instead of /cancel
MAGIC KEYWORDS (power-user shortcuts):
| Keyword | Same as old... | Example |
|---------|----------------|---------|
| ralph | /ralph | "ralph: fix the bug" |
| ralplan | /ralplan | "ralplan this feature" |
| ulw | /ultrawork | "ulw refactor API" |
| eco | (new!) | "eco fix all errors" |
| plan | /plan | "plan the endpoints" |
| team | (new!) | "/team 3:executor fix errors" |
TEAMS (NEW!):
Spawn coordinated agents with shared task lists and real-time messaging:
- /oh-my-claudecode:team 3:executor "fix all TypeScript errors"
- Uses Claude Code native tools (TeamCreate/SendMessage/TaskCreate)
HUD STATUSLINE:
The status bar now shows OMC state. Restart Claude Code to see it.
CLI ANALYTICS (if installed):
- omc - Full dashboard (stats + agents + cost)
- omc stats - View token usage and costs
- omc agents - See agent breakdown by cost
- omc tui - Launch interactive TUI dashboard
Your workflow won't break - it just got easier!ghgh auth status &>/dev/nullgh api -X PUT /user/starred/Yeachan-Heo/oh-my-claudecode 2>/dev/null && echo "Thanks for starring! ⭐" || trueecho ""
echo "If you enjoy oh-my-claudecode, consider starring the repo:"
echo " https://github.com/Yeachan-Heo/oh-my-claudecode"
echo ""# Setup complete - clear temporary state file
rm -f ".omc/state/setup-state.json"
# Mark setup as completed in persistent config (prevents re-running full setup on updates)
CONFIG_FILE="$HOME/.claude/.omc-config.json"
mkdir -p "$(dirname "$CONFIG_FILE")"
# Get current OMC version from CLAUDE.md
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
# Add setupCompleted timestamp and version
echo "$EXISTING" | jq --arg ts "$(date -Iseconds)" --arg ver "$OMC_VERSION" \
'. + {setupCompleted: $ts, setupVersion: $ver}' > "$CONFIG_FILE"
echo "Setup completed successfully!"
echo "Note: Future updates will only refresh CLAUDE.md, not the full setup wizard."/oh-my-claudecode:omc-setup/oh-my-claudecode:omc-setup --local/oh-my-claudecode:omc-setup --global/oh-my-claudecode:omc-setup --force/oh-my-claudecode:omc-setup --help--helpOMC Setup - Configure oh-my-claudecode
USAGE:
/oh-my-claudecode:omc-setup Run initial setup wizard (or update if already configured)
/oh-my-claudecode:omc-setup --local Configure local project (.claude/CLAUDE.md)
/oh-my-claudecode:omc-setup --global Configure global settings (~/.claude/CLAUDE.md)
/oh-my-claudecode:omc-setup --force Force full setup wizard even if already configured
/oh-my-claudecode:omc-setup --help Show this help
MODES:
Initial Setup (no flags)
- Interactive wizard for first-time setup
- Configures CLAUDE.md (local or global)
- Sets up HUD statusline
- Checks for updates
- Offers MCP server configuration
- Configures team mode defaults (agent count, type, model)
- If already configured, offers quick update option
Local Configuration (--local)
- Downloads fresh CLAUDE.md to ./.claude/
- Backs up existing CLAUDE.md to .claude/CLAUDE.md.backup.YYYY-MM-DD
- Project-specific settings
- Use this to update project config after OMC upgrades
Global Configuration (--global)
- Downloads fresh CLAUDE.md to ~/.claude/
- Backs up existing CLAUDE.md to ~/.claude/CLAUDE.md.backup.YYYY-MM-DD
- Applies to all Claude Code sessions
- Cleans up legacy hooks
- Use this to update global config after OMC upgrades
Force Full Setup (--force)
- Bypasses the "already configured" check
- Runs the complete setup wizard from scratch
- Use when you want to reconfigure preferences
EXAMPLES:
/oh-my-claudecode:omc-setup # First time setup (or update CLAUDE.md if configured)
/oh-my-claudecode:omc-setup --local # Update this project
/oh-my-claudecode:omc-setup --global # Update all projects
/oh-my-claudecode:omc-setup --force # Re-run full setup wizard
For more info: https://github.com/Yeachan-Heo/oh-my-claudecode