jk manual
Name changes and check remotes
Create, move, and delete local bookmarks, fetch an explicit remote, and inspect a push dry-run.
Press B from the log to inspect bookmarks. Start with a repository containing a change you want to
name. Fetch and push dry-run also require a configured Git remote; the remote can be a local test
repository or an existing server.
The list includes local and remote bookmarks, tracking state, deleted local bookmarks, and conflicts. A remote row is not a local bookmark you can move. Native move, delete, and push dry-run require an unambiguous local row with one target.
Inspect the target before changing a name
Move with j/k or the arrows. Press Enter to inspect an available unambiguous target, then
Backspace to return. r reloads the list; Esc returns to the previous view. Press ? for bookmark
help. The a key opens an invisible workspace-context action
menu on this screen. Press Esc to exit that hidden mode
if the normal keys stop responding.
A bookmark names a revision. Moving that name does not rebase the revision, edit its description, or switch this workspace’s working copy. Deleting the local name does not abandon its target change.
Create a local bookmark
- Press
cin the bookmark list. - Type the name. Press Tab to reach the target revision field, which initially contains
@. - Keep
@or replace it with the intended revision. Ctrl-u clears the focused field; Tab switches between the name and target. - Press
Enterto open the preview, then read the name, target, and command. - Press
Enterto create it, orEscto return from the preview without executing. - Verify the new local row and inspect its target with
Enter.
Create and move refresh the list after success without a success message. Check the row and target to confirm the result.
The native create form takes a typed revision expression. It does not automatically take the log’s cursor or marks as its target. Check the target field even when you arrived from the intended change.
Esc closes the input form. Cancelling its preview retains the form so you can correct the fields.
An empty name or target is rejected before the command. If jj rejects the name, revision expression,
or existing bookmark, inspect C and correct the input before retrying.
Move or delete a local bookmark
Select the local row and press m to move it. The target input starts at @; replace it when
another revision is intended. Press Enter to review the command, then Enter to run it. Refresh
and open the target to verify the name points at the intended change. jj can reject a move that
needs options the native form does not expose; read the diagnostic before deciding how to proceed.
To remove a local bookmark, select its row and press x. Read the destructive preview and press
Enter to delete, or Esc to cancel. Verify the local name is removed or shown in its tracked
deleted state. The target change remains in the graph. Deleting a local bookmark does not itself
contact a remote; a later publication workflow can carry that deletion.
Conflicted, deleted, and remote-only rows cannot be treated as ordinary single-target local rows.
Inspect them first. Other bookmark operations, such as track, untrack, rename, and forget, are
available through noninteractive command mode, with jj’s semantics.
Use the bookmark screen for create, move, and delete; : rejects those command families.
After an unintended local mutation, inspect its operation and use operation recovery. Recovery of repository metadata does not reverse changes already published elsewhere.
Fetch from a chosen remote
Use fetch when the repository should learn a remote’s current state.
- Press
Fin the bookmark list. - Choose a remote with
j/kor the arrows. Configured remotes appear even if they have no bookmark rows yet. - Press
Enterto preview the fetch. Merely choosing the remote has no network effect. - Check the selected remote, then press
Enteragain to run fetch. - Read the retained command output. Return to the bookmark list and inspect the refreshed rows.
Esc cancels the remote picker or the preview before fetch. Fetch can contact the selected remote
and updates local knowledge of its refs. It does not publish local bookmarks. Names are passed as
exact patterns so a wildcard in a name does not silently widen the selection.
If there are no remotes, configure one with jj before retrying. A failed fetch retains stdout, stderr, and status in Command History. Check the remote configuration, connectivity, and authentication outside jk as needed. Commands that need a foreground credential prompt cannot use jk’s captured input. If the list refresh fails after a fetch, jk preserves its last usable snapshot; refresh again before treating it as current.
Preview publication without publishing
Select a local bookmark with one target and press P. Choose the remote, press Enter for the
preview, then review the exact bookmark and remote scope. A second Enter runs the push dry-run.
The dry-run may contact that remote and report what jj would push. Remote refs remain unchanged,
including when the dry-run succeeds. Read the retained output and inspect C for the exit status.
Esc cancels either selection or confirmation before the dry-run starts.
Real push is unavailable in the native interface and rejected by jj command mode, including attempts
to enter git push --dry-run there. Leave jk to publish with the jj CLI,
then return and refresh. Preserve the bookmark and remote you reviewed; do not replace the scoped
operation with a broad push. Native tags, remote management, and publication confirmation remain
separate gaps in the coverage map.
Watch the workflow
Check which workspace a command will change
Screenshots and terminal evidence
Read the terminal text
jk jj bookmark list › audit-context: 5416e289bcca (local) audit-context@git: 5416e289bcca (tracked, synced) Enter inspect c create m move x delete F fetch P dry-run ? help Esc back
Read the terminal text
jk jj -R /home/runner/work/jk/jk/target/manual-fixtures/workspaces.MvkFJr/workflows.8HgG9l/workspa
Working copy changes:
A ../scratch/KEEP-ME.txt
Working copy (@) : tlznmvqv 6ada6fb2 (no description set)
Parent commit (@-): qnyvzuou b2e6655a Add workspace demo files
jj command
: describe -m 'Scope audit changed startup workspace' @
enter run Ctrl-u clear backspace edit esc cancel
Read the terminal text
jk jj --no-pager --color always --repository /home/runner/work/jk/jk/target/manual-fixtures/worksp Command: jj --no-pager --color always --repository /home/runner/work/jk/jk/target/manual-fixtures/ Status: success Stdout: <empty> Stderr: Working copy (@) now at: qmquxmry 38b1b40c audit-context | (empty) Scope audit changed startup wo Parent commit (@-) : qnyvzuou b2e6655a Add workspace demo files Actions: e edit/retry command : run another jj command ? help V options r refresh j/k line space page q quit
Read the terminal text
jk jj › @ qmquxmry [email protected] 2026-01-01 12:00:00 audit-context default@ 5416e289 · │ (empty) Workspace lifecycle demo │ ○ tlznmvqv [email protected] 2026-01-01 12:00:00 scratch@ 6ada6fb2 ├─╯ (no description set) ○ qnyvzuou [email protected] 2026-01-01 12:00:00 b2e6655a │ Add workspace demo files ◆ zzzzzzzz root() 00000000 ? help H home L log r refresh enter open d diff v evolog s status space mark ... q quit
Binary, tool versions, and file hashes · Accepted pixel, text/style, and video review · action-diagnostics/bin/dependencies.log · action-diagnostics/tape-1.log · Outcome assertions 1 · Outcome assertions 2
All retained evidence (50 files)
Includes source tapes, original helper scripts, fixture details, terminal states, and logs.
- action-diagnostics/bin/dependencies.log
- action-diagnostics/manifest.json
- action-diagnostics/tape-1.log
- audit-baseline.json
- audit-recovered-assertions.json
- audit-scope-assertions.json
- audit-scope-context-bookmarks.json
- audit-scope-context-bookmarks.png
- audit-scope-context-hidden-help.json
- audit-scope-context-hidden-help.png
- audit-scope-context-input.json
- audit-scope-context-input.png
- audit-scope-context-recovered.json
- audit-scope-context-recovered.png
- audit-scope-context-result.json
- audit-scope-context-result.png
- audit-scope-context.mp4
- audit-scope-context.tape
- build-provenance.json
- capture.tape
- checkpoint-summary.json
- fixture-env.sh
- fixture.json
- source-scripts/abandon-dialog-fixture.sh
- source-scripts/action-menu-demo-fixture.sh
- source-scripts/betamax-cancellable-jj.sh
- source-scripts/betamax-fixture-env.sh
- source-scripts/betamax-fixture.sh
- source-scripts/betamax-setup.sh
- source-scripts/check-manual-coverage.py
- source-scripts/check-refresh-proof.py
- source-scripts/check-run-options-proof.py
- source-scripts/manual-assert.sh
- source-scripts/manual-audit-assert.py
- source-scripts/manual-fixture-jj.sh
- source-scripts/manual-fixture.sh
- source-scripts/manual-recordings.py
- source-scripts/package-release-archive.sh
- source-scripts/prepare-manual-evidence.py
- source-scripts/prepare-preview.sh
- source-scripts/reflow-rust-comments.py
- source-scripts/refs-remotes-demo-fixture.sh
- source-scripts/run-betamax.sh
- source-scripts/shared-selector-demo-fixture.sh
- source-scripts/test_manual_evidence.py
- source-scripts/test_manual_recordings.py
- source-scripts/workflows-demo-fixture.sh
- source-scripts/workspace-lifecycle-demo-fixture.sh
- source.tape
- accepted-review.json
Other recorded forms and recovery paths (4)
Use the native confirmation for bookmarks and remotes
Screenshots and terminal evidence
Read the terminal text
jk jj › @ xuxnqppm [email protected] 2026-01-01 12:00:00 demo 1d7f5db5 · │ Review cache publication ○ kspsvwkk [email protected] 2026-01-01 12:00:00 review-keep stable-a stable-b stable-c 7084ee8c │ Prepare remote workflow ◆ zzzzzzzz root() 00000000 jj command : bookmark create review-topic error: bookmark changes are unavailable in command mode; use the bookmark view's B action enter run Ctrl-u clear backspace edit esc cancel
Read the terminal text
jk jj › @ xuxnqppm [email protected] 2026-01-01 12:00:00 demo 1d7f5db5 · │ Review cache publication ○ kspsvwkk [email protected] 2026-01-01 12:00:00 review-keep stable-a stable-b stable-c 7084ee8c │ Prepare remote workflow ◆ zzzzzzzz root() 00000000 jj command : git push --dry-run error: git push is unavailable in command mode, including --dry-run; use the bookmark view's P action enter run Ctrl-u clear backspace edit esc cancel
Read the terminal text
jk jj bookmark list
› demo: 1d7f5db52643 (local)
review-keep: 7084ee8c29aa (local)
stable-a: 7084ee8c29aa (local)
stable-b: 7084ee8c29aa (local)
stable-c: 7084ee8c29aa (local)
jj git fetch
Command
jj --no-pager --color never --repository
/home/runner/work/jk/jk/target/dogfood-artifacts/fixtures/refs.kCTcqM/client
git fetch --remote 'exact:"fixture"'
enter run y copy esc cancel
Binary, tool versions, and file hashes · Accepted pixel, text/style, and video review · action-diagnostics/bin/dependencies.log · action-diagnostics/tape-1.log · Outcome assertions 1
All retained evidence (44 files)
Includes source tapes, original helper scripts, fixture details, terminal states, and logs.
- action-diagnostics/bin/dependencies.log
- action-diagnostics/manifest.json
- action-diagnostics/tape-1.log
- build-provenance.json
- capture.tape
- checkpoint-summary.json
- fixture-env.sh
- fixture.json
- inspection-assertions.json
- manual-command-restrictions-bookmark-blocked.json
- manual-command-restrictions-bookmark-blocked.png
- manual-command-restrictions-native-path.json
- manual-command-restrictions-native-path.png
- manual-command-restrictions-push-blocked.json
- manual-command-restrictions-push-blocked.png
- manual-command-restrictions.mp4
- manual-command-restrictions.tape
- source-scripts/abandon-dialog-fixture.sh
- source-scripts/action-menu-demo-fixture.sh
- source-scripts/betamax-cancellable-jj.sh
- source-scripts/betamax-fixture-env.sh
- source-scripts/betamax-fixture.sh
- source-scripts/betamax-setup.sh
- source-scripts/check-manual-coverage.py
- source-scripts/check-refresh-proof.py
- source-scripts/check-run-options-proof.py
- source-scripts/manual-assert.sh
- source-scripts/manual-audit-assert.py
- source-scripts/manual-fixture-jj.sh
- source-scripts/manual-fixture.sh
- source-scripts/manual-recordings.py
- source-scripts/package-release-archive.sh
- source-scripts/prepare-manual-evidence.py
- source-scripts/prepare-preview.sh
- source-scripts/reflow-rust-comments.py
- source-scripts/refs-remotes-demo-fixture.sh
- source-scripts/run-betamax.sh
- source-scripts/shared-selector-demo-fixture.sh
- source-scripts/test_manual_evidence.py
- source-scripts/test_manual_recordings.py
- source-scripts/workflows-demo-fixture.sh
- source-scripts/workspace-lifecycle-demo-fixture.sh
- source.tape
- accepted-review.json
Manage remote bookmark tracking
Screenshots and terminal evidence
Read the terminal text
jk jj bookmark list › demo: edc29bc14d20 (local) incoming: 8389e947292a (local) incoming@fixture: 8389e947292a (tracked, synced) review-keep: 7e2e0051975f (local) stable-a: 7e2e0051975f (local) stable-b: 7e2e0051975f (local) stable-c: 7e2e0051975f (local) Enter inspect c create m move x delete F fetch P dry-run ? help Esc back
Read the terminal text
jk jj bookmark list › demo: edc29bc14d20 (local) incoming: 8389e947292a (local) incoming@fixture: 8389e947292a (untracked) review-keep: 7e2e0051975f (local) stable-a: 7e2e0051975f (local) stable-b: 7e2e0051975f (local) stable-c: 7e2e0051975f (local) Enter inspect c create m move x delete F fetch P dry-run ? help Esc back
Read the terminal text
jk jj bookmark list › demo: edc29bc14d20 (local) incoming@fixture: 8389e947292a (untracked) local-review: 8389e947292a (local) review-keep: 7e2e0051975f (local) stable-a: 7e2e0051975f (local) stable-b: 7e2e0051975f (local) stable-c: 7e2e0051975f (local) Enter inspect c create m move x delete F fetch P dry-run ? help Esc back
Read the terminal text
jk jj bookmark list › demo: edc29bc14d20 (local) incoming@fixture: 8389e947292a (untracked) review-keep: 7e2e0051975f (local) stable-a: 7e2e0051975f (local) stable-b: 7e2e0051975f (local) stable-c: 7e2e0051975f (local) Enter inspect c create m move x delete F fetch P dry-run ? help Esc back
Binary, tool versions, and file hashes · Accepted pixel, text/style, and video review · action-diagnostics/bin/dependencies.log · action-diagnostics/tape-1.log · Outcome assertions 1 · Outcome assertions 2 · Outcome assertions 3 · Outcome assertions 4
All retained evidence (49 files)
Includes source tapes, original helper scripts, fixture details, terminal states, and logs.
- action-diagnostics/bin/dependencies.log
- action-diagnostics/manifest.json
- action-diagnostics/tape-1.log
- build-provenance.json
- capture.tape
- checkpoint-summary.json
- command-bookmarks-forgotten-assertions.json
- command-bookmarks-forgotten.json
- command-bookmarks-forgotten.png
- command-bookmarks-renamed-assertions.json
- command-bookmarks-renamed.json
- command-bookmarks-renamed.png
- command-bookmarks-tracked-assertions.json
- command-bookmarks-tracked.json
- command-bookmarks-tracked.png
- command-bookmarks-untracked-assertions.json
- command-bookmarks-untracked.json
- command-bookmarks-untracked.png
- command-bookmarks.mp4
- command-bookmarks.tape
- fixture-env.sh
- fixture.json
- source-scripts/abandon-dialog-fixture.sh
- source-scripts/action-menu-demo-fixture.sh
- source-scripts/betamax-cancellable-jj.sh
- source-scripts/betamax-fixture-env.sh
- source-scripts/betamax-fixture.sh
- source-scripts/betamax-setup.sh
- source-scripts/check-manual-coverage.py
- source-scripts/check-refresh-proof.py
- source-scripts/check-run-options-proof.py
- source-scripts/manual-assert.sh
- source-scripts/manual-audit-assert.py
- source-scripts/manual-fixture-jj.sh
- source-scripts/manual-fixture.sh
- source-scripts/manual-recordings.py
- source-scripts/package-release-archive.sh
- source-scripts/prepare-manual-evidence.py
- source-scripts/prepare-preview.sh
- source-scripts/reflow-rust-comments.py
- source-scripts/refs-remotes-demo-fixture.sh
- source-scripts/run-betamax.sh
- source-scripts/shared-selector-demo-fixture.sh
- source-scripts/test_manual_evidence.py
- source-scripts/test_manual_recordings.py
- source-scripts/workflows-demo-fixture.sh
- source-scripts/workspace-lifecycle-demo-fixture.sh
- source.tape
- accepted-review.json
Keep a bookmark on the intended change
Screenshots and terminal evidence
Read the terminal text
jk jj bookmark list
› demo: 15960d8a8268 (local)
review-keep: 20f45f72fcc2 (local)
stable-a: 20f45f72fcc2 (local)
stable-b: 20f45f72fcc2 (local)
stable-c: 20f45f72fcc2 (local)
jj bookmark create
! Changes local repository metadata.
Command
jj --no-pager --color always --repository
/home/runner/work/jk/jk/target/dogfood-artifacts/fixtures/refs.kdPe31/client
bookmark create --revision @- -- 'review-*'
enter run y copy esc cancel
Read the terminal text
jk jj bookmark list
demo: 15960d8a8268 (local)
› review-*: 20f45f72fcc2 (local)
review-keep: 20f45f72fcc2 (local)
stable-a: 20f45f72fcc2 (local)
stable-b: 20f45f72fcc2 (local)
stable-c: 20f45f72fcc2 (local)
jj bookmark move
! Changes local repository metadata.
Command
jj --no-pager --color always --repository
/home/runner/work/jk/jk/target/dogfood-artifacts/fixtures/refs.kdPe31/client
bookmark move --to @ -- 'exact:"review-*"'
enter run y copy esc cancel
Read the terminal text
jk jj bookmark list
demo: 15960d8a8268 (local)
› review-*: 15960d8a8268 (local)
review-keep: 20f45f72fcc2 (local)
stable-a: 20f45f72fcc2 (local)
stable-b: 20f45f72fcc2 (local)
stable-c: 20f45f72fcc2 (local)
jj bookmark delete
! Changes local files or history.
Command
jj --no-pager --color always --repository
/home/runner/work/jk/jk/target/dogfood-artifacts/fixtures/refs.kdPe31/client
bookmark delete -- 'exact:"review-*"'
enter run y copy esc cancel
Read the terminal text
jk jj bookmark list demo: 15960d8a8268 (local) review-*: 15960d8a8268 (local) › review-keep: 20f45f72fcc2 (local) stable-a: 20f45f72fcc2 (local) stable-b: 20f45f72fcc2 (local) stable-c: 20f45f72fcc2 (local) Enter inspect c create m move x delete F fetch P dry-run ? help Esc back
Binary, tool versions, and file hashes · Accepted pixel, text/style, and video review · action-diagnostics/bin/dependencies.log · action-diagnostics/tape-1.log · Outcome assertions 1
All retained evidence (46 files)
Includes source tapes, original helper scripts, fixture details, terminal states, and logs.
- action-diagnostics/bin/dependencies.log
- action-diagnostics/manifest.json
- action-diagnostics/tape-1.log
- build-provenance.json
- capture.tape
- checkpoint-summary.json
- fixture-env.sh
- fixture.json
- refs-bookmarks-assertions.json
- refs-bookmarks-create.json
- refs-bookmarks-create.png
- refs-bookmarks-delete.json
- refs-bookmarks-delete.png
- refs-bookmarks-move.json
- refs-bookmarks-move.png
- refs-bookmarks-recovered.json
- refs-bookmarks-recovered.png
- refs-bookmarks.mp4
- refs-bookmarks.tape
- source-scripts/abandon-dialog-fixture.sh
- source-scripts/action-menu-demo-fixture.sh
- source-scripts/betamax-cancellable-jj.sh
- source-scripts/betamax-fixture-env.sh
- source-scripts/betamax-fixture.sh
- source-scripts/betamax-setup.sh
- source-scripts/check-manual-coverage.py
- source-scripts/check-refresh-proof.py
- source-scripts/check-run-options-proof.py
- source-scripts/manual-assert.sh
- source-scripts/manual-audit-assert.py
- source-scripts/manual-fixture-jj.sh
- source-scripts/manual-fixture.sh
- source-scripts/manual-recordings.py
- source-scripts/package-release-archive.sh
- source-scripts/prepare-manual-evidence.py
- source-scripts/prepare-preview.sh
- source-scripts/reflow-rust-comments.py
- source-scripts/refs-remotes-demo-fixture.sh
- source-scripts/run-betamax.sh
- source-scripts/shared-selector-demo-fixture.sh
- source-scripts/test_manual_evidence.py
- source-scripts/test_manual_recordings.py
- source-scripts/workflows-demo-fixture.sh
- source-scripts/workspace-lifecycle-demo-fixture.sh
- source.tape
- accepted-review.json
Fetch and preview publication to a chosen remote
Screenshots and terminal evidence
Read the terminal text
jk jj bookmark list
› demo: 02f7c7e40588 (local)
review-keep: 5bf1d2530712 (local)
stable-a: 5bf1d2530712 (local)
stable-b: 5bf1d2530712 (local)
stable-c: 5bf1d2530712 (local)
Fetch from remote
> fixture
↑/↓ choose Enter preview Esc cancel
Read the terminal text
jk jj bookmark list
› demo: 02f7c7e40588 (local)
review-keep: 5bf1d2530712 (local)
stable-a: 5bf1d2530712 (local)
stable-b: 5bf1d2530712 (local)
stable-c: 5bf1d2530712 (local)
jj git fetch
Command
jj --no-pager --color never --repository
/home/runner/work/jk/jk/target/dogfood-artifacts/fixtures/refs.D38HFS/client
git fetch --remote 'exact:"fixture"'
enter run y copy esc cancel
Read the terminal text
jk jj --no-pager --color never --repository /home/runner/work/jk/jk/target/dogfood-artifacts/fixtu Command: jj --no-pager --color never --repository /home/runner/work/jk/jk/target/dogfood-artifacts Status: success Stdout: <empty> Stderr: bookmark: incoming@fixture [new] untracked Actions: e edit/retry command : run another jj command ? help V options r refresh j/k line space page q quit
Read the terminal text
jk jj --no-pager --color never --repository /home/runner/work/jk/jk/target/dogfood-artifacts/fixtu Command: jj --no-pager --color never --repository /home/runner/work/jk/jk/target/dogfood-artifacts Status: success Stdout: <empty> Stderr: Changes to push to fixture: bookmark: demo [add to 02f7c7e40588] Dry-run requested, not pushing. Actions: e edit/retry command : run another jj command ? help V options r refresh j/k line space page q quit
Binary, tool versions, and file hashes · Accepted pixel, text/style, and video review · action-diagnostics/bin/dependencies.log · action-diagnostics/tape-1.log · Outcome assertions 1
All retained evidence (46 files)
Includes source tapes, original helper scripts, fixture details, terminal states, and logs.
- action-diagnostics/bin/dependencies.log
- action-diagnostics/manifest.json
- action-diagnostics/tape-1.log
- build-provenance.json
- capture.tape
- checkpoint-summary.json
- fixture-env.sh
- fixture.json
- refs-remotes-assertions.json
- refs-remotes-choose.json
- refs-remotes-choose.png
- refs-remotes-fetch-preview.json
- refs-remotes-fetch-preview.png
- refs-remotes-fetched.json
- refs-remotes-fetched.png
- refs-remotes-push-result.json
- refs-remotes-push-result.png
- refs-remotes.mp4
- refs-remotes.tape
- source-scripts/abandon-dialog-fixture.sh
- source-scripts/action-menu-demo-fixture.sh
- source-scripts/betamax-cancellable-jj.sh
- source-scripts/betamax-fixture-env.sh
- source-scripts/betamax-fixture.sh
- source-scripts/betamax-setup.sh
- source-scripts/check-manual-coverage.py
- source-scripts/check-refresh-proof.py
- source-scripts/check-run-options-proof.py
- source-scripts/manual-assert.sh
- source-scripts/manual-audit-assert.py
- source-scripts/manual-fixture-jj.sh
- source-scripts/manual-fixture.sh
- source-scripts/manual-recordings.py
- source-scripts/package-release-archive.sh
- source-scripts/prepare-manual-evidence.py
- source-scripts/prepare-preview.sh
- source-scripts/reflow-rust-comments.py
- source-scripts/refs-remotes-demo-fixture.sh
- source-scripts/run-betamax.sh
- source-scripts/shared-selector-demo-fixture.sh
- source-scripts/test_manual_evidence.py
- source-scripts/test_manual_recordings.py
- source-scripts/workflows-demo-fixture.sh
- source-scripts/workspace-lifecycle-demo-fixture.sh
- source.tape
- accepted-review.json