shipwright-cli 1.7.1 → 1.10.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 (115) hide show
  1. package/.claude/agents/code-reviewer.md +90 -0
  2. package/.claude/agents/devops-engineer.md +142 -0
  3. package/.claude/agents/pipeline-agent.md +80 -0
  4. package/.claude/agents/shell-script-specialist.md +150 -0
  5. package/.claude/agents/test-specialist.md +196 -0
  6. package/.claude/hooks/post-tool-use.sh +45 -0
  7. package/.claude/hooks/pre-tool-use.sh +25 -0
  8. package/.claude/hooks/session-started.sh +37 -0
  9. package/README.md +212 -814
  10. package/claude-code/CLAUDE.md.shipwright +54 -0
  11. package/claude-code/hooks/notify-idle.sh +2 -2
  12. package/claude-code/hooks/session-start.sh +24 -0
  13. package/claude-code/hooks/task-completed.sh +6 -2
  14. package/claude-code/settings.json.template +12 -0
  15. package/dashboard/public/app.js +4422 -0
  16. package/dashboard/public/index.html +816 -0
  17. package/dashboard/public/styles.css +4755 -0
  18. package/dashboard/server.ts +4315 -0
  19. package/docs/KNOWN-ISSUES.md +18 -10
  20. package/docs/TIPS.md +38 -26
  21. package/docs/patterns/README.md +33 -23
  22. package/package.json +9 -5
  23. package/scripts/adapters/iterm2-adapter.sh +1 -1
  24. package/scripts/adapters/tmux-adapter.sh +52 -23
  25. package/scripts/adapters/wezterm-adapter.sh +26 -14
  26. package/scripts/lib/compat.sh +200 -0
  27. package/scripts/lib/helpers.sh +72 -0
  28. package/scripts/postinstall.mjs +72 -13
  29. package/scripts/{cct → sw} +118 -22
  30. package/scripts/sw-adversarial.sh +274 -0
  31. package/scripts/sw-architecture-enforcer.sh +330 -0
  32. package/scripts/sw-checkpoint.sh +468 -0
  33. package/scripts/sw-cleanup.sh +359 -0
  34. package/scripts/sw-connect.sh +619 -0
  35. package/scripts/{cct-cost.sh → sw-cost.sh} +368 -34
  36. package/scripts/sw-daemon.sh +5574 -0
  37. package/scripts/sw-dashboard.sh +477 -0
  38. package/scripts/sw-developer-simulation.sh +252 -0
  39. package/scripts/sw-docs.sh +635 -0
  40. package/scripts/sw-doctor.sh +907 -0
  41. package/scripts/{cct-fix.sh → sw-fix.sh} +10 -6
  42. package/scripts/{cct-fleet.sh → sw-fleet.sh} +498 -22
  43. package/scripts/sw-github-checks.sh +521 -0
  44. package/scripts/sw-github-deploy.sh +533 -0
  45. package/scripts/sw-github-graphql.sh +972 -0
  46. package/scripts/sw-heartbeat.sh +293 -0
  47. package/scripts/{cct-init.sh → sw-init.sh} +144 -11
  48. package/scripts/sw-intelligence.sh +1196 -0
  49. package/scripts/sw-jira.sh +643 -0
  50. package/scripts/sw-launchd.sh +364 -0
  51. package/scripts/sw-linear.sh +648 -0
  52. package/scripts/{cct-logs.sh → sw-logs.sh} +72 -2
  53. package/scripts/sw-loop.sh +2217 -0
  54. package/scripts/{cct-memory.sh → sw-memory.sh} +514 -36
  55. package/scripts/sw-patrol-meta.sh +417 -0
  56. package/scripts/sw-pipeline-composer.sh +455 -0
  57. package/scripts/sw-pipeline-vitals.sh +1096 -0
  58. package/scripts/sw-pipeline.sh +7593 -0
  59. package/scripts/sw-predictive.sh +820 -0
  60. package/scripts/{cct-prep.sh → sw-prep.sh} +339 -49
  61. package/scripts/{cct-ps.sh → sw-ps.sh} +9 -6
  62. package/scripts/{cct-reaper.sh → sw-reaper.sh} +10 -6
  63. package/scripts/sw-remote.sh +687 -0
  64. package/scripts/sw-self-optimize.sh +1048 -0
  65. package/scripts/sw-session.sh +541 -0
  66. package/scripts/sw-setup.sh +234 -0
  67. package/scripts/sw-status.sh +796 -0
  68. package/scripts/{cct-templates.sh → sw-templates.sh} +9 -4
  69. package/scripts/sw-tmux.sh +591 -0
  70. package/scripts/sw-tracker-jira.sh +277 -0
  71. package/scripts/sw-tracker-linear.sh +292 -0
  72. package/scripts/sw-tracker.sh +409 -0
  73. package/scripts/{cct-upgrade.sh → sw-upgrade.sh} +103 -46
  74. package/scripts/{cct-worktree.sh → sw-worktree.sh} +3 -0
  75. package/templates/pipelines/autonomous.json +35 -6
  76. package/templates/pipelines/cost-aware.json +21 -0
  77. package/templates/pipelines/deployed.json +40 -6
  78. package/templates/pipelines/enterprise.json +16 -2
  79. package/templates/pipelines/fast.json +19 -0
  80. package/templates/pipelines/full.json +28 -2
  81. package/templates/pipelines/hotfix.json +19 -0
  82. package/templates/pipelines/standard.json +31 -0
  83. package/tmux/{claude-teams-overlay.conf → shipwright-overlay.conf} +27 -9
  84. package/tmux/templates/accessibility.json +34 -0
  85. package/tmux/templates/api-design.json +35 -0
  86. package/tmux/templates/architecture.json +1 -0
  87. package/tmux/templates/bug-fix.json +9 -0
  88. package/tmux/templates/code-review.json +1 -0
  89. package/tmux/templates/compliance.json +36 -0
  90. package/tmux/templates/data-pipeline.json +36 -0
  91. package/tmux/templates/debt-paydown.json +34 -0
  92. package/tmux/templates/devops.json +1 -0
  93. package/tmux/templates/documentation.json +1 -0
  94. package/tmux/templates/exploration.json +1 -0
  95. package/tmux/templates/feature-dev.json +1 -0
  96. package/tmux/templates/full-stack.json +8 -0
  97. package/tmux/templates/i18n.json +34 -0
  98. package/tmux/templates/incident-response.json +36 -0
  99. package/tmux/templates/migration.json +1 -0
  100. package/tmux/templates/observability.json +35 -0
  101. package/tmux/templates/onboarding.json +33 -0
  102. package/tmux/templates/performance.json +35 -0
  103. package/tmux/templates/refactor.json +1 -0
  104. package/tmux/templates/release.json +35 -0
  105. package/tmux/templates/security-audit.json +8 -0
  106. package/tmux/templates/spike.json +34 -0
  107. package/tmux/templates/testing.json +1 -0
  108. package/tmux/tmux.conf +98 -9
  109. package/scripts/cct-cleanup.sh +0 -172
  110. package/scripts/cct-daemon.sh +0 -3189
  111. package/scripts/cct-doctor.sh +0 -414
  112. package/scripts/cct-loop.sh +0 -1332
  113. package/scripts/cct-pipeline.sh +0 -3844
  114. package/scripts/cct-session.sh +0 -284
  115. package/scripts/cct-status.sh +0 -169
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "data-pipeline",
3
+ "description": "Data engineering with extract, transform, and load agents",
4
+ "keywords": [
5
+ "data",
6
+ "pipeline",
7
+ "etl",
8
+ "elt",
9
+ "ingestion",
10
+ "warehouse",
11
+ "lake",
12
+ "batch",
13
+ "stream",
14
+ "sql"
15
+ ],
16
+ "agents": [
17
+ {
18
+ "name": "extractor",
19
+ "role": "Source connectors, ingestion logic, schema mapping, incremental extraction, change data capture",
20
+ "focus": "src/extract/, src/connectors/, src/sources/, config/"
21
+ },
22
+ {
23
+ "name": "transformer",
24
+ "role": "Business logic, data cleaning, aggregation, validation rules, data quality checks",
25
+ "focus": "src/transform/, src/models/, src/validators/, sql/, dbt/"
26
+ },
27
+ {
28
+ "name": "loader",
29
+ "role": "Sink connectors, idempotent writes, partitioning, monitoring, schema evolution handling",
30
+ "focus": "src/load/, src/sinks/, src/destinations/, *.test.*"
31
+ }
32
+ ],
33
+ "layout": "tiled",
34
+ "layout_style": "main-horizontal",
35
+ "main_pane_percent": 65
36
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "debt-paydown",
3
+ "description": "Technical debt reduction with analysis, refactoring, and verification agents",
4
+ "keywords": [
5
+ "debt",
6
+ "tech debt",
7
+ "technical debt",
8
+ "cleanup",
9
+ "legacy",
10
+ "modernize",
11
+ "deprecate",
12
+ "upgrade deps"
13
+ ],
14
+ "agents": [
15
+ {
16
+ "name": "analyzer",
17
+ "role": "Identify debt hotspots — cyclomatic complexity, code churn, tight coupling, outdated dependencies, dead code",
18
+ "focus": "src/, lib/, package.json, go.mod, *.lock"
19
+ },
20
+ {
21
+ "name": "refactorer",
22
+ "role": "Systematic cleanup while preserving test coverage. Upgrade dependencies, remove dead code, simplify abstractions.",
23
+ "focus": "src/, lib/, apps/"
24
+ },
25
+ {
26
+ "name": "reviewer",
27
+ "role": "Verify behavior preservation — no regressions, measurable complexity reduction, test coverage maintained or improved",
28
+ "focus": "*.test.*, __tests__/, *.spec.*"
29
+ }
30
+ ],
31
+ "layout": "tiled",
32
+ "layout_style": "main-horizontal",
33
+ "main_pane_percent": 65
34
+ }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "devops",
3
3
  "description": "DevOps with CI/CD pipeline and infrastructure agents",
