wt-setup
wt-setup
Create and maintain .wt/setup scripts -- the standard bootstrap entrypoint
executed when a git worktree is created by a supporting tool.
Background
The wt tool (and other tools that follow the
.wt/setup convention) creates git worktrees under
~/.wt/worktrees/<project>-<name>/. When a worktree is created, the tool
looks for .wt/setup in the repository root and executes it inside the new
worktree directory.
Convention
Directory layout
.wt/
AGENTS.md # Documentation for agents about the .wt/ directory
setup # Bootstrap script (executable, committed)
setup.local # Local overrides (gitignored)
worktrees/ # Symlinks to worktrees (gitignored, created by wt)
Execution context
| Item | Value |
|---|---|
| Working directory | The new worktree root |
ROOT_WORKTREE_PATH |
Path to the base repository (source tree) |
| Interpreter | #!/usr/bin/env bash (portable) |
Design rules
- Idempotent -- safe to run multiple times
- Non-interactive -- no prompts; fail fast on missing prerequisites
- Fast -- avoid slow network operations; cache where possible
- Portable -- use
#!/usr/bin/env bashand standard POSIX tools - Repository-local only -- tools MUST NOT read user-global setup scripts
Creating a .wt/setup
Step 1 -- Detect project type
Inspect the repository to determine what bootstrap actions are needed:
| Indicator | Action |
|---|---|
Makefile with setup target |
make setup |
package.json |
npm install or pnpm install |
pyproject.toml |
uv sync or pip install -e . |
Cargo.toml |
cargo fetch |
go.mod |
go mod download |
Gemfile |
bundle install |
.envrc |
direnv allow (if available) |
Step 2 -- Generate the script
Use the generator script or write manually:
# Using the generator
./wt-setup/scripts/generate.py
# Or manually
mkdir -p .wt
cat > .wt/setup << 'SETUP'
#!/usr/bin/env bash
set -euo pipefail
# --- Prerequisites ---
for cmd in make git; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "error: $cmd not found" >&2
exit 1
fi
done
# --- Bootstrap ---
make setup
SETUP
chmod +x .wt/setup
Step 3 -- Add .wt/setup.local support (optional)
.wt/setup.local is gitignored, so it does not exist in worktrees.
The script must reference the ROOT (source) repository via ROOT_WORKTREE_PATH.
Append to .wt/setup:
# --- Local overrides (from ROOT repo -- .local is gitignored) ---
_local="${ROOT_WORKTREE_PATH:-.}/.wt/setup.local"
if [ -f "$_local" ]; then
# shellcheck source=/dev/null
source "$_local"
fi
Ensure .wt/setup.local is in .gitignore.
Step 4 -- Add AGENTS.md (recommended)
Copy the template to .wt/AGENTS.md so AI agents understand the directory:
cp wt-setup/references/AGENTS.md.template .wt/AGENTS.md
Or use the generator with --agents-md flag.
The template is at references/AGENTS.md.template.
Step 5 -- Update .gitignore
Add these entries if not present:
.wt/setup.local
.wt/worktrees/
Git hooks in worktrees
Worktrees do NOT inherit git hooks from the base repository.
If the base repo uses pre-commit hooks, .wt/setup SHOULD re-establish them.
The strategy (in priority order):
- pre-commit framework -- if
.pre-commit-config.yamlexists, runpre-commit install - Husky (Node.js) -- if
.husky/exists, runnpx husky install - Fallback -- point
core.hooksPathto the base repo's hooks:git config core.hooksPath "${ROOT_WORKTREE_PATH}/.git/hooks"
All templates in references/ include this logic.
Templates
Template files are in references/. Copy one to .wt/setup and adjust as needed.
| File | Project type |
|---|---|
references/setup-make.sh |
Makefile with setup target |
references/setup-node.sh |
Node.js (npm / pnpm / yarn) |
references/setup-python.sh |
Python (uv) |
references/setup-rust.sh |
Rust (cargo) |
references/setup-multi.sh |
Multi-language / Makefile-first + local overrides |
Example:
cp wt-setup/references/setup-python.sh .wt/setup
chmod +x .wt/setup
Validation checklist
After creating .wt/setup, verify:
- File is executable (
chmod +x .wt/setup) - Shebang is
#!/usr/bin/env bash -
set -euo pipefailis present - Prerequisite commands are checked before use
- Script is idempotent (safe to re-run)
- No interactive prompts
-
.wt/setup.localis gitignored -
.wt/worktrees/is gitignored
Reference
- wt tool: https://github.com/tumf/wt
- Git worktree docs: https://git-scm.com/docs/git-worktree
More from tumf/skills
firecrawl
|
57opencode-agent-creator
Create specialized OpenCode agents with proper configuration for primary agents and subagents. Use when the user wants reusable OpenCode agent profiles, needs `agent/*.md` files or `opencode.jsonc` agent entries, wants to configure prompts/models/tool access, or needs to split work between a primary agent and subagents safely.
47openclaw-agent-creator
|
26agentic-cli-design
|
22opencode-command-creator
Create custom OpenCode commands with proper structure, trigger descriptions, arguments, and configuration. Use when the user wants reusable slash/command workflows in OpenCode, needs `.opencode/commands/*.md` or `opencode.jsonc` entries, wants command templates with `$ARGUMENTS`, or needs to override/extend built-in commands safely.
21product-improvement-proposal
Propose concrete, high-leverage product/UX improvements to increase a software project's appeal and retention. Use when asked to generate product improvement proposals, UX ideas, onboarding/doc improvements, packaging/pricing positioning suggestions grounded in repo evidence, and prioritized MVP plans (ideation only; no implementation).
18