stravinsky 0.4.17__tar.gz → 0.4.41__tar.gz

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.

Potentially problematic release.


This version of stravinsky might be problematic. Click here for more details.

Files changed (280) hide show
  1. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/stravinsky.md +3 -3
  2. stravinsky-0.4.41/.claude/commands/git-master.md +112 -0
  3. stravinsky-0.4.41/.claude/commands/str/list_watchers.md +96 -0
  4. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/strav.md +83 -11
  5. stravinsky-0.4.41/.claude/hooks/README.md +248 -0
  6. stravinsky-0.4.41/.claude/hooks/comment_checker.py +193 -0
  7. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/context_monitor.py +1 -1
  8. stravinsky-0.4.41/.claude/hooks/dependency_tracker.py +73 -0
  9. stravinsky-0.4.41/.claude/hooks/execution_state_tracker.py +68 -0
  10. stravinsky-0.4.41/.claude/hooks/notification_hook_v2.py +96 -0
  11. stravinsky-0.4.41/.claude/hooks/parallel_execution.py +243 -0
  12. stravinsky-0.4.41/.claude/hooks/parallel_reinforcement.py +106 -0
  13. stravinsky-0.4.41/.claude/hooks/parallel_reinforcement_v2.py +112 -0
  14. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/pre_compact.py +1 -1
  15. stravinsky-0.4.41/.claude/hooks/session_recovery.py +263 -0
  16. {stravinsky-0.4.17/mcp_bridge → stravinsky-0.4.41/.claude}/hooks/todo_delegation.py +14 -9
  17. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/tool_messaging.py +17 -6
  18. stravinsky-0.4.41/.claude/rules/deployment_safety.md +51 -0
  19. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/rules/pypi_deployment.md +1 -1
  20. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/settings.json +18 -38
  21. stravinsky-0.4.41/.claude/task_dependencies.json +9 -0
  22. {stravinsky-0.4.17 → stravinsky-0.4.41}/.gitignore +3 -0
  23. {stravinsky-0.4.17 → stravinsky-0.4.41}/PKG-INFO +51 -9
  24. {stravinsky-0.4.17 → stravinsky-0.4.41}/README.md +49 -8
  25. stravinsky-0.4.41/mcp_bridge/__init__.py +1 -0
  26. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/__init__.py +16 -6
  27. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/cli.py +9 -6
  28. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/oauth.py +1 -2
  29. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/openai_oauth.py +4 -7
  30. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/token_store.py +0 -1
  31. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/cli/install_hooks.py +46 -107
  32. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/cli/session_report.py +0 -3
  33. stravinsky-0.4.41/mcp_bridge/config/hook_config.py +247 -0
  34. stravinsky-0.4.41/mcp_bridge/config/rate_limits.py +317 -0
  35. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/agent_reminder.py +4 -4
  36. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/auto_slash_command.py +5 -5
  37. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/budget_optimizer.py +2 -2
  38. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/comment_checker.py +3 -4
  39. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/compaction.py +2 -2
  40. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/context.py +2 -1
  41. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/context_monitor.py +2 -2
  42. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/directory_context.py +3 -3
  43. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/edit_recovery.py +3 -2
  44. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/empty_message_sanitizer.py +2 -2
  45. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/git_noninteractive.py +4 -4
  46. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/keyword_detector.py +8 -10
  47. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/manager.py +31 -22
  48. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/notification_hook.py +2 -4
  49. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/parallel_enforcer.py +5 -5
  50. {stravinsky-0.4.17/.claude → stravinsky-0.4.41/mcp_bridge}/hooks/parallel_execution.py +22 -10
  51. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/pre_compact.py +8 -9
  52. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/preemptive_compaction.py +2 -3
  53. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/rules_injector.py +11 -19
  54. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/session_idle.py +4 -4
  55. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/session_notifier.py +4 -4
  56. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/session_recovery.py +4 -5
  57. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/stravinsky_mode.py +1 -1
  58. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/subagent_stop.py +1 -3
  59. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/task_validator.py +2 -2
  60. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/tmux_manager.py +7 -8
  61. {stravinsky-0.4.17/.claude → stravinsky-0.4.41/mcp_bridge}/hooks/todo_delegation.py +4 -1
  62. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/todo_enforcer.py +2 -2
  63. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/truncator.py +1 -2
  64. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/notifications.py +3 -4
  65. stravinsky-0.4.41/mcp_bridge/prompts/__init__.py +13 -0
  66. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/dewey.py +1 -1
  67. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/planner.py +2 -4
  68. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/stravinsky.py +10 -11
  69. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/server.py +143 -14
  70. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/server_tools.py +56 -4
  71. stravinsky-0.4.41/mcp_bridge/tools/__init__.py +49 -0
  72. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/agent_manager.py +104 -67
  73. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/background_tasks.py +13 -17
  74. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/code_search.py +1 -2
  75. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/continuous_loop.py +0 -1
  76. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/init.py +1 -0
  77. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/lsp/manager.py +14 -20
  78. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/lsp/tools.py +7 -7
  79. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/model_invoke.py +649 -77
  80. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/project_context.py +1 -2
  81. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/query_classifier.py +132 -49
  82. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/semantic_search.py +325 -51
  83. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/session_manager.py +0 -2
  84. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/skill_loader.py +0 -1
  85. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/task_runner.py +5 -7
  86. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/templates.py +3 -3
  87. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/update_manager.py +33 -37
  88. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/update_manager_pypi.py +6 -8
  89. {stravinsky-0.4.17 → stravinsky-0.4.41}/pyproject.toml +14 -1
  90. stravinsky-0.4.17/.github/workflows/publish.yml +0 -37
  91. stravinsky-0.4.17/.stravinsky/agents/agent_0de66569.out +0 -117
  92. stravinsky-0.4.17/.stravinsky/agents/agent_0de66569.system +0 -10
  93. stravinsky-0.4.17/.stravinsky/agents/agent_2ef2b305.out +0 -142
  94. stravinsky-0.4.17/.stravinsky/agents/agent_2ef2b305.system +0 -9
  95. stravinsky-0.4.17/.stravinsky/agents/agent_32fc606b.out +0 -123
  96. stravinsky-0.4.17/.stravinsky/agents/agent_32fc606b.system +0 -10
  97. stravinsky-0.4.17/.stravinsky/agents/agent_4ed6ec7a.out +0 -132
  98. stravinsky-0.4.17/.stravinsky/agents/agent_4ed6ec7a.system +0 -9
  99. stravinsky-0.4.17/.stravinsky/agents/agent_622ae68b.out +0 -119
  100. stravinsky-0.4.17/.stravinsky/agents/agent_622ae68b.system +0 -10
  101. stravinsky-0.4.17/.stravinsky/agents/agent_6731b838.out +0 -278
  102. stravinsky-0.4.17/.stravinsky/agents/agent_6731b838.system +0 -10
  103. stravinsky-0.4.17/.stravinsky/agents/agent_6c536f2d.out +0 -103
  104. stravinsky-0.4.17/.stravinsky/agents/agent_6c536f2d.system +0 -10
  105. stravinsky-0.4.17/.stravinsky/agents/agent_6ecde4ed.out +0 -76
  106. stravinsky-0.4.17/.stravinsky/agents/agent_6ecde4ed.system +0 -9
  107. stravinsky-0.4.17/.stravinsky/agents/agent_85449406.out +0 -13
  108. stravinsky-0.4.17/.stravinsky/agents/agent_85449406.system +0 -9
  109. stravinsky-0.4.17/.stravinsky/agents/agent_940fbc06.out +0 -170
  110. stravinsky-0.4.17/.stravinsky/agents/agent_940fbc06.system +0 -10
  111. stravinsky-0.4.17/.stravinsky/agents/agent_adc99d05.out +0 -128
  112. stravinsky-0.4.17/.stravinsky/agents/agent_adc99d05.system +0 -10
  113. stravinsky-0.4.17/.stravinsky/agents/agent_b3c09833.out +0 -124
  114. stravinsky-0.4.17/.stravinsky/agents/agent_b3c09833.system +0 -10
  115. stravinsky-0.4.17/.stravinsky/agents/agent_cdd28e91.system +0 -10
  116. stravinsky-0.4.17/.stravinsky/agents/agent_fee89a04.out +0 -81
  117. stravinsky-0.4.17/.stravinsky/agents/agent_fee89a04.system +0 -10
  118. stravinsky-0.4.17/.stravinsky/agents.json +0 -1442
  119. stravinsky-0.4.17/.stravinsky/mcp_mode +0 -1
  120. stravinsky-0.4.17/ARCHITECTURE.md +0 -1133
  121. stravinsky-0.4.17/AUTO_INDEXING_TEST_SUMMARY.md +0 -353
  122. stravinsky-0.4.17/CLAUDE.md +0 -250
  123. stravinsky-0.4.17/COMPREHENSIVE_TEST_IMPLEMENTATION.txt +0 -602
  124. stravinsky-0.4.17/DELEGATION_FLOW_VERIFICATION.md +0 -437
  125. stravinsky-0.4.17/FILEWATCHER_DOCS_UPDATE_SUMMARY.md +0 -186
  126. stravinsky-0.4.17/FILEWATCHER_README.md +0 -413
  127. stravinsky-0.4.17/INSTALL.md +0 -484
  128. stravinsky-0.4.17/LSP_CLEANUP_FIX.md +0 -141
  129. stravinsky-0.4.17/MANUAL_TESTING_CHECKLIST.md +0 -368
  130. stravinsky-0.4.17/TESTING_AUTO_INDEXING.md +0 -348
  131. stravinsky-0.4.17/TESTING_SUMMARY_FINAL.md +0 -234
  132. stravinsky-0.4.17/TEST_ARTIFACTS_README.md +0 -430
  133. stravinsky-0.4.17/TEST_EXECUTION_REPORT.md +0 -157
  134. stravinsky-0.4.17/TEST_PLAN_AUTO_INDEXING.md +0 -500
  135. stravinsky-0.4.17/assets/logo.png +0 -0
  136. stravinsky-0.4.17/assets/logo.png.txt +0 -2
  137. stravinsky-0.4.17/assets/logo_small.png +0 -0
  138. stravinsky-0.4.17/deploy.sh +0 -201
  139. stravinsky-0.4.17/docs/AGENTS.md +0 -382
  140. stravinsky-0.4.17/docs/AGENT_WORKFLOW.md +0 -974
  141. stravinsky-0.4.17/docs/CALL_FLOW_DIAGRAM.txt +0 -168
  142. stravinsky-0.4.17/docs/COMMANDS_CONSOLIDATION_REPORT.md +0 -310
  143. stravinsky-0.4.17/docs/COMMANDS_QUICK_SUMMARY.md +0 -114
  144. stravinsky-0.4.17/docs/DEPLOYMENT.md +0 -121
  145. stravinsky-0.4.17/docs/FILEWATCHER_ARCHITECTURE.md +0 -530
  146. stravinsky-0.4.17/docs/FILEWATCHER_IMPLEMENTATION_SUMMARY.md +0 -375
  147. stravinsky-0.4.17/docs/FILE_WATCHER.md +0 -357
  148. stravinsky-0.4.17/docs/HOOKS_INSTALLATION.md +0 -194
  149. stravinsky-0.4.17/docs/IMPLEMENTATION_PLAN.md +0 -768
  150. stravinsky-0.4.17/docs/INDEX_TOOL_CALL_LOGGING.md +0 -189
  151. stravinsky-0.4.17/docs/INJECTION_POINT_CODE_LOCATIONS.txt +0 -322
  152. stravinsky-0.4.17/docs/INSTALL.md +0 -370
  153. stravinsky-0.4.17/docs/INTELLIGENT_SEARCH_DESIGN.md +0 -650
  154. stravinsky-0.4.17/docs/KEYRING_AUTH_FIX.md +0 -216
  155. stravinsky-0.4.17/docs/LSP_MIGRATION_GUIDE.md +0 -1452
  156. stravinsky-0.4.17/docs/MCP_TOOL_CALL_INJECTION_POINTS.md +0 -377
  157. stravinsky-0.4.17/docs/MODEL_ROUTING.md +0 -72
  158. stravinsky-0.4.17/docs/QUERY_CLASSIFIER_DESIGN.md +0 -533
  159. stravinsky-0.4.17/docs/QUICKSTART.md +0 -127
  160. stravinsky-0.4.17/docs/QUICK_REFERENCE_INJECTION_POINTS.md +0 -97
  161. stravinsky-0.4.17/docs/README.md +0 -79
  162. stravinsky-0.4.17/docs/README_COMMANDS_ANALYSIS.md +0 -180
  163. stravinsky-0.4.17/docs/README_filewatcher.md +0 -213
  164. stravinsky-0.4.17/docs/REPORT_INDEX.txt +0 -189
  165. stravinsky-0.4.17/docs/SEARCH_STRATEGY_TEST_SUITE.md +0 -308
  166. stravinsky-0.4.17/docs/SEARCH_TOOLS_ANALYSIS.md +0 -826
  167. stravinsky-0.4.17/docs/SEMANTIC_INDEXING_INDEX.md +0 -214
  168. stravinsky-0.4.17/docs/SEMANTIC_SEARCH_BEST_PRACTICES.md +0 -1392
  169. stravinsky-0.4.17/docs/SEMANTIC_SEARCH_QUICK_START.md +0 -215
  170. stravinsky-0.4.17/docs/SEMANTIC_SEARCH_TESTING_INDEX.md +0 -278
  171. stravinsky-0.4.17/docs/SEMANTIC_SEARCH_TEST_REPORT.md +0 -225
  172. stravinsky-0.4.17/docs/SEMANTIC_WATCHER_USAGE.md +0 -400
  173. stravinsky-0.4.17/docs/TEMPLATES_STRUCTURE.md +0 -170
  174. stravinsky-0.4.17/docs/TROUBLESHOOTING.md +0 -382
  175. stravinsky-0.4.17/docs/USAGE.md +0 -537
  176. stravinsky-0.4.17/docs/architecture_workflow.md +0 -157
  177. stravinsky-0.4.17/docs/filewatcher_design_summary.md +0 -287
  178. stravinsky-0.4.17/docs/filewatcher_integration_design.md +0 -606
  179. stravinsky-0.4.17/docs/filewatcher_quick_reference.md +0 -448
  180. stravinsky-0.4.17/docs/remediation_plan.md +0 -38
  181. stravinsky-0.4.17/docs/semantic_indexing_analysis.md +0 -444
  182. stravinsky-0.4.17/docs/semantic_indexing_quick_start.md +0 -422
  183. stravinsky-0.4.17/error.log +0 -4
  184. stravinsky-0.4.17/logs/.1c0e2f6784d083818216ed08579b248b799c8d86-audit.json +0 -40
  185. stravinsky-0.4.17/logs/.270de9f01be3c37438e0ae9542f6c146c85078ae-audit.json +0 -40
  186. stravinsky-0.4.17/logs/application-2026-01-03.log +0 -45
  187. stravinsky-0.4.17/logs/application-2026-01-04.log +0 -232
  188. stravinsky-0.4.17/logs/application-2026-01-05.log +0 -172
  189. stravinsky-0.4.17/logs/error-2026-01-03.log +0 -3
  190. stravinsky-0.4.17/logs/error-2026-01-04.log +0 -24
  191. stravinsky-0.4.17/logs/error-2026-01-05.log +0 -15
  192. stravinsky-0.4.17/mcp_bridge/__init__.py +0 -1
  193. stravinsky-0.4.17/mcp_bridge/hooks/parallel_execution.py +0 -111
  194. stravinsky-0.4.17/mcp_bridge/prompts/__init__.py +0 -20
  195. stravinsky-0.4.17/mcp_bridge/tools/__init__.py +0 -42
  196. stravinsky-0.4.17/repro_spawn.py +0 -29
  197. stravinsky-0.4.17/run-mcp.sh +0 -3
  198. stravinsky-0.4.17/stdout_handshake_auditor.py +0 -85
  199. stravinsky-0.4.17/test_lsp_cleanup.py +0 -103
  200. stravinsky-0.4.17/test_lsp_manager.py +0 -307
  201. stravinsky-0.4.17/tests/MANUAL_TEST_GUIDE.md +0 -414
  202. stravinsky-0.4.17/tests/QUERY_CLASSIFICATION_GUIDE.md +0 -375
  203. stravinsky-0.4.17/tests/QUICK_REFERENCE.md +0 -165
  204. stravinsky-0.4.17/tests/README.md +0 -89
  205. stravinsky-0.4.17/tests/README_AUTO_INDEXING_TESTS.md +0 -354
  206. stravinsky-0.4.17/tests/README_QUERY_CLASSIFICATION.md +0 -344
  207. stravinsky-0.4.17/tests/TEST_IMPLEMENTATION_SUMMARY.md +0 -391
  208. stravinsky-0.4.17/tests/TEST_RESULTS_direct_gemini.md +0 -299
  209. stravinsky-0.4.17/tests/conftest.py +0 -8
  210. stravinsky-0.4.17/tests/manual_test_auto_indexing.py +0 -788
  211. stravinsky-0.4.17/tests/manual_test_hooks.py +0 -57
  212. stravinsky-0.4.17/tests/test_auto_indexing.py +0 -571
  213. stravinsky-0.4.17/tests/test_direct_gemini.py +0 -321
  214. stravinsky-0.4.17/tests/test_file_watcher.py +0 -314
  215. stravinsky-0.4.17/tests/test_file_watcher_no_index.py +0 -404
  216. stravinsky-0.4.17/tests/test_hooks.py +0 -56
  217. stravinsky-0.4.17/tests/test_new_hooks.py +0 -316
  218. stravinsky-0.4.17/tests/test_query_classification.py +0 -982
  219. stravinsky-0.4.17/tests/test_query_classifier.py +0 -566
  220. stravinsky-0.4.17/tests/test_symlink_boundary.py +0 -148
  221. stravinsky-0.4.17/tests/test_update_manager.py +0 -1120
  222. stravinsky-0.4.17/tests/verify_semantic_search.py +0 -155
  223. stravinsky-0.4.17/uv.lock +0 -2542
  224. stravinsky-0.4.17/verify_tools.py +0 -43
  225. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/HOOKS_INTEGRATION.md +0 -0
  226. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/HOOKS.md +0 -0
  227. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/code-reviewer.md +0 -0
  228. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/debugger.md +0 -0
  229. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/delphi.md +0 -0
  230. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/dewey.md +0 -0
  231. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/explore.md +0 -0
  232. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/frontend.md +0 -0
  233. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/implementation-lead.md +0 -0
  234. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/research-lead.md +0 -0
  235. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/delphi.md +0 -0
  236. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/dewey.md +0 -0
  237. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/index.md +0 -0
  238. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/publish.md +0 -0
  239. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/review.md +0 -0
  240. stravinsky-0.4.17/.claude/commands/str-cancel.md → stravinsky-0.4.41/.claude/commands/str/cancel.md +0 -0
  241. stravinsky-0.4.17/.claude/commands/str-clean.md → stravinsky-0.4.41/.claude/commands/str/clean.md +0 -0
  242. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/index.md +0 -0
  243. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/search.md +0 -0
  244. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/start_filewatch.md +0 -0
  245. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/stats.md +0 -0
  246. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/stop_filewatch.md +0 -0
  247. stravinsky-0.4.17/.claude/commands/str-unwatch.md → stravinsky-0.4.41/.claude/commands/str/unwatch.md +0 -0
  248. stravinsky-0.4.17/.claude/commands/str-watch.md → stravinsky-0.4.41/.claude/commands/str/watch.md +0 -0
  249. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/verify.md +0 -0
  250. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/version.md +0 -0
  251. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/context.py +0 -0
  252. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/edit_recovery.py +0 -0
  253. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/notification_hook.py +0 -0
  254. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/stravinsky_mode.py +0 -0
  255. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/subagent_stop.py +0 -0
  256. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/todo_continuation.py +0 -0
  257. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/truncator.py +0 -0
  258. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/skills/chrome-devtools/SKILL.md +0 -0
  259. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/skills/sqlite/SKILL.md +0 -0
  260. {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/skills/supabase/SKILL.md +0 -0
  261. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/token_refresh.py +0 -0
  262. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/cli/__init__.py +1 -1
  263. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/MANIFEST_SCHEMA.md +0 -0
  264. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/README.md +0 -0
  265. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/__init__.py +2 -2
  266. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/hooks.py +0 -0
  267. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/hooks_manifest.json +0 -0
  268. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/skills_manifest.json +0 -0
  269. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/HOOKS_SETTINGS.json +0 -0
  270. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/README.md +0 -0
  271. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/__init__.py +0 -0
  272. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/todo_continuation.py +0 -0
  273. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/tool_messaging.py +0 -0
  274. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/delphi.py +0 -0
  275. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/document_writer.py +0 -0
  276. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/explore.py +0 -0
  277. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/frontend.py +0 -0
  278. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/multimodal.py +0 -0
  279. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/lsp/__init__.py +8 -8
  280. {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/utils/__init__.py +0 -0
@@ -74,7 +74,7 @@ Task(
74
74
 
75
75
  ## Workflow
76
76
 
77
- ### Step 0: Check Skills FIRST (BLOCKING)
77
+ ### Step 0: Check Skills FUWT (BLOCKING)
78
78
 
79
79
  **Before ANY classification or action, scan for matching skills.**
80
80
 
@@ -92,7 +92,7 @@ Classify every request into one of 6 types:
92
92
 
93
93
  | Type | Signal | Action |
94
94
  |------|--------|--------|
95
- | **Skill Match** | Matches skill trigger phrase | **INVOKE skill FIRST** via `skill_get` tool |
95
+ | **Skill Match** | Matches skill trigger phrase | **INVOKE skill FUWT** via `skill_get` tool |
96
96
  | **Trivial** | Typo fix, single-line change, known exact location | Direct tools only (UNLESS delegation applies) |
97
97
  | **Explicit** | Specific file/line, clear directive | Execute directly |
98
98
  | **Exploratory** | "How does X work?", "Find Y", "Where is Z?" | Fire explore (1-3) + tools in parallel |
@@ -137,7 +137,7 @@ This assessment guides how much freedom you have to make changes without asking.
137
137
 
138
138
  ## Parallel Execution (MANDATORY)
139
139
 
140
- ### ⚠️ CRITICAL: PARALLEL-FIRST WORKFLOW
140
+ ### ⚠️ CRITICAL: PARALLEL-FUWT WORKFLOW
141
141
 
142
142
  **BLOCKING REQUIREMENT**: For implementation tasks, your response structure MUST be:
143
143
 
@@ -0,0 +1,112 @@
1
+ # Git Master Skill
2
+
3
+ Atomic commits with conventional format and smart history search.
4
+
5
+ ## Invocation
6
+
7
+ ```
8
+ /git-master <command>
9
+ ```
10
+
11
+ ## Commands
12
+
13
+ ### commit - Smart Atomic Commit
14
+
15
+ ```
16
+ /git-master commit
17
+ ```
18
+
19
+ Workflow:
20
+ 1. Run `git status` and `git diff --staged`
21
+ 2. Analyze changes to determine commit type
22
+ 3. Generate conventional commit message
23
+ 4. Create atomic commit
24
+
25
+ **Commit Types** (Conventional Commits):
26
+ - `feat`: New feature
27
+ - `fix`: Bug fix
28
+ - `docs`: Documentation only
29
+ - `style`: Formatting, no code change
30
+ - `refactor`: Code restructuring
31
+ - `perf`: Performance improvement
32
+ - `test`: Adding/updating tests
33
+ - `chore`: Build, config, dependencies
34
+
35
+ **Message Format**:
36
+ ```
37
+ <type>(<scope>): <description>
38
+
39
+ [optional body]
40
+
41
+ [optional footer]
42
+ ```
43
+
44
+ ### search - History Search
45
+
46
+ ```
47
+ /git-master search <pattern>
48
+ ```
49
+
50
+ Find commits matching a pattern:
51
+ - By message: `/git-master search "fix auth"`
52
+ - By file: `/git-master search --file src/auth.py`
53
+ - By author: `/git-master search --author david`
54
+ - By date: `/git-master search --since "1 week ago"`
55
+
56
+ ### split - Split Large Changes
57
+
58
+ ```
59
+ /git-master split
60
+ ```
61
+
62
+ When staged changes are too large:
63
+ 1. Analyze logical groupings
64
+ 2. Suggest split points
65
+ 3. Create multiple atomic commits
66
+
67
+ ### amend - Smart Amend
68
+
69
+ ```
70
+ /git-master amend
71
+ ```
72
+
73
+ Safely amend the last commit:
74
+ 1. Verify commit hasn't been pushed
75
+ 2. Verify you're the author
76
+ 3. Add staged changes to last commit
77
+ 4. Update message if requested
78
+
79
+ ## Rules
80
+
81
+ 1. **Atomic Commits**: One logical change per commit
82
+ 2. **Conventional Format**: Always use conventional commits
83
+ 3. **No Secrets**: Block commits containing secrets
84
+ 4. **Pre-push Check**: Verify before push to main/master
85
+
86
+ ## Examples
87
+
88
+ ```bash
89
+ # Smart commit with auto-generated message
90
+ /git-master commit
91
+
92
+ # Search for auth-related commits
93
+ /git-master search "auth"
94
+
95
+ # Find commits that modified a specific file
96
+ /git-master search --file mcp_bridge/auth/oauth.py
97
+
98
+ # Split large staged changes
99
+ /git-master split
100
+ ```
101
+
102
+ ## Safety Checks
103
+
104
+ Before committing, Git Master checks for:
105
+ - Exposed secrets (API keys, tokens, passwords)
106
+ - Debug/test code that shouldn't be committed
107
+ - Large binary files
108
+ - Merge conflict markers
109
+
110
+ ---
111
+
112
+ $ARGUMENTS: command (required) - The git-master command to execute
@@ -0,0 +1,96 @@
1
+ ---
2
+ description: /str:list_watchers - List all active file watchers across projects
3
+ allowed-tools: mcp__stravinsky__list_file_watchers
4
+ ---
5
+
6
+ # List Active File Watchers
7
+
8
+ View all currently running file watchers for automatic semantic search reindexing.
9
+
10
+ ## What This Does
11
+
12
+ Displays information about active file watchers across all projects including:
13
+ - Project path being watched
14
+ - Embedding provider (ollama, gemini, openai, huggingface)
15
+ - Debounce interval (wait time before reindexing)
16
+ - Current status (running/stopped)
17
+
18
+ ## Prerequisites
19
+
20
+ At least one file watcher must be running. Start a watcher with `/str:start_filewatch` first.
21
+
22
+ ## Usage
23
+
24
+ Call the MCP tool directly (no parameters):
25
+
26
+ ```python
27
+ mcp__stravinsky__list_file_watchers()
28
+ ```
29
+
30
+ Returns a list of dicts with:
31
+ - `project_path`: Root directory being watched
32
+ - `provider`: Embedding provider name
33
+ - `debounce_seconds`: Wait time before reindexing
34
+ - `status`: "running" or "stopped"
35
+
36
+ ## Example Output
37
+
38
+ ```
39
+ Active File Watchers
40
+ ====================
41
+
42
+ Watcher 1:
43
+ Project: /Users/dev/project1
44
+ Provider: ollama
45
+ Debounce: 2.0s
46
+ Status: running
47
+
48
+ Watcher 2:
49
+ Project: /Users/dev/project2
50
+ Provider: gemini
51
+ Debounce: 3.0s
52
+ Status: running
53
+
54
+ Total: 2 active watchers
55
+ ```
56
+
57
+ ## Use Cases
58
+
59
+ **Before stopping a watcher:**
60
+ ```python
61
+ # List watchers to get project path
62
+ mcp__stravinsky__list_file_watchers()
63
+
64
+ # Stop specific watcher
65
+ mcp__stravinsky__stop_file_watcher(project_path="/Users/dev/project1")
66
+ ```
67
+
68
+ **Check status across multiple repos:**
69
+ ```python
70
+ # See all watched projects at once
71
+ mcp__stravinsky__list_file_watchers()
72
+ ```
73
+
74
+ **Verify watcher started successfully:**
75
+ ```python
76
+ # After starting watcher
77
+ mcp__stravinsky__start_file_watcher(project_path=".", provider="ollama")
78
+
79
+ # Confirm it's running
80
+ mcp__stravinsky__list_file_watchers()
81
+ ```
82
+
83
+ ## Troubleshooting
84
+
85
+ **"No active watchers"**: Start a watcher with `/str:start_filewatch` first.
86
+
87
+ **"Watcher shows stopped"**: The watcher encountered an error or was manually stopped. Restart with `/str:start_filewatch`.
88
+
89
+ **Multiple watchers for same project**: This indicates duplicate watcher processes. Stop and restart with `/str:stop_filewatch`.
90
+
91
+ ## Tips
92
+
93
+ - Run this before stopping watchers to identify project paths
94
+ - Use to verify watchers are running after system restart
95
+ - Check status if reindexing seems not to be happening automatically
96
+ - Each project can only have ONE active watcher per provider
@@ -15,7 +15,7 @@ Named after the composer known for revolutionary orchestration.
15
15
 
16
16
  ---
17
17
 
18
- ## Phase 0: Check Skills FIRST (BLOCKING)
18
+ ## Phase 0: Check Skills FUWT (BLOCKING)
19
19
 
20
20
  Before ANY classification or action:
21
21
  1. Call `skill_list` to check available skills
@@ -26,10 +26,30 @@ Before ANY classification or action:
26
26
 
27
27
  ## Phase 1: Classify & Validate
28
28
 
29
+ ### Step 0: ULTRAWORK Mode Detection (PRIORITY CHECK)
30
+
31
+ **BEFORE classification, scan prompt for:**
32
+ - Keywords: `ultrawork`, `uw`, `ultrawork`, `ulw` (case-insensitive)
33
+ - If detected: **ACTIVATE MAXIMUM PARALLEL MODE**
34
+
35
+ **ULTRAWORK MODE RULES:**
36
+ 1. **ALWAYS use agents** - NEVER work alone with Read/Grep/Bash
37
+ 2. **Spawn ALL independent tasks in parallel** - Minimum 2+ agents for any multi-step work
38
+ 3. **Default to explore/dewey** - Use cheap agents aggressively
39
+ 4. **No sequential work** - If tasks can run in parallel, they MUST
40
+
41
+ **Example:**
42
+ ```
43
+ User: "ultrawork Find auth flow and error handling"
44
+ → IMMEDIATE: agent_spawn(explore, "auth flow") + agent_spawn(explore, "error handling")
45
+ → NEVER: Read file yourself, grep yourself, or work sequentially
46
+ ```
47
+
29
48
  ### Step 1: Classify Request Type
30
49
 
31
50
  | Type | Signal | Action |
32
51
  |------|--------|--------|
52
+ | **ULTRAWORK Mode** | Contains: ultrawork, uw, ultrawork, ulw | Maximum parallel delegation (2+ agents minimum) |
33
53
  | **Skill Match** | Matches skill trigger | INVOKE skill via `skill_get` |
34
54
  | **Exploratory** | "How does X work?", "Find Y" | Fire explore agents in parallel |
35
55
  | **Implementation** | "Add feature", "Refactor" | Create TODO list → spawn parallel agents |
@@ -40,22 +60,24 @@ Before ANY classification or action:
40
60
  - Do I have implicit assumptions?
41
61
  - What tools/agents can I use: `agent_spawn`, parallel tools, LSP?
42
62
  - Should I challenge the user if design seems flawed?
63
+ - **If ULTRAWORK detected**: Am I spawning at least 2+ agents in parallel?
43
64
 
44
65
  ---
45
66
 
46
- ## ⚠️ CRITICAL: PARALLEL-FIRST WORKFLOW
67
+ ## ⚠️ CRITICAL: PARALLEL-FUWT WORKFLOW
47
68
 
48
- **For implementation tasks, your response MUST be:**
69
+ **For ANY task with 2+ independent steps, your response MUST be:**
49
70
 
50
71
  ```
51
- 1. TodoWrite (create all items)
52
- 2. SAME RESPONSE: Multiple agent_spawn() calls for ALL independent TODOs
72
+ 1. TodoWrite (create all items) OR identify independent subtasks
73
+ 2. SAME RESPONSE: Multiple agent_spawn() calls for ALL independent work
53
74
  3. NEVER mark in_progress until agents return
75
+ 4. NEVER use Read/Grep/Bash when agents can do it
54
76
  ```
55
77
 
56
- **BLOCKING REQUIREMENT**: After TodoWrite, spawn ALL agents in the SAME response.
78
+ **BLOCKING REQUIREMENT**: After TodoWrite OR after identifying exploratory work, spawn ALL agents in the SAME response.
57
79
 
58
- ### CORRECT (one response with parallel agents):
80
+ ### CORRECT Pattern 1: Implementation with TODOs
59
81
  ```
60
82
  TodoWrite([todo1, todo2, todo3])
61
83
  agent_spawn(agent_type="explore", prompt="TODO 1...")
@@ -64,14 +86,46 @@ agent_spawn(agent_type="explore", prompt="TODO 2...")
64
86
  → explore:gemini-3-flash('TODO 2...') task_id=agent_def456
65
87
  agent_spawn(agent_type="dewey", prompt="TODO 3...")
66
88
  → dewey:gemini-3-flash('TODO 3...') task_id=agent_ghi789
89
+ # Continue in SAME response - collect results later
67
90
  ```
68
91
 
69
- ### WRONG (sequential - defeats parallelism):
92
+ ### CORRECT Pattern 2: Exploratory (NO TodoWrite needed)
93
+ ```
94
+ User: "Find auth flow and error handling"
95
+
96
+ # IMMEDIATE parallel spawn (no TodoWrite):
97
+ agent_spawn(agent_type="explore", prompt="Find auth flow...")
98
+ → explore:gemini-3-flash('Find auth flow...') task_id=agent_abc123
99
+ agent_spawn(agent_type="explore", prompt="Find error handling...")
100
+ → explore:gemini-3-flash('Find error handling...') task_id=agent_def456
101
+ # Continue in SAME response
102
+ ```
103
+
104
+ ### ❌ WRONG Pattern 1: Sequential (defeats parallelism)
70
105
  ```
71
106
  TodoWrite([todo1, todo2, todo3])
72
107
  # Response ends - WRONG!
73
- # Next: Mark todo1 in_progress - WRONG!
74
- # Next: Do work manually - WRONG!
108
+ # Next response: Mark todo1 in_progress - WRONG!
109
+ # Next response: Do work manually - WRONG!
110
+ ```
111
+
112
+ ### ❌ WRONG Pattern 2: Manual Work (when agents available)
113
+ ```
114
+ User: "Find auth flow and error handling"
115
+
116
+ # WRONG - doing it yourself:
117
+ Read("src/auth.py") # Should be agent_spawn(explore)
118
+ Grep("error", "**/*.py") # Should be agent_spawn(explore)
119
+ ```
120
+
121
+ ### Decision Tree: When to Spawn Agents
122
+
123
+ ```
124
+ Is this exploratory (search, find, understand)?
125
+ ├─ YES → Spawn explore/dewey agents immediately (no TodoWrite)
126
+ └─ NO → Is this implementation with 2+ steps?
127
+ ├─ YES → TodoWrite + spawn agents in SAME response
128
+ └─ NO → Single simple task, work directly (rare)
75
129
  ```
76
130
 
77
131
  ---
@@ -119,15 +173,33 @@ When using `agent_spawn`, include ALL 7 sections:
119
173
 
120
174
  | Domain | Delegate To | Trigger |
121
175
  |--------|-------------|---------|
176
+ | **Maximum Parallel Mode** | `explore` + `dewey` | **ULTRAWORK, UW, ULTRAWORK, ULW** |
122
177
  | Frontend Visual | `frontend` | Color, spacing, layout, CSS, animation |
123
178
  | External Research | `dewey` | Docs, library usage, OSS examples |
124
179
  | Internal Search | `explore` | Find patterns in THIS repo |
125
180
  | Architecture | `delphi` | Design decisions, tradeoffs |
126
181
  | Hard Debugging | `delphi` | After 2+ failed fixes |
127
182
 
183
+ ### ULTRAWORK Mode Behavior
184
+
185
+ When ULTRAWORK/UW/ULTRAWORK/ULW keywords detected:
186
+
187
+ **MANDATORY:**
188
+ - ✅ Spawn 2+ agents minimum (even for simple tasks)
189
+ - ✅ Use explore for ALL code searches
190
+ - ✅ Use dewey for ALL external research
191
+ - ✅ Fire all agents in SAME response
192
+ - ✅ NEVER use Read/Grep/Bash directly
193
+
194
+ **FORBIDDEN:**
195
+ - ❌ Working alone without agents
196
+ - ❌ Sequential execution (spawn one, wait, spawn another)
197
+ - ❌ Single agent for multi-part tasks
198
+ - ❌ Direct tool usage (Read, Grep, Bash) when agents available
199
+
128
200
  ---
129
201
 
130
- ## Execution Context (READ THIS FIRST)
202
+ ## Execution Context (READ THIS FUWT)
131
203
 
132
204
  **You are running as:** Stravinsky MCP Skill (via `/strav` command)
133
205
 
@@ -0,0 +1,248 @@
1
+ # Claude Code Hooks Architecture
2
+
3
+ ## Overview
4
+
5
+ This directory contains Claude Code hooks that enforce parallel delegation, provide rich console notifications, and track execution state across conversation turns.
6
+
7
+ ## Hook Execution Order
8
+
9
+ ### UserPromptSubmit (6 hooks)
10
+ 1. `context_monitor.py` - Track session context
11
+ 2. `parallel_execution.py` - Initial ULTRAWORK mode activation
12
+ 3. `parallel_reinforcement.py` - Legacy parallel reminders (deprecated)
13
+ 4. `parallel_reinforcement_v2.py` - **NEW** Smart adaptive reminders based on state
14
+ 5. `context.py` - Inject project context
15
+ 6. `todo_continuation.py` - Resume incomplete todos
16
+
17
+ ### PostToolUse
18
+ 1. `truncator.py` - Truncate large outputs
19
+ 2. `session_recovery.py` - Session state backup
20
+ 3. `execution_state_tracker.py` - **NEW** Track tool usage patterns across turns
21
+ 4. `tool_messaging.py` - User-friendly tool notifications (with colors)
22
+ 5. `edit_recovery.py` - Backup edited files
23
+ 6. `todo_delegation.py` - Enforce parallel after TodoWrite
24
+ 7. `dependency_tracker.py` - **NEW** Parse TODO dependencies and build graph
25
+
26
+ ## State Files
27
+
28
+ Located in `.claude/` directory:
29
+
30
+ - `execution_state.json` - Tool usage tracking (last 10 tools, Task spawn history)
31
+ - `task_dependencies.json` - TODO dependency graph (independent vs dependent tasks)
32
+ - `hooks/state/agent_batch.json` - Agent spawn batching for grouped notifications
33
+ - `~/.stravinsky_mode` - Hard blocking mode marker (enables stravinsky mode)
34
+
35
+ ## Utilities
36
+
37
+ ### `utils/colors.py`
38
+ - ANSI color codes for terminal output
39
+ - Agent-specific color mappings (blue=explore, purple=dewey, etc.)
40
+ - Terminal capability detection (`supports_color()`)
41
+
42
+ ### `utils/debug.py`
43
+ - Debug mode control via `STRAVINSKY_DEBUG` environment variable
44
+ - Silent by default, verbose when `STRAVINSKY_DEBUG=1`
45
+
46
+ ### `utils/console_format.py`
47
+ - Standardized message formatting with `MessageType` enum
48
+ - Multi-line agent spawn formatting
49
+ - Tool usage formatting with colors
50
+
51
+ ## Environment Variables
52
+
53
+ - `STRAVINSKY_DEBUG=1` - Enable debug output from hooks
54
+ - `STRAVINSKY_NO_COLOR=1` - Disable ANSI colors (for unsupported terminals)
55
+ - `NO_COLOR=1` - Standard no-color environment variable (also supported)
56
+
57
+ ## Key Features
58
+
59
+ ### 1. Parallel Delegation Enforcement
60
+
61
+ **Problem**: After turn 3+, Claude degrades to sequential execution despite having independent tasks.
62
+
63
+ **Solution**: State-based reinforcement via `parallel_reinforcement_v2.py`
64
+ - Tracks last 10 tool calls
65
+ - Detects when Task() hasn't been used recently (2+ turns)
66
+ - Parses TODOs for dependency keywords
67
+ - Injects aggressive reminders when degradation detected
68
+
69
+ **Files**:
70
+ - `dependency_tracker.py` - Parses TODOs for "after", "depends on", etc.
71
+ - `execution_state_tracker.py` - Tracks tool usage history
72
+ - `parallel_reinforcement_v2.py` - Smart context-aware reminders
73
+
74
+ ### 2. Rich Agent Notifications
75
+
76
+ **Before**:
77
+ ```
78
+ spawned explore:gemini-3-flash('task delegated')
79
+ ```
80
+
81
+ **After**:
82
+ ```
83
+ 🔵 EXPLORE → gemini-3-flash
84
+ Task: Find all authentication implementations in codebase
85
+ ```
86
+
87
+ **Features**:
88
+ - Color-coded by agent type (blue, purple, green, orange, red)
89
+ - Multi-line format with clear task descriptions
90
+ - Model name explicitly shown
91
+ - Graceful degradation if terminal doesn't support colors
92
+
93
+ ### 3. Silent Debug Mode
94
+
95
+ **Problem**: Hook debug output pollutes console (`Failed to send event: ...`)
96
+
97
+ **Solution**: File-based logging with `STRAVINSKY_DEBUG` control
98
+ - `send_event.py` logs to `~/.claude/hooks/logs/event_sender.log`
99
+ - All debug output hidden unless `STRAVINSKY_DEBUG=1`
100
+ - Clean console by default
101
+
102
+ ## Agent Color Mapping
103
+
104
+ | Agent | Color | Emoji | Model |
105
+ |-------|-------|-------|-------|
106
+ | explore | Blue | 🔵 | gemini-3-flash |
107
+ | dewey | Purple | 🟣 | gemini-3-flash |
108
+ | frontend | Green | 🟢 | gemini-3-pro-high |
109
+ | delphi | Orange | 🟠 | gpt-5.2-medium |
110
+ | debugger | Red | 🔴 | sonnet-4.5 |
111
+ | code-reviewer | Purple | 🟣 | sonnet-4.5 |
112
+
113
+ ## Dependency Detection
114
+
115
+ The `dependency_tracker.py` hook parses TODO content for dependency signals:
116
+
117
+ **Dependency Keywords** (marks as dependent):
118
+ - "after", "depends on", "requires", "once", "when", "then"
119
+
120
+ **Parallel Keywords** (marks as independent):
121
+ - "also", "meanwhile", "simultaneously", "and", "plus"
122
+
123
+ **Example**:
124
+ ```json
125
+ {
126
+ "dependencies": {
127
+ "todo_1": {"deps": [], "independent": true, "parallel_safe": true},
128
+ "todo_2": {"deps": [], "independent": true, "parallel_safe": true},
129
+ "todo_3": {"deps": ["todo_1"], "independent": false, "parallel_safe": false}
130
+ }
131
+ }
132
+ ```
133
+
134
+ ## Parallel Reinforcement Algorithm
135
+
136
+ 1. **Check Mode**: Is `~/.stravinsky_mode` active? If not, skip.
137
+ 2. **Check State**: Are there 2+ pending TODOs? If not, skip.
138
+ 3. **Check History**: How many turns since last `Task()` spawn?
139
+ - If < 2 turns → skip (still fresh)
140
+ - If >= 2 turns → degradation detected
141
+ 4. **Check Dependencies**: How many independent tasks exist?
142
+ - If < 2 → skip (no parallelization needed)
143
+ - If >= 2 → inject aggressive reminder
144
+ 5. **Inject Reminder**: Add context-aware instructions to prompt
145
+
146
+ ## Testing
147
+
148
+ ### Test Parallel Delegation Persistence
149
+
150
+ ```bash
151
+ # Create a multi-step task and track behavior over 10+ turns
152
+ # Expected: Task() spawns for independent tasks even at turn 10
153
+ ```
154
+
155
+ ### Test Console Output
156
+
157
+ ```bash
158
+ # Run hooks and verify no debug clutter
159
+ export STRAVINSKY_DEBUG=0
160
+ # Should see ONLY user-relevant messages (colored agent notifications)
161
+
162
+ # Enable debug mode
163
+ export STRAVINSKY_DEBUG=1
164
+ # Should see debug output in ~/.claude/hooks/logs/event_sender.log
165
+ ```
166
+
167
+ ### Test Color Support
168
+
169
+ ```bash
170
+ # Disable colors
171
+ export STRAVINSKY_NO_COLOR=1
172
+ # Should see emojis but no ANSI codes
173
+
174
+ # Enable colors (default)
175
+ unset STRAVINSKY_NO_COLOR
176
+ # Should see colored output
177
+ ```
178
+
179
+ ## Architecture Comparison: Stravinsky vs oh-my-opencode
180
+
181
+ | Aspect | oh-my-opencode (TS) | Stravinsky (Python) |
182
+ |--------|---------------------|---------------------|
183
+ | Parallel Enforcement | Structural (orchestrator pattern) | Prompt-based with state tracking |
184
+ | State Management | Built-in TypeScript state | External JSON files |
185
+ | Dependency Tracking | Explicit graph | Keyword-based parsing |
186
+ | Agent Notifications | Rich formatting (assumed) | Rich formatting with ANSI colors |
187
+ | Console Output | Clean separation | File-based logging + formatting |
188
+
189
+ ## Future Enhancements
190
+
191
+ 1. **Agent Batching** - Group parallel agent spawns visually
192
+ 2. **Dependency Graph Visualization** - CLI tool to view task dependencies
193
+ 3. **Performance Metrics** - Track agent completion times
194
+ 4. **ML-Based Agent Selection** - Predict best agent for task type
195
+
196
+ ## Troubleshooting
197
+
198
+ ### Import Errors in LSP
199
+
200
+ **Symptom**: Pyright shows "Import could not be resolved" for `utils/*` modules
201
+
202
+ **Cause**: LSP can't resolve relative imports in hook scripts
203
+
204
+ **Solution**: These are false positives. Python resolves imports at runtime via `sys.path.insert(0, ...)` in each hook. Safe to ignore.
205
+
206
+ ### Parallel Delegation Still Fails
207
+
208
+ **Check**:
209
+ 1. Is `~/.stravinsky_mode` file present?
210
+ 2. Run: `cat .claude/execution_state.json` - verify state is updating
211
+ 3. Run: `cat .claude/task_dependencies.json` - verify dependencies detected
212
+ 4. Enable debug: `STRAVINSKY_DEBUG=1` and check logs
213
+
214
+ ### Colors Not Showing
215
+
216
+ **Check**:
217
+ 1. Terminal supports ANSI colors? (`echo $TERM`)
218
+ 2. `STRAVINSKY_NO_COLOR` or `NO_COLOR` set?
219
+ 3. Is stderr a TTY? (Colors disabled for piped output)
220
+
221
+ ## Maintenance
222
+
223
+ ### Adding New Hooks
224
+
225
+ 1. Create hook file in `.claude/hooks/`
226
+ 2. Add to appropriate section in `.claude/settings.json`
227
+ 3. Test in isolation with mock input
228
+ 4. Update this README
229
+
230
+ ### Modifying State Schema
231
+
232
+ If changing `execution_state.json` or `task_dependencies.json` format:
233
+ 1. Update tracker scripts (`execution_state_tracker.py`, `dependency_tracker.py`)
234
+ 2. Update consumer scripts (`parallel_reinforcement_v2.py`)
235
+ 3. Add migration logic or document breaking change
236
+ 4. Consider versioning state files
237
+
238
+ ### Deprecating Old Hooks
239
+
240
+ 1. Mark as deprecated in comments
241
+ 2. Add to "Deprecated" section below
242
+ 3. After 1 month, remove from `settings.json`
243
+ 4. After 2 months, delete file
244
+
245
+ ## Deprecated Hooks
246
+
247
+ - `parallel_reinforcement.py` - Replaced by `parallel_reinforcement_v2.py` (state-based)
248
+ - Removal target: TBD (keep for backward compatibility for now)