agentvibes 4.2.0 → 4.4.1

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 +2 -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 -433
  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 -269
  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 -105
  79. package/.claude/hooks/play-tts-macos.sh +368 -368
  80. package/.claude/hooks/play-tts-piper.sh +679 -679
  81. package/.claude/hooks/play-tts-soprano.sh +356 -356
  82. package/.claude/hooks/play-tts-ssh-remote.sh +167 -167
  83. package/.claude/hooks/play-tts-termux-ssh.sh +169 -169
  84. package/.claude/hooks/play-tts.sh +301 -301
  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 -81
  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 -84
  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 -145
  99. package/.claude/hooks/tts-queue.sh +165 -165
  100. package/.claude/hooks/verbosity-manager.sh +178 -178
  101. package/.claude/hooks/voice-manager.sh +548 -548
  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 -170
  149. package/README.md +2029 -2007
  150. package/RELEASE_NOTES.md +1310 -1203
  151. package/WINDOWS-SETUP.md +208 -208
  152. package/bin/agent-vibes +39 -39
  153. package/bin/agentvibes-voice-browser.js +1840 -1840
  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 -1453
  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 -110
  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 -824
  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 -44
  182. package/src/console/footer-config.js +50 -50
  183. package/src/console/modals/modal-overlay.js +247 -247
  184. package/src/console/navigation.js +62 -62
  185. package/src/console/tabs/agents-tab.js +1684 -1516
  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 -53
  190. package/src/console/tabs/readme-tab.js +267 -267
  191. package/src/console/tabs/receiver-tab.js +1472 -1212
  192. package/src/console/tabs/settings-tab.js +208 -84
  193. package/src/console/tabs/voices-tab.js +100 -21
  194. package/src/console/widgets/destroy-list.js +25 -25
  195. package/src/console/widgets/format-utils.js +89 -89
  196. package/src/console/widgets/notice.js +55 -55
  197. package/src/console/widgets/personality-picker.js +185 -185
  198. package/src/console/widgets/reverb-picker.js +94 -94
  199. package/src/console/widgets/track-picker.js +285 -285
  200. package/src/installer/music-file-input.js +304 -304
  201. package/src/installer.js +5895 -5829
  202. package/src/services/agent-voice-store.js +423 -423
  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 +143 -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 -285
  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 -482
  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,170 +1,170 @@
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)
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)