{"id":49339816,"url":"https://github.com/salmundani/ralphex","last_synced_at":"2026-04-27T03:04:36.742Z","repository":{"id":342047549,"uuid":"1163053174","full_name":"salmundani/ralphex","owner":"salmundani","description":"Ralphex is a Claude Code plugin that uses Claude Code as planner + implementer, and Codex as code reviewer","archived":false,"fork":false,"pushed_at":"2026-04-24T18:00:30.000Z","size":30,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-24T20:04:45.513Z","etag":null,"topics":["ai","anthropic","claude","claude-code","claude-code-plugin","code-review","codex","developer-tools","openai"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/salmundani.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-21T02:57:01.000Z","updated_at":"2026-04-24T18:00:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/salmundani/ralphex","commit_stats":null,"previous_names":["salmundani/ralphex"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/salmundani/ralphex","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salmundani%2Fralphex","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salmundani%2Fralphex/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salmundani%2Fralphex/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salmundani%2Fralphex/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/salmundani","download_url":"https://codeload.github.com/salmundani/ralphex/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/salmundani%2Fralphex/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32320688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","claude","claude-code","claude-code-plugin","code-review","codex","developer-tools","openai"],"created_at":"2026-04-27T03:04:27.310Z","updated_at":"2026-04-27T03:04:36.731Z","avatar_url":"https://github.com/salmundani.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"```\n                                          ⠀⠀⠀⠀⠀⠀⣀⣤⣶⡶⢛⠟⡿⠻⢻⢿⢶⢦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⠀⢀⣠⡾⡫⢊⠌⡐⢡⠊⢰⠁⡎⠘⡄⢢⠙⡛⡷⢤⡀⠀⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⢠⢪⢋⡞⢠⠃⡜⠀⠎⠀⠉⠀⠃⠀⠃⠀⠃⠙⠘⠊⢻⠦⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⢇⡇⡜⠀⠜⠀⠁⠀⢀⠔⠉⠉⠑⠄⠀⠀⡰⠊⠉⠑⡄⡇⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⡸⠧⠄⠀⠀⠀⠀⠀⠘⡀⠾⠀⠀⣸⠀⠀⢧⠀⠛⠀⠌⡇⠀⠀⠀⠀⠀⠀\n                                          ⠀⠘⡇⠀⠀⠀⠀⠀⠀⠀⠀⠙⠒⠒⠚⠁⠈⠉⠲⡍⠒⠈⠀⡇⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⠈⠲⣆⠀⠀⠀⠀⠀⠀⠀⠀⣠⠖⠉⡹⠤⠶⠁⠀⠀⠀⠈⢦⠀⠀⠀⠀⠀\n                                          ⠀⠀⠀⠀⠈⣦⡀⠀⠀⠀⠀⠧⣴⠁⠀⠘⠓⢲⣄⣀⣀⣀⡤⠔⠃⠀⠀⠀⠀⠀\n                                          ⠀⠀⠀⠀⣜⠀⠈⠓⠦⢄⣀⣀⣸⠀⠀⠀⠀⠁⢈⢇⣼⡁⠀⠀⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⢠⠒⠛⠲⣄⠀⠀⠀⣠⠏⠀⠉⠲⣤⠀⢸⠋⢻⣤⡛⣄⠀⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⢡⠀⠀⠀⠀⠉⢲⠾⠁⠀⠀⠀⠀⠈⢳⡾⣤⠟⠁⠹⣿⢆⠀⠀⠀⠀⠀⠀\n                                          ⠀⢀⠼⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⠃⠀⠀⠀⠀⠀⠈⣧⠀⠀⠀⠀⠀\n                                          ⠀⡏⠀⠘⢦⡀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠞⠁⠀⠀⠀⠀⠀⠀⠀⢸⣧⠀⠀⠀⠀\n                                          ⢰⣄⠀⠀⠀⠉⠳⠦⣤⣤⡤⠴⠖⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢯⣆⠀⠀⠀\n                                          ⢸⣉⠉⠓⠲⢦⣤⣄⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⣀⣠⣼⢹⡄⠀⠀\n                                          ⠘⡍⠙⠒⠶⢤⣄⣈⣉⡉⠉⠙⠛⠛⠛⠛⠛⠛⢻⠉⠉⠉⢙⣏⣁⣸⠇⡇⠀⠀\n                                          ⠀⢣⠀⠀⠀⠀⠀⠀⠉⠉⠉⠙⠛⠛⠛⠛⠛⠛⠛⠒⠒⠒⠋⠉⠀⠸⠚⢇⠀⠀\n                                          ⠀⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⢤⣨⠇⠀\n                                          ⠀⠀⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣤⢻⡀⣸⠀⠀⠀\n                                          ⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⠛⠉⠁⠀⠀⠀\n                                          ⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⢠⢄⣀⣤⠤⠴⠒⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀\n                                          ⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠘⡆⠀⠀⠀⠀⠀\n                                          ⠀⠀⠀⡎⠀⠀⠀⠀⠀⠀⠀⠀⢷⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⠀⡇⠀⠀⠀⠀⠀\n                                          ⠀⠀⢀⡷⢤⣤⣀⣀⣀⣀⣠⠤⠾⣤⣀⡘⠛⠶⠶⠶⠶⠖⠒⠋⠙⠓⠲⢤⣀⠀\n                                          ⠀⠀⠘⠧⣀⡀⠈⠉⠉⠁⠀⠀⠀⠀⠈⠙⠳⣤⣄⣀⣀⣀⠀⠀⠀⠀⠀⢀⣈⡇\n                                          ⠀⠀⠀⠀⠀⠉⠛⠲⠤⠤⢤⣤⣄⣀⣀⣀⣀⡸⠇⠀⠀⠀⠉⠉⠉⠉⠉⠉⠁⠀                                                                                                              \n                                                                                                                      \nRRRRRRRRRRRRRRRRR                     lllllll                   hhhhhhh                                                   \nR::::::::::::::::R                    l:::::l                   h:::::h                                                   \nR::::::RRRRRR:::::R                   l:::::l                   h:::::h                                                   \nRR:::::R     R:::::R                  l:::::l                   h:::::h                                                   \n  R::::R     R:::::R  aaaaaaaaaaaaa    l::::lppppp   ppppppppp   h::::h hhhhh           eeeeeeeeeeee  xxxxxxx      xxxxxxx\n  R::::R     R:::::R  a::::::::::::a   l::::lp::::ppp:::::::::p  h::::hh:::::hhh      ee::::::::::::ee x:::::x    x:::::x \n  R::::RRRRRR:::::R   aaaaaaaaa:::::a  l::::lp:::::::::::::::::p h::::::::::::::hh   e::::::eeeee:::::eex:::::x  x:::::x  \n  R:::::::::::::RR             a::::a  l::::lpp::::::ppppp::::::ph:::::::hhh::::::h e::::::e     e:::::e x:::::xx:::::x   \n  R::::RRRRRR:::::R     aaaaaaa:::::a  l::::l p:::::p     p:::::ph::::::h   h::::::he:::::::eeeee::::::e  x::::::::::x    \n  R::::R     R:::::R  aa::::::::::::a  l::::l p:::::p     p:::::ph:::::h     h:::::he:::::::::::::::::e    x::::::::x     \n  R::::R     R:::::R a::::aaaa::::::a  l::::l p:::::p     p:::::ph:::::h     h:::::he::::::eeeeeeeeeee     x::::::::x     \n  R::::R     R:::::Ra::::a    a:::::a  l::::l p:::::p    p::::::ph:::::h     h:::::he:::::::e             x::::::::::x    \nRR:::::R     R:::::Ra::::a    a:::::a l::::::lp:::::ppppp:::::::ph:::::h     h:::::he::::::::e           x:::::xx:::::x   \nR::::::R     R:::::Ra:::::aaaa::::::a l::::::lp::::::::::::::::p h:::::h     h:::::h e::::::::eeeeeeee  x:::::x  x:::::x  \nR::::::R     R:::::R a::::::::::aa:::al::::::lp::::::::::::::pp  h:::::h     h:::::h  ee:::::::::::::e x:::::x    x:::::x \nRRRRRRRR     RRRRRRR  aaaaaaaaaa  aaaallllllllp::::::pppppppp    hhhhhhh     hhhhhhh    eeeeeeeeeeeeeexxxxxxx      xxxxxxx\n                                              p:::::p                                                                     \n                                              p:::::p                                                                     \n                                             p:::::::p                                                                    \n                                             p:::::::p                                                                    \n                                             p:::::::p                                                                    \n                                             ppppppppp                                                                    \n                                                                                                                          \n```\n\nRalphex is a Claude Code plugin that creates an automated development loop between two AI systems: **Claude Code** (planner + implementer) and **OpenAI Codex** (code reviewer). The loop repeats until Codex gives a clean review.\n\nI usually prefer running a single agent model, but from my coding sessions, I feel that Claude is really good at planning and executing, while Codex really excels at code review.\n\n## Installation\n\n### Prerequisites\n\n- [Claude Code](https://code.claude.com/docs)\n- [OpenAI Codex CLI](https://github.com/openai/codex) installed and authenticated\n\n### Install from marketplace\n\n```shell\n/plugin marketplace add salmundani/ralphex\n/plugin install ralphex@salmundani-ralphex\n```\n\n### Usage\n\nOnce installed, run the skill from Claude Code:\n\n```shell\n/ralphex\n```\n\nOr for just code review:\n\n```shell\n/ralphex-review\n```\n\nTo configure settings like the base branch, Codex model, or reasoning effort:\n\n```shell\n/ralphex-settings\n```\n\n## How it works\n\nI was constantly doing the following loops manually, this plugin just automates them:\n\n```shell\n$ /ralphex\n\nPrompt → Plan → Implementation → Commit → Codex Review → Claude filters reviews → End\n         ↑  ↓         ↑                                             ↓\n         └──┘         └────── loop if there are corrections ────────┘\n```\n\nSometimes I prefer to do the plan mode outside of the loop, and just do the code review loop at the end:\n\n```shell\n$ /ralphex-review\n\nPrompt → Codex Review → Claude filters reviews → Implementation → Commit → End\n                                  ↓                                         ↑ \n                                  └────────── if no corrections ────────────┘\n```\n\n### Claude Code filters reviews\n\nCodex reviews have a high chance of false positives. Therefore, there is a step where Claude Code filters the reviews to only include the ones that are actually useful.\n\n- ✅ **Accept**: Real bugs, security issues, correctness problems.\n- ❌ **Reject**: Factually wrong suggestions, misunderstandings, or purely stylistic nitpicks.\n- ⏭️ **Defer**: Valid observations that are out of scope for the current task (e.g. pre-existing issues).\n\n### Caveats\n\n**IMPORTANT:** If you clear the context when accepting the plan in `/ralphex`'s Plan Mode, Claude will NOT do the commit → review → implement cycle at the end. To avoid this, you can accept the plan without clearing the context.\n\nEventually I will have to do a more robust solution using stop hooks.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalmundani%2Fralphex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsalmundani%2Fralphex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsalmundani%2Fralphex/lists"}