stravinsky 0.2.67__py3-none-any.whl → 0.4.66__py3-none-any.whl

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 (190) hide show
  1. mcp_bridge/__init__.py +1 -1
  2. mcp_bridge/auth/__init__.py +16 -6
  3. mcp_bridge/auth/cli.py +202 -11
  4. mcp_bridge/auth/oauth.py +1 -2
  5. mcp_bridge/auth/openai_oauth.py +4 -7
  6. mcp_bridge/auth/token_store.py +112 -11
  7. mcp_bridge/cli/__init__.py +1 -1
  8. mcp_bridge/cli/install_hooks.py +503 -107
  9. mcp_bridge/cli/session_report.py +0 -3
  10. mcp_bridge/config/MANIFEST_SCHEMA.md +305 -0
  11. mcp_bridge/config/README.md +276 -0
  12. mcp_bridge/config/__init__.py +2 -2
  13. mcp_bridge/config/hook_config.py +247 -0
  14. mcp_bridge/config/hooks_manifest.json +138 -0
  15. mcp_bridge/config/rate_limits.py +317 -0
  16. mcp_bridge/config/skills_manifest.json +128 -0
  17. mcp_bridge/hooks/HOOKS_SETTINGS.json +17 -4
  18. mcp_bridge/hooks/__init__.py +19 -4
  19. mcp_bridge/hooks/agent_reminder.py +4 -4
  20. mcp_bridge/hooks/auto_slash_command.py +5 -5
  21. mcp_bridge/hooks/budget_optimizer.py +2 -2
  22. mcp_bridge/hooks/claude_limits_hook.py +114 -0
  23. mcp_bridge/hooks/comment_checker.py +3 -4
  24. mcp_bridge/hooks/compaction.py +2 -2
  25. mcp_bridge/hooks/context.py +2 -1
  26. mcp_bridge/hooks/context_monitor.py +2 -2
  27. mcp_bridge/hooks/delegation_policy.py +85 -0
  28. mcp_bridge/hooks/directory_context.py +3 -3
  29. mcp_bridge/hooks/edit_recovery.py +3 -2
  30. mcp_bridge/hooks/edit_recovery_policy.py +49 -0
  31. mcp_bridge/hooks/empty_message_sanitizer.py +2 -2
  32. mcp_bridge/hooks/events.py +160 -0
  33. mcp_bridge/hooks/git_noninteractive.py +4 -4
  34. mcp_bridge/hooks/keyword_detector.py +8 -10
  35. mcp_bridge/hooks/manager.py +43 -22
  36. mcp_bridge/hooks/notification_hook.py +13 -6
  37. mcp_bridge/hooks/parallel_enforcement_policy.py +67 -0
  38. mcp_bridge/hooks/parallel_enforcer.py +5 -5
  39. mcp_bridge/hooks/parallel_execution.py +22 -10
  40. mcp_bridge/hooks/post_tool/parallel_validation.py +103 -0
  41. mcp_bridge/hooks/pre_compact.py +8 -9
  42. mcp_bridge/hooks/pre_tool/agent_spawn_validator.py +115 -0
  43. mcp_bridge/hooks/preemptive_compaction.py +2 -3
  44. mcp_bridge/hooks/routing_notifications.py +80 -0
  45. mcp_bridge/hooks/rules_injector.py +11 -19
  46. mcp_bridge/hooks/session_idle.py +4 -4
  47. mcp_bridge/hooks/session_notifier.py +4 -4
  48. mcp_bridge/hooks/session_recovery.py +4 -5
  49. mcp_bridge/hooks/stravinsky_mode.py +1 -1
  50. mcp_bridge/hooks/subagent_stop.py +1 -3
  51. mcp_bridge/hooks/task_validator.py +2 -2
  52. mcp_bridge/hooks/tmux_manager.py +7 -8
  53. mcp_bridge/hooks/todo_delegation.py +4 -1
  54. mcp_bridge/hooks/todo_enforcer.py +180 -10
  55. mcp_bridge/hooks/tool_messaging.py +113 -10
  56. mcp_bridge/hooks/truncation_policy.py +37 -0
  57. mcp_bridge/hooks/truncator.py +1 -2
  58. mcp_bridge/metrics/cost_tracker.py +115 -0
  59. mcp_bridge/native_search.py +93 -0
  60. mcp_bridge/native_watcher.py +118 -0
  61. mcp_bridge/notifications.py +150 -0
  62. mcp_bridge/orchestrator/enums.py +11 -0
  63. mcp_bridge/orchestrator/router.py +165 -0
  64. mcp_bridge/orchestrator/state.py +32 -0
  65. mcp_bridge/orchestrator/visualization.py +14 -0
  66. mcp_bridge/orchestrator/wisdom.py +34 -0
  67. mcp_bridge/prompts/__init__.py +1 -8
  68. mcp_bridge/prompts/dewey.py +1 -1
  69. mcp_bridge/prompts/planner.py +2 -4
  70. mcp_bridge/prompts/stravinsky.py +53 -31
  71. mcp_bridge/proxy/__init__.py +0 -0
  72. mcp_bridge/proxy/client.py +70 -0
  73. mcp_bridge/proxy/model_server.py +157 -0
  74. mcp_bridge/routing/__init__.py +43 -0
  75. mcp_bridge/routing/config.py +250 -0
  76. mcp_bridge/routing/model_tiers.py +135 -0
  77. mcp_bridge/routing/provider_state.py +261 -0
  78. mcp_bridge/routing/task_classifier.py +190 -0
  79. mcp_bridge/server.py +542 -59
  80. mcp_bridge/server_tools.py +738 -6
  81. mcp_bridge/tools/__init__.py +40 -25
  82. mcp_bridge/tools/agent_manager.py +616 -697
  83. mcp_bridge/tools/background_tasks.py +13 -17
  84. mcp_bridge/tools/code_search.py +70 -53
  85. mcp_bridge/tools/continuous_loop.py +0 -1
  86. mcp_bridge/tools/dashboard.py +19 -0
  87. mcp_bridge/tools/find_code.py +296 -0
  88. mcp_bridge/tools/init.py +1 -0
  89. mcp_bridge/tools/list_directory.py +42 -0
  90. mcp_bridge/tools/lsp/__init__.py +12 -5
  91. mcp_bridge/tools/lsp/manager.py +471 -0
  92. mcp_bridge/tools/lsp/tools.py +723 -207
  93. mcp_bridge/tools/model_invoke.py +1195 -273
  94. mcp_bridge/tools/mux_client.py +75 -0
  95. mcp_bridge/tools/project_context.py +1 -2
  96. mcp_bridge/tools/query_classifier.py +406 -0
  97. mcp_bridge/tools/read_file.py +84 -0
  98. mcp_bridge/tools/replace.py +45 -0
  99. mcp_bridge/tools/run_shell_command.py +38 -0
  100. mcp_bridge/tools/search_enhancements.py +347 -0
  101. mcp_bridge/tools/semantic_search.py +3627 -0
  102. mcp_bridge/tools/session_manager.py +0 -2
  103. mcp_bridge/tools/skill_loader.py +0 -1
  104. mcp_bridge/tools/task_runner.py +5 -7
  105. mcp_bridge/tools/templates.py +3 -3
  106. mcp_bridge/tools/tool_search.py +331 -0
  107. mcp_bridge/tools/write_file.py +29 -0
  108. mcp_bridge/update_manager.py +585 -0
  109. mcp_bridge/update_manager_pypi.py +297 -0
  110. mcp_bridge/utils/cache.py +82 -0
  111. mcp_bridge/utils/process.py +71 -0
  112. mcp_bridge/utils/session_state.py +51 -0
  113. mcp_bridge/utils/truncation.py +76 -0
  114. stravinsky-0.4.66.dist-info/METADATA +517 -0
  115. stravinsky-0.4.66.dist-info/RECORD +198 -0
  116. {stravinsky-0.2.67.dist-info → stravinsky-0.4.66.dist-info}/entry_points.txt +1 -0
  117. stravinsky_claude_assets/HOOKS_INTEGRATION.md +316 -0
  118. stravinsky_claude_assets/agents/HOOKS.md +437 -0
  119. stravinsky_claude_assets/agents/code-reviewer.md +210 -0
  120. stravinsky_claude_assets/agents/comment_checker.md +580 -0
  121. stravinsky_claude_assets/agents/debugger.md +254 -0
  122. stravinsky_claude_assets/agents/delphi.md +495 -0
  123. stravinsky_claude_assets/agents/dewey.md +248 -0
  124. stravinsky_claude_assets/agents/explore.md +1198 -0
  125. stravinsky_claude_assets/agents/frontend.md +472 -0
  126. stravinsky_claude_assets/agents/implementation-lead.md +164 -0
  127. stravinsky_claude_assets/agents/momus.md +464 -0
  128. stravinsky_claude_assets/agents/research-lead.md +141 -0
  129. stravinsky_claude_assets/agents/stravinsky.md +730 -0
  130. stravinsky_claude_assets/commands/delphi.md +9 -0
  131. stravinsky_claude_assets/commands/dewey.md +54 -0
  132. stravinsky_claude_assets/commands/git-master.md +112 -0
  133. stravinsky_claude_assets/commands/index.md +49 -0
  134. stravinsky_claude_assets/commands/publish.md +86 -0
  135. stravinsky_claude_assets/commands/review.md +73 -0
  136. stravinsky_claude_assets/commands/str/agent_cancel.md +70 -0
  137. stravinsky_claude_assets/commands/str/agent_list.md +56 -0
  138. stravinsky_claude_assets/commands/str/agent_output.md +92 -0
  139. stravinsky_claude_assets/commands/str/agent_progress.md +74 -0
  140. stravinsky_claude_assets/commands/str/agent_retry.md +94 -0
  141. stravinsky_claude_assets/commands/str/cancel.md +51 -0
  142. stravinsky_claude_assets/commands/str/clean.md +97 -0
  143. stravinsky_claude_assets/commands/str/continue.md +38 -0
  144. stravinsky_claude_assets/commands/str/index.md +199 -0
  145. stravinsky_claude_assets/commands/str/list_watchers.md +96 -0
  146. stravinsky_claude_assets/commands/str/search.md +205 -0
  147. stravinsky_claude_assets/commands/str/start_filewatch.md +136 -0
  148. stravinsky_claude_assets/commands/str/stats.md +71 -0
  149. stravinsky_claude_assets/commands/str/stop_filewatch.md +89 -0
  150. stravinsky_claude_assets/commands/str/unwatch.md +42 -0
  151. stravinsky_claude_assets/commands/str/watch.md +45 -0
  152. stravinsky_claude_assets/commands/strav.md +53 -0
  153. stravinsky_claude_assets/commands/stravinsky.md +292 -0
  154. stravinsky_claude_assets/commands/verify.md +60 -0
  155. stravinsky_claude_assets/commands/version.md +5 -0
  156. stravinsky_claude_assets/hooks/README.md +248 -0
  157. stravinsky_claude_assets/hooks/comment_checker.py +193 -0
  158. stravinsky_claude_assets/hooks/context.py +38 -0
  159. stravinsky_claude_assets/hooks/context_monitor.py +153 -0
  160. stravinsky_claude_assets/hooks/dependency_tracker.py +73 -0
  161. stravinsky_claude_assets/hooks/edit_recovery.py +46 -0
  162. stravinsky_claude_assets/hooks/execution_state_tracker.py +68 -0
  163. stravinsky_claude_assets/hooks/notification_hook.py +103 -0
  164. stravinsky_claude_assets/hooks/notification_hook_v2.py +96 -0
  165. stravinsky_claude_assets/hooks/parallel_execution.py +241 -0
  166. stravinsky_claude_assets/hooks/parallel_reinforcement.py +106 -0
  167. stravinsky_claude_assets/hooks/parallel_reinforcement_v2.py +112 -0
  168. stravinsky_claude_assets/hooks/pre_compact.py +123 -0
  169. stravinsky_claude_assets/hooks/ralph_loop.py +173 -0
  170. stravinsky_claude_assets/hooks/session_recovery.py +263 -0
  171. stravinsky_claude_assets/hooks/stop_hook.py +89 -0
  172. stravinsky_claude_assets/hooks/stravinsky_metrics.py +164 -0
  173. stravinsky_claude_assets/hooks/stravinsky_mode.py +146 -0
  174. stravinsky_claude_assets/hooks/subagent_stop.py +98 -0
  175. stravinsky_claude_assets/hooks/todo_continuation.py +111 -0
  176. stravinsky_claude_assets/hooks/todo_delegation.py +96 -0
  177. stravinsky_claude_assets/hooks/tool_messaging.py +281 -0
  178. stravinsky_claude_assets/hooks/truncator.py +23 -0
  179. stravinsky_claude_assets/rules/deployment_safety.md +51 -0
  180. stravinsky_claude_assets/rules/integration_wiring.md +89 -0
  181. stravinsky_claude_assets/rules/pypi_deployment.md +220 -0
  182. stravinsky_claude_assets/rules/stravinsky_orchestrator.md +32 -0
  183. stravinsky_claude_assets/settings.json +152 -0
  184. stravinsky_claude_assets/skills/chrome-devtools/SKILL.md +81 -0
  185. stravinsky_claude_assets/skills/sqlite/SKILL.md +77 -0
  186. stravinsky_claude_assets/skills/supabase/SKILL.md +74 -0
  187. stravinsky_claude_assets/task_dependencies.json +34 -0
  188. stravinsky-0.2.67.dist-info/METADATA +0 -284
  189. stravinsky-0.2.67.dist-info/RECORD +0 -76
  190. {stravinsky-0.2.67.dist-info → stravinsky-0.4.66.dist-info}/WHEEL +0 -0
