Skip to content
Back to skills

Issue To Pr Resolver

ASecurity

Implement a GitHub issue end-to-end — create a worktree branch, implement the feature with tests, create a draft PR, then iteratively resolve all CI failures and review comments until the PR is clean. Use when you need to fully implement a GitHub issue from start to merge-ready. Triggers on "implement issue", "resolve issue", "/issue-to-pr-resolver <number>".

  • 4,947 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 20, 2026
ai-agentsbashnodegitapidatabase

Works with

  • api
  • mcp

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add homeassistant-ai/ha-mcp --skill issue-to-pr-resolver --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Issue To Pr Resolver?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Issue To Pr Resolver
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/homeassistant-ai-issue-to-pr-resolver/badge)](https://www.skillsdirectory.com/skills/homeassistant-ai-issue-to-pr-resolver)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: issue-to-pr-resolver
description: Implement a GitHub issue end-to-end — create a worktree branch, implement the feature with tests, create a draft PR, then iteratively resolve all CI failures and review comments until the PR is clean. Use when you need to fully implement a GitHub issue from start to merge-ready. Triggers on "implement issue", "resolve issue", "/issue-to-pr-resolver <number>".
argument-hint: "<issue-number>"
allowed-tools: Bash, Read, Edit, Write, Glob, Grep, WebFetch, WebSearch
---

# Issue-to-PR Resolver

Implement GitHub issue #$ARGUMENTS in `homeassistant-ai/ha-mcp` end-to-end.

## Phase 1: Setup

**Read the issue:**
```bash
gh issue view "$ARGUMENTS" --repo homeassistant-ai/ha-mcp --json title,body,labels,comments,author
```

**Create a worktree from repo root:**
```bash
cd "$(git rev-parse --show-toplevel)"
git checkout master && git pull origin master
git worktree add "worktree/issue-$ARGUMENTS" -b "feature/issue-$ARGUMENTS"
git -C "worktree/issue-$ARGUMENTS" submodule update --init --recursive
cd "worktree/issue-$ARGUMENTS"
```

## Phase 2: Implement

- Analyze codebase structure and patterns before writing code
- Follow project conventions (see `AGENTS.md` for patterns, naming, error handling)
- Write tests — all new MCP tools in `src/ha_mcp/tools/` need E2E tests
- Make atomic, well-described commits using conventional commit prefixes

**Philosophy:** Work autonomously. Don't ask about every small decision. Fix unrelated test failures encountered. Document all choices for the final summary.

If a non-obvious choice has significant consequences, present the available options to the user and let them choose.

## Phase 3: Create PR

Write the PR body to `local/pr-body-$ARGUMENTS.md` first. `local/` is git-ignored, so a new worktree does not have it; create it with `mkdir -p local` if it does not exist. Build the body from `.github/pull_request_template.md`: keep its headings, put `Closes #$ARGUMENTS` and the description under `## What does this PR do?`, and delete `## Future improvements` unless the user has confirmed work to defer. Then push and create the PR:

```bash
git push -u origin "feature/issue-$ARGUMENTS"
PR_NUMBER=$(gh pr create --draft \
  --repo homeassistant-ai/ha-mcp \
  --title "<descriptive title>" \
  --body-file "local/pr-body-$ARGUMENTS.md" | grep -oE '[0-9]+$')
```

Wait for CI:
```bash
gh pr checks "$PR_NUMBER" --repo homeassistant-ai/ha-mcp --watch
```

Before marking ready (`gh pr ready`), update the PR description to reflect all changes made.

## Phase 4: Resolution Loop

Repeat until all checks green and no unresolved threads:

**Check for issues:**
```bash
gh pr checks "$PR_NUMBER" --repo homeassistant-ai/ha-mcp
gh api repos/homeassistant-ai/ha-mcp/pulls/"$PR_NUMBER"/comments \
  --jq '.[] | {id, path, line, author: .user.login, body}'
gh api graphql -F pr="$PR_NUMBER" -f query='query($pr: Int!) { repository(owner:"homeassistant-ai", name:"ha-mcp") { pullRequest(number:$pr) { reviewThreads(first:100) { nodes { id isResolved comments(first:1) { nodes { databaseId body } } } } } } }'
```

**Resolve each comment (both steps required):**
```bash
# 1. Reply on the inline thread
gh api repos/homeassistant-ai/ha-mcp/pulls/"$PR_NUMBER"/comments/<COMMENT_ID>/replies \
  -f body="✅ Fixed in [commit]. [explanation]"
# or: -f body="📝 Not addressing because [reason]."

# 2. Resolve the thread via GraphQL
gh api graphql -f query='mutation($threadId: ID!) { resolveReviewThread(input: {threadId: $threadId}) { thread { id isResolved } } }' \
  -f threadId="<PRRT_...>"
```

**After pushing fixes**, wait and re-check:
```bash
gh pr checks "$PR_NUMBER" --repo homeassistant-ai/ha-mcp --watch
```

## Phase 5: Final Report

Once all checks pass and all threads resolved:

```bash
gh pr comment "$PR_NUMBER" --repo homeassistant-ai/ha-mcp --body "## Implementation Summary

**Choices Made:**
- [key technical decisions with rationale]

**Problems Encountered:**
- [issues faced and how resolved]
- [unrelated test failures fixed, if any]
"
```

Report to user: PR number, status, key choices.

## Rules

- **Never commit to master** — always work in the worktree
- **Always create PRs as draft** — never mark ready without user request
- Maximum 5 resolution iterations before reporting blockers
- **Discovered improvements**: fix-in-place by default. See AGENTS.md § *Boy Scout Rule — Handling Discovered Improvements* for the full rubric. Never open a follow-up PR or issue without explicit user approval; never populate `## Future improvements` without the user explicitly confirming the work is out of scope.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.