Ralph: 自动化 Claude, Gemini, 和 Grok CLI 循环 - Openclaw Skills

作者:互联网

2026-03-26

AI教程

什么是 Ralph: AI 命令行自动化循环生成器?

Ralph 通过生成适用于 PowerShell, Bash 和 CMD 的即用型 Shell 命令,简化了重复性 AI 提示词的处理过程。通过利用 PROMPT.md 文件作为核心输入,Ralph 使开发人员能够使用 Claude Code, Gemini CLI 或 Grok CLI 执行复杂的多运行序列,无需人工干预。该工具是 Openclaw Skills 集合的重要组成部分,旨在弥补静态提示词与动态代理自动化之间的差距。它自动处理不同 AI 模型标志、Shell 语法和安全权限的细微差别,确保您的自动化保持高效且不被中断。

下载入口:https://github.com/openclaw/skills/tree/main/skills/walkamolee/ralph-loop-writer

安装与下载

1. ClawHub CLI

从源直接安装技能的最快方式。

npx clawhub@latest install ralph-loop-writer

2. 手动安装

将技能文件夹复制到以下位置之一

全局模式 ~/.openclaw/skills/ 工作区 /skills/

优先级:工作区 > 本地 > 内置

3. 提示词安装

将此提示词复制到 OpenClaw 即可自动安装。

请帮我使用 Clawhub 安装 ralph-loop-writer。如果尚未安装 Clawhub,请先安装(npm i -g clawhub)。

Ralph: AI 命令行自动化循环生成器 应用场景

  • 使用 Claude Code 迭代优化代码,直到达到特定的开发目标。
  • 使用循环提示词通过 Gemini CLI 批量处理数据或文本。
  • 使用 Grok CLI 为代理编码任务设置限时研究会话。
  • 自动化需要多个 AI 步骤的长运行任务,并内置暂停间隔。
  • 创建故障安全循环,当在工作区检测到特定文件触发器时自动停止。
Ralph: AI 命令行自动化循环生成器 工作原理
  1. 用户在其代理环境中启动 Ralph 技能以开始配置过程。
  2. Ralph 提示用户选择首选的 AI 命令行工具(如 Claude Code, Gemini 或 Grok)以及特定的模型版本。
  3. 用户指定其操作系统环境,以确保 PowerShell, Windows CMD 或 Bash 的语法正确。
  4. Ralph 收集特定参数,如迭代次数、时间限制、延迟间隔或文件监控触发器。
  5. 该技能生成一个带有时间戳的 Markdown 文件,包含针对目标 Shell 优化的精确、可直接复制粘贴的命令。
  6. 用户执行生成的命令,使用本地 Openclaw Skills 基础架构启动自动化 AI 工作流。

Ralph: AI 命令行自动化循环生成器 配置指南

要在 Openclaw Skills 生态系统中使用 Ralph,请确保系统路径中已安装目标命令行工具。该技能本身不需要复杂的配置;只需在运行生成的命令之前,确保工作目录中存在 PROMPT.md 文件。您可以使用以下命令验证环境:

# 确保已安装 Claude Code 或 Gemini CLI
claude --version
gemini --version

Ralph: AI 命令行自动化循环生成器 数据架构与分类体系

Ralph 为每个命令请求生成一个结构化的 Markdown 文件,以维护您的 Openclaw Skills 自动化历史记录并提供清晰的执行指令。

属性 描述
文件名 在当前目录下创建为 ralphcommand-YYYY-MM-DD-HHMMSS.md
命令块 适用于 Shell 的代码块(PowerShell, CMD 或 Bash),可直接复制粘贴。
安全触发器 包含 Ctrl+C 或创建 STOP.txt 文件以停止循环的指令。
元数据 记录生成过程中使用的工具、模型和 Shell 环境参数。

name: ralph description: "Generate Claude Code, Gemini CLI, or Grok CLI automation loop commands. Asks questions about your requirements and outputs a ready-to-run command for PowerShell, Windows CMD, or Bash/Linux." allowed-tools: - AskUserQuestion - Write - Read

Ralph Command Generator

Generate optimized loop commands for automating Claude Code, Gemini CLI, or Grok CLI with PROMPT.md.

