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,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
|
+
}
|