arbe-jj-jujutsu

Guides version control operations using jj (jujutsu) instead of git commands.

Updated May 16, 2026
One-click install
npx skills add https://github.com/oskarrough/robots --skill arbe-jj-jujutsu-oskarrough
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: arbe-jj-jujutsu
Source: https://github.com/oskarrough/robots/tree/main/skills/jj-jujutsu
Command: npx skills add https://github.com/oskarrough/robots --skill arbe-jj-jujutsu-oskarrough

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Teams using jj (jujutsu) instead of git need agents that understand its different mental model: no staging area, change IDs instead of commits, and editor-invoking commands that hang non-interactive shells. This Skill prevents the classic failure where jj commit or jj describe silently waits for an editor that never opens, and teaches safe patterns for parallel agents sharing one working copy. ## Core Features & Use Cases - Hang prevention: Enforces -m "msg" or -u on describe, commit, squash, and split so jj never opens an interactive editor in an automated shell. - Parallel-agent safety: Prefers explicit change IDs over @/@-, warns against jj restore on mixed working copies, and mandates jj diff -r @- --stat verification after selective commits. - Selective commits and squashing: Covers cwd:"..." fileset wrapping for paths with [/], jj split/jj squash --from/--into workflows, and a recipe for collapsing ~10 session commits into 1-2 clean ones. - Use Case: An agent finishing a feature runs jj commit -m "msg" -- 'cwd:"apps/www/src/routes/[id]/+page.svelte"', verifies the file list with jj diff -r @- --stat, then squashes fixups into the parent with jj squash -r <id> -u before pushing a bookmark and opening a PR. ## Quick Start Use the jj skill to commit my current changes with a proper message and verify nothing was left stranded in the working copy.

Frequently Asked Questions about arbe-jj-jujutsu

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I commit changes with jj jujutsu?▼

Run `jj commit -m "msg"` to close the current change `@` and start a fresh one. Always pass `-m` inline; without it jj opens an editor and hangs non-interactive shells. Use `-- <files>` to commit only selected paths.

Why does my jj command hang with no output?▼

A hanging jj command is always waiting for an editor, never a pager. Commands like `describe`, `commit`, `squash`, and `split` without `-m` or `-u` open `$EDITOR` silently. Kill the process and rerun with an inline message flag.

How do I squash multiple commits in jj?▼

Use `jj squash --from <A> --into <B> -u` to fold one committed revision into another, keeping the destination's message. Squash newest to oldest into keeper IDs, then set the final subject with `jj describe -r <id> -m "..."`.

Does jj handle file paths with brackets like [id] routes?▼

Bare paths are parsed as prefix globs, so `[` and `]` act as character classes and silently match nothing. Wrap such paths in `cwd:"..."`, for example `jj commit -m "msg" -- 'cwd:"routes/[id]/+page.svelte"'`.

What is the difference between jj commit and jj split?▼

`jj commit` closes `@` and moves leftover files to a new `@`, while `jj split -r <id> -m "msg" -- <files>` restructures any revision into two parts. Both require `-m` to avoid opening an editor.

When should I avoid jj restore with parallel agents?▼

Avoid `jj restore` on a mixed working copy because parallel agents' uncommitted edits get auto-snapshotted into your `@`, and restore would overwrite their work. Use `jj commit -- <your-files>` instead, which leaves other files untouched.