Step 1: Choose AI Tool

Use AskUserQuestion:

  • Question: "Which AI CLI tool do you want to use?"
  • Header: "AI Tool"
  • Options:
    1. "Claude Code (Recommended)" - "Claude AI assistant CLI"
    2. "Gemini CLI" - "Google Gemini AI assistant"
    3. "Grok CLI" - "xAI Grok AI assistant with agentic coding"

Store the choice for later.

Step 2: Choose Model

Use AskUserQuestion based on AI tool choice:

If Claude Code selected:

  • Question: "Which Claude model do you want to use?"
  • Header: "Model"
  • Options:
    1. "Default (Recommended)" - "Use default model (currently Sonnet 4.5)"
    2. "Haiku" - "Fastest and most cost-effective"
    3. "Sonnet" - "Balanced performance and cost"
    4. "Opus" - "Most capable, higher cost"

If Gemini CLI selected:

  • Question: "Which Gemini model do you want to use?"
  • Header: "Model"
  • Options:
    1. "Default (Recommended)" - "Use default model"
    2. "gemini-3-flash" - "Latest Gemini 3, fastest and most cost-effective"
    3. "gemini-3-pro" - "Latest Gemini 3, most capable for complex tasks"
    4. "gemini-2.5-flash" - "Stable production model, fast"
    5. "gemini-2.5-pro" - "Stable production model, more capable"

If Grok CLI selected:

  • Question: "Which Grok model do you want to use?"
  • Header: "Model"
  • Options:
    1. "Default (Recommended)" - "Use grok-code-fast-1, optimized for fast code generation and agentic loops"
    2. "grok-4-latest" - "Latest Grok 4, most capable for complex reasoning"
    3. "grok-beta" - "Preview of upcoming features"

Store the choice for later.

Step 3: Choose Operating System

Use AskUserQuestion:

  • Question: "Which shell environment are you using?"
  • Header: "Shell"
  • Options:
    1. "PowerShell (Recommended)" - "Windows PowerShell"
    2. "Windows CMD" - "Command Prompt (cmd.exe)"
    3. "Bash/Linux" - "Linux, Mac, or WSL"

Store the choice for later.

Step 4: Choose Complexity Level

Use AskUserQuestion:

  • Question: "What level of control do you need?"
  • Header: "Complexity"
  • Options:
    1. "Simple (Recommended)" - "Basic loop with minimal options"
    2. "Intermediate" - "Combine 2 control mechanisms"
    3. "Advanced" - "Full control with multiple safeguards"

Step 5: Choose Loop Type (Based on Complexity)

If Simple:

Use AskUserQuestion:

  • Question: "What type of loop?"
  • Header: "Loop Type"
  • Options:
    1. "Fixed count (Recommended)" - "Run exactly N times"
    2. "Infinite with delay" - "Run forever with pauses"
    3. "Stop file trigger" - "Run until STOP.txt exists"

If Intermediate:

Use AskUserQuestion:

  • Question: "What combination do you need?"
  • Header: "Features"
  • multiSelect: true
  • Options:
    1. "Fixed iterations" - "Run max N times"
    2. "Time limit" - "Run for max X minutes"
    3. "Stop file" - "Stop when STOP.txt appears"
    4. "Delay between runs" - "Pause X seconds"
    5. "Show counter" - "Display run number"
    6. "File monitoring" - "Stop at file size/lines"

If Advanced:

Use AskUserQuestion:

  • Question: "What features do you want?"
  • Header: "Features"
  • multiSelect: true
  • Options:
    1. "Max iterations (Recommended)" - "Limit runs"
    2. "Time limit (Recommended)" - "Max duration"
    3. "Stop file (Recommended)" - "Manual stop"
    4. "Delay between runs" - "Pause X seconds"
    5. "Timestamp logging" - "Show time of each run"
    6. "Counter display" - "Show run number"

Step 6: Gather Parameters

Based on selected features, ask for values:

If fixed iterations selected:

  • Question: "How many iterations?"
  • Options: "5 (Recommended)", "10", "20", "50", "100", "Custom"

