feat(pr)!: extract /pr skill from /push #1

Merged
claudiomaradonna merged 3 commits from feat/extract-pr-skill into main 2026-04-30 17:45:00 +02:00

Split the PR/MR-opening logic out of /push into a dedicated /pr skill, restoring the "one job per skill" pattern already used between /commit and /push. The change is motivated by the way users actually work: people open a PR days after pushing, after rebasing, or on a branch they pushed manually — bundling the prompt into /push made all of those flows awkward and the prompt-or-not coupling fought the rest of the workflow. /pr now owns provider detection (including self-hosted via CLI logins or env vars), refuses to create a duplicate when an open PR already exists, and either invokes the matching CLI or hands back a compare URL. /push keeps a courtesy compare-URL hint at handoff, but no longer asks anything PR-related. Bumps to 0.4.0.

Merge: rebase.

Split the PR/MR-opening logic out of `/push` into a dedicated `/pr` skill, restoring the "one job per skill" pattern already used between `/commit` and `/push`. The change is motivated by the way users actually work: people open a PR days after pushing, after rebasing, or on a branch they pushed manually — bundling the prompt into `/push` made all of those flows awkward and the prompt-or-not coupling fought the rest of the workflow. `/pr` now owns provider detection (including self-hosted via CLI logins or env vars), refuses to create a duplicate when an open PR already exists, and either invokes the matching CLI or hands back a compare URL. `/push` keeps a courtesy compare-URL hint at handoff, but no longer asks anything PR-related. Bumps to 0.4.0. Merge: rebase.
Introduce a dedicated skill for opening pull/merge requests, separate
from /push. Mirrors the existing /commit -> /push handoff pattern: each
skill has one responsibility.

The skill detects the provider dynamically from the remote URL
(GitHub, GitLab, Gitea/Forgejo, Bitbucket) and covers self-hosted
instances via existing CLI logins or env vars
(GITEA_SERVER_URL+GITEA_SERVER_TOKEN, GH_HOST+GH_TOKEN, GITLAB_HOST+
GITLAB_TOKEN). It refuses to duplicate an already-open PR for the
branch, composes a Conventional-Commits-aligned title and a
motivation-focused body, and either invokes the matching CLI
(gh/glab/tea) or hands the user a ready-to-click compare URL.

Pre-flight refuses to operate on an unpushed branch and never
auto-pushes: surfaces the gap and points at /push instead.

This commit is purely additive; /push still owns its PR-opening
logic and is reshaped in the next commit.
Remove provider detection, PR/MR offer, body composition, and CLI
invocation from /push. The skill now stops after the push and hands
off to /pr - mirroring how /commit hands off to /push. Each skill
owns one responsibility.

A courtesy compare-URL hint is still printed when the host matches
a well-known pattern (no CLI probing, no env var bootstrap, no
provider login auth). The URL is cheap to compute and useful even
for users who never invoke /pr; full provider detection lives in
/pr.

The two safety rules that only made sense for PR opening ("never
open a PR/MR without explicit yes", "never assume the provider is
GitHub") move to /pr.

BREAKING CHANGE: /push no longer asks "Want me to open a PR/MR?".
Users who relied on that single-prompt flow should invoke /pr after
/push, or use the compare URL printed at handoff to open the PR
manually.
Bump plugin version to 0.4.0 and update cross-cutting documentation
to reflect the new three-skill chain /commit -> /push -> /pr:

- /commit handoff now names both /push and /pr explicitly.
- README skills bullets and workflow sections cover each skill in
  turn; safety rules split per-skill.
- plugin manifest description mentions all three skills.
- claude-jail companion Dockerfile retargets PR/MR opening to /pr.

Minor bump because the change is additive at the plugin level (a
new skill) plus a contained behavioral shift on /push that has a
clear migration path (invoke /pr afterwards, or use the printed
compare URL).
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
claudiomaradonna/claude-plugin-conventional-commit!1
No description provided.