Extract and analyze writing improvements from GitHub PR review comments. Use when asked to show review feedback, style changes, or editorial improvements from a GitHub pull request URL...
Extract editorial feedback from GitHub PRs to learn from review improvements.
gh installedgh session: gh auth status should show you’re logged inrepo).| Tool | Responsibility |
|---|---|
| Python script | API calls, parsing, file tracking across renames, structured extraction |
| LLM analysis | Pattern recognition, paragraph comparison, style lesson synthesis |
> **All paths are relative to the directory containing this SKILL.md file.**
> Before running any script, first `cd` to that directory or use the full path.
# Get suggestions and feedback
uv run scripts/extract_pr_reviews.py <pr_url>
# Get full first→final comparison for deep analysis
uv run scripts/extract_pr_reviews.py <pr_url> --diff
# Same as above, but cap each FIRST/FINAL dump to 2k chars for LLM prompting
uv run scripts/extract_pr_reviews.py <pr_url> --diff --max-file-chars 2000
--diffuv run scripts/extract_pr_reviews.py https://github.com/org/repo/pull/123 --diff
This outputs:
suggestion blocks (supports multiple suggestion blocks per comment)Tip: add
--max-file-chars 2000to keep each FIRST/FINAL dump lightweight, or pair--diffwith--no-filesif you only need the suggestion/feedback summaries.
With the script output, perform this analysis:
Create a table of mechanical fixes:
| Pattern | Original | Fixed |
|---|---|---|
| Grammar | "Its easier" | "It's easier" |
| Filler removal | "using this way" | "this way" |
| Capitalization | "Image Generation" | "image generation" |
For each reviewer feedback comment:
Example:
Feedback: "would be nice to end more enthusiastically"
First draft: "...it's simple to add new tools to Claude and use them straight away."
Final: "...Let us know what you find and create in the comments below!"
Lesson: End blog posts with a call-to-action
Compare FIRST DRAFT to FINAL VERSION section by section:
Group findings into categories:
| Category | Patterns Found |
|---|---|
| Clarity | Passive→active, shorter sentences, remove filler |
| Precision | Vague→specific, "Create"→"Generate" |
| Tone | Added enthusiasm, call-to-action endings |
| Structure | Added transitions, better section flow |
| Grammar | its/it's, subject-verb agreement |
| Content | Added links, examples, context |
📁 All paths are relative to the directory containing this SKILL.md file.
| Flag | Output | Use Case |
|---|---|---|
| (none) | Suggestions + feedback | Quick review of what reviewers said |
--diff |
Adds FIRST/FINAL file dumps to the default output | Deep analysis of how the author responded |
--max-file-chars N |
Truncates each FIRST/FINAL block to N chars (appends ...[truncated X chars]) |
Keep prompts within LLM token limits |
--no-files |
Suppresses FIRST/FINAL dumps even when --diff is set |
When you only need explicit suggestions + reviewer feedback |
--json |
Raw JSON (includes file_evolutions when --diff without --no-files) |
Programmatic processing |
Input formats: pass either a full PR URL,
owner/repo PR_NUMBER, orowner repo PR_NUMBER.
--diff.md/.txt/.rst/.mdx file; add --max-file-chars to truncate each block with a visible ...[truncated X chars] indicatorThe script traces files through renames by:
claudeimages.md → claude-images.md → claude-and-mcp.md)After running the script and performing LLM analysis, produce a summary like:
## Style Lessons from PR #123
### Mechanical Fixes
- Fix grammar: "Its" → "It's" (contraction)
- Lowercase generic terms: "Image Generation" → "image generation"
- Remove filler: "the output quality of" → "the quality of"
### Reviewer-Driven Changes
- **"end more enthusiastically"** → Added call-to-action in conclusion
- **"emphasize these are SoTA"** → Changed "latest" to "state-of-the-art"
- **"add blurb about MCP Server"** → Added explanatory paragraph
### Structural Improvements
- Added transition sentence between sections
- Simplified setup instructions (3 sentences → 1)
- Added new bullet point for model flexibility
--max-file-chars or pass --no-files to keep outputs prompt-friendly{{currentDate}} {{env}}