If time limit selected:

  • Question: "Maximum duration?"
  • Options: "10 minutes (Recommended)", "30 minutes", "1 hour", "Custom"

If delay selected:

  • Question: "Delay between runs?"
  • Options: "5 seconds (Recommended)", "10 seconds", "30 seconds", "Custom"

If file monitoring selected:

  • Question: "Monitor by?"
  • Options: "File size (e.g., 5KB)", "Line count (e.g., 50 lines)", "Content (e.g., 'THE END')"

Step 7: Generate Command

Build the appropriate command based on:

  1. AI tool choice (Claude or Gemini)
  2. Model choice
  3. Shell choice (PowerShell, CMD, Bash)
  4. Complexity level
  5. Selected features
  6. Parameter values

IMPORTANT - Command Syntax:

For Claude Code (PowerShell/Bash): Use claude-code (NOT claude -p) to accept piped input. The -p flag requires an argument, not pipe.

  • Default: Get-Content PROMPT.md -Raw | claude-code --dangerously-skip-permissions
  • Haiku: Get-Content PROMPT.md -Raw | claude-code --model haiku --dangerously-skip-permissions
  • Sonnet: Get-Content PROMPT.md -Raw | claude-code --model sonnet --dangerously-skip-permissions
  • Opus: Get-Content PROMPT.md -Raw | claude-code --model opus --dangerously-skip-permissions

For Claude Code (Bash):

  • Default: cat PROMPT.md | claude-code --dangerously-skip-permissions
  • With model: cat PROMPT.md | claude-code --model haiku --dangerously-skip-permissions

For Gemini CLI (PowerShell): Gemini CLI accepts stdin piping.

  • Default: Get-Content PROMPT.md -Raw | gemini --yolo
  • gemini-3-flash: Get-Content PROMPT.md -Raw | gemini --model gemini-3-flash --yolo
  • gemini-3-pro: Get-Content PROMPT.md -Raw | gemini --model gemini-3-pro --yolo
  • gemini-2.5-flash: Get-Content PROMPT.md -Raw | gemini --model gemini-2.5-flash --yolo
  • gemini-2.5-pro: Get-Content PROMPT.md -Raw | gemini --model gemini-2.5-pro --yolo

For Grok CLI (PowerShell):

  • Default: Get-Content PROMPT.md -Raw | grok-auto (uses default model from GROK_MODEL env var, auto-approves permissions)
  • grok-code-fast-1: Get-Content PROMPT.md -Raw | grok-auto -m grok-code-fast-1
  • grok-4-latest: Get-Content PROMPT.md -Raw | grok-auto -m grok-4-latest
  • grok-beta: Get-Content PROMPT.md -Raw | grok-auto -m grok-beta

Command Templates

IMPORTANT - Placeholder Replacement:

For Claude Code: Replace [AI_COMMAND_WITH_PROMPT] with the FULL command including the prompt argument:

  • Default: claude -p (Get-Content PROMPT.md -Raw) --dangerously-skip-permissions
  • With model: claude -p (Get-Content PROMPT.md -Raw) --model haiku --dangerously-skip-permissions

For Gemini CLI: Replace [AI_COMMAND_WITH_PROMPT] with piped command:

  • Default: Get-Content PROMPT.md -Raw | gemini --yolo
  • With model: Get-Content PROMPT.md -Raw | gemini --model gemini-3-flash --yolo

For Grok CLI: Replace [AI_COMMAND_WITH_PROMPT] with piped command:

  • Default: Get-Content PROMPT.md -Raw | grok-auto
  • With model: Get-Content PROMPT.md -Raw | grok-auto -m grok-4-latest

CRITICAL: Claude Code requires the prompt as a command-line argument. Piping does NOT work with claude -p.

PowerShell - Simple Fixed:

for ($i=1; $i -le N; $i++) { $start = Get-Date; Write-Host "`n=== Run $i/N ===" -ForegroundColor Cyan; [AI_COMMAND_WITH_PROMPT]; $duration = ((Get-Date) - $start).TotalSeconds; Write-Host "??  Time: $([math]::Round($duration, 2))s" -ForegroundColor Magenta }

PowerShell - Simple Fixed + Delay:

