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.
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/stravinsky.md +3 -3
- stravinsky-0.4.41/.claude/commands/git-master.md +112 -0
- stravinsky-0.4.41/.claude/commands/str/list_watchers.md +96 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/strav.md +83 -11
- stravinsky-0.4.41/.claude/hooks/README.md +248 -0
- stravinsky-0.4.41/.claude/hooks/comment_checker.py +193 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/context_monitor.py +1 -1
- stravinsky-0.4.41/.claude/hooks/dependency_tracker.py +73 -0
- stravinsky-0.4.41/.claude/hooks/execution_state_tracker.py +68 -0
- stravinsky-0.4.41/.claude/hooks/notification_hook_v2.py +96 -0
- stravinsky-0.4.41/.claude/hooks/parallel_execution.py +243 -0
- stravinsky-0.4.41/.claude/hooks/parallel_reinforcement.py +106 -0
- stravinsky-0.4.41/.claude/hooks/parallel_reinforcement_v2.py +112 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/pre_compact.py +1 -1
- stravinsky-0.4.41/.claude/hooks/session_recovery.py +263 -0
- {stravinsky-0.4.17/mcp_bridge → stravinsky-0.4.41/.claude}/hooks/todo_delegation.py +14 -9
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/tool_messaging.py +17 -6
- stravinsky-0.4.41/.claude/rules/deployment_safety.md +51 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/rules/pypi_deployment.md +1 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/settings.json +18 -38
- stravinsky-0.4.41/.claude/task_dependencies.json +9 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.gitignore +3 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/PKG-INFO +51 -9
- {stravinsky-0.4.17 → stravinsky-0.4.41}/README.md +49 -8
- stravinsky-0.4.41/mcp_bridge/__init__.py +1 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/__init__.py +16 -6
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/cli.py +9 -6
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/oauth.py +1 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/openai_oauth.py +4 -7
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/token_store.py +0 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/cli/install_hooks.py +46 -107
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/cli/session_report.py +0 -3
- stravinsky-0.4.41/mcp_bridge/config/hook_config.py +247 -0
- stravinsky-0.4.41/mcp_bridge/config/rate_limits.py +317 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/agent_reminder.py +4 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/auto_slash_command.py +5 -5
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/budget_optimizer.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/comment_checker.py +3 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/compaction.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/context.py +2 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/context_monitor.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/directory_context.py +3 -3
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/edit_recovery.py +3 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/empty_message_sanitizer.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/git_noninteractive.py +4 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/keyword_detector.py +8 -10
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/manager.py +31 -22
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/notification_hook.py +2 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/parallel_enforcer.py +5 -5
- {stravinsky-0.4.17/.claude → stravinsky-0.4.41/mcp_bridge}/hooks/parallel_execution.py +22 -10
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/pre_compact.py +8 -9
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/preemptive_compaction.py +2 -3
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/rules_injector.py +11 -19
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/session_idle.py +4 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/session_notifier.py +4 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/session_recovery.py +4 -5
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/stravinsky_mode.py +1 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/subagent_stop.py +1 -3
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/task_validator.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/tmux_manager.py +7 -8
- {stravinsky-0.4.17/.claude → stravinsky-0.4.41/mcp_bridge}/hooks/todo_delegation.py +4 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/todo_enforcer.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/truncator.py +1 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/notifications.py +3 -4
- stravinsky-0.4.41/mcp_bridge/prompts/__init__.py +13 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/dewey.py +1 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/planner.py +2 -4
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/stravinsky.py +10 -11
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/server.py +143 -14
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/server_tools.py +56 -4
- stravinsky-0.4.41/mcp_bridge/tools/__init__.py +49 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/agent_manager.py +104 -67
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/background_tasks.py +13 -17
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/code_search.py +1 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/continuous_loop.py +0 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/init.py +1 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/lsp/manager.py +14 -20
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/lsp/tools.py +7 -7
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/model_invoke.py +649 -77
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/project_context.py +1 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/query_classifier.py +132 -49
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/semantic_search.py +325 -51
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/session_manager.py +0 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/skill_loader.py +0 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/task_runner.py +5 -7
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/templates.py +3 -3
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/update_manager.py +33 -37
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/update_manager_pypi.py +6 -8
- {stravinsky-0.4.17 → stravinsky-0.4.41}/pyproject.toml +14 -1
- stravinsky-0.4.17/.github/workflows/publish.yml +0 -37
- stravinsky-0.4.17/.stravinsky/agents/agent_0de66569.out +0 -117
- stravinsky-0.4.17/.stravinsky/agents/agent_0de66569.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_2ef2b305.out +0 -142
- stravinsky-0.4.17/.stravinsky/agents/agent_2ef2b305.system +0 -9
- stravinsky-0.4.17/.stravinsky/agents/agent_32fc606b.out +0 -123
- stravinsky-0.4.17/.stravinsky/agents/agent_32fc606b.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_4ed6ec7a.out +0 -132
- stravinsky-0.4.17/.stravinsky/agents/agent_4ed6ec7a.system +0 -9
- stravinsky-0.4.17/.stravinsky/agents/agent_622ae68b.out +0 -119
- stravinsky-0.4.17/.stravinsky/agents/agent_622ae68b.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_6731b838.out +0 -278
- stravinsky-0.4.17/.stravinsky/agents/agent_6731b838.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_6c536f2d.out +0 -103
- stravinsky-0.4.17/.stravinsky/agents/agent_6c536f2d.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_6ecde4ed.out +0 -76
- stravinsky-0.4.17/.stravinsky/agents/agent_6ecde4ed.system +0 -9
- stravinsky-0.4.17/.stravinsky/agents/agent_85449406.out +0 -13
- stravinsky-0.4.17/.stravinsky/agents/agent_85449406.system +0 -9
- stravinsky-0.4.17/.stravinsky/agents/agent_940fbc06.out +0 -170
- stravinsky-0.4.17/.stravinsky/agents/agent_940fbc06.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_adc99d05.out +0 -128
- stravinsky-0.4.17/.stravinsky/agents/agent_adc99d05.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_b3c09833.out +0 -124
- stravinsky-0.4.17/.stravinsky/agents/agent_b3c09833.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_cdd28e91.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents/agent_fee89a04.out +0 -81
- stravinsky-0.4.17/.stravinsky/agents/agent_fee89a04.system +0 -10
- stravinsky-0.4.17/.stravinsky/agents.json +0 -1442
- stravinsky-0.4.17/.stravinsky/mcp_mode +0 -1
- stravinsky-0.4.17/ARCHITECTURE.md +0 -1133
- stravinsky-0.4.17/AUTO_INDEXING_TEST_SUMMARY.md +0 -353
- stravinsky-0.4.17/CLAUDE.md +0 -250
- stravinsky-0.4.17/COMPREHENSIVE_TEST_IMPLEMENTATION.txt +0 -602
- stravinsky-0.4.17/DELEGATION_FLOW_VERIFICATION.md +0 -437
- stravinsky-0.4.17/FILEWATCHER_DOCS_UPDATE_SUMMARY.md +0 -186
- stravinsky-0.4.17/FILEWATCHER_README.md +0 -413
- stravinsky-0.4.17/INSTALL.md +0 -484
- stravinsky-0.4.17/LSP_CLEANUP_FIX.md +0 -141
- stravinsky-0.4.17/MANUAL_TESTING_CHECKLIST.md +0 -368
- stravinsky-0.4.17/TESTING_AUTO_INDEXING.md +0 -348
- stravinsky-0.4.17/TESTING_SUMMARY_FINAL.md +0 -234
- stravinsky-0.4.17/TEST_ARTIFACTS_README.md +0 -430
- stravinsky-0.4.17/TEST_EXECUTION_REPORT.md +0 -157
- stravinsky-0.4.17/TEST_PLAN_AUTO_INDEXING.md +0 -500
- stravinsky-0.4.17/assets/logo.png +0 -0
- stravinsky-0.4.17/assets/logo.png.txt +0 -2
- stravinsky-0.4.17/assets/logo_small.png +0 -0
- stravinsky-0.4.17/deploy.sh +0 -201
- stravinsky-0.4.17/docs/AGENTS.md +0 -382
- stravinsky-0.4.17/docs/AGENT_WORKFLOW.md +0 -974
- stravinsky-0.4.17/docs/CALL_FLOW_DIAGRAM.txt +0 -168
- stravinsky-0.4.17/docs/COMMANDS_CONSOLIDATION_REPORT.md +0 -310
- stravinsky-0.4.17/docs/COMMANDS_QUICK_SUMMARY.md +0 -114
- stravinsky-0.4.17/docs/DEPLOYMENT.md +0 -121
- stravinsky-0.4.17/docs/FILEWATCHER_ARCHITECTURE.md +0 -530
- stravinsky-0.4.17/docs/FILEWATCHER_IMPLEMENTATION_SUMMARY.md +0 -375
- stravinsky-0.4.17/docs/FILE_WATCHER.md +0 -357
- stravinsky-0.4.17/docs/HOOKS_INSTALLATION.md +0 -194
- stravinsky-0.4.17/docs/IMPLEMENTATION_PLAN.md +0 -768
- stravinsky-0.4.17/docs/INDEX_TOOL_CALL_LOGGING.md +0 -189
- stravinsky-0.4.17/docs/INJECTION_POINT_CODE_LOCATIONS.txt +0 -322
- stravinsky-0.4.17/docs/INSTALL.md +0 -370
- stravinsky-0.4.17/docs/INTELLIGENT_SEARCH_DESIGN.md +0 -650
- stravinsky-0.4.17/docs/KEYRING_AUTH_FIX.md +0 -216
- stravinsky-0.4.17/docs/LSP_MIGRATION_GUIDE.md +0 -1452
- stravinsky-0.4.17/docs/MCP_TOOL_CALL_INJECTION_POINTS.md +0 -377
- stravinsky-0.4.17/docs/MODEL_ROUTING.md +0 -72
- stravinsky-0.4.17/docs/QUERY_CLASSIFIER_DESIGN.md +0 -533
- stravinsky-0.4.17/docs/QUICKSTART.md +0 -127
- stravinsky-0.4.17/docs/QUICK_REFERENCE_INJECTION_POINTS.md +0 -97
- stravinsky-0.4.17/docs/README.md +0 -79
- stravinsky-0.4.17/docs/README_COMMANDS_ANALYSIS.md +0 -180
- stravinsky-0.4.17/docs/README_filewatcher.md +0 -213
- stravinsky-0.4.17/docs/REPORT_INDEX.txt +0 -189
- stravinsky-0.4.17/docs/SEARCH_STRATEGY_TEST_SUITE.md +0 -308
- stravinsky-0.4.17/docs/SEARCH_TOOLS_ANALYSIS.md +0 -826
- stravinsky-0.4.17/docs/SEMANTIC_INDEXING_INDEX.md +0 -214
- stravinsky-0.4.17/docs/SEMANTIC_SEARCH_BEST_PRACTICES.md +0 -1392
- stravinsky-0.4.17/docs/SEMANTIC_SEARCH_QUICK_START.md +0 -215
- stravinsky-0.4.17/docs/SEMANTIC_SEARCH_TESTING_INDEX.md +0 -278
- stravinsky-0.4.17/docs/SEMANTIC_SEARCH_TEST_REPORT.md +0 -225
- stravinsky-0.4.17/docs/SEMANTIC_WATCHER_USAGE.md +0 -400
- stravinsky-0.4.17/docs/TEMPLATES_STRUCTURE.md +0 -170
- stravinsky-0.4.17/docs/TROUBLESHOOTING.md +0 -382
- stravinsky-0.4.17/docs/USAGE.md +0 -537
- stravinsky-0.4.17/docs/architecture_workflow.md +0 -157
- stravinsky-0.4.17/docs/filewatcher_design_summary.md +0 -287
- stravinsky-0.4.17/docs/filewatcher_integration_design.md +0 -606
- stravinsky-0.4.17/docs/filewatcher_quick_reference.md +0 -448
- stravinsky-0.4.17/docs/remediation_plan.md +0 -38
- stravinsky-0.4.17/docs/semantic_indexing_analysis.md +0 -444
- stravinsky-0.4.17/docs/semantic_indexing_quick_start.md +0 -422
- stravinsky-0.4.17/error.log +0 -4
- stravinsky-0.4.17/logs/.1c0e2f6784d083818216ed08579b248b799c8d86-audit.json +0 -40
- stravinsky-0.4.17/logs/.270de9f01be3c37438e0ae9542f6c146c85078ae-audit.json +0 -40
- stravinsky-0.4.17/logs/application-2026-01-03.log +0 -45
- stravinsky-0.4.17/logs/application-2026-01-04.log +0 -232
- stravinsky-0.4.17/logs/application-2026-01-05.log +0 -172
- stravinsky-0.4.17/logs/error-2026-01-03.log +0 -3
- stravinsky-0.4.17/logs/error-2026-01-04.log +0 -24
- stravinsky-0.4.17/logs/error-2026-01-05.log +0 -15
- stravinsky-0.4.17/mcp_bridge/__init__.py +0 -1
- stravinsky-0.4.17/mcp_bridge/hooks/parallel_execution.py +0 -111
- stravinsky-0.4.17/mcp_bridge/prompts/__init__.py +0 -20
- stravinsky-0.4.17/mcp_bridge/tools/__init__.py +0 -42
- stravinsky-0.4.17/repro_spawn.py +0 -29
- stravinsky-0.4.17/run-mcp.sh +0 -3
- stravinsky-0.4.17/stdout_handshake_auditor.py +0 -85
- stravinsky-0.4.17/test_lsp_cleanup.py +0 -103
- stravinsky-0.4.17/test_lsp_manager.py +0 -307
- stravinsky-0.4.17/tests/MANUAL_TEST_GUIDE.md +0 -414
- stravinsky-0.4.17/tests/QUERY_CLASSIFICATION_GUIDE.md +0 -375
- stravinsky-0.4.17/tests/QUICK_REFERENCE.md +0 -165
- stravinsky-0.4.17/tests/README.md +0 -89
- stravinsky-0.4.17/tests/README_AUTO_INDEXING_TESTS.md +0 -354
- stravinsky-0.4.17/tests/README_QUERY_CLASSIFICATION.md +0 -344
- stravinsky-0.4.17/tests/TEST_IMPLEMENTATION_SUMMARY.md +0 -391
- stravinsky-0.4.17/tests/TEST_RESULTS_direct_gemini.md +0 -299
- stravinsky-0.4.17/tests/conftest.py +0 -8
- stravinsky-0.4.17/tests/manual_test_auto_indexing.py +0 -788
- stravinsky-0.4.17/tests/manual_test_hooks.py +0 -57
- stravinsky-0.4.17/tests/test_auto_indexing.py +0 -571
- stravinsky-0.4.17/tests/test_direct_gemini.py +0 -321
- stravinsky-0.4.17/tests/test_file_watcher.py +0 -314
- stravinsky-0.4.17/tests/test_file_watcher_no_index.py +0 -404
- stravinsky-0.4.17/tests/test_hooks.py +0 -56
- stravinsky-0.4.17/tests/test_new_hooks.py +0 -316
- stravinsky-0.4.17/tests/test_query_classification.py +0 -982
- stravinsky-0.4.17/tests/test_query_classifier.py +0 -566
- stravinsky-0.4.17/tests/test_symlink_boundary.py +0 -148
- stravinsky-0.4.17/tests/test_update_manager.py +0 -1120
- stravinsky-0.4.17/tests/verify_semantic_search.py +0 -155
- stravinsky-0.4.17/uv.lock +0 -2542
- stravinsky-0.4.17/verify_tools.py +0 -43
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/HOOKS_INTEGRATION.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/HOOKS.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/code-reviewer.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/debugger.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/delphi.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/dewey.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/explore.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/frontend.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/implementation-lead.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/agents/research-lead.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/delphi.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/dewey.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/index.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/publish.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/review.md +0 -0
- stravinsky-0.4.17/.claude/commands/str-cancel.md → stravinsky-0.4.41/.claude/commands/str/cancel.md +0 -0
- stravinsky-0.4.17/.claude/commands/str-clean.md → stravinsky-0.4.41/.claude/commands/str/clean.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/index.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/search.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/start_filewatch.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/stats.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/str/stop_filewatch.md +0 -0
- stravinsky-0.4.17/.claude/commands/str-unwatch.md → stravinsky-0.4.41/.claude/commands/str/unwatch.md +0 -0
- stravinsky-0.4.17/.claude/commands/str-watch.md → stravinsky-0.4.41/.claude/commands/str/watch.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/verify.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/commands/version.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/context.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/edit_recovery.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/notification_hook.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/stravinsky_mode.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/subagent_stop.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/todo_continuation.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/hooks/truncator.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/skills/chrome-devtools/SKILL.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/skills/sqlite/SKILL.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/.claude/skills/supabase/SKILL.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/auth/token_refresh.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/cli/__init__.py +1 -1
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/MANIFEST_SCHEMA.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/README.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/__init__.py +2 -2
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/hooks.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/hooks_manifest.json +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/config/skills_manifest.json +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/HOOKS_SETTINGS.json +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/README.md +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/__init__.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/todo_continuation.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/hooks/tool_messaging.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/delphi.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/document_writer.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/explore.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/frontend.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/prompts/multimodal.py +0 -0
- {stravinsky-0.4.17 → stravinsky-0.4.41}/mcp_bridge/tools/lsp/__init__.py +8 -8
- {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
|
|
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
|
|
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-
|
|
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
|
|
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-
|
|
67
|
+
## ⚠️ CRITICAL: PARALLEL-FUWT WORKFLOW
|
|
47
68
|
|
|
48
|
-
**For
|
|
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
|
|
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
|
|
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
|
-
###
|
|
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
|
|
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)
|