Codebase Modernizer
luongnv89/skills
Audit a stale, inherited, or messy codebase — deps, bugs, security, tests, CI, docs, UI/UX — then emit a phased, testable modernization plan.
Take committed work from a branch to a verified pull request — push, open the PR, settle CI and the automated review, answer and resolve every finding, and hand off.
$ npx skills add vfarcic/dot-agent-deck --skill pr-create -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vfarcic/dot-agent-deck pr-create --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/pr-create .claude/skills/pr-create && rm -rf skills-srcUse ~/.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/
Install the "pr-create" agent skill from https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-create into .claude/skills/pr-create/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-create", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-createType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add vfarcic/dot-agent-deck --skill pr-create -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vfarcic/dot-agent-deck pr-create --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/pr-create .agents/skills/pr-create && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "pr-create" agent skill from https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-create into .agents/skills/pr-create/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-create", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vfarcic/dot-agent-deck --skill pr-create -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vfarcic/dot-agent-deck pr-create --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/pr-create .cursor/skills/pr-create && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "pr-create" agent skill from https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-create into .cursor/skills/pr-create/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-create", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/vfarcic/dot-agent-deck.git --path .claude/skills/pr-create--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add vfarcic/dot-agent-deck --skill pr-create -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vfarcic/dot-agent-deck pr-create --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/pr-create .gemini/skills/pr-create && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "pr-create" agent skill from https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-create into .gemini/skills/pr-create/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-create", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install vfarcic/dot-agent-deck pr-createInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add vfarcic/dot-agent-deck --skill pr-create -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/pr-create .github/skills/pr-create && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "pr-create" agent skill from https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-create into .github/skills/pr-create/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-create", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add vfarcic/dot-agent-deck --skill pr-create -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vfarcic/dot-agent-deck pr-create --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vfarcic/dot-agent-deck.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/pr-create .opencode/skills/pr-create && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "pr-create" agent skill from https://github.com/vfarcic/dot-agent-deck/tree/main/.claude/skills/pr-create into .opencode/skills/pr-create/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "pr-create", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
pr-createTake committed work from a branch to a verified pull request — push, open the PR, settle CI and the automated review, answer and resolve every finding, and hand off.
PR Create is an agent skill from vfarcic/dot-agent-deck. Take committed work from a branch to a verified pull request — push, open the PR, settle CI and the automated review, answer and resolve every finding, and hand off. Never merges; arms auto-merge only when nothing downstream gates the merge. Use when work on a branch is finished and needs to become a reviewed PR, whether or not a PRD started it.
Its SKILL.md is about 3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Development, covering Pull requests and PRD writing. The repository describes itself as: A rich terminal dashboard for monitoring and controlling multiple AI coding agent sessions. The licence is MIT.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit c5d24e7. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
ghcargoFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
PR Create loads about 3k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 1,771 words of instructions outside code blocks.
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.
The automated check found no risky patterns in SKILL.md.
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.
The full file from vfarcic/dot-agent-deck at commit c5d24e7, republished under its MIT licence (© vfarcic). 1,771 words, ~3,013 tokens.
.claude/skills/pr-create/SKILL.md (or your agent's skills folder).Owns one arc: committed work on a branch → a PR that is green, reviewed, and ready for someone to merge.
Out of scope on purpose:
Closes #<n> in the PR body does it on merge.This file is project-local and owned by this repository — it was forked out of the dot-ai mirror precisely so corrections survive (CLAUDE.md rule 13). Edit it freely.
cargo xtask affected-checks and run what it prints (issue #1575): for a branch with any Rust, build input or unmapped path in it, that is cargo fmt --check, cargo clippy --workspace --all-targets --features e2e,e2e-live -- -D warnings and cargo test-fast; for a branch that is only mapped text (docs, skills, changelog.d/, .github/, PRDs, CLAUDE.md and the like), it is the xtask tests plus the root-package tests that read those files. cargo xtask affected-checks --run prints the plan and runs it, stopping at the first failure — prefer it to piping the printed plan into a shell, which reports success when the helper itself fails to build or run. Either way add the tests covering what you touched — name those in the PR body, since part of the tier runs on no runner anywhere. Read the rules rather than trusting this summary.#[ignore = "quarantined: <owner>, #<issue>"] on the test), and say in the PR body which, for each one. Rerunning it until green and mentioning it is neither; .claude/skills/verify-pr/SKILL.md Phase 5 has the mechanics. Before fixing a red your change did not cause, check whether an open PR already fixes it (gh pr list --search '<test name>'); if one does, name that PR in the body and leave the red to it — #1460 and #1462 both changed selectRow in desktop/driver/harness.ts to fix terminal_002.changelog.d/<issue>.<type>.md, type one of breaking|feature|bugfix|doc|misc. Release notes are built from these, not from PR labels.docs/ the PR touches, and the changelog fragment, say what the user does, sees and configures; implementation detail and issue history go to docs/develop/ or nowhere, fixed in this PR.PROTOCOL_VERSION-vs-.breaking.md question explicitly in the PR body, including the cross-version manual test. The cross-version CI job runs that test for any PR that changes the binary (docs/develop/cross-version-harness.md, "In CI"): once it passes on the head, link its run in the PR body as the record. When it reports a PROTOCOL_VERSION move instead, record that refusal as the outcome. Run cargo xver yourself only to diagnose a red job, or for a pairing the job does not set up. A .breaking.md fragment also needs its CONTRACT_BREAKS entry in src/daemon_protocol.rs (issue #801) — xtask/linkage-check fails the build without it.main — it is protected and returns GH013.gh pr create, with a body that says what changed and why, how it was verified (name the tests), and Closes #<n> — or Refs #<n> for a PR that ships only part of a PRD, which leaves the PRD open (the orchestrator template's step 5 in .dot-agent-deck.toml has the rule).
Then gh pr edit <n> --add-reviewer <the other maintainer> — but request review last, after CI and the automated review have settled and you have pushed the fixes. dismiss_stale_reviews_on_push voids an approval on any later push, so asking early buys a guaranteed second round trip.
Wait for the check-runs. gh pr checks <n> reports both CI and the reviewer's own check-run.
The wait must be bounded. An automated reviewer that is out of quota, uninstalled, or broken produces no check-run at all — there is no message and no failed state, so "wait until it appears" never terminates. Measured on this repo 2026-08-23: an exhausted Greptile quota produced zero comments and zero check-runs, indistinguishable from the app being gone.
So: give the reviewer a budget (~15 minutes from PR creation is ample; it normally lands in 3–5). If no reviewer check-run exists when the budget expires, proceed and say so explicitly in your report — "no automated review was obtained" is a result. Do not hang, and do not report the gate as passed. Never block on a reviewer that is not configured here at all.
A check that goes red here falls under the same rule as one met locally (step 1): a test that fails in CI and then passes on gh run rerun is a flaky test you have now met, so it gets a fix or a quarantine in this PR, not just the green rerun. The PR body was written before this wait, so add the red and its exit to it (gh pr edit <n> --body-file <file>) once you have taken one — the body, not only your report, is what step 1 asks to carry it.
A green check-run is not the review. The findings live only in the inline comments:
gh api repos/{owner}/{repo}/pulls/<n>/comments --paginateKeep --paginate — replies count toward the page, so a busy PR silently truncates the findings you are about to certify as read. The summary comment and the review object carry none of them, and a COMMENTED review with a passing check can still carry real defects.
For each one: fix it, or reply saying why not. Then resolve the thread.
Resolving is not bookkeeping — it is half the job, and skipping it blocks the merge twice over:
required_review_thread_resolution is on, so an unresolved thread blocks the merge button;Measured: #1035 sat a full day with 14 green checks and every finding already fixed, and #1019 sat two days on a finding the reviewer itself had retracted 34 seconds after the author rebutted it.
# unresolved thread ids — PAGINATED. `first:100` is a page, not the total, and
# resolved threads stay in the connection, so a second unpaginated call returns
# the same first 100 and silently hides the rest.
gh api graphql --paginate \
-f query='query($o:String!,$r:String!,$n:Int!,$endCursor:String){repository(owner:$o,name:$r){
pullRequest(number:$n){reviewThreads(first:100,after:$endCursor){
pageInfo{hasNextPage endCursor} nodes{id isResolved path}}}}}' \
-f o=<owner> -f r=<repo> -F n=<pr> \
--jq '.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved==false) | .id'
gh api graphql -f query='mutation($t:ID!){resolveReviewThread(input:{threadId:$t}){thread{isResolved}}}' -f t=<id>Re-run the query after resolving and confirm it returns nothing. "I resolved the ones I saw" is not the same claim as "none is unresolved".
Resolve only what you actually addressed. Leave a thread open when you are waiting on the commenter, or when they asked something they still need answered there — a thread closed over unaddressed feedback is worse than one left open.
Push fixes before requesting review (step 2). Greptile does not re-review — greptile.json sets triggerOnUpdates: false — but Qodo, evaluated beside it, re-reviews on every push (.pr_agent.toml). So after your last push, wait for Qodo too, and repeat this step for anything new it raised; a finding raised on your final push and left unanswered is still an unresolved thread blocking the merge. Do not wait the way step 3 waits: that wait keys on a check-run, and Qodo creates none — measured 2026-09-24 on #1235, #1257 and #1271, where the head commit's check-runs carry Greptile Review and nothing from Qodo, so "until its check appears" never returns. Wait on its summary comment instead: it edits one comment in place rather than posting a new one, and the body names the head SHA it reviewed, so the review is done for this push when that body cites your head. Bound it the same way regardless, and proceed reporting that no re-review was obtained. Its medium and above findings arrive at the same endpoint as Greptile's and are answered and resolved the same way; its informational tier stays in that summary comment (inline_comments_severity_threshold = 2), so read it as well as the inline endpoint.
Report and stop: PR URL, check status, each finding and what you did about it, each red you met and whether it was fixed or quarantined, and whether an automated review was obtained at all.
Arm auto-merge only when nothing downstream gates the merge. gh pr merge <n> --auto --squash waits for exactly what a manual merge needs — the approval, the required checks, every thread resolved — so against a bare hand-off it is not a bypass.
It is not a way to wait for a check that is not required. The required contexts here are build, build-macos, build-windows, security and e2e-deterministic (verified 2026-09-22 against gh api repos/vfarcic/dot-agent-deck/rules/branches/main, ruleset rules only; the classic protection on main requires none); everything else on the page — renovate/stability-days, Greptile Review, notify-main-red — holds nothing, on either path. Armed at hand-off, before the approval, the PR reads BLOCKED, gh arms it, and GitHub merges it the moment the approval lands, pending unrequired check or not — autoMergeRequest is set, so nothing looks wrong. Run after the approval with only an unrequired check outstanding, the PR is already mergeable (UNSTABLE) and gh drops the flag and merges on the spot, because isImmediatelyMergeable counts UNSTABLE (pkg/cmd/pr/merge/merge.go:593 and :826, at gh v2.100.0): exit 0, silent when stdout is not a terminal, and gh pr view <n> --json autoMergeRequest reading null after the call is the tell. #1208, already approved, landed a lockfile update inside Renovate's stability window that second way (#1222). So read gh pr checks <n> before arming; if an unrequired check is pending and matters, do not arm — poll that check and merge when it passes, or leave the PR disarmed for a person. CLAUDE.md rule 8.
It is a bypass when your caller has a gate of its own after this step. The orchestrated PRD workflow is exactly that shape: .dot-agent-deck.toml runs this skill at step 5, then builds a demo reel at step 6, then asks the user for an explicit merge go-ahead at step 7. Arming here would land the PR the moment the approval arrived — during step 6, with nobody present — and nothing later can un-arm it, because re-running this skill only arms it again.
So the default is do not arm; arm only when you are the last gate. If you were told to stop before merge, that is your answer: report and leave it disarmed.
docs/develop/governance.md — the ruleset, bypass actors, who may merge, the emergency override.© vfarcic, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/pr-create of vfarcic/dot-agent-deck.
Open the folder on GitHubat commit c5d24e7
PR Create 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| PR Create this skillvfarcic/dot-agent-deck | 109 | — | ~3k | Automated safety check: Pass | MIT | |
| Codebase Modernizerluongnv89/skills | 131 | — | ~5k | Automated safety check: Pass | MIT | |
| Astro Code Reviewwithastro/astro | 63k | — | ~7.6k | Automated safety check: Pass | Custom licence | |
| Specwarpdotdev-demos/cloud-factory-demo | 320 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Panel Reviewstacklok/mecatl | 218 | — | ~5.8k | Automated safety check: Pass | Apache-2.0 | |
| Schematicblader/schematic | 239 | — | ~2.2k | Automated safety check: Pass | MIT |
luongnv89/skills
Audit a stale, inherited, or messy codebase — deps, bugs, security, tests, CI, docs, UI/UX — then emit a phased, testable modernization plan.
withastro/astro
Perform a static, read-only code review of an Astro pull request or of a local branch, commit range, diff, patch, or working tree being prepared as a pull request.
warpdotdev-demos/cloud-factory-demo
Coordinate spec-driven development for a GitHub, Jira, Linear, or other issue-tracker issue marked ready-to-spec by using write-product-spec and write-tech-spec, creating PRODUCT.md and TECH.md…
stacklok/mecatl
Review completed non-trivial code across four independent axes: Spec, Standards, Test adequacy, and installed Domain specialists.
blader/schematic
Reverse engineer a detailed product and technical specification document from a git branch's implementation.
Wirasm/prp
Autonomously owns one workstream from an issue, PRD, document, existing plan, or free-form request through planning, implementation, pull request, independent review, corrections, and green CI.
vfarcic/dot-agent-deck
Choose the shape of a unit you are about to dispatch in this repo — one agent (--single) or a team (--orchestration '<name') — from divisibility criteria instead of asking, and report the shape you…
vfarcic/dot-agent-deck
Check that a change to the user-facing docs covers both clients (the TUI and the desktop app) unless the feature exists in only one, and decide whether it needs a new or updated screenshot, then…
vfarcic/dot-agent-deck
Generate a feature request prompt for another dot-ai project.
vfarcic/dot-agent-deck
Publish the docs site to GHCR with a main-<sha tag and bump site/helm/values.yaml so Argo CD picks it up — without cutting a SemVer release.
vfarcic/dot-agent-deck
Run, build, smoke-test, and screenshot the dot-agent-deck binary against an isolated sandbox.
vfarcic/dot-agent-deck
Stitch a manifest of terminal recordings into one narrated MP4 (title/description card, then clip, repeated) and optionally upload it privately to YouTube.
Categories
Take committed work from a branch to a verified pull request — push, open the PR, settle CI and the automated review, answer and resolve every finding, and hand off. PR Create is an agent skill from vfarcic/dot-agent-deck. Take committed work from a branch to a verified pull request — push, open the PR, settle CI and the automated review, answer and resolve every finding, and hand off.
PR Create fits situations like: work on a branch is finished and needs to become a reviewed PR; not a PRD started it.
Run `npx skills add vfarcic/dot-agent-deck --skill pr-create -a claude-code`. Or copy the skill folder (.claude/skills/pr-create in vfarcic/dot-agent-deck) into .claude/skills/pr-create in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vfarcic/dot-agent-deck --skill pr-create -a codex`. Or copy the skill folder (.claude/skills/pr-create in vfarcic/dot-agent-deck) into .agents/skills/pr-create in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add vfarcic/dot-agent-deck --skill pr-create -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/pr-create, .gemini/skills/pr-create, .github/skills/pr-create and .opencode/skills/pr-create in your project.
Going by SKILL.md and its folder, PR Create needs the command-line tools its instructions call (gh and cargo).
SKILL.md contains no URLs. Its commands use gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
PR Create is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with PR Create: Codebase Modernizer (luongnv89/skills, 131 stars), Astro Code Review (withastro/astro, 63k stars), Spec (warpdotdev-demos/cloud-factory-demo, 320 stars) and Panel Review (stacklok/mecatl, 218 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vfarcic (a GitHub user) maintains it in vfarcic/dot-agent-deck, which has 109 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 7, 2026.
Source: vfarcic/dot-agent-deck on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.