for ($i=1; $i -le N; $i++) { $start = Get-Date; Write-Host "`n=== Run $i/N ===" -ForegroundColor Cyan; [AI_COMMAND_WITH_PROMPT]; $duration = ((Get-Date) - $start).TotalSeconds; Write-Host "??  Time: $([math]::Round($duration, 2))s" -ForegroundColor Magenta; if ($i -lt N) { Write-Host "??  Waiting X seconds..." -ForegroundColor Yellow; Start-Sleep -Seconds X } }

PowerShell - Simple Infinite + Delay:

$i=1; while ($true) { $start = Get-Date; Write-Host "`n=== Run $i ===" -ForegroundColor Cyan; [AI_COMMAND_WITH_PROMPT]; $duration = ((Get-Date) - $start).TotalSeconds; Write-Host "??  Time: $([math]::Round($duration, 2))s" -ForegroundColor Magenta; Write-Host "??  Waiting X seconds..." -ForegroundColor Yellow; Start-Sleep -Seconds X; $i++ }

PowerShell - Advanced Full Control:

$end = (Get-Date).AddMinutes(M); for ($i=1; $i -le N -and (Get-Date) -lt $end -and -not (Test-Path STOP.txt); $i++) { $start = Get-Date; Write-Host "`n[$(Get-Date -Format 'HH:mm:ss')] Run $i" -ForegroundColor Cyan; [AI_COMMAND_WITH_PROMPT]; $duration = ((Get-Date) - $start).TotalSeconds; Write-Host "??  Time: $([math]::Round($duration, 2))s" -ForegroundColor Magenta; if ($i -lt N) { Write-Host "??  Waiting X seconds..." -ForegroundColor Yellow; Start-Sleep -Seconds X } }; Write-Host "`n? Complete!" -ForegroundColor Green

CMD - Simple Fixed:

for /L %i in (1,1,N) do @(echo. & echo === Run %i === & type PROMPT.md | [AI_COMMAND])

Note: CMD has limited capabilities. For time tracking, recommend PowerShell.

CMD - Simple Infinite + Delay:

for /L %i in (1,0,2) do @(echo. & echo === Run %i === & type PROMPT.md | [AI_COMMAND] & timeout /t X /nobreak > nul)

CMD - Advanced:

for /L %i in (1,1,N) do @(if exist STOP.txt exit & echo. & echo [%time%] Run %i & type PROMPT.md | [AI_COMMAND] & timeout /t X /nobreak > nul)

Note: For time tracking, use PowerShell (see RalphPowerShellComands.md).

Bash - Simple Fixed:

for i in {1..N}; do echo -e "
=== Run $i/N ==="; start=$(date +%s); cat PROMPT.md | [AI_COMMAND]; dur=$(($(date +%s) - start)); echo "??  Time: ${dur}s"; done

Bash - Simple Fixed + Delay:

for i in {1..N}; do echo -e "
=== Run $i/N ==="; start=$(date +%s); cat PROMPT.md | [AI_COMMAND]; dur=$(($(date +%s) - start)); echo "??  Time: ${dur}s"; [ $i -lt N ] && { echo "??  Waiting X seconds..."; sleep X; }; done

Bash - Simple Infinite + Delay:

i=1; while :; do echo -e "
=== Run $i ==="; start=$(date +%s); cat PROMPT.md | [AI_COMMAND]; dur=$(($(date +%s) - start)); echo "??  Time: ${dur}s"; echo "??  Waiting X seconds..."; sleep X; ((i++)); done

Bash - Advanced:

end=$(($(date +%s) + M*60)); for i in {1..N}; do [ $(date +%s) -ge $end ] && break; [ -f STOP.txt ] && break; echo -e "
[$(date +%H:%M:%S)] Run $i"; start=$(date +%s); cat PROMPT.md | [AI_COMMAND]; dur=$(($(date +%s) - start)); echo "??  Time: ${dur}s"; [ $i -lt N ] && { echo "??  Waiting X seconds..."; sleep X; }; done; echo -e "
? Complete!"

Step 8: Create Command File

Create a timestamped filename in the format: ralphcommand-YYYY-MM-DD-HHMMSS.md

