Skill

jj

Jujutsu (jj) version control workflows and commands. Use this skill when working with jj repositories, managing changes, squashing commits, rebasing, or performing jj-specific operations.

From jj-vcs
Install
1
Run in your terminal
$
npx claudepluginhub schpet/toolbox --plugin jj-vcs
Tool Access

This skill uses the workspace's default tool permissions.

Supporting Assets
View in Repository
SKILL.template.md
references/bookmarks.md
references/config.md
references/filesets.md
references/glossary.md
references/jj-abandon.md
references/jj-absorb.md
references/jj-bisect-run.md
references/jj-bisect.md
references/jj-bookmark-create.md
references/jj-bookmark-delete.md
references/jj-bookmark-forget.md
references/jj-bookmark-list.md
references/jj-bookmark-move.md
references/jj-bookmark-rename.md
references/jj-bookmark-set.md
references/jj-bookmark-track.md
references/jj-bookmark-untrack.md
references/jj-bookmark.md
references/jj-commit.md
Skill Content

Jujutsu (jj) Version Control

Agent Usage

When reading data from jj, always use --ignore-working-copy to avoid snapshotting the working copy (which is slow and unnecessary for read operations).

Non-interactive Commands (Critical)

Many jj commands spawn $EDITOR or interactive diff tools by default. These will hang indefinitely when run by agents. Always use the non-interactive alternatives:

CommandProblemSolution
jj describeOpens editorAlways use -m "message"
jj commitOpens editorAlways use -m "message"
jj splitOpens diff editor + may open editor for descriptionProvide filesets to select files; use -m for description
jj squashMay open editor for combined descriptionUse -m "message" or -u (use destination message)

Commands to avoid entirely (no non-interactive mode):

  • jj diffedit — use jj restore or edit files directly instead
  • jj config edit — use jj config set <key> <value> instead
  • jj sparse edit — use jj sparse set --add <path> or --remove <path> instead
  • jj resolve — edit conflict markers directly in files, or use --tool :ours / --tool :theirs

Agent-Friendly Output Formats

jj's default diff and conflict formats differ from Git's. For easier parsing, use Git-compatible formats:

Diffs: Use the --git flag for unified diff output:

jj diff --git
jj log -p --git
jj show --git

Conflicts: jj uses diff-based conflict markers by default (%%%%%%%, +++++++). For standard Git-style markers (<<<<<<<, =======, >>>>>>>), pass --config when running commands that may create conflicts:

jj --config ui.conflict-marker-style=git rebase ...
jj --config ui.conflict-marker-style=git new --insert-before ...

The conflict style is applied when conflicts are materialized to the working copy, so the config must be set before the conflict occurs.

JSON: For structured/programmatic output, use the json(self) template:

jj log --ignore-working-copy --no-graph -T 'json(self) ++ "\n"'

Outputs one JSON object per line with commit_id, change_id, description, author, etc. Works with jj log, jj show, and other commands that support -T.

Common Commands

CommandDescription
jj statusShow working copy status
jj logShow commit history
jj newCreate a new change
jj describe -m "msg"Set commit message
jj squashSquash into parent
jj diffShow changes
jj git pushPush to remote
jj git fetchFetch from remote
jj bookmark create nameCreate a bookmark

Topics

In-depth guides on jj concepts and syntax.

Command Reference

Documentation generated from jj manpages. For details on any command, read the corresponding reference file.

Bisect

Bookmark

Config

File

General

Gerrit

Git

Operation

Simplify

Sparse

Tag

Util

Workspace


Generated from jj manpages (jj 0.37.0)

License

The content in the references/ directory is derived from the jj (Jujutsu) project and is licensed under the Apache License 2.0.

Stats
Parent Repo Stars1
Parent Repo Forks0
Last CommitJan 12, 2026