@@ -0,0 +1,198 @@
1
+ mcp_bridge/__init__.py,sha256=pRg6DnS_O6W5itls16IG_bO-OrcT1WacxRqfoxdLtzE,23
2
+ mcp_bridge/native_search.py,sha256=V0zhOJBxe8WqCgHyBEJSaUDLytTZEuRatf_JXtmix0g,2688
3
+ mcp_bridge/native_watcher.py,sha256=pj9kNnZtxmgiFz2VXLQYF4Ij_MI6ly-Ulux0jR8ozBo,4162
4
+ mcp_bridge/notifications.py,sha256=pJFSYFt-GLzaLyXKVw-gXz3WMEYyEeKncXOSSklHaOs,5094
5
+ mcp_bridge/server.py,sha256=VM3Z0l2Xf1O1yGiKz5bmWknFCd019JqVkHSh1sEgAgw,43889
6
+ mcp_bridge/server_tools.py,sha256=wr75cwULnaqF3cA9qAGPCELQYXGqganrE8AexdrLoKo,60851
7
+ mcp_bridge/update_manager.py,sha256=5rbHQdtmFl6QmCPB6EpWgKakp4draeB2jI60iyOZ_gg,20080
8
+ mcp_bridge/update_manager_pypi.py,sha256=9yprMi9FQHoBDjxJKrdaSB3CLMMpXU0m8CA-waV8-jQ,9352
9
+ mcp_bridge/auth/__init__.py,sha256=bLq_SUA7Lq5xKk1kBmLoVVhAvSgp39dy6lwbDEmQk78,933
10
+ mcp_bridge/auth/cli.py,sha256=bY29y73N9GAXtIizAOSsKWaQ4jqrhy1o7ObXn3akpwQ,14749
11
+ mcp_bridge/auth/oauth.py,sha256=sQjDO5cXvlL3FeOEjQH9NguJSj_OdmdHUxEK8pFGNRE,12803
12
+ mcp_bridge/auth/openai_oauth.py,sha256=rBDBUTGKX58UUlTU_C66ESw256AnjqbDGu0yUCCVFIY,11494
13
+ mcp_bridge/auth/token_refresh.py,sha256=goWp1Wz3yWOoFuxvFMDZLjo8gLPXcajZxHpzZtSoKcQ,3760
14
+ mcp_bridge/auth/token_store.py,sha256=Ghj-Dc6rDy5WayJFHgY8WyuKTxZGn9Q5mmf_ajnB1d8,9498
15
+ mcp_bridge/cli/__init__.py,sha256=eJ1XFcOz749rJKvDx4ZveVt7cnzTedRfYokMSumn01E,200
16
+ mcp_bridge/cli/install_hooks.py,sha256=u_qj9_5EthXevpC2J07FE8-3xlYFROHSQqirO-97DUk,49940
17
+ mcp_bridge/cli/session_report.py,sha256=SbI5IaGjvRA0DDuJWuFb9RnEYI8gsukF55mERUFi0AE,22177
18
+ mcp_bridge/config/MANIFEST_SCHEMA.md,sha256=KVODUO8n5J9DcsBP19EIflQcGW39ulMnYs3evyZIrJg,10074
19
+ mcp_bridge/config/README.md,sha256=HzzkpS3-iDw0mGKQ2zjFETyi4r1ot03pZ4pUXp3FZJ0,8506
20
+ mcp_bridge/config/__init__.py,sha256=nSfLxvS1u-hDiwUTJD1bBvzUngJJBbBc4jjKDhrz34I,256
21
+ mcp_bridge/config/hook_config.py,sha256=bmbMUTgsRdrnDnzdY7N28zT04I5ZGjypr27zdRLmhI8,7456
22
+ mcp_bridge/config/hooks.py,sha256=WvWC6ZUc8y1IXPlGCjLYAAsGGigd5tWeGiw585OGNwA,4624
23
+ mcp_bridge/config/hooks_manifest.json,sha256=e-1_Qh15WVY1IE1r6pL67WW10LYoSmcmRYEuRNz53qw,4189
24
+ mcp_bridge/config/rate_limits.py,sha256=uKA7EOAOwRXNuTkaCDxakwOvHuxVKvxRHA3hY45lIKk,10499
25
+ mcp_bridge/config/skills_manifest.json,sha256=6i5KfwqnZUAE9HCyTXoZfKA4tIXMaIZs4Kzf6Kj4bA4,3693
26
+ mcp_bridge/hooks/HOOKS_SETTINGS.json,sha256=Y_VjU9KUEOtp6t8VzQe20ReS1vVuHoPreFGJiv0jK3M,7221
27
+ mcp_bridge/hooks/README.md,sha256=ocKp2BE6U4o8OhnA4dbXoth8A9YD8MYQLi5uXw7bLEo,7549
28
+ mcp_bridge/hooks/__init__.py,sha256=Jc9LUezTLhPi6OUL4WJRdO6QBkQ0hcJCwohL4YnpXgw,4359
29
+ mcp_bridge/hooks/agent_reminder.py,sha256=Zj5hWonnNGK7u0D4kCBJPBfu4oa58HSXJFMe6czDWV0,1894
30
+ mcp_bridge/hooks/auto_slash_command.py,sha256=bXgItodp4aClwfA2cbTI47bYQAaBLLbz71JT3dk0aoo,5239
31
+ mcp_bridge/hooks/budget_optimizer.py,sha256=aLDmQUbgr77qDg9m5LvwUI0PVgPfXG2nrixrlDBiQT4,1304
32
+ mcp_bridge/hooks/claude_limits_hook.py,sha256=tBLN5rhsevnvPzUD8LhF27xS8lc9hKGTLxaSNtVnV6s,3521
33
+ mcp_bridge/hooks/comment_checker.py,sha256=Pi12AdbCy9ZPDI-VgnOQyM3vbSdZnSGfUHRi3XoahTw,3743
34
+ mcp_bridge/hooks/compaction.py,sha256=qTBsEHIPTIFVrZiJQcO3yjfjLtsrRzAeaYMIhbnQZWA,1167
35
+ mcp_bridge/hooks/context.py,sha256=MPM-iforEms8_tA7BBVULzZ68ybJRt_MwafIsqd9M0E,950
36
+ mcp_bridge/hooks/context_monitor.py,sha256=QrpJlVQyildsdo3YMGbsmo79c03geTz-11cR9FWVbpk,1866
37
+ mcp_bridge/hooks/delegation_policy.py,sha256=PTYtb3o9gRmIHfog98DXE4ZYVMgbv70z9iDDkBEKoR4,4031
38
+ mcp_bridge/hooks/directory_context.py,sha256=ieH7-7lsTolAAhEmcPIq2DXjDM_LFlgZ6SwepL7Rtd0,1197
39
+ mcp_bridge/hooks/edit_recovery.py,sha256=WxwXFmB_UiNqH8SbzHaHNSRj9wRQe0f_qruc6PEeglQ,1504
40
+ mcp_bridge/hooks/edit_recovery_policy.py,sha256=ZwVc7BxGq8Dn_II9Tel35nAdtgmhrXIvSZm2w0FdczQ,1602
41
+ mcp_bridge/hooks/empty_message_sanitizer.py,sha256=2IEwcW-fUPYpopwaQRSziKCTQniahXqVxR1fDMEkh6Y,6581
42
+ mcp_bridge/hooks/events.py,sha256=LlsT866bcVT-BE_xm1XhekzrQxFFnZ0vXloOGkDjTaA,5073
43
+ mcp_bridge/hooks/git_noninteractive.py,sha256=WW-O0hU-Bau9SbF4MF9xEqNLXjjbn86g2QlsG0Zn_jw,2844
44
+ mcp_bridge/hooks/keyword_detector.py,sha256=D4NtIN63A9SJIGxNCSFf5d0P_D8_3kafwE3NhuURf_U,6023
45
+ mcp_bridge/hooks/manager.py,sha256=E5jptRh82h5AuIa2vwVu6iq-SQJgdo7WBK-XQRZYUEA,6430
46
+ mcp_bridge/hooks/notification_hook.py,sha256=I-EariXUTkYlmTroDhVVkBi1JBb7QolBzq9Ksq2Lm-w,3015
47
+ mcp_bridge/hooks/parallel_enforcement_policy.py,sha256=F8AjtY9K26I6scx8Co010BW4jeyyOKQp8dCScoSMKrI,3580
48
+ mcp_bridge/hooks/parallel_enforcer.py,sha256=WloKIonvq5qilxRCG1AZ8fzK7DYYIm2DRdSlhNRL4n0,3629
49
+ mcp_bridge/hooks/parallel_execution.py,sha256=VxpFuzrQgcmk5R6ldCNaYtqkovQ8acPQrFwGEwP3mfA,3681
50
+ mcp_bridge/hooks/pre_compact.py,sha256=U0jYP7lYu-wswr7LxAFaVCaCzxUlvpD2MVwAVMrPIQU,3394
51
+ mcp_bridge/hooks/preemptive_compaction.py,sha256=gU34FctwaOpSd6ewmfC3syvYpETyjp1T7t2led0p5QE,7908
52
+ mcp_bridge/hooks/routing_notifications.py,sha256=4pfVZZXcjZXXI_Slx77S4gKqiyjOplkhI8oCX3VZ6BE,2337
53
+ mcp_bridge/hooks/rules_injector.py,sha256=bopS_vsG-7FfBlEB_NnESScsiNC3ExKSYVGiRJeXvv4,16216
54
+ mcp_bridge/hooks/session_idle.py,sha256=anMx4e9m2AGQN1gzKeG7CWZ6ufahuLMk88T7jBBYz94,3506
55
+ mcp_bridge/hooks/session_notifier.py,sha256=qGx_CKDCg1kv_D0nG6VIsIPUkyBmEZwHiaU_DMmoi14,3726
56
+ mcp_bridge/hooks/session_recovery.py,sha256=-8eczDHuZ2vuq6wxykf4KK9uaTw1QUOu6RlwxfuujFQ,6226
57
+ mcp_bridge/hooks/stravinsky_mode.py,sha256=RZy9a6Q2KJPcCmFLg_jBhTECAnu2qKtX2sV-5Gi7jLo,4066
58
+ mcp_bridge/hooks/subagent_stop.py,sha256=dsUBLrIg6n9w-sLcoCPqiBPKiC6r-xLnqj0VtmXZOtA,2829
59
+ mcp_bridge/hooks/task_validator.py,sha256=ntgNuZy6th_NfEs3fCp8cIcYMtGWgoAeKmBVd8fcCxs,2167
60
+ mcp_bridge/hooks/tmux_manager.py,sha256=KmRkaFF9zUPyqtN0oNB_iJ0VCASUCO91YYn8CHFe3sM,4079
61
+ mcp_bridge/hooks/todo_continuation.py,sha256=tmhTVfMZMDuDw4cwyuU7r_TkUqmtAx55u0WNTawgMyo,2652
62
+ mcp_bridge/hooks/todo_delegation.py,sha256=fylKa-wES3EXs59cKYH28gmus9Pprlv0cr7eTRoSekQ,2780
63
+ mcp_bridge/hooks/todo_enforcer.py,sha256=EBC15BaGi4l1sD3YX6CkEtZ7ryulcvdU-ucMdKN7wWM,8104
64
+ mcp_bridge/hooks/tool_messaging.py,sha256=LBwv52NklmNtYbNl_72kik2H1zdvZssYIVUFCUWJK9g,9687
65
+ mcp_bridge/hooks/truncation_policy.py,sha256=TVXALkF5Y53-hwGhQCodz9Xl5RpW7T6agEb3YNfzC2c,1214
66
+ mcp_bridge/hooks/truncator.py,sha256=b1l-fQg6TJsVVVh8_yEPYI1K_H0GmGXpNIrk4loAnSw,520
67
+ mcp_bridge/hooks/post_tool/parallel_validation.py,sha256=YiW5L2Y91LY5gi3mvr2xApfe4tJD2jJvni_CZkNtcOI,3362
68
+ mcp_bridge/hooks/pre_tool/agent_spawn_validator.py,sha256=wQ-XMxzov4D1FdMUHulXYxSzUf0j7IWLsHacgYlwNC4,3198
69
+ mcp_bridge/metrics/cost_tracker.py,sha256=mxXmhDNfcUqjPu-32mfWlFnfkvqRa7FTeGmBmwis37Y,3938
70
+ mcp_bridge/orchestrator/enums.py,sha256=UL7tmGaAKZIsq2hCQWJTMe_s9LSJB1MeFWpXsa0ZEsI,243
71
+ mcp_bridge/orchestrator/router.py,sha256=8JQXHAO6UrHxlvfhwZZU4WVdjkyxB7zhTLkgB3tLbDs,6274
72
+ mcp_bridge/orchestrator/state.py,sha256=api7hGPrsoF28hxU4qw1KqJ2nhe0VlI60TgSeP2dOzQ,1481
73
+ mcp_bridge/orchestrator/visualization.py,sha256=cWaMhqzWODankN05_NgjQDdnEHTUlyIEQhZ46NvohjQ,427
74
+ mcp_bridge/orchestrator/wisdom.py,sha256=4gz-dZ2XtvsLnVqC-hhGCG9zLLU-LQKshPAoWVS_Wz8,1003
75
+ mcp_bridge/prompts/__init__.py,sha256=_IGVwbt3HREjMYZHVqKAd9gjqIcFco9aWInmeBnAvvU,267
76
+ mcp_bridge/prompts/delphi.py,sha256=ZlnLY2o1PrK3CxLLaCkozAGPIAJ5OFmw5u8o6-LXmgI,4960
77
+ mcp_bridge/prompts/dewey.py,sha256=JAFWSX3BS1eSIymL_VoulaFzSjpE4fO9B2SZRvcvihI,9263
78
+ mcp_bridge/prompts/document_writer.py,sha256=hiCbxgTU8HKPJkS0eNpPPtzSqDXPreApU2OqiS6zh-0,5618
79
+ mcp_bridge/prompts/explore.py,sha256=oZxh4fe4KNGa_ozakJSpLYeQVfO4-jQ2M1BSOw1Sw10,5801
80
+ mcp_bridge/prompts/frontend.py,sha256=j91I8k5vcVed13eeX-Ebiv49x9Qj4HO_SQN1xhB8TLQ,4943
81
+ mcp_bridge/prompts/multimodal.py,sha256=Q_rutR7r5iBcLViVfdLxoukCQe2OA0lDJhxkoo0OSMw,2692
82
+ mcp_bridge/prompts/planner.py,sha256=zwxvaiSTWmQ7XuTnHhdNQ3HRih_jBK2o90hwczVVH5k,6950
83
+ mcp_bridge/prompts/stravinsky.py,sha256=Qs-uvyxcKw0UARXVYmIXOinsz8wnogYtoDwzAxMYiPY,28934
84
+ mcp_bridge/proxy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
85
+ mcp_bridge/proxy/client.py,sha256=8Bwg6EICrzKaMAjj06I9nwzy166aLblbXWRFSi0vGJA,2267
86
+ mcp_bridge/proxy/model_server.py,sha256=4KkapKvsKh1P468GizPkBH5iVqdQ9CCM0vp6rPgYTgs,4857
87
+ mcp_bridge/routing/__init__.py,sha256=JVRwWHUdrG7QUOkIfpgzVCrRrACMELCCNuuyhaDZAO8,1059
88
+ mcp_bridge/routing/config.py,sha256=5yDXv3iVP8oE0WUA0m42F7mF-dPpAALQnWPjazYf4i0,8068
89
+ mcp_bridge/routing/model_tiers.py,sha256=F2Qerp-EolPbLhWPAye3m3v6nS8BZgiLZ1Q2LsP0FLY,4124
90
+ mcp_bridge/routing/provider_state.py,sha256=vJVUjuBRX6Ik8kMqb2xmwMjRJeFr2G4RwroNxQzUpoE,9286
91
+ mcp_bridge/routing/task_classifier.py,sha256=OZ9f6nuIlx_9PALShfcSVeqP0c2Beatw8pvB7C1Qz0o,6694
92
+ mcp_bridge/tools/__init__.py,sha256=mSUfDD3hINZoepYqyWZfbYCHfeuNpp43jFqOwNyXdCs,1484
93
+ mcp_bridge/tools/agent_manager.py,sha256=KEI5SecsihusTggCbYwwrpgBinrPfQADceaOvbXZbVo,30476
94
+ mcp_bridge/tools/background_tasks.py,sha256=hPfHTU2hxrGk5skGW3TTKGbSo84VniBMcnne5Eahr3g,5148
95
+ mcp_bridge/tools/code_search.py,sha256=BeKoWtV888IMcUjdTXZC_M2tnp8XVQKu4xPR-yfxjUQ,13933
96
+ mcp_bridge/tools/continuous_loop.py,sha256=OSOv-JM5UxgFwQoJwSviCJttpVLCADe4bdz7B61mhJs,2071
97
+ mcp_bridge/tools/dashboard.py,sha256=D4yzXGQvfZowt443jREk-oxOtGplw-_GURCZKY_0r-0,740
98
+ mcp_bridge/tools/find_code.py,sha256=esOzVRiKK4sorPYbBJarO5ckMIhmE71EMdQSnh_0Q0g,9520
99
+ mcp_bridge/tools/init.py,sha256=lyNvNyL1163iHPe4uyjAyRsfgefJ2_AhUjj23byIo5s,1587
100
+ mcp_bridge/tools/list_directory.py,sha256=CKEvI_atVFluYKSnFOYLacMDT-AJSrN7NVG6shAYFVM,1240
101
+ mcp_bridge/tools/model_invoke.py,sha256=PNW7hNaCElgTJ7hf2EgytaIrMz6GX8wV6bryYa29RvI,72682
102
+ mcp_bridge/tools/mux_client.py,sha256=-U-ismZPB1YcHwCtboTYHLEZxAwcL33AqVamndcCDIY,2008
103
+ mcp_bridge/tools/project_context.py,sha256=6jAqc5Uam6cNmC3zWDih1urhO87AreA_GdVGqCi3ug8,4659
104
+ mcp_bridge/tools/query_classifier.py,sha256=e1r3sy_t4aEyIA-C26AIfde20pabmjjnw0blHIriEOc,17968
105
+ mcp_bridge/tools/read_file.py,sha256=p3561hsCrAMJexeeb63q15A0bNW6BnkZCng5d1C2sOs,2643
106
+ mcp_bridge/tools/replace.py,sha256=O9_l_IHq3Ld5aRydW47FIAQar2ax-mgx1b3WPr8AsaE,1392
107
+ mcp_bridge/tools/run_shell_command.py,sha256=MXubyrttlUuhnvp9ljZQLTMbF2NzJWD_DiBG61GHv4s,1454
108
+ mcp_bridge/tools/search_enhancements.py,sha256=Iao3H8m5xX-yEp8itOMbIYwDFNJXokuz6nHX4NtFILI,11070
109
+ mcp_bridge/tools/semantic_search.py,sha256=-PIAkF7g22UvCxhP71XCiyJvxsOZfJfuVzI2iEPWOgw,129364
110
+ mcp_bridge/tools/session_manager.py,sha256=oIEP5p77QPk2ROYI4MlaELAkN2PDoQE5BDqcmpgFjYU,9219
111
+ mcp_bridge/tools/skill_loader.py,sha256=k_xhBHYBez_hgYWrRyMY-T8HLbc2_h2ndcB6hPsTK84,6000
112
+ mcp_bridge/tools/task_runner.py,sha256=S1PXf4RbZ55cxWdtmUqegRRo_Mhs-s4i9sCfWn-ppEc,3872
113
+ mcp_bridge/tools/templates.py,sha256=Hs3aIy_w8gvNnugZRfHHiKRjDc0e878hXBOAWxWWXow,6994
114
+ mcp_bridge/tools/tool_search.py,sha256=hGjgjbFlDuii-aHVcp8by0gZGDS7L0KchOkAanVxd9M,10824
115
+ mcp_bridge/tools/write_file.py,sha256=pj_MjdqxaEUM_5gR-7ZSm779-OQPIel_M4wAxJZIZGM,926
116
+ mcp_bridge/tools/lsp/__init__.py,sha256=yO15WkuvchYXpKIp88lqpxwyyBjNgTG3EVptf6wWA00,753
117
+ mcp_bridge/tools/lsp/manager.py,sha256=2k5WjKOdD4f-hBWCBp19xExjyYln1bRBm_P740QOxEs,17545
118
+ mcp_bridge/tools/lsp/tools.py,sha256=9ZQJjrusZCcMfl-aEWYPlpdL24j_FySVX5FNenU5sGs,35304
119
+ mcp_bridge/utils/__init__.py,sha256=pbHV4nq5SLUYcAyTmLUZYrp293Ctud57X8hwsMGA_BM,20
120
+ mcp_bridge/utils/cache.py,sha256=lL8GU3LquJ3stU0LRQrym9BFFaYphus4xxHjEaZ-tyA,2532
121
+ mcp_bridge/utils/process.py,sha256=GYUPYIWtxXsW0V2j98ZjRjC3l324EjDfnZ4fwmU6MKY,2109
122
+ mcp_bridge/utils/session_state.py,sha256=v2RknmKUHvtqqCUt-isRfqXI-bDXeRIHOrjYayL4L2k,1521
123
+ mcp_bridge/utils/truncation.py,sha256=ACVReZEwHUnb15pJdiY4PWRFU-uMaeV5O0qADGQ3b5M,2664
124
+ stravinsky_claude_assets/HOOKS_INTEGRATION.md,sha256=lw81i65GIPZaCjLU_0t9cB4iw7-bTj7bTvaxCbPlUpQ,8827
125
+ stravinsky_claude_assets/settings.json,sha256=Ehct7jSv1NElWZZpGRIBOa3smCBGruP0KwoBftRJW74,3490
126
+ stravinsky_claude_assets/task_dependencies.json,sha256=85dBJ1aSxU5z51OHDrrnTjr4KBKbSrN9ZnjEm8IxptQ,643
127
+ stravinsky_claude_assets/agents/HOOKS.md,sha256=dyc1LVamip_r3dD-CpjMGG7wAJnSRViGJmiPVGJZRkY,14512
128
+ stravinsky_claude_assets/agents/code-reviewer.md,sha256=RIn005vHRjyP_30_-14OeiyrhT0onBRGAQzoyzCVFhA,6135
129
+ stravinsky_claude_assets/agents/comment_checker.md,sha256=Zm8as3Hzl08WMn1TEyXmCON4atdEgyE-hdDeFcYcdYo,15395
130
+ stravinsky_claude_assets/agents/debugger.md,sha256=rAwnmExUEgEiV4CMTzKX-EhWlWBTIcsP4hYSOX5Awdg,7468
131
+ stravinsky_claude_assets/agents/delphi.md,sha256=JC8X-ugnzxClTNqP3Q5pNdv-TBbMeK1s4fR7HtRE5mw,13540
132
+ stravinsky_claude_assets/agents/dewey.md,sha256=lgu8-krS1qKWnEwwlr0huApkR8Ag2iVkL2vCdfmKtfs,8081
133
+ stravinsky_claude_assets/agents/explore.md,sha256=4B1BoZw6IpFCCyPaUpOacGXX6Iql2QoOj3NH5KLW8Vo,38239
134
+ stravinsky_claude_assets/agents/frontend.md,sha256=doWY72W7ExWZdGFKkll74juyFsOuEibNwb0MSkY_vWI,13860
135
+ stravinsky_claude_assets/agents/implementation-lead.md,sha256=eQU3VPRGj-Z98JyhOzxk0jab4P57l_4YaG3XDWR3LX4,4752
136
+ stravinsky_claude_assets/agents/momus.md,sha256=QlOUG_vdraLaMnif9GGRM2DFOiTfLEgzMZ_Yiov8PUg,11746
137
+ stravinsky_claude_assets/agents/research-lead.md,sha256=dL9YezLCGXrrW40qrZl_ylvxeXXF9CLX_b1YEuv1hMY,4452
138
+ stravinsky_claude_assets/agents/stravinsky.md,sha256=YxP10TNGGl9JXkQvgmfJXgRZWiBnKyJY5anF3xwrddo,25772
139
+ stravinsky_claude_assets/commands/delphi.md,sha256=d7ZF_Wlgs2YMXiCfNCi8At062Xs7JYxff5RcYq8XsbA,258
140
+ stravinsky_claude_assets/commands/dewey.md,sha256=3k5B_A4Itd9mHlk53oAhY6miEiLXYmY8EpIdKb-xpuM,1345
141
+ stravinsky_claude_assets/commands/git-master.md,sha256=hyDNLYsYNT2qfdmYVCXY8S8W9vDbqt1iC2SVf8RgqrI,2251
142
+ stravinsky_claude_assets/commands/index.md,sha256=gtSNexaopP0K49NApCSeGaO-xcNhPUs5Lqyvb7VjnBA,1407
143
+ stravinsky_claude_assets/commands/publish.md,sha256=l5-vZP2F-viRW7o3DGGaKDUFnoYav7sIuN2-QQNtXxI,2546
144
+ stravinsky_claude_assets/commands/review.md,sha256=Wkdlc2rqSsBByM9JeUhegmAdumvdG5s3nvglf-lHc-0,1718
145
+ stravinsky_claude_assets/commands/strav.md,sha256=_t6mSvU-zvf4B4vQlU8bkyXxmYVx_NGRNVIF_7Pmmww,1792
146
+ stravinsky_claude_assets/commands/stravinsky.md,sha256=N818qjVecB4j73G793AcZphMK5WsPCfuiknz28IFc7E,10014
147
+ stravinsky_claude_assets/commands/verify.md,sha256=h4lFedXsBvtloFPLeG6gCG-RnuLsrS9e-9T4keIGQ_Y,1193
148
+ stravinsky_claude_assets/commands/version.md,sha256=HPQdXSjaianHq8Ouzvndd_SlmquselH_lrqlRH2WV34,160
149
+ stravinsky_claude_assets/commands/str/agent_cancel.md,sha256=L_C5zrLQNb-3rXwxoPeTJ00-NJF-OWsJU1dlI_KIlcw,1965
150
+ stravinsky_claude_assets/commands/str/agent_list.md,sha256=yIqpD8-k2KiT8jF2kg_WBk-esvODb6GYxtAI2AsCcAQ,2344
151
+ stravinsky_claude_assets/commands/str/agent_output.md,sha256=GBeyL--GaA0ZwJ8zAJOljyqfHRszE9u_v1TJc-t8KxQ,2248
152
+ stravinsky_claude_assets/commands/str/agent_progress.md,sha256=fE-lARVujpt5pw85azozQboIaO_60IchW4MmLY8IBAs,2003
153
+ stravinsky_claude_assets/commands/str/agent_retry.md,sha256=efmecEPEHbP0ETCI5geMxcrsV3JMYR2urVvLf-W1wMk,2373
154
+ stravinsky_claude_assets/commands/str/cancel.md,sha256=wLR-HJLUbtUiIAc5H4mam-61AolJyumk2ONPwxO86Yw,1456
155
+ stravinsky_claude_assets/commands/str/clean.md,sha256=sbNMqh-paSHFJ7-Ai9qQitJdZBPpXDUlBvD_Vxrb3kE,2529
156
+ stravinsky_claude_assets/commands/str/continue.md,sha256=WC-wRq4qeyZaQjVtUo2mJKD1HY6DTSvRLWQo_ndOMdA,1053
157
+ stravinsky_claude_assets/commands/str/index.md,sha256=o3xXC3Cl-v_VCDzJ0VaO0ia9fBQJiwqVAdSRhsewxj0,5087
158
+ stravinsky_claude_assets/commands/str/list_watchers.md,sha256=R6IP8f4LlHjLK8Z7uIkaQXrrHr4LMDtCzY8p15UtK_Y,2423
159
+ stravinsky_claude_assets/commands/str/search.md,sha256=6wktVnMzRypca49TJkGxVaAbkwIMu9v-E0ktRRT9GZo,5738
160
+ stravinsky_claude_assets/commands/str/start_filewatch.md,sha256=I8ofahmZ7a2qoCsq9uDixLWDmYwh4uNs9Ly5_QuiNxg,3822
161
+ stravinsky_claude_assets/commands/str/stats.md,sha256=AX9PxtCZ3u2PO3Mv1GFniEU3mqToQgF2TO3cRnuV_pw,1555
162
+ stravinsky_claude_assets/commands/str/stop_filewatch.md,sha256=2-khANC6Qy8wSTEyD-RStgdFKZgu7H-e_XVNGuSHBb4,2102
163
+ stravinsky_claude_assets/commands/str/unwatch.md,sha256=_Or8WEAjBEl4qrLHZLrVt8G31ZAciGJIGxJ8eZEZHYY,1005
164
+ stravinsky_claude_assets/commands/str/watch.md,sha256=8nC_mCGcAoMR5SMnMZko_fLtIUPmU65Q_ZgYinEXFks,1581
165
+ stravinsky_claude_assets/hooks/README.md,sha256=R21nfsnyu8-hkHvGTr16AWzf2-EPcCgXBivwVq7Tptw,8241
166
+ stravinsky_claude_assets/hooks/comment_checker.py,sha256=Fh2kuE7ro4Xc-f1VFhtpBEBNL2y_pnDOJFU43CHBxDE,6211
167
+ stravinsky_claude_assets/hooks/context.py,sha256=JBHqnX75qtMO3JAEFooBEAK6DxcsVaXykhrP7tdFm6E,949
168
+ stravinsky_claude_assets/hooks/context_monitor.py,sha256=MLKFcEKmH3yL9fiKNHajT2UkAK5RQtaFn0sbvoD9H4Y,4505
169
+ stravinsky_claude_assets/hooks/dependency_tracker.py,sha256=xzeSW99RBG2zW7XrQvjU4FoJSqvVqMVvBg3-oOxQR8g,1861
170
+ stravinsky_claude_assets/hooks/edit_recovery.py,sha256=1OWpb3v87txFUsgnNe1hoeTI7rIKCkKYONld5BK1TyA,1503
171
+ stravinsky_claude_assets/hooks/execution_state_tracker.py,sha256=pgy-7MyGKwBjghV2MzpzNvCLZzp6ktDsDUZYb35doz0,1761
172
+ stravinsky_claude_assets/hooks/notification_hook.py,sha256=GElHxaIn0BF935IXuRQjYERk7W_msBiCm0UwutumdiM,2770
173
+ stravinsky_claude_assets/hooks/notification_hook_v2.py,sha256=c42d6gzKiIL-DQHtOlfR5rT5Ntrbjy-BoN_yuChhaL8,2453
174
+ stravinsky_claude_assets/hooks/parallel_execution.py,sha256=70ivSpFSfMYEoZBQFZKMd4s32TyQcKCCRV3gnZJweW4,8911
175
+ stravinsky_claude_assets/hooks/parallel_reinforcement.py,sha256=ejxGwijUnzLnwnbxgZ-vT9NlG5gasd9WPtgDOqjyfK0,3291
176
+ stravinsky_claude_assets/hooks/parallel_reinforcement_v2.py,sha256=iuUVRk6qvtiNRqbTraLPrrRmwE7B49ya1dX2QEgFqVg,2699
177
+ stravinsky_claude_assets/hooks/pre_compact.py,sha256=0A9UXYnNmhJVmstmB2thY_ZdXi6WHtARBK8lrANUNik,3407
178
+ stravinsky_claude_assets/hooks/ralph_loop.py,sha256=cMwr8H9cFtLjd2E4xpH1QRs_jZMEd155mQX0TDQ0HWM,5486
179
+ stravinsky_claude_assets/hooks/session_recovery.py,sha256=3SQJaWFi85-PamPngb56cKw-iqnIPpMslQLtZElV5xY,6780
180
+ stravinsky_claude_assets/hooks/stop_hook.py,sha256=WflRkKBfwFtc0o7wmJ4i9K5k9axLkccstecdBtFCDMY,2383
181
+ stravinsky_claude_assets/hooks/stravinsky_metrics.py,sha256=xMlRqIE_w5993VJcRH_EdkU11gzTqJE1ce7YPDUdCz8,4571
182
+ stravinsky_claude_assets/hooks/stravinsky_mode.py,sha256=WWipXry-Yyp7jpc-j658sypSapP54hq7piowxfYDEyI,4198
183
+ stravinsky_claude_assets/hooks/subagent_stop.py,sha256=GUPY3FNVAtsc6J4PbddSRK9XuDs-gw2CaFoGXt5gsME,2865
184
+ stravinsky_claude_assets/hooks/todo_continuation.py,sha256=id-HZPokAj4TRGsv2kBFUxIvSvmgUz0OrCWCr2jIs3M,3379
185
+ stravinsky_claude_assets/hooks/todo_delegation.py,sha256=H4qwKW7X4luQQLj72VJy6uTIY4gCV_Q1dMyjlPnawqM,3001
186
+ stravinsky_claude_assets/hooks/tool_messaging.py,sha256=W684MDNVkX9z2woGNaeBTRFJ2nK30jMfdK6eMNGkZcE,10109
187
+ stravinsky_claude_assets/hooks/truncator.py,sha256=h3hb8sZXTvc59C0-5GdZwCVZHlxBKdo47JT9TMxHG3g,530
188
+ stravinsky_claude_assets/rules/deployment_safety.md,sha256=sf8mWOMAp9VseC7oQPT_ky1_ly07XxPzLHs-r-aPm1Y,1423
189
+ stravinsky_claude_assets/rules/integration_wiring.md,sha256=inwZEIle6oq2ndUCwEIoSa5cw-FY67DTJL5s0KSoi18,3069
190
+ stravinsky_claude_assets/rules/pypi_deployment.md,sha256=e8XCkBVw67ukhCU9Nc_tSftgurKbC5oaEe47az0dVVA,6815
191
+ stravinsky_claude_assets/rules/stravinsky_orchestrator.md,sha256=dEzwJEkb3s5UPz2zUjeZDaRSTejNuhszl3SpVgx85Z4,1391
192
+ stravinsky_claude_assets/skills/chrome-devtools/SKILL.md,sha256=teNzQgwWdICRxaEqT_RC1u81WuuZr-gCnGTNpIfASqc,2774
193
+ stravinsky_claude_assets/skills/sqlite/SKILL.md,sha256=r-862TuuTBskzWiQn98ybuaExW4jl_hOXfKX-5dSGC0,2103
194
+ stravinsky_claude_assets/skills/supabase/SKILL.md,sha256=f7PSELlDASIQVXNtOyJIez2V3-T1-G7qVJNLuKcPato,1849
195
+ stravinsky-0.4.66.dist-info/METADATA,sha256=U1-C9YDz9rVPXk-jc2F-Wof4CJWii9iyf5U0vCpDV3o,23940
196
+ stravinsky-0.4.66.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
197
+ stravinsky-0.4.66.dist-info/entry_points.txt,sha256=NKR_sRhcFv90phlkF2vy3TEHJE-ViodlmgqFrm_T7yU,269
198
+ stravinsky-0.4.66.dist-info/RECORD,,
@@ -2,4 +2,5 @@
2
2
  stravinsky = mcp_bridge.server:main
