flow-next-ralph-init
npx machina-cli add skill gmickel/gmickel-claude-marketplace/flow-next-ralph-init --openclawRalph init
Scaffold or update repo-local Ralph harness. Opt-in only.
Rules
- Only create/update
scripts/ralph/in the current repo. - If
scripts/ralph/already exists, offer to update (preserves config.env). - Copy templates from
templates/intoscripts/ralph/. - Copy
flowctlandflowctl.pyfrom${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/intoscripts/ralph/. - Set executable bit on
scripts/ralph/ralph.sh,scripts/ralph/ralph_once.sh, andscripts/ralph/flowctl.
Workflow
-
Resolve repo root:
git rev-parse --show-toplevel -
Check if
scripts/ralph/exists:- If exists: ask "Update existing Ralph setup? (preserves config.env and runs/) [y/n]"
- If no: stop
- If yes: set UPDATE_MODE=1
- If not exists: set UPDATE_MODE=0
- If exists: ask "Update existing Ralph setup? (preserves config.env and runs/) [y/n]"
-
Detect available review backends (skip if UPDATE_MODE=1):
HAVE_RP=$(which rp-cli >/dev/null 2>&1 && echo 1 || echo 0) HAVE_CODEX=$(which codex >/dev/null 2>&1 && echo 1 || echo 0) -
Determine review backend (skip if UPDATE_MODE=1):
- If BOTH available, ask user (do NOT use AskUserQuestion tool):
Wait for response. Default if empty/ambiguous:Both RepoPrompt and Codex available. Which review backend? a) RepoPrompt (macOS, visual builder) b) Codex CLI (cross-platform, GPT 5.2 High) (Reply: "a", "rp", "b", "codex", or just tell me)rp - If only rp-cli available: use
rp - If only codex available: use
codex - If neither available: use
none
- If BOTH available, ask user (do NOT use AskUserQuestion tool):
-
Copy files using bash (MUST use cp, NOT Write tool):
If UPDATE_MODE=1 (updating):
# Backup config.env cp scripts/ralph/config.env /tmp/ralph-config-backup.env # Update templates (preserves runs/) cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/ralph.sh" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/ralph_once.sh" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/prompt_plan.md" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/prompt_work.md" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/prompt_completion.md" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/watch-filter.py" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl" "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl.py" scripts/ralph/ mkdir -p scripts/ralph/hooks cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/hooks/ralph-guard.py" scripts/ralph/hooks/ chmod +x scripts/ralph/ralph.sh scripts/ralph/ralph_once.sh scripts/ralph/flowctl scripts/ralph/hooks/ralph-guard.py # Restore config.env cp /tmp/ralph-config-backup.env scripts/ralph/config.envIf UPDATE_MODE=0 (fresh install):
mkdir -p scripts/ralph/runs scripts/ralph/hooks cp -R "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/skills/flow-next-ralph-init/templates/." scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl" "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl.py" scripts/ralph/ cp "${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/hooks/ralph-guard.py" scripts/ralph/hooks/ chmod +x scripts/ralph/ralph.sh scripts/ralph/ralph_once.sh scripts/ralph/flowctl scripts/ralph/hooks/ralph-guard.pyNote:
cp -R templates/.copies all files including dotfiles (.gitignore). -
Edit
scripts/ralph/config.envto set the chosen review backend (skip if UPDATE_MODE=1):- Replace
PLAN_REVIEW={{PLAN_REVIEW}}withPLAN_REVIEW=<chosen> - Replace
WORK_REVIEW={{WORK_REVIEW}}withWORK_REVIEW=<chosen> - Replace
COMPLETION_REVIEW={{COMPLETION_REVIEW}}withCOMPLETION_REVIEW=<chosen>
- Replace
-
Print next steps (run from terminal, NOT inside Claude Code):
If UPDATE_MODE=1:
Ralph updated! Your config.env was preserved. Changes in this version: - Removed local hooks requirement (plugin hooks work when installed normally) Run from terminal: - ./scripts/ralph/ralph_once.sh (one iteration, observe) - ./scripts/ralph/ralph.sh (full loop, AFK)If UPDATE_MODE=0:
Ralph initialized! Next steps (run from terminal, NOT inside Claude Code): - Edit scripts/ralph/config.env to customize settings - ./scripts/ralph/ralph_once.sh (one iteration, observe) - ./scripts/ralph/ralph.sh (full loop, AFK) Maintenance: - Re-run /flow-next:ralph-init after plugin updates to refresh scripts - Uninstall (run manually): rm -rf scripts/ralph/
Source
git clone https://github.com/gmickel/gmickel-claude-marketplace/blob/main/plugins/flow-next/skills/flow-next-ralph-init/SKILL.mdView on GitHub Overview
flow-next-ralph-init scaffolds or updates a repo-local Ralph harness inside your project by creating scripts/ralph and related resources. It preserves config.env when updating and copies templates and flowctl utilities from the plugin root. This opt-in step ensures a self-contained Ralph environment for local testing and automation.
How This Skill Works
The tool resolves the repository root, checks for the existence of scripts/ralph, and either updates an existing harness or creates a fresh one. It copies templates from templates/ into scripts/ralph, brings in flowctl and flowctl.py from the plugin root, and sets executable permissions on the Ralph scripts and hooks.
When to Use It
- When you want to add a repo-local Ralph harness to a new repository.
- When updating an existing scripts/ralph/ setup to pick up new templates while preserving config.env.
- When the plugin provides updated templates for Ralph and you need to apply them locally.
- When you need the flowctl and related scripts available under scripts/ralph/ with proper permissions.
- When you run /flow-next:ralph-init to scaffold or update the Ralph harness.
Quick Start
- Step 1: Run the command that triggers Ralph init (e.g., /flow-next:ralph-init).
- Step 2: If prompted, choose to update or perform a fresh install; confirm if updating.
- Step 3: Review the newly created scripts/ralph/ and commit the changes to your repo.
Best Practices
- Limit changes to the current repo by only creating/updating scripts/ralph/ in place.
- Back up config.env before performing an update (as the workflow prescribes).
- Use the cp commands shown in the workflow to copy templates and flowctl utilities.
- Preserve existing runs/ configuration where updating to avoid losing history.
- Ensure the executable bits are set on ralph.sh, ralph_once.sh, and flowctl.
Example Use Cases
- A new project scaffolds a local Ralph harness to run repo-local tests.
- An existing repository updates Ralph to latest templates, preserving runs and config.env.
- A team migrates from a central Ralph install to a repo-local harness for isolation.
- You ensure scripts/ralph/flowctl and ralph hooks are present and executable.
- You run /flow-next:ralph-init and review prompts for backing up config.env.