id = "jj"
name = "Jujutsu"
homepage = "https://github.com/jj-vcs/jj"
description = "A Git-compatible version control system that is both simple and powerful."
executables = ["jj"]
[dotfiles]
paths = [
"~/.jjconfig.toml",
"[configHome]/jj/config.toml",
"[configHome]/jj/conf.d/",
]
secret = []
side_effect = false
[commands]
format = 1
label = "Jujutsu"
description = "Common Jujutsu jobs: log, new change, describe, git clone and git push. Pick a subcommand."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false }
[[commands.subcommand]]
path = ["log"]
label = "Show revision history"
description = "Show the graph of revisions. Template and diff-tool options are left out."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://docs.jj-vcs.dev/latest/cli-reference/"
revision = "2026-10-27"
evidence = """
**Usage:** `jj log [OPTIONS] [FILESETS]...`
* `<FILESETS>` — Show revisions modifying the given paths
* `-r`, `--revision <REVSETS>` — Which revisions to show
* `-n`, `--limit <LIMIT>` — Limit number of revisions to show
* `--reversed` — Show revisions in the opposite order (older revisions first)
* `-G`, `--no-graph` — Show a flat list of revisions instead of a graph
* `-p`, `--patch` — Show patch
* `-s`, `--summary` — For each path, show only whether it was modified, added, or deleted
* `--stat` — Show a histogram of the changes
"""
[[commands.subcommand.field]]
id = "filesets"
label = "Paths"
type = "path"
path = { kind = "any", role = "input" }
position = 0
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "revision"
label = "Revisions (revset)"
type = "string"
option = ["--revision", "-r"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "limit"
label = "Limit"
type = "integer"
option = ["--limit", "-n"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "reversed"
label = "Oldest first"
type = "boolean"
option = ["--reversed"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "no_graph"
label = "Flat list (no graph)"
type = "boolean"
option = ["--no-graph", "-G"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "patch"
label = "Show patch"
type = "boolean"
option = ["--patch", "-p"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "summary"
label = "Summary of changed paths"
type = "boolean"
option = ["--summary", "-s"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "stat"
label = "Change histogram"
type = "boolean"
option = ["--stat"]
sources = ["ref"]
[[commands.subcommand.task]]
id = "recent"
label = "Recent history"
fields = ["limit", "no_graph"]
required = ["limit"]
[[commands.subcommand.task]]
id = "everything"
label = "All revisions"
fields = ["revision"]
required = ["revision"]
set = { revision = ["::"] }
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["revision", "limit", "no_graph", "filesets"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["reversed", "patch", "summary", "stat"]
[[commands.subcommand]]
path = ["new"]
label = "Create a new change"
description = "Create a new, empty change and edit it by default."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://docs.jj-vcs.dev/latest/cli-reference/"
revision = "2026-10-27"
evidence = """
**Usage:** `jj new [OPTIONS] [REVSETS]...`
* `<REVSETS>` — Parent(s) of the new change [default: @] [aliases: -o, -r]
* `-m`, `--message <MESSAGE>` — The change description to use
* `--no-edit` — Do not edit the newly created change
* `-A`, `--insert-after <REVSETS>` [alias: `after`] — Insert the new change after the given commit(s)
* `-B`, `--insert-before <REVSETS>` [alias: `before`] — Insert the new change before the given commit(s)
"""
[[commands.subcommand.field]]
id = "parents"
label = "Parent revisions"
type = "string"
position = 0
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "message"
label = "Description"
type = "string"
option = ["--message", "-m"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "no_edit"
label = "Do not edit the new change"
type = "boolean"
option = ["--no-edit"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "insert_after"
label = "Insert after"
type = "string"
option = ["--insert-after", "-A"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "insert_before"
label = "Insert before"
type = "string"
option = ["--insert-before", "-B"]
sources = ["ref"]
[[commands.subcommand.task]]
id = "fresh"
label = "New change on top"
fields = ["message"]
required = []
[[commands.subcommand.task]]
id = "merge"
label = "Merge revisions"
fields = ["parents", "message"]
required = ["parents"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["parents", "message", "no_edit"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["insert_after", "insert_before"]
[[commands.subcommand]]
path = ["describe"]
label = "Edit a description"
description = "Set the description of a change; opens an editor unless a message is given."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://docs.jj-vcs.dev/latest/cli-reference/"
revision = "2026-10-27"
evidence = """
**Usage:** `jj describe [OPTIONS] [REVSETS]...`
* `<REVSETS>` — The revision(s) whose description to edit (default: @) [aliases: -r]
* `-m`, `--message <MESSAGE>` — The change description to use (don't open editor)
* `--stdin` — Read the change description from stdin
* `--editor` — Open an editor to edit the change description
"""
[[commands.subcommand.field]]
id = "revsets"
label = "Revisions"
type = "string"
position = 0
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "message"
label = "Description"
type = "string"
option = ["--message", "-m"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "editor"
label = "Open editor anyway"
type = "boolean"
option = ["--editor"]
sources = ["ref"]
[[commands.subcommand.task]]
id = "set"
label = "Set description"
fields = ["revsets", "message"]
required = ["message"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["message", "revsets"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["editor"]
[[commands.subcommand]]
path = ["git", "clone"]
label = "Clone a Git repo"
description = "Create a new Jujutsu repo backed by a clone of a Git repository."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://docs.jj-vcs.dev/latest/cli-reference/"
revision = "2026-10-27"
evidence = """
**Usage:** `jj git clone [OPTIONS] <SOURCE> [DESTINATION]`
* `<SOURCE>` — URL or path of the Git repo to clone
* `<DESTINATION>` — Specifies the target directory for the Jujutsu repository clone.
* `--remote <REMOTE_NAME>` — Name of the newly created remote
* `--colocate` — Colocate the Jujutsu repo with the git repo
* `--no-colocate` — Disable colocation of the Jujutsu repo with the git repo
* `--depth <DEPTH>` — Create a shallow clone of the given depth
* `-b`, `--branch <BRANCH>` — Name of the branch to fetch and use as the parent of the working-copy change (can be repeated)
"""
[[commands.subcommand.field]]
id = "source"
label = "Source URL or path"
type = "string"
position = 0
sources = ["ref"]
[[commands.subcommand.field]]
id = "destination"
label = "Destination directory"
type = "path"
path = { kind = "directory", role = "output" }
position = 1
sources = ["ref"]
[[commands.subcommand.field]]
id = "remote"
label = "Remote name"
type = "string"
option = ["--remote"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "colocate"
label = "Colocate with Git"
type = "boolean"
option = ["--colocate"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "no_colocate"
label = "Do not colocate"
type = "boolean"
option = ["--no-colocate"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "depth"
label = "Shallow clone depth"
type = "integer"
option = ["--depth"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "branch"
label = "Branch"
type = "string"
option = ["--branch", "-b"]
multiple = true
sources = ["ref"]
[[commands.subcommand.task]]
id = "clone"
label = "Clone"
fields = ["source", "destination"]
required = ["source"]
[[commands.subcommand.task]]
id = "shallow"
label = "Shallow clone"
fields = ["source", "destination", "depth"]
required = ["source", "depth"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["source", "destination", "colocate", "no_colocate"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["remote", "depth", "branch"]
[[commands.subcommand]]
path = ["git", "push"]
label = "Push to a Git remote"
description = "Push bookmarks to a remote. Safety checks are done by jj; --change and private/empty-description overrides are left out."
[[commands.subcommand.source]]
id = "ref"
kind = "manual"
url = "https://docs.jj-vcs.dev/latest/cli-reference/"
revision = "2026-10-27"
evidence = """
**Usage:** `jj git push [OPTIONS]`
* `--remote <REMOTE>` — The remote(s) to push to (can be repeated)
* `-b`, `--bookmark <BOOKMARK>` — Push only this bookmark, or bookmarks matching a pattern (can be repeated)
* `-t`, `--tag <TAG>` — Push only this tag, or tags matching a pattern (can be repeated)
* `--all` — Push all bookmarks and tags (including new ones)
* `--tracked` — Push all tracked bookmarks and tags
* `--deleted` — Push all deleted bookmarks and tags
"""
[[commands.subcommand.field]]
id = "remote"
label = "Remote"
type = "string"
option = ["--remote"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "bookmark"
label = "Bookmark"
type = "string"
option = ["--bookmark", "-b"]
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "tag"
label = "Tag"
type = "string"
option = ["--tag", "-t"]
multiple = true
sources = ["ref"]
[[commands.subcommand.field]]
id = "all"
label = "Push everything"
type = "boolean"
option = ["--all"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "tracked"
label = "Tracked only"
type = "boolean"
option = ["--tracked"]
sources = ["ref"]
[[commands.subcommand.field]]
id = "deleted"
label = "Push deletions"
type = "boolean"
option = ["--deleted"]
effect = "delete"
sources = ["ref"]
[[commands.subcommand.task]]
id = "push_bookmark"
label = "Push a bookmark"
fields = ["bookmark", "remote"]
required = ["bookmark"]
[[commands.subcommand.task]]
id = "push_tracked"
label = "Push tracked"
fields = ["tracked", "remote"]
required = ["tracked"]
set = { tracked = [true] }
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["bookmark", "remote", "tracked"]
[[commands.subcommand.group]]
id = "advanced"
label = "Advanced"
fields = ["tag", "all", "deleted"]