
flow-next-opencode-ralph-init
by gmickel
OpenCode port of Flow-Next: plan-first workflows, Ralph autonomous mode (overnight coding with fresh context), multi-model review gates via Codex, re-anchoring to prevent drift, receipt-based gating.
SKILL.md
name: flow-next-opencode-ralph-init description: Scaffold repo-local Ralph autonomous harness under scripts/ralph/. Use when user runs /flow-next:ralph-init.
Ralph init
Scaffold 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
.opencode/skill/flow-next-opencode-ralph-init/templates/intoscripts/ralph/. - Copy
flowctlandflowctl.pyfrom$OPENCODE_DIR/bin/intoscripts/ralph/. - Set executable bit on
scripts/ralph/ralph.sh,scripts/ralph/ralph_once.sh, andscripts/ralph/flowctl.
Workflow
-
Resolve repo root and OpenCode dir:
ROOT="$(git rev-parse --show-toplevel)" OPENCODE_DIR="$ROOT/.opencode" TEMPLATE_DIR="$ROOT/.opencode/skill/flow-next-opencode-ralph-init/templates" -
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=0; if command -v rp-cli >/dev/null 2>&1; then HAVE_RP=1; elif [[ -x /opt/homebrew/bin/rp-cli || -x /usr/local/bin/rp-cli ]]; then HAVE_RP=1; fi
4. Determine review backend (skip if UPDATE_MODE=1):
- If rp-cli available, ask user:
```
Which review backend?
a) OpenCode (GPT‑5.2 High)
b) RepoPrompt (macOS, visual builder)
(Reply: "a", "opencode", "b", "rp", or just tell me)
```
Wait for response. Default if empty/ambiguous: `opencode`
- If only rp-cli available and user chooses rp: use `rp`
- Otherwise: use `opencode`
- If neither available and user requests none: use `none`
5. Copy files using bash (MUST use cp, NOT Write tool):
**If UPDATE_MODE=1 (updating):**
```bash
# Backup config.env
cp scripts/ralph/config.env /tmp/ralph-config-backup.env
# Update templates (preserves runs/)
cp "$TEMPLATE_DIR/ralph.sh" scripts/ralph/
cp "$TEMPLATE_DIR/ralph_once.sh" scripts/ralph/
cp "$TEMPLATE_DIR/prompt_plan.md" scripts/ralph/
cp "$TEMPLATE_DIR/prompt_work.md" scripts/ralph/
cp "$TEMPLATE_DIR/watch-filter.py" scripts/ralph/
cp "$OPENCODE_DIR/bin/flowctl" "$OPENCODE_DIR/bin/flowctl.py" scripts/ralph/
chmod +x scripts/ralph/ralph.sh scripts/ralph/ralph_once.sh scripts/ralph/flowctl
# Restore config.env
cp /tmp/ralph-config-backup.env scripts/ralph/config.env
If UPDATE_MODE=0 (fresh install):
mkdir -p scripts/ralph/runs
cp -R "$TEMPLATE_DIR/." scripts/ralph/
cp "$OPENCODE_DIR/bin/flowctl" "$OPENCODE_DIR/bin/flowctl.py" scripts/ralph/
chmod +x scripts/ralph/ralph.sh scripts/ralph/ralph_once.sh scripts/ralph/flowctl
Note: 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}}with<chosen> - Replace
{{WORK_REVIEW}}with<chosen>
- Replace
-
Print next steps (run from terminal, NOT inside OpenCode):
If UPDATE_MODE=1:
Ralph updated! Your config.env was preserved. 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 OpenCode): - Edit scripts/ralph/config.env to customize settings - ./scripts/ralph/ralph_once.sh (one iteration, observe) - ./scripts/ralph/ralph.sh (full loop, AFK) - Uninstall: rm -rf scripts/ralph/
Score
Total Score
Based on repository quality metrics
SKILL.mdファイルが含まれている
ライセンスが設定されている
100文字以上の説明がある
GitHub Stars 100以上
1ヶ月以内に更新
10回以上フォークされている
オープンIssueが50未満
プログラミング言語が設定されている
1つ以上のタグが設定されている
Reviews
Reviews coming soon

