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.
- package/LICENSE +21 -0
- package/README.md +926 -0
- package/claude-code/CLAUDE.md.shipwright +125 -0
- package/claude-code/hooks/notify-idle.sh +35 -0
- package/claude-code/hooks/pre-compact-save.sh +57 -0
- package/claude-code/hooks/task-completed.sh +170 -0
- package/claude-code/hooks/teammate-idle.sh +68 -0
- package/claude-code/settings.json.template +184 -0
- package/completions/_shipwright +140 -0
- package/completions/shipwright.bash +89 -0
- package/completions/shipwright.fish +107 -0
- package/docs/KNOWN-ISSUES.md +199 -0
- package/docs/TIPS.md +331 -0
- package/docs/definition-of-done.example.md +16 -0
- package/docs/patterns/README.md +139 -0
- package/docs/patterns/audit-loop.md +149 -0
- package/docs/patterns/bug-hunt.md +183 -0
- package/docs/patterns/feature-implementation.md +159 -0
- package/docs/patterns/refactoring.md +183 -0
- package/docs/patterns/research-exploration.md +144 -0
- package/docs/patterns/test-generation.md +173 -0
- package/package.json +49 -0
- package/scripts/adapters/docker-deploy.sh +50 -0
- package/scripts/adapters/fly-deploy.sh +41 -0
- package/scripts/adapters/iterm2-adapter.sh +122 -0
- package/scripts/adapters/railway-deploy.sh +34 -0
- package/scripts/adapters/tmux-adapter.sh +87 -0
- package/scripts/adapters/vercel-deploy.sh +35 -0
- package/scripts/adapters/wezterm-adapter.sh +103 -0
- package/scripts/cct +242 -0
- package/scripts/cct-cleanup.sh +172 -0
- package/scripts/cct-cost.sh +590 -0
- package/scripts/cct-daemon.sh +3189 -0
- package/scripts/cct-doctor.sh +328 -0
- package/scripts/cct-fix.sh +478 -0
- package/scripts/cct-fleet.sh +904 -0
- package/scripts/cct-init.sh +282 -0
- package/scripts/cct-logs.sh +273 -0
- package/scripts/cct-loop.sh +1332 -0
- package/scripts/cct-memory.sh +1148 -0
- package/scripts/cct-pipeline.sh +3844 -0
- package/scripts/cct-prep.sh +1352 -0
- package/scripts/cct-ps.sh +168 -0
- package/scripts/cct-reaper.sh +390 -0
- package/scripts/cct-session.sh +284 -0
- package/scripts/cct-status.sh +169 -0
- package/scripts/cct-templates.sh +242 -0
- package/scripts/cct-upgrade.sh +422 -0
- package/scripts/cct-worktree.sh +405 -0
- package/scripts/postinstall.mjs +96 -0
- package/templates/pipelines/autonomous.json +71 -0
- package/templates/pipelines/cost-aware.json +95 -0
- package/templates/pipelines/deployed.json +79 -0
- package/templates/pipelines/enterprise.json +114 -0
- package/templates/pipelines/fast.json +63 -0
- package/templates/pipelines/full.json +104 -0
- package/templates/pipelines/hotfix.json +63 -0
- package/templates/pipelines/standard.json +91 -0
- package/tmux/claude-teams-overlay.conf +109 -0
- package/tmux/templates/architecture.json +19 -0
- package/tmux/templates/bug-fix.json +24 -0
- package/tmux/templates/code-review.json +24 -0
- package/tmux/templates/devops.json +19 -0
- package/tmux/templates/documentation.json +19 -0
- package/tmux/templates/exploration.json +19 -0
- package/tmux/templates/feature-dev.json +24 -0
- package/tmux/templates/full-stack.json +24 -0
- package/tmux/templates/migration.json +24 -0
- package/tmux/templates/refactor.json +19 -0
- package/tmux/templates/security-audit.json +24 -0
- package/tmux/templates/testing.json +24 -0
- 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
|