agentvibes 4.0.1 → 4.4.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 (219) hide show
  1. package/.agentvibes/bmad/bmad-voices.md +69 -69
  2. package/.agentvibes/config.json +12 -0
  3. package/.claude/activation-instructions +54 -54
  4. package/.claude/audio/tracks/README.md +52 -52
  5. package/.claude/commands/agent-vibes/add.md +21 -21
  6. package/.claude/commands/agent-vibes/agent-vibes.md +101 -101
  7. package/.claude/commands/agent-vibes/agent.md +79 -79
  8. package/.claude/commands/agent-vibes/background-music.md +111 -111
  9. package/.claude/commands/agent-vibes/bmad.md +198 -198
  10. package/.claude/commands/agent-vibes/clean.md +18 -18
  11. package/.claude/commands/agent-vibes/cleanup.md +18 -18
  12. package/.claude/commands/agent-vibes/commands.json +145 -145
  13. package/.claude/commands/agent-vibes/effects.md +97 -97
  14. package/.claude/commands/agent-vibes/get.md +9 -9
  15. package/.claude/commands/agent-vibes/hide.md +91 -91
  16. package/.claude/commands/agent-vibes/language.md +23 -23
  17. package/.claude/commands/agent-vibes/learn.md +67 -67
  18. package/.claude/commands/agent-vibes/list.md +13 -13
  19. package/.claude/commands/agent-vibes/mute.md +37 -37
  20. package/.claude/commands/agent-vibes/preview.md +17 -17
  21. package/.claude/commands/agent-vibes/provider.md +68 -68
  22. package/.claude/commands/agent-vibes/replay-target.md +14 -14
  23. package/.claude/commands/agent-vibes/sample.md +12 -12
  24. package/.claude/commands/agent-vibes/set-favorite-voice.md +84 -84
  25. package/.claude/commands/agent-vibes/set-pretext.md +65 -65
  26. package/.claude/commands/agent-vibes/set-speed.md +41 -41
  27. package/.claude/commands/agent-vibes/show.md +84 -84
  28. package/.claude/commands/agent-vibes/switch.md +87 -87
  29. package/.claude/commands/agent-vibes/target-voice.md +26 -26
  30. package/.claude/commands/agent-vibes/target.md +30 -30
  31. package/.claude/commands/agent-vibes/translate.md +68 -68
  32. package/.claude/commands/agent-vibes/unmute.md +45 -45
  33. package/.claude/commands/agent-vibes/verbosity.md +89 -89
  34. package/.claude/commands/agent-vibes/whoami.md +7 -7
  35. package/.claude/commands/agent-vibes-bmad-voices.md +117 -117
  36. package/.claude/commands/agent-vibes-rdp.md +24 -24
  37. package/.claude/config/agentvibes.json +1 -0
  38. package/.claude/config/audio-effects.cfg +3 -2
  39. package/.claude/config/audio-effects.cfg.sample +52 -52
  40. package/.claude/config/background-music-volume.txt +1 -0
  41. package/.claude/config/intro-text.txt +1 -0
  42. package/.claude/config/piper-speech-rate.txt +4 -0
  43. package/.claude/config/piper-target-speech-rate.txt +1 -0
  44. package/.claude/config/reverb-level.txt +1 -0
  45. package/.claude/config/tts-speech-rate.txt +4 -0
  46. package/.claude/config/tts-target-speech-rate.txt +1 -0
  47. package/.claude/docs/TERMUX_SETUP.md +408 -408
  48. package/.claude/github-star-reminder.txt +1 -1
  49. package/.claude/hooks/README-TTS-QUEUE.md +135 -135
  50. package/.claude/hooks/audio-cache-utils.sh +246 -246
  51. package/.claude/hooks/audio-processor.sh +433 -389
  52. package/.claude/hooks/background-music-manager.sh +404 -404
  53. package/.claude/hooks/bmad-speak-enhanced.sh +165 -165
  54. package/.claude/hooks/bmad-speak.sh +269 -112
  55. package/.claude/hooks/bmad-tts-injector.sh +568 -568
  56. package/.claude/hooks/bmad-voice-manager.sh +928 -928
  57. package/.claude/hooks/clawdbot-receiver-SECURE.sh +129 -129
  58. package/.claude/hooks/clawdbot-receiver.sh +107 -107
  59. package/.claude/hooks/clean-audio-cache.sh +22 -22
  60. package/.claude/hooks/cleanup-cache.sh +106 -106
  61. package/.claude/hooks/configure-rdp-mode.sh +137 -137
  62. package/.claude/hooks/download-extra-voices.sh +244 -244
  63. package/.claude/hooks/effects-manager.sh +268 -268
  64. package/.claude/hooks/github-star-reminder.sh +154 -154
  65. package/.claude/hooks/language-manager.sh +362 -362
  66. package/.claude/hooks/learn-manager.sh +492 -492
  67. package/.claude/hooks/macos-voice-manager.sh +205 -205
  68. package/.claude/hooks/migrate-background-music.sh +125 -125
  69. package/.claude/hooks/migrate-to-agentvibes.sh +161 -161
  70. package/.claude/hooks/optimize-background-music.sh +87 -87
  71. package/.claude/hooks/path-resolver.sh +60 -60
  72. package/.claude/hooks/personality-manager.sh +448 -448
  73. package/.claude/hooks/piper-download-voices.sh +225 -225
  74. package/.claude/hooks/piper-installer.sh +292 -292
  75. package/.claude/hooks/piper-multispeaker-registry.sh +171 -171
  76. package/.claude/hooks/piper-voice-manager.sh +24 -3
  77. package/.claude/hooks/play-tts-agentvibes-receiver-for-voiceless-connections.sh +90 -90
  78. package/.claude/hooks/play-tts-enhanced.sh +105 -70
  79. package/.claude/hooks/play-tts-macos.sh +368 -345
  80. package/.claude/hooks/play-tts-piper.sh +679 -578
  81. package/.claude/hooks/play-tts-soprano.sh +356 -320
  82. package/.claude/hooks/play-tts-ssh-remote.sh +167 -88
  83. package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
  84. package/.claude/hooks/play-tts.sh +301 -298
  85. package/.claude/hooks/prepare-release.sh +54 -54
  86. package/.claude/hooks/provider-commands.sh +617 -617
  87. package/.claude/hooks/provider-manager.sh +399 -399
  88. package/.claude/hooks/replay-target-audio.sh +95 -95
  89. package/.claude/hooks/requirements.txt +6 -6
  90. package/.claude/hooks/sentiment-manager.sh +201 -201
  91. package/.claude/hooks/session-start-tts.sh +81 -71
  92. package/.claude/hooks/soprano-gradio-synth.py +139 -139
  93. package/.claude/hooks/speed-manager.sh +291 -291
  94. package/.claude/hooks/stop-tts.sh +84 -0
  95. package/.claude/hooks/termux-installer.sh +261 -261
  96. package/.claude/hooks/translate-manager.sh +341 -341
  97. package/.claude/hooks/translator.py +237 -237
  98. package/.claude/hooks/tts-queue-worker.sh +145 -114
  99. package/.claude/hooks/tts-queue.sh +165 -136
  100. package/.claude/hooks/verbosity-manager.sh +178 -178
  101. package/.claude/hooks/voice-manager.sh +548 -544
  102. package/.claude/hooks-windows/audio-cache-utils.ps1 +119 -119
  103. package/.claude/hooks-windows/background-music-manager.ps1 +348 -0
  104. package/.claude/hooks-windows/clean-audio-cache.ps1 +53 -0
  105. package/.claude/hooks-windows/download-extra-voices.ps1 +185 -0
  106. package/.claude/hooks-windows/effects-manager.ps1 +294 -0
  107. package/.claude/hooks-windows/language-manager.ps1 +193 -0
  108. package/.claude/hooks-windows/learn-manager.ps1 +241 -0
  109. package/.claude/hooks-windows/personality-manager.ps1 +266 -0
  110. package/.claude/hooks-windows/play-tts-piper.ps1 +209 -0
  111. package/.claude/hooks-windows/play-tts-sapi.ps1 +108 -0
  112. package/.claude/hooks-windows/play-tts-soprano.ps1 +159 -158
  113. package/.claude/hooks-windows/play-tts-windows-piper.ps1 +50 -5
  114. package/.claude/hooks-windows/play-tts-windows-sapi.ps1 +108 -108
  115. package/.claude/hooks-windows/play-tts.ps1 +344 -266
  116. package/.claude/hooks-windows/provider-manager.ps1 +29 -10
  117. package/.claude/hooks-windows/session-start-tts.ps1 +124 -124
  118. package/.claude/hooks-windows/soprano-gradio-synth.py +153 -153
  119. package/.claude/hooks-windows/speed-manager.ps1 +166 -0
  120. package/.claude/hooks-windows/verbosity-manager.ps1 +119 -0
  121. package/.claude/hooks-windows/voice-manager-windows.ps1 +92 -8
  122. package/.claude/output-styles/agent-vibes.md +202 -202
  123. package/.claude/personalities/angry.md +14 -14
  124. package/.claude/personalities/annoying.md +14 -14
  125. package/.claude/personalities/crass.md +14 -14
  126. package/.claude/personalities/dramatic.md +14 -14
  127. package/.claude/personalities/dry-humor.md +50 -50
  128. package/.claude/personalities/flirty.md +20 -20
  129. package/.claude/personalities/funny.md +14 -14
  130. package/.claude/personalities/grandpa.md +32 -32
  131. package/.claude/personalities/millennial.md +14 -14
  132. package/.claude/personalities/moody.md +14 -14
  133. package/.claude/personalities/normal.md +16 -16
  134. package/.claude/personalities/pirate.md +14 -14
  135. package/.claude/personalities/poetic.md +14 -14
  136. package/.claude/personalities/professional.md +14 -14
  137. package/.claude/personalities/rapper.md +55 -55
  138. package/.claude/personalities/robot.md +14 -14
  139. package/.claude/personalities/sarcastic.md +38 -38
  140. package/.claude/personalities/sassy.md +14 -14
  141. package/.claude/personalities/surfer-dude.md +14 -14
  142. package/.claude/personalities/zen.md +14 -14
  143. package/.claude/settings.json +15 -15
  144. package/.claude/verbosity.txt +1 -1
  145. package/.clawdbot/README.md +105 -105
  146. package/.clawdbot/skill/SKILL.md +241 -241
  147. package/.mcp.json +12 -0
  148. package/CLAUDE.md +170 -181
  149. package/README.md +2029 -1909
  150. package/RELEASE_NOTES.md +1310 -66
  151. package/WINDOWS-SETUP.md +208 -208
  152. package/bin/agent-vibes +39 -39
  153. package/bin/agentvibes-voice-browser.js +1840 -1826
  154. package/bin/agentvibes.js +48 -2
  155. package/bin/mcp-server.js +121 -121
  156. package/bin/mcp-server.sh +206 -206
  157. package/bin/test-bmad-pr +78 -78
  158. package/mcp-server/QUICK_START.md +203 -203
  159. package/mcp-server/README.md +345 -345
  160. package/mcp-server/WINDOWS_SETUP.md +260 -260
  161. package/mcp-server/docs/troubleshooting-audio.md +313 -313
  162. package/mcp-server/examples/claude_desktop_config.json +11 -11
  163. package/mcp-server/examples/claude_desktop_config_piper.json +9 -9
  164. package/mcp-server/examples/custom_instructions.md +169 -169
  165. package/mcp-server/install-deps.js +130 -130
  166. package/mcp-server/pyproject.toml +52 -52
  167. package/mcp-server/requirements.txt +2 -2
  168. package/mcp-server/server.py +1465 -1417
  169. package/mcp-server/test_server.py +395 -395
  170. package/mcp-server/test_windows_script_parity.py +336 -0
  171. package/package.json +110 -112
  172. package/setup-windows.ps1 +815 -815
  173. package/src/bmad-detector.js +71 -71
  174. package/src/cli/list-personalities.js +110 -110
  175. package/src/cli/list-voices.js +114 -114
  176. package/src/commands/bmad-voices.js +394 -394
  177. package/src/commands/install-mcp.js +476 -476
  178. package/src/console/app.js +824 -806
  179. package/src/console/audio-env.js +20 -1
  180. package/src/console/brand-colors.js +13 -13
  181. package/src/console/constants/personalities.js +44 -0
  182. package/src/console/footer-config.js +50 -46
  183. package/src/console/modals/modal-overlay.js +247 -247
  184. package/src/console/navigation.js +62 -61
  185. package/src/console/tabs/agents-tab.js +1684 -369
  186. package/src/console/tabs/help-tab.js +261 -261
  187. package/src/console/tabs/install-tab.js +1007 -991
  188. package/src/console/tabs/music-tab.js +22 -8
  189. package/src/console/tabs/placeholder-tab.js +53 -46
  190. package/src/console/tabs/readme-tab.js +267 -267
  191. package/src/console/tabs/receiver-tab.js +1472 -0
  192. package/src/console/tabs/settings-tab.js +185 -402
  193. package/src/console/tabs/voices-tab.js +100 -21
  194. package/src/console/widgets/destroy-list.js +25 -0
  195. package/src/console/widgets/format-utils.js +89 -0
  196. package/src/console/widgets/notice.js +55 -0
  197. package/src/console/widgets/personality-picker.js +185 -0
  198. package/src/console/widgets/reverb-picker.js +94 -0
  199. package/src/console/widgets/track-picker.js +285 -0
  200. package/src/installer/music-file-input.js +304 -304
  201. package/src/installer.js +5882 -5777
  202. package/src/services/agent-voice-store.js +423 -163
  203. package/src/services/config-service.js +264 -264
  204. package/src/services/navigation-service.js +123 -123
  205. package/src/services/provider-service.js +132 -132
  206. package/src/services/verbosity-service.js +157 -157
  207. package/src/utils/audio-duration-validator.js +298 -298
  208. package/src/utils/audio-format-validator.js +277 -277
  209. package/src/utils/dependency-checker.js +469 -466
  210. package/src/utils/file-ownership-verifier.js +358 -358
  211. package/src/utils/list-formatter.js +194 -194
  212. package/src/utils/music-file-validator.js +285 -275
  213. package/src/utils/preview-list-prompt.js +136 -136
  214. package/src/utils/provider-validator.js +96 -12
  215. package/src/utils/secure-music-storage.js +412 -412
  216. package/templates/agentvibes-receiver.sh +482 -162
  217. package/templates/audio/welcome-music.mp3 +0 -0
  218. package/voice-assignments.json +8244 -8244
  219. package/.claude/config/background-music-position.txt +0 -1
