shipwright-cli 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +926 -0
  3. package/claude-code/CLAUDE.md.shipwright +125 -0
  4. package/claude-code/hooks/notify-idle.sh +35 -0
  5. package/claude-code/hooks/pre-compact-save.sh +57 -0
  6. package/claude-code/hooks/task-completed.sh +170 -0
  7. package/claude-code/hooks/teammate-idle.sh +68 -0
  8. package/claude-code/settings.json.template +184 -0
  9. package/completions/_shipwright +140 -0
  10. package/completions/shipwright.bash +89 -0
  11. package/completions/shipwright.fish +107 -0
  12. package/docs/KNOWN-ISSUES.md +199 -0
  13. package/docs/TIPS.md +331 -0
  14. package/docs/definition-of-done.example.md +16 -0
  15. package/docs/patterns/README.md +139 -0
  16. package/docs/patterns/audit-loop.md +149 -0
  17. package/docs/patterns/bug-hunt.md +183 -0
  18. package/docs/patterns/feature-implementation.md +159 -0
  19. package/docs/patterns/refactoring.md +183 -0
  20. package/docs/patterns/research-exploration.md +144 -0
  21. package/docs/patterns/test-generation.md +173 -0
  22. package/package.json +49 -0
  23. package/scripts/adapters/docker-deploy.sh +50 -0
  24. package/scripts/adapters/fly-deploy.sh +41 -0
  25. package/scripts/adapters/iterm2-adapter.sh +122 -0
  26. package/scripts/adapters/railway-deploy.sh +34 -0
  27. package/scripts/adapters/tmux-adapter.sh +87 -0
  28. package/scripts/adapters/vercel-deploy.sh +35 -0
  29. package/scripts/adapters/wezterm-adapter.sh +103 -0
  30. package/scripts/cct +242 -0
  31. package/scripts/cct-cleanup.sh +172 -0
  32. package/scripts/cct-cost.sh +590 -0
  33. package/scripts/cct-daemon.sh +3189 -0
  34. package/scripts/cct-doctor.sh +328 -0
  35. package/scripts/cct-fix.sh +478 -0
  36. package/scripts/cct-fleet.sh +904 -0
  37. package/scripts/cct-init.sh +282 -0
  38. package/scripts/cct-logs.sh +273 -0
  39. package/scripts/cct-loop.sh +1332 -0
  40. package/scripts/cct-memory.sh +1148 -0
  41. package/scripts/cct-pipeline.sh +3844 -0
  42. package/scripts/cct-prep.sh +1352 -0
  43. package/scripts/cct-ps.sh +168 -0
  44. package/scripts/cct-reaper.sh +390 -0
  45. package/scripts/cct-session.sh +284 -0
  46. package/scripts/cct-status.sh +169 -0
  47. package/scripts/cct-templates.sh +242 -0
  48. package/scripts/cct-upgrade.sh +422 -0
  49. package/scripts/cct-worktree.sh +405 -0
  50. package/scripts/postinstall.mjs +96 -0
  51. package/templates/pipelines/autonomous.json +71 -0
  52. package/templates/pipelines/cost-aware.json +95 -0
  53. package/templates/pipelines/deployed.json +79 -0
  54. package/templates/pipelines/enterprise.json +114 -0
  55. package/templates/pipelines/fast.json +63 -0
  56. package/templates/pipelines/full.json +104 -0
  57. package/templates/pipelines/hotfix.json +63 -0
  58. package/templates/pipelines/standard.json +91 -0
  59. package/tmux/claude-teams-overlay.conf +109 -0
  60. package/tmux/templates/architecture.json +19 -0
  61. package/tmux/templates/bug-fix.json +24 -0
  62. package/tmux/templates/code-review.json +24 -0
  63. package/tmux/templates/devops.json +19 -0
  64. package/tmux/templates/documentation.json +19 -0
  65. package/tmux/templates/exploration.json +19 -0
  66. package/tmux/templates/feature-dev.json +24 -0
  67. package/tmux/templates/full-stack.json +24 -0
  68. package/tmux/templates/migration.json +24 -0
  69. package/tmux/templates/refactor.json +19 -0
  70. package/tmux/templates/security-audit.json +24 -0
  71. package/tmux/templates/testing.json +24 -0
  72. package/tmux/tmux.conf +167 -0
