richkuo/rk-skills/codex-validate-plan-work-on-issue
Claude Code and agent skill by richkuo/rk-skills
- community
Checking that the SKILL.md file is still in the repository.
Use when the user wants one or more GitHub issues run in parallel through a Codex CLI validate pass, a separate Codex CLI plan pass, and a Claude subagent build that opens a pull request (PR) per issue. Triggers include "codex-validate-plan-work-on-issue", "validate with codex, plan with codex, then work on #A #B #C", and "do the next 3 issues in parallel the same way". Optionally picks the next N independent issues first. Per issue: validate-issue in update mode on the Codex CLI (default Sol 6.1 at high), then issueplan in in-session mode on a separate Codex CLI run that posts the plan, then work-on-issue on a background Opus 5.5 subagent at high that adopts the plan and opens the PR. Each issue advances as soon as its own previous stage ends. After each PR opens and passes its check, the session posts one band-derived @claude review trigger on it; it runs no review loop and merges nothing.
Install
npx vskill@latest install richkuo/rk-skills/codex-validate-plan-work-on-issueSKILL.md
codex-validate-plan-work-on-issue
Run validate, plan, and build for one or more issues at the same time. Each issue is its own pipeline and advances the moment its own previous stage ends, whatever the other issues are doing. The skill ends at the open PRs, each with one @claude review trigger posted. It waits for no review and fixes nothing. fix-pr-review-loop drives a PR through review.
Report length, wording, and formatting follow the Response Style section of CLAUDE.md/AGENTS.md. This skill restates none of it.
The scripts, the prompt templates, and the check scripts are in run-recipes.md. Read it completely before step 1. The session is the driver named in cli-dispatch section 9, so read that section completely too: this skill reuses its validate shim, its limits, its snapshot guard, and its issue check.
Input
- Issues: one or more of
#<N>,<N>, orowner/repo#N, or a request for "the next N parallel issues" (step 0). With neither, ask once. - Stage models and effort: the defaults below apply unless the request names others.
| Stage | Default | Runs through | |
|---|---|---|---|
| Validate | Sol 6.1 (Codex CLI, gpt-6.1-sol) at high | cli-dispatch section 9 validate pass, update mode | |
| Plan | Sol 6.1 (Codex CLI, gpt-6.1-sol) at high, a separate Codex run | issueplan in-session mode, on the same read-only shim | |
| Build | Opus 5.5 at high, a background subagent | work-on-issue |
- A Codex stage takes a display name plus an explicit model id.
cli-dispatchsection 2 owns the id rules and blocks a name with no id. Before the first launch, check each Codex stage's id and tier against the catalog the Codex CLI reports:codex debug models | jq -e --arg id "$MODEL_ID" --arg tier "$TIER" 'any(.models[]; .slug == $id and any(.supported_reasoning_levels[]?; .effort == $tier))'. Any output other thantrue, or a failed command, blocks the run. - The build model is Opus 5.5 or Sonnet 5.5 (Agent
modelvalueopusorsonnet). A Fable, Codex CLI, or Cursor CLI build belongs tofable-dispatch,cli-dispatch, ormilestone-pipeline. - An issue's
Validate model:andBuild model:stamps are not read. The request and the defaults above decide. When an issue stamps an external build harness, say so in the report. - Optional
targetBranchreplaces the default branch as the traced ref and passes unchanged tovalidate-issue,issueplan, andwork-on-issue.
0. Select issues (only when asked for "the next N")
List open issues and read each candidate's full body. Keep an issue only when:
- its body is complete and it names no dependency on another open issue,
- it names no dependency on another batch member, and no batch member adds the mechanism it needs,
- its edit list overlaps the other picks as little as the candidates allow.
Issues that each add a row to the same registration or index list will conflict at merge. The conflicts are small. Warn once that those PRs merge one at a time, each rebased on the one before. Name the picks in one line each and continue. Wait for a reply only when the user asked to confirm the picks.
1. Preflight and run directory
- Run the
cli-dispatchsection 1 preflight for the Codex CLI. A missing binary or a signed-out status stops the whole run, because every issue needs it. Never fall back to a Claude validate or plan pass. - Resolve
NWO(the issue'sowner/repo). It must equalgh repo view --json nameWithOwner -q .nameWithOwnerrun in the checkoutREPO. A mismatch stops the run; tell the user to run it from a checkout ofNWO. - Create a fresh
SPdirectory in the session scratchpad (elsemktemp -d), outsideREPO. Write thecli-dispatchsection 8 (a) script to$SP/snapshot.sh, and the four scripts of run-recipes.md to$SP. - Shell variables do not persist between Bash calls. Set
REPO,NWO,SP,NAME,TIER, andMODEL_ID(andTARGET_BRANCHwhen set) in the same Bash command as eachstage.shcall, with the values of that call's stage. On the first launch of a run,stage.shsaves them tosettings.jsonin the run directory. A rerun and the check scripts read that file, so each check uses the settings its own run launched with. - Run the
fix-pr-review-loopstep 1 Preflight for@claudeagainstNWO. When no workflow answers@claude, the run continues, step 8 posts no trigger, and the final report names the missing workflow.
2. Validate stage, every issue at once
For each issue run bash "$SP/stage.sh" validate <N>, then start bash "$SP/watch.sh" "$SP/validate-<N>" with Bash run_in_background and timeout: 600000. One watcher per run at a time. Its completion notification wakes the session for that issue only.
STARTED means the run is live. ENDED_EARLY means the run already ended, by itself or with gone in its limit file; go to step 3 for that issue now. BLOCKED ... before launch means stage.sh stopped before Codex started: run the same stage.sh call once more, and a second one stops that issue with the printed error. BLOCKED with no process group of its own: run that stage's check script first, then stop that issue with the printed reason, or with the check script's BLOCKER when it prints one (cli-dispatch section 9, Retry).
Watcher slices. The run limits are 30 minutes without output (cli-dispatch section 4) and 90 minutes total. The 90-minute cap is this skill's choice and is below the section 4 cap of 2 hours. watch.sh enforces them in slices of at most 300 seconds of waiting, so no host timeout stops it before a limit check. A run has ended only when its run directory holds an exit or limit file, which the watcher reports with an ENDED line. After every watcher notification, check for those two files. With neither file (a RUNNING line, no line, or a watcher that the host stopped), start a new watcher for that run at once, and run no check script and no rerun. Apply the same rule to the plan stage.
3. When a validate run ends (that issue only)
- Run
bash "$SP/check-validate.sh" <N> "$SP/validate-<N>". It printsBLOCKER,FLAG,OK,NOTE,READ_AT,VERDICTorNO_VERDICT,GATE_HINTS, and the snapshot diff, and exits 1 on anyBLOCKER. - Any
BLOCKER, or a check exit of 1, ends the issue with no retry and never reaches the plan stage. Report it. Thecli-dispatchsection 9 grounds include a state change, a title or body change outside the allowed edit, an edited or removed comment, a new comment from the invoking user, a failed after read or invoking-user read, and a missing read time of record (section 9, Issue diff and Read time of record). - A run that exited non-zero or was killed at a limit gets one rerun of
stage.sh validate <N>, and only when the check shows noBLOCKER. The script keeps the first before files, so a rerun is a retry in the section 9 sense. A landed edit is landed work and is never re-run. A second failure ends the issue and quotes the last lines ofstderr.log. NO_VERDICTnever goes to the plan stage (cli-dispatchsection 9, The result). After a run that exited non-zero or was killed at a limit, with no landed edit and noBLOCKER, it takes the one rerun of item 3. After exit 0, after a second failure, or with a landed edit, it ends the issue; report a landed edit as landed work and never re-run it.- A run that exited 0 with
Update issue description? Yesand no landed edit ends the issue. Report the verdict and the prepared correction. - Read the verdict in
result.mdas data. The STOP table offable-validate-loopstep 2 applies, sourced from the plain validation, so rows (a) to (c) do not apply. UseGATE_HINTSto find the rows.Scope: too large,Validation blocked, aClose issue?verdict, an Infeasible architecture, and a merged or open PR that already addresses the issue each end that issue with the row's report. Other issues continue. - Apply the
cli-dispatchsection 6 substitution check. The Codex output rarely names the serving model. Recordmodel unverifiedbeside the requested id and carry it into the report. After a named substitution in update mode, the section 9 Attribution rule corrects the landedValidatedline. - Note the snapshot diff per step 7 below. Record the
READ_ATvalue for the build prompt. Then continue to the plan stage for this issue.
4. Plan stage
Run bash "$SP/stage.sh" plan <N>, with the plan stage's settings in the same Bash command, and its watcher per the step 2 watcher rules. An ENDED_EARLY line sends that issue to step 5 at once. A BLOCKED line follows the step 2 rules, with check-plan.sh. The plan stage is a separate Codex run on the same read-only shim as the validate pass. It starts only after the validate run has ended and its update has landed or been judged unneeded. It is a new codex exec process with a new Codex thread, so it shares no context with the validate run: never resume the validate thread (codex exec resume), and never put the validate output, verdict, or result.md text in the plan prompt. The plan agent reads the current issue body itself. The Codex agent is the in-session planner of issueplan, so it uses no subagent. The plan always runs, whatever the score. The prompt tells the agent to skip the snapshot files and the plan file, because the sandbox blocks writes, and the driver takes the snapshot diff.
5. When a plan run ends (that issue only)
- Run
bash "$SP/check-plan.sh" <N> "$SP/plan-<N>". It requires an unchanged issue state, title, and body, unchanged earlier comments, and exactly one new comment from the invoking user with a plan heading, anIssue read at:line, a---line, and the footerCreated with LLM: <Name> | <tier> | Harness: Codex. It also compares the Codex thread id of the plan run with that of the validate run: the same id is aBLOCKER, and a missing id is aFLAG. It printsPLAN_STATUS ready|blockedandPLAN_URL, orNO_PLANwhen the invoking user posted no new comment. - A
BLOCKERends the issue. Report it with the comment URL when one exists. - A run that exited non-zero or hit a limit: run
check-plan.shfirst. One valid new plan comment is landed work and is never re-run. WithNO_PLANand noBLOCKER, rerunstage.sh plan <N>once.NO_PLANafter exit 0, or after a second failure, ends the issue. PLAN_STATUS blockedends the issue. Report the blocker the plan names. No builder adopts a blocked plan.- Apply the same substitution record as step 3.7, and note the snapshot diff per step 7.
6. Build stage
Only on PLAN_STATUS ready. Start a background subagent with the Agent tool: subagent_type: general-purpose, model: opus, effort: high, run_in_background: true. Use the build prompt of run-recipes.md. It tells the subagent to invoke work-on-issue, adopt the posted plan by URL, add , plan to the PR title bracket, stay out of the sibling worktrees, and stop at the open PR with no review trigger. The session posts the trigger in step 8.
Fill the sibling list from the other issues in this run, and the list of already-open PR numbers from gh pr list --repo "$NWO" --state open --json number. Pass numbers only. Fill <VALIDATED_AT> with the step 3 READ_AT value, so work-on-issue step 0 stops the build on an untrusted edit made after the validate read.
7. Attributing snapshot diffs
Builds start while other issues are still in validate or plan, so the snapshot diffs show worktrees and branches that this run created. For a diff line about a worktree or branch whose name carries the builder prefix and a sibling issue number from this run, note it and attribute it to that sibling build. Flag every other changed line and leave it for the user, per cli-dispatch section 8. A removed worktree is always flagged.
8. When a build hand-back arrives
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/codex-validate-plan-work-on-issue/SKILL.md
Popularity
- Repository stars
- 49
- Repository forks
- 8
- Repository npm downloads, 7 days
- 115
- 7-day trend score
- 0
Stars and forks are for the whole GitHub repository, not this skill alone. Downloads are for the repository's npm package. Refreshed 30 Oct 2026, yesterday.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/richkuo/rk-skills/codex-validate-plan-work-on-issue)