Create, switch, manage, and troubleshoot jj-waltz (`jw`) workspaces in real Jujutsu repositories. Use this whenever the user mentions `jw`, `jj-waltz`, creating or switching a workspace or worktree, shell init or completions, `.jwlinks.toml`, `.jwlinks.local.toml`, workspace aliases like `@`, `-`, or `^`, `--execute`, or when the task would benefit from splitting work across multiple JJ workspaces for parallel execution. Prefer this skill even if the user only asks for a new workspace or describes the desired workflow without naming `jj-waltz`.
Use jj-waltz to route work into the right JJ workspace layout, then diagnose or explain behavior when needed.
This skill is specific to this repository's behavior. Do not invent capabilities beyond what jw actually supports here.
jw supportsGround your answers in the real command surface:
jw switch <name> and alias jw s <name>jw listjw path <name>jw remove [name]jw prunejw rootjw currentjw shell init <shell>jw shell completions <shell>jw links applyImportant options and tokens:
--at <revset> creates a new workspace at a revset--bookmark <name> creates a bookmark in a new workspace--execute <command> runs a command after switching instead of changing the current shell directory--no-links skips link application during switch@ means current workspace- means previous workspace^ and default resolve to the default workspaceStart by deciding whether the task is primarily:
Prefer taking the user directly into the right workspace flow instead of waiting until things break. If the task is already in execution mode and separate workspaces would make parallel work cleaner, bias toward creating them proactively.
Keep the response concise and action-oriented. Prefer exact commands and expected results over tutorial prose.
When local context is available, inspect the most relevant state before acting:
jw --help or a relevant subcommand help page if behavior is unclearjj workspace list or jw listjw current, jw root, or jw path <name> for path confusion.jwlinks.toml and .jwlinks.local.toml for link issuesjw switch directly or through shell initFor troubleshooting, inspect first and then recommend the next command. For workspace setup and execution flows, it is fine to move directly into the appropriate jw commands.
Use this path whenever the user wants a new workspace, asks to jump into another one, or describes a workflow that clearly maps to workspace creation:
jw switch <name> creates the workspace if it does not already exist.jw switch --at <revset> <name> creates it at a revset.jw switch --bookmark <bookmark> <name> creates a bookmark in the new workspace.jw switch -x <command> <name> runs a command after switching instead of relying on shell cd.If the user needs an editor or agent launch, prefer the built-in --execute workflow over ad hoc chained shell commands.
If the task is already being executed and it cleanly splits into multiple independent subtasks, prefer separate JJ workspaces instead of piling all edits into one checkout.
jw switch -x <command> when the next step is to launch a tool or another agent inside the new workspace.Follow host policy on subagents and parallel work. If parallel execution is not permitted in the current environment, still trigger this skill and recommend the workspace split explicitly.
If the user says jw switch does not change directories, explain the actual model:
cd into that path.jw switch with --execute intentionally does not behave like shell-driven cd.Prefer fish examples first because this project recommends fish, but switch to the user's shell when they mention one:
# zsh
eval "$(jw shell init zsh)"
# bash
eval "$(jw shell init bash)"
# fish
jw shell init fish | source
If shell init is already present, check whether the user started a new shell or re-sourced their config.
When the user is confused about where they are or where jw will send them:
jw current to identify the current workspace.jw root to print the current workspace root.jw path <name> to show the resolved path for a workspace token.@, -, ^, and default directly instead of leaving them implicit.Preserved subdirectory behavior matters. If a user switches between sibling workspaces while inside a subdirectory, jw tries to carry that relative subdirectory across. If that subdirectory does not exist in the target workspace, the effective destination falls back to the workspace root.
Use link troubleshooting whenever the user mentions shared ignored directories, data directories, caches, or .jwlinks.toml.
Ground your advice in the actual behavior:
.jwlinks.toml and .jwlinks.local.toml are both supported..jwlinks.local.toml can override entries from .jwlinks.toml with the same source.target paths are interpreted from the workspace root.required = true turns a missing target into an error.Use this config shape when showing examples:
[[link]]
source = "data"
target = "../repo/data"
required = true
For link problems, suggest checks in this order:
.jwlinks.toml or .jwlinks.local.tomljw links apply or jw switch <name> once the underlying issue is fixedWhen users need to understand or clean up workspace state:
jw list shows known workspaces and marks current, previous, and default entriesjw remove <name> forgets a workspace and deletes its directory by defaultjw remove --keep-dir <name> forgets it but leaves the directory in placejw prune forgets missing workspacesWarn about the important safeguards:
default is refusedUse this shape unless the user asks for something else:
If the user asked a conceptual question rather than a broken-state question, skip the diagnosis line and answer directly with the relevant commands and explanation. If the task is about creating or splitting workspaces, the first line can frame the workspace plan rather than a failure mode.
jw switch as changing the shell directory by itself. That requires shell init..jwlinks.toml targets are relative to the config file location; here they are resolved from the workspace root.default is always a literal workspace name; it is also a supported token.Example 1
User: jw switch feature-ui creates the workspace but my zsh prompt stays in the same directory
Response shape:
eval "$(jw shell init zsh)" and a re-source step if appropriatejw switch feature-uiExample 2
User: i want every workspace to share my ignored data dir and jw says link conflict
Response shape:
.jwlinks.tomljw links applyExample 3
User: what does jw switch - do, and how do i get back to the default workspace?
Response shape:
-, @, ^, and defaultjw current, jw switch -, and jw switch defaultExample 4
User: set up separate workspaces so parallel agents can handle frontend, tests, and docs
Response shape:
jw switch -x <command> when the next step is to launch work inside each workspace