skills/jj/SKILL.md
Use Jujutsu (`jj`) for version control operations including status, history, diffs, commits, rebases, splits, squashes, and Git interop. Use when a repository is initialized for jj or the user asks for jj/Jujutsu workflows.
npx skillsauth add adampoit/ai jjInstall 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.
Use jj for version control when a repository has a .jj/ directory or jj status succeeds.
jj status
jj describe to set its message.Start with these read-only commands:
jj status
jj log --limit 20
jj diff --git
Inspect a specific revision:
jj show <revset>
jj evolog -r <revset>
Useful revsets:
@: current working-copy commit@-: parent of the working-copy commit::@: ancestors of the working-copy commit@::: descendants of the working-copy committrunk(): repository trunk/main baselinemine(): changes authored by the current userconflicted(): changes with conflictsmutable(): changes that can be rewrittenQuote revsets in shell commands when they contain special characters:
jj log -r 'trunk()..@'
Describe the current change before creating a new one:
jj describe -m "Explain why this change exists"
jj new
Create a new change from a specific parent:
jj new <revset>
Prefer small, atomic changes. If the working copy mixes concerns, split it before describing or submitting.
jj desc is the common shorthand for jj describe; use either form consistently with nearby docs or commands.
Move selected changes from the working copy into its parent:
jj squash
Absorb modifications into matching mutable ancestors:
jj absorb
Split a mixed change:
jj split
Split whole files or filesets non-interactively by passing paths and a message:
jj split -r @ path/to/file1 path/to/file2 -m "Move focused changes into their own commit"
jj split -r @ 'glob:src/**/*.rs' -m "Update Rust sources"
Use --onto/-o for destinations:
jj rebase -r <revset> -o <destination>
Common forms:
jj rebase -r @ -o trunk()
jj rebase -s <source> -o <destination>
jj rebase -b <branch> -o <destination>
Avoid deprecated --destination/-d examples unless an installed jj version requires them.
Fetch and push through jj in colocated Git repositories:
jj git fetch
jj git push
Create or update a Git bookmark before pushing when needed:
jj bookmark set <name> -r <revset>
jj git push --bookmark <name>
Do not use git add, git commit, or Git staging workflows in a jj repository unless the user explicitly asks for Git commands.
Inspect recent jj operations:
jj op log
Undo or redo the most recent operation:
jj undo
jj redo
Recover from a bad operation by restoring a previous operation only when the user explicitly approves:
jj op restore <operation-id>
Prefer explicit messages and non-interactive flags:
jj describe -m "Message"
jj new --no-edit <revset>
jj --no-pager log --limit 20
Use jj diff --git for familiar unified diffs; jj's default diff format can be harder for agents to read.
jj status and jj log --limit 20 so you understand the current stack.tools
Use tmux instead of background bash for long-running, interactive, inspectable, or user-attachable terminal processes. Use for development servers, watch-mode tests, REPLs, debuggers, interactive CLIs, log tailing, and commands that may run indefinitely or need later input/inspection.
tools
Manage tasks with the `task` (Taskwarrior) CLI. Use when the user asks to review tasks, get task summaries, add work items, or complete tasks.
business
Search Slack messages and read Slack threads. Use when the user asks to search Slack, find messages, look up conversations, read thread replies, or retrieve Slack content. Triggers on requests involving Slack message lookup, conversation history, or thread reading.
tools
Guide for creating effective agent skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends an AI agent's capabilities with specialized knowledge, workflows, or tool integrations.