Agent skill

Issue To PR

by LanternOps in LanternOps/breeze

A skill your agent uses when implementing a fix for a known GitHub issue end-to-end on the Breeze repo — "work on issue

AGPL-3.0Auto-check: notes

Install Issue To PR

skills CLI
$ npx skills add LanternOps/breeze --skill issue-to-pr -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install LanternOps/breeze issue-to-pr --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/LanternOps/breeze.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/issue-to-pr .claude/skills/issue-to-pr && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
issue-to-pr
GitHub stars
131
Token cost
~3.5k tokens
SKILL.md length
1,644 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
AGPL-3.0

At a glance

A skill your agent uses when implementing a fix for a known GitHub issue end-to-end on the Breeze repo — "work on issue

  • Works in 10 steps: Select an issue (when you weren't handed… → Read & guard (do this before touching… → Claim → …
  • Implementing a fix for a known GitHub issue end-to-end on the Breeze repo — work on issue
  • SKILL.md covers Overview, When to use vs. not, The lifecycle and 0. Select an issue (when you…, plus 11 more sections
  • Calls gh, git and pnpm

What it does

Issue To PR is an agent skill from LanternOps/breeze. Use when implementing a fix for a known GitHub issue end-to-end on the Breeze repo — "work on issue

Its SKILL.md is about 3.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It works with GitHub. The repository describes itself as: The open-source IT platform that comes with the workers. RMM + PSA in one system, with a governed AI operator built in. The licence is AGPL-3.0.

When your agent uses it

  • Implementing a fix for a known GitHub issue end-to-end on the Breeze repo — work on issue

Example prompts

  • “/issue-to-pr”

Requirements

  • Node.js

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. Select an issue (when you weren't handed a number)
  2. Read & guard (do this before touching anything)
  3. Claim
  4. Isolated worktree
  5. Fix
  6. Verify (evidence before "done")
  7. Commit / push / PR
  8. Review
  9. Ready signal — comment reports what the last review ran
  10. Hand off — STOP

What it can do on your machine

Read from SKILL.md and the folder at commit 5a2d714. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git
    • pnpm
    • npx
    • go

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh, git, pnpm and npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Issue To PR loads about 3.5k tokens when it runs. Until then it costs about 28 tokens; SKILL.md has 1,644 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~28
When it runs · the whole SKILL.md, loaded when a task matches
~3.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:148
    need `pnpm install` and the gitignored `.env.test` symlink —

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from LanternOps/breeze at commit 5a2d714, republished under its AGPL-3.0 licence (© LanternOps). 1,644 words, ~3,475 tokens.

Download SKILL.mdSave it as .claude/skills/issue-to-pr/SKILL.md (or your agent's skills folder).
name
issue-to-pr
description
Use when implementing a fix for a known GitHub issue end-to-end on the Breeze repo — "work on issue

Issue → PR

Overview

Execution runbook that carries one already-chosen GitHub issue from claim to a reviewed, open PR. Triage already happened (see gh-queue); this skill runs after the decision to work an issue is made.

Repo: LanternOps/breeze. Two hard boundaries: the worker never merges and the worker never closes the issue — those stay the user's call.

When to use vs. not

  • Use: "fix #1234", "take #1234 to a PR", an issue-fixer agent picking up a number.
  • Don't use for triage ("what's waiting on me", "any new issues") → that's gh-queue.
  • Don't redefine etiquette — comment style, never-self-close, and lifecycle live in the github-issues skill. Follow it; don't restate it.

The lifecycle

dot
digraph issue_to_pr {
  "Read full issue + comments" [shape=box];
  "Eligible?" [shape=diamond];
  "ABORT — report back" [shape=box];
  "Assign to self" [shape=box];
  "Worktree off fresh main" [shape=box];
  "Fix (debug/brainstorm)" [shape=box];
  "Verify: tests + typecheck" [shape=box];
  "Commit / push / PR (Closes #N)" [shape=box];
  "/pr-review-toolkit:review-pr" [shape=box];
  "Findings?" [shape=diamond];
  "Comment: what the review ran" [shape=box];
  "STOP — hand off (no merge, no close)" [shape=doublecircle];

  "Read full issue + comments" -> "Eligible?";
  "Eligible?" -> "ABORT — report back" [label="no"];
  "Eligible?" -> "Assign to self" [label="yes"];
  "Assign to self" -> "Worktree off fresh main";
  "Worktree off fresh main" -> "Fix (debug/brainstorm)";
  "Fix (debug/brainstorm)" -> "Verify: tests + typecheck";
  "Verify: tests + typecheck" -> "Commit / push / PR (Closes #N)";
  "Commit / push / PR (Closes #N)" -> "/pr-review-toolkit:review-pr";
  "/pr-review-toolkit:review-pr" -> "Findings?";
  "Findings?" -> "Fix (debug/brainstorm)" [label="yes, address"];
  "Findings?" -> "Comment: what the review ran" [label="clean"];
  "Comment: what the review ran" -> "STOP — hand off (no merge, no close)";
}

0. Select an issue (when you weren't handed a number)

If invoked with a specific issue number, skip to step 1. If asked to "find something to work on" / "grab an issue off the backlog", select one yourself:

bash
# Open issues with the signals needed to rank them.
gh issue list --repo LanternOps/breeze --state open --limit 60 \
  --json number,title,assignees,labels,createdAt,comments

Rank candidates, best first. Prefer an issue that is:

  • Unassigned (or assigned to you — see the note on "you" in step 1).
  • Actionable without design — a clear repro, root cause, or file pointers in the body/comments. A precise root-cause comment from a maintainer is gold.
  • Bounded — one component, a contained fix.

Skip (don't even open a worktree):

  • Anything labeled tracking/epic/meta, needs-design/question/discussion/RFC.
  • Infra firefighting (ci-red, broad "X is broken on main") unless explicitly asked.
  • Anything that needs a product/pricing/policy decision.

Then run the step 1 guard on your top candidate — that's the real gate (it catches already-shipped fixes and in-flight PRs that ranking can't see). If the top candidate aborts on the guard, move to the next candidate; repeat until one passes or the list is exhausted. Report which issues you considered and why you skipped each — don't silently pick one and hide the rest.

When selecting several to fan out, cap the count and state the cap.

1. Read & guard (do this before touching anything)

bash
gh issue view N --repo LanternOps/breeze --comments \
  --json number,title,body,state,assignees,labels,comments
# PRs that reference it — ANY state, not just open (a merged/closed PR may have
# already shipped the fix; --state open would never show it).
gh pr list --repo LanternOps/breeze --state all --search "N in:body" \
  --json number,title,state,headRefName,mergedAt

Read the whole issue and every comment. ABORT and report back (do not start work) if any of these is true:

  • Issue is closed.
  • Already assigned to someone else (not you, not unassigned). "You" is the operator's GitHub account — the @me login, resolved with gh api user --jq .login — not a separate agent identity. An issue assigned to that account is "assigned to you" and is eligible (work it); only an issue assigned to a different login is "someone else" → abort. If you're a subagent, you have no GitHub identity of your own, so never read the operator's own assigned issues as belonging to a third party.
  • A PR already references it. An open PR → work is in flight, don't duplicate. A merged/closed PR (or a member comment / commit on main saying "fixed in #NNN" / "merged to main") → the fix likely already shipped and the issue is open only awaiting reporter confirmation. Verify against origin/main before concluding either way — a gh pr list --state open miss does NOT mean no fix exists. Don't open a duplicate no-op PR.
  • It's too ambiguous or too large to fix without design — needs a spec or a product decision first. Say so; don't guess a fix.

Aborting is a success, not a failure. Report why so the orchestrator/user can decide. Guessing past a guard wastes a worktree and a review cycle.

2. Claim

bash
gh issue edit N --repo LanternOps/breeze --add-assignee @me

3. Isolated worktree

REQUIRED SUB-SKILL: Use superpowers:using-git-worktrees. The main working copy at /Users/toddhebebrand/breeze is shared across sessions and drifts — verify your base is fresh main before branching (a stale base has nearly shipped dozens of unrelated commits in a PR).

Spawn-location trap (read this): When an orchestrator fans you out, your CWD is very likely already inside an existing worktree under .claude/worktrees/ that belongs to a different task. That is NOT your workspace. Do not edit there, and do not reach back into the shared /Users/toddhebebrand/breeze checkout (it may be on a stale branch). Always git fetch origin main, then create your own new worktree off origin/main, cd into it, and confirm git rev-parse HEAD equals origin/main before you branch. Editing the spawn worktree or the shared checkout has silently reverted other in-flight PRs' files.

Branch naming (AGENTS.md — no codex/ / claude/ prefixes): fix/N-short-slug, feat/N-short-slug, docs/short-slug, chore/short-slug.

Fresh worktrees need pnpm install and the gitignored .env.test symlink — without it RLS forge tests pass vacuously on a BYPASSRLS connection. Prefix node-pinned commands: PATH=$HOME/.nvm/versions/node/v22.20.0/bin:$PATH.

4. Fix

  • Bug → REQUIRED: superpowers:systematic-debugging (find root cause before patching).
  • Feature/behavior change → superpowers:brainstorming first if the issue left design open.
  • Touching tenant tables / migrations → follow the RLS shapes + migration rules in CLAUDE.md (policies in the same migration, idempotent, never edit a shipped migration). Touching the Go agent → write to agent/, not apps/agent/.

5. Verify (evidence before "done")

REQUIRED SUB-SKILL: breeze-testing for what to cover.

  • Run the affected test files single-fork (the full API suite is flaky in parallel — don't trust or trigger a full red run): pnpm exec vitest run <path>.
  • Type-check touched areas: npx tsc --noEmit (and astro check if .astro changed — plain tsc skips Astro files).
  • Go changes: cd agent && go test -race ./internal/<pkg>/....

Do not proceed to the ready comment on red tests. REQUIRED SUB-SKILL: superpowers:verification-before-completion.

6. Commit / push / PR

Use commit-commands:commit-push-pr (or do it by hand). The PR body must include Closes #N. PR title follows fix(scope): summary (#N) / feat(scope): summary (#N). Required trailers:

  • Commit messages end with: Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
  • PR body ends with the 🤖 Generated with [Claude Code]… line.

7. Review

Run /pr-review-toolkit:review-pr on the PR. Address every real finding (loop back to step 4 → re-verify). Re-run review if you made non-trivial changes.

8. Ready signal — comment reports what the last review ran

Assignee stays you. Post a comment on the PR (not the issue) in the bold-section style (github-issues / comment-style conventions). The comment's job is to record what the last review run was and its outcome — NOT a generic "ready for review" banner.

markdown
**Review run:** /pr-review-toolkit:review-pr (code-reviewer, silent-failure-hunter, pr-test-analyzer)
**Findings:** 2 raised → both addressed in <sha>; 0 outstanding.
**Tests:** apps/api affected suite green (`vitest run routes/foo.test.ts`, 14 passed); `tsc --noEmit` clean.
**Status:** review-clean, awaiting maintainer merge.

If review surfaced nothing, say that explicitly ("0 findings") rather than omitting the line — a missing line reads as "didn't run it."

Show full SKILL.md (656 more words)Show less

9. Hand off — STOP

Report the PR number + a one-line summary to the orchestrator/user. Then stop.

The worker does NOT merge and does NOT close the issue. Merge (a bare gh pr merge <N> into the merge queue, gated on green required checks; never --admin) and closure (after the reporter/user verifies) are the user's judgment calls — see the merge/hold rules. The issue stays open and assigned to you until then.

Red flags — STOP if you catch yourself

  • "It's obviously fixed, I'll just close the issue." → Never. Hand off open.
  • "Checks are green, I'll merge it." → Never. Merge is the user's call.
  • "The issue's a bit vague but I'll guess what they meant." → Abort & ask (step 1).
  • "Someone's assigned but they seem stalled, I'll take it." → Abort & report — don't poach. (But an issue assigned to the operator's own @me account is not poaching — work it; see step 1.)
  • "No open PR, so nobody's fixed it." → Check merged/closed PRs + commits on main too. Open-only is a blind spot.
  • "I'll skip the worktree, the main copy is fine." → No. Stale base + shared copy = wrong-commit PR.
  • "I'm already inside a worktree, I'll just use this one." → No — it's another task's worktree. Make your own off fresh origin/main.
  • "Affected tests pass, skip the rest / skip typecheck." → Run typecheck (and astro check) too.
  • "Posting 'ready for review' is enough." → No. Record which review ran and what it found.
RationalizationReality
"A commit means it's done, close it."A commit isn't verification. Reporter/user closes.
"Green CI means I can merge."Merge is gated on the user's hold/judgment rules, not just CI.
"Aborting wastes the dispatch."Aborting on a guard is the correct, cheap outcome. Guessing is expensive.
"Full suite is red so my change is broken."The full API suite is flaky in parallel — verify via affected files single-fork.

Orchestrating multiple issues

To work several issues at once, the in-session agent acts as orchestrator:

  1. Decide the issue numbers BEFORE dispatch — never let multiple workers self-select in parallel. Each worker's step-0 selection ranks the backlog the same way and claims aren't visible at selection time, so parallel self-selecting agents converge on the same top issue and open duplicate PRs (observed: 3 agents → PRs #1917/#1918/#1919, all on #1896). Get a distinct set one of two ways:

    • The user named explicit numbers / a label filter → use that list.
    • The user asked you to "find a few" with no numbers → you (the orchestrator) do the selection: scan the backlog once, rank with the step-0 criteria, pick N distinct eligible candidates, run the step-1 guard on each, and claim each up front (gh issue edit <N> --add-assignee @me) so the set is reserved. Only then dispatch.

    Any orchestrator-level eligibility pre-check has the same blind spot as the worker's: gh pr list --state open won't reveal an already-merged fix, so don't pre-declare an issue "eligible" on that basis — the worker's full guard (comments + --state all + origin/main) is the real gate.

  2. REQUIRED SUB-SKILL: superpowers:dispatching-parallel-agents — spawn one issue-fixer agent per already-chosen number, each in its own worktree (isolation prevents branch/DB collisions; see the worktree skill). Every agent gets a concrete number — none self-selects.

  3. Each agent runs this runbook independently and returns its PR number (or its abort reason). A worker that finds its handed number already assigned to @me (because the orchestrator pre-claimed it) treats that as eligible — that's the reservation working, not a poach.

  4. Collect the results into one summary table for the user. The orchestrator does not merge or close either — same boundary applies.

Do not auto-expand the list beyond what the user named. If you self-selected from a label, log/state the cap and which issues were dropped.

Anti-pattern (do not do this): dispatching 2+ issue-fixer agents that each run step-0 selection, trusting a "skip already-claimed issues" instruction to keep them apart. Selection precedes any visible claim, so the guard can't see a sibling's pick — they collide. Distinctness is the orchestrator's job, settled before dispatch.

© LanternOps, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/issue-to-pr of LanternOps/breeze.

Open the folder on GitHubat commit 5a2d714

Compare with similar skills

Issue To PR next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Issue To PR compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Issue To PR this skillLanternOps/breeze131—~3.5kAutomated safety check: NotesAGPL-3.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Diagnosing Superpowers Sessionsobra/superpowers296k3 repos~1.7kAutomated safety check: PassMIT
GitHub Deep Researchbytedance/deer-flow83k5 repos~1.3kAutomated safety check: PassMIT
Greplooponyx-dot-app/onyx32k4 repos~3.3kAutomated safety check: PassMIT
Update V8 Versionopeninterpreter/openinterpreter69k2 repos~845Automated safety check: PassApache-2.0

Similar skills

  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Investigates a session where Superpowers went wrong, reads the transcripts on disk and produces an evidence-cited report, optionally prepared as a bug report for the maintainers.

    296k GitHub starsUsed in 3 repos~1.7k tokens
    Agent WorkflowsAuto-check passed
  • GitHub Deep Research

    bytedance/deer-flow

    Researches a GitHub repository over four rounds using the GitHub API and web search, then writes a structured markdown report with timeline, metrics and Mermaid diagrams.

    83k GitHub starsUsed in 5 repos~1.3k tokens
    Research & ScienceAuto-check passed
  • Greploop

    onyx-dot-app/onyx

    Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.

    32k GitHub starsUsed in 4 repos~3.3k tokens
    DevelopmentAuto-check passed
  • Update V8 Version

    openinterpreter/openinterpreter

    Bumps the pinned v8 and rusty_v8 versions in Codex, validates the release-candidate path with the v8-canary check, and traces failures to upstream build changes.

    69k GitHub starsUsed in 2 repos~845 tokens
    DevOps & CloudAuto-check passed
  • Last30days

    mvanhorn/last30days-skill

    Research what people actually say about any topic in the last 30 days.

    64k GitHub stars~7.8k tokensUpdated today
    Research & ScienceAuto-check: notes

More from LanternOps/breeze

All 14 skills in this repo
  • Agent Info

    LanternOps/breeze

    Quick reference for the Breeze RMM Go agent architecture, commands, configuration, build process, and data flows.

    131 GitHub stars~4.7k tokensUpdated today
    Auto-check: notes
  • Agent Log Debugging

    LanternOps/breeze

    A skill your agent uses when debugging agent issues, investigating agent errors, checking agent connectivity, or reviewing agent diagnostic logs.

    131 GitHub stars~1.6k tokensUpdated today
    Auto-check: notes
  • AI Agent

    LanternOps/breeze

    Quick reference for the Breeze RMM AI Agent system architecture, MCP tools, streaming chat, cost tracking, guardrails, and MCP server.

    131 GitHub stars~3.7k tokensUpdated today
    Auto-check passed
  • Breeze Helper

    LanternOps/breeze

    Quick reference for the Breeze Helper Tauri desktop app — architecture, Rust backend commands, React frontend, config files, IPC with the Go agent, helper chat API routes, tool approval flow, and…

    131 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • E2E Coverage

    LanternOps/breeze

    A skill your agent uses when running a broad manual/AI-driven end-to-end verification of Breeze RMM across many merged PRs or commits — "test everything since the last release", release-readiness…

    131 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Feature Delivery

    LanternOps/breeze

    A skill your agent uses when orchestrating Breeze implementation work from this seat — dispatching waves or issue fixes to background sessions, deciding whether an open PR gets merged, handling a…

    131 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Works with

Questions about Issue To PR

What does Issue To PR do?

A skill your agent uses when implementing a fix for a known GitHub issue end-to-end on the Breeze repo — "work on issue. Issue To PR is an agent skill from LanternOps/breeze.

When should I use Issue To PR?

Issue To PR fits situations like: implementing a fix for a known GitHub issue end-to-end on the Breeze repo — work on issue.

How do I install Issue To PR in Claude Code?

Run `npx skills add LanternOps/breeze --skill issue-to-pr -a claude-code`. Or copy the skill folder (.claude/skills/issue-to-pr in LanternOps/breeze) into .claude/skills/issue-to-pr in your project. Claude Code loads it when a task matches its description.

How do I install Issue To PR in Codex?

Run `npx skills add LanternOps/breeze --skill issue-to-pr -a codex`. Or copy the skill folder (.claude/skills/issue-to-pr in LanternOps/breeze) into .agents/skills/issue-to-pr in your project. Codex loads it when a task matches its description.

Can I use Issue To PR in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add LanternOps/breeze --skill issue-to-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/issue-to-pr, .gemini/skills/issue-to-pr, .github/skills/issue-to-pr and .opencode/skills/issue-to-pr in your project.

What does Issue To PR need to run?

Going by SKILL.md and its folder, Issue To PR needs the command-line tools its instructions call (gh, git, pnpm, npx and go). Our summary lists: Node.js.

Does Issue To PR access the network?

SKILL.md contains no URLs. Its commands use gh, git and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Issue To PR safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Issue To PR use?

Issue To PR is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Issue To PR use?

About 3.5k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Issue To PR?

Skills that share tags, products or a category with Issue To PR: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Diagnosing Superpowers Sessions (obra/superpowers, 296k stars), GitHub Deep Research (bytedance/deer-flow, 83k stars) and Greploop (onyx-dot-app/onyx, 32k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Issue To PR?

LanternOps (a GitHub organization) maintains it in LanternOps/breeze, which has 131 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 8, 2026.

Source: LanternOps/breeze on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.