From jj
Updates 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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jj:jj-update-prThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill enables updating existing pull request descriptions with fresh AI-generated content based on the current state of the change.
This skill enables updating existing pull request descriptions with fresh AI-generated content based on the current state of the change.
CRITICAL: This workflow requires jj and gh CLI access with authentication. Always use:
required_permissions: ["all"]
When the user asks to update a PR description (e.g., "update the PR", "refresh PR description", "sync PR with changes"):
Default to @- (parent of working copy) unless the user specifies a different change.
jj log -r <change> -T 'bookmarks' --no-graph
gh pr view <branch>
If no PR exists, suggest using the jj-create-pr workflow instead.
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)jj diff -r <change>
Based on the diff, write a fresh 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
Update both title and body:
gh pr edit <branch> --title "<new_title>" --body "<new_description>"
Or update body only:
gh pr edit <branch> --body "<new_description>"
User: "Update the PR for @-"
# 1. Get branch name
jj log -r @- -T 'bookmarks' --no-graph
# Output: "push-abc123"
# 2. Verify PR exists
gh pr view push-abc123
# (shows PR details)
# 3. Get updated title (generates one from diff if description is empty — see Step 4)
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
# 4. Get current diff
jj diff -r @-
# (analyze the output)
# 5. Update PR with new description
gh pr edit push-abc123 \
--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
- Updated API documentation"
jj-create-pr workflowgh pr viewCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub hotthoughts/jj-skills --plugin jj