@@ -0,0 +1,140 @@
1
+ #compdef shipwright sw cct
2
+ # ╔═══════════════════════════════════════════════════════════════════════════╗
3
+ # ║ Shipwright — Zsh tab completions ║
4
+ # ╚═══════════════════════════════════════════════════════════════════════════╝
5
+ # Place in a directory in your $fpath (e.g. ~/.zfunc/) and run: compinit
6
+
7
+ _shipwright() {
8
+ local -a commands
9
+ commands=(
10
+ 'session:Create a new tmux window for a Claude team'
11
+ 'status:Show dashboard of running teams and agents'
12
+ 'ps:Show running agent processes and status'
13
+ 'logs:View and search agent pane logs'
14
+ 'templates:Manage team composition templates'
15
+ 'doctor:Validate your setup and check for issues'
16
+ 'cleanup:Clean up orphaned team sessions'
17
+ 'reaper:Automatic pane cleanup when agents exit'
18
+ 'upgrade:Check for updates from the repo'
19
+ 'loop:Continuous agent loop — run until goal is achieved'
20
+ 'pipeline:Full delivery pipeline — idea to production'
21
+ 'worktree:Manage git worktrees for agent isolation'
22
+ 'prep:Repo preparation — generate .claude/ configs'
23
+ 'daemon:Issue watcher — auto-process GitHub issues'
24
+ 'memory:Persistent memory — learn from every pipeline run'
25
+ 'cost:Cost intelligence — track tokens, budgets, model routing'
26
+ 'init:Quick tmux setup — one command, no prompts'
27
+ 'help:Show help message'
28
+ 'version:Show version'
29
+ )
30
+
31
+ local -a pipeline_cmds daemon_cmds templates_cmds
32
+ pipeline_cmds=(
33
+ 'start:Start a new pipeline run'
34
+ 'resume:Resume from last stage'
35
+ 'status:Show pipeline progress dashboard'
36
+ 'abort:Cancel the running pipeline'
37
+ 'list:Browse available pipeline templates'
38
+ 'show:Show details of a pipeline template'
39
+ 'test:Run pipeline test suite'
40
+ )
41
+ daemon_cmds=(
42
+ 'start:Start issue watcher'
43
+ 'stop:Graceful shutdown'
44
+ 'status:Show active pipelines and queue'
45
+ 'metrics:DORA/DX metrics dashboard'
46
+ 'triage:Show issue triage scores'
47
+ 'patrol:Run proactive codebase patrol'
48
+ 'test:Run daemon test suite'
49
+ 'logs:View daemon logs'
50
+ 'init:Initialize daemon configuration'
51
+ )
52
+ local -a memory_cmds cost_cmds
53
+ memory_cmds=(
54
+ 'show:Show learned patterns for this repo'
55
+ 'search:Search across all memories'
56
+ 'forget:Remove a memory entry'
57
+ 'export:Export memories to file'
58
+ 'import:Import memories from file'
59
+ 'stats:Memory usage and coverage'
60
+ 'test:Run memory test suite'
61
+ )
62
+ cost_cmds=(
63
+ 'show:Show cost summary for current period'
64
+ 'budget:Manage daily budget'
65
+ 'record:Record token usage'
66
+ 'calculate:Calculate cost estimate'
67
+ 'check-budget:Check budget before starting'
68
+ )
69
+ templates_cmds=(
70
+ 'list:Browse team templates'
71
+ 'show:Show template details'
72
+ )
73
+
74
+ _arguments -C \
75
+ '1:command:->command' \
76
+ '*::arg:->args'
77
+
78
+ case "$state" in
79
+ command)
80
+ _describe -t commands 'shipwright command' commands
81
+ ;;
82
+ args)
83
+ case "${words[1]}" in
84
+ pipeline)
85
+ _describe -t pipeline-cmds 'pipeline command' pipeline_cmds
86
+ ;;
87
+ daemon)
88
+ _describe -t daemon-cmds 'daemon command' daemon_cmds
89
+ ;;
90
+ memory)
91
+ _describe -t memory-cmds 'memory command' memory_cmds
92
+ ;;
93
+ cost)
94
+ _describe -t cost-cmds 'cost command' cost_cmds
95
+ ;;
96
+ templates)
97
+ _describe -t templates-cmds 'templates command' templates_cmds
98
+ ;;
99
+ prep)
100
+ _arguments \
101
+ '--check[Audit existing prep quality]' \
102
+ '--with-claude[Deep analysis using Claude Code]' \
103
+ '--verbose[Verbose output]'
104
+ ;;
105
+ loop)
106
+ _arguments \
107
+ '--test-cmd[Test command to verify each iteration]:command:' \
108
+ '--max-iterations[Maximum loop iterations]:count:' \
109
+ '--model[Claude model to use]:model:(opus sonnet haiku)' \
110
+ '--agents[Number of agents]:count:' \
111
+ '--audit[Enable self-reflection each iteration]' \
112
+ '--audit-agent[Use separate auditor agent]' \
113
+ '--quality-gates[Enable automated quality checks]' \
114
+ '--definition-of-done[Custom completion checklist]:file:_files' \
115
+ '--resume[Resume interrupted loop]' \
116
+ '--skip-permissions[Skip permission prompts]'
117
+ ;;
118
+ logs)
119
+ _arguments \
120
+ '--follow[Tail logs in real time]' \
121
+ '--lines[Number of lines to show]:count:'
122
+ ;;
123
+ cleanup)
124
+ _arguments \
125
+ '--force[Actually kill orphaned sessions]'
126
+ ;;
127
+ upgrade)
128
+ _arguments \
129
+ '--apply[Apply available updates]'
130
+ ;;
131
+ reaper)
132
+ _arguments \
133
+ '--watch[Continuous watch mode]'
134
+ ;;
135
+ esac
136
+ ;;
137
+ esac
138
+ }
139
+
140
+ _shipwright "$@"
@@ -0,0 +1,89 @@
1
+ #!/usr/bin/env bash
2
+ # ╔═══════════════════════════════════════════════════════════════════════════╗
3
+ # ║ Shipwright — Bash tab completions ║
4
+ # ╚═══════════════════════════════════════════════════════════════════════════╝
5
+ # Source this file or place it in /usr/local/etc/bash_completion.d/
6
+
7
+ _shipwright_completions() {
8
+ local cur prev
9
+ cur="${COMP_WORDS[COMP_CWORD]}"
10
+ prev="${COMP_WORDS[COMP_CWORD-1]}"
11
+
12
+ # Top-level commands
13
+ local commands="session status ps logs templates doctor cleanup reaper upgrade loop pipeline worktree prep daemon memory cost init help version"
14
+
15
+ case "$prev" in
16
+ shipwright|sw|cct)
17
+ COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
18
+ return 0
19
+ ;;
20
+ pipeline)
21
+ COMPREPLY=( $(compgen -W "start resume status abort list show test" -- "$cur") )
22
+ return 0
23
+ ;;
24
+ daemon)
25
+ COMPREPLY=( $(compgen -W "start stop status metrics triage patrol test logs init" -- "$cur") )
26
+ return 0
27
+ ;;
28
+ memory)
29
+ COMPREPLY=( $(compgen -W "show search forget export import stats test" -- "$cur") )
30
+ return 0
31
+ ;;
32
+ cost)
33
+ COMPREPLY=( $(compgen -W "show budget record calculate check-budget" -- "$cur") )
34
+ return 0
35
+ ;;
36
+ templates)
37
+ COMPREPLY=( $(compgen -W "list show" -- "$cur") )
38
+ return 0
39
+ ;;
40
+ prep)
41
+ COMPREPLY=( $(compgen -W "--check --with-claude --verbose" -- "$cur") )
42
+ return 0
43
+ ;;
44
+ loop)
45
+ COMPREPLY=( $(compgen -W "--test-cmd --max-iterations --model --agents --audit --audit-agent --quality-gates --definition-of-done --resume --skip-permissions" -- "$cur") )
46
+ return 0
47
+ ;;
48
+ logs)
49
+ COMPREPLY=( $(compgen -W "--follow --lines" -- "$cur") )
50
+ return 0
51
+ ;;
52
+ cleanup)
53
+ COMPREPLY=( $(compgen -W "--force" -- "$cur") )
54
+ return 0
55
+ ;;
56
+ upgrade)
57
+ COMPREPLY=( $(compgen -W "--apply" -- "$cur") )
58
+ return 0
59
+ ;;
60
+ reaper)
61
+ COMPREPLY=( $(compgen -W "--watch" -- "$cur") )
62
+ return 0
63
+ ;;
64
+ budget)
65
+ COMPREPLY=( $(compgen -W "set show" -- "$cur") )
66
+ return 0
67
+ ;;
68
+ esac
69
+
70
+ # Flags for subcommands already handled above; fall back to commands
71
+ if [[ "$cur" == -* ]]; then
72
+ case "${COMP_WORDS[1]}" in
73
+ prep) COMPREPLY=( $(compgen -W "--check --with-claude --verbose" -- "$cur") ) ;;
74
+ loop) COMPREPLY=( $(compgen -W "--test-cmd --max-iterations --model --agents --audit --audit-agent --quality-gates --definition-of-done --resume --skip-permissions" -- "$cur") ) ;;
75
+ logs) COMPREPLY=( $(compgen -W "--follow --lines" -- "$cur") ) ;;
76
+ cleanup) COMPREPLY=( $(compgen -W "--force" -- "$cur") ) ;;
77
+ upgrade) COMPREPLY=( $(compgen -W "--apply" -- "$cur") ) ;;
78
+ reaper) COMPREPLY=( $(compgen -W "--watch" -- "$cur") ) ;;
79
+ cost) COMPREPLY=( $(compgen -W "--period --json --by-stage --by-issue" -- "$cur") ) ;;
80
+ esac
81
+ return 0
82
+ fi
83
+
84
+ COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
85
+ }
86
+
87
+ complete -F _shipwright_completions shipwright
88
+ complete -F _shipwright_completions sw
89
+ complete -F _shipwright_completions cct
@@ -0,0 +1,107 @@
1
+ # ╔═══════════════════════════════════════════════════════════════════════════╗
2
+ # ║ Shipwright — Fish tab completions ║
3
+ # ╚═══════════════════════════════════════════════════════════════════════════╝
4
+ # Place in ~/.config/fish/completions/
5
+
6
+ # Disable file completions by default
7
+ for cmd in shipwright sw cct
8
+ complete -c $cmd -f
9
+
10
+ # Top-level commands
11
+ set -l all_cmds session status ps logs templates doctor cleanup reaper upgrade loop pipeline worktree prep daemon memory cost init help version
12
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "session" -d "Create a new tmux window for a Claude team"
13
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "status" -d "Show dashboard of running teams and agents"
14
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "ps" -d "Show running agent processes and status"
15
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "logs" -d "View and search agent pane logs"
16
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "templates" -d "Manage team composition templates"
17
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "doctor" -d "Validate your setup and check for issues"
18
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "cleanup" -d "Clean up orphaned team sessions"
19
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "reaper" -d "Automatic pane cleanup when agents exit"
20
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "upgrade" -d "Check for updates from the repo"
21
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "loop" -d "Continuous agent loop"
22
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "pipeline" -d "Full delivery pipeline"
23
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "worktree" -d "Manage git worktrees"
24
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "prep" -d "Repo preparation"
25
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "daemon" -d "Issue watcher daemon"
26
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "memory" -d "Persistent memory system"
27
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "cost" -d "Cost intelligence"
28
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "init" -d "Quick tmux setup"
29
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "help" -d "Show help message"
30
+ complete -c $cmd -n "not __fish_seen_subcommand_from $all_cmds" -a "version" -d "Show version"
31
+
32
+ # pipeline subcommands
33
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "start" -d "Start a new pipeline run"
34
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "resume" -d "Resume from last stage"
35
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "status" -d "Show pipeline progress"
36
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "abort" -d "Cancel the running pipeline"
37
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "list" -d "Browse pipeline templates"
38
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "show" -d "Show pipeline template details"
39
+ complete -c $cmd -n "__fish_seen_subcommand_from pipeline" -a "test" -d "Run pipeline test suite"
40
+
41
+ # daemon subcommands
42
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "start" -d "Start issue watcher"
43
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "stop" -d "Graceful shutdown"
44
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "status" -d "Show active pipelines"
45
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "metrics" -d "DORA/DX metrics dashboard"
46
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "triage" -d "Show issue triage scores"
47
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "patrol" -d "Run proactive codebase patrol"
48
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "test" -d "Run daemon test suite"
49
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "logs" -d "View daemon logs"
50
+ complete -c $cmd -n "__fish_seen_subcommand_from daemon" -a "init" -d "Initialize daemon config"
51
+
52
+ # memory subcommands
53
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "show" -d "Show learned patterns"
54
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "search" -d "Search across memories"
55
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "forget" -d "Remove a memory entry"
56
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "export" -d "Export memories to file"
57
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "import" -d "Import memories from file"
58
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "stats" -d "Memory usage and coverage"
59
+ complete -c $cmd -n "__fish_seen_subcommand_from memory" -a "test" -d "Run memory test suite"
60
+
61
+ # cost subcommands
62
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -a "show" -d "Show cost summary"
63
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -a "budget" -d "Manage daily budget"
64
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -a "record" -d "Record token usage"
65
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -a "calculate" -d "Calculate cost estimate"
66
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -a "check-budget" -d "Check budget before starting"
67
+
68
+ # cost show flags
69
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -l period -d "Number of days to report" -r
70
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -l json -d "JSON output"
71
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -l by-stage -d "Breakdown by pipeline stage"
72
+ complete -c $cmd -n "__fish_seen_subcommand_from cost" -l by-issue -d "Breakdown by issue"
73
+
74
+ # templates subcommands
75
+ complete -c $cmd -n "__fish_seen_subcommand_from templates" -a "list" -d "Browse team templates"
76
+ complete -c $cmd -n "__fish_seen_subcommand_from templates" -a "show" -d "Show template details"
77
+
78
+ # prep flags
79
+ complete -c $cmd -n "__fish_seen_subcommand_from prep" -l check -d "Audit existing prep quality"
80
+ complete -c $cmd -n "__fish_seen_subcommand_from prep" -l with-claude -d "Deep analysis using Claude Code"
81
+ complete -c $cmd -n "__fish_seen_subcommand_from prep" -l verbose -d "Verbose output"
82
+
83
+ # loop flags
84
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l test-cmd -d "Test command to verify each iteration" -r
85
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l max-iterations -d "Maximum loop iterations" -r
86
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l model -d "Claude model to use" -ra "opus sonnet haiku"
87
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l agents -d "Number of agents" -r
88
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l audit -d "Enable self-reflection each iteration"
89
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l audit-agent -d "Use separate auditor agent"
90
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l quality-gates -d "Enable automated quality checks"
91
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l definition-of-done -d "Custom completion checklist" -rF
92
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l resume -d "Resume interrupted loop"
93
+ complete -c $cmd -n "__fish_seen_subcommand_from loop" -l skip-permissions -d "Skip permission prompts"
94
+
95
+ # logs flags
96
+ complete -c $cmd -n "__fish_seen_subcommand_from logs" -l follow -d "Tail logs in real time"
97
+ complete -c $cmd -n "__fish_seen_subcommand_from logs" -l lines -d "Number of lines to show" -r
98
+
99
+ # cleanup flags
100
+ complete -c $cmd -n "__fish_seen_subcommand_from cleanup" -l force -d "Actually kill orphaned sessions"
101
+
102
+ # upgrade flags
103
+ complete -c $cmd -n "__fish_seen_subcommand_from upgrade" -l apply -d "Apply available updates"
104
+
105
+ # reaper flags
106
+ complete -c $cmd -n "__fish_seen_subcommand_from reaper" -l watch -d "Continuous watch mode"
107
+ end
@@ -0,0 +1,199 @@
1
+ # Known Issues
2
+
3
+ Tracked bugs and limitations in Claude Code Agent Teams + tmux integration, with workarounds.
4
+
5
+ ---
6
+
7
+ ## #23615: tmux `send-keys` race condition
8
+
9
+ **Severity:** Medium — affects sessions with 4+ agents
10
+
11
+ **Problem:** When Claude Code spawns 4+ agent panes simultaneously using `split-window` + `send-keys`, tmux can deliver keystrokes to the wrong pane. This happens because tmux processes `split-window` and `send-keys` asynchronously — the new pane may not be the active pane by the time `send-keys` fires.
12
+
13
+ **Symptoms:**
14
+ - Agent commands appear in the wrong pane
15
+ - Panes start with garbled or partial commands
16
+ - Some panes sit empty while others received duplicate input
17
+
18
+ **Workaround:** The `shipwright` CLI uses `new-window` instead of `split-window` for spawning agent panes, then arranges them with `select-layout tiled` after all panes are created. This avoids the race because each `new-window` creates an isolated context.
19
+
20
+ If spawning panes manually, add a small delay between operations:
21
+
22
+ ```bash
23
+ tmux split-window -t "$session" -h
24
+ sleep 0.1
25
+ tmux send-keys -t "$session" "claude" Enter
26
+ ```
27
+
28
+ **Root cause:** This is a fundamental tmux limitation, not a Claude Code bug. tmux's command queue doesn't guarantee ordering between window operations and key delivery.
29
+
30
+ **Status:** Open — no upstream fix expected. The `shipwright` workaround is reliable.
31
+
32
+ ---
33
+
34
+ ## #23572: Silent fallback to in-process mode
35
+
36
+ **Severity:** Low — cosmetic, but confusing
37
+
38
+ **Problem:** Agent teams can silently fall back to in-process mode if tmux isn't detected properly. No error is shown — agents just spawn in the same process instead of separate panes.
39
+
40
+ **Symptoms:**
41
+ - You're inside tmux but agents don't get their own panes
42
+ - All agent output appears in a single terminal
43
+ - No tmux split-windows are created
44
+
45
+ **Workaround:** Make sure you're inside a real tmux session (not a nested one) and that `$TMUX` is set:
46
+
47
+ ```bash
48
+ echo $TMUX # Should show the tmux socket path
49
+ tmux new -s dev # Start a session if not in one
50
+ ```
51
+
52
+ Claude Code auto-detects tmux and uses split panes when available.
53
+
54
+ **How to verify:** After launching a team, check for multiple tmux panes:
55
+
56
+ ```bash
57
+ tmux list-panes
58
+ ```
59
+
60
+ If only one pane is listed while agents are active, the fallback occurred.
61
+
62
+ **Status:** Open — tracked in Claude Code issue tracker.
63
+
64
+ ---
65
+
66
+ ## No VS Code / Ghostty terminal support
67
+
68
+ **Severity:** Medium — affects users of these terminals
69
+
70
+ **Problem:** Claude Code's tmux-based agent pane spawning does not work in:
71
+ - **VS Code's integrated terminal** — VS Code's terminal emulator doesn't support the tmux control mode and pane management that Claude Code uses for agent teams.
72
+ - **Ghostty** — As of current versions, Ghostty lacks the tmux integration hooks needed for split-pane agent spawning.
73
+
74
+ **Symptoms:**
75
+ - Agent teams silently fall back to in-process mode
76
+ - No tmux split panes are created
77
+ - Everything works, but you lose the visual multi-pane experience
78
+
79
+ **Workaround:** Use a supported terminal emulator:
80
+
81
+ | Terminal | Status | Notes |
82
+ |----------|--------|-------|
83
+ | **iTerm2** (macOS) | Supported | Recommended for macOS |
84
+ | **Alacritty** | Supported | Fast, cross-platform |
85
+ | **Kitty** | Supported | Feature-rich, cross-platform |
86
+ | **WezTerm** | Supported | Cross-platform, GPU-accelerated |
87
+ | **macOS Terminal.app** | Supported | Built-in, basic but works |
88
+ | VS Code terminal | Not supported | Use an external terminal |
89
+ | Ghostty | Not supported | May be supported in future versions |
90
+
91
+ **Tip:** You can run tmux in an external terminal while keeping VS Code open for editing. Claude Code doesn't need to run inside VS Code to work with your project.
92
+
93
+ **Status:** Unlikely to change — this is a terminal emulator limitation, not a Claude Code bug.
94
+
95
+ ---
96
+
97
+ ## Context window pressure with large teams
98
+
99
+ **Severity:** Low — manageable with good practices
100
+
101
+ **Problem:** Each agent in a team uses its own context window. With 3+ agents running complex tasks, individual agents can hit context limits faster than expected, especially if tasks are too broad.
102
+
103
+ **Symptoms:**
104
+ - Agent output becomes less coherent toward the end of long tasks
105
+ - Agents start losing track of earlier context
106
+ - Auto-compact kicks in frequently
107
+
108
+ **Workaround:**
109
+
110
+ 1. **Limit teams to 2-3 agents.** More agents means more total context usage and more coordination overhead.
111
+
112
+ 2. **Keep tasks focused.** 5-6 specific tasks per agent is the sweet spot. Avoid vague tasks like "improve the codebase."
113
+
114
+ 3. **Set aggressive auto-compact:**
115
+ ```json
116
+ {
117
+ "env": {
118
+ "CLAUDE_CODE_AUTOCOMPACT_PCT_OVERRIDE": "70"
119
+ }
120
+ }
121
+ ```
122
+
123
+ 4. **Use haiku for subagent lookups** to save context budget for the main agent:
124
+ ```json
125
+ {
126
+ "env": {
127
+ "CLAUDE_CODE_SUBAGENT_MODEL": "haiku"
128
+ }
129
+ }
130
+ ```
131
+
132
+ 5. **Assign different files** to each agent to reduce cross-referencing needs.
133
+
134
+ **Status:** By design — context windows are finite. The workarounds above mitigate the issue effectively.
135
+
136
+ ---
137
+
138
+ ## White/Bright Pane Backgrounds on Agent Spawn
139
+
140
+ **Severity:** Medium — cosmetic but distracting
141
+
142
+ **Problem:** When Claude Code spawns agent panes via tmux, new panes sometimes inherit the terminal's default background (often white/bright) instead of the tmux dark theme.
143
+
144
+ **Root Cause:** tmux's `window-style` applies at the window level but newly spawned panes from external processes (like Claude Code) don't always inherit it.
145
+
146
+ **Fix:** As of v1.3.0, `claude-teams-overlay.conf` uses `set-hook` to force the dark theme on every new pane:
147
+
148
+ ```conf
149
+ set-hook -g after-split-window "select-pane -P 'bg=#1a1a2e,fg=#e4e4e7'"
150
+ set-hook -g after-new-window "select-pane -P 'bg=#1a1a2e,fg=#e4e4e7'"
151
+ set-hook -g after-new-session "select-pane -P 'bg=#1a1a2e,fg=#e4e4e7'"
152
+ ```
153
+
154
+ Run `shipwright init` or `shipwright upgrade --apply` to get the updated overlay with these hooks.
155
+
156
+ **Status:** ✅ Resolved in v1.3.0
157
+
158
+ ---
159
+
160
+ ## TPM plugins not loading
161
+
162
+ **Severity:** Low — cosmetic
163
+
164
+ **Problem:** After installation, tmux plugins (resurrect, continuum) don't load until TPM is initialized.
165
+
166
+ **Workaround:** Press `prefix + I` (capital I) after starting tmux to install plugins. This only needs to be done once.
167
+
168
+ If TPM itself isn't installed, the installer will offer to install it, or you can install manually:
169
+
170
+ ```bash
171
+ git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
172
+ ```
173
+
174
+ **Status:** Expected behavior — TPM requires a one-time plugin install step.
175
+
176
+ ---
177
+
178
+ ## Orphaned tmux panes after teammate shutdown
179
+
180
+ **Severity:** Medium — cosmetic but annoying
181
+
182
+ **Problem:** When Claude Code teammates shut down (via `shutdown_request` → `shutdown_response`), the Claude process exits but the tmux pane remains open with an idle shell. There is no Claude Code hook event for teammate shutdown — the available hooks (`TeammateIdle`, `TaskCompleted`, `Notification`, `Stop`, etc.) do not fire on agent exit.
183
+
184
+ **Symptoms:**
185
+ - After a team finishes work, panes remain with idle shell prompts
186
+ - `shipwright ps` shows panes as "idle" with increasing idle time
187
+ - `~/.claude/teams/` and `~/.claude/tasks/` directories accumulate
188
+
189
+ **Fix:** Use the pane reaper:
190
+
191
+ ```bash
192
+ shipwright reaper # One-shot: clean dead panes now
193
+ shipwright reaper --watch # Background: auto-clean every 5s
194
+ shipwright reaper --dry-run # Preview what would be reaped
195
+ ```
196
+
197
+ Or use the tmux keybinding: `prefix + R` for a quick one-shot cleanup.
198
+
199
+ **Status:** Resolved in v1.6.0