work-with-pr
Full PR lifecycle in a fresh task-owned git worktree: implement via the ulw-loop skill with mandatory evidence-bound manual QA → reviewer-readable English PR → verification loop (CI + Cubic, where Cubic is skipped only when its quota is exhausted) → merge by default → worktree cleanup.
Install / Use
npx skills add code-yeongyu/oh-my-openagent --skill work-with-prInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Our assessment of work-with-pr
work-with-pr scores 90/100 on our quality scale, 203rd of 1,630 Development & Engineering skills we index (top 13%).
Its SKILL.md is 18 KB long, well organised into 56 sections with 21 code examples: a thorough specification that gives an agent plenty to work with.
With 69,362 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated today, so work-with-pr is actively maintained.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 88/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
work-with-pr compared with similar skills
All 4 of these similar skills score higher than work-with-pr; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| work-with-pr (this skill)by code-yeongyu | 90 | 69.4k | today | SKILL.md |
| Agent-Reachby Panniantong | 100 | 85.3k | 9d ago | CLAUDE.md |
| ai-job-searchby MadsLorentzen | 100 | 43.9k | 3d ago | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.7k | 5d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 2d ago | SKILL.md |
Frequently asked questions
- How do I install work-with-pr?
- Run
npx skills add code-yeongyu/oh-my-openagent --skill work-with-pr. The install tabs above show the steps for each supported agent. - Which AI agents does work-with-pr work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is work-with-pr safe to use?
- It declares no license and scores 88/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is work-with-pr still maintained?
- The repository was last updated today, so work-with-pr is actively maintained.
Skill content
View source on GitHubname: work-with-pr description: "Full PR lifecycle in a fresh task-owned git worktree: implement via the ulw-loop skill with mandatory evidence-bound manual QA → reviewer-readable English PR → verification loop (CI + Cubic, where Cubic is skipped only when its quota is exhausted) → merge by default → worktree cleanup. Decomposes one task into the smallest atomic, independently-mergeable PRs and builds the independent ones concurrently via one worktree per PR driven by parallel subagents or a team. Unbounded loop: any failing gate sends you back to fix-and-re-QA inside that PR's worktree. Use whenever implementation work needs to land as a PR. Triggers: 'create a PR', 'implement and PR', 'work on this and make a PR', 'implement issue', 'land this as a PR', 'split into atomic PRs', 'parallel PRs', 'work-with-pr', 'PR workflow', 'implement end to end', even when user just says 'implement X' if the context implies PR delivery."
Work With PR — Full PR Lifecycle
You are executing a complete PR lifecycle: from fresh task-owned worktree setup, through ulw-loop-driven implementation with evidence-bound manual QA, PR creation, and an unbounded verification loop until the PR is merged. The loop has two gates — CI and Cubic — and a failing gate sends you back into that PR's worktree to fix and re-QA. You keep cycling until every active gate passes at once.
The unit of delivery is the smallest PR that compiles, passes, and stands on its own — not "one task, one PR." A single task routinely splits into several atomic PRs; the lifecycle below describes ONE of them, so apply it to each, and build the independent ones concurrently (Phase 0).
<architecture>Phase 0: Setup → Split into atomic PRs, then branch + worktree per PR (parallel when independent)
Phase 1: Implement → Drive the work through the ulw-loop skill:
evidence-bound manual QA per success criterion, atomic commits
Phase 2: PR Creation → Push, create a reviewer-readable English PR targeting dev
Phase 3: Verify Loop → Unbounded iteration; a failing gate routes back to Phase 1:
├─ Gate A: CI → gh pr checks (bun test, typecheck, build)
└─ Gate B: Cubic → cubic-dev-ai[bot] "No issues found"
(SKIPPED, not failed, when Cubic's quota is exhausted)
Phase 4: Merge → Auto-merge by default; wait until actually merged, then worktree cleanup
</architecture>
Phase 0: Setup
Create a fresh isolated worktree for each PR before implementation starts. The user's main working directory is read-only context — it may have uncommitted work, and a branch checkout would destroy it. Isolation also makes parallelism cheap: one worktree per PR, so several build at once without colliding.
<setup>1. Decide the PR split
Before creating anything, decompose the task into the smallest atomic PRs that each compile, pass, and deliver one reviewable slice. Prefer more small PRs over one large one — a 200-line PR gets a real review; a 2000-line PR gets a rubber stamp. Sequence by dependency: independent slices branch off the base and run in parallel; dependent slices stack, each branched off the previous.
Building more than one independent PR concurrently is the recommended default, not an exotic option:
- Subagents — dispatch one background subagent per PR, each owning its own worktree, branch, and the full Phase 0→4 lifecycle.
- Team — for larger fan-outs, form a team (
team_mode) and assign one member per PR.
When the work is large enough to need a plan (ulw-plan), this decomposition is not optional polish: the plan MUST encode the atomic PRs, their dependency order, and which run in parallel as first-class structure.
2. Resolve repository context
REPO=$(gh repo view --json nameWithOwner -q .nameWithOwner)
REPO_NAME=$(basename "$PWD")
BASE_BRANCH="dev" # CI blocks PRs to master
3. Create branch
If user provides a branch name, use it. Otherwise, derive from the task:
# Auto-generate: feature/short-description or fix/short-description
BRANCH_NAME="feature/$(echo "$TASK_SUMMARY" | tr '[:upper:] ' '[:lower:]-' | head -c 50)"
git fetch origin "$BASE_BRANCH"
git branch "$BRANCH_NAME" "origin/$BASE_BRANCH"
4. Create worktree
Place worktrees as siblings to the repo — not inside it. This avoids git nested repo issues and keeps the working tree clean.
WORKTREE_PATH="../${REPO_NAME}-wt/${BRANCH_NAME}"
mkdir -p "$(dirname "$WORKTREE_PATH")"
git worktree add "$WORKTREE_PATH" "$BRANCH_NAME"
5. Set working context
All subsequent work happens inside the worktree. Install dependencies if needed:
cd "$WORKTREE_PATH"
# If bun project:
[ -f "bun.lock" ] && bun install
</setup>
Phase 1: Implement
Drive all implementation through the ulw-loop skill (your harness's native ultrawork loop) from inside the worktree. Do not free-hand the work: ulw-loop decomposes the brief into goals with binary success criteria, delegates code edits and QA to right-sized subagents, and — the reason it is mandatory here — forces every success criterion to be proven with evidence-bound manual QA on a real surface, not just a green test suite.
Manual QA is the gate, not the tests. This repo's rule is absolute: a change that reaches OpenCode or Codex is not done until you have driven the real harness (tmux / HTTP / browser / GUI — use the manual-QA channel table in the ulw-loop skill) AND written the evidence to disk. No evidence file means the QA did not happen, and you may NOT commit or push. "It typechecks" and "bun test is green" are NOT QA.
Scope discipline
Within each PR, stay minimal: deliver its one slice, add the test, prove it, stop. Do not refactor surrounding code, add config options, or "improve" things that aren't broken — that work belongs in its own PR, and scope creep makes failures harder to isolate.
Commit strategy
ulw-loop commits through git-master. Keep commits atomic so that if CI fails on one change you can isolate and fix it without unwinding everything:
3+ files changed → 2+ commits minimum
5+ files changed → 3+ commits minimum
10+ files changed → 5+ commits minimum
Each commit pairs implementation with its tests, and you commit a criterion only after its QA evidence is on disk.
Pre-push local validation
Before pushing, run the same checks CI will run — a cheap pre-filter that saves a ~3-5 min CI round-trip, NOT a substitute for the manual QA above:
bun run typecheck
bun test
bun run build
Fix any failure before pushing; each fix is its own atomic commit.
</implementation>Phase 2: PR Creation
<pr_creation>
Push and create PR
git push -u origin "$BRANCH_NAME"
Write the PR body in English for a human reviewer who has not followed the implementation thread. It must explain the work in plain terms, group changes by reviewer-relevant area instead of dumping files, and make QA evidence auditable without forcing the reviewer to guess what each log proves. Cite sanitized artifacts; do not paste raw secret-bearing logs, env dumps, tokens, auth headers, or private credentials into the PR.
If the PR body needs screenshots or terminal PNGs, follow docs/reference/github-attachment-upload.md: upload via GitHub user attachments from an authenticated web session, include only the final https://github.com/user-attachments/assets/<uuid> URLs, and never commit temporary images, use release assets, use external hosts, or log cookies/tokens.
gh pr create \
--base "$BASE_BRANCH" \
--head "$BRANCH_NAME" \
--title "$PR_TITLE" \
--body "$(cat <<'EOF'
## Summary
[2-4 sentences in plain language: what changed, why it changed, and how observable behavior is different after this PR.]
## Changes
[Group bullets by reviewer-relevant area, not by file. Each bullet should say what changed and how a reviewer can map it to the diff.]
## QA & Evidence
For each automated command or manual QA action:
- **What was tested:** [command or surface driven, with the behavior it was meant to prove]
- **Observed result:** [actual result, including before/after when relevant]
- **Artifact:** [`path/to/sanitized-log-or-report`]
- **Why sufficient:** [which risk or success criterion this evidence covers]
## Risks & Residuals
[Map each meaningful risk to the evidence above and state the conclusion: mitigated, accepted, or blocked. Include unavailable gates here with the concrete reason.]
## Related Issues
[Link to issue if applicable]
EOF
)"
Capture the PR number:
PR_NUMBER=$(gh pr view --json number -q .number)
</pr_creation>
Phase 3: Verification Loop
This is the core of the skill. Every active gate must pass for the PR to be ready. The loop has no iteration cap — keep going until done. Gate ordering is intentional: CI is cheapest/fastest; Cubic is external and asynchronous. Gate B (Cubic) is the one gate that can be SKIPPED rather than satisfied — only when its quota is exhausted; it is never skipped just because it found issues. A failing gate is not a patch-and-push: route back to Phase 1, where fixes get the same scope discipline and, if behavior changed, fresh manual-QA evidence before you re-enter the loop.
<verify_loop>
while true:
1. Wait for CI → Gate A
2. If CI fails → back to Phase 1: read logs, fix + re-QA, commit, push, continue
3. Check Cubic → Gate B
4. If Cubic has issues → back to Phase 1: fix + re-QA, commit, push, continue
5. If Cubic quota out → record Gate B SKIPPED, stop waiting on it
6. All active gates pass → break
Gate A: CI Checks
CI is the fastest feedback loop. Subscribe to its completion via monitor — never block a model round-trip on gh pr checks --watch.
# Subscribe to CI completion — the monitor event wakes the session when checks finish.
# Do NOT use `gh pr checks --watch` as a blocking tool call; it burns a full model
# round-trip (~29s) on every poll. Instead, register a monitor and end the turn:
monitor({
description: "CI completion for PR $PR_NUMBER",
command: "gh pr checks $PR_NUMBER --watch --fail-fast",
filter: "completed|fail|cancel"
})
# → end turn; the monitor's matching line arrives as an injected event.
# For a single midpoint status peek (at most once), use:
# gh pr checks "$PR_NUMBER" # one-shot, no --watch
On failure: Get the failed run logs to understand what broke:
# Find the failed run
RUN_ID=$(gh run list --branch "$BRANCH_NAME" --status failure --json databaseId --jq '.[0].databaseId')
# Get failed job logs
gh run view "$RUN_ID" --log-failed
Read the logs, then fix per the iteration discipline below.
Gate B: Cubic Approval
Cubic (cubic-dev-ai[bot]) is an automated review bot that comments on PRs. It does NOT use GitHub's APPROVED review state — instead it posts comments with issue counts and confidence scores.
Approval signal: The latest Cubic comment contains **No issues found** and confidence **5/5**.
Issue signal: The comment lists issues with file-level detail.
Quota-exhausted signal: Cubic posts a usage/quota/limit message instead of a review, or no Cubic review appears within the bounded wait below. This is the ONLY case where you skip Gate B and proceed — record it as SKIPPED in the final report, never silently. Issues are never a reason to skip.
# Get the latest Cubic review
CUBIC_REVIEW=$(gh api "repos/${REPO}/pulls/${PR_NUMBER}/reviews" \
--jq '[.[] | select(.user.login == "cubic-dev-ai[bot]")] | last | .body')
if echo "$CUBIC_REVIEW" | grep -q "No issues found"; then
echo "Cubic: APPROVED"
elif echo "$CUBIC_REVIEW" | grep -qiE "quota|usage limit|rate limit|out of (credits|reviews)|upgrade your plan"; then
echo "Cubic: SKIPPED (quota exhausted)" # Gate B satisfied-by-skip; do not loop on it
else
echo "Cubic: ISSUES FOUND
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
85.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
ai-job-search
43.9kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.7kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