package/CLAUDE.md CHANGED
@@ -1,181 +1,170 @@
1
- # AgentVibes Development Guidelines
2
-
3
- **Version:** 3.0
4
- **Updated:** 2026-02-15
5
- **Status:** Active (Using BMAD Methodology)
6
-
7
- ## TTS Protocol (MANDATORY)
8
-
9
- **ALWAYS call TTS inline (never `run_in_background: true`):**
10
- ```bash
11
- PULSE_SERVER=unix:/mnt/wslg/PulseServer bash ".claude/hooks/play-tts.sh" "text to speak"
12
- ```
13
- - Provider: `piper` (WSL bash, NOT Windows PowerShell)
14
- - Mode: `full` (`.agentvibes/config/mode.txt`) Claude calls TTS directly, no stop-hook Audio Summary
15
- - Pretext: configured in `.agentvibes/config/agentvibes.json` (prepended automatically by play-tts.sh)
16
- - Call at: task acknowledgment + task completion (high verbosity = also reasoning/findings)
17
-
18
- ## Overview
19
-
20
- AgentVibes is a Text-to-Speech system for AI assistants with personality support.
21
-
22
- ### Project Uses BMAD Methodology
23
-
24
- This project follows **BMAD (BMM - Business Model Methodology)** for all story development:
25
- - Use `/sprint-planning` to initialize sprint tracking
26
- - Use `/dev-story` for each story implementation (NOT manual commits)
27
- - `/dev-story` handles: implementation testing code review → auto-fixes → status updates
28
- - All stories tracked in `docs/implementation-artifacts/sprint-status.yaml`
29
- - Status updates: `ready-for-dev` `in-progress` → `complete`
30
-
31
- **Required Reading:** See `BMAD-STORY-DEVELOPMENT.md` for complete workflow.
32
-
33
- ## Critical Rules
34
-
35
- ### MANDATORY: Use BMAD Workflow
36
- 1. **Initialize sprint:** Run `/sprint-planning` once per sprint
37
- 2. **Develop each story:** Run `/dev-story` (NOT manual coding)
38
- 3. **Never skip workflow steps** - Workflow enforces quality gates
39
- 4. **Update sprint-status.yaml** automatically via `/dev-story`
40
- 5. **Code review included** - Built into `/dev-story` workflow
41
-
42
- ### Git Workflow (ONLY Outside BMAD)
43
- For changes outside story development:
44
- 1. Describe changes before acting
45
- 2. Get explicit user approval before commits/pushes
46
- 3. Test locally before pushing
47
- 4. Exception: Changes made by `/dev-story` auto-commit
48
-
49
- ## Security Requirements (SonarCloud Compliance)
50
-
51
- ### Core Security Rules (NO EXCEPTIONS)
52
- 1. **No hardcoded credentials** - Never commit API keys, passwords, tokens
53
- 2. **Validate all external input** - User input, files, environment variables
54
- 3. **Secure temp directories** - Use `$XDG_RUNTIME_DIR` or user-specific `/tmp`
55
- 4. **Verify file ownership** - Check before processing external files (uid check)
56
- 5. **Prevent path traversal** - Validate paths stay within expected directories (use `path.resolve()`)
57
- 6. **Never log sensitive data** - Mask credentials in logs
58
-
59
- ### Bash/Shell Security
60
- ```bash
61
- set -euo pipefail # REQUIRED: Always use strict mode
62
-
63
- # Secure temp with proper permissions
64
- TEMP_DIR="${XDG_RUNTIME_DIR:-/tmp}/agentvibes-$RANDOM"
65
- mkdir -p "$TEMP_DIR"; chmod 700 "$TEMP_DIR"
66
-
67
- # Verify file ownership before processing
68
- [[ $(stat -c '%u' "$file" 2>/dev/null || stat -f '%u' "$file" 2>/dev/null) == $(id -u) ]] || exit 1
69
-
70
- trap 'rm -f "$TEMP_FILE"' EXIT # Clean up: use single quotes for deferred expansion
71
-
72
- # Validate input
73
- [[ "$VALUE" =~ ^[0-9]+$ ]] || exit 1 # Only allow numbers
74
-
75
- echo "$VARIABLE" # GOOD: Quoted
76
- echo $VARIABLE # BAD: Vulnerable to word splitting
77
- ```
78
-
79
- ### JavaScript/Node.js Security
80
- ```javascript
81
- // Path safety: ALWAYS use path.resolve()
82
- const safePath = path.resolve(userInput);
83
- function isPathSafe(target, base) {
84
- const r = path.resolve(target), b = path.resolve(base);
85
- return r === b || r.startsWith(b + path.sep);
86
- }
87
-
88
- // Never log credentials - ALWAYS mask
89
- console.log('Key: ' + apiKey.substring(0, 3) + '...'); // Good
90
- console.log(`Key: ${apiKey}`); // BAD
91
-
92
- // Resource cleanup with try-finally
93
- let proc;
94
- try {
95
- proc = spawn(...);
96
- } finally {
97
- if (proc && !proc.killed) proc.kill();
98
- }
99
- ```
100
-
101
- ### Python Security
102
- ```python
103
- # Resource cleanup
104
- process = None
105
- try:
106
- process = subprocess.Popen(...)
107
- finally:
108
- if process and process.poll() is None:
109
- process.kill()
110
-
111
- # Graceful error handling
112
- try:
113
- content = path.read_text()
114
- except (PermissionError, UnicodeDecodeError, OSError) as e:
115
- print(f"Warning: {e}", file=sys.stderr)
116
- return default_value
117
- ```
118
-
119
- ## Code Quality Standards
120
-
121
- - **Error handling:** No silent failures - always handle errors explicitly
122
- - **Defensive programming:** Check preconditions and validate inputs
123
- - ✅ **Resource cleanup:** Always clean up files, processes, connections
124
- - **Race conditions:** Use file locking for shared resources
125
- - ✅ **Comments:** Security-critical code only (explain WHY, not WHAT)
126
- - **Single responsibility:** Keep functions focused and testable
127
-
128
- ## Testing Requirements
129
-
130
- - Run `npm test` before committing (REQUIRED)
131
- - Write tests for: input validation, path handling, edge cases
132
- - Code review via `/dev-story` includes test validation
133
- - Target: 80%+ code coverage for new features
134
-
135
- ## Definition of Done (Checked by /dev-story)
136
-
137
- - [ ] All tests pass (`npm test`)
138
- - [ ] No Sonar security hotspots
139
- - [ ] Code follows project patterns (project-context.md)
140
- - [ ] Credentials masked in logs
141
- - [ ] Paths validated (no traversal)
142
- - [ ] File operations safe (ownership checked)
143
- - [ ] Shell scripts use strict mode
144
- - [ ] Resources properly cleaned up
145
- - [ ] Acceptance criteria satisfied
146
-
147
- ## Story Development Workflow (REQUIRED)
148
-
149
- ### For Each Sprint:
150
- 1. Run `/sprint-planning` to initialize sprint-status.yaml
151
- 2. For each story, run `/dev-story` (handles everything)
152
- 3. Check progress anytime with `/sprint-status`
153
-
154
- ### What /dev-story Does:
155
- - Finds next ready-for-dev story
156
- - Loads story file with acceptance criteria
157
- - Implements tasks with code + tests
158
- - **Runs adversarial code review** (finds 3-10 issues)
159
- - **Auto-fixes HIGH and MEDIUM severity issues**
160
- - Validates against project-context.md
161
- - Updates sprint-status.yaml automatically
162
- - Marks story complete when all ACs satisfied
163
-
164
- **Never bypass the workflow** - it enforces all quality gates.
165
-
166
- ## Important Files
167
-
168
- | File | Purpose |
169
- |------|---------|
170
- | `CLAUDE.md` | Development standards (this file) |
171
- | `BMAD-STORY-DEVELOPMENT.md` | How to use BMAD methodology |
172
- | `project-context.md` | Project-specific patterns (if exists) |
173
- | `docs/epics.md` | All epics and stories |
174
- | `docs/implementation-artifacts/sprint-status.yaml` | Sprint progress tracking |
175
- | `_bmad/core/tasks/workflow.xml` | BMAD execution engine (read-only) |
176
-
177
- ## References
178
-
179
- - **BMAD Methodology:** See `/sprint-planning`, `/dev-story`, `/sprint-status` workflows
180
- - **Security Standards:** [SonarCloud Rules](https://rules.sonarsource.com/javascript/type/Security_Hotspot), [OWASP Top 10](https://owasp.org/www-project-top-ten/)
181
- - **Bash Best Practices:** [Shellharden](https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md)
1
+ # AgentVibes Development Guidelines
2
+
3
+ **Version:** 3.0
4
+ **Updated:** 2026-02-15
5
+ **Status:** Active (Using BMAD Methodology)
6
+
7
+ ## Overview
8
+
9
+ AgentVibes is a Text-to-Speech system for AI assistants with personality support.
10
+
11
+ ### Project Uses BMAD Methodology
12
+
13
+ This project follows **BMAD (BMM - Business Model Methodology)** for all story development:
14
+ - Use `/sprint-planning` to initialize sprint tracking
15
+ - Use `/dev-story` for each story implementation (NOT manual commits)
16
+ - `/dev-story` handles: implementation testing code review auto-fixes status updates
17
+ - All stories tracked in `docs/implementation-artifacts/sprint-status.yaml`
18
+ - Status updates: `ready-for-dev` → `in-progress` → `complete`
19
+
20
+ **Required Reading:** See `BMAD-STORY-DEVELOPMENT.md` for complete workflow.
21
+
22
+ ## Critical Rules
23
+
24
+ ### MANDATORY: Use BMAD Workflow
25
+ 1. **Initialize sprint:** Run `/sprint-planning` once per sprint
26
+ 2. **Develop each story:** Run `/dev-story` (NOT manual coding)
27
+ 3. **Never skip workflow steps** - Workflow enforces quality gates
28
+ 4. **Update sprint-status.yaml** automatically via `/dev-story`
29
+ 5. **Code review included** - Built into `/dev-story` workflow
30
+
31
+ ### Git Workflow (ONLY Outside BMAD)
32
+ For changes outside story development:
33
+ 1. Describe changes before acting
34
+ 2. Get explicit user approval before commits/pushes
35
+ 3. Test locally before pushing
36
+ 4. Exception: Changes made by `/dev-story` auto-commit
37
+
38
+ ## Security Requirements (SonarCloud Compliance)
39
+
40
+ ### Core Security Rules (NO EXCEPTIONS)
41
+ 1. **No hardcoded credentials** - Never commit API keys, passwords, tokens
42
+ 2. **Validate all external input** - User input, files, environment variables
43
+ 3. **Secure temp directories** - Use `$XDG_RUNTIME_DIR` or user-specific `/tmp`
44
+ 4. **Verify file ownership** - Check before processing external files (uid check)
45
+ 5. **Prevent path traversal** - Validate paths stay within expected directories (use `path.resolve()`)
46
+ 6. **Never log sensitive data** - Mask credentials in logs
47
+
48
+ ### Bash/Shell Security
49
+ ```bash
50
+ set -euo pipefail # REQUIRED: Always use strict mode
51
+
52
+ # Secure temp with proper permissions
53
+ TEMP_DIR="${XDG_RUNTIME_DIR:-/tmp}/agentvibes-$RANDOM"
54
+ mkdir -p "$TEMP_DIR"; chmod 700 "$TEMP_DIR"
55
+
56
+ # Verify file ownership before processing
57
+ [[ $(stat -c '%u' "$file" 2>/dev/null || stat -f '%u' "$file" 2>/dev/null) == $(id -u) ]] || exit 1
58
+
59
+ trap 'rm -f "$TEMP_FILE"' EXIT # Clean up: use single quotes for deferred expansion
60
+
61
+ # Validate input
62
+ [[ "$VALUE" =~ ^[0-9]+$ ]] || exit 1 # Only allow numbers
63
+
64
+ echo "$VARIABLE" # GOOD: Quoted
65
+ echo $VARIABLE # BAD: Vulnerable to word splitting
66
+ ```
67
+
68
+ ### JavaScript/Node.js Security
69
+ ```javascript
70
+ // Path safety: ALWAYS use path.resolve()
71
+ const safePath = path.resolve(userInput);
72
+ function isPathSafe(target, base) {
73
+ const r = path.resolve(target), b = path.resolve(base);
74
+ return r === b || r.startsWith(b + path.sep);
75
+ }
76
+
77
+ // Never log credentials - ALWAYS mask
78
+ console.log('Key: ' + apiKey.substring(0, 3) + '...'); // Good
79
+ console.log(`Key: ${apiKey}`); // BAD
80
+
81
+ // Resource cleanup with try-finally
82
+ let proc;
83
+ try {
84
+ proc = spawn(...);
85
+ } finally {
86
+ if (proc && !proc.killed) proc.kill();
87
+ }
88
+ ```
89
+
90
+ ### Python Security
91
+ ```python
92
+ # Resource cleanup
93
+ process = None
94
+ try:
95
+ process = subprocess.Popen(...)
96
+ finally:
97
+ if process and process.poll() is None:
98
+ process.kill()
99
+
100
+ # Graceful error handling
101
+ try:
102
+ content = path.read_text()
103
+ except (PermissionError, UnicodeDecodeError, OSError) as e:
104
+ print(f"Warning: {e}", file=sys.stderr)
105
+ return default_value
106
+ ```
107
+
108
+ ## Code Quality Standards
109
+
110
+ - ✅ **Error handling:** No silent failures - always handle errors explicitly
111
+ - **Defensive programming:** Check preconditions and validate inputs
112
+ - ✅ **Resource cleanup:** Always clean up files, processes, connections
113
+ - **Race conditions:** Use file locking for shared resources
114
+ - ✅ **Comments:** Security-critical code only (explain WHY, not WHAT)
115
+ - **Single responsibility:** Keep functions focused and testable
116
+
117
+ ## Testing Requirements
118
+
119
+ - Run `npm test` before committing (REQUIRED)
120
+ - Write tests for: input validation, path handling, edge cases
121
+ - Code review via `/dev-story` includes test validation
122
+ - Target: 80%+ code coverage for new features
123
+
124
+ ## Definition of Done (Checked by /dev-story)
125
+
126
+ - [ ] All tests pass (`npm test`)
127
+ - [ ] No Sonar security hotspots
128
+ - [ ] Code follows project patterns (project-context.md)
129
+ - [ ] Credentials masked in logs
130
+ - [ ] Paths validated (no traversal)
131
+ - [ ] File operations safe (ownership checked)
132
+ - [ ] Shell scripts use strict mode
133
+ - [ ] Resources properly cleaned up
134
+ - [ ] Acceptance criteria satisfied
135
+
136
+ ## Story Development Workflow (REQUIRED)
137
+
138
+ ### For Each Sprint:
139
+ 1. Run `/sprint-planning` to initialize sprint-status.yaml
140
+ 2. For each story, run `/dev-story` (handles everything)
141
+ 3. Check progress anytime with `/sprint-status`
142
+
143
+ ### What /dev-story Does:
144
+ - Finds next ready-for-dev story
145
+ - Loads story file with acceptance criteria
146
+ - Implements tasks with code + tests
147
+ - **Runs adversarial code review** (finds 3-10 issues)
148
+ - **Auto-fixes HIGH and MEDIUM severity issues**
149
+ - Validates against project-context.md
150
+ - Updates sprint-status.yaml automatically
151
+ - Marks story complete when all ACs satisfied
152
+
153
+ **Never bypass the workflow** - it enforces all quality gates.
154
+
155
+ ## Important Files
156
+
157
+ | File | Purpose |
158
+ |------|---------|
159
+ | `CLAUDE.md` | Development standards (this file) |
160
+ | `BMAD-STORY-DEVELOPMENT.md` | How to use BMAD methodology |
161
+ | `project-context.md` | Project-specific patterns (if exists) |
162
+ | `docs/epics.md` | All epics and stories |
163
+ | `docs/implementation-artifacts/sprint-status.yaml` | Sprint progress tracking |
164
+ | `_bmad/core/tasks/workflow.xml` | BMAD execution engine (read-only) |
165
+
166
+ ## References
167
+
168
+ - **BMAD Methodology:** See `/sprint-planning`, `/dev-story`, `/sprint-status` workflows
169
+ - **Security Standards:** [SonarCloud Rules](https://rules.sonarsource.com/javascript/type/Security_Hotspot), [OWASP Top 10](https://owasp.org/www-project-top-ten/)
170
+ - **Bash Best Practices:** [Shellharden](https://github.com/anordal/shellharden/blob/master/how_to_do_things_safely_in_bash.md)