Changelog
All notable changes to wtm are documented here. The format follows Keep a Changelog and wtm adheres to Semantic Versioning; how to write an entry is in docs/dev/changelog.md.
0.29.2 - 2026-10-06
Section titled “0.29.2 - 2026-10-06”For scripts and agents: wtm events follows every repository and reports job crashes, wtm env stops printing secrets, wtm prune stays fast on repositories with many branches, and usage errors exit 2.
wtm events --allfollows every repository wtm knows from any directory, ignoring an inheritedGIT_DIR; integrations should pass it instead of running from outside a repository. → Every repository at oncewtm env --addressing ports|namesmoves the main checkout's addresses onto names, or back to ports, on its own. → The main checkoutwtm eventsreports jobs starting, crashing, exiting and stopping (job.*), shared services naming the worktrees that hold them, and its snapshot lists each worktree's jobs; same schemav: 1. → Jobs
Changed
Section titled “Changed”wtm envprints only the values wtm writes, in text and JSON ("redacted": truefor the others), and masks URL passwords, also inenv_ports;--show-valuesprints everything. → A .env is out of datewtm env mainkeeps the addressing its.envspells: reconciling its keys no longer moves it onto named URLs; pass--addressing namesfor that. → The main checkoutwtm prunereads only the branches that have a worktree, on git and on GitHub, so its time no longer grows with the repository's branches; it no longer refreshes the other remote-tracking refs. → Stacked pull requestswtm envasks whether to keep or switch the worktree's isolation (the main checkout: its addressing), keeping it by default; the recap's verbatim action is gone. → Isolation--output jsonwithout--yeson a command that could ask (create,checkout,sync,clean,env…) exits2, a usage error, instead of1: a script branching on1should read2. → Exit codes
wtm pruneandwtm tree --with-prsfind a worktree's pull request however many newer ones the repository has, instead of only among the 100 newest. → Stacked pull requestswtm env mainno longer writes[[env]]namespaces into the main checkout (wt_main,acme-main), and puts back the template's value where an earlier run did. → Shared services- Usage errors exit
2instead of1: flags that cannot be combined (clean/prune --keep-data --drop-data,run up --exclusive --parallel,sync --push --no-push…),--allwith a name, andwtm checkout <not a number>, now refused before the config is read. → Exit codes wtm run listin a terminal opens its picker again instead of printingAborted.straight away.wtm env's resolver shows a kept conflict as your value alone, instead of an arrow from your value to itself.wtm prune --dry-run --output jsonreports"dry_run": truewhen there is nothing to prune.
0.29.1 - 2026-10-05
Section titled “0.29.1 - 2026-10-05”A fix release for wtm create and run.toml, with a shorter isolation question.
Changed
Section titled “Changed”wtm create <branch>...with several names skips the branches step, as a single name does, and opens the wizard on the source branch.wtm createandwtm checkoutask the isolation question in one line, the detail is in the guide. → Isolation
run.toml: a link to a.envthatconfig.tomldoes not configure is ignored with a warning, and no longer stops the other.envvalues from being written. → run.tomlwtm createkeeps the names you are typing when the branch fetch finishes, and a refreshed branch or worktree picker keeps its highlighted row.
0.29.0 - 2026-10-04
Section titled “0.29.0 - 2026-10-04”wtm opens up to other tools with a live event stream, and works on several worktrees at once.
Highlights
Section titled “Highlights”wtm eventsstreams every worktree change as it happens, as JSON Lines for editors, terminal plugins and agents. → Event streamwtm createandwtm cleantake several worktrees in one run:wtm create feat/a feat/b. → Recipeswtm execruns one command in several worktrees in parallel, each with its own ports:wtm exec --all -- pnpm test. → Recipes
Breaking
Section titled “Breaking”wtm create --output jsonandwtm clean --output jsonanswer with an envelope: read.results[0]. → Migrating to 0.29- Exit code
21for any command run outside a git repository (was1). → Migrating to 0.29 - Exit code
19for an interactive cancellation (was0), sowtm create x && wtm go xstops there. → Migrating to 0.29
wtm eventsoutside a repository follows every repository wtm has been used in. → Every repository at onceworktree.provisionedandworktree.deprovisionedevents tell when a worktree's hooks have run, and whether they passed.WTM_CORRELATION_IDtags the events a command publishes, so a tool recognises its own. → Integrationswtm version --output jsonreports the version of each machine contract, for integrations to check compatibility.- Locked worktrees (
git worktree lock) are refused bycleanandpruneunless--force, and marked inlistandtree. wtm uicreates and deletes several worktrees at once, and picks up changes made elsewhere immediately.
Changed
Section titled “Changed”wtm env --checkexits18on drift, ready for CI.wtm checkoutandwtm extractask the same questions ascreateand always show a recap before acting.wtm envreports a count per file and only the keys left to handle; warnings go to stderr.- Invalid flag values and branch names git would reject are refused upfront with exit
2, before anything is created.
wtm relocate --torewritesbase_patheven when no worktree has to move.wtm createandwtm checkoutreject an unknown--env-frombefore creating a half-provisioned worktree.- A branch can no longer be its own parent (
create b --from b). wtm extractno longer ignores--fromand--ffwhen the target is picked in the wizard.
0.28.0 - 2026-09-30
Section titled “0.28.0 - 2026-09-30”Each worktree runs its own services on its own ports; read the migration guide if you used wtm run, wtm switch or script wtm.
Highlights
Section titled “Highlights”- The
runmodule: per-worktree services and tasks grouped in profiles;wtm run initwrites the config,wtm run upstarts the stack. → Jobs and profiles - Per-worktree isolation: shifted ports (
3000→3010) rewritten in.env, and its ownCOMPOSE_PROJECT_NAME;wtm envsettles them. → Isolation - Named URLs per job and worktree (
http://web.feat-login.acme.localhost:11080), on port 80 on macOS withwtm run proxy install. → Addressing
Breaking
Section titled “Breaking”wtm switchis removed: usewtm gothenwtm run up. → Migrating to 0.28--non-interactiveis removed: use--yes. → Migrating to 0.28- Hooks run through
/bin/sh -cwith placeholders already quoted: drop your own quotes around{{worktree}}. → Migrating to 0.28 runcommands take the worktree as argument and the job or profile as a flag, and their JSON changes shape: update scripts. → Migrating to 0.28run down --allstays in the current repository,run importreplaces instead of merging, andrun.tomlis validated more strictly. → Migrating to 0.28
- Shared services: one postgres for the repository, one database per worktree, dropped on
clean. → Shared services run upstops before a migration touches data the worktree does not own.wtm run up feat-a feat-bruns several worktrees at once, andwtm uishows and drives the services.
Changed
Section titled “Changed”- Output is more consistent: a
┃bar marks wtm's blocks, hooks sum up in one line, and--quietworks everywhere.
- The
wtmshell function returns the command's exit code (open a new shell after upgrading). wtm initno longer installs every workspace package separately.- Rewriting a
.envvalue keeps its quotes, comment and line endings.
0.27.1 - 2026-09-09
Section titled “0.27.1 - 2026-09-09”A child worktree no longer pushes to its parent's branch.
wtm createfrom a parent only onoriginno longer makes it the child's upstream, sogit pushtargets the child's branch.wtm prune --goneno longer offers to remove a never-pushed child whose parent's remote branch was deleted.- Not retroactive: in an older child whose upstream names another branch, run
git branch --unset-upstream, thengit push -u origin HEAD.
0.27.0 - 2026-08-20
Section titled “0.27.0 - 2026-08-20”Self-update with wtm upgrade, and wtm fast-forward.
wtm upgradeupdates wtm the way it was installed, checksum verified;--checkshows what is available,--versionpins a release.- Update notice: wtm mentions a newer version at the end of a command, without slowing it.
wtm fast-forwardmoves a branch toorigin/<branch>and refuses a diverged one (usewtm sync); also in the dashboard.
Changed
Section titled “Changed”wtm uihelp overlay reads like a reference: four sections, sized to the screen, scrollable.
wtm syncinteractive shows its recap instead of an empty picker.
0.26.1 - 2026-08-20
Section titled “0.26.1 - 2026-08-20”The wtm ui detail panel no longer flickers.
wtm uireloads the detail panel when the selection or its branch changes, and onr, instead of every three seconds.
0.26.0 - 2026-08-20
Section titled “0.26.0 - 2026-08-20”A full-screen dashboard, wtm ui, to drive worktrees.
Highlights
Section titled “Highlights”wtm ui: a full-screen dashboard runningcreate,clean,reparent,pruneandsync, with keyboard, mouse and help on?.
wtm uiTree tab shows the stacked branches and reparents from the dashboard.wtm uidetail panel shows the last commit, working tree state, children,.envdrift, removal blockers and the PR with its CI checks.wtm uitells a failingghapart from "no PR", and opens the PR in the browser withp.wtm listandwtm resolvemark the current worktree● active.ui.animations = falsein the global config turns off dashboard animations.
Changed
Section titled “Changed”- New colour palette for every command's output, still respecting
NO_COLOR.
wtm synckeeps the parent step visible and refreshes parents the cascade does not cover.- README no longer documents an
agentkey that made every command fail.
0.25.0 - 2026-08-17
Section titled “0.25.0 - 2026-08-17”create, checkout and extract reuse an existing local branch.
Breaking
Section titled “Breaking”wtm create <existing-branch> --yesandwtm extract --to <existing-branch> --yesrequire--from <parent>: wtm cannot guess the parent.
wtm checkout <PR>reuses an existing local branch instead of asking forwtm clean, and offers to fast-forward it.wtm create <existing-branch>andwtm extract --to <existing-branch>reuse the branch, announced in the recap.- JSON of
createandcheckoutreports whether the branch existed and how it stands against origin.
Changed
Section titled “Changed”- A branch checked out in another worktree exits
10with awtm go <branch>hint;--if-not-existsreturns that worktree.
0.24.1 - 2026-08-11
Section titled “0.24.1 - 2026-08-11”wtm extract handles untracked files properly.
wtm extract --filesaccepts a directory and takes every change below it.
Changed
Section titled “Changed”wtm extractremoves directories left empty in the source.wtm extract --on-conflict resolvealso covers untracked files already in the target; identical content is no longer a conflict.
wtm extractlists each file of a new directory separately, so--files newmod/x.goworks.wtm extracthandles paths with spaces or non-ASCII characters, and staged renames.
0.24.0 - 2026-07-08
Section titled “0.24.0 - 2026-07-08”wtm env detects and resolves .env drift between worktrees.
wtm env [branch]detects and resolves a worktree's.envconflicts, following the strategy chosen at creation.
0.23.0 - 2026-07-07
Section titled “0.23.0 - 2026-07-07”on_clean hooks, generalized .env detection and harmonized output.
Breaking
Section titled “Breaking”.envconfig moves fromcopy_filesto[[env.file]]entries, with no automatic migration: runwtm init --only envor editconfig.toml.
[hooks] on_cleanruns beforeclean/pruneremove a worktree (e.g.docker compose down); a failure aborts unlesscontinue_on_error.wtm init --clean-commandand--skip-cleanconfigureon_cleannon-interactively.sudo rm -rffallback: an interactive run offers it whengit worktree removehits root-owned files, never on a dangerous path..envdetection recognises.env.dist,.env.sampleand other templates, and flags.env.localas local.
Changed
Section titled “Changed”- The
examplestrategy copies the detected template instead of hard-coding.env.example. - Output conventions are harmonized across commands;
wtm syncshows a spinner while pushing.
0.22.0 - 2026-07-03
Section titled “0.22.0 - 2026-07-03”An opt-in run module and one --yes/--force model across commands.
Highlights
Section titled “Highlights”wtm run initsets uprun.tomlfrom detected docker-compose files and package scripts, without overwriting existing jobs.--yesand--forceare separate:--yesanswers every question with a flag or a safe default,--forceonly lifts safety refusals.
Breaking
Section titled “Breaking”--output jsonrequires--yeson every mutating command, and a missing required selection errors naming its flag: pass both.- The
runmodule is opt-in:wtm initno longer configures services (--skip-services,--only servicesremoved); usewtm run init.
origindivergence badges (origin ↑a ↓b) inlist,tree, pickers and JSON, read without fetching;rrefreshes.--fffast-forwards a source that is only behind, also oncreate --fromandextract.wtm extract [source]picks the source first, so you can extract from anywhere.wtm reparentmoves several worktrees onto one new parent in a single pass.
Changed
Section titled “Changed”- Wizards keep every confirmation inside, with a breadcrumb and Back;
clean,relocateandsynceach run as one wizard. wtm agents installupdates an already installed skill.wtm initpoints out pre-existing worktrees and suggestswtm relocate.
wtm prunereads merged/closed from the GitHub PR state instead of local commits; a branch without a PR is never tagged.wtm cleanandwtm relocatewithout a terminal or--yeserror out instead of starting a wizard.wtm clean --reparent-childrenis honoured in the wizard.
0.21.0 - 2026-07-01
Section titled “0.21.0 - 2026-07-01”wtm prune cleans up finished work in one pass, and every command speaks JSON.
wtm pruneremoves every worktree whose work is done, reparenting surviving children onto their grandparent.--merged,--closedand--gonenarrowpruneto branches with no commit ahead, a merged or closed PR, or a deleted remote.wtm pruneneeds--forcefor a dirty, unpushed or open-PR worktree, and never touches main or the base branch.wtm prune --dry-runpreviews without changing anything.wtm sync --keep-conflictleaves a conflicting rebase in progress for manual resolution instead of aborting it.wtm syncdetects a rebase already in progress and blocks its descendants.
Changed
Section titled “Changed”--output jsonis available on every command, with a stable payload.wtm --helpgroups commands into sections.- Command reference under
docs/is generated from the CLI.
wtm synccaptures conflicting files before aborting, and finds the branch of a worktree stuck mid-rebase.
0.20.0 - 2026-07-01
Section titled “0.20.0 - 2026-07-01”Branch pickers show remote branches and divergence, and multi-select lists can be filtered.
wtm create --from origin/xcreates a worktree from a remote branch you never checked out.wtm reparent --to origin/xreparents onto a remote branch.- Branch pickers list
originbranches too, and tag drifted local ones with↑2 ↓5;rfetches again. wtm createoffers to fast-forward a source branch behindorigin/, and warns when it has diverged.- Multi-select lists filter on
/;atoggles all filtered items.
Changed
Section titled “Changed”- Worktree lists are redesigned: aligned badges, a tinted selected row, a status glyph.
create,extractandcheckoutask before theparentstrategy copies.envfrom the main worktree.
0.19.0 - 2026-06-27
Section titled “0.19.0 - 2026-06-27”A stacked-branch workflow: see the tree, reparent a branch, and sync only what you pick.
Breaking
Section titled “Breaking”wtm syncno longer syncs everything by default: pass branch names, pick them interactively, or use--all.
wtm treeshows the forest of worktrees, flagging a child that needs a rebase with⚠ needs sync.wtm tree --with-prsadds PR state;--output mermaidprints a flowchart to paste into a PR.wtm reparent <branch> --to <parent>changes a worktree's parent; the rebase happens on the nextwtm sync.wtm cleanoffers to reparent the children it would orphan onto the grandparent, or--reparent-children.wtm syncwithout arguments opens a multi-select picker.
Changed
Section titled “Changed”wtm syncalways refreshes the base first, and exits11on an unknown branch.- Output has the same spacing and loader across commands; no spinner or
\rreaches a pipe.
- A fast task's first output is no longer lost.
0.18.0 - 2026-06-24
Section titled “0.18.0 - 2026-06-24”wtm checkout replaces the pr group.
Breaking
Section titled “Breaking”wtm pr checkoutis nowwtm checkout: update scripts and aliases.wtm pr listis removed: usewtm list --with-prsor thecheckoutwizard.
wtm checkout [number]creates a worktree from a pull request; without a number, a wizard lists open PRs.--review,--mine,--fromand--env-fromfilter PRs and preset the wizard's answers.
0.17.0 - 2026-06-24
Section titled “0.17.0 - 2026-06-24”Worktree commands move to the top level.
Breaking
Section titled “Breaking”wtm wtis removed:wtm wt listbecomeswtm list, and so on; update scripts and re-runeval "$(wtm shell-init)".
- A detached job's output is no longer truncated when its process exits.
0.16.0 - 2026-06-22
Section titled “0.16.0 - 2026-06-22”wt relocate gathers worktrees under base_path, and unused configuration is removed.
Breaking
Section titled “Breaking”wtm pr createis removed: usegh pr create.[agents],[integrations],[github]and the globalagentkey are refused: delete them or re-runwtm init.
wtm wt relocatemoves scattered worktrees underbase_pathand adopts external ones, with a preview;--toand--output jsonfor scripts.
Removed
Section titled “Removed”- The default-agent setting: the
agentkey, the--agentflag and itsinitstep. [github] auto_draft, unused sincepr createwas removed.
0.15.0 - 2026-06-20
Section titled “0.15.0 - 2026-06-20”wt sync rebases the whole chain of worktrees in one command.
wtm wt syncrebases every worktree onto its refreshed parent in topological order, replaying only its own commits, locally.wtm wt syncshows a recap, then offers one--force-with-leasepush of the rebased branches.--dry-run,--base,--push,--no-pushand--yesonwt sync.wtm wt sync --output jsonreports a status per branch and exits non-zero on a conflict or error.
wtm wt syncreports a failing git command as an error instead ofup_to_date.
0.14.0 - 2026-06-20
Section titled “0.14.0 - 2026-06-20”Worktree lists show up instantly while PRs stream in.
wtm wt list --with-prsincludes PRs in non-interactive and JSON output.
Changed
Section titled “Changed”wt list,wt goandwt switchshow worktrees immediately, PR badges filling in as they arrive.wt listno longer fetches PRs by default in non-interactive output.
0.13.0 - 2026-06-20
Section titled “0.13.0 - 2026-06-20”wtm init reworked: skip sections, re-initialise one with --only, edit on_create hooks.
wtm initlets you skipenv,hooksorservices, written commented out;--skip-env,--skip-hooks,--skip-servicesdo it non-interactively.wtm init --only <section>re-initialises one section without touching the others.wtm initeditson_createhooks as a list: add, edit, remove, reorder.
Removed
Section titled “Removed”- The install command and monorepo packages steps of
wtm init: use theon_createhook editor.
0.12.0 - 2026-06-20
Section titled “0.12.0 - 2026-06-20”wt extract moves uncommitted changes between worktrees.
wtm wt extractmoves part of the current worktree's uncommitted changes to a new or existing worktree;--keepcopies them instead.wtm wt extractleaves the source untouched unless the whole extraction applied.--on-conflict abort(default) changes nothing and exits15;resolvewrites conflict markers in the target.
0.11.0 - 2026-06-19
Section titled “0.11.0 - 2026-06-19”wtm can be driven by agents, and detached services stream their startup logs.
Breaking
Section titled “Breaking”- Outside an initialised repository, commands exit
12instead of0: adjust scripts relying on a silent success. wtm pr createexits13when a PR already exists, instead of0.
wtm init --non-interactivebootstraps a project from flags, then detection, then defaults.wtm pr create --yespushes an unpushed branch and skips prompts.wtm wt create --if-not-existssucceeds when the worktree already exists.- Exit codes per failure:
10worktree exists,11branch not found,12config not found,13PR exists,14job not declared. wtm run upstreams a detached service's startup output instead of a spinner.
Changed
Section titled “Changed”wt clean,run stopandrun downsucceed as no-ops when there is nothing to remove or stop.
wtm pr create --output jsonno longer stops silently on an unpushed branch.
0.10.0 - 2026-06-09
Section titled “0.10.0 - 2026-06-09”run up and run start launch and tail in one step, and profiles run jobs in your order.
wtm run up/run startstart jobs and stream their output straight away.run profile add/editorder a profile's jobs, followed at run time.
Changed
Section titled “Changed”- A failed task aborts the rest of the profile and shows its logs.
- The
wt go/wt switchpicker loads faster and shows a callout whenghis missing.
0.9.0 - 2026-06-08
Section titled “0.9.0 - 2026-06-08”An interactive wt list, run.toml export/import and commands to edit jobs and profiles.
Breaking
Section titled “Breaking”- Config and metadata move from
.wtm/to<git-common-dir>/wtm/: move existing files or re-runwtm init. wtm run list --output jsonuses lowercase keys (job,name,kind).- The shell wrapper changed: re-run
eval "$(wtm shell-init)".
wtm wt listis interactive, with an Open PR action and a hint whenghis missing.- Removing the current worktree sends the shell back to the base repository.
wtm initofferspackage.jsonscripts, workspaces included, as jobs.wtm run export/run importmoverun.tomlin and out as JSON.wtm run jobandwtm run profileadd|rm|edit|listmanagerun.tomlby wizard or flags.wtm config showandwtm config editreach the config without digging into the git directory.
Changed
Section titled “Changed”- Setting a default profile unsets the previous one instead of failing.
0.8.0 - 2026-05-01
Section titled “0.8.0 - 2026-05-01”Config files are decoded strictly and come with JSON Schemas for IDE autocomplete.
- JSON Schemas for
run.tomland bothconfig.tomlare written next to them, for autocomplete in Taplo-based editors. wtm schema dumprefreshes the schemas on disk after an upgrade.
- Unknown keys in a config file are rejected instead of ignored.
0.7.2 - 2026-04-29
Section titled “0.7.2 - 2026-04-29”The terminal is restored after detaching from a job's logs.
wtm run logson a job with a TUI (turbo, vite, vim) no longer leaves the terminal broken on exit.
0.7.1 - 2026-04-29
Section titled “0.7.1 - 2026-04-29”Stopping a job stops its whole process tree.
wtm run stop/run downstop the job's whole process group, with SIGKILL after 5 s if SIGTERM is ignored.
0.7.0 - 2026-04-29
Section titled “0.7.0 - 2026-04-29”Services and one-shot tasks are unified as jobs in run.toml.
Breaking
Section titled “Breaking”.wtm/services.tomlis replaced by.wtm/run.toml, with[[job]]and[[profile]]: rewrite your file.wtm svcis renamedwtm run: update scripts and aliases.- The
wt switchshell wrapper callswtm run up: regenerate it withwtm shell-init.
kind = "task"declares a one-shot command (migration, seed) that streams live and must succeed before the profile continues.run.tomlis validated before anything runs.
Changed
Section titled “Changed”wtm initwrites detected docker-compose files as detached services.
0.6.2 - 2026-04-13
Section titled “0.6.2 - 2026-04-13”More output polish.
- The
wt go/wt switchpicker keeps its colours through the shell wrapper.
0.6.1 - 2026-04-12
Section titled “0.6.1 - 2026-04-12”Output polish.
Changed
Section titled “Changed”svc up,svc ps,pr createandwtm init: consistent padding and spacing.
- The
wt go/wt switchpicker keeps its highlight and badges through the shell wrapper.
0.6.0 - 2026-04-12
Section titled “0.6.0 - 2026-04-12”wtm can be driven by LLM agents.
--output jsonon thewt,prandsvccommands, with human text on stderr.wtm svc listlists declared services and profiles, with actions on a terminal.wtm svc pslists running services, with stop, logs and restart actions.wtm agents installinstalls ausing-wtmskill into the.claude/or.cursor/directories it finds.wtm initdetects docker-compose files and scaffolds matching services.wtm svc down --allstops every service of every worktree.
Changed
Section titled “Changed”wt switchwithout an argument shows thewt listpicker.wtm svc downwithout--allonly touches the current worktree.
- A service with a
stopcommand no longer reports✓ startedwhendocker compose up -dfails. svc down,wt cleanandsvc up --exclusiveno longer stop other worktrees' services.
0.5.1 - 2026-04-12
Section titled “0.5.1 - 2026-04-12”Pickers and shell navigation work through the shell wrapper.
- The
wt go/wt switchpicker is visible through the shell wrapper. - "Go to worktree" from
pr listandwt listnavigates instead of asking for shell integration. - The shell wrapper lets any subcommand change the directory.
0.5.0 - 2026-04-12
Section titled “0.5.0 - 2026-04-12”New pickers and wizards, wt switch, and focus removed in favour of services.
Breaking
Section titled “Breaking”wtm wt focusand active-worktree tracking are removed: usesvc up/svc down.on_focus/on_blurhooks are removed: keepon_create, and let services run Docker.- The dashboard is hidden while it is reworked:
wtmalone shows help.
wtm wt switch [branch]goes to a worktree and runssvc up.svc upoffers to stop services running in other worktrees;--exclusivestops them,--parallelskips the question.wt cleanstops a worktree's services before deleting it.- Pickers and wizards filter on
/, show a breadcrumb and go back withEsc. - The
pr listpicker offers to go to or check out the PR's worktree;wt listshows badges.
Changed
Section titled “Changed”- Output: one style and indent for every message and error.
docker compose up -dservices are tracked and stopped properly.svccommands readservices.tomlfrom the main worktree when run from another.
Removed
Section titled “Removed”- The docker-compose and hook steps of the
wtm initwizard.
0.4.1 - 2026-04-12
Section titled “0.4.1 - 2026-04-12”GitHub access goes through the gh CLI.
Breaking
Section titled “Breaking”wtm auth login|status|logoutare removed: installghand rungh auth login.WTM_GITHUB_TOKENis no longer read: useGH_TOKEN.
Changed
Section titled “Changed”prcommands and the dashboard's PR panel usegh.
0.4.0 - 2026-04-10
Section titled “0.4.0 - 2026-04-10”GitHub integration and pull-request commands.
Breaking
Section titled “Breaking”- Worktree commands move under
wtm wtand service commands underwtm svc: update scripts and aliases.
wtm auth loginsigns in to GitHub with the device flow, withauth statusandauth logout.wtm pr listlists pull requests, with--mineand--review, also in the dashboard.wtm pr createcreates a PR from the current branch through a wizard.wtm pr checkoutcreates a worktree from an existing PR.wtm svc start/stopact on single services,up/downon profiles.
Changed
Section titled “Changed”- The dashboard splits worktrees and PRs, and multiplexes logs.
- Dashboard focus handling.
0.3.0 - 2026-04-04
Section titled “0.3.0 - 2026-04-04”Services run in a background daemon, each in its own terminal.
Breaking
Section titled “Breaking”- Project config moves from
.wtm.tomlto.wtm/config.toml: move the file.
wtm upstarts a profile's services from.wtm/services.tomlin a background daemon, scoped to the worktree.wtm downstops them;wtm logsattaches to a service's terminal.- The dashboard starts, stops and attaches to the selected worktree's services.
0.2.1 - 2026-04-03
Section titled “0.2.1 - 2026-04-03”A fix for the dashboard launched from the shell.
- The dashboard opens through the shell wrapper.
0.2.0 - 2026-04-03
Section titled “0.2.0 - 2026-04-03”An interactive dashboard.
wtmwithout arguments opens a full-screen dashboard of every worktree.- The dashboard shows each worktree's status and details, and creates, cleans, focuses and navigates to worktrees.
- Focusing from the dashboard streams hook output live.
wtm newasks for the branch name when none is given.
- Hook errors in the dashboard no longer corrupt the screen.
0.1.2 - 2026-04-02
Section titled “0.1.2 - 2026-04-02”Fixes for commands run from a child worktree.
- Commands run from a child worktree find the project config.
- Blur hooks no longer fail when the previous worktree's directory is gone.
- The shell wrapper returns to the main worktree after cleaning the current one.
0.1.1 - 2026-04-02
Section titled “0.1.1 - 2026-04-02”Initial release.
wtm initsets up global and project configuration (.wtm.toml) through a wizard.wtm new [branch]creates a worktree with env provisioning, metadata and hooks.wtm lslists worktrees with their git status.wtm go [branch]moves to a worktree through shell integration.wtm focus [branch]switches the active worktree and runson_blur/on_focushooks.wtm clean [branch]removes a worktree, refusing when it is dirty, unpushed or has an open PR.wtm shell-initgenerates the shell wrapper for zsh, bash and fish.- Env strategies
example,mainandparent, and hooks with template variables. - Detection of the base branch, env files, package manager, Docker Compose and pnpm workspaces.
- Install with Homebrew (
brew install LucasPcq/tap/wtm), release binaries orgo install.