pr-open
Open a pull request the bklit-ui way: stage and commit with pre-commit hooks, run ultracite from the repo root, rebuild the shadcn registry, run a production test build, fix failures, push, and create a PR with a structured summary. Use when the user asks to commit, push, open a PR, "ship it", or run the full pre-PR checklist.
How do I install this agent skill?
npx skills add https://github.com/bklit/bklit-ui --skill pr-openIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides a structured workflow for committing code and opening pull requests. It incorporates safety checks such as preventing the commitment of secrets and ensuring local builds and linting pass before pushing code.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
PR Open Skill
End-to-end workflow for committing work and opening a merge-ready PR in bklit-ui.
Read this skill when the user wants to add, commit, validate, push, and open a PR — or references @pr-open.
Before you start
-
Confirm branch context
- If the user merged an earlier PR on this branch and there are new changes, branch from latest
maininstead of stacking on a stale feature branch:git fetch origin main git checkout -b <new-branch-name> origin/main - Re-apply or cherry-pick only the intended changes; do not commit unrelated
registry:buildnoise (e.g. reformattedpackages/ui/registry/examples/*unless those edits are intentional).
- If the user merged an earlier PR on this branch and there are new changes, branch from latest
-
Never commit secrets — skip
.env, credentials, API keys, etc. Warn the user if they ask to commit them. -
Git safety (required)
- Do not update git config.
- Do not run destructive commands (
push --force,reset --hard) unless the user explicitly asks. - Do not skip hooks (
--no-verify) unless the user explicitly asks. - Do not
git commit --amendunless all amend rules in the user's git rules are satisfied (HEAD commit is yours, not pushed, or user requested amend). - If a commit fails due to a hook, fix the issue and create a new commit — do not amend a failed commit.
- Use HEREDOC for commit messages (see below).
- Do not push unless the user asked to push or open a PR.
Step 1 — Inspect changes
Run in parallel from the repo root:
git status
git diff
git diff --staged
git log -5 --oneline
If opening a PR, also check divergence from base:
git fetch origin main
git log origin/main..HEAD --oneline
git diff origin/main...HEAD --stat
Draft a commit message that explains why, not just what. Match recent repo style (e.g. feat(charts): …, fix(web): …).
Step 2 — Stage and commit (pre-commit loop)
Stage
git add <paths> # prefer explicit paths over blind git add -A
Commit
git commit -m "$(cat <<'EOF'
<subject line>
<optional body — 1–2 sentences on why>
EOF
)"
Husky pre-commit runs npx ultracite fix (see .husky/pre-commit).
If pre-commit fails or leaves unstaged fixes
- Read the hook output and fix every reported issue (lint correctness, nested ternaries,
biome-ignoreonly when justified, etc.). - Re-stage affected files:
git add <paths> - Commit again with a new commit (or amend only if amend rules allow and the previous commit succeeded but the hook auto-modified files).
Repeat until git commit succeeds and git status is clean (no leftover hook formatting).
Step 3 — Ultracite from repo root
After commits are clean, run the root pnpm scripts (not npx ultracite directly unless fixing a one-off):
pnpm lint # ultracite check
If check fails:
pnpm lint:fix # ultracite fix (same as pnpm format)
Then:
- Review
git difffor unexpected changes. - If files changed:
git add <paths>→git commit -m "$(cat <<'EOF' Fix lint issues from ultracite EOF )" - Re-run
pnpm lintuntil it passes with no fixes pending.
Do not open a PR while pnpm lint fails or while lint fixes are unstaged.
Step 4 — Rebuild shadcn registry (required)
Always run this before the production build on every PR — not only when packages/ui changed. Registry artifacts under apps/web/public/r/ must stay in sync with the committed UI package.
From the repo root:
pnpm registry:build
This updates apps/web/public/r/ from packages/ui (see packages/ui/package.json → registry:build).
- Review
git diffafter the build. Include intentional changes underapps/web/public/r/. - Do not commit incidental reformats on
packages/ui/registry/examples/*unless those edits are intentional. - If
apps/web/public/r/(orpackages/ui/registry.jsonwhen you edited it) changed:
git add apps/web/public/r packages/ui/registry.json
git commit -m "$(cat <<'EOF'
chore(registry): rebuild shadcn registry for PR
EOF
)"
- Re-run Step 3 (
pnpm lint) if any source files changed outsidepublic/r/.
Do not open a PR while registry outputs are stale (uncommitted apps/web/public/r/ diffs after registry:build).
Step 5 — Test build
Run a production build to catch type and compile errors before the PR.
Default (whole monorepo):
pnpm build
Web app only (faster when changes are confined to apps/web):
cd apps/web && pnpm build
If the web build OOMs in dev/CI-like environments, retry with more heap:
cd apps/web && NODE_OPTIONS='--max-old-space-size=8192' pnpm build
Optional but recommended when touching TypeScript:
pnpm check-types
If build fails
- Fix the root cause (types, imports, missing registry files, etc.).
- Re-run the failing command until it passes.
- Commit fixes with a clear message, then re-run Step 3 (
pnpm lint) and Step 4 (pnpm registry:build) if source files underpackages/uichanged.
Step 6 — Push
Only when the user asked to push or open a PR:
git push -u origin HEAD
If the branch was already pushed and you added commits, git push is enough.
Step 7 — Open the PR
Use GitHub CLI from the repo root:
gh pr create --title "<PR title>" --body "$(cat <<'EOF'
## Summary
- <bullet: what changed and why>
- <bullet: user-facing impact>
- <bullet: follow-ups or deploy notes if any>
## Test plan
- [ ] `pnpm lint` passes at repo root
- [ ] `pnpm registry:build` run; `apps/web/public/r/` committed if updated
- [ ] `pnpm build` (or `apps/web` build for web-only changes)
- [ ] <manual verification step 1>
- [ ] <manual verification step 2>
EOF
)"
Return the PR URL to the user.
PR title guidelines
- Short, imperative, scoped (e.g.
Add @bklit/chart-animation registry item) - Match the primary commit subject when possible
PR body template (copy structure every time)
## Summary
- <1–3 bullets: what and why>
## Test plan
- [ ] `pnpm lint` passes at repo root
- [ ] `pnpm registry:build` run; registry outputs committed if changed
- [ ] Production build succeeds (`pnpm build` or scoped web build)
- [ ] <feature-specific check>
- [ ] <regression check if applicable>
Add extra sections only when useful:
- Context — link to a merged PR or issue (e.g. "Follow-up to #70")
- Deploy notes — e.g. registry JSON must be live on
ui.bklit.comfor Open in v0
Repo-specific PR notes
- Registry: Step 4 always runs
pnpm registry:build; commitapps/web/public/r/when the build updates it. - Do not commit incidental reformats from
registry:buildonpackages/ui/registry/examples/*unless intentional. - Chart/docs work: mention manual checks for docs pages, Studio, or Open in v0 when relevant.
Full checklist (quick reference)
| Step | Command / action | Must pass before next step |
|---|---|---|
| 1 | git status / git diff / git log | Understand scope |
| 2 | git add → git commit | Pre-commit hook clean; working tree clean |
| 3 | pnpm lint → pnpm lint:fix if needed → re-commit | pnpm lint exits 0 |
| 4 | pnpm registry:build → commit apps/web/public/r/ if changed | No stale registry diff |
| 5 | pnpm build (and pnpm check-types if TS changed) | Build exits 0 |
| 6 | git push -u origin HEAD | Only if user requested push/PR |
| 7 | gh pr create with Summary + Test plan | PR URL returned |
Common failures
| Failure | Fix |
|---|---|
| Pre-commit biome errors | Fix code; add biome-ignore only with a one-line justification |
| Hook fixed files but commit already succeeded | git add + new commit (or amend if allowed) |
pnpm lint fails after commit | pnpm lint:fix, review diff, commit, re-run pnpm lint |
Can't resolve './animation' in registry consumers | Add missing @bklit/* registry deps; run pnpm registry:build |
| Web build OOM | NODE_OPTIONS='--max-old-space-size=8192' for apps/web build |
| PR branch already merged | New branch from origin/main, re-apply only new changes |
Example flow
User: "commit this and open a PR"
git status+git diff+git log -3git add apps/web packages/ui→git commit(fix pre-commit until clean)pnpm lint→pnpm lint:fixif needed → commit →pnpm lintpnpm registry:build→ commitapps/web/public/r/if changedpnpm build(fix until green) → commit if neededgit push -u origin HEADgh pr createwith Summary + Test plan template- Reply with PR link and one-line summary of what was validated
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/bklit/bklit-ui/pr-open">View pr-open on skillZs</a>