@delorenj/claude-notifications 2.0.0 → 2.1.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 (206) hide show
  1. package/DO.md +5 -0
  2. package/FIXES-APPLIED.md +195 -0
  3. package/INTEGRATION.md +445 -0
  4. package/LAYOUT-INTEGRATION.md +191 -0
  5. package/QUICK-REFERENCE.md +195 -0
  6. package/README.md +145 -14
  7. package/TASK.md +15 -0
  8. package/ZELLIJ-NOTIFY.md +523 -0
  9. package/_bmad-output/implementation-artifacts/spec-install-multi-cli-hooks.md +241 -0
  10. package/bin/claude-notifications.js +417 -312
  11. package/bin/claude-notify.js +47 -1
  12. package/bin/zellij-notify.js +346 -0
  13. package/bun.lock +35 -0
  14. package/diagnose-zellij.sh +105 -0
  15. package/examples/settings-with-zellij.json +18 -0
  16. package/examples/settings-zellij-only.json +18 -0
  17. package/examples/zellij-notify-examples.sh +143 -0
  18. package/lib/adapters/_stub.js +35 -0
  19. package/lib/adapters/auggie.js +10 -0
  20. package/lib/adapters/claude-code.js +181 -0
  21. package/lib/adapters/codex.js +10 -0
  22. package/lib/adapters/copilot.js +10 -0
  23. package/lib/adapters/gemini.js +10 -0
  24. package/lib/adapters/index.js +240 -0
  25. package/lib/adapters/kimi.js +10 -0
  26. package/lib/adapters/opencode.js +14 -0
  27. package/lib/adapters/vibe.js +10 -0
  28. package/lib/config.js +44 -8
  29. package/lib/tui.js +115 -0
  30. package/lib/zellij.js +248 -0
  31. package/package.json +6 -4
  32. package/postinstall.js +28 -25
  33. package/preuninstall.js +18 -9
  34. package/test/adapters/claude-code.test.js +144 -0
  35. package/test/adapters/patches.test.js +81 -0
  36. package/test/adapters/registry.test.js +89 -0
  37. package/test/adapters/stubs.test.js +46 -0
  38. package/test/cli-json.test.js +79 -0
  39. package/test/helpers/fake-fs.js +59 -0
  40. package/test-integration.sh +113 -0
  41. package/test-notification-plugin.kdl +34 -0
  42. package/test-updated-layout.sh +75 -0
  43. package/test-zellij-cli.sh +72 -0
  44. package/zellij-plugin/.cargo/config.toml +5 -0
  45. package/zellij-plugin/.github/workflows/ci.yml +97 -0
  46. package/zellij-plugin/Cargo.lock +3558 -0
  47. package/zellij-plugin/Cargo.toml +40 -0
  48. package/zellij-plugin/README.md +290 -0
  49. package/zellij-plugin/build.sh +179 -0
  50. package/zellij-plugin/configs/examples/accessibility.kdl +31 -0
  51. package/zellij-plugin/configs/examples/catppuccin.kdl +32 -0
  52. package/zellij-plugin/configs/examples/default.kdl +34 -0
  53. package/zellij-plugin/configs/examples/minimal.kdl +22 -0
  54. package/zellij-plugin/docs/CONFIGURATION.md +191 -0
  55. package/zellij-plugin/docs/INTEGRATION.md +333 -0
  56. package/zellij-plugin/src/animation.rs +451 -0
  57. package/zellij-plugin/src/colors.rs +407 -0
  58. package/zellij-plugin/src/config.rs +664 -0
  59. package/zellij-plugin/src/event_bridge.rs +339 -0
  60. package/zellij-plugin/src/main.rs +420 -0
  61. package/zellij-plugin/src/notification.rs +466 -0
  62. package/zellij-plugin/src/queue.rs +399 -0
  63. package/zellij-plugin/src/renderer.rs +477 -0
  64. package/zellij-plugin/src/state.rs +338 -0
  65. package/zellij-plugin/src/tests.rs +413 -0
  66. package/.claude/checkpoints/1756392335.json +0 -1
  67. package/.claude/checkpoints/1756392341.json +0 -1
  68. package/.claude/checkpoints/1756392347.json +0 -1
  69. package/.claude/checkpoints/1756392376.json +0 -1
  70. package/.claude/checkpoints/1756392377.json +0 -1
  71. package/.claude/checkpoints/1756392386.json +0 -1
  72. package/.claude/checkpoints/1756392387.json +0 -1
  73. package/.claude/checkpoints/1756392398.json +0 -1
  74. package/.claude/checkpoints/1756392400.json +0 -1
  75. package/.claude/checkpoints/1756392427.json +0 -1
  76. package/.claude/checkpoints/1756392428.json +0 -1
  77. package/.claude/checkpoints/1756392486.json +0 -1
  78. package/.claude/checkpoints/1756392488.json +0 -1
  79. package/.claude/checkpoints/1756392558.json +0 -1
  80. package/.claude/checkpoints/1756392559.json +0 -1
  81. package/.claude/checkpoints/summary-session-20250828-105040.md +0 -57
  82. package/.claude/checkpoints/task-1756392207.json +0 -1
  83. package/.claude/checkpoints/task-1756392742.json +0 -1
  84. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +0 -54
  85. package/.claude/commands/analysis/README.md +0 -9
  86. package/.claude/commands/analysis/bottleneck-detect.md +0 -162
  87. package/.claude/commands/analysis/performance-bottlenecks.md +0 -59
  88. package/.claude/commands/analysis/performance-report.md +0 -25
  89. package/.claude/commands/analysis/token-efficiency.md +0 -45
  90. package/.claude/commands/analysis/token-usage.md +0 -25
  91. package/.claude/commands/automation/README.md +0 -9
  92. package/.claude/commands/automation/auto-agent.md +0 -122
  93. package/.claude/commands/automation/self-healing.md +0 -106
  94. package/.claude/commands/automation/session-memory.md +0 -90
  95. package/.claude/commands/automation/smart-agents.md +0 -73
  96. package/.claude/commands/automation/smart-spawn.md +0 -25
  97. package/.claude/commands/automation/workflow-select.md +0 -25
  98. package/.claude/commands/coordination/README.md +0 -9
  99. package/.claude/commands/coordination/agent-spawn.md +0 -25
  100. package/.claude/commands/coordination/init.md +0 -44
  101. package/.claude/commands/coordination/orchestrate.md +0 -43
  102. package/.claude/commands/coordination/spawn.md +0 -45
  103. package/.claude/commands/coordination/swarm-init.md +0 -85
  104. package/.claude/commands/coordination/task-orchestrate.md +0 -25
  105. package/.claude/commands/github/README.md +0 -11
  106. package/.claude/commands/github/code-review-swarm.md +0 -514
  107. package/.claude/commands/github/code-review.md +0 -25
  108. package/.claude/commands/github/github-modes.md +0 -147
  109. package/.claude/commands/github/github-swarm.md +0 -121
  110. package/.claude/commands/github/issue-tracker.md +0 -292
  111. package/.claude/commands/github/issue-triage.md +0 -25
  112. package/.claude/commands/github/multi-repo-swarm.md +0 -519
  113. package/.claude/commands/github/pr-enhance.md +0 -26
  114. package/.claude/commands/github/pr-manager.md +0 -170
  115. package/.claude/commands/github/project-board-sync.md +0 -471
  116. package/.claude/commands/github/release-manager.md +0 -338
  117. package/.claude/commands/github/release-swarm.md +0 -544
  118. package/.claude/commands/github/repo-analyze.md +0 -25
  119. package/.claude/commands/github/repo-architect.md +0 -367
  120. package/.claude/commands/github/swarm-issue.md +0 -482
  121. package/.claude/commands/github/swarm-pr.md +0 -285
  122. package/.claude/commands/github/sync-coordinator.md +0 -301
  123. package/.claude/commands/github/workflow-automation.md +0 -442
  124. package/.claude/commands/hooks/README.md +0 -11
  125. package/.claude/commands/hooks/overview.md +0 -58
  126. package/.claude/commands/hooks/post-edit.md +0 -117
  127. package/.claude/commands/hooks/post-task.md +0 -112
  128. package/.claude/commands/hooks/pre-edit.md +0 -113
  129. package/.claude/commands/hooks/pre-task.md +0 -111
  130. package/.claude/commands/hooks/session-end.md +0 -118
  131. package/.claude/commands/hooks/setup.md +0 -103
  132. package/.claude/commands/memory/README.md +0 -9
  133. package/.claude/commands/memory/memory-persist.md +0 -25
  134. package/.claude/commands/memory/memory-search.md +0 -25
  135. package/.claude/commands/memory/memory-usage.md +0 -25
  136. package/.claude/commands/memory/neural.md +0 -47
  137. package/.claude/commands/memory/usage.md +0 -46
  138. package/.claude/commands/monitoring/README.md +0 -9
  139. package/.claude/commands/monitoring/agent-metrics.md +0 -25
  140. package/.claude/commands/monitoring/agents.md +0 -44
  141. package/.claude/commands/monitoring/real-time-view.md +0 -25
  142. package/.claude/commands/monitoring/status.md +0 -46
  143. package/.claude/commands/monitoring/swarm-monitor.md +0 -25
  144. package/.claude/commands/optimization/README.md +0 -9
  145. package/.claude/commands/optimization/auto-topology.md +0 -62
  146. package/.claude/commands/optimization/cache-manage.md +0 -25
  147. package/.claude/commands/optimization/parallel-execute.md +0 -25
  148. package/.claude/commands/optimization/parallel-execution.md +0 -50
  149. package/.claude/commands/optimization/topology-optimize.md +0 -25
  150. package/.claude/commands/pair/README.md +0 -261
  151. package/.claude/commands/pair/commands.md +0 -546
  152. package/.claude/commands/pair/config.md +0 -510
  153. package/.claude/commands/pair/examples.md +0 -512
  154. package/.claude/commands/pair/modes.md +0 -348
  155. package/.claude/commands/pair/session.md +0 -407
  156. package/.claude/commands/pair/start.md +0 -209
  157. package/.claude/commands/sparc/analyzer.md +0 -52
  158. package/.claude/commands/sparc/architect.md +0 -53
  159. package/.claude/commands/sparc/batch-executor.md +0 -54
  160. package/.claude/commands/sparc/coder.md +0 -54
  161. package/.claude/commands/sparc/debugger.md +0 -54
  162. package/.claude/commands/sparc/designer.md +0 -53
  163. package/.claude/commands/sparc/documenter.md +0 -54
  164. package/.claude/commands/sparc/innovator.md +0 -54
  165. package/.claude/commands/sparc/memory-manager.md +0 -54
  166. package/.claude/commands/sparc/optimizer.md +0 -54
  167. package/.claude/commands/sparc/orchestrator.md +0 -132
  168. package/.claude/commands/sparc/researcher.md +0 -54
  169. package/.claude/commands/sparc/reviewer.md +0 -54
  170. package/.claude/commands/sparc/sparc-modes.md +0 -174
  171. package/.claude/commands/sparc/swarm-coordinator.md +0 -54
  172. package/.claude/commands/sparc/tdd.md +0 -54
  173. package/.claude/commands/sparc/tester.md +0 -54
  174. package/.claude/commands/sparc/workflow-manager.md +0 -54
  175. package/.claude/commands/stream-chain/pipeline.md +0 -121
  176. package/.claude/commands/stream-chain/run.md +0 -70
  177. package/.claude/commands/swarm/analysis.md +0 -95
  178. package/.claude/commands/swarm/development.md +0 -96
  179. package/.claude/commands/swarm/examples.md +0 -168
  180. package/.claude/commands/swarm/maintenance.md +0 -102
  181. package/.claude/commands/swarm/optimization.md +0 -117
  182. package/.claude/commands/swarm/research.md +0 -136
  183. package/.claude/commands/swarm/testing.md +0 -131
  184. package/.claude/commands/training/README.md +0 -9
  185. package/.claude/commands/training/model-update.md +0 -25
  186. package/.claude/commands/training/neural-patterns.md +0 -74
  187. package/.claude/commands/training/neural-train.md +0 -25
  188. package/.claude/commands/training/pattern-learn.md +0 -25
  189. package/.claude/commands/training/specialization.md +0 -63
  190. package/.claude/commands/truth/start.md +0 -143
  191. package/.claude/commands/verify/check.md +0 -50
  192. package/.claude/commands/verify/start.md +0 -128
  193. package/.claude/commands/workflows/README.md +0 -9
  194. package/.claude/commands/workflows/development.md +0 -78
  195. package/.claude/commands/workflows/research.md +0 -63
  196. package/.claude/commands/workflows/workflow-create.md +0 -25
  197. package/.claude/commands/workflows/workflow-execute.md +0 -25
  198. package/.claude/commands/workflows/workflow-export.md +0 -25
  199. package/.claude/config.json +0 -36
  200. package/.claude/settings.json +0 -162
  201. package/.claude-flow/metrics/agent-metrics.json +0 -1
  202. package/.claude-flow/metrics/performance.json +0 -9
  203. package/.claude-flow/metrics/system-metrics.json +0 -230
  204. package/.claude-flow/metrics/task-metrics.json +0 -10
  205. package/FIXES.md +0 -75
  206. package/test-results.md +0 -163
