worktrunk
Guidance for Worktrunk (the `wt` CLI) — git worktree management, hooks, and config.
Skill by will-wright-eng
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/will-wright-eng-worktrunk
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions: not checked yet.
What's inside
- Skill name
worktrunk- Description
- Guidance for Worktrunk (the `wt` CLI) — git worktree management, hooks, and config. Load when working out which worktree a `wt` command will act on, or reaching for the global `-C <path>` to target one; 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.
- License
- MIT OR Apache-2.0
- Compatibility
- Requires the `wt` CLI (https://worktrunk.dev)
- Instructions
- 161 lines in SKILL.md · view on GitHub
Before installing
- Instructions read files in your home folder (~/.ssh, ~/.aws…)
Files (17)
- SKILL.md
- claude-code.md · reference/
- code-signing.md · reference/
- config.md · reference/
- extending.md · reference/
- faq.md · reference/
- hook.md · reference/
- list.md · reference/
- llm-commits.md · reference/
- merge.md · reference/
- remove.md · reference/
- shell-integration.md · reference/
- step.md · reference/
- switch.md · reference/
- tips-patterns.md · reference/
- troubleshooting.md · reference/
- worktrunk.md · reference/
SKILL.md (first lines)
# Worktrunk
Help users work with Worktrunk, a CLI tool for managing git worktrees.
## Available documentation
Reference files are synced from [worktrunk.dev](https://worktrunk.dev) documentation:
- **reference/config.md**: User and project configuration (LLM, hooks, command defaults)
- **reference/hook.md**: Hook types, timing, and execution order
- **reference/switch.md**, **merge.md**, **list.md**, etc.: Command documentation
- **reference/extending.md**: Aliases, multi-step pipelines, custom subcommands, and template-expansion gotchas (two-pass `{% raw %}` deferral, for-each recipes)
- **reference/llm-commits.md**: LLM commit message generation
- **reference/tips-patterns.md**: Practical recipes — aliases, per-branch variables, dev server per worktree, parallel agent patterns
- **reference/shell-integration.md**: Shell integration debugging
- **reference/troubleshooting.md**: Troubleshooting for LLM and hooks (Claude-specific)
For command-specific options, run `wt <command> --help`. For configuration, follow the workflows below.
## Which worktree a command acts on
`wt` finds the *repository* from the working directory, and the *worktree* from the command's own arguments. Two rules cover every case:
1. **A command that names a branch already names its worktree.** Worktrees are addressed by branch name, so `wt switch <branch>`, `wt remove <branch>`, `wt step diff --branch <branch>`, and `wt config state marker set --branch <branch>` act on that branch's worktree no matter which worktree you run them from. Every such argument also accepts the worktree's own path, for the cases a branch cannot name — a second checkout of the same branch, or a detached worktree (which `marker` still rejects, since it keys state by branch name).
2. **`-C <path>` moves the working directory, not the worktree selection.** Reach for it when the repository lookup is what's wrong: a *different* repository; a command that acts on the current worktree and takes no branch argument (`wt merge`, `wt step rebase|squash|push` — their `[TARGET]` is the merge target, not a worktree); or a caller whose working directory isn't inside a repository at all, such as an agent hook the host pins elsewhere.
Layering `-C` on top of a branch argument names the same worktree twice. From inside the `alpha` worktree of a repo that also has `beta`:
```bash
wt step diff --branch beta # ✓ the branch argument selects the worktree
wt -C ../repo.beta step diff --branch beta # ✗ says beta twice
wt switch --create beta # ✓ --base already defaults to the default branch
wt -C ../repo switch --create beta # ✗ -C adds nothing; you are already in that repo
```
## Two types of configuration
Worktrunk uses two config files with different scopes and permission models:
**User config** (`~/.config/worktrunk/config.toml`, never checked into git) holds personal preferences: LLM integration, worktree path templates, command settings, user hooks. Treat it conservatively — propose changes and get consent before editing, never install tools on the user's behalf, and preserve the file's existing structure and comments. See `reference/config.md`.
**Project config** (`<repo>/.config/wt.toml`, checked into git) holds team-wide automation: hooks for the worktree lifecycle (pre-start, pre-merge, etc.). Edit proactively — changes are versioned and reversible via git. Comment why each hook exists, and warn the user before adding destructive commands (`rm -rf`, `DROP TABLE`), network fetches piped to shells, or `sudo`. See `reference/hook.md`.
Some requests span both: commit-message generation is user config, while the team's quality checks are project config.
## Core workflows
### Setting up commit message generation (user config)
Detect which tools are installed (`which claude codex opencode llm aichat`); if none, recommend Claude Code. Take the exact command for the chosen tool from `reference/llm-commits.md`, propose the `[commit.generation]` change, and apply it after approval (`wt config create` first if no config exists). To verify, `wt step commit --dry-run` renders the prompt, runs the LLM, and prints the message without committing.
### Configuring project hooks
Pick the hook type by when the command should run and whether it may block — `reference/hook.md` maps all ten (5 events × pre/post) to their timing and typical uses.
Derive the commands from the project itself (`package.json` scripts, `Cargo.toml`, `pyproject.toml`) and verify they run before adding them.
When a new hook must wait for an existing one, convert the entry to a pipeline; independent commands in a named table run concurrently:
```toml
# Pipeline: install completes before migrate starts
[[pre-start]]
install = "npm install"
[[pre-start]]
migrate = "npm run db:migrate"
# Concurrent: independent commands in one table
[pre-start]
install = "npm install"
env = "cp .env.example .env"
```
Test with `wt switch --create test-hooks`.
## Common tasks reference
### User config tasks
- Set up commit message generation → `reference/llm-commits.md`
- Customize worktree paths → `reference/config.md#worktree-path-template`
- Custom commit templates → `reference/llm-commits.md#prompt-templates`
- Configure command defaults → `reference/config.md#command-config`
- Set up personal hooks → `reference/config.md#user-hooks`
### Project config tasks
- Set up hooks for new project → `reference/hook.md`
- Add hook to existing config → `reference/hook.md#hook-forms`
- Use template variables → `reference/hook.md#template-variables`
- Add dev server URL to list → `reference/config.md#dev-server-url`
### Aliases & multi-worktree tasks
- Create a `wt` alias → `reference/extending.md#aliases`
- Run a command in every worktree → `reference/step.md#wt-step-for-each`
- Rebase every worktree (up-style) → `reference/extending.md#recipe-rebase-every-worktree-onto-its-upstream`
- Pass a template to a nested `wt` command → `reference/extending.md#nesting-templates`
## Key commands
```bash
# View all configuration
wt config show
# Create initial user config (LLM/commit setup: see reference/llm-commits.md)
wt config create
# Full config reference (subcommands, templates, env vars)
wt config --help
```
## Hook approvals in non-interactive sessions
Worktrunk never runs a project's hooks or aliases until the user has explicitly approved them. The commands in `.config/wt.toml` are arbitrary shell code shipped in a repository the user may have just cloned, so on first run Worktrunk shows each command and waits for the user to approve it — an untrusted `.config/wt.toml` cannot silently execute anything. Approvals are stored per-project in `~/.config/worktrunk/approvals.toml` and re-prompted whenever a command template changes, so a hook can't be swapped for a different command after it was approved.
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:From will-wright-eng/skills, MIT OR Apache-2.0.
More from will-wright-eng/skills
- 0.559score
blog-antipatterns
will-wright-eng
Review a markdown software blog post against Michael Lynch's "Anti-Patterns in Software Blogging" — the meandering intro and preamble, assuming the reader…
SkillAFreshness: AClaude Code +9 - 0.519score
prune-comments
will-wright-eng
Aggressively remove redundant comments from code files — deletes narration that restates the code, "pseudo-why" comments whose reason is already visible in…
SkillBFreshness: BClaude Code +9 - 0.469score
autoresearch-program
will-wright-eng
Generate `program.md` at the repo root from the autoresearch program template, with mutable/immutable scope and verifier commands baked in via light templating.
SkillCFreshness: CClaude Code +9 - 0.469score
create-context
will-wright-eng
Build or refine a CONTEXT.md glossary through a question/answer session.
SkillCFreshness: CClaude Code +9 - 0.469score
design-readiness
will-wright-eng
Audit a design/implementation/proposal markdown document for consistency with the codebase and its documented context (ADRs in docs/adr/, CONTEXT.md) and…
SkillCFreshness: CClaude Code +9 - 0.469score
distill-adrs
will-wright-eng
Distill existing implementation markdown documents (plans, design docs, RFCs) into Architecture Decision Records (ADRs).
SkillCFreshness: CClaude Code +9 - 0.469score
autoresearch-verify
will-wright-eng
Build a repo-specific verifier script for an autoresearch loop.
SkillCFreshness: CClaude Code +9 - 0.469score
autoresearch-method
will-wright-eng
Explain the autoresearch methodology — a verifiable autonomous experiment loop — and evaluate whether the current repo is a good fit before running the…
SkillCFreshness: CClaude Code +9 - 0.469score
anneal
will-wright-eng
Decompose a god module into stable and volatile pieces whose boundaries match how the code actually changes.
SkillCFreshness: CClaude Code +9 - 0.445score
caveman
will-wright-eng
Ultra-compressed communication mode.
SkillCFreshness: CClaude Code +9 - 0.445score
improve-codebase-architecture
will-wright-eng
Find deepening opportunities in a codebase, informed by the domain language in CONTEXT.md and the decisions in docs/adr/.
SkillCFreshness: CClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 15, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT OR Apache-2.0
- Repository
- github.com/will-wright-eng/skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
Same skill elsewhere
Copies of this SKILL.md published by others; search shows only one of them.
More from will-wright-eng
- 0.559score
blog-antipatterns
will-wright-eng
Review a markdown software blog post against Michael Lynch's "Anti-Patterns in Software Blogging" — the meandering intro and preamble, assuming the reader…
SkillAFreshness: AClaude Code +9 - 0.519score
prune-comments
will-wright-eng
Aggressively remove redundant comments from code files — deletes narration that restates the code, "pseudo-why" comments whose reason is already visible in…
SkillBFreshness: BClaude Code +9 - 0.469score
autoresearch-program
will-wright-eng
Generate `program.md` at the repo root from the autoresearch program template, with mutable/immutable scope and verifier commands baked in via light templating.
SkillCFreshness: CClaude Code +9 - 0.469score
create-context
will-wright-eng
Build or refine a CONTEXT.md glossary through a question/answer session.
SkillCFreshness: CClaude Code +9 - 0.469score
design-readiness
will-wright-eng
Audit a design/implementation/proposal markdown document for consistency with the codebase and its documented context (ADRs in docs/adr/, CONTEXT.md) and…
SkillCFreshness: CClaude Code +9 - 0.469score
distill-adrs
will-wright-eng
Distill existing implementation markdown documents (plans, design docs, RFCs) into Architecture Decision Records (ADRs).
SkillCFreshness: CClaude Code +9
Cite this page
worktrunk skill. Agent Mart. https://agentmart.dev/skills/will-wright-eng-worktrunk (last updated 2026-10-24)