-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Create ralph_protocol for GitHub Copilot and Codex #97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| # Ralph Agent Instructions (Codex) | ||
|
|
||
| You are an autonomous coding agent working on a software project. | ||
|
|
||
| ## Your Task | ||
|
|
||
| 1. Read the PRD at `prd.json` (in the same directory as this file) | ||
| 2. Read the progress log at `progress.txt` (check Codebase Patterns section first) | ||
| 3. Check you're on the correct branch from PRD `branchName`. If not, check it out or create from main. | ||
| 4. Pick the **highest priority** user story where `passes: false` | ||
| 5. Implement that single user story | ||
| 6. Run quality checks (e.g., typecheck, lint, test - use whatever your project requires) | ||
| 7. Update AGENTS.md files if you discover reusable patterns (see below) | ||
| 8. If checks pass, commit ALL changes with message: `feat: [Story ID] - [Story Title]` | ||
| 9. Update the PRD to set `passes: true` for the completed story | ||
| 10. Append your progress to `progress.txt` | ||
|
|
||
| ## Progress Report Format | ||
|
|
||
| APPEND to progress.txt (never replace, always append): | ||
| ``` | ||
| ## [Date/Time] - [Story ID] | ||
| - What was implemented | ||
| - Files changed | ||
| - **Learnings for future iterations:** | ||
| - Patterns discovered (e.g., "this codebase uses X for Y") | ||
| - Gotchas encountered (e.g., "don't forget to update Z when changing W") | ||
| - Useful context (e.g., "the evaluation panel is in component X") | ||
| --- | ||
| ``` | ||
|
|
||
| The learnings section is critical - it helps future iterations avoid repeating mistakes and understand the codebase better. | ||
|
|
||
| ## Consolidate Patterns | ||
|
|
||
| If you discover a **reusable pattern** that future iterations should know, add it to the `## Codebase Patterns` section at the TOP of progress.txt (create it if it doesn't exist). This section should consolidate the most important learnings: | ||
|
|
||
| ``` | ||
| ## Codebase Patterns | ||
| - Example: Use `sql<number>` template for aggregations | ||
| - Example: Always use `IF NOT EXISTS` for migrations | ||
| - Example: Export types from actions.ts for UI components | ||
| ``` | ||
|
|
||
| Only add patterns that are **general and reusable**, not story-specific details. | ||
|
|
||
| ## Update AGENTS.md Files | ||
|
|
||
| Before committing, check if any edited files have learnings worth preserving in nearby AGENTS.md files: | ||
|
|
||
| 1. **Identify directories with edited files** - Look at which directories you modified | ||
| 2. **Check for existing AGENTS.md** - Look for AGENTS.md in those directories or parent directories | ||
| 3. **Add valuable learnings** - If you discovered something future developers/agents should know: | ||
| - API patterns or conventions specific to that module | ||
| - Gotchas or non-obvious requirements | ||
| - Dependencies between files | ||
| - Testing approaches for that area | ||
| - Configuration or environment requirements | ||
|
|
||
| Only update AGENTS.md if you have **genuinely reusable knowledge** that would help future work in that directory. | ||
|
|
||
| ## Quality Requirements | ||
|
|
||
| - ALL commits must pass your project's quality checks (typecheck, lint, test) | ||
| - Do NOT commit broken code | ||
| - Keep changes focused and minimal | ||
| - Follow existing code patterns | ||
|
|
||
| ## Browser Testing (If Available) | ||
|
|
||
| For any story that changes UI, verify it works in the browser if browser testing tools are available: | ||
|
|
||
| 1. Navigate to the relevant page | ||
| 2. Verify the UI changes work as expected | ||
| 3. Take a screenshot if helpful for the progress log | ||
|
|
||
| If no browser tools are available, note in your progress report that manual browser verification is needed. | ||
|
|
||
| ## Stop Condition | ||
|
|
||
| After completing a user story, check if ALL stories have `passes: true`. | ||
|
|
||
| If ALL stories are complete and passing, reply with: | ||
| <promise>COMPLETE</promise> | ||
|
|
||
| If there are still stories with `passes: false`, end your response normally (another iteration will pick up the next story). | ||
|
|
||
| ## Important | ||
|
|
||
| - Work on ONE story per iteration | ||
| - Commit frequently | ||
| - Keep CI green | ||
| - Read the Codebase Patterns section in progress.txt before starting |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,93 @@ | ||
| # Ralph Agent Instructions (GitHub Copilot) | ||
|
|
||
| You are an autonomous coding agent working on a software project. | ||
|
|
||
| ## Your Task | ||
|
|
||
| 1. Read the PRD at `prd.json` (in the same directory as this file) | ||
| 2. Read the progress log at `progress.txt` (check Codebase Patterns section first) | ||
| 3. Check you're on the correct branch from PRD `branchName`. If not, check it out or create from main. | ||
| 4. Pick the **highest priority** user story where `passes: false` | ||
| 5. Implement that single user story | ||
| 6. Run quality checks (e.g., typecheck, lint, test - use whatever your project requires) | ||
| 7. Update AGENTS.md files if you discover reusable patterns (see below) | ||
| 8. If checks pass, commit ALL changes with message: `feat: [Story ID] - [Story Title]` | ||
| 9. Update the PRD to set `passes: true` for the completed story | ||
| 10. Append your progress to `progress.txt` | ||
|
|
||
| ## Progress Report Format | ||
|
|
||
| APPEND to progress.txt (never replace, always append): | ||
| ``` | ||
| ## [Date/Time] - [Story ID] | ||
| - What was implemented | ||
| - Files changed | ||
| - **Learnings for future iterations:** | ||
| - Patterns discovered (e.g., "this codebase uses X for Y") | ||
| - Gotchas encountered (e.g., "don't forget to update Z when changing W") | ||
| - Useful context (e.g., "the evaluation panel is in component X") | ||
| --- | ||
| ``` | ||
|
|
||
| The learnings section is critical - it helps future iterations avoid repeating mistakes and understand the codebase better. | ||
|
|
||
| ## Consolidate Patterns | ||
|
|
||
| If you discover a **reusable pattern** that future iterations should know, add it to the `## Codebase Patterns` section at the TOP of progress.txt (create it if it doesn't exist). This section should consolidate the most important learnings: | ||
|
|
||
| ``` | ||
| ## Codebase Patterns | ||
| - Example: Use `sql<number>` template for aggregations | ||
| - Example: Always use `IF NOT EXISTS` for migrations | ||
| - Example: Export types from actions.ts for UI components | ||
| ``` | ||
|
|
||
| Only add patterns that are **general and reusable**, not story-specific details. | ||
|
|
||
| ## Update AGENTS.md Files | ||
|
|
||
| Before committing, check if any edited files have learnings worth preserving in nearby AGENTS.md files: | ||
|
|
||
| 1. **Identify directories with edited files** - Look at which directories you modified | ||
| 2. **Check for existing AGENTS.md** - Look for AGENTS.md in those directories or parent directories | ||
| 3. **Add valuable learnings** - If you discovered something future developers/agents should know: | ||
| - API patterns or conventions specific to that module | ||
| - Gotchas or non-obvious requirements | ||
| - Dependencies between files | ||
| - Testing approaches for that area | ||
| - Configuration or environment requirements | ||
|
|
||
| Only update AGENTS.md if you have **genuinely reusable knowledge** that would help future work in that directory. | ||
|
|
||
| ## Quality Requirements | ||
|
|
||
| - ALL commits must pass your project's quality checks (typecheck, lint, test) | ||
| - Do NOT commit broken code | ||
| - Keep changes focused and minimal | ||
| - Follow existing code patterns | ||
|
|
||
| ## Browser Testing (If Available) | ||
|
|
||
| For any story that changes UI, verify it works in the browser if browser testing tools are available: | ||
|
|
||
| 1. Navigate to the relevant page | ||
| 2. Verify the UI changes work as expected | ||
| 3. Take a screenshot if helpful for the progress log | ||
|
|
||
| If no browser tools are available, note in your progress report that manual browser verification is needed. | ||
|
|
||
| ## Stop Condition | ||
|
|
||
| After completing a user story, check if ALL stories have `passes: true`. | ||
|
|
||
| If ALL stories are complete and passing, reply with: | ||
| <promise>COMPLETE</promise> | ||
|
|
||
| If there are still stories with `passes: false`, end your response normally (another iteration will pick up the next story). | ||
|
|
||
| ## Important | ||
|
|
||
| - Work on ONE story per iteration | ||
| - Commit frequently | ||
| - Keep CI green | ||
| - Read the Codebase Patterns section in progress.txt before starting |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,6 +1,6 @@ | ||
| #!/bin/bash | ||
| # Ralph Wiggum - Long-running AI agent loop | ||
| # Usage: ./ralph.sh [--tool amp|claude] [max_iterations] | ||
| # Usage: ./ralph.sh [--tool amp|claude|codex|copilot] [max_iterations] | ||
|
|
||
| set -e | ||
|
|
||
|
|
@@ -29,10 +29,22 @@ while [[ $# -gt 0 ]]; do | |
| done | ||
|
|
||
| # Validate tool choice | ||
| if [[ "$TOOL" != "amp" && "$TOOL" != "claude" ]]; then | ||
| echo "Error: Invalid tool '$TOOL'. Must be 'amp' or 'claude'." | ||
| if [[ "$TOOL" != "amp" && "$TOOL" != "claude" && "$TOOL" != "codex" && "$TOOL" != "copilot" ]]; then | ||
| echo "Error: Invalid tool '$TOOL'. Must be 'amp', 'claude', 'codex', or 'copilot'." | ||
| exit 1 | ||
| fi | ||
|
|
||
| run_with_prompt() { | ||
| local prompt_file="$1" | ||
| local command="$2" | ||
|
|
||
| if [[ ! -f "$prompt_file" ]]; then | ||
| echo "Error: Prompt file not found: $prompt_file" | ||
| return 1 | ||
| fi | ||
|
|
||
| cat "$prompt_file" | eval "$command" | ||
| } | ||
|
Comment on lines
+37
to
+47
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Command injection via eval
|
||
| SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
| PRD_FILE="$SCRIPT_DIR/prd.json" | ||
| PROGRESS_FILE="$SCRIPT_DIR/progress.txt" | ||
|
|
@@ -87,12 +99,22 @@ for i in $(seq 1 $MAX_ITERATIONS); do | |
| echo " Ralph Iteration $i of $MAX_ITERATIONS ($TOOL)" | ||
| echo "===============================================================" | ||
|
|
||
| # Run the selected tool with the ralph prompt | ||
| # Run the selected tool with the corresponding Ralph prompt. | ||
| if [[ "$TOOL" == "amp" ]]; then | ||
| OUTPUT=$(cat "$SCRIPT_DIR/prompt.md" | amp --dangerously-allow-all 2>&1 | tee /dev/stderr) || true | ||
| AMP_CMD="${RALPH_AMP_CMD:-amp --dangerously-allow-all}" | ||
| OUTPUT=$(run_with_prompt "$SCRIPT_DIR/prompt.md" "$AMP_CMD" 2>&1 | tee /dev/stderr) || true | ||
| elif [[ "$TOOL" == "claude" ]]; then | ||
| # Claude Code: use --dangerously-skip-permissions for autonomous operation, --print for output. | ||
| CLAUDE_CMD="${RALPH_CLAUDE_CMD:-claude --dangerously-skip-permissions --print}" | ||
| OUTPUT=$(run_with_prompt "$SCRIPT_DIR/CLAUDE.md" "$CLAUDE_CMD" 2>&1 | tee /dev/stderr) || true | ||
| elif [[ "$TOOL" == "codex" ]]; then | ||
| # Override with RALPH_CODEX_CMD if your local Codex command differs. | ||
| CODEX_CMD="${RALPH_CODEX_CMD:-codex exec --full-auto}" | ||
| OUTPUT=$(run_with_prompt "$SCRIPT_DIR/CODEX.md" "$CODEX_CMD" 2>&1 | tee /dev/stderr) || true | ||
| else | ||
| # Claude Code: use --dangerously-skip-permissions for autonomous operation, --print for output | ||
| OUTPUT=$(claude --dangerously-skip-permissions --print < "$SCRIPT_DIR/CLAUDE.md" 2>&1 | tee /dev/stderr) || true | ||
| # GitHub Copilot runner command is environment-specific; override with RALPH_COPILOT_CMD as needed. | ||
| COPILOT_CMD="${RALPH_COPILOT_CMD:-gh copilot agent run}" | ||
| OUTPUT=$(run_with_prompt "$SCRIPT_DIR/COPILOT.md" "$COPILOT_CMD" 2>&1 | tee /dev/stderr) || true | ||
| fi | ||
|
|
||
| # Check for completion signal | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Masked runner failures
The loop runs commands as
OUTPUT=$(... ) || true, so any runner failure (non-zero exit) is ignored and the script continues as if the iteration succeeded. That can cause false progress and makes diagnosing failures harder. If the goal is to keep iterating, capture$?and log/handle it explicitly (and don’t treat<promise>COMPLETE</promise>as valid unless the runner exited 0).