ralphex-adopt
Convert plans from various source formats (OpenSpec, spec-kit, GitHub/GitLab issues with…
Smart-merge updated ralphex defaults into customized prompts/agents
$ npx -y skills add umputun/ralphex --skill ralphex-update --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/ralphex-updateContext preview
The summary Claude sees to decide when to auto-load this skill.
Smart-merge updated ralphex defaults into customized prompts/agents
description: Smart-merge updated ralphex defaults into customized prompts/agents allowed-tools: [Bash, Read, Write, Glob, AskUserQuestion]
**SCOPE**: Compare current embedded defaults with user's installed config, and intelligently merge updates into customized files. Preserves user intent while incorporating structural changes.
which ralphex
**If not found**, guide installation:
**Do not proceed until `which ralphex` succeeds.**
Create temp directory and dump embedded defaults:
DUMP_DIR=$(mktemp -d /tmp/ralphex-defaults-XXXX) ralphex --dump-defaults "$DUMP_DIR" echo "$DUMP_DIR"
Save the dump directory path for later use.
Resolve the user's config directory:
# check environment variable first
echo "${RALPHEX_CONFIG_DIR:-}"If `RALPHEX_CONFIG_DIR` is empty, use default:
Verify the directory exists:
ls -la <config-dir>/
If it doesn't exist, inform user that ralphex hasn't been configured yet and there's nothing to update.
ralphex installs config, prompt, and agent files with all content **commented out** (every line prefixed with `# `). At runtime, `stripComments()` removes these lines, finds nothing, and falls back to **embedded defaults** compiled into the binary. These all-commented files are functionally identical to missing files — they are do-nothing placeholders.
When ralphex is updated, new embedded defaults take effect **automatically** for every file that hasn't been customized. No file changes are needed.
A file is **customized** only if it contains at least one uncommented, non-empty line that was intentionally modified by the user. The `--dump-defaults` command produces the raw (uncommented) embedded content for comparison.
For each file in the defaults dump (`config`, `prompts/*.txt`, `agents/*.txt`), compare with the corresponding file in the user's config directory.
**Algorithm to detect customized files**: a file is customized if it contains at least one non-empty line that does NOT start with `#`. Files that are missing, empty, or contain only comment lines (`# ...`) and whitespace are do-nothing defaults.
**Classify each file into one of these categories:**
Note: files that exist only in the dump directory (no corresponding user file) are also do-nothing — do NOT offer to install them. Files that exist only in the user's config directory (no corresponding dump file) are user-created custom files — ignore them entirely.
**How to compare**: strip all `#`-prefixed lines from BOTH the user's file and the dump file, then compare the remaining non-comment content. This handles the config file where the dump has descriptive comment lines mixed with value lines — only the actual values matter for comparison.
Show the user a summary with two groups:
ralphex config update summary: No changes needed (N files): prompts/task.txt, prompts/review_first.txt, agents/quality.txt, prompts/codex.txt, ... Smart merge needed (N files): prompts/review_second.txt, agents/implementation.txt
If nothing needs merging, report "all config files are up to date — no changes needed" and skip to cleanup.
Otherwise, use AskUserQuestion to confirm proceeding:
description: "Review and merge customized files one at a time"
description: "Show what changed without modifying anything"
If user selects "Skip, just show details": for each file needing smart merge, show the diff between the user's file and the new default, then skip to Step 6 (Cleanup) without modifying any files.
For each customized file that needs merging:
1. **Read both versions** - the new default and the user's current version 2. **Analyze the differences semantically**:
3. **Propose a merged version** that:
4. **Show the user**:
5. **Use AskUserQuestion** for each file:
description: "Use the proposed merged version"
description: "Keep your current version unchanged"
description: "Replace with new def
Convert plans from various source formats (OpenSpec, spec-kit, GitHub/GitLab issues with…
Create structured implementation plan in docs/plans/