Example: ralphcommand-2026-01-14-233045.md

Use the Write tool to create this file in the current directory with:

File structure:

# Ralph Command

Generated: [timestamp]
Shell: [PowerShell/CMD/Bash]

## Command

```[shell-type]
[THE ACTUAL COMMAND]

How to run

  1. Make sure you have a PROMPT.md file in this directory
  2. Copy the command above
  3. Paste into your [PowerShell/CMD/Bash] terminal
  4. Press Enter

How to stop

  • Press Ctrl+C at any time [- OR create STOP.txt: echo $null > STOP.txt / touch STOP.txt] (if stop file enabled)

What it does

Runs [claude/gemini/grok] with PROMPT.md as input [N times / for M minutes / until stopped]. [Pauses X seconds between runs.] [Shows timestamp and run number.] [Displays execution time for each run.]


## Step 9: Notify User

After creating the file, tell the user the exact filename created:

? Created ralphcommand-YYYY-MM-DD-HHMMSS.md in your current directory!

The file contains your command ready to run. Just open it and copy the command.

For more variations and explanations, see:

  • RalphPowerShellComands.md - Full PowerShell reference
  • RalphWindowsCommands.md - Full CMD reference
  • RalphLinuxCommands.md - Full Bash reference
  • RalphGemini.md - Full Gemini CLI guide
  • RalphGrok.md - Full Grok CLI guide

## Notes

- **CRITICAL FOR CLAUDE CODE**: The prompt MUST be passed as a command-line argument, NOT via stdin pipe. Use `claude -p (Get-Content PROMPT.md -Raw) --dangerously-skip-permissions`. Piping does NOT work with `claude -p`.
- **For Gemini and Grok**: Stdin piping works fine. Use `Get-Content PROMPT.md -Raw | gemini --yolo` or `Get-Content PROMPT.md -Raw | grok-auto`.
- **Model Selection is Optional**: Always ask which model, but "Default" option omits the `--model` flag
- **For Claude Code (PowerShell)**:
  - Default format: `claude -p (Get-Content PROMPT.md -Raw) --dangerously-skip-permissions`
  - With model: `claude -p (Get-Content PROMPT.md -Raw) --model  --dangerously-skip-permissions`
  - Models: `haiku`, `sonnet`, `opus`
- **For Gemini CLI**:
  - Default format: `Get-Content PROMPT.md -Raw | gemini --yolo`
  - With model: `Get-Content PROMPT.md -Raw | gemini --model  --yolo`
  - Models: `gemini-3-flash`, `gemini-3-pro`, `gemini-2.5-flash`, `gemini-2.5-pro`
  - Note: `-p` flag is deprecated in Gemini
- **For Grok CLI**:
  - Use `grok-auto` PowerShell function which calls xAI API directly (perfect for automation)
  - Default format: `Get-Content PROMPT.md -Raw | grok-auto` (no -m flag, uses GROK_MODEL env var if set)
  - With model: `Get-Content PROMPT.md -Raw | grok-auto -m `
  - Models: `grok-code-fast-1`, `grok-4-latest`, `grok-beta`, `grok-4`
  - Note: `grok-auto` is a PowerShell function that calls the xAI API directly (no CLI needed)
  - Default model (grok-code-fast-1 via GROK_MODEL env var) is recommended for automation loops (fastest responses)
- Default to "Recommended" options when user is unsure
- Keep commands on one line when possible for easy copy-paste
- **Always include time tracking** - Show how long each run takes using `Get-Date` (PowerShell) or `date +%s` (Bash)
- **Always create timestamped file** - Format: `ralphcommand-YYYY-MM-DD-HHMMSS.md`
- **DO NOT include cost tracking** - No Get-LastCallCost function, no cost calculations, only time tracking
- For cost tracking with Claude, tell users to check https://console.anthropic.com for actual API usage
- When generating the final command for PowerShell:
  - For Claude: Replace `[AI_COMMAND_WITH_PROMPT]` with the full claude command including prompt argument
  - For Gemini/Grok: The piping is included in the template, just replace `[AI_COMMAND]` with the command after the pipe