jj
Skill2 starsChanged 13 days agoMITView on GitHub
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.
- Commits and pushes
In this repository11 other files it gives its agents.
- AGENTS.mdAGENTS.md
- agents-mdSkill
- chatgpt-share-markdownSkill
- ddgrSkill
- ghSkill
- jiraSkill
- khalSkill
- notmuchSkill
- skill-creatorSkill
- taskwarriorSkill
- tmux-interactive-processesSkill
The file
We split this skill into the rules it gives an agent
12 rules. About 0 are common, 7 are distinctive, and 5 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
5
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 8
Use jj for version control when a repository has a .jj/ directory or jj status succeeds.
- Distinctive: line 23
Start with these read-only commands:
- Distinctive: line 64
Create a new change from a specific parent:
- Distinctive: line 70
Prefer small, atomic changes.
- Very specific: line 103
Use --onto/-o for destinations:
- Very specific: line 117
Avoid deprecated --destination/-d examples unless an installed jj version requires them.
- Distinctive: line 128
Create or update a Git bookmark before pushing when needed:
- Distinctive: line 135
Do not use git add, git commit, or Git staging workflows in a jj repository unless the user explicitly asks for Git commands.
- Distinctive: line 160
Prefer explicit messages and non-interactive flags:
- Very specific: line 168
Use jj diff --git for familiar unified diffs.
- Distinctive: line 172
Only push, restore operations, abandon changes, or rewrite unrelated user changes when explicitly requested.
- Very specific: line 173
Before mutating history, inspect jj status and jj log --limit 20 so you understand the current stack.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
jj
Use jj for version control when a repository has a .jj/ directory or jj status succeeds.
jj statusCore Model
- There is no staging area; commands operate on the current change or selected revisions.
- The working copy is a mutable commit/change. Use
jj describeto set its message. - Change IDs are stable across rewrites; commit IDs change when contents or metadata change.
- Most history edits are safe because jj records operations in the operation log.
Inspect State
Start with these read-only commands:
jj status
jj log --limit 20
jj diff --gitInspect 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 rewritten
Quote revsets in shell commands when they contain special characters:
jj log -r 'trunk()..@'Make Commits
Describe the current change before creating a new one:
jj describe -m "Explain why this change exists"
jj newCreate 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.
Refine History
Move selected changes from the working copy into its parent:
jj squashAbsorb modifications into matching mutable ancestors:
jj absorbSplit a mixed change:
jj splitSplit 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"Rebase
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.
Git Interop
Fetch and push through jj in colocated Git repositories:
jj git fetch
jj git pushCreate 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.
Operation Log
Inspect recent jj operations:
jj op logUndo or redo the most recent operation:
jj undo
jj redoRecover from a bad operation by restoring a previous operation only when the user explicitly approves:
jj op restore <operation-id>Non-Interactive Safety
Prefer explicit messages and non-interactive flags:
jj describe -m "Message"
jj new --no-edit <revset>
jj --no-pager log --limit 20Use jj diff --git for familiar unified diffs; jj's default diff format can be harder for agents to read.
Guardrails
- Only push, restore operations, abandon changes, or rewrite unrelated user changes when explicitly requested.
- Before mutating history, inspect
jj statusandjj log --limit 20so you understand the current stack.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