3
3
  stravinsky-auth = mcp_bridge.auth.cli:main
4
4
  stravinsky-install-hooks = mcp_bridge.cli.install_hooks:main
5
+ stravinsky-proxy = mcp_bridge.proxy.model_server:main
5
6
  stravinsky-sessions = mcp_bridge.cli.session_report:main
@@ -0,0 +1,316 @@
1
+ # Stravinsky Hooks Integration
2
+
3
+ ## Overview
4
+
5
+ Stravinsky uses native Claude Code hooks for delegation enforcement and user messaging. All hooks are configured in `.claude/settings.json` and execute as Python scripts.
6
+
7
+ ## Hook Types
8
+
9
+ ### PreToolUse Hooks
10
+
11
+ **Purpose**: Intercept tool calls before execution to enforce delegation patterns.
12
+
13
+ #### 1. Stravinsky Mode Enforcer (`stravinsky_mode.py`)
14
+
15
+ **Location**: `mcp_bridge/native_hooks/stravinsky_mode.py`
16
+
17
+ **Matcher**: `Read,Search,Grep,Bash,Edit,MultiEdit`
18
+
19
+ **Behavior**:
20
+ - Checks for `~/.stravinsky_mode` marker file
21
+ - When active, blocks native file tools (Read, Grep, Bash, etc.)
22
+ - Forces use of Task tool for native subagent delegation
23
+ - Outputs user-friendly messages like: `🎭 explore('Delegating Grep (searching for 'auth')')`
24
+
25
+ **Example**:
26
+ ```
27
+ User prompt: "Find all authentication code"
28
+ Without hook: Uses Grep directly
29
+ With hook: Blocks Grep, shows "🎭 explore('Delegating Grep (searching for 'auth')')", forces Task delegation
30
+ ```
31
+
32
+ **Delegation Pattern**:
33
+ ```python
34
+ # WRONG (blocked by hook)
35
+ Grep(pattern="auth", path="src/")
36
+
37
+ # CORRECT (enforced by hook)
38
+ Task(
39
+ subagent_type="explore",
40
+ prompt="Find all authentication implementations in src/",
41
+ description="Find auth code"
42
+ )
43
+ ```
44
+
45
+ ### PostToolUse Hooks
46
+
47
+ **Purpose**: Execute after tool completion for messaging and result processing.
48
+
49
+ #### 1. Truncator (`truncator.py`)
50
+
51
+ **Location**: `mcp_bridge/native_hooks/truncator.py`
52
+
53
+ **Matcher**: `*` (all tools)
54
+
55
+ **Behavior**: Truncates large tool outputs to prevent context overflow.
56
+
57
+ #### 2. Tool Messaging (`tool_messaging.py`)
58
+
59
+ **Location**: `mcp_bridge/native_hooks/tool_messaging.py`
60
+
61
+ **Matcher**: `mcp__stravinsky__*,mcp__grep-app__*,Task`
62
+
63
+ **Behavior**:
64
+ - Outputs concise messages about which tool/agent was used
65
+ - Format: `🔧 tool-name('description')` or `🎯 agent:model('description')`
66
+
67
+ **Examples**:
68
+ ```
69
+ 🔧 ast-grep('Searching AST in src/ for class definitions')
70
+ 🔧 grep('Searching for authentication patterns')
71
+ 🔧 lsp-diagnostics('Checking server.py for errors')
72
+ 🎯 explore:gemini-3-flash('Finding all API endpoints')
73
+ 🎯 delphi:gpt-5.2-medium('Analyzing architecture trade-offs')
74
+ 🎯 frontend:gemini-3-pro-high('Designing login component')
75
+ ```
76
+
77
+ #### 3. Edit Recovery (`edit_recovery.py`)
78
+
79
+ **Location**: `mcp_bridge/native_hooks/edit_recovery.py`
80
+
81
+ **Matcher**: `Edit,MultiEdit`
82
+
83
+ **Behavior**: Backs up file state before edits for recovery.
84
+
85
+ #### 4. Todo Delegation (`todo_delegation.py`)
86
+
87
+ **Location**: `mcp_bridge/native_hooks/todo_delegation.py`
88
+
89
+ **Matcher**: `TodoWrite`
90
+
91
+ **Behavior**: After TodoWrite, enforces parallel Task delegation for independent todos.
92
+
93
+ **Example Output**:
94
+ ```
95
+ [PARALLEL DELEGATION REQUIRED]
96
+
97
+ You just created 3 pending TODOs. Before your NEXT response:
98
+
99
+ 1. Identify which TODOs are INDEPENDENT (can run simultaneously)
100
+ 2. For EACH independent TODO, spawn a Task agent:
101
+ Task(subagent_type="explore", prompt="[TODO details]", run_in_background=true)
102
+ 3. Fire ALL Task calls in ONE response - do NOT wait between them
103
+ ```
104
+
105
+ ### UserPromptSubmit Hooks
106
+
107
+ **Purpose**: Execute before prompt processing to inject context.
108
+
109
+ #### 1. Context Injector (`context.py`)
110
+
111
+ **Location**: `mcp_bridge/native_hooks/context.py`
112
+
113
+ **Matcher**: `*` (all prompts)
114
+
115
+ **Behavior**: Injects project context (git status, rules, todos) into prompts.
116
+
117
+ ## Configuration
118
+
119
+ **File**: `.claude/settings.json`
120
+
121
+ ```json
122
+ {
123
+ "hooks": {
124
+ "PreToolUse": [
125
+ {
126
+ "matcher": "Read,Search,Grep,Bash,Edit,MultiEdit",
127
+ "hooks": [{
128
+ "type": "command",
129
+ "command": "python3 /path/to/stravinsky_mode.py"
130
+ }]
131
+ }
132
+ ],
133
+ "PostToolUse": [
134
+ {
135
+ "matcher": "*",
136
+ "hooks": [{
137
+ "type": "command",
138
+ "command": "python3 /path/to/truncator.py"
139
+ }]
140
+ },
141
+ {
142
+ "matcher": "mcp__stravinsky__*,mcp__grep-app__*,Task",
143
+ "hooks": [{
144
+ "type": "command",
145
+ "command": "python3 /path/to/tool_messaging.py"
146
+ }]
147
+ },
148
+ {
149
+ "matcher": "Edit,MultiEdit",
150
+ "hooks": [{
151
+ "type": "command",
152
+ "command": "python3 /path/to/edit_recovery.py"
153
+ }]
154
+ },
155
+ {
156
+ "matcher": "TodoWrite",
157
+ "hooks": [{
158
+ "type": "command",
159
+ "command": "python3 /path/to/todo_delegation.py"
160
+ }]
161
+ }
162
+ ],
163
+ "UserPromptSubmit": [
164
+ {
165
+ "matcher": "*",
166
+ "hooks": [{
167
+ "type": "command",
168
+ "command": "python3 /path/to/context.py"
169
+ }]
170
+ }
171
+ ]
172
+ }
173
+ }
174
+ ```
175
+
176
+ ## Hook Execution Flow
177
+
178
+ ### Stravinsky Mode Active
179
+
180
+ ```
181
+ User: "Find all auth code"
182
+
183
+ PreToolUse (stravinsky_mode.py)
184
+ ↓ Detects ~/.stravinsky_mode exists
185
+ ↓ Tool: Grep
186
+ ↓ BLOCK (exit code 2)
187
+ ↓ Output: 🎭 explore('Delegating Grep (searching for 'auth')')
188
+
189
+ Claude receives block + message
190
+ ↓ Uses Task tool instead:
191
+ ↓ Task(subagent_type="explore", prompt="Find all auth...", description="Find auth")
192
+
193
+ PostToolUse (tool_messaging.py)
194
+ ↓ Tool: Task
195
+ ↓ Output: 🎯 explore:gemini-3-flash('Find auth')
196
+
197
+ User sees both messages:
198
+ 🎭 explore('Delegating Grep (searching for 'auth')')
199
+ 🎯 explore:gemini-3-flash('Find auth')
200
+ ```
201
+
202
+ ### Normal Mode (No Stravinsky Mode)
203
+
204
+ ```
205
+ User: "Read server.py"
206
+
207
+ PreToolUse (stravinsky_mode.py)
208
+ ↓ ~/.stravinsky_mode does NOT exist
209
+ ↓ ALLOW (exit code 0)
210
+
211
+ Read tool executes normally
212
+
213
+ PostToolUse (truncator.py)
214
+ ↓ Truncates output if too large
215
+
216
+ User sees normal Read output
217
+ ```
218
+
219
+ ### MCP Tool Usage
220
+
221
+ ```
222
+ Claude: Uses lsp_diagnostics(file_path="server.py")
223
+
224
+ PostToolUse (tool_messaging.py)
225
+ ↓ Tool: mcp__stravinsky__lsp_diagnostics
226
+ ↓ Output: 🔧 lsp-diagnostics('Checking server.py for errors')
227
+
228
+ User sees: 🔧 lsp-diagnostics('Checking server.py for errors')
229
+ [followed by actual diagnostic results]
230
+ ```
231
+
232
+ ## Activating Stravinsky Mode
233
+
234
+ ```bash
235
+ # Activate (blocks native tools, forces Task delegation)
236
+ touch ~/.stravinsky_mode
237
+
238
+ # Or with configuration
239
+ echo '{"active": true, "agent_type": "explore"}' > ~/.stravinsky_mode
240
+
241
+ # Deactivate (allows normal tool usage)
242
+ rm ~/.stravinsky_mode
243
+ ```
244
+
245
+ ## Agent Model Mapping
246
+
247
+ When user sees messages like `agent:model('description')`, the model shows which backend is being used:
248
+
249
+ | Agent | Model | Cost | Use Case |
250
+ |-------|-------|------|----------|
251
+ | explore | gemini-3-flash | Free | Code search, file reading |
252
+ | dewey | gemini-3-flash | Cheap | Documentation research |
253
+ | code-reviewer | sonnet | Cheap | Code quality analysis |
254
+ | debugger | sonnet | Medium | Root cause investigation |
255
+ | frontend | gemini-3-pro-high | Medium | UI/UX design |
256
+ | delphi | gpt-5.2-medium | Expensive | Strategic architecture |
257
+
258
+ ## User Messaging Examples
259
+
260
+ ### Successful Delegation
261
+
262
+ ```
263
+ 🎭 explore('Delegating Grep (searching for 'authentication')')
264
+ 🎯 explore:gemini-3-flash('Find all auth implementations')
265
+ [Agent output: Found 15 authentication files...]
266
+ ```
267
+
268
+ ### Multi-Agent Parallel Execution
269
+
270
+ ```
271
+ 🎯 explore:gemini-3-flash('Find API endpoints')
272
+ 🎯 dewey:gemini-3-flash('Research JWT best practices')
273
+ 🎯 code-reviewer:sonnet('Review auth implementation')
274
+ [All agents execute in parallel, results aggregated]
275
+ ```
276
+
277
+ ### Strategic Consultation
278
+
279
+ ```
280
+ 🎯 delphi:gpt-5.2-medium('Architecture decision: WebSocket vs SSE')
281
+ [Delphi provides deep strategic analysis with trade-offs]
282
+ ```
283
+
284
+ ## Hook Benefits
285
+
286
+ 1. **Enforcement**: PreToolUse hooks ensure delegation patterns are followed
287
+ 2. **Transparency**: PostToolUse messaging shows which tools/agents are being used
288
+ 3. **Cost Awareness**: Model names in messages (gemini-3-flash, gpt-5.2-medium) indicate cost
289
+ 4. **Zero Overhead**: Hooks run in-process, no CLI spawning latency
290
+ 5. **Hard Boundaries**: Native subagents inherit explicit tool lists, enforced at Claude Code level
291
+ 6. **Fail-Safe**: Hooks fail open (allow on error) to prevent blocking workflow
292
+
293
+ ## Debugging Hooks
294
+
295
+ ```bash
296
+ # Test hook directly
297
+ echo '{"toolName": "Grep", "params": {"pattern": "auth"}}' | python3 stravinsky_mode.py
298
+ # Should output delegation message if ~/.stravinsky_mode exists
299
+
300
+ # View hook output in Claude Code logs
301
+ tail -f ~/.claude/logs/hooks.log
302
+
303
+ # Disable hook temporarily
304
+ # Edit .claude/settings.json, remove hook from matcher
305
+ ```
306
+
307
+ ## Next Steps
308
+
309
+ 1. **Test hooks**: Run `/stravinsky` command to activate mode, verify delegation enforcement
310
+ 2. **Monitor messaging**: Check that tool messages appear in stderr
311
+ 3. **Verify parallel execution**: TodoWrite → Task delegation should fire simultaneously
312
+ 4. **Cost optimization**: Track which agents are used most, optimize routing
313
+
314
+ ---
315
+
316
+ **Summary**: Stravinsky hooks provide transparent, enforced delegation with user-friendly messaging showing which specialist agent/tool is handling each task, with clear cost indicators via model names.