From jj
Creates GitHub pull requests from Jujutsu changes with AI-generated descriptions from diffs. Use when pushing changes for review or opening PRs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jj:jj-create-prThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill enables creating GitHub pull requests from jj changes with automatically generated PR descriptions based on the diff.
This skill enables creating GitHub pull requests from jj changes with automatically generated PR descriptions based on the diff.
CRITICAL: This workflow requires jj and gh CLI access with authentication. Always use:
required_permissions: ["all"]
When the user asks to create a PR (e.g., "create a PR", "push for review", "open PR for @-"):
Default to @- (parent of working copy) unless the user specifies a different change.
# Get the change ID being pushed
jj log -r <change> --no-graph -T 'change_id ++ "\n"' | head -1
Extract the first line of the change's description:
jj log -r <change> -T description --no-graph | head -1
If the description is empty, run the Description Check Protocol (see jj-workflow skill) to generate a conventional commit description from the diff, then re-extract the title:
jj status — if @ is a placeholder (no modified files), evaluate @- carefully: verify it has a non-empty diff AND no trunk bookmarks (main, master, main@origin) before targeting it. If @- carries a trunk bookmark, ask the user which change to use.jj diff -r <change> to understand what changedjj describe -r <change> -m "type: concise description" (or use --stdin if preserving an existing body — see jj-workflow protocol)Get the diff to understand what changed:
jj diff -r <change>
Based on the diff, write a concise PR description:
Example format:
## Summary
Brief description of what this PR accomplishes.
## Changes
- Added X to handle Y
- Refactored Z for better performance
- Fixed bug where A caused B
First check if the change already has a named bookmark:
jj log -r <change> -T 'bookmarks' --no-graph
If no bookmark exists, create one by slugifying the change description (e.g. "feat: add auth" → feat-add-auth):
jj bookmark create <slug> -r <change>
jj git push --bookmark <slug>
Fallback — let jj auto-create a push-<hash> bookmark:
jj git push -c <change>
Parse the branch name from output. Look for patterns:
Creating bookmark <branch> or Add bookmark <branch>Move sideways bookmark <branch> fromgh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
Fallback to main if unavailable.
gh pr create \
--base <default_branch> \
--head <branch_name> \
--title "<pr_title>" \
--body "<generated_description>" \
--assignee @me
User: "Create a PR for @-"
# 1. Get title (generates one from diff if description is empty — see Step 2)
jj log -r @- -T description --no-graph | head -1
# Output: "feat: add user authentication"
# If empty: run the Description Check Protocol to generate one, then re-extract
# 2. Get diff
jj diff -r @-
# (analyze the output)
# 3. Check for existing bookmark, create one if missing
jj log -r @- -T 'bookmarks' --no-graph
# Output: (empty — no bookmark yet)
jj bookmark create feat-add-user-authentication -r @-
jj git push --bookmark feat-add-user-authentication
# Output: "Add bookmark feat-add-user-authentication..."
# 4. Get default branch
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'
# Output: "main"
# 5. Create PR with generated description
gh pr create \
--base main \
--head feat-add-user-authentication \
--title "feat: add user authentication" \
--body "## Summary
Adds JWT-based user authentication to the API.
## Changes
- Added auth middleware for token validation
- Created login and register endpoints
- Added user model with password hashing" \
--assignee @me
When generating the description:
gh pr view to see existing PRnpx claudepluginhub hotthoughts/jj-skills --plugin jjUpdates existing GitHub pull request descriptions with AI-generated content from current jj diffs. Use to refresh PRs, sync with changes, or regenerate summaries and bullet-point change lists.
Creates or updates pull requests with conventional commits using GitHub CLI or Graphite. Analyzes diffs, generates titles and descriptions, supports issue linking and Graphite stacks.
Creates pull requests following Sentry's engineering practices, generating structured descriptions with what changed, why, and reviewer context. Requires GitHub CLI.