/revdiff-plan
Review the last Codex assistant message (plan, analysis, or proposal) with inline annotations in a TUI overlay. Extracts the most recent response from Codex rollout files and opens it in revdiff for review and annotation. Activates on "revdiff-plan", "review plan with revdiff",
Claude Code
$ npx -y skills add umputun/revdiff --skill revdiff-plan --agent claude-code
Codex
$ npx skills add umputun/revdiff --skill revdiff-plan -a codex -y
Cursor
$ npx skills add umputun/revdiff --skill revdiff-plan -a cursor -y
Gemini CLI
$ npx skills add umputun/revdiff --skill revdiff-plan -a gemini-cli -y
GitHub Copilot
$ npx skills add umputun/revdiff --skill revdiff-plan -a github-copilot -y
OpenCode
$ npx skills add umputun/revdiff --skill revdiff-plan -a opencode -y
Windsurf
$ npx skills add umputun/revdiff --skill revdiff-plan -a windsurf -y
SKILL.md
revdiff-plan.SKILL.mdname: revdiff-plan
description: Review the last Codex assistant message (plan, analysis, or proposal) with inline annotations in a TUI overlay. Extracts the most recent response from Codex rollout files and opens it in revdiff for review and annotation. Activates on "revdiff-plan", "review plan with revdiff", "annotate plan", "review last response", "annotate codex output".
revdiff-plan - Review Codex Output
Review the last Codex assistant message with inline annotations using revdiff TUI in a terminal overlay.
Script Path Resolution
Resolve `<plugin-root>` from this skill's absolute path in the available-skills catalogue. It is the directory containing this plugin's `.codex-plugin/plugin.json`. Then set:
SCRIPT_DIR="<plugin-root>/skills/revdiff-plan/scripts"
Also resolve the launcher script from the revdiff skill:
LAUNCHER_DIR="<plugin-root>/skills/revdiff/scripts"
Replace `<plugin-root>` with the resolved absolute path before running either command. Use `$SCRIPT_DIR` and `$LAUNCHER_DIR` in place of script paths throughout this skill.
Activation Triggers
- "revdiff-plan", "review plan with revdiff", "annotate plan"
- "review last response", "annotate codex output"
How It Works
1. Extract the last Codex assistant message from rollout files 2. Write it to a temp markdown file 3. Launch revdiff with `--only=<tempfile>` in a terminal overlay 4. User reads the plan, adds annotations on specific lines 5. On quit, annotations are captured from stdout 6. Codex reads annotations and addresses each one (refine plan, answer questions, fix issues) 7. Loop: re-launch revdiff to verify changes, user can add more annotations 8. If the user quits without annotations, report that no annotations were captured, clean up the temp file, and stop the plan review workflow
Workflow
Step 1: Extract Last Assistant Message
Run the extraction script with `--skip-current` to avoid picking up this session's own output:
$SCRIPT_DIR/extract-last-message.sh --skip-current
The script:
- Uses a best-effort heuristic: picks the second most recent rollout JSONL file by modification time from `~/.codex/sessions/`
- This assumes the newest file belongs to the active session; if concurrent Codex sessions exist, the wrong file may be selected
- Falls back to the newest file if only one session exists
- Extracts the last assistant message text using jq
- Outputs raw markdown to stdout
- Accepts an explicit rollout file path as an argument to bypass auto-detection when precision matters
If the script fails (no sessions, no messages), inform the user and stop. If the user reports that the wrong content was extracted, ask them to provide the rollout file path explicitly: `$SCRIPT_DIR/extract-last-message.sh /path/to/rollout.jsonl`
Capture the output and write it to a temp file:
TMPBASE="${TMPDIR:-/tmp}"
PLAN_FILE=$(mktemp "$TMPBASE/revdiff-plan-XXXXXX")
mv "$PLAN_FILE" "${PLAN_FILE}.md"
PLAN_FILE="${PLAN_FILE}.md"
$SCRIPT_DIR/extract-last-message.sh --skip-current > "$PLAN_FILE"Step 2: Launch Review
Run the launcher script with `--only=<tempfile>`:
$LAUNCHER_DIR/launch-revdiff.sh --only="$PLAN_FILE"
The launcher sets `REVDIFF_EXIT_CODE_ON_ANNOTATIONS`; exit `10` means annotations were captured and is not a launcher failure. Treat other nonzero statuses as failures.
**IMPORTANT -- long-running command**: The launcher blocks until the user finishes reviewing in the TUI overlay. Set the bash timeout parameter to the **maximum your harness allows** (e.g. 1800000 or higher). Do NOT use `run_in_background`.
If the bash tool reports a timeout, use the same fallback as the revdiff skill:
1. Tell the user: "The bash tool timed out, but revdiff may still be open. Let me know when you're done reviewing." 2. Wait for the user to reply. 3. Read the most recent output file:
output_file="$(find -H "${TMPDIR:-/tmp}" -maxdepth 1 -type f -name 'revdiff-output-*' -user "$(id -u)" -mmin -120 -exec ls -t {} + 2>/dev/null | head -1)"
if [ -n "$output_file" ] && [ -f "$output_file" ]; then
cat "$output_file"
fiThe lookup only considers your own files and excludes files older than two hours, but a recent leftover or another review of yours live under one `$TMPDIR` (a diff review included, since it uses the same file prefix) can still be the newest match.
Step 3: Process Annotations
If the bash tool reports exit `10`, read stdout and process it as annotations; do not call it a failure. If the launcher produces output, the user made annotations. The output format is:
## plan-XXXXXX.md:12 ( )
this section needs more detail about error handling
## plan-XXXXXX.md:25 ( )
explain why we chose this approach over alternatives
Each annotation block has:
- `## filename:line (type)` -- which file and line
- Comment text below -- what the user wants changed or clarified
Step 3.5: Classify Annotations
Split annotations into two categories:
**Explanation requests** -- annotation matches either rule (case-insensitive):
- contains two or more consecutive question marks anywhere in the text (`??`, `???`, etc.) -- a language-neutral shortcut for "please explain"
- OR starts with one of: `explain`, `remind`, `describe`, `what is`, `what are`, `how does`, `how do`, `clarify`
These are questions the user wants answered, not plan changes.
**Plan-change directives** -- everything else. These are instructions to modify the plan content.
**If explanation requests are found:**
1. Answer each explanation request directly 2. If there are also plan-change directives, note them as pending 3. Enter the **explanation loop**:
a. Write the explanation to a temp markdown file b. Launch revdiff with `--only=<explanation-file>` via the launcher script c. If user quits without annotations -- explanation accepted, proceed to pending directives or Step 5 d. If user annotates -- refine explanation, loop
Read more
name: revdiff-plan description: Review the last Codex assistant message (plan, analysis, or proposal) with inline annotations in a TUI overlay. Extracts the most recent response from Codex rollout files and opens it in revdiff for review and annotation. Activates on "revdiff-plan", "review plan with revdiff", "annotate plan", "review last response", "annotate codex output".
revdiff-plan - Review Codex Output
Review the last Codex assistant message with inline annotations using revdiff TUI in a terminal overlay.
Script Path Resolution
Resolve `<plugin-root>` from this skill's absolute path in the available-skills catalogue. It is the directory containing this plugin's `.codex-plugin/plugin.json`. Then set:
SCRIPT_DIR="<plugin-root>/skills/revdiff-plan/scripts"
Also resolve the launcher script from the revdiff skill:
LAUNCHER_DIR="<plugin-root>/skills/revdiff/scripts"
Replace `<plugin-root>` with the resolved absolute path before running either command. Use `$SCRIPT_DIR` and `$LAUNCHER_DIR` in place of script paths throughout this skill.
Activation Triggers
- "revdiff-plan", "review plan with revdiff", "annotate plan"
- "review last response", "annotate codex output"
How It Works
1. Extract the last Codex assistant message from rollout files 2. Write it to a temp markdown file 3. Launch revdiff with `--only=<tempfile>` in a terminal overlay 4. User reads the plan, adds annotations on specific lines 5. On quit, annotations are captured from stdout 6. Codex reads annotations and addresses each one (refine plan, answer questions, fix issues) 7. Loop: re-launch revdiff to verify changes, user can add more annotations 8. If the user quits without annotations, report that no annotations were captured, clean up the temp file, and stop the plan review workflow
Workflow
Step 1: Extract Last Assistant Message
Run the extraction script with `--skip-current` to avoid picking up this session's own output:
$SCRIPT_DIR/extract-last-message.sh --skip-current
The script:
- Uses a best-effort heuristic: picks the second most recent rollout JSONL file by modification time from `~/.codex/sessions/`
- This assumes the newest file belongs to the active session; if concurrent Codex sessions exist, the wrong file may be selected
- Falls back to the newest file if only one session exists
- Extracts the last assistant message text using jq
- Outputs raw markdown to stdout
- Accepts an explicit rollout file path as an argument to bypass auto-detection when precision matters
If the script fails (no sessions, no messages), inform the user and stop. If the user reports that the wrong content was extracted, ask them to provide the rollout file path explicitly: `$SCRIPT_DIR/extract-last-message.sh /path/to/rollout.jsonl`
Capture the output and write it to a temp file:
TMPBASE="${TMPDIR:-/tmp}"
PLAN_FILE=$(mktemp "$TMPBASE/revdiff-plan-XXXXXX")
mv "$PLAN_FILE" "${PLAN_FILE}.md"
PLAN_FILE="${PLAN_FILE}.md"
$SCRIPT_DIR/extract-last-message.sh --skip-current > "$PLAN_FILE"Step 2: Launch Review
Run the launcher script with `--only=<tempfile>`:
$LAUNCHER_DIR/launch-revdiff.sh --only="$PLAN_FILE"
The launcher sets `REVDIFF_EXIT_CODE_ON_ANNOTATIONS`; exit `10` means annotations were captured and is not a launcher failure. Treat other nonzero statuses as failures.
**IMPORTANT -- long-running command**: The launcher blocks until the user finishes reviewing in the TUI overlay. Set the bash timeout parameter to the **maximum your harness allows** (e.g. 1800000 or higher). Do NOT use `run_in_background`.
If the bash tool reports a timeout, use the same fallback as the revdiff skill:
1. Tell the user: "The bash tool timed out, but revdiff may still be open. Let me know when you're done reviewing." 2. Wait for the user to reply. 3. Read the most recent output file:
output_file="$(find -H "${TMPDIR:-/tmp}" -maxdepth 1 -type f -name 'revdiff-output-*' -user "$(id -u)" -mmin -120 -exec ls -t {} + 2>/dev/null | head -1)"
if [ -n "$output_file" ] && [ -f "$output_file" ]; then
cat "$output_file"
fiThe lookup only considers your own files and excludes files older than two hours, but a recent leftover or another review of yours live under one `$TMPDIR` (a diff review included, since it uses the same file prefix) can still be the newest match.
Step 3: Process Annotations
If the bash tool reports exit `10`, read stdout and process it as annotations; do not call it a failure. If the launcher produces output, the user made annotations. The output format is:
## plan-XXXXXX.md:12 ( ) this section needs more detail about error handling ## plan-XXXXXX.md:25 ( ) explain why we chose this approach over alternatives
Each annotation block has:
- `## filename:line (type)` -- which file and line
- Comment text below -- what the user wants changed or clarified
Step 3.5: Classify Annotations
Split annotations into two categories:
**Explanation requests** -- annotation matches either rule (case-insensitive):
- contains two or more consecutive question marks anywhere in the text (`??`, `???`, etc.) -- a language-neutral shortcut for "please explain"
- OR starts with one of: `explain`, `remind`, `describe`, `what is`, `what are`, `how does`, `how do`, `clarify`
These are questions the user wants answered, not plan changes.
**Plan-change directives** -- everything else. These are instructions to modify the plan content.
**If explanation requests are found:**
1. Answer each explanation request directly 2. If there are also plan-change directives, note them as pending 3. Enter the **explanation loop**:
a. Write the explanation to a temp markdown file b. Launch revdiff with `--only=<explanation-file>` via the launcher script c. If user quits without annotations -- explanation accepted, proceed to pending directives or Step 5 d. If user annotates -- refine explanation, loop
TUI for reviewing diffs, files, and documents with inline annotations. Outputs structured annotations to stdout on quit, making it easy to pipe results into AI agents, scripts, or other tools.
Other skills on revdiff.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about revdiff-plan.
- Which coding agents can use revdiff-plan?
- revdiff-plan installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

