# Install dotfiles
git clone https://github.com/chytreg/dotfiles.git ~/dotfiles && cd ~/dotfiles
bin/install
# Please install Xcode and command-line tools manually
# Boostrap script setup dev environment
bin/bootstrap
# Apply my custom OS X settins
bin/osx-defaults && bin/osx-dock
Windows are auto-named after their panes' working dirs (deduped, with short
aliases — see the alias[...] table in bin/tmux-window-title). A pane running
Claude Code instead shows Claude's current task, kebab-cased and trimmed to a
branch-like label (e.g. Implement Tauri native database Phase 2 →
implement-tauri-native). In a mixed window the segments combine, e.g.
edit-task-title, granular.
How it works: Claude Code already emits its task summary as the terminal title,
which tmux captures as pane_title; the script reads it (no LLM call). A pane is
treated as Claude's when pane_current_command is its version string (e.g.
2.1.162, which Claude sets as its process title) — otherwise it falls back to
the dir basename, so idle/quit panes revert cleanly.
Moving parts:
bin/tmux-window-title— builds and sets the name for a window (or--all).bin/tmux-window-title-loop— 30s fallback (Claude changes its title without firing any tmux hook); started detached fromtmux.conf, self-healing single-instance via the owner PID in@title_loop_pid.tmux.conf— pane/window hooks call the script with#{window_id};automatic-renameis off; manual renames (prefix+,) stick,prefix+<restores auto-naming.zsh/tmux.zsh— refreshes oncdviachpwd.
For instant updates (vs. ≤30s from the loop), Claude Code runs the script via
Stop and UserPromptSubmit hooks in claude/settings.json (symlinked to
~/.claude/settings.json by bin/install).