jjlisted
Install: claude install-skill jckeen/dotfiles
# jj (jujutsu)
The user adopts the convention: **jj for single-agent work, worktrees for
multi-agent work.** They do NOT want to memorize jj commands — you drive jj
correctly on their behalf. Repos are **colocated** (jj on top of git), so `git`
and `gh` still work and GitHub/PRs are unchanged.
## Preflight (every session in a jj repo)
1. `command -v jj` — if missing, say so and fall back to plain git. Install:
`cargo install --locked jj-cli` or `brew install jj` (mention, don't auto-run).
2. Detect a repo: `jj root` succeeds inside one. If a git repo isn't yet jj-managed
and the user wants jj, run `jj git init --colocate` (keeps `.git`, adds jj on
top; `--colocate` is the default in recent versions but pass it explicitly).
## Mental model (so you operate it correctly)
- **The working copy IS a commit**, addressed as `@`. There's no staging area and
no "dirty tree" — every edit is auto-committed into `@` on the next `jj` command.
- **Changes are anonymous and rewritable.** A change keeps a stable change-ID even
as you amend it. You freely edit history; jj records each rewrite (undoable).
- **Bookmarks ≈ git branches** — named pointers you attach to a change to push to
GitHub. They do NOT auto-advance with `@`; you move/set them when ready to push.
- `@-` means "the parent of the working copy" (i.e. the change you just finished).
## The commands you'll actually use
| Goal | Command |
|------|---------|
| See state | `jj status` (alias `jj st`) |
| See hist