4
+ "keywords": ["devops", "deploy", "ci", "cd", "infrastructure", "docker"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "pipeline",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "documentation",
3
3
  "description": "Documentation with API docs and user guide agents",
4
+ "keywords": ["doc", "readme", "guide", "tutorial", "api doc"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "api-docs",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "exploration",
3
3
  "description": "Codebase exploration with one agent researching and one synthesizing",
4
+ "keywords": ["explore", "research", "investigate", "understand", "analyze"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "explorer",
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "feature-dev",
3
3
  "description": "Feature development with backend, frontend, and tests agents",
4
+ "keywords": ["feature", "implement", "build", "create", "add", "new"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "backend",
@@ -1,6 +1,14 @@
1
1
  {
2
2
  "name": "full-stack",
3
3
  "description": "Full-stack development with API, database, and UI agents",
4
+ "keywords": [
5
+ "fullstack",
6
+ "full-stack",
7
+ "end-to-end",
8
+ "api",
9
+ "database",
10
+ "frontend"
11
+ ],
4
12
  "agents": [
5
13
  {
6
14
  "name": "api",
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "i18n",
3
+ "description": "Internationalization with extraction, translation setup, and verification agents",
4
+ "keywords": [
5
+ "i18n",
6
+ "internationalization",
7
+ "localization",
8
+ "l10n",
9
+ "translate",
10
+ "language",
11
+ "locale",
12
+ "rtl"
13
+ ],
14
+ "agents": [
15
+ {
16
+ "name": "extractor",
17
+ "role": "Find hardcoded strings, extract to resource bundles, set up i18n framework, create translation key conventions",
18
+ "focus": "src/components/, apps/, *.tsx, *.jsx, *.vue, *.html"
19
+ },
20
+ {
21
+ "name": "translator",
22
+ "role": "Generate translation keys, set up plural rules, handle date/number/currency formats, RTL layout considerations",
23
+ "focus": "src/locales/, src/i18n/, translations/, *.json, *.yaml"
24
+ },
25
+ {
26
+ "name": "verifier",
27
+ "role": "Check string truncation, layout breakage, format consistency, missing translations, pseudo-localization testing",
28
+ "focus": "*.test.*, __tests__/, src/components/, e2e/"
29
+ }
30
+ ],
31
+ "layout": "tiled",
32
+ "layout_style": "main-horizontal",
33
+ "main_pane_percent": 65
34
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "incident-response",
3
+ "description": "Production incident response with investigation, fix, and postmortem agents",
4
+ "keywords": [
5
+ "incident",
6
+ "outage",
7
+ "down",
8
+ "production",
9
+ "hotfix",
10
+ "urgent",
11
+ "pager",
12
+ "alert",
13
+ "sev1",
14
+ "sev2"
15
+ ],
16
+ "agents": [
17
+ {
18
+ "name": "investigator",
19
+ "role": "Trace logs, metrics, and error paths to identify root cause. Narrow the blast radius.",
20
+ "focus": "src/, logs/, config/, *.log"
21
+ },
22
+ {
23
+ "name": "fixer",
24
+ "role": "Implement minimal hotfix with smallest possible blast radius. Prioritize speed and safety.",
25
+ "focus": "src/, lib/, apps/"
26
+ },
27
+ {
28
+ "name": "postmortem",
29
+ "role": "Write incident report, create follow-up issues, add monitoring and alerting to prevent recurrence",
30
+ "focus": "docs/, *.md, src/monitoring/, src/alerts/"
31
+ }
32
+ ],
33
+ "layout": "tiled",
34
+ "layout_style": "main-horizontal",
35
+ "main_pane_percent": 65
36
+ }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "migration",
3
3
  "description": "Data/schema migration with schema, code adaptation, and rollback agents",
4
+ "keywords": ["migrate", "upgrade", "port", "convert", "move"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "schema",
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "observability",
3
+ "description": "Monitoring and observability setup with instrumentation, dashboards, and validation agents",
4
+ "keywords": [
5
+ "monitoring",
6
+ "observability",
7
+ "metrics",
8
+ "tracing",
9
+ "logging",
10
+ "alerting",
11
+ "grafana",
12
+ "datadog",
13
+ "slo"
14
+ ],
15
+ "agents": [
16
+ {
17
+ "name": "instrumenter",
18
+ "role": "Add metrics, distributed traces, structured logging, health checks, SLI definitions",
19
+ "focus": "src/, lib/, src/middleware/, src/instrumentation/"
20
+ },
21
+ {
22
+ "name": "dashboarder",
23
+ "role": "Dashboard definitions, alert rules, SLO configurations, runbook templates, on-call documentation",
24
+ "focus": "monitoring/, dashboards/, alerts/, docs/, config/"
25
+ },
26
+ {
27
+ "name": "validator",
28
+ "role": "Verify alerts fire correctly, test runbooks, validate metric cardinality, load test instrumentation",
29
+ "focus": "*.test.*, scripts/, monitoring/tests/"
30
+ }
31
+ ],
32
+ "layout": "tiled",
33
+ "layout_style": "main-horizontal",
34
+ "main_pane_percent": 65
35
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "onboarding",
3
+ "description": "Developer experience and onboarding improvement with audit, fix, and verification agents",
4
+ "keywords": [
5
+ "onboarding",
6
+ "developer experience",
7
+ "dx",
8
+ "setup",
9
+ "getting started",
10
+ "contribute",
11
+ "new developer"
12
+ ],
13
+ "agents": [
14
+ {
15
+ "name": "auditor",
16
+ "role": "Try setup from scratch — clone, install, run, test. Identify friction, missing docs, confusing errors, time each step.",
17
+ "focus": "README.md, CONTRIBUTING.md, Makefile, docker-compose.yml, scripts/"
18
+ },
19
+ {
20
+ "name": "improver",
21
+ "role": "Fix setup scripts, add missing documentation, improve error messages, create quick-start guide",
22
+ "focus": "scripts/, docs/, README.md, CONTRIBUTING.md, Makefile, *.md"
23
+ },
24
+ {
25
+ "name": "tester",
26
+ "role": "Verify the improved flow works from a fresh environment. Test on different OS assumptions, check idempotency.",
27
+ "focus": "scripts/, Makefile, docker-compose.yml, *.test.*"
28
+ }
29
+ ],
30
+ "layout": "tiled",
31
+ "layout_style": "main-horizontal",
32
+ "main_pane_percent": 65
33
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "performance",
3
+ "description": "Performance optimization with profiling, optimization, and validation agents",
4
+ "keywords": [
5
+ "performance",
6
+ "slow",
7
+ "optimize",
8
+ "benchmark",
9
+ "profile",
10
+ "latency",
11
+ "throughput",
12
+ "cache",
13
+ "speed"
14
+ ],
15
+ "agents": [
16
+ {
17
+ "name": "profiler",
18
+ "role": "Benchmark endpoints and functions, identify bottlenecks, generate flame graphs and timing data",
19
+ "focus": "*.bench.*, *.perf.*, scripts/"
20
+ },
21
+ {
22
+ "name": "optimizer",
23
+ "role": "Implement performance fixes — query optimization, caching, lazy loading, algorithm improvements",
24
+ "focus": "src/, lib/, apps/"
25
+ },
26
+ {
27
+ "name": "validator",
28
+ "role": "Before/after benchmarks, regression prevention tests, verify no behavior changes",
29
+ "focus": "*.test.*, *.bench.*, __tests__/"
30
+ }
31
+ ],
32
+ "layout": "tiled",
33
+ "layout_style": "main-horizontal",
34
+ "main_pane_percent": 65
35
+ }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "refactor",
3
3
  "description": "Refactoring with one agent for changes and one for consumers/tests",
4
+ "keywords": ["refactor", "cleanup", "simplify", "reorganize", "optimize"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "refactor",
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "release",
3
+ "description": "Release management with preparation, validation, and announcement agents",
4
+ "keywords": [
5
+ "release",
6
+ "version",
7
+ "publish",
8
+ "changelog",
9
+ "tag",
10
+ "package",
11
+ "ship",
12
+ "launch",
13
+ "npm publish"
14
+ ],
15
+ "agents": [
16
+ {
17
+ "name": "preparer",
18
+ "role": "Changelog generation, version bumps, dependency audit, license check, breaking change detection",
19
+ "focus": "package.json, CHANGELOG.md, Cargo.toml, go.mod, *.lock, version.*"
20
+ },
21
+ {
22
+ "name": "validator",
23
+ "role": "Full test suite, smoke tests, canary checks, rollback verification, binary/package size check",
24
+ "focus": "*.test.*, scripts/, e2e/, *.spec.*"
25
+ },
26
+ {
27
+ "name": "announcer",
28
+ "role": "Release notes, migration guide, deprecation notices, upgrade instructions, API diff summary",
29
+ "focus": "docs/, *.md, CHANGELOG.md, MIGRATION.md, UPGRADING.md"
30
+ }
31
+ ],
32
+ "layout": "tiled",
33
+ "layout_style": "main-horizontal",
34
+ "main_pane_percent": 65
35
+ }
@@ -1,6 +1,14 @@
1
1
  {
2
2
  "name": "security-audit",
3
3
  "description": "Security audit with code analysis, dependency scanning, and config review agents",
4
+ "keywords": [
5
+ "security",
6
+ "vulnerability",
7
+ "xss",
8
+ "injection",
9
+ "auth",
10
+ "patch"
11
+ ],
4
12
  "agents": [
5
13
  {
6
14
  "name": "code-analysis",
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "spike",
3
+ "description": "Proof of concept and technical spike with researcher, prototyper, and evaluator agents",
4
+ "keywords": [
5
+ "spike",
6
+ "poc",
7
+ "proof of concept",
8
+ "prototype",
9
+ "experiment",
10
+ "evaluate",
11
+ "feasibility",
12
+ "compare"
13
+ ],
14
+ "agents": [
15
+ {
16
+ "name": "researcher",
17
+ "role": "Evaluate libraries, APIs, and approaches. Compare trade-offs, licensing, maintenance status, community support.",
18
+ "focus": "docs/, package.json, go.mod, Cargo.toml, requirements.txt"
19
+ },
20
+ {
21
+ "name": "prototyper",
22
+ "role": "Build minimal working prototype. Throwaway code is fine — optimize for speed of learning, not production quality.",
23
+ "focus": "spike/, prototype/, src/"
24
+ },
25
+ {
26
+ "name": "evaluator",
27
+ "role": "Write decision document with recommendation, risks, migration path, and effort estimate. Zero attachment to the prototype.",
28
+ "focus": "docs/, *.md, spike/"
29
+ }
30
+ ],
31
+ "layout": "tiled",
32
+ "layout_style": "main-horizontal",
33
+ "main_pane_percent": 65
34
+ }
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "testing",
3
3
  "description": "Comprehensive testing with unit, integration, and e2e agents",
4
+ "keywords": ["test", "coverage", "unit", "integration", "e2e", "spec"],
4
5
  "agents": [
5
6
  {
6
7
  "name": "unit-tests",
package/tmux/tmux.conf CHANGED
@@ -1,6 +1,6 @@
1
1
  # ╔═══════════════════════════════════════════════════════════════════════════╗
2
2
  # ║ TMUX CONFIGURATION ║
3
- # ║ Premium Developer Theme
3
+ # ║ Shipwright Optimized for Claude Code
4
4
  # ╚═══════════════════════════════════════════════════════════════════════════╝
5
5
 
6
6
  # ═══════════════════════════════════════════════════════════════════════════
@@ -8,16 +8,63 @@
8
8
  # ═══════════════════════════════════════════════════════════════════════════
9
9
 
10
10
  set -g default-terminal "tmux-256color"
11
+
12
+ # ─── Terminal-specific overrides ────────────────────────────────────────
13
+ # True color + italics for modern terminals
11
14
  set -ag terminal-overrides ",xterm-256color:RGB"
15
+ set -ag terminal-overrides ",xterm-256color:Tc"
16
+ set -ag terminal-overrides ",iTerm2*:RGB:Tc"
17
+ # Ghostty, kitty, WezTerm, Alacritty true color
18
+ set -ag terminal-overrides ",xterm-ghostty:RGB:Tc"
19
+ set -ag terminal-overrides ",xterm-kitty:RGB:Tc"
20
+ set -ag terminal-overrides ",wezterm:RGB:Tc"
21
+ set -ag terminal-overrides ",alacritty:RGB:Tc"
22
+ # Styled underline (curly, dotted, dashed)
23
+ set -ag terminal-overrides ",*:Smulx=\\E[4::%p1%dm"
24
+ set -ag terminal-overrides ",*:Setulc=\\E[58::2::%p1%{65536}%/%d::%p1%{256}%/%{255}%&%d::%p1%{255}%&%d%;m"
25
+ # Terminal.app: 256 color only, basic mouse
26
+ set -ag terminal-overrides ",Apple_Terminal*:colors=256"
27
+
28
+ # ─── Claude Code TUI Compatibility ────────────────────────────────────
29
+ # Passthrough: enables DEC 2026 synchronized output (eliminates flicker),
30
+ # OSC 52 clipboard, OSC notifications, and image protocols.
31
+ # Critical for Claude Code's rapid TUI updates inside tmux.
32
+ set -g allow-passthrough on
33
+
34
+ # Extended keys: lets TUI apps (Claude Code, vim, etc.) receive modifier
35
+ # key combos that plain terminals would swallow (Ctrl+Shift+key, etc.)
36
+ set -g extended-keys on
37
+ set -as terminal-features 'xterm*:extkeys'
38
+
39
+ # ─── Mouse ──────────────────────────────────────────────────────────────
12
40
  set -g mouse on
41
+ # Fix: tmux 3.4+ defaults MouseDown1Status to switch-client (sessions),
42
+ # but we want select-window so clicking status bar windows actually works
43
+ bind -T root MouseDown1Status select-window -t =
44
+ # Double-click on status bar word to rename window
45
+ bind -T root DoubleClick1Status command-prompt -I "#W" "rename-window -- '%%'"
46
+
47
+ # ─── Core Behavior ─────────────────────────────────────────────────────
13
48
  set -g base-index 1
14
49
  setw -g pane-base-index 1
15
50
  set -g renumber-windows on
16
- set -g history-limit 50000
17
51
  set -sg escape-time 0
18
52
  set -g focus-events on
19
53
  setw -g monitor-activity on
20
54
  set -g visual-activity off
55
+ # Display messages for 3 seconds (default 750ms is too fast)
56
+ set -g display-time 3000
57
+ # Display pane indicators for 2 seconds
58
+ set -g display-panes-time 2000
59
+ # Smoother repeated key operations (600ms window)
60
+ set -g repeat-time 600
61
+ # Clipboard: native OSC 52 — copies work across SSH + tmux nesting
62
+ set -g set-clipboard on
63
+
64
+ # ─── History ───────────────────────────────────────────────────────────
65
+ # Claude Code generates 4,000-6,700 scroll events/sec during streaming.
66
+ # 250k lines prevents buffer exhaustion during long agent runs.
67
+ set -g history-limit 250000
21
68
 
22
69
  # ═══════════════════════════════════════════════════════════════════════════
23
70
  # STATUS BAR CONFIGURATION
@@ -35,14 +82,12 @@ set -g status-left "#[fg=#1e1e32,bg=#00d4ff,bold] #S #[fg=#00d4ff,bg=#0066ff]#[
35
82
 
36
83
  setw -g window-status-separator " "
37
84
  # Inactive windows; team windows (claude-*) get a λ icon
38
- # NOTE: use separate #[fg=]#[bg=] blocks — commas inside #{?} branches break parsing
39
85
  setw -g window-status-format "#{?#{m:claude-*,#W},#[fg=#7c3aed]#[bg=#252538] λ #I:#W ,#[fg=#71717a]#[bg=#252538] #I:#W }#[fg=#252538]#[bg=#1a1a2e]"
40
86
  # Active window; team windows get λ icon in cyan
41
87
  setw -g window-status-current-format "#{?#{m:claude-*,#W},#[fg=#1e1e32]#[bg=#00d4ff]#[bold] λ #I:#W ,#[fg=#1e1e32]#[bg=#00d4ff]#[bold] #I:#W }#[fg=#00d4ff]#[bg=#1a1a2e]"
42
88
 
43
- # Right side: normal info OR key hints when prefix is active
44
- # NOTE: use separate #[fg=]#[bg=] blocks commas inside #{?} branches break parsing
45
- set -g status-right "#{?client_prefix,#[fg=#1e1e32]#[bg=#0066ff]#[bold] T team | split - split hjkl nav G zoom S sync x kill #[fg=#1e1e32]#[bg=#00d4ff]#[bold] ^a ,#[fg=#71717a]#[bg=#252538] #(whoami)@#h #[fg=#1e1e32]#[bg=#7c3aed]#[bold] %H:%M #[fg=#e4e4e7]#[bg=#0066ff]#[bold] %b %d #[fg=#1e1e32]#[bg=#00d4ff]#[bold] %a }"
89
+ # Right side: key hints when prefix is active, otherwise clock + date
90
+ set -g status-right "#{?client_prefix,#[fg=#1e1e32]#[bg=#0066ff]#[bold] T team | split - split hjkl nav G zoom S sync x kill F fzf #[fg=#1e1e32]#[bg=#00d4ff]#[bold] ^a ,#[fg=#71717a]#[bg=#252538] #(whoami)@#h #[fg=#1e1e32]#[bg=#7c3aed]#[bold] %H:%M #[fg=#e4e4e7]#[bg=#0066ff]#[bold] %b %d #[fg=#1e1e32]#[bg=#00d4ff]#[bold] %a }"
46
91
 
47
92
  # ═══════════════════════════════════════════════════════════════════════════
48
93
  # PANE STYLING
@@ -52,9 +97,16 @@ set -g window-style 'bg=#1a1a2e,fg=#e4e4e7'
52
97
  set -g window-active-style 'bg=#1a1a2e,fg=#e4e4e7'
53
98
  set -g pane-border-style "fg=#333355,bg=#1a1a2e"
54
99
  set -g pane-active-border-style "fg=#00d4ff,bg=#1a1a2e"
100
+ # Heavy pane border lines for better visibility (tmux 3.2+)
101
+ set -g pane-border-lines heavy
55
102
  set -g display-panes-colour "#333355"
56
103
  set -g display-panes-active-colour "#00d4ff"
57
104
 
105
+ # ─── Popup Styling (tmux 3.3+) ─────────────────────────────────────────
106
+ set -gq popup-style 'bg=#252538'
107
+ set -gq popup-border-style 'fg=#00d4ff'
108
+ set -gq popup-border-lines rounded
109
+
58
110
  # ═══════════════════════════════════════════════════════════════════════════
59
111
  # MESSAGE STYLING
60
112
  # ═══════════════════════════════════════════════════════════════════════════
@@ -139,23 +191,54 @@ bind s choose-tree -sZ -O name
139
191
  bind N new-session
140
192
 
141
193
  # ═══════════════════════════════════════════════════════════════════════════
142
- # PLUGINS (via TPM - optional)
194
+ # FLOATING POPUP TERMINALS (tmux 3.2+)
195
+ # ═══════════════════════════════════════════════════════════════════════════
196
+
197
+ # prefix + F → floating popup terminal in current directory
198
+ bind F display-popup -E -w 80% -h 75% -d "#{pane_current_path}"
199
+
200
+ # prefix + C-f → FZF session/window switcher in a popup
201
+ bind C-f display-popup -E -w 60% -h 50% "\
202
+ tmux list-sessions -F '#{session_name}' | \
203
+ fzf --reverse --header='Switch session' | \
204
+ xargs -I{} tmux switch-client -t {}"
205
+
206
+ # ═══════════════════════════════════════════════════════════════════════════
207
+ # PLUGINS (via TPM)
143
208
  # ═══════════════════════════════════════════════════════════════════════════
144
209
 
145
210
  set -g @plugin 'tmux-plugins/tpm'
146
211
  set -g @plugin 'tmux-plugins/tmux-sensible'
147
212
  set -g @plugin 'tmux-plugins/tmux-resurrect'
148
213
  set -g @plugin 'tmux-plugins/tmux-continuum'
214
+ set -g @plugin 'tmux-plugins/tmux-yank'
215
+ set -g @plugin 'sainnhe/tmux-fzf'
216
+
217
+ # ─── Plugin Configuration ──────────────────────────────────────────────
149
218
 
219
+ # Resurrect: persist full pane content + programs
150
220
  set -g @resurrect-capture-pane-contents 'on'
221
+ set -g @resurrect-strategy-nvim 'session'
222
+
223
+ # Continuum: auto-save every 15 min, auto-restore on tmux start
151
224
  set -g @continuum-restore 'on'
225
+ set -g @continuum-save-interval '15'
226
+
227
+ # Yank: use system clipboard, stay in copy mode after yanking
228
+ set -g @yank_selection_mouse 'clipboard'
229
+ set -g @yank_action 'copy-pipe'
230
+
231
+ # FZF: use popup window (tmux 3.2+), Shipwright color scheme
232
+ set -g @tmux-fzf-launch-key 'C-f'
233
+ TMUX_FZF_OPTIONS="-p -w 60% -h 50%"
234
+ TMUX_FZF_PREVIEW=0
152
235
 
153
236
  # ═══════════════════════════════════════════════════════════════════════════
154
- # CLAUDE CODE TEAMS INTEGRATION
237
+ # SHIPWRIGHT INTEGRATION
155
238
  # ═══════════════════════════════════════════════════════════════════════════
156
239
 
157
240
  # Source teams overlay (agent pane styling, keybindings)
158
- source-file -q ~/.tmux/claude-teams-overlay.conf
241
+ source-file -q ~/.tmux/shipwright-overlay.conf
159
242
 
160
243
  # Quick launch: prefix + T → start a Claude team session
161
244
  bind T run-shell "shipwright session"
@@ -163,5 +246,11 @@ bind T run-shell "shipwright session"
163
246
  # Quick status: prefix + C-t → show team dashboard in floating popup
164
247
  bind C-t display-popup -w 80% -h 70% -E "shipwright status; echo ''; echo 'Press ENTER to close'; read"
165
248
 
249
+ # Quick logs: prefix + C-l → tail agent logs in popup
250
+ bind M-L display-popup -w 85% -h 80% -E "shipwright logs --follow 2>/dev/null || echo 'No active logs'; echo ''; echo 'Press ENTER to close'; read"
251
+
252
+ # Quick cost: prefix + C-c → cost dashboard in popup
253
+ bind M-C display-popup -w 70% -h 60% -E "shipwright cost show 2>/dev/null || echo 'Cost tracking not configured'; echo ''; echo 'Press ENTER to close'; read"
254
+
166
255
  # Initialize TPM (keep at very bottom)
167
256
  run-shell '~/.tmux/plugins/tpm/tpm'