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,79 @@
1
+ {
2
+ "name": "deployed",
3
+ "description": "Full autonomous pipeline with deploy, validate, and monitor — generated by shipwright init --deploy",
4
+ "defaults": {
5
+ "test_cmd": "npm test",
6
+ "model": "opus",
7
+ "agents": 1
8
+ },
9
+ "stages": [
10
+ { "id": "intake", "enabled": true, "gate": "auto", "config": {} },
11
+ { "id": "plan", "enabled": true, "gate": "auto", "config": { "model": "opus" } },
12
+ { "id": "design", "enabled": true, "gate": "auto", "config": { "model": "opus" } },
13
+ {
14
+ "id": "build",
15
+ "enabled": true,
16
+ "gate": "auto",
17
+ "config": { "max_iterations": 20, "audit": true, "quality_gates": true }
18
+ },
19
+ { "id": "test", "enabled": true, "gate": "auto", "config": { "coverage_min": 80 } },
20
+ { "id": "review", "enabled": true, "gate": "auto", "config": {} },
21
+ {
22
+ "id": "compound_quality",
23
+ "enabled": true,
24
+ "gate": "auto",
25
+ "config": {
26
+ "adversarial": true,
27
+ "negative": true,
28
+ "e2e": true,
29
+ "dod_audit": true,
30
+ "max_cycles": 3
31
+ }
32
+ },
33
+ { "id": "pr", "enabled": true, "gate": "auto", "config": { "wait_ci": false } },
34
+ {
35
+ "id": "merge",
36
+ "enabled": true,
37
+ "gate": "auto",
38
+ "config": {
39
+ "merge_method": "squash",
40
+ "wait_ci_timeout_s": 600,
41
+ "auto_delete_branch": true
42
+ }
43
+ },
44
+ {
45
+ "id": "deploy",
46
+ "enabled": true,
47
+ "gate": "approve",
48
+ "config": {
49
+ "staging_cmd": "__STAGING_CMD__",
50
+ "production_cmd": "__PRODUCTION_CMD__",
51
+ "rollback_cmd": "__ROLLBACK_CMD__"
52
+ }
53
+ },
54
+ {
55
+ "id": "validate",
56
+ "enabled": true,
57
+ "gate": "auto",
58
+ "config": {
59
+ "smoke_cmd": "__SMOKE_CMD__",
60
+ "health_url": "__HEALTH_URL__",
61
+ "close_issue": true
62
+ }
63
+ },
64
+ {
65
+ "id": "monitor",
66
+ "enabled": true,
67
+ "gate": "auto",
68
+ "config": {
69
+ "duration_minutes": 5,
70
+ "health_url": "__HEALTH_URL__",
71
+ "error_threshold": 5,
72
+ "log_pattern": "ERROR|FATAL|PANIC",
73
+ "log_cmd": "",
74
+ "rollback_cmd": "__ROLLBACK_CMD__",
75
+ "auto_rollback": true
76
+ }
77
+ }
78
+ ]
79
+ }
@@ -0,0 +1,114 @@
1
+ {
2
+ "name": "enterprise",
3
+ "description": "Maximum safety pipeline: all stages enabled, all gates on approve, strict quality, auto-rollback",
4
+ "defaults": {
5
+ "test_cmd": "npm test",
6
+ "model": "opus",
7
+ "agents": 1
8
+ },
9
+ "stages": [
10
+ {
11
+ "id": "intake",
12
+ "enabled": true,
13
+ "gate": "approve",
14
+ "config": {}
15
+ },
16
+ {
17
+ "id": "plan",
18
+ "enabled": true,
19
+ "gate": "approve",
20
+ "config": { "model": "opus" }
21
+ },
22
+ {
23
+ "id": "design",
24
+ "enabled": true,
25
+ "gate": "approve",
26
+ "config": { "model": "opus" }
27
+ },
28
+ {
29
+ "id": "build",
30
+ "enabled": true,
31
+ "gate": "approve",
32
+ "config": {
33
+ "max_iterations": 20,
34
+ "audit": true,
35
+ "quality_gates": true
36
+ }
37
+ },
38
+ {
39
+ "id": "test",
40
+ "enabled": true,
41
+ "gate": "approve",
42
+ "config": { "coverage_min": 90 }
43
+ },
44
+ {
45
+ "id": "review",
46
+ "enabled": true,
47
+ "gate": "approve",
48
+ "config": {}
49
+ },
50
+ {
51
+ "id": "compound_quality",
52
+ "enabled": true,
53
+ "gate": "approve",
54
+ "config": {
55
+ "adversarial": true,
56
+ "negative": true,
57
+ "e2e": true,
58
+ "dod_audit": true,
59
+ "max_cycles": 5,
60
+ "strict_quality": true
61
+ }
62
+ },
63
+ {
64
+ "id": "pr",
65
+ "enabled": true,
66
+ "gate": "approve",
67
+ "config": { "wait_ci": true }
68
+ },
69
+ {
70
+ "id": "merge",
71
+ "enabled": true,
72
+ "gate": "approve",
73
+ "config": {
74
+ "merge_method": "squash",
75
+ "wait_ci_timeout_s": 900,
76
+ "auto_delete_branch": true
77
+ }
78
+ },
79
+ {
80
+ "id": "deploy",
81
+ "enabled": true,
82
+ "gate": "approve",
83
+ "config": {
84
+ "staging_cmd": "",
85
+ "production_cmd": "",
86
+ "rollback_cmd": ""
87
+ }
88
+ },
89
+ {
90
+ "id": "validate",
91
+ "enabled": true,
92
+ "gate": "approve",
93
+ "config": {
94
+ "smoke_cmd": "",
95
+ "health_url": "",
96
+ "close_issue": true
97
+ }
98
+ },
99
+ {
100
+ "id": "monitor",
101
+ "enabled": true,
102
+ "gate": "approve",
103
+ "config": {
104
+ "duration_minutes": 10,
105
+ "health_url": "",
106
+ "error_threshold": 3,
107
+ "log_pattern": "ERROR|FATAL|PANIC",
108
+ "log_cmd": "",
109
+ "rollback_cmd": "",
110
+ "auto_rollback": true
111
+ }
112
+ }
113
+ ]
114
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "fast",
3
+ "description": "Quick fixes: intake → build → test → PR (all auto, no gates)",
4
+ "defaults": {
5
+ "test_cmd": "npm test",
6
+ "model": "sonnet",
7
+ "agents": 1
8
+ },
9
+ "stages": [
10
+ {
11
+ "id": "intake",
12
+ "enabled": true,
13
+ "gate": "auto",
14
+ "config": {}
15
+ },
16
+ {
17
+ "id": "plan",
18
+ "enabled": false,
19
+ "gate": "auto",
20
+ "config": {}
21
+ },
22
+ {
23
+ "id": "build",
24
+ "enabled": true,
25
+ "gate": "auto",
26
+ "config": {
27
+ "max_iterations": 10,
28
+ "audit": false,
29
+ "quality_gates": false
30
+ }
31
+ },
32
+ {
33
+ "id": "test",
34
+ "enabled": true,
35
+ "gate": "auto",
36
+ "config": { "coverage_min": 0 }
37
+ },
38
+ {
39
+ "id": "review",
40
+ "enabled": false,
41
+ "gate": "auto",
42
+ "config": {}
43
+ },
44
+ {
45
+ "id": "pr",
46
+ "enabled": true,
47
+ "gate": "auto",
48
+ "config": { "wait_ci": false }
49
+ },
50
+ {
51
+ "id": "deploy",
52
+ "enabled": false,
53
+ "gate": "auto",
54
+ "config": {}
55
+ },
56
+ {
57
+ "id": "validate",
58
+ "enabled": false,
59
+ "gate": "auto",
60
+ "config": {}
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,104 @@
1
+ {
2
+ "name": "full",
3
+ "description": "Full deployment pipeline: all stages from intake to production monitoring",
4
+ "defaults": {
5
+ "test_cmd": "npm test",
6
+ "model": "opus",
7
+ "agents": 1
8
+ },
9
+ "stages": [
10
+ {
11
+ "id": "intake",
12
+ "enabled": true,
13
+ "gate": "auto",
14
+ "config": {}
15
+ },
16
+ {
17
+ "id": "plan",
18
+ "enabled": true,
19
+ "gate": "approve",
20
+ "config": { "model": "opus" }
21
+ },
22
+ {
23
+ "id": "design",
24
+ "enabled": true,
25
+ "gate": "approve",
26
+ "config": { "model": "opus" }
27
+ },
28
+ {
29
+ "id": "build",
30
+ "enabled": true,
31
+ "gate": "auto",
32
+ "config": {
33
+ "max_iterations": 20,
34
+ "audit": true,
35
+ "quality_gates": true
36
+ }
37
+ },
38
+ {
39
+ "id": "test",
40
+ "enabled": true,
41
+ "gate": "auto",
42
+ "config": { "coverage_min": 80 }
43
+ },
44
+ {
45
+ "id": "review",
46
+ "enabled": true,
47
+ "gate": "approve",
48
+ "config": {}
49
+ },
50
+ {
51
+ "id": "compound_quality",
52
+ "enabled": true,
53
+ "gate": "auto",
54
+ "config": {
55
+ "adversarial": true,
56
+ "negative": true,
57
+ "e2e": true,
58
+ "dod_audit": true,
59
+ "max_cycles": 3,
60
+ "strict_quality": true
61
+ }
62
+ },
63
+ {
64
+ "id": "pr",
65
+ "enabled": true,
66
+ "gate": "approve",
67
+ "config": { "wait_ci": true }
68
+ },
69
+ {
70
+ "id": "deploy",
71
+ "enabled": true,
72
+ "gate": "approve",
73
+ "config": {
74
+ "staging_cmd": "",
75
+ "production_cmd": "",
76
+ "rollback_cmd": ""
77
+ }
78
+ },
79
+ {
80
+ "id": "validate",
81
+ "enabled": true,
82
+ "gate": "auto",
83
+ "config": {
84
+ "smoke_cmd": "",
85
+ "health_url": "",
86
+ "close_issue": true
87
+ }
88
+ },
89
+ {
90
+ "id": "monitor",
91
+ "enabled": true,
92
+ "gate": "auto",
93
+ "config": {
94
+ "duration_minutes": 5,
95
+ "health_url": "",
96
+ "error_threshold": 5,
97
+ "log_pattern": "ERROR|FATAL|PANIC",
98
+ "log_cmd": "",
99
+ "rollback_cmd": "",
100
+ "auto_rollback": false
101
+ }
102
+ }
103
+ ]
104
+ }
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "hotfix",
3
+ "description": "Urgent production fixes: intake → build → test → PR (all auto, minimal iteration)",
4
+ "defaults": {
5
+ "test_cmd": "npm test",
6
+ "model": "opus",
7
+ "agents": 1
8
+ },
9
+ "stages": [
10
+ {
11
+ "id": "intake",
12
+ "enabled": true,
13
+ "gate": "auto",
14
+ "config": {}
15
+ },
16
+ {
17
+ "id": "plan",
18
+ "enabled": false,
19
+ "gate": "auto",
20
+ "config": {}
21
+ },
22
+ {
23
+ "id": "build",
24
+ "enabled": true,
25
+ "gate": "auto",
26
+ "config": {
27
+ "max_iterations": 10,
28
+ "audit": false,
29
+ "quality_gates": false
30
+ }
31
+ },
32
+ {
33
+ "id": "test",
34
+ "enabled": true,
35
+ "gate": "auto",
36
+ "config": { "coverage_min": 0 }
37
+ },
38
+ {
39
+ "id": "review",
40
+ "enabled": false,
41
+ "gate": "auto",
42
+ "config": {}
43
+ },
44
+ {
45
+ "id": "pr",
46
+ "enabled": true,
47
+ "gate": "auto",
48
+ "config": { "wait_ci": false }
49
+ },
50
+ {
51
+ "id": "deploy",
52
+ "enabled": false,
53
+ "gate": "auto",
54
+ "config": {}
55
+ },
56
+ {
57
+ "id": "validate",
58
+ "enabled": false,
59
+ "gate": "auto",
60
+ "config": {}
61
+ }
62
+ ]
63
+ }
@@ -0,0 +1,91 @@
1
+ {
2
+ "name": "standard",
3
+ "description": "Feature pipeline: intake → plan → design → build → test → review → PR",
4
+ "defaults": {
5
+ "test_cmd": "npm test",
6
+ "model": "opus",
7
+ "agents": 1
8
+ },
9
+ "stages": [
10
+ {
11
+ "id": "intake",
12
+ "enabled": true,
13
+ "gate": "auto",
14
+ "config": {}
15
+ },
16
+ {
17
+ "id": "plan",
18
+ "enabled": true,
19
+ "gate": "approve",
20
+ "config": { "model": "opus" }
21
+ },
22
+ {
23
+ "id": "design",
24
+ "enabled": true,
25
+ "gate": "approve",
26
+ "config": { "model": "opus" }
27
+ },
28
+ {
29
+ "id": "build",
30
+ "enabled": true,
31
+ "gate": "auto",
32
+ "config": {
33
+ "max_iterations": 20,
34
+ "audit": true,
35
+ "quality_gates": true
36
+ }
37
+ },
38
+ {
39
+ "id": "test",
40
+ "enabled": true,
41
+ "gate": "auto",
42
+ "config": { "coverage_min": 80 }
43
+ },
44
+ {
45
+ "id": "review",
46
+ "enabled": true,
47
+ "gate": "approve",
48
+ "config": {}
49
+ },
50
+ {
51
+ "id": "pr",
52
+ "enabled": true,
53
+ "gate": "approve",
54
+ "config": { "wait_ci": false }
55
+ },
56
+ {
57
+ "id": "deploy",
58
+ "enabled": false,
59
+ "gate": "approve",
60
+ "config": {
61
+ "staging_cmd": "",
62
+ "production_cmd": "",
63
+ "rollback_cmd": ""
64
+ }
65
+ },
66
+ {
67
+ "id": "validate",
68
+ "enabled": false,
69
+ "gate": "auto",
70
+ "config": {
71
+ "smoke_cmd": "",
72
+ "health_url": "",
73
+ "close_issue": true
74
+ }
75
+ },
76
+ {
77
+ "id": "monitor",
78
+ "enabled": false,
79
+ "gate": "auto",
80
+ "config": {
81
+ "duration_minutes": 5,
82
+ "health_url": "",
83
+ "error_threshold": 5,
84
+ "log_pattern": "ERROR|FATAL|PANIC",
85
+ "log_cmd": "",
86
+ "rollback_cmd": "",
87
+ "auto_rollback": false
88
+ }
89
+ }
90
+ ]
91
+ }
@@ -0,0 +1,109 @@
1
+ # ╔═══════════════════════════════════════════════════════════════════════════╗
2
+ # ║ CLAUDE CODE TEAMS - TMUX OVERLAY CONFIGURATION ║
3
+ # ║ ║
4
+ # ║ This overlay adds agent-aware pane styling and team keybindings to ║
5
+ # ║ your existing tmux config. It is sourced automatically by tmux.conf ║
6
+ # ║ but can also be used independently: ║
7
+ # ║ ║
8
+ # ║ tmux source-file ~/.tmux/claude-teams-overlay.conf ║
9
+ # ║ ║
10
+ # ║ What this overlay does: ║
11
+ # ║ - Shows agent names in pane borders (pane_title) ║
12
+ # ║ - Enables aggressive resize for better multi-agent layouts ║
13
+ # ║ - Adds safety bindings to prevent accidentally killing agent panes ║
14
+ # ║ - Provides team-specific keybindings for navigation and management ║
15
+ # ║ ║
16
+ # ║ Convention: Each Claude agent pane should set its title on startup via: ║
17
+ # ║ printf '\033]2;agent-name\033\\' ║
18
+ # ║ The shipwright CLI does this automatically when spawning agent panes. ║
19
+ # ╚═══════════════════════════════════════════════════════════════════════════╝
20
+
21
+ # ═══════════════════════════════════════════════════════════════════════════
22
+ # PANE TITLES - Show agent names in borders
23
+ # ═══════════════════════════════════════════════════════════════════════════
24
+
25
+ # Display pane titles at the top of each pane border
26
+ set -g pane-border-status top
27
+
28
+ # Format: pane index, agent name, running command, zoom indicator
29
+ # Active pane gets cyan accent; inactive stays muted
30
+ set -g pane-border-format "#{?pane_active,#[fg=#00d4ff]#[bold],#[fg=#71717a]} #P │ #{pane_title} #[fg=#333355]│#[default] #{?pane_active,#[fg=#e4e4e7],#[fg=#52525b]}#{pane_current_command} #{?window_zoomed_flag,#[fg=#facc15]#[bold]🔍 ZOOMED ,}"
31
+
32
+ # ═══════════════════════════════════════════════════════════════════════════
33
+ # LAYOUT - Optimize for multi-agent pane layouts
34
+ # ═══════════════════════════════════════════════════════════════════════════
35
+
36
+ # Aggressive resize: let panes resize independently per client
37
+ # This prevents smaller terminal clients from constraining team pane sizes
38
+ setw -g aggressive-resize on
39
+
40
+ # ═══════════════════════════════════════════════════════════════════════════
41
+ # DARK THEME DEFAULTS — Ensure all panes get the dark background
42
+ # ═══════════════════════════════════════════════════════════════════════════
43
+ # These session-level styles apply to ALL panes, even those created by
44
+ # external tools (Claude Code agent spawning, scripts, etc.)
45
+ set -g window-style 'bg=#1a1a2e,fg=#e4e4e7'
46
+ set -g window-active-style 'bg=#1a1a2e,fg=#e4e4e7'
47
+
48
+ # Hooks provide belt-and-suspenders coverage: explicitly set per-pane
49
+ # colors whenever a pane is created, preventing white flash on creation
50
+ set-hook -g after-split-window "select-pane -P 'bg=#1a1a2e,fg=#e4e4e7'"
51
+ set-hook -g after-new-window "select-pane -P 'bg=#1a1a2e,fg=#e4e4e7'"
52
+ set-hook -g after-new-session "select-pane -P 'bg=#1a1a2e,fg=#e4e4e7'"
53
+
54
+ # ═══════════════════════════════════════════════════════════════════════════
55
+ # SAFETY - Confirm before killing agent panes
56
+ # ═══════════════════════════════════════════════════════════════════════════
57
+
58
+ # Override default kill-pane to require confirmation in team windows
59
+ # This prevents accidentally terminating a running Claude agent
60
+ bind x confirm-before -p "Kill pane #{pane_title}? (y/n)" kill-pane
61
+ bind X confirm-before -p "Kill ALL panes in window #W? (y/n)" kill-window
62
+
63
+ # ═══════════════════════════════════════════════════════════════════════════
64
+ # TEAM NAVIGATION
65
+ # ═══════════════════════════════════════════════════════════════════════════
66
+
67
+ # prefix + g → select a pane by agent name (uses choose-tree for visual picking)
68
+ bind g display-panes -d 5000
69
+
70
+ # prefix + G → toggle zoom on current agent pane (focus on one agent's output)
71
+ bind G resize-pane -Z
72
+
73
+ # ═══════════════════════════════════════════════════════════════════════════
74
+ # TEAM MANAGEMENT
75
+ # ═══════════════════════════════════════════════════════════════════════════
76
+
77
+ # prefix + M-t → send the same command to all panes (synchronized input)
78
+ # Useful for stopping all agents at once, etc.
79
+ bind M-t setw synchronize-panes \; display-message "Team sync #{?synchronize-panes,ON,OFF}"
80
+
81
+ # prefix + M-l → rotate through even-horizontal, even-vertical, tiled layouts
82
+ # Useful for reorganizing agent panes
83
+ bind M-l next-layout
84
+
85
+ # prefix + M-s → capture current pane's full scrollback to file
86
+ bind M-s run-shell "tmux capture-pane -pS - > /tmp/claude-pane-#{pane_title}-$(date +%s).txt && tmux display-message 'Captured #{pane_title} to /tmp/'"
87
+
88
+ # prefix + M-a → capture ALL panes in current window (full scrollback each)
89
+ bind M-a run-shell "\
90
+ for pane_id in $(tmux list-panes -F '##{pane_id}'); do \
91
+ title=$(tmux display-message -t \$pane_id -p '##{pane_title}'); \
92
+ tmux capture-pane -t \$pane_id -pS - > /tmp/claude-pane-\${title:-\$pane_id}-$(date +%s).txt; \
93
+ done && tmux display-message 'Captured all panes to /tmp/'"
94
+
95
+ # ═══════════════════════════════════════════════════════════════════════════
96
+ # LAYOUT PRESETS — Quick-switch pane arrangements
97
+ # ═══════════════════════════════════════════════════════════════════════════
98
+ # prefix + M-1 → main-horizontal: leader (left 65%) | agents stacked (right 35%)
99
+ # prefix + M-2 → main-vertical: leader (top 60%) | agents tiled (bottom 40%)
100
+ # prefix + M-3 → tiled (equal sizes)
101
+ bind M-1 select-layout main-horizontal \; resize-pane -t 0 -x 65%
102
+ bind M-2 select-layout main-vertical \; resize-pane -t 0 -y 60%
103
+ bind M-3 select-layout tiled
104
+
105
+ # ═══════════════════════════════════════════════════════════════════════════
106
+ # PANE REAPER — Quick cleanup of dead agent panes
107
+ # ═══════════════════════════════════════════════════════════════════════════
108
+ # prefix + R — Run one-shot reaper (clean dead agent panes)
109
+ bind R run-shell "shipwright reaper 2>/dev/null; tmux display-message 'Reaper: cleaned dead agent panes'"
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "architecture",
3
+ "description": "Architecture planning with research and specification agents",
4
+ "agents": [
5
+ {
6
+ "name": "researcher",
7
+ "role": "Analyze existing code, trace dependencies, identify patterns, evaluate trade-offs",
8
+ "focus": "src/, apps/, lib/, package.json"
9
+ },
10
+ {
11
+ "name": "spec-writer",
12
+ "role": "Write ADRs, design docs, technical specs, diagrams, interface contracts",
13
+ "focus": "docs/, adr/, ARCHITECTURE.md, *.md"
14
+ }
15
+ ],
16
+ "layout": "even-horizontal",
17
+ "layout_style": "main-vertical",
18
+ "main_pane_percent": 60
19
+ }
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "bug-fix",
3
+ "description": "Bug fix with reproducer, fixer, and verifier agents",
4
+ "agents": [
5
+ {
6
+ "name": "reproducer",
7
+ "role": "Write a failing test that reproduces the bug, trace root cause",
8
+ "focus": "*.test.ts, __tests__/, *.spec.ts"
9
+ },
10
+ {
11
+ "name": "fixer",
12
+ "role": "Implement the fix in source code, handle edge cases",
13
+ "focus": "src/, apps/, lib/"
14
+ },
15
+ {
16
+ "name": "verifier",
17
+ "role": "Check for regressions, verify fix doesn't break other tests, review changes",
18
+ "focus": "*.test.*, src/, CHANGELOG.md"
19
+ }
20
+ ],
21
+ "layout": "tiled",
22
+ "layout_style": "main-horizontal",
23
+ "main_pane_percent": 65
24
+ }