@@ -0,0 +1,191 @@
1
+ # Layout Integration Fix
2
+
3
+ ## Issues Addressed
4
+
5
+ ### 1. Plugin Not Integrated Into Custom Layout
6
+ **Problem**: The visual notifications plugin was only available in the test layout (`test-notification-plugin.kdl`), not in your actual agent-orchestrator layout.
7
+
8
+ **Solution**: Integrated the plugin into `~/.config/zellij/layouts/agent-orchestrator.kdl` by adding it as a 1-line borderless pane in the `default_tab_template`. This means the plugin will be available on all tabs.
9
+
10
+ ### 2. All Notifications Showing Green
11
+ **Problem**: All notification types (success, error, warning, info) were appearing in the same green color.
12
+
13
+ **Root Cause**: The test layout was using the "catppuccin" theme for the plugin, but your Zellij config uses "gruvbox material dark". The theme mismatch was causing the plugin to fall back to default foreground colors.
14
+
15
+ **Solution**: Updated the plugin configuration to use `theme "gruvbox-dark"` which provides proper color mappings:
16
+ - Success: Bright green (#b8bb26)
17
+ - Error: Bright red (#fb4934)
18
+ - Warning: Bright yellow (#fabd2f)
19
+ - Info: Blue (#83a598)
20
+ - Progress: Pink/magenta (#d3869b)
21
+ - Attention: Yellow (#fabd2f)
22
+
23
+ ## How to Use
24
+
25
+ ### Step 1: Restart Zellij with Updated Layout
26
+
27
+ If you're currently in a Zellij session, you need to restart it to load the updated layout:
28
+
29
+ ```bash
30
+ # Exit current Zellij session
31
+ # Press Ctrl+Q or type 'exit' in all panes
32
+
33
+ # Start Zellij with your updated layout
34
+ zellij --layout ~/.config/zellij/layouts/agent-orchestrator.kdl
35
+
36
+ # Or if agent-orchestrator is your default layout in config:
37
+ zellij
38
+ ```
39
+
40
+ ### Step 2: Test Color Differentiation
41
+
42
+ Run the test script to verify colors are working:
43
+
44
+ ```bash
45
+ cd ~/code/utils/claude-notifications
46
+ ./test-updated-layout.sh
47
+ ```
48
+
49
+ This will send one notification of each type, clearly labeled with the expected color. You should see:
50
+ - Green notification
51
+ - Red notification
52
+ - Yellow notification
53
+ - Blue notification
54
+ - Pink/magenta notification
55
+
56
+ ### Step 3: Use Normally
57
+
58
+ Once verified, use `zellij-notify` as normal:
59
+
60
+ ```bash
61
+ # Success notification (green)
62
+ zellij-notify -t success "Tests passed!"
63
+
64
+ # Error notification (red)
65
+ zellij-notify -t error "Build failed!"
66
+
67
+ # Warning notification (yellow)
68
+ zellij-notify -t warning "Deprecated API in use"
69
+
70
+ # Info notification (blue)
71
+ zellij-notify -t info "Deployment started"
72
+ ```
73
+
74
+ ## Layout Structure
75
+
76
+ The updated layout now has this structure for each tab:
77
+
78
+ ```
79
+ ┌─────────────────────────────────┐
80
+ │ Tab Bar (zellij) │ ← Line 1
81
+ ├─────────────────────────────────┤
82
+ │ Visual Notifications Plugin │ ← Line 2 (NEW!)
83
+ ├─────────────────────────────────┤
84
+ │ │
85
+ │ Your Tab Content │
86
+ │ (terminals, etc.) │
87
+ │ │
88
+ ├─────────────────────────────────┤
89
+ │ Status Bar (zellij) │ ← Bottom 2 lines
90
+ └─────────────────────────────────┘
91
+ ```
92
+
93
+ The visual notifications plugin takes up 1 line at the top (below the tab bar), displaying active notifications with proper colors and animations.
94
+
95
+ ## Troubleshooting
96
+
97
+ ### Still Seeing All Green?
98
+
99
+ 1. **Make sure you restarted Zellij** - The layout needs to be reloaded
100
+ 2. **Check the plugin is loaded**:
101
+ ```bash
102
+ zellij pipe -p zellij_visual_notifications -- '{"type":"info","message":"test"}'
103
+ ```
104
+ If you get "no pipe found", the plugin isn't loaded
105
+
106
+ 3. **Verify the plugin file exists**:
107
+ ```bash
108
+ ls -lh ~/.config/zellij/plugins/zellij_visual_notifications.wasm
109
+ ```
110
+
111
+ 4. **Check Zellij logs**:
112
+ ```bash
113
+ tail -f /tmp/zellij-$(id -u)/zellij-log/zellij.log
114
+ ```
115
+
116
+ ### Timeout Errors
117
+
118
+ If you're still seeing timeout errors on some notifications:
119
+
120
+ 1. **Check if it's tab-switching related**: Timeout errors often occur when trying to send to a tab that doesn't exist or when switching tabs rapidly
121
+ 2. **Try increasing timeout** in `lib/zellij.js` (currently 5 seconds)
122
+ 3. **Send to current tab only**: Omit `-i` and `-n` flags to avoid tab switching
123
+
124
+ ### Plugin Not Loading
125
+
126
+ If the plugin doesn't load at all:
127
+
128
+ 1. **Rebuild the plugin**:
129
+ ```bash
130
+ cd ~/code/utils/claude-notifications/zellij-plugin
131
+ ./build.sh
132
+ ```
133
+
134
+ 2. **Verify plugin permissions**:
135
+ ```bash
136
+ chmod 644 ~/.config/zellij/plugins/zellij_visual_notifications.wasm
137
+ ```
138
+
139
+ ## Theme Customization
140
+
141
+ If you want to use a different theme or customize colors, you can edit the plugin configuration in your layout file (`~/.config/zellij/layouts/agent-orchestrator.kdl`):
142
+
143
+ ### Available Themes:
144
+ - `gruvbox-dark` (your current theme)
145
+ - `gruvbox-light`
146
+ - `catppuccin` / `catppuccin-mocha`
147
+ - `catppuccin-latte`
148
+ - `dracula`
149
+ - `nord`
150
+ - `solarized-dark`
151
+ - `solarized-light`
152
+ - `tokyo-night`
153
+ - `one-dark`
154
+
155
+ ### Custom Colors:
156
+
157
+ You can also override individual colors:
158
+
159
+ ```kdl
160
+ plugin location="file:/home/delorenj/.config/zellij/plugins/zellij_visual_notifications.wasm" {
161
+ enabled "true"
162
+ theme "gruvbox-dark"
163
+ // Override individual colors:
164
+ success_color "#00ff00"
165
+ error_color "#ff0000"
166
+ warning_color "#ffaa00"
167
+ info_color "#0099ff"
168
+ }
169
+ ```
170
+
171
+ ## Integration with Claude Notifications
172
+
173
+ The `claude-notifications` system will automatically use visual notifications when:
174
+ 1. You're in a Zellij session
175
+ 2. The plugin is loaded
176
+ 3. `zellijVisualization.enabled` is `true` in your config
177
+
178
+ Both audio and visual notifications will fire by default. To disable audio and only use visual:
179
+
180
+ ```json
181
+ {
182
+ "sound": {
183
+ "enabled": false
184
+ },
185
+ "zellijVisualization": {
186
+ "enabled": true
187
+ }
188
+ }
189
+ ```
190
+
191
+ Save this to `~/.config/claude-code/settings.json`.
@@ -0,0 +1,195 @@
1
+ # zellij-notify Quick Reference Card
2
+
3
+ ## Common Commands
4
+
5
+ ```bash
6
+ # Basic notification
7
+ zellij-notify "Message"
8
+
9
+ # With type and priority
10
+ zellij-notify -t TYPE -p PRIORITY "Message"
11
+
12
+ # Quick 5-second notification
13
+ zellij-notify -q "Message"
14
+
15
+ # Dismissable (stays until Ctrl+N)
16
+ zellij-notify -d "Message"
17
+
18
+ # Custom TTL (seconds)
19
+ zellij-notify --ttl 30 "Message"
20
+
21
+ # To specific tab
22
+ zellij-notify -i 2 "Message" # By index (1-based)
23
+ zellij-notify -n "Backend" "Message" # By name
24
+
25
+ # To all tabs
26
+ zellij-notify -a "Message"
27
+
28
+ # List tabs
29
+ zellij-notify --list-tabs
30
+ ```
31
+
32
+ ## Notification Types
33
+
34
+ | Flag | Type | Color | Use For |
35
+ |------|------|-------|---------|
36
+ | `-t success` | Success | đŸŸĸ Green | Completed tasks, tests passed |
37
+ | `-t error` | Error | 🔴 Red | Failures, errors |
38
+ | `-t warning` | Warning | 🟡 Yellow | Warnings, deprecations |
39
+ | `-t info` | Info | đŸ”ĩ Blue | General updates (default) |
40
+ | `-t attention` | Attention | đŸŸŖ Purple | Needs your attention |
41
+ | `-t progress` | Progress | 🔷 Cyan | Long-running tasks |
42
+
43
+ ## Priority Levels
44
+
45
+ | Flag | Priority | Effect |
46
+ |------|----------|--------|
47
+ | `-p low` | Low | Subtle, background |
48
+ | `-p normal` | Normal | Standard (default) |
49
+ | `-p high` | High | Prominent, demands attention |
50
+ | `-p critical` | Critical | Urgent, highest priority |
51
+
52
+ ## Duration Options
53
+
54
+ | Flag | Duration | Use Case |
55
+ |------|----------|----------|
56
+ | `--ttl 5` | 5 seconds | Quick updates |
57
+ | `--ttl 30` | 30 seconds | Progress updates |
58
+ | `-q` | 5 seconds | Shorthand for quick |
59
+ | (default) | 300 seconds | Standard notifications |
60
+ | `-d` | Until Ctrl+N | Requires acknowledgment |
61
+
62
+ ## Common Patterns
63
+
64
+ ### Build Notifications
65
+ ```bash
66
+ # Start
67
+ zellij-notify -t progress -q "Building..."
68
+
69
+ # Success
70
+ zellij-notify -t success "Build complete"
71
+
72
+ # Failure
73
+ zellij-notify -d -t error "Build failed"
74
+ ```
75
+
76
+ ### Test Results
77
+ ```bash
78
+ # Running
79
+ zellij-notify -t progress "Running tests..."
80
+
81
+ # Passed
82
+ zellij-notify -t success "Tests passed ✅"
83
+
84
+ # Failed
85
+ zellij-notify -d -t error "Tests failed ❌"
86
+ ```
87
+
88
+ ### Deployment
89
+ ```bash
90
+ # Starting
91
+ zellij-notify -a -t info "Deployment started"
92
+
93
+ # Complete
94
+ zellij-notify -a -t success -p high "Deployed! 🚀"
95
+
96
+ # Failure
97
+ zellij-notify -a -d -t error -p critical "Deployment failed!"
98
+ ```
99
+
100
+ ### Long Tasks
101
+ ```bash
102
+ # Start
103
+ zellij-notify -t progress "Processing..."
104
+
105
+ # Complete (requires review)
106
+ zellij-notify -d -t attention "Review required"
107
+ ```
108
+
109
+ ## Script Integration
110
+
111
+ ```bash
112
+ #!/bin/bash
113
+ # build.sh
114
+
115
+ zellij-notify -t info "Building..."
116
+
117
+ if make build; then
118
+ zellij-notify -t success "Build complete"
119
+ else
120
+ zellij-notify -d -t error "Build failed"
121
+ exit 1
122
+ fi
123
+ ```
124
+
125
+ ## Chaining
126
+
127
+ ```bash
128
+ # Success chain
129
+ zellij-notify -q "Starting..." && \
130
+ long_task && \
131
+ zellij-notify -t success "Done!"
132
+
133
+ # With failure handling
134
+ zellij-notify -q "Starting..." && \
135
+ risky_task && \
136
+ zellij-notify -t success "Success" || \
137
+ zellij-notify -t error "Failed"
138
+ ```
139
+
140
+ ## Tab Management
141
+
142
+ ```bash
143
+ # List tabs first
144
+ zellij-notify --list-tabs
145
+
146
+ # Target specific tabs
147
+ zellij-notify -i 1 "For tab 1"
148
+ zellij-notify -i 2 "For tab 2"
149
+ zellij-notify -n "Backend" "For backend tab"
150
+
151
+ # Broadcast
152
+ zellij-notify -a "For everyone"
153
+ ```
154
+
155
+ ## Keyboard Shortcuts
156
+
157
+ | Key | Action |
158
+ |-----|--------|
159
+ | `Ctrl+N` | Clear all notifications in current tab |
160
+
161
+ ## Full Help
162
+
163
+ ```bash
164
+ zellij-notify --help
165
+ ```
166
+
167
+ ## Documentation
168
+
169
+ - [Full CLI Documentation](./ZELLIJ-NOTIFY.md)
170
+ - [Integration Guide](./INTEGRATION.md)
171
+ - [Examples](./examples/zellij-notify-examples.sh)
172
+
173
+ ---
174
+
175
+ **Quick Copy-Paste Templates:**
176
+
177
+ ```bash
178
+ # Success
179
+ zellij-notify -t success "Task complete"
180
+
181
+ # Error (dismissable)
182
+ zellij-notify -d -t error "Critical error"
183
+
184
+ # Warning with 30s TTL
185
+ zellij-notify -t warning --ttl 30 "Warning message"
186
+
187
+ # Info to all tabs
188
+ zellij-notify -a -t info "System update"
189
+
190
+ # Attention to specific tab
191
+ zellij-notify -i 2 -t attention "Review needed"
192
+
193
+ # Quick progress update
194
+ zellij-notify -q -t progress "Processing..."
195
+ ```
package/README.md CHANGED
@@ -8,14 +8,17 @@ Delightful audible notifications for Claude Code. Never alt+tab back to disappoi
8
8
 
9
9
  ```bash
10
10
  npm install -g @delorenj/claude-notifications
11
+ claude-notifications install
11
12
  ```
12
13
 
13
- That's it! 🎉 The package will automatically:
14
+ Step 1 installs the CLI and generates sound assets. Step 2 opens an interactive selector that:
15
+
16
+ - 🔎 Detects every supported agent CLI on your `$PATH` (Claude Code, Opencode, Gemini, Auggie, Copilot, Kimi, Vibe, Codex)
17
+ - â˜‘ī¸ Lets you toggle which ones should receive notification hooks
18
+ - đŸĒ Writes a marker-tagged hook block into each selected CLI's config (idempotent — re-running is safe)
19
+ - đŸšĢ Shows unsupported CLIs disabled with a reason rather than silently skipping them
14
20
 
15
- - ✅ Install the notification system
16
- - đŸŽŧ Generate a delightful notification scale
17
- - đŸĒ Configure Claude Code stop hooks
18
- - đŸ§Ē Test the installation
21
+ Hook installation no longer runs automatically on `npm install` — it's an explicit, opt-in step so you stay in control of what gets written to your agent configs.
19
22
 
20
23
  ## Features
21
24
 
@@ -23,9 +26,10 @@ That's it! 🎉 The package will automatically:
23
26
  - 🔔 **Service Desk Bell** - Optional short, crisp bell sound for a quick "done!" signal
24
27
  - 🔊 **Cross-Platform Audio** - Works on Linux and macOS
25
28
  - đŸ–Ĩī¸ **Desktop Notifications** - Visual notifications with Claude Code branding (optional)
29
+ - 🎨 **Zellij Visual Notifications** - Beautiful animated pane borders and status bar notifications
26
30
  - đŸĒ **Auto-Integration** - Automatically configures Claude Code hooks
27
31
  - ⚡ **Zero Configuration** - Works out of the box
28
- - webhook **Webhook Support** - Trigger a webhook in addition to or instead of the sound
32
+ - 🌐 **Webhook Support** - Trigger a webhook in addition to or instead of the sound
29
33
  - 🎨 **Customizable** - Easy to modify sounds and settings
30
34
 
31
35
  ## Usage
@@ -35,25 +39,89 @@ After installation, Claude Code will begin notifying you when it finishes or is
35
39
  ### Manual Commands
36
40
 
37
41
  ```bash
42
+ # Interactive hook installer (TUI)
43
+ claude-notifications install
44
+
45
+ # Scripted install for specific CLIs (skips the TUI)
46
+ claude-notifications install --non-interactive --cli=claude-code
47
+
48
+ # Preview changes without writing
49
+ claude-notifications install --dry-run --cli=claude-code
50
+
51
+ # Show which CLIs are detected and whether hooks are installed
52
+ claude-notifications status
53
+ claude-notifications status --json
54
+
55
+ # Cleanly remove everything this package installed
56
+ claude-notifications uninstall
57
+
58
+ # Regenerate sound assets only
59
+ claude-notifications sounds
60
+
38
61
  # Trigger notification manually
39
62
  claude-notify
40
-
41
- # Trigger bell notification manually
42
63
  claude-notify --bell
43
64
 
44
65
  # Test the system
45
66
  claude-notifications test
46
-
47
- # Test the bell sound
48
67
  claude-notifications test-bell
49
68
 
50
- # Reinstall/repair
51
- claude-notifications install
52
-
53
- # Get help
69
+ # Full flag reference
54
70
  claude-notifications help
55
71
  ```
56
72
 
73
+ ### Adding support for another agent CLI
74
+
75
+ Each supported CLI is a module under `lib/adapters/<id>.js` exporting this shape:
76
+
77
+ ```js
78
+ {
79
+ id, label, binary, supportsHooks,
80
+ detect(deps), configPath(), install(ctx), uninstall(ctx), status(ctx)
81
+ }
82
+ ```
83
+
84
+ To add a new adapter:
85
+
86
+ 1. Copy `lib/adapters/claude-code.js` as a starting point (for hook-capable CLIs)
87
+ or `lib/adapters/_stub.js::createStubAdapter({...})` (for CLIs whose hook API
88
+ you haven't verified yet).
89
+ 2. Implement `install` / `uninstall` using the `upsertByMarker` / `removeByMarker`
90
+ helpers from `lib/adapters/index.js` so the entry is idempotent and cleanly
91
+ removable.
92
+ 3. Register the module by appending a `require()` line to the `adapterFactories`
93
+ array in `lib/adapters/index.js`.
94
+ 4. Add a test under `test/adapters/<id>.test.js` following the pattern in
95
+ `test/adapters/claude-code.test.js`.
96
+
97
+ The TUI and status commands pick up the new adapter automatically.
98
+
99
+ ### Zellij CLI
100
+
101
+ The package also includes `zellij-notify` for programmatic control:
102
+
103
+ ```bash
104
+ # Send notification to current tab
105
+ zellij-notify "Build complete!"
106
+
107
+ # Send to specific tab by index
108
+ zellij-notify -i 2 "Backend tests passed"
109
+
110
+ # Quick 5-second notification
111
+ zellij-notify -q "Deployment started"
112
+
113
+ # Dismissable alert (requires Ctrl+N to clear)
114
+ zellij-notify -d -t error "Review required"
115
+
116
+ # Broadcast to all tabs
117
+ zellij-notify -a "System maintenance in 5 minutes"
118
+
119
+ # Full help
120
+ zellij-notify --help
121
+ ```
122
+
123
+ See [ZELLIJ-NOTIFY.md](./ZELLIJ-NOTIFY.md) for complete CLI documentation.
124
+
57
125
  ## The Sound
58
126
 
59
127
  - **Pattern**: C1-D1-E1-G1-C2-D2-E2-G2-C3-G2-E2-D2-C2-G1-E1-D1-C1
@@ -117,6 +185,63 @@ ls ~/.local/share/sounds/claude-notification.wav
117
185
  cp your-custom-sound.wav ~/.local/share/sounds/claude-notification.wav
118
186
  ```
119
187
 
188
+ ### Zellij Visual Notifications
189
+
190
+ If you're using [Zellij](https://zellij.dev/) as your terminal multiplexer, `claude-notifications` can send visual notifications directly to your Zellij panes with animated borders, status bar indicators, and tab badges.
191
+
192
+ **Setup:**
193
+
194
+ 1. **Install the Zellij plugin:**
195
+ ```bash
196
+ # The plugin should be installed at:
197
+ ~/.config/zellij/plugins/zellij_visual_notifications.wasm
198
+ ```
199
+
200
+ 2. **Add to your Zellij layout:**
201
+ ```kdl
202
+ layout {
203
+ pane
204
+ pane size=1 {
205
+ plugin location="file:~/.config/zellij/plugins/zellij_visual_notifications.wasm" {
206
+ enabled true
207
+ theme "catppuccin" // or dracula, nord, tokyo-night, etc.
208
+ show_status_bar true
209
+ show_border_colors true
210
+ animation_enabled true
211
+ }
212
+ }
213
+ }
214
+ ```
215
+
216
+ 3. **Configure in settings.json:**
217
+ ```json
218
+ {
219
+ "zellijVisualization": {
220
+ "enabled": true,
221
+ "pluginName": "zellij_visual_notifications",
222
+ "notificationType": "attention",
223
+ "title": "Claude Code",
224
+ "message": "Waiting for you...",
225
+ "priority": "high"
226
+ }
227
+ }
228
+ ```
229
+
230
+ **Visual Features:**
231
+ - 🎨 **Animated Pane Borders** - Pulsing colors based on notification type
232
+ - 📊 **Status Bar Widget** - Shows active notifications with icons
233
+ - đŸˇī¸ **Tab Badges** - Visual indicators on tabs with active notifications
234
+ - âŒ¨ī¸ **Keyboard Control** - Press `Ctrl+N` to clear notifications
235
+ - 🎭 **10+ Themes** - Catppuccin, Dracula, Nord, Tokyo Night, and more
236
+ - â™ŋ **Accessibility** - Pattern-based indicators for color-blind users
237
+
238
+ **Notification Types:**
239
+ - ✅ `success` - Green pulsing border (build passed, tests succeeded)
240
+ - ❌ `error` - Red pulsing border (build failed, errors found)
241
+ - âš ī¸ `warning` - Yellow pulsing border (warnings, deprecated APIs)
242
+ - â„šī¸ `info` - Blue pulsing border (general information)
243
+ - đŸ‘ī¸ `attention` - Purple pulsing border (Claude waiting for input)
244
+
120
245
  ### Configure Webhooks
121
246
 
122
247
  You can configure a webhook to be triggered when a notification occurs. This is useful for integrating with other services, such as IFTTT, Zapier, or a custom server.
@@ -145,6 +270,12 @@ Create a configuration file at `~/.config/claude-notifications/settings.json`.
145
270
  - `"claude-notification"` - Final Fantasy dream harp (default)
146
271
  - `"claude-notification-bell"` - Service desk bell
147
272
  - `desktopNotification`: (boolean) Whether to show desktop notification banners. Defaults to `false`.
273
+ - `zellijVisualization.enabled`: (boolean) Whether to send visual notifications to Zellij. Defaults to `true` when inside Zellij.
274
+ - `zellijVisualization.pluginName`: (string) Name of the Zellij plugin to send notifications to. Defaults to `"zellij_visual_notifications"`.
275
+ - `zellijVisualization.notificationType`: (string) Type of notification to send. Options: `success`, `error`, `warning`, `info`, `attention`, `progress`. Defaults to `"attention"`.
276
+ - `zellijVisualization.title`: (string) Notification title. Defaults to `"Claude Code"`.
277
+ - `zellijVisualization.message`: (string) Notification message. Defaults to `"Waiting for you..."`.
278
+ - `zellijVisualization.priority`: (string) Notification priority. Options: `low`, `normal`, `high`, `critical`. Defaults to `"high"`.
148
279
  - `webhook.enabled`: (boolean) Whether to trigger the webhook. Defaults to `false`.
149
280
  - `webhook.url`: (string) The URL to send the POST request to.
150
281
  - `webhook.replaceSound`: (boolean) If `true`, the sound will not play when a webhook is triggered. Defaults to `false`.
package/TASK.md ADDED
@@ -0,0 +1,15 @@
1
+ # Zellij Visual Integration
2
+
3
+ Now hear me out...
4
+ I LOVE this notification. It works really really well.
5
+ But I want to explore a new possibility -
6
+
7
+ ## Goal
8
+
9
+ For every notification, i would like a visual cue to accompany it.
10
+
11
+ ## Requirements
12
+
13
+ 1. The visual cue should be associated with the Zellij tab in your active session that the notification was meant for.
14
+ 2. The notification should remain visible until acknowledged by visiting the tab by making it active
15
+ 3. The notification should include periodic movement (a bounce, spin, arrow, etc) to draw attention every 30 seconds.