Ralph CLI Options 完全参考指南:Claude Code 自主开发循环的每一个参数与.ralphrc配置模式
【免费下载链接】ralph-claude-codeAutonomous AI development loop for Claude Code with intelligent exit detection项目地址: https://gitcode.com/GitHub_Trending/ra/ralph-claude-code
导读
ralph-claude-code是一个面向 Claude Code 的自主 AI 开发循环工具:它反复调用 Claude Code CLI,在每一次迭代中注入循环上下文、执行工具调用、分析响应、判定任务是否完成,并通过熔断器与速率限制防止失控消耗。本文是 docs/CLI_OPTIONS.md 的深度展开版,覆盖全部ralph命令行参数、底层实现机制以及.ralphrc配置模式。读完你将掌握:每个核心参数如何影响循环行为、--output-format json与text两种退出检测机制的本质差异、如何为本地工作站 / Docker / 离线 / CI 场景编排配置,以及如何使用--backup/--rollback构建可回滚的自动化工作流。
快速上手:
ralph --help可查看全部参数摘要。本文对每个参数都给出深度说明、默认值、对应.ralphrc键、示例与源码依据。所有配置的权威源头见 templates/ralphrc.template,参数解析实现见 ralph_loop.sh(参数解析入口位于ralph_loop.sh第 3032 行起的while循环,帮助文本见第 2915 行的show_help())。
一、核心标志(Core Flags)
1.1-h, --help—— 查看帮助
显示帮助信息并退出。帮助文本由 ralph_loop.sh 的show_help()生成,不仅列出全部标志,还附带了示例工作流(ralph-setup my-project→cd my-project→ralph --monitor)与生成的运行产物文件清单。
ralph --help1.2-c, --calls NUM—— 每小时 API 调用上限
限制每小时最多发起的 Claude API 调用次数,用于速率限制(rate-limiting)。
| 默认值 | .ralphrc键 |
|---|---|
100 | MAX_CALLS_PER_HOUR |
ralph --calls 50 # 保守策略——慢速、精细的项目 ralph --calls 200 # 激进策略——大批量任务积压从源码看,调用计数由ralph_loop.sh的init_call_tracking()按小时重置(.ralph/.call_count、.ralph/.last_reset),can_make_call()(ralph_loop.sh第 801 行起)在每次执行前检查计数是否达到上限,达到后由wait_for_reset()(第 869 行起)显示倒计时并睡眠至整点重置。--calls解析在第 3038 行,未做数值校验,因此建议用合理正整数。
提示:项目初始化阶段应把该值调低,避免
.ralph/PROMPT.md尚未调优时循环失控。
1.3-p, --prompt FILE—— 循环驱动提示词文件
指定驱动每一轮循环迭代的提示词文件路径。
| 默认值 | .ralphrc键 |
|---|---|
.ralph/PROMPT.md | PROMPT_FILE |
ralph --prompt .ralph/PROMPT_experimental.mdPROMPT_FILE在ralph_loop.sh第 52 行定义,运行时通过build_claude_command()把提示词内容作为-p参数传给 Claude CLI。在--monitor模式下(第 545-547 行),当提示词路径非默认时会自动把--prompt转发给子进程。
1.4-s, --status—— 查看当前循环状态
打印.ralph/status.json中的当前循环状态并退出,不会启动循环。状态文件由update_status()(第 714 行起)写入,包含时间戳、循环计数、本小时已用调用数/Token 数、上限、最近动作、状态、退出原因、沙箱信息与下次重置时间等字段。实现见第 3046-3054 行:存在则cat "$STATUS_FILE" | jq .美化输出,不存在则提示 Ralph 可能未运行。
ralph --status1.5-m, --monitor—— 集成 tmux 监控会话
启动一个集成的 tmux 会话:左窗格运行循环,右上窗格用tail -f实时查看 Claude 输出(.ralph/live.log),右下窗格运行ralph-monitor状态监控面板。需要本机安装tmux。
ralph --monitor ralph --monitor --calls 50 --prompt my_prompt.md交互式使用首选。无需另开终端即可实时看到循环进度、熔断器状态与 API 调用数。
setup_tmux_session()(第 480-658 行)的实现细节很值得注意:
- 自动检测用户的
base-index与pane-base-index(先启动 tmux server 再查询,避免首次运行时检测失败导致窗格编号错位); - 子进程命令会转发所有非默认的 CLI 参数(
--calls、--prompt、--output-format、--verbose、--timeout、--allowed-tools、--no-continue、--session-expiry、--auto-reset-circuit、--backup,以及 GitHub issue 生命周期、沙箱、同步过滤等参数),保证监控模式与普通运行的配置语义一致; - 循环命令以
; tmux kill-session串联,循环结束后整个 tmux 会话自动销毁,避免tail -f与监控面板把会话永久挂住(对应 issue #176)。
1.6-v, --verbose—— 详细进度输出
显示执行过程中的详细进度更新(同时写入 stdout 与日志文件.ralph/logs/ralph.log)。解析为VERBOSE_PROGRESS=true(第 3059-3062 行);RALPH_VERBOSE=true环境变量与.ralphrc键效果相同。
ralph --verbose ralph --live --verbose # 实时流 + 详细日志1.7-l, --live—— 实时流式输出
将 Claude Code 输出实时流式传输到终端。若此前把--output-format设为text,会自动切换为json。
ralph --live ralph --live --timeout 30注意:Live 模式通过流式管道输出(
stream-json+jq过滤),输出较为冗长——长时间运行建议用--monitor获得更整洁的视图。
从源码看(第 1897-1920 行),Live 模式把--output-format的值替换为stream-json并追加--verbose --include-partial-messages两个流式必需标志,再用jq过滤text_delta、tool_use等事件实时渲染。两个降级保障:缺少jq时回退到后台模式(第 1883-1886 行);text输出格式会被强制覆盖为json(第 1828-1831 行)。对应测试见 tests/unit/test_cli_modern.bats。
1.8-t, --timeout MIN—— 单次调用超时
限制单次 Claude Code 调用允许运行的最大分钟数,超时以退出码 124 终止。
| 默认值 | .ralphrc键 |
|---|---|
15 | CLAUDE_TIMEOUT_MINUTES |
ralph --timeout 5 # 快速任务 / 紧密反馈环 ralph --timeout 60 # 长时间重构 / 大型代码库参数解析(第 3067-3075 行)限定取值范围为 1 到 120 分钟。超时后的处理逻辑(第 2324-2396 行,对应 issue #198)会检查 git 在超时期间是否有变更:
- 有文件变更→ 记为"生产性超时"(productive timeout):对已有输出继续运行响应分析,循环继续,进度文件写入
{"status": "timed_out_productive", ...}; - 无文件变更→ 记为"空闲超时"(idle timeout):本轮计为失败迭代。
文件变更通过对比循环开始时的git rev-parse HEAD(保存在.ralph/.loop_start_sha,第 1790-1796 行)与当前 HEAD、工作区、暂存区 diff 计算得出。
二、熔断器标志(Circuit Breaker Flags)
熔断器是 ralph 防止 token 失控消耗的核心安全机制,基于 Michael Nygard《Release It!》的经典模式实现,源码见 lib/circuit_breaker.sh。它维护三种状态:CLOSED(正常,检测到进展)、HALF_OPEN(监控模式,试探恢复)、OPEN(故障,执行暂停)。状态持久化在.ralph/.circuit_breaker_state,状态迁移历史在.ralph/.circuit_breaker_history。
2.1--reset-circuit—— 手动复位熔断器
将熔断器重置为CLOSED(正常)状态并退出。在解决触发熔断的根本问题后使用。实现(第 3076-3084 行)调用reset_circuit_breaker "Manual reset via command line",该函数把状态文件重置为CLOSED并清零所有连续计数(lib/circuit_breaker.sh),同时会调用reset_session "manual_circuit_reset"清理会话。
ralph --reset-circuit2.2--circuit-status—— 查看熔断器状态
打印当前熔断器状态(CLOSED、HALF_OPEN或OPEN)并退出。实现调用show_circuit_status()(lib/circuit_breaker.sh),输出状态、触发原因、距上次进展的循环数、最近进展循环、当前循环与累计打开次数。
ralph --circuit-status2.3--auto-reset-circuit—— 启动时自动复位
启动时把熔断器直接重置为CLOSED,绕过冷却计时器。仅作用于单次运行,不持久化。
.ralphrc键 | 默认值 |
|---|---|
CB_AUTO_RESET | false |
ralph --auto-reset-circuit # 一次性复位 + 运行使用时机:完全无人值守的部署(CI、cron 任务)中不会有真人来执行
--reset-circuit。交互式使用请优先--reset-circuit,以便先排查触发原因。
对应机制在 lib/circuit_breaker.sh:启动时若状态为OPEN且CB_AUTO_RESET=true,直接迁移到CLOSED(保留total_opens计数);否则进入冷却逻辑,根据.opened_at与CB_COOLDOWN_MINUTES计算是否可过渡到HALF_OPEN(时钟回拨时保持OPEN更安全)。参数解析在ralph_loop.sh第 3128-3131 行,--monitor模式下会转发给子进程。
2.4--reset-session—— 重置会话
清除保存的 Claude 会话 ID 并退出,强制下一轮循环开启全新对话、不带任何历史上下文。
ralph --reset-session会话漂移或 Claude 陷入低效模式时使用。会话状态保存在
.ralph/.claude_session_id。
实现(第 3085-3092 行)调用reset_session "manual_reset_flag"并输出成功提示。会话连续性由init_claude_session()/save_claude_session()配合--continue标志实现,过期时间由SESSION_EXPIRY_HOURS控制。
2.5--dry-run—— 模拟运行
模拟循环执行而不发起真实的 Claude API 调用。Ralph 会运行完整的循环脚手架(速率限制检查、退出检测、完整性校验),但跳过 Claude 调用且不递增 API 调用计数。
| 默认值 | 环境变量 |
|---|---|
false | DRY_RUN |
ralph --dry-run # 在消耗 API 配额前验证配置 ralph --dry-run --verbose # 观察每一轮循环会做什么适合验证新的
.ralphrc或提示词配置,也适合做演示。
从源码看(第 1798-1807 行),dry-run 会记录[DRY RUN]日志、打印将要执行的命令与输出格式/超时配置,模拟 2 秒执行延迟后返回,不经过increment_call_counter()。参数解析在第 3132-3135 行。
2.6-n, --notify—— 桌面通知
为关键循环事件启用桌面通知:循环完成、错误、熔断器跳闸、API 限额、项目完成。跨平台实现:macOS 用osascript,Linux 用notify-send,都不存在时回退到终端响铃。
| 默认值 | .ralphrc键 |
|---|---|
false | ENABLE_NOTIFICATIONS |
ralph --notify --monitor # 循环需要关注时收到提醒实现见send_notification()(第 749-766 行):会剥离双引号防止 AppleScript 字符串破坏,且所有通知错误都被抑制——通知失败绝不影响循环本身。
2.7-b, --backup—— 自动 git 备份
在每一轮循环迭代前创建自动 git 备份分支,命名为ralph-backup-loop-{N}-{timestamp}。提交使用--allow-empty,即使没有暂存变更也保证存在恢复点。要求项目是 git 仓库(否则为 no-op)。
| 默认值 | .ralphrc键 |
|---|---|
false | ENABLE_BACKUP |
ralph --backup # 每轮循环前快照create_backup()(第 1647-1701 行,对应 issue #23)完整流程:先git stash push -u暂存本地变更 →git checkout -b创建分支 →git add -A→git commit --allow-empty→git checkout -返回原分支并git stash pop恢复。每一步失败都会警告并回滚恢复,不中断循环。
2.8--rollback [BRANCH]—— 回滚到备份
回滚到--backup创建的备份分支。不带参数时列出所有ralph-backup-loop-*分支(按最新优先排序)并退出;带分支名时检出该分支。
ralph --rollback # 列出可用备份 ralph --rollback ralph-backup-loop-3-1775155286 # 恢复到指定备份实现见rollback_to_backup()(第 1710-1742 行):列表通过git branch --list "ralph-backup-loop-*"并按时间戳字段倒序排序;恢复前校验分支存在,非 git 仓库或分支不存在都会给出明确错误。
2.9--show-tool-args—— 显示工具参数
在实时流式输出中显示工具参数(命令、文件路径、搜索模式)。默认关闭,避免原始命令和路径被记录到日志。
| 默认值 | .ralphrc键 |
|---|---|
false | LIVE_SHOW_TOOL_ARGS |
ralph --live --show-tool-args # 完整查看每次工具调用仅与
-l, --live配合才有意义。
三、现代 CLI 标志(Modern CLI Flags,Phase 1.1)
这一组标志面向新版 Claude CLI,提供结构化输出、工具权限白名单与会话续接控制。设计评审可参考 docs/code-review/2026-01-08-phase-1.1-modern-cli-review.md,测试覆盖见 tests/unit/test_cli_parsing.bats 与 tests/unit/test_cli_modern.bats。
3.1--output-format FORMAT—— 输出格式
设置 Claude Code 响应的输出格式。
| 值 | 行为 |
|---|---|
json(默认) | 结构化 JSON——启用会话续接、退出信号检测与 Token 计数 |
text | 遗留纯文本——仅启发式退出检测,误报率更高 |
| 默认值 | .ralphrc键 |
|---|---|
json | CLAUDE_OUTPUT_FORMAT |
ralph --output-format json # 默认;推荐 ralph --output-format text # 遗留回退强烈推荐 JSON 模式。在 text 模式下,启发式退出检测要求
confidence_score >= 70且has_completion_signal=true双重条件,以防止文档关键词触发误退出;在 JSON 模式下启发式被完全抑制——只有RALPH_STATUS块中显式的EXIT_SIGNAL: true才能触发退出。
这一区别直接对应响应分析器的两条代码路径:lib/response_analyzer.sh 会从 Claude 响应的.result文本中解析---RALPH_STATUS---/EXIT_SIGNAL: <bool>块(第 263-309 行),只有在 JSON 模式下才会尊重 Claude 显式表达的退出意图;参数解析校验只接受json或text(ralph_loop.sh第 3100-3108 行)。
3.2--allowed-tools TOOLS—— 工具白名单
Claude 被允许使用的工具列表(逗号分隔)。覆盖本次运行的.ralphrc默认值。
| 默认值 | .ralphrc键 |
|---|---|
| 见下方 | ALLOWED_TOOLS |
默认值:
Write,Read,Edit,Bash(git add *),Bash(git commit *),Bash(git diff *),Bash(git log *), Bash(git status),Bash(git status *),Bash(git push *),Bash(git pull *),Bash(git fetch *), Bash(git checkout *),Bash(git branch *),Bash(git stash *),Bash(git merge *),Bash(git tag *), Bash(npm *),Bash(pytest)# 审计运行:限制为只读 ralph --allowed-tools "Read,Grep,Glob" # 允许全部 git 命令(不太安全——包含 git clean、git rm) ralph --allowed-tools "Write,Read,Edit,Bash(git *),Bash(npm *)"为什么只放行特定 git 子命令?默认白名单刻意省略
Bash(git *),以防止git clean、git rm、git reset删除.ralph/配置文件。背景见 CLAUDE.md(文件保护问题)与templates/ralphrc.template中的注释。
排查被拒绝的命令。若命令被拒绝但
ALLOWED_TOOLS看起来正确:运行RALPH_VERBOSE=true ralph记录传给 Claude 的精确 argv;或运行tools/inspect-allowed-tools.sh在不调用 Claude 的情况下检查解析结果。对含管道/重定向的复合命令(如mvn clean | tail),当基础命令已在白名单中时,ralph 会自动把拒绝降级为警告继续执行(issue #243);更宽泛的Bash(git *)通配符限制问题跟踪于 issue #154。
从源码看,工具白名单通过--allowedTools参数逐项传给 Claude CLI(build_claude_command()构造参数数组),validate_allowed_tools()用 ralph_loop.sh 中VALID_TOOL_PATTERNS列表校验每个条目,非法条目直接报错退出(第 1148 行)。tools/inspect-allowed-tools.sh 复刻了同样的逗号拆分与去空白解析逻辑,并逐项输出printf %q转义后的 argv——若字面*被展开成文件名即说明存在引用 bug。相关测试见 tests/unit/test_inspect_allowed_tools.bats。
3.3--no-continue—— 关闭会话续接
禁用会话连续性。每一轮循环迭代都从完全全新的 Claude 对话开始,不带任何之前迭代的记忆。
| 默认值 | .ralphrc键 |
|---|---|
| 会话续接开启 | SESSION_CONTINUITY=true |
ralph --no-continue会话上下文积累过多、Claude 基于过时假设做决策时使用。也适合隔离单次迭代做调试。
实现:CLAUDE_USE_CONTINUE=false时init_claude_session()不会恢复历史会话 ID,Claude 调用不带--continue。load_ralphrc()会把.ralphrc中的SESSION_CONTINUITY映射到内部变量CLAUDE_USE_CONTINUE(ralph_loop.sh第 304-306 行)。
3.4--session-expiry HOURS—— 会话过期时间
覆盖会话 ID 保留的小时数,超过后自动丢弃并开启新会话。
| 默认值 | .ralphrc键 |
|---|---|
24 | SESSION_EXPIRY_HOURS |
ralph --session-expiry 48 # 长周期项目,上下文稳定 ralph --session-expiry 4 # 短生命周期任务,新上下文更佳参数解析要求正整数小时数(第 3120-3127 行)。会话过期逻辑由 lib/response_analyzer.sh 中的SESSION_EXPIRATION_SECONDS(默认 86400 秒 = 24 小时)驱动:24 小时默认值在"项目连续性"与"上下文新鲜度"之间取得平衡——太短频繁丢上下文,太长则陈旧上下文导致不可预测行为。
四、常见.ralphrc配置模式
.ralphrc文件位于项目根目录,在每一轮循环前被 source(加载函数见 ralph_loop.sh 的load_ralphrc())。环境变量永远优先于.ralphrc值。完整的可参考模板在 templates/ralphrc.template。
4.1 本地工作站(默认)
MAX_CALLS_PER_HOUR=100 CLAUDE_TIMEOUT_MINUTES=15 CLAUDE_OUTPUT_FORMAT="json" CLAUDE_AUTO_UPDATE=true SESSION_CONTINUITY=true SESSION_EXPIRY_HOURS=244.2 Docker 容器
# 版本在构建镜像时固定——跳过 npm registry 检查 CLAUDE_AUTO_UPDATE=false # 容器是临时的——持久化会话没有意义 SESSION_CONTINUITY=false # 更紧的超时,保证 CI 运行时长可预测 CLAUDE_TIMEOUT_MINUTES=104.3 离线 / 隔离网络环境(air-gapped)
# npm registry 不可达——防止超时与警告刷屏 CLAUDE_AUTO_UPDATE=false # 使用本机特定 Claude CLI 路径(不在 PATH 中时) CLAUDE_CODE_CMD="/opt/local/bin/claude"4.4 无人值守 / cron 运行
# 降低调用速率,避免夜间失控消费 MAX_CALLS_PER_HOUR=50 # 每小时 Token 预算(0 = 禁用)。预算耗尽后阻塞调用。 # 与调用计数器一起在整点重置。 MAX_TOKENS_PER_HOUR=50000 # 批量任务用更长的超时 CLAUDE_TIMEOUT_MINUTES=30 # 无需人工干预即可从熔断器自动恢复 CB_AUTO_RESET=false # false = 使用冷却(更安全) CB_COOLDOWN_MINUTES=30 # OPEN 后等待 30 分钟再重试MAX_TOKENS_PER_HOUR的实现要点:Token 计数通过extract_token_usage()(第 771-785 行)从 Claude 输出 JSON 的usage/metadata.usage字段提取输入+输出总和,update_token_count()累加到.ralph/.token_count;can_make_call()(第 801-821 行)在调用数与 Token 数任一达到上限时拒绝新调用,wait_for_reset()会同时显示两类限制信息。
4.5 熔断器调优
# 连续 N 轮无文件变更即打开熔断(默认:3) CB_NO_PROGRESS_THRESHOLD=3 # 连续 N 轮重复相同错误即打开熔断(默认:5) CB_SAME_ERROR_THRESHOLD=5 # 输出大小下降超过 N% 即打开熔断(默认:70) CB_OUTPUT_DECLINE_THRESHOLD=70 # 在 OPEN 状态等待多少分钟后过渡到 HALF_OPEN(默认:30) # 设为 0 可立即重试 CB_COOLDOWN_MINUTES=30 # 启动时跳过冷却、直接重置为 CLOSED(默认:false) # 谨慎使用——降低无人值守运行的熔断器安全性 CB_AUTO_RESET=false这些阈值全部在 lib/circuit_breaker.sh 顶部定义并支持环境变量覆盖。record_loop_result()(第 151-336 行)是状态机的核心:根据 git 文件变更、Claude 完成信号、Claude 报告的已修改文件数、是否在提问等综合判断进展;还有额外机制——连续CB_PERMISSION_DENIAL_THRESHOLD(默认 2)轮权限拒绝也会打开熔断(issue #101),连续 2 轮无进展先进入HALF_OPEN监控。测试见 tests/unit/test_circuit_breaker_recovery.bats。
4.6 限制工具权限
# 宽松(开发):允许全部 git 子命令 ALLOWED_TOOLS="Write,Read,Edit,Bash(git *),Bash(npm *),Bash(pytest)" # 安全(默认):仅放行特定 git 子命令,无破坏性 git 命令 ALLOWED_TOOLS="Write,Read,Edit,Bash(git add *),Bash(git commit *),Bash(git diff *),Bash(git log *),Bash(git status),Bash(git push *),Bash(npm *),Bash(pytest)" # 只读审计 ALLOWED_TOOLS="Read,Grep,Glob"4.7 模型与努力程度覆盖
# 使用特定 Claude 模型而非 CLI 默认 CLAUDE_MODEL="claude-sonnet-4-6" # 设置努力程度(high = 更彻底,low = 更快/更便宜) CLAUDE_EFFORT="high"两者也可用环境变量设置,环境变量优先于.ralphrc:
CLAUDE_MODEL=claude-opus-4-6 ralph --monitor从源码看(ralph_loop.sh第 114-115 行),CLAUDE_MODEL/CLAUDE_EFFORT默认为空(即使用 CLI 默认),非空时才作为--model/--effort追加到 Claude 调用参数中。--monitor模式不会转发这两个值,因此以环境变量形式传给ralph --monitor时需确认子进程能继承(环境变量在setup_tmux_session()执行前已捕获,子 shell 可继承)。
4.8 自定义 shell 初始化
# 每轮循环前 source 一个脚本(例如激活 virtualenv 或设置 PATH) RALPH_SHELL_INIT_FILE=".ralph/init.sh"若文件设置了但不存在,Ralph 会给出警告并跳过 source;存在则每轮调用 Claude 前先 source,可用于激活 Python 虚拟环境、加载密钥、切换 PATH 等。
五、.ralphrc专属键(无 CLI 等价物)
以下键没有对应的 CLI 标志——只能在.ralphrc或环境变量中设置。
| 键 | 默认值 | 说明 |
|---|---|---|
CLAUDE_CODE_CMD | "claude" | Claude Code CLI 命令。非全局安装时覆盖(如"npx @anthropic-ai/claude-code")。 |
CLAUDE_AUTO_UPDATE | true | 启动时自动检查 npm registry 并更新 Claude CLI。Docker / 离线环境设false。 |
CLAUDE_MIN_VERSION | "2.0.76" | 最低要求的 Claude CLI 版本。安装版本过旧时 Ralph 警告并退出。 |
MAX_TOKENS_PER_HOUR | 0 | 每小时 Token 预算(input + output)。0= 禁用。耗尽后阻塞后续调用;与调用计数一起在整点重置。 |
RALPH_VERBOSE | false | 启用详细进度日志。等价于--verbose。 |
CB_NO_PROGRESS_THRESHOLD | 3 | 连续 N 轮无文件变更即打开熔断器。 |
CB_SAME_ERROR_THRESHOLD | 5 | 连续 N 轮出现相同错误即打开熔断器。 |
CB_OUTPUT_DECLINE_THRESHOLD | 70 | 输出大小下降超过 N% 即打开熔断器。 |
CB_COOLDOWN_MINUTES | 30 | OPEN 状态下等待多少分钟再过渡到 HALF_OPEN 尝试恢复。 |
CB_AUTO_RESET | false | 启动时跳过冷却、直接重置为 CLOSED。降低安全性;仅建议完全无人值守的 CI 运行使用。 |
PROJECT_NAME | "my-project" | 提示词与日志输出中的项目标识。 |
PROJECT_TYPE | "unknown" | 项目类型提示:javascript、typescript、python、rust、go、unknown。 |
CLAUDE_AUTO_UPDATE的实现要点:为true时启动会检查 npm registry 并尝试npm update -g;Docker 镜像构建时版本已固定、容器是临时的,因此模板注释明确建议容器设false(templates/ralphrc.template)。CLAUDE_CODE_CMD的校验在validate_claude_command()(ralph_loop.sh第 374-423 行):npx 形式会先验证 npx 存在,直接命令形式用command -v检查,未找到时给出完整安装指引(全局安装或CLAUDE_CODE_CMD="npx @anthropic-ai/claude-code")。
六、环境变量优先级
环境变量 ← 最高优先级 ↓ .ralphrc 值 ↓ Ralph 默认值 ← 最低优先级所有.ralphrc键都可以用同名环境变量设置:
MAX_CALLS_PER_HOUR=200 ralph --monitor # 仅本次运行覆盖该优先级由load_ralphrc()(ralph_loop.sh第 291-366 行)精细实现:脚本在设置任何默认值之前就把_env_*环境变量快照下来(第 67-97 行),source.ralphrc后再把快照回写覆盖——这样"用户显式设置的环境变量 >.ralphrc> 脚本默认值"的优先级在任何场景下都成立,包括--monitor模式下子进程的配置转发。
七、延伸:.ralphrc中值得了解的更多键
除了本文档重点讲解的 CLI 相关键,templates/ralphrc.template 还包含面向任务源、GitHub issue 生命周期与沙箱执行的配置,它们同样遵循"环境变量 >.ralphrc> 默认值"的优先级规则,且有对应 CLI 标志(完整清单见ralph --help的 Batch processing 与 Sandbox execution 两节,ralph_loop.sh第 2943-2993 行):
- 任务源:
TASK_SOURCES="local"(可选beads、github)、GITHUB_TASK_LABEL="ralph-task"、BEADS_FILTER="status:open",对应任务导入功能(详见 lib/task_sources.sh 与 docs/QUEUE_MANAGEMENT.md); - Docker 沙箱:
SANDBOX_PROVIDER="docker"、SANDBOX_DOCKER_IMAGE="ralph-sandbox:latest"、SANDBOX_DOCKER_MEMORY="4g"、SANDBOX_DOCKER_CPUS="2"、SANDBOX_DOCKER_NETWORK="bridge"(none会阻断 Claude API),详见 docs/DOCKER_SANDBOX.md; - E2B 云沙箱:
SANDBOX_E2B_TEMPLATE="base"、SANDBOX_E2B_TIMEOUT="3600"、SANDBOX_E2B_KEEP_ALIVE、SANDBOX_E2B_MAX_COST等成本护栏,详见 docs/E2B_SANDBOX.md; - 文件同步过滤:
SYNC_INCLUDE/SYNC_EXCLUDE/SYNC_MAX_FILE_SIZE="10485760"/SYNC_LARGE_FILE_ACTION="warn",仅适用于 E2B 沙箱(Docker 的 bind mount 实时共享整个项目),详见 docs/SANDBOX_SYNC.md。
结语
ralph的命令行与.ralphrc配置共同构成了一个高度可编排的自主开发循环控制面:核心标志(--calls、--timeout、--prompt)决定循环的节奏与边界;熔断器标志(--reset-circuit、--auto-reset-circuit、--dry-run)决定故障恢复策略;现代 CLI 标志(--output-format、--allowed-tools、--no-continue、--session-expiry)决定与 Claude CLI 的交互深度;而.ralphrc模式则针对本地、Docker、离线与 CI 四种典型场景给出开箱即用的配置组合。牢记"环境变量 >.ralphrc> 默认值"的优先级,配合--dry-run在消耗 API 配额前验证配置,你就能让 Ralph 在可控成本与安全边界内持续、稳定地推进项目。
【免费下载链接】ralph-claude-codeAutonomous AI development loop for Claude Code with intelligent exit detection项目地址: https://gitcode.com/GitHub_Trending/ra/ralph-claude-code
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考