jj/skills/jj-workflow/SKILL.md
This skill should be used when the user is in a Jujutsu (jj) repository and describes VCS operations using jj terminology or neutral 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, or managing workspaces. Assumes the user is already thinking in jj terms. Do NOT use when the user uses Git-specific vocabulary (commit, branch, checkout, stash) — use git-to-jj instead for translation. Detects .jj directory presence to confirm jj context.
npx skillsauth add musingfox/cc-plugins jj-workflowInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 revisionsdata-ai
Unified entry point for Obsidian daily-note captures and long-form notes. Triggers on "記一下 / log / 紀錄 / capture this / 寫到 journal" (→ cap mode) and "建立筆記 / new note / 寫一份筆記 / create a note on" (→ note mode). Also via `/obw:cap` and `/obw:note`. Requires `.obsidian.yaml`.
tools
Use the `gog` CLI to operate Google Workspace — Gmail (read/search/send/labels/drafts), Calendar (events/RSVP/freebusy/focus-time/out-of-office), and Drive (list/search/upload/ download/share/move). Triggers on any Gmail, inbox, email, calendar, agenda, meeting, schedule, RSVP, Drive, Google Doc/Sheet/Slides, file share, or upload/download request.
documentation
Interactively create .obsidian.yaml for a project and install starter templates (task / doc / adr) into the vault's Templates folder. Skips templates that already exist; never overwrites.
tools
Manage project hook-guard installation — set up, diagnose, or update Claude Code hooks, git pre-commit, and commit-msg scripts with security checks, code-quality gates, and CLAUDECODE skip logic. Triggers on "set up hooks", "configure pre-commit", "add linting hooks", "initialize hook-guard", "check hooks", "hook doctor", "verify hook setup", "troubleshoot hooks", "update hooks", "regenerate hooks", "sync hooks with current tools", or similar requests.