skills/worktrunk/SKILL.md
Guidance for Worktrunk (the `wt` CLI) — git worktree management, hooks, and config. Load when editing .config/wt.toml or ~/.config/worktrunk/config.toml; adding, modifying, or debugging hooks (post-merge, post-start, pre-commit, pre-merge, post-switch, etc.); configuring commit message generation or command aliases; or troubleshooting wt behavior. Also answers general worktrunk/wt questions.
npx skillsauth add max-sixty/worktrunk worktrunkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Help users work with Worktrunk, a CLI tool for managing git worktrees.
Reference files are synced from worktrunk.dev documentation:
For command-specific options, run wt <command> --help. For configuration, follow the workflows below.
Worktrunk uses two separate config files with different scopes and behaviors:
~/.config/worktrunk/config.toml)~/.config/worktrunk/config.toml (never checked into git)reference/config.md for detailed guidance.config/wt.toml)<repo>/.config/wt.toml (checked into git)reference/hook.md for detailed guidanceWhen a user asks for configuration help, determine which type based on:
User config indicators:
Project config indicators:
Both configs may be needed: For example, setting up commit message generation requires user config, but automating quality checks requires project config.
Most common request. See reference/llm-commits.md for supported tools and exact command syntax.
Detect available tools
which claude codex llm aichat 2>/dev/null
If none installed, recommend Claude Code (already available in Claude Code sessions)
Propose config change — Get the exact command from reference/llm-commits.md
[commit.generation]
command = "..." # see reference/llm-commits.md for tool-specific commands
Ask: "Should I add this to your config?"
After approval, apply
wt config showwt config createSuggest testing
wt step commit --show-prompt | head # verify prompt builds
wt merge # in a repo with uncommitted changes
Common request for workflow automation. Follow discovery process:
Detect project type
ls package.json Cargo.toml pyproject.toml
Identify available commands
package.json scriptsDesign appropriate hooks (7 hook types available)
pre-startpre-commit or pre-mergepost-startpost-switchpost-mergepre-removeValidate commands work
npm run lint # verify exists
which cargo # verify tool exists
Create .config/wt.toml
# Install dependencies when creating worktrees
pre-start = "npm install"
# Validate code quality before committing
[pre-commit]
lint = "npm run lint"
typecheck = "npm run typecheck"
# Run tests before merging
pre-merge = "npm test"
Add comments explaining choices
Suggest testing
wt switch --create test-hooks
See reference/hook.md for complete details.
When users want to add automation to an existing project:
Read existing config: cat .config/wt.toml
Determine hook type - When should this run?
pre-startpost-startpost-switchpre-commitpre-mergepost-mergepre-removeHandle format conversion if needed
Single command to named table:
# Before
pre-start = "npm install"
# After (adding db:migrate)
[pre-start]
install = "npm install"
migrate = "npm run db:migrate"
Preserve existing structure and comments
Before adding hooks, validate:
# Verify command exists
which npm
which cargo
# For npm, verify script exists
npm run lint --dry-run
# For shell commands, check syntax
bash -n -c "if [ true ]; then echo ok; fi"
Dangerous patterns — Warn users before creating hooks with:
rm -rf, DROP TABLEcurl http://...sudoreference/llm-commits.mdreference/config.md#worktree-path-templatereference/llm-commits.md#templatesreference/config.md#command-settingsreference/config.md#user-hooksreference/hook.mdreference/hook.md#configurationreference/hook.md#template-variablesreference/config.md#dev-server-url# View all configuration
wt config show
# Create initial user config
wt config create
# LLM setup guide
wt config --help
Load reference files for detailed configuration, hook specifications, and troubleshooting.
Find specific sections with grep:
grep -A 20 "## Setup" reference/llm-commits.md
grep -A 30 "### pre-start" reference/hook.md
grep -A 20 "## Warning Messages" reference/shell-integration.md
Project hooks and project aliases prompt for approval on first run, so an untrusted .config/wt.toml can't silently execute arbitrary commands. Agents running wt merge, wt switch, or other commands that trigger hooks will hit an error like:
▲ cargo-difftest needs approval to execute 1 command:
○ post-merge install:
cargo install --path .
✗ Cannot prompt for approval in non-interactive environment
↳ To skip prompts in CI/CD, add --yes; to pre-approve commands, run wt config approvals add
Two resolutions exist — pick based on who the agent is running for:
wt config approvals add — interactive prompt that stores approvals to ~/.config/worktrunk/approvals.toml. Run once per project; persists across invocations until the command template changes or the project moves. This is the right choice when the human owns the trust decision.--yes / -y — bypasses approval for a single invocation. Appropriate for CI/CD where hook contents are controlled by the pipeline itself.When invoked as an agent, stop and escalate to the user — pre-approval is a security decision about whether this project's hooks should be trusted to run arbitrary commands on their machine. Tell the user to run wt config approvals add (or review and re-run with --yes if they accept the CI-style one-shot bypass). Don't reach for --yes on the user's behalf just to unblock the command.
When the user requests spawning a worktree with an agent in a background session ("spawn a worktree for...", "hand off to another agent"), use the appropriate pattern for their terminal multiplexer. Substitute <agent-cli> with the CLI you are running as: claude for Claude Code, 'opencode run' for OpenCode.
tmux (check $TMUX env var):
tmux new-session -d -s <branch-name> "wt switch --create <branch-name> -x <agent-cli> -- '<task description>'"
Zellij (check $ZELLIJ env var):
zellij run -- wt switch --create <branch-name> -x <agent-cli> -- '<task description>'
Requirements (all must be true):
CLAUDE.md or AGENTS.md) or an explicit prompt authorize this patternDo not use this pattern for normal worktree operations.
Example (tmux, Claude Code):
tmux new-session -d -s fix-auth-bug "wt switch --create fix-auth-bug -x claude -- \
'The login session expires after 5 minutes. Find the session timeout config and extend it to 24 hours.'"
Example (Zellij, OpenCode):
zellij run -- wt switch --create fix-auth-bug -x 'opencode run' -- \
'The login session expires after 5 minutes. Find the session timeout config and extend it to 24 hours.'
To spawn multiple sub-Agents that each work in their own worktree from one Claude Code session — no terminal multiplexer, no human in the other pane — pre-start each worktree from the parent and pass the path into the sub-Agent prompt:
wt switch --create <branch> --no-cd --no-hooks
Then call the Agent tool without isolation: "worktree", naming the path in the prompt:
You are working in `/abs/path/to/worktrunk.<branch>` on branch `<branch>`.
All edits must stay in that worktree.
--no-cd skips the shell-integration cd script the parent can't consume; --no-hooks is appropriate when each sub-Agent will run its own build/test step (e.g. cargo run -- hook pre-merge --yes) and you don't need post-start setup repeated per worktree.
Do not use Agent { isolation: "worktree" } for this. Claude Code passes its internal agent ID as name to the WorktreeCreate hook, so wt creates the worktree as worktrunk.agent-<id> on a throwaway branch. If the sub-Agent then creates a feature branch on top, you end up with non-canonical paths, orphan branches, and post-start hooks fired against the wrong branch. Pre-creating with wt switch --create keeps path, branch, and hook target aligned.
tools
Create a new worktrunk worktree (optionally in another repo) and switch this session's working directory into it. Use when launching a session that should work in its own worktree (e.g. `/wt-switch-create my-branch -- <task>`, or `/wt-switch-create my-branch ~/workspace/other-repo -- <task>`), or mid-session to move work into a fresh branch.
tools
CLI output formatting standards for worktrunk. Use when writing user-facing messages, error handling, progress output, hints, warnings, or working with the output system.
development
Worktrunk-specific guidance for tend CI workflows. Adds codecov polling, Rust test commands, labels, and review criteria on top of the generic tend-* skills. Use when operating in CI.
tools
Worktrunk release workflow. Use when user asks to "do a release", "release a new version", "cut a release", or wants to publish a new version to crates.io and GitHub.