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