From jj
Activated when the user is in a Jujutsu (jj) repository and describes VCS operations in natural language — such as splitting a change, squashing changes together, rebasing, creating new changes, editing past changes, setting bookmarks, resolving conflicts, duplicating changes, backing out changes, managing workspaces, or any version control task in a jj repository. Detects .jj directory presence to confirm jj context.
How this skill is triggered — by the user, by Claude, or both
Slash command
/jj:jj-workflowThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Translate natural language VCS requests into correct `jj` commands when working in a Jujutsu repository.
Translate natural language VCS requests into correct jj commands when working in a Jujutsu repository.
Use when ALL of these conditions are met:
.jj directory exists in the project root (verify with ls -d .jj 2>/dev/null)jj commandsDo NOT use when:
.jj directory (this is not a jj repo)jj command they want to run| User Intent | jj Command | Notes |
|---|---|---|
| Start new work / new change | jj new | Creates empty change on top of current |
| New change from specific parent | jj new <rev> | Branch from a specific revision |
| New change with multiple parents | jj new <rev1> <rev2> | Creates a merge change |
| Go back and edit a past change | jj edit <rev> | Moves working copy to that change |
| See what I'm working on | jj status | Shows working copy status |
| User Intent | jj Command | Notes |
|---|---|---|
| Add/update commit message | jj describe -m "message" | Describes current working copy |
| Describe a different change | jj describe <rev> -m "msg" | Describe any change |
| Combine with parent | jj squash | Squash current into parent |
| Squash specific change into another | jj squash --from <src> --into <dst> | Flexible squash |
| Split change into two | jj split | Interactive split |
| Split specific files out | jj split <paths> | Split by file |
| Discard / throw away a change | jj abandon <rev> | Remove change from history |
| User Intent | jj Command | Notes |
|---|---|---|
| Move change to different parent | jj rebase -r <rev> -d <dest> | Rebase single change |
| Move change and its descendants | jj rebase -s <rev> -d <dest> | Rebase subtree |
| Move change and reparent children | jj rebase -b <rev> -d <dest> | Rebase branch |
| Put change on top of trunk/main | jj rebase -r <rev> -d 'trunk()' | Common rebase target |
| User Intent | jj Command | Notes |
|---|---|---|
| Create / move a bookmark | jj bookmark set <name> -r <rev> | Set bookmark at revision |
| List bookmarks | jj bookmark list | Show all bookmarks |
| Delete a bookmark | jj bookmark delete <name> | Remove bookmark |
| Track remote bookmark | jj bookmark track <name>@<remote> | Start tracking |
| User Intent | jj Command | Notes |
|---|---|---|
| Push changes | jj git push | Push bookmarked changes |
| Fetch latest | jj git fetch --all-remotes | Fetch from all remotes |
| Import git refs | jj git import | Sync git state into jj |
| Export jj to git | jj git export | Sync jj state to git |
| User Intent | jj Command | Notes |
|---|---|---|
| Copy a change | jj duplicate <rev> | Duplicate without moving |
| Reverse a change | jj backout -r <rev> | Create inverse change |
| Resolve conflicts | jj resolve | Launch merge tool |
| Show diff | jj diff | Current change diff |
| Show diff of specific change | jj diff -r <rev> | Diff for any change |
| Restore file from another change | jj restore --from <rev> <path> | Restore specific file |
| Create workspace | jj workspace add <path> | Multiple working copies |
| Undo last operation | jj op undo | Undo last jj operation |
When handling a natural language VCS request:
.jj exists. Check if colocated (.git also exists).jj log --limit 5 to understand the current change graph.jj log --limit 5 or jj status.Some requests require multiple commands. Common patterns:
"Move this change before that one":
jj rebase -r <this> -d <that-parent>jj rebase -r <that> -d <this>"Start a new feature from main":
jj new 'trunk()'jj bookmark set feature-name"Clean up and submit":
jj squash (combine with parent if needed)jj describe -m "message"jj bookmark set <name> -r @jj git push (if colocated)Help users with jj's revision syntax when needed:
@ — current working copy@- — parent of working copytrunk() — main/master bookmarkmine() — changes authored by current userempty() — changes with no diffconflict() — changes with conflicts<rev>- — parent of revision<rev>+ — children of revision<rev1>::<rev2> — range between revisionsnpx claudepluginhub musingfox/cc-plugins --plugin jjGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.