claude-mpm 4.24.0__py3-none-any.whl → 5.0.9__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 claude-mpm might be problematic. Click here for more details.

Files changed (502) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +12 -0
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +721 -911
  5. claude_mpm/agents/PM_INSTRUCTIONS_TEACH.md +1322 -0
  6. claude_mpm/agents/WORKFLOW.md +4 -4
  7. claude_mpm/agents/__init__.py +6 -0
  8. claude_mpm/agents/agent_loader.py +1 -4
  9. claude_mpm/agents/base_agent.json +6 -3
  10. claude_mpm/agents/base_agent_loader.py +10 -35
  11. claude_mpm/agents/frontmatter_validator.py +1 -1
  12. claude_mpm/agents/templates/{circuit_breakers.md → circuit-breakers.md} +370 -3
  13. claude_mpm/agents/templates/context-management-examples.md +544 -0
  14. claude_mpm/agents/templates/{pm_red_flags.md → pm-red-flags.md} +48 -0
  15. claude_mpm/agents/templates/pr-workflow-examples.md +427 -0
  16. claude_mpm/agents/templates/research-gate-examples.md +669 -0
  17. claude_mpm/agents/templates/structured-questions-examples.md +615 -0
  18. claude_mpm/agents/templates/ticket-completeness-examples.md +139 -0
  19. claude_mpm/agents/templates/ticketing-examples.md +277 -0
  20. claude_mpm/cli/__init__.py +38 -2
  21. claude_mpm/cli/commands/__init__.py +2 -0
  22. claude_mpm/cli/commands/agent_source.py +774 -0
  23. claude_mpm/cli/commands/agent_state_manager.py +188 -30
  24. claude_mpm/cli/commands/agents.py +959 -36
  25. claude_mpm/cli/commands/agents_cleanup.py +210 -0
  26. claude_mpm/cli/commands/agents_discover.py +338 -0
  27. claude_mpm/cli/commands/aggregate.py +1 -1
  28. claude_mpm/cli/commands/analyze.py +3 -3
  29. claude_mpm/cli/commands/auto_configure.py +2 -6
  30. claude_mpm/cli/commands/config.py +7 -4
  31. claude_mpm/cli/commands/configure.py +769 -45
  32. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  33. claude_mpm/cli/commands/configure_navigation.py +63 -46
  34. claude_mpm/cli/commands/debug.py +12 -12
  35. claude_mpm/cli/commands/doctor.py +10 -2
  36. claude_mpm/cli/commands/hook_errors.py +277 -0
  37. claude_mpm/cli/commands/local_deploy.py +1 -4
  38. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  39. claude_mpm/cli/commands/mpm_init/core.py +49 -1
  40. claude_mpm/cli/commands/mpm_init/git_activity.py +10 -10
  41. claude_mpm/cli/commands/mpm_init/prompts.py +6 -6
  42. claude_mpm/cli/commands/postmortem.py +401 -0
  43. claude_mpm/cli/commands/run.py +123 -165
  44. claude_mpm/cli/commands/skill_source.py +694 -0
  45. claude_mpm/cli/commands/skills.py +757 -20
  46. claude_mpm/cli/executor.py +78 -3
  47. claude_mpm/cli/interactive/agent_wizard.py +955 -45
  48. claude_mpm/cli/parsers/agent_source_parser.py +171 -0
  49. claude_mpm/cli/parsers/agents_parser.py +256 -4
  50. claude_mpm/cli/parsers/base_parser.py +53 -0
  51. claude_mpm/cli/parsers/config_parser.py +96 -43
  52. claude_mpm/cli/parsers/skill_source_parser.py +169 -0
  53. claude_mpm/cli/parsers/skills_parser.py +145 -0
  54. claude_mpm/cli/parsers/source_parser.py +138 -0
  55. claude_mpm/cli/startup.py +538 -106
  56. claude_mpm/cli/startup_display.py +480 -0
  57. claude_mpm/cli/utils.py +1 -1
  58. claude_mpm/cli_module/commands.py +1 -1
  59. claude_mpm/commands/{mpm-auto-configure.md → mpm-agents-auto-configure.md} +9 -0
  60. claude_mpm/commands/mpm-agents-detect.md +9 -0
  61. claude_mpm/commands/{mpm-agents.md → mpm-agents-list.md} +9 -0
  62. claude_mpm/commands/mpm-agents-recommend.md +9 -0
  63. claude_mpm/commands/{mpm-config.md → mpm-config-view.md} +9 -0
  64. claude_mpm/commands/mpm-doctor.md +9 -0
  65. claude_mpm/commands/mpm-help.md +14 -2
  66. claude_mpm/commands/mpm-init.md +27 -2
  67. claude_mpm/commands/mpm-monitor.md +9 -0
  68. claude_mpm/commands/mpm-postmortem.md +123 -0
  69. claude_mpm/commands/{mpm-resume.md → mpm-session-resume.md} +9 -0
  70. claude_mpm/commands/mpm-status.md +9 -0
  71. claude_mpm/commands/{mpm-organize.md → mpm-ticket-organize.md} +9 -0
  72. claude_mpm/commands/mpm-ticket-view.md +552 -0
  73. claude_mpm/commands/mpm-version.md +9 -0
  74. claude_mpm/commands/mpm.md +10 -0
  75. claude_mpm/config/agent_presets.py +488 -0
  76. claude_mpm/config/agent_sources.py +325 -0
  77. claude_mpm/config/skill_presets.py +392 -0
  78. claude_mpm/config/skill_sources.py +590 -0
  79. claude_mpm/constants.py +13 -0
  80. claude_mpm/core/claude_runner.py +5 -34
  81. claude_mpm/core/config.py +16 -0
  82. claude_mpm/core/constants.py +1 -1
  83. claude_mpm/core/framework/__init__.py +3 -16
  84. claude_mpm/core/framework/loaders/file_loader.py +54 -101
  85. claude_mpm/core/framework/loaders/instruction_loader.py +25 -5
  86. claude_mpm/core/hook_error_memory.py +381 -0
  87. claude_mpm/core/hook_manager.py +41 -2
  88. claude_mpm/core/interactive_session.py +91 -10
  89. claude_mpm/core/logger.py +3 -1
  90. claude_mpm/core/oneshot_session.py +71 -8
  91. claude_mpm/core/protocols/__init__.py +23 -0
  92. claude_mpm/core/protocols/runner_protocol.py +103 -0
  93. claude_mpm/core/protocols/session_protocol.py +131 -0
  94. claude_mpm/core/shared/singleton_manager.py +11 -4
  95. claude_mpm/core/system_context.py +38 -0
  96. claude_mpm/dashboard/static/css/activity.css +69 -69
  97. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  98. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  99. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  100. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  101. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  102. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  103. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  104. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  105. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  106. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  107. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  108. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  109. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  110. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  111. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  112. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  113. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  114. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  115. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  116. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  117. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  118. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  119. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  120. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  121. claude_mpm/dashboard/templates/code_simple.html +23 -23
  122. claude_mpm/dashboard/templates/index.html +18 -18
  123. claude_mpm/experimental/cli_enhancements.py +1 -5
  124. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  125. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  126. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  127. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  128. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  129. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  130. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  131. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  132. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  133. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  134. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  135. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  136. claude_mpm/hooks/failure_learning/__init__.py +2 -8
  137. claude_mpm/hooks/failure_learning/failure_detection_hook.py +1 -6
  138. claude_mpm/hooks/failure_learning/fix_detection_hook.py +1 -6
  139. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +1 -6
  140. claude_mpm/hooks/kuzu_response_hook.py +1 -5
  141. claude_mpm/models/git_repository.py +198 -0
  142. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  143. claude_mpm/scripts/start_activity_logging.py +3 -1
  144. claude_mpm/services/agents/agent_builder.py +45 -9
  145. claude_mpm/services/agents/agent_preset_service.py +238 -0
  146. claude_mpm/services/agents/agent_selection_service.py +484 -0
  147. claude_mpm/services/agents/auto_deploy_index_parser.py +569 -0
  148. claude_mpm/services/agents/cache_git_manager.py +621 -0
  149. claude_mpm/services/agents/deployment/agent_deployment.py +126 -2
  150. claude_mpm/services/agents/deployment/agent_discovery_service.py +105 -73
  151. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  152. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +1 -5
  153. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  154. claude_mpm/services/agents/deployment/agent_restore_handler.py +1 -4
  155. claude_mpm/services/agents/deployment/agent_template_builder.py +236 -15
  156. claude_mpm/services/agents/deployment/agents_directory_resolver.py +101 -15
  157. claude_mpm/services/agents/deployment/async_agent_deployment.py +2 -1
  158. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  159. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +115 -15
  160. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  161. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +1 -4
  162. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +363 -0
  163. claude_mpm/services/agents/deployment/single_agent_deployer.py +2 -2
  164. claude_mpm/services/agents/deployment/system_instructions_deployer.py +168 -46
  165. claude_mpm/services/agents/deployment/validation/deployment_validator.py +2 -2
  166. claude_mpm/services/agents/git_source_manager.py +629 -0
  167. claude_mpm/services/agents/loading/framework_agent_loader.py +9 -12
  168. claude_mpm/services/agents/local_template_manager.py +50 -10
  169. claude_mpm/services/agents/single_tier_deployment_service.py +696 -0
  170. claude_mpm/services/agents/sources/__init__.py +13 -0
  171. claude_mpm/services/agents/sources/agent_sync_state.py +516 -0
  172. claude_mpm/services/agents/sources/git_source_sync_service.py +1087 -0
  173. claude_mpm/services/agents/startup_sync.py +239 -0
  174. claude_mpm/services/agents/toolchain_detector.py +474 -0
  175. claude_mpm/services/analysis/__init__.py +25 -0
  176. claude_mpm/services/analysis/postmortem_reporter.py +474 -0
  177. claude_mpm/services/analysis/postmortem_service.py +765 -0
  178. claude_mpm/services/cli/session_pause_manager.py +1 -1
  179. claude_mpm/services/command_deployment_service.py +200 -6
  180. claude_mpm/services/core/base.py +7 -2
  181. claude_mpm/services/core/interfaces/__init__.py +1 -3
  182. claude_mpm/services/core/interfaces/health.py +1 -4
  183. claude_mpm/services/core/models/__init__.py +2 -11
  184. claude_mpm/services/diagnostics/checks/__init__.py +4 -0
  185. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  186. claude_mpm/services/diagnostics/checks/agent_sources_check.py +577 -0
  187. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  188. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  189. claude_mpm/services/diagnostics/checks/mcp_services_check.py +7 -15
  190. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  191. claude_mpm/services/diagnostics/checks/skill_sources_check.py +587 -0
  192. claude_mpm/services/diagnostics/diagnostic_runner.py +9 -0
  193. claude_mpm/services/diagnostics/doctor_reporter.py +40 -10
  194. claude_mpm/services/event_bus/direct_relay.py +3 -3
  195. claude_mpm/services/events/consumers/logging.py +1 -2
  196. claude_mpm/services/git/__init__.py +21 -0
  197. claude_mpm/services/git/git_operations_service.py +494 -0
  198. claude_mpm/services/github/__init__.py +21 -0
  199. claude_mpm/services/github/github_cli_service.py +397 -0
  200. claude_mpm/services/infrastructure/monitoring/__init__.py +1 -5
  201. claude_mpm/services/infrastructure/monitoring/aggregator.py +1 -6
  202. claude_mpm/services/instructions/__init__.py +9 -0
  203. claude_mpm/services/instructions/instruction_cache_service.py +374 -0
  204. claude_mpm/services/local_ops/__init__.py +3 -13
  205. claude_mpm/services/local_ops/health_checks/__init__.py +1 -3
  206. claude_mpm/services/local_ops/health_manager.py +1 -4
  207. claude_mpm/services/local_ops/resource_monitor.py +1 -1
  208. claude_mpm/services/mcp_config_manager.py +75 -145
  209. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  210. claude_mpm/services/mcp_gateway/core/process_pool.py +22 -16
  211. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +1 -6
  212. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  213. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  214. claude_mpm/services/mcp_service_verifier.py +6 -3
  215. claude_mpm/services/model/model_router.py +1 -2
  216. claude_mpm/services/monitor/daemon.py +29 -9
  217. claude_mpm/services/monitor/daemon_manager.py +96 -19
  218. claude_mpm/services/monitor/server.py +2 -2
  219. claude_mpm/services/port_manager.py +1 -1
  220. claude_mpm/services/pr/__init__.py +14 -0
  221. claude_mpm/services/pr/pr_template_service.py +329 -0
  222. claude_mpm/services/project/documentation_manager.py +2 -1
  223. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  224. claude_mpm/services/runner_configuration_service.py +16 -3
  225. claude_mpm/services/session_management_service.py +16 -4
  226. claude_mpm/services/skills/__init__.py +18 -0
  227. claude_mpm/services/skills/git_skill_source_manager.py +1169 -0
  228. claude_mpm/services/skills/skill_discovery_service.py +568 -0
  229. claude_mpm/services/skills_config.py +547 -0
  230. claude_mpm/services/skills_deployer.py +955 -0
  231. claude_mpm/services/socketio/handlers/connection.py +1 -1
  232. claude_mpm/services/socketio/handlers/git.py +1 -1
  233. claude_mpm/services/socketio/server/core.py +1 -4
  234. claude_mpm/services/socketio/server/main.py +1 -3
  235. claude_mpm/services/system_instructions_service.py +1 -3
  236. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  237. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  238. claude_mpm/services/unified/deployment_strategies/vercel.py +1 -5
  239. claude_mpm/services/unified/unified_deployment.py +1 -5
  240. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  241. claude_mpm/services/visualization/__init__.py +1 -5
  242. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  243. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +2 -2
  244. claude_mpm/skills/skills_registry.py +0 -1
  245. claude_mpm/templates/questions/__init__.py +38 -0
  246. claude_mpm/templates/questions/base.py +193 -0
  247. claude_mpm/templates/questions/pr_strategy.py +311 -0
  248. claude_mpm/templates/questions/project_init.py +385 -0
  249. claude_mpm/templates/questions/ticket_mgmt.py +394 -0
  250. claude_mpm/tools/__main__.py +8 -8
  251. claude_mpm/utils/agent_dependency_loader.py +77 -10
  252. claude_mpm/utils/agent_filters.py +288 -0
  253. claude_mpm/utils/dependency_cache.py +3 -1
  254. claude_mpm/utils/gitignore.py +241 -0
  255. claude_mpm/utils/migration.py +372 -0
  256. claude_mpm/utils/progress.py +387 -0
  257. claude_mpm/utils/robust_installer.py +2 -4
  258. claude_mpm/utils/structured_questions.py +619 -0
  259. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/METADATA +396 -43
  260. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/RECORD +268 -422
  261. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  262. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  263. claude_mpm/agents/templates/agent-manager.json +0 -273
  264. claude_mpm/agents/templates/agentic-coder-optimizer.json +0 -248
  265. claude_mpm/agents/templates/api_qa.json +0 -183
  266. claude_mpm/agents/templates/clerk-ops.json +0 -235
  267. claude_mpm/agents/templates/code_analyzer.json +0 -101
  268. claude_mpm/agents/templates/content-agent.json +0 -358
  269. claude_mpm/agents/templates/dart_engineer.json +0 -307
  270. claude_mpm/agents/templates/data_engineer.json +0 -225
  271. claude_mpm/agents/templates/documentation.json +0 -238
  272. claude_mpm/agents/templates/engineer.json +0 -210
  273. claude_mpm/agents/templates/gcp_ops_agent.json +0 -253
  274. claude_mpm/agents/templates/golang_engineer.json +0 -270
  275. claude_mpm/agents/templates/imagemagick.json +0 -264
  276. claude_mpm/agents/templates/java_engineer.json +0 -346
  277. claude_mpm/agents/templates/javascript_engineer_agent.json +0 -380
  278. claude_mpm/agents/templates/local_ops_agent.json +0 -1840
  279. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  280. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  281. claude_mpm/agents/templates/memory_manager.json +0 -158
  282. claude_mpm/agents/templates/nextjs_engineer.json +0 -285
  283. claude_mpm/agents/templates/ops.json +0 -185
  284. claude_mpm/agents/templates/php-engineer.json +0 -287
  285. claude_mpm/agents/templates/product_owner.json +0 -338
  286. claude_mpm/agents/templates/project_organizer.json +0 -144
  287. claude_mpm/agents/templates/prompt-engineer.json +0 -737
  288. claude_mpm/agents/templates/python_engineer.json +0 -387
  289. claude_mpm/agents/templates/qa.json +0 -243
  290. claude_mpm/agents/templates/react_engineer.json +0 -239
  291. claude_mpm/agents/templates/refactoring_engineer.json +0 -276
  292. claude_mpm/agents/templates/research.json +0 -188
  293. claude_mpm/agents/templates/ruby-engineer.json +0 -280
  294. claude_mpm/agents/templates/rust_engineer.json +0 -275
  295. claude_mpm/agents/templates/security.json +0 -202
  296. claude_mpm/agents/templates/svelte-engineer.json +0 -225
  297. claude_mpm/agents/templates/tauri_engineer.json +0 -274
  298. claude_mpm/agents/templates/ticketing.json +0 -178
  299. claude_mpm/agents/templates/typescript_engineer.json +0 -285
  300. claude_mpm/agents/templates/vercel_ops_agent.json +0 -412
  301. claude_mpm/agents/templates/version_control.json +0 -159
  302. claude_mpm/agents/templates/web_qa.json +0 -400
  303. claude_mpm/agents/templates/web_ui.json +0 -189
  304. claude_mpm/commands/mpm-tickets.md +0 -151
  305. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  306. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +0 -188
  307. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +0 -156
  308. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +0 -38
  309. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +0 -92
  310. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +0 -248
  311. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  312. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  313. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  314. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  315. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  316. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  317. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  318. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  319. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  320. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  321. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  322. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  323. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  324. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  325. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +0 -1
  326. claude_mpm/dashboard/static/built/components/activity-tree.js +0 -2
  327. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +0 -777
  328. claude_mpm/dashboard/static/built/components/agent-inference.js +0 -2
  329. claude_mpm/dashboard/static/built/components/build-tracker.js +0 -333
  330. claude_mpm/dashboard/static/built/components/code-simple.js +0 -857
  331. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +0 -353
  332. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +0 -235
  333. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +0 -409
  334. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +0 -435
  335. claude_mpm/dashboard/static/built/components/code-tree.js +0 -2
  336. claude_mpm/dashboard/static/built/components/code-viewer.js +0 -2
  337. claude_mpm/dashboard/static/built/components/connection-debug.js +0 -654
  338. claude_mpm/dashboard/static/built/components/diff-viewer.js +0 -891
  339. claude_mpm/dashboard/static/built/components/event-processor.js +0 -2
  340. claude_mpm/dashboard/static/built/components/event-viewer.js +0 -2
  341. claude_mpm/dashboard/static/built/components/export-manager.js +0 -2
  342. claude_mpm/dashboard/static/built/components/file-change-tracker.js +0 -443
  343. claude_mpm/dashboard/static/built/components/file-change-viewer.js +0 -690
  344. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +0 -2
  345. claude_mpm/dashboard/static/built/components/file-viewer.js +0 -2
  346. claude_mpm/dashboard/static/built/components/hud-library-loader.js +0 -2
  347. claude_mpm/dashboard/static/built/components/hud-manager.js +0 -2
  348. claude_mpm/dashboard/static/built/components/hud-visualizer.js +0 -2
  349. claude_mpm/dashboard/static/built/components/module-viewer.js +0 -2
  350. claude_mpm/dashboard/static/built/components/nav-bar.js +0 -145
  351. claude_mpm/dashboard/static/built/components/page-structure.js +0 -429
  352. claude_mpm/dashboard/static/built/components/session-manager.js +0 -2
  353. claude_mpm/dashboard/static/built/components/socket-manager.js +0 -2
  354. claude_mpm/dashboard/static/built/components/ui-state-manager.js +0 -2
  355. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +0 -2
  356. claude_mpm/dashboard/static/built/components/working-directory.js +0 -2
  357. claude_mpm/dashboard/static/built/connection-manager.js +0 -536
  358. claude_mpm/dashboard/static/built/dashboard.js +0 -2
  359. claude_mpm/dashboard/static/built/extension-error-handler.js +0 -164
  360. claude_mpm/dashboard/static/built/react/events.js +0 -30
  361. claude_mpm/dashboard/static/built/shared/dom-helpers.js +0 -396
  362. claude_mpm/dashboard/static/built/shared/event-bus.js +0 -330
  363. claude_mpm/dashboard/static/built/shared/event-filter-service.js +0 -540
  364. claude_mpm/dashboard/static/built/shared/logger.js +0 -385
  365. claude_mpm/dashboard/static/built/shared/page-structure.js +0 -249
  366. claude_mpm/dashboard/static/built/shared/tooltip-service.js +0 -253
  367. claude_mpm/dashboard/static/built/socket-client.js +0 -2
  368. claude_mpm/dashboard/static/built/tab-isolation-fix.js +0 -185
  369. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  370. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  371. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  372. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  373. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  374. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  375. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  376. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  377. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  378. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  379. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  380. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  381. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  382. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  383. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  384. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  385. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  386. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  387. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  388. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  389. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  390. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  391. claude_mpm/dashboard/static/events.html +0 -607
  392. claude_mpm/dashboard/static/index.html +0 -635
  393. claude_mpm/dashboard/static/js/shared/dom-helpers.js +0 -396
  394. claude_mpm/dashboard/static/js/shared/event-bus.js +0 -330
  395. claude_mpm/dashboard/static/js/shared/logger.js +0 -385
  396. claude_mpm/dashboard/static/js/shared/tooltip-service.js +0 -253
  397. claude_mpm/dashboard/static/js/stores/dashboard-store.js +0 -562
  398. claude_mpm/dashboard/static/legacy/activity.html +0 -736
  399. claude_mpm/dashboard/static/legacy/agents.html +0 -786
  400. claude_mpm/dashboard/static/legacy/files.html +0 -747
  401. claude_mpm/dashboard/static/legacy/tools.html +0 -831
  402. claude_mpm/dashboard/static/monitors.html +0 -431
  403. claude_mpm/dashboard/static/production/events.html +0 -659
  404. claude_mpm/dashboard/static/production/main.html +0 -698
  405. claude_mpm/dashboard/static/production/monitors.html +0 -483
  406. claude_mpm/dashboard/static/test-archive/dashboard.html +0 -635
  407. claude_mpm/dashboard/static/test-archive/debug-events.html +0 -147
  408. claude_mpm/dashboard/static/test-archive/test-navigation.html +0 -256
  409. claude_mpm/dashboard/static/test-archive/test-react-exports.html +0 -180
  410. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  411. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +0 -79
  412. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +0 -178
  413. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +0 -577
  414. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +0 -467
  415. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +0 -537
  416. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +0 -730
  417. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +0 -112
  418. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +0 -146
  419. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +0 -412
  420. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +0 -81
  421. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +0 -362
  422. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +0 -312
  423. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +0 -152
  424. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +0 -668
  425. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +0 -587
  426. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +0 -438
  427. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +0 -391
  428. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +0 -119
  429. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +0 -148
  430. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +0 -483
  431. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +0 -452
  432. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +0 -449
  433. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +0 -411
  434. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +0 -14
  435. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +0 -58
  436. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +0 -68
  437. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +0 -69
  438. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +0 -131
  439. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +0 -325
  440. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +0 -490
  441. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +0 -425
  442. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +0 -499
  443. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +0 -86
  444. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +0 -43
  445. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +0 -47
  446. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +0 -65
  447. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +0 -30
  448. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +0 -16
  449. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +0 -160
  450. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +0 -412
  451. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +0 -602
  452. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +0 -915
  453. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +0 -916
  454. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +0 -752
  455. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +0 -1237
  456. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +0 -189
  457. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +0 -500
  458. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +0 -464
  459. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +0 -619
  460. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +0 -437
  461. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +0 -231
  462. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +0 -170
  463. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +0 -602
  464. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +0 -821
  465. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +0 -742
  466. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +0 -726
  467. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +0 -764
  468. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +0 -831
  469. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +0 -226
  470. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +0 -901
  471. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +0 -901
  472. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +0 -775
  473. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +0 -937
  474. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +0 -770
  475. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +0 -961
  476. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +0 -119
  477. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +0 -253
  478. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +0 -145
  479. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +0 -543
  480. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +0 -741
  481. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +0 -470
  482. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +0 -458
  483. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +0 -639
  484. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +0 -140
  485. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +0 -572
  486. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +0 -411
  487. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +0 -569
  488. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +0 -695
  489. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +0 -184
  490. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +0 -459
  491. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +0 -479
  492. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +0 -687
  493. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +0 -758
  494. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +0 -868
  495. /claude_mpm/agents/templates/{git_file_tracking.md → git-file-tracking.md} +0 -0
  496. /claude_mpm/agents/templates/{pm_examples.md → pm-examples.md} +0 -0
  497. /claude_mpm/agents/templates/{response_format.md → response-format.md} +0 -0
  498. /claude_mpm/agents/templates/{validation_templates.md → validation-templates.md} +0 -0
  499. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/WHEEL +0 -0
  500. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/entry_points.txt +0 -0
  501. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/licenses/LICENSE +0 -0
  502. {claude_mpm-4.24.0.dist-info → claude_mpm-5.0.9.dist-info}/top_level.txt +0 -0
claude_mpm/cli/startup.py CHANGED
@@ -10,6 +10,47 @@ Part of cli/__init__.py refactoring to reduce file size and improve modularity.
10
10
 
11
11
  import os
12
12
  import sys
13
+ import warnings
14
+ from pathlib import Path
15
+
16
+
17
+ def check_legacy_cache() -> None:
18
+ """Check for legacy cache/agents/ directory and warn user.
19
+
20
+ WHY: cache/agents/ is deprecated in favor of cache/remote-agents/.
21
+ Research confirmed that cache/remote-agents/ is the canonical location
22
+ with 26 active code references, while cache/agents/ has only 7 legacy references.
23
+
24
+ DESIGN DECISIONS:
25
+ - Non-blocking warning: Doesn't stop execution, just informs user
26
+ - Migration guidance: Provides clear path to migrate
27
+ - One-time check: Only warns if legacy cache contains files
28
+ """
29
+ home = Path.home()
30
+ legacy_cache = home / ".claude-mpm" / "cache" / "agents"
31
+ canonical_cache = home / ".claude-mpm" / "cache" / "remote-agents"
32
+ migration_marker = home / ".claude-mpm" / "cache" / ".migrated_to_remote_agents"
33
+
34
+ # Skip if already migrated or no legacy cache
35
+ if migration_marker.exists() or not legacy_cache.exists():
36
+ return
37
+
38
+ # Check if legacy cache has actual agent files
39
+ legacy_files = list(legacy_cache.glob("*.md")) + list(legacy_cache.glob("*.json"))
40
+ if not legacy_files:
41
+ return
42
+
43
+ # Only warn if canonical cache doesn't exist (indicating unmigrated system)
44
+ if not canonical_cache.exists():
45
+ warnings.warn(
46
+ f"\n⚠️ DEPRECATION: Legacy cache directory detected\n"
47
+ f" Location: {legacy_cache}\n"
48
+ f" Files found: {len(legacy_files)}\n\n"
49
+ f"The 'cache/agents/' directory is deprecated. Please migrate to 'cache/remote-agents/'.\n"
50
+ f"Run: python scripts/migrate_cache_to_remote_agents.py\n",
51
+ DeprecationWarning,
52
+ stacklevel=2,
53
+ )
13
54
 
14
55
 
15
56
  def setup_early_environment(argv):
@@ -19,23 +60,34 @@ def setup_early_environment(argv):
19
60
  WHY: Some commands need special environment handling before any logging
20
61
  or service initialization occurs.
21
62
 
63
+ CRITICAL: Suppress ALL logging by default until setup_mcp_server_logging()
64
+ configures the user's preference. This prevents early loggers (like
65
+ ProjectInitializer and service.* loggers) from logging at INFO level before
66
+ we know the user's logging preference.
67
+
22
68
  Args:
23
69
  argv: Command line arguments
24
70
 
25
71
  Returns:
26
72
  Processed argv list
27
73
  """
74
+ import logging
75
+
28
76
  # Disable telemetry and set cleanup flags early
29
77
  os.environ.setdefault("DISABLE_TELEMETRY", "1")
30
78
  os.environ.setdefault("CLAUDE_MPM_SKIP_CLEANUP", "0")
31
79
 
32
- # EARLY CHECK: Suppress logging for configure command
80
+ # CRITICAL: Suppress ALL logging by default
81
+ # This catches all loggers (claude_mpm.*, service.*, framework_loader, etc.)
82
+ # This will be overridden by setup_mcp_server_logging() based on user preference
83
+ logging.getLogger().setLevel(logging.CRITICAL + 1) # Root logger catches everything
84
+
85
+ # Process argv
33
86
  if argv is None:
34
87
  argv = sys.argv[1:]
35
- if "configure" in argv or (len(argv) > 0 and argv[0] == "configure"):
36
- import logging
37
88
 
38
- logging.getLogger("claude_mpm").setLevel(logging.WARNING)
89
+ # EARLY CHECK: Additional suppression for configure command
90
+ if "configure" in argv or (len(argv) > 0 and argv[0] == "configure"):
39
91
  os.environ["CLAUDE_MPM_SKIP_CLEANUP"] = "1"
40
92
 
41
93
  return argv
@@ -86,7 +138,7 @@ def deploy_bundled_skills():
86
138
  WHY: Automatically deploy skills from the bundled/ directory to .claude/skills/
87
139
  to ensure skills are available for agents without manual intervention.
88
140
 
89
- DESIGN DECISION: Deployment happens silently on startup with logging only.
141
+ DESIGN DECISION: Deployment happens with minimal feedback (checkmark on success).
90
142
  Failures are logged but don't block startup to ensure claude-mpm remains
91
143
  functional even if skills deployment fails. Respects auto_deploy config setting.
92
144
  """
@@ -117,9 +169,13 @@ def deploy_bundled_skills():
117
169
  logger = get_logger("cli")
118
170
 
119
171
  if deployment_result.get("deployed"):
120
- logger.info(
121
- f"Skills: Deployed {len(deployment_result['deployed'])} skill(s)"
122
- )
172
+ # Show simple feedback for deployed skills
173
+ deployed_count = len(deployment_result["deployed"])
174
+ print(f"✓ Bundled skills ready ({deployed_count} deployed)", flush=True)
175
+ logger.info(f"Skills: Deployed {deployed_count} skill(s)")
176
+ elif not deployment_result.get("errors"):
177
+ # No deployment needed, skills already present
178
+ print("✓ Bundled skills ready", flush=True)
123
179
 
124
180
  if deployment_result.get("errors"):
125
181
  logger.warning(
@@ -142,7 +198,8 @@ def discover_and_link_runtime_skills():
142
198
  WHY: Automatically discover and link skills added to .claude/skills/
143
199
  without requiring manual configuration.
144
200
 
145
- DESIGN DECISION: Failures are logged but don't block startup to ensure
201
+ DESIGN DECISION: Provides simple feedback on completion.
202
+ Failures are logged but don't block startup to ensure
146
203
  claude-mpm remains functional even if skills discovery fails.
147
204
  """
148
205
  try:
@@ -151,6 +208,8 @@ def discover_and_link_runtime_skills():
151
208
  )
152
209
 
153
210
  discover_skills()
211
+ # Show simple success feedback
212
+ print("✓ Runtime skills linked", flush=True)
154
213
  except Exception as e:
155
214
  # Import logger here to avoid circular imports
156
215
  from ..core.logger import get_logger
@@ -160,18 +219,459 @@ def discover_and_link_runtime_skills():
160
219
  # Continue execution - skills discovery failure shouldn't block startup
161
220
 
162
221
 
222
+ def deploy_output_style_on_startup():
223
+ """
224
+ Deploy claude-mpm output style to Claude Code on CLI startup.
225
+
226
+ WHY: Automatically deploy and activate the output style to ensure consistent,
227
+ professional communication without emojis and exclamation points. This ensures
228
+ the style is available even when using Claude Code directly (not via chat command).
229
+
230
+ DESIGN DECISION: This is non-blocking and idempotent. It uses OutputStyleManager
231
+ which handles version detection, file deployment, and settings activation.
232
+ Only works for Claude Code >= 1.0.83.
233
+ """
234
+ try:
235
+ from pathlib import Path
236
+
237
+ from ..core.output_style_manager import OutputStyleManager
238
+
239
+ # Create OutputStyleManager instance
240
+ output_style_manager = OutputStyleManager()
241
+
242
+ # Check if Claude Code supports output styles
243
+ if not output_style_manager.supports_output_styles():
244
+ # Silently skip - version too old or Claude not installed
245
+ return
246
+
247
+ # Check if already deployed and active
248
+ settings_file = Path.home() / ".claude" / "settings.json"
249
+ output_style_file = Path.home() / ".claude" / "output-styles" / "claude-mpm.md"
250
+
251
+ already_configured = False
252
+ if settings_file.exists() and output_style_file.exists():
253
+ try:
254
+ import json
255
+
256
+ # Check if file has content (bug fix: was skipping empty files)
257
+ if output_style_file.stat().st_size == 0:
258
+ # File is empty, need to redeploy with content
259
+ pass # Fall through to deployment below
260
+ else:
261
+ # File has content, check if already active
262
+ settings = json.loads(settings_file.read_text())
263
+ if settings.get("activeOutputStyle") == "claude-mpm":
264
+ # Already deployed and active with content
265
+ already_configured = True
266
+ except Exception:
267
+ pass # Continue with deployment if we can't read settings
268
+
269
+ if already_configured:
270
+ # Show feedback that output style is ready
271
+ print("✓ Output style configured", flush=True)
272
+ return
273
+
274
+ # Read OUTPUT_STYLE.md content
275
+ output_style_path = Path(__file__).parent.parent / "agents" / "OUTPUT_STYLE.md"
276
+
277
+ if not output_style_path.exists():
278
+ # No output style file to deploy
279
+ return
280
+
281
+ output_style_content = output_style_path.read_text()
282
+
283
+ # Deploy the output style (deploys file and activates it)
284
+ output_style_manager.deploy_output_style(output_style_content)
285
+ print("✓ Output style configured", flush=True)
286
+
287
+ except Exception as e:
288
+ # Non-critical - log but don't fail startup
289
+ from ..core.logger import get_logger
290
+
291
+ logger = get_logger("cli")
292
+ logger.debug(f"Failed to deploy output style: {e}")
293
+ # Continue execution - output style deployment shouldn't block startup
294
+
295
+
296
+ def sync_remote_agents_on_startup():
297
+ """
298
+ Synchronize agent templates from remote sources on startup.
299
+
300
+ WHY: Ensures agents are up-to-date from remote Git sources (GitHub)
301
+ without manual intervention. Uses ETag-based caching for efficient
302
+ updates (95%+ bandwidth reduction).
303
+
304
+ DESIGN DECISION: Non-blocking synchronization that doesn't prevent
305
+ startup if network is unavailable. Failures are logged but don't
306
+ block startup to ensure claude-mpm remains functional.
307
+
308
+ Workflow:
309
+ 1. Sync all enabled Git sources (download/cache files) - Phase 1 progress bar
310
+ 2. Deploy agents to ~/.claude/agents/ - Phase 2 progress bar
311
+ 3. Log deployment results
312
+ """
313
+ # Check for legacy cache and warn user if found
314
+ check_legacy_cache()
315
+
316
+ try:
317
+ from ..services.agents.deployment.agent_deployment import AgentDeploymentService
318
+ from ..services.agents.startup_sync import sync_agents_on_startup
319
+ from ..utils.progress import ProgressBar
320
+
321
+ # Phase 1: Sync files from Git sources
322
+ result = sync_agents_on_startup()
323
+
324
+ # Only proceed with deployment if sync was enabled and ran
325
+ if result.get("enabled") and result.get("sources_synced", 0) > 0:
326
+ from ..core.logger import get_logger
327
+
328
+ logger = get_logger("cli")
329
+
330
+ downloaded = result.get("total_downloaded", 0)
331
+ cached = result.get("cache_hits", 0)
332
+ duration = result.get("duration_ms", 0)
333
+
334
+ if downloaded > 0 or cached > 0:
335
+ logger.debug(
336
+ f"Agent sync: {downloaded} updated, {cached} cached ({duration}ms)"
337
+ )
338
+
339
+ # Log errors if any
340
+ errors = result.get("errors", [])
341
+ if errors:
342
+ logger.warning(f"Agent sync completed with {len(errors)} errors")
343
+
344
+ # Phase 2: Deploy agents from cache to ~/.claude/agents/
345
+ # This mirrors the skills deployment pattern (lines 371-407)
346
+ try:
347
+ # Initialize deployment service
348
+ deployment_service = AgentDeploymentService()
349
+
350
+ # Count agents in cache to show accurate progress
351
+ from pathlib import Path
352
+
353
+ cache_dir = Path.home() / ".claude-mpm" / "cache" / "remote-agents"
354
+ agent_count = 0
355
+
356
+ if cache_dir.exists():
357
+ # Count MD files in cache (agent markdown files from Git)
358
+ # BUGFIX: Only count files in agent directories, not docs/templates/READMEs
359
+ # Valid agent paths must contain "/agents/" or be in root-level category dirs
360
+ # Exclude PM templates, BASE-AGENT, and documentation files
361
+ pm_templates = {
362
+ "base-agent.md",
363
+ "circuit_breakers.md",
364
+ "pm_examples.md",
365
+ "pm_red_flags.md",
366
+ "research_gate_examples.md",
367
+ "response_format.md",
368
+ "ticket_completeness_examples.md",
369
+ "validation_templates.md",
370
+ "git_file_tracking.md",
371
+ }
372
+ # Documentation files to exclude (by filename)
373
+ doc_files = {
374
+ "readme.md",
375
+ "changelog.md",
376
+ "contributing.md",
377
+ "implementation-summary.md",
378
+ "reorganization-plan.md",
379
+ "auto-deploy-index.md",
380
+ }
381
+
382
+ # Find all markdown files
383
+ all_md_files = list(cache_dir.rglob("*.md"))
384
+
385
+ # Filter to only agent files:
386
+ # 1. Must have "/agents/" in path (from git repos)
387
+ # 2. Must not be in PM templates or doc files
388
+ # 3. Exclude BASE-AGENT.md which is not a deployable agent
389
+ agent_files = [
390
+ f
391
+ for f in all_md_files
392
+ if (
393
+ # Must be in an agent directory (from git repos like bobmatnyc/claude-mpm-agents/agents/)
394
+ "/agents/" in str(f)
395
+ # Exclude PM templates, doc files, and BASE-AGENT
396
+ and f.name.lower() not in pm_templates
397
+ and f.name.lower() not in doc_files
398
+ and f.name.lower() != "base-agent.md"
399
+ )
400
+ ]
401
+ agent_count = len(agent_files)
402
+
403
+ if agent_count > 0:
404
+ # Create progress bar for deployment phase
405
+ deploy_progress = ProgressBar(
406
+ total=agent_count,
407
+ prefix="Deploying agents",
408
+ show_percentage=True,
409
+ show_counter=True,
410
+ )
411
+
412
+ # Deploy agents with progress callback
413
+ deploy_target = Path.home() / ".claude" / "agents"
414
+ deployment_result = deployment_service.deploy_agents(
415
+ target_dir=deploy_target,
416
+ force_rebuild=False, # Only deploy if versions differ
417
+ deployment_mode="update", # Version-aware updates
418
+ )
419
+
420
+ # Update progress bar (single increment since deploy_agents is batch)
421
+ deploy_progress.update(agent_count)
422
+
423
+ # Finish deployment progress bar
424
+ deployed = len(deployment_result.get("deployed", []))
425
+ updated = len(deployment_result.get("updated", []))
426
+ skipped = len(deployment_result.get("skipped", []))
427
+ total_available = deployed + updated + skipped
428
+
429
+ # Show total available agents (deployed + updated + already existing)
430
+ if deployed > 0 or updated > 0:
431
+ deploy_progress.finish(
432
+ f"Complete: {deployed} deployed, {updated} updated, {skipped} already present ({total_available} total)"
433
+ )
434
+ else:
435
+ deploy_progress.finish(
436
+ f"Complete: {total_available} agents ready (all up-to-date)"
437
+ )
438
+
439
+ # Display deployment errors to user (not just logs)
440
+ deploy_errors = deployment_result.get("errors", [])
441
+ if deploy_errors:
442
+ # Log for debugging
443
+ logger.warning(
444
+ f"Agent deployment completed with {len(deploy_errors)} errors: {deploy_errors}"
445
+ )
446
+
447
+ # Display errors to user with clear formatting
448
+ print("\n⚠️ Agent Deployment Errors:")
449
+
450
+ # Show first 10 errors to avoid overwhelming output
451
+ max_errors_to_show = 10
452
+ errors_to_display = deploy_errors[:max_errors_to_show]
453
+
454
+ for error in errors_to_display:
455
+ # Format error message for readability
456
+ # Errors typically come as strings like "agent.md: Error message"
457
+ print(f" - {error}")
458
+
459
+ # If more errors exist, show count
460
+ if len(deploy_errors) > max_errors_to_show:
461
+ remaining = len(deploy_errors) - max_errors_to_show
462
+ print(f" ... and {remaining} more error(s)")
463
+
464
+ # Show summary message
465
+ print(
466
+ f"\n❌ Failed to deploy {len(deploy_errors)} agent(s). Please check the error messages above."
467
+ )
468
+ print(" Run with --verbose for detailed error information.\n")
469
+
470
+ except Exception as e:
471
+ # Deployment failure shouldn't block startup
472
+ from ..core.logger import get_logger
473
+
474
+ logger = get_logger("cli")
475
+ logger.warning(f"Failed to deploy agents from cache: {e}")
476
+
477
+ except Exception as e:
478
+ # Non-critical - log but don't fail startup
479
+ from ..core.logger import get_logger
480
+
481
+ logger = get_logger("cli")
482
+ logger.debug(f"Failed to sync remote agents: {e}")
483
+ # Continue execution - agent sync failure shouldn't block startup
484
+
485
+
486
+ def sync_remote_skills_on_startup():
487
+ """
488
+ Synchronize skill templates from remote sources on startup.
489
+
490
+ WHY: Ensures skills are up-to-date from remote Git sources (GitHub)
491
+ without manual intervention. Provides consistency with agent syncing.
492
+
493
+ DESIGN DECISION: Non-blocking synchronization that doesn't prevent
494
+ startup if network is unavailable. Failures are logged but don't
495
+ block startup to ensure claude-mpm remains functional.
496
+
497
+ Workflow:
498
+ 1. Sync all enabled Git sources (download/cache files) - Phase 1 progress bar
499
+ 2. Deploy skills to ~/.claude/skills/ with flat structure - Phase 2 progress bar
500
+ 3. Log deployment results
501
+ """
502
+ try:
503
+ from pathlib import Path
504
+
505
+ from ..config.skill_sources import SkillSourceConfiguration
506
+ from ..services.skills.git_skill_source_manager import GitSkillSourceManager
507
+ from ..utils.progress import ProgressBar
508
+
509
+ config = SkillSourceConfiguration()
510
+ manager = GitSkillSourceManager(config)
511
+
512
+ # Get enabled sources
513
+ enabled_sources = config.get_enabled_sources()
514
+ if not enabled_sources:
515
+ return # No sources enabled, nothing to sync
516
+
517
+ # Phase 1: Sync files from Git sources
518
+ # We need to discover file count first to show accurate progress
519
+ # This requires pre-scanning repositories via GitHub API
520
+ from ..core.logger import get_logger
521
+
522
+ logger = get_logger("cli")
523
+
524
+ # Discover total file count across all sources
525
+ total_file_count = 0
526
+ for source in enabled_sources:
527
+ try:
528
+ # Parse GitHub URL
529
+ url_parts = (
530
+ source.url.rstrip("/").replace(".git", "").split("github.com/")
531
+ )
532
+ if len(url_parts) == 2:
533
+ repo_path = url_parts[1].strip("/")
534
+ owner_repo = "/".join(repo_path.split("/")[:2])
535
+
536
+ # Use Tree API to discover all files
537
+ all_files = manager._discover_repository_files_via_tree_api(
538
+ owner_repo, source.branch
539
+ )
540
+
541
+ # Count relevant files (markdown, JSON)
542
+ relevant_files = [
543
+ f
544
+ for f in all_files
545
+ if f.endswith(".md") or f.endswith(".json") or f == ".gitignore"
546
+ ]
547
+ total_file_count += len(relevant_files)
548
+
549
+ except Exception as e:
550
+ logger.debug(f"Failed to discover files for {source.id}: {e}")
551
+ # Use estimate if discovery fails
552
+ total_file_count += 150
553
+
554
+ # Create progress bar for sync phase with actual file count
555
+ sync_progress = ProgressBar(
556
+ total=total_file_count if total_file_count > 0 else 1,
557
+ prefix="Syncing skills",
558
+ show_percentage=True,
559
+ show_counter=True,
560
+ )
561
+
562
+ # Sync all sources with progress callback
563
+ results = manager.sync_all_sources(
564
+ force=False, progress_callback=sync_progress.update
565
+ )
566
+
567
+ # Finish sync progress bar with clear breakdown
568
+ downloaded = results["total_files_updated"]
569
+ cached = results["total_files_cached"]
570
+ total_files = downloaded + cached
571
+
572
+ if cached > 0:
573
+ sync_progress.finish(
574
+ f"Complete: {downloaded} downloaded, {cached} cached ({total_files} total)"
575
+ )
576
+ else:
577
+ # All new downloads (first sync)
578
+ sync_progress.finish(f"Complete: {downloaded} files downloaded")
579
+
580
+ # Phase 2: Deploy skills to ~/.claude/skills/
581
+ # This flattens nested Git structure (e.g., collaboration/parallel-agents/SKILL.md)
582
+ # into flat deployment (e.g., collaboration-dispatching-parallel-agents/SKILL.md)
583
+ if results["synced_count"] > 0:
584
+ # Get all skills to determine deployment count
585
+ all_skills = manager.get_all_skills()
586
+ skill_count = len(all_skills)
587
+
588
+ if skill_count > 0:
589
+ # Create progress bar for deployment phase
590
+ deploy_progress = ProgressBar(
591
+ total=skill_count,
592
+ prefix="Deploying skill directories",
593
+ show_percentage=True,
594
+ show_counter=True,
595
+ )
596
+
597
+ # Deploy skills with progress callback
598
+ # Deploy to project directory (like agents), not user directory
599
+ deployment_result = manager.deploy_skills(
600
+ target_dir=Path.cwd() / ".claude" / "skills",
601
+ force=False,
602
+ progress_callback=deploy_progress.update,
603
+ )
604
+
605
+ # Finish deployment progress bar
606
+ deployed = deployment_result.get("deployed_count", 0)
607
+ skipped = deployment_result.get("skipped_count", 0)
608
+ total_available = deployed + skipped
609
+
610
+ # Show total available skills (deployed + already existing)
611
+ # This is more user-friendly than just showing newly deployed count
612
+ if deployed > 0:
613
+ deploy_progress.finish(
614
+ f"Complete: {deployed} deployed, {skipped} already present ({total_available} total)"
615
+ )
616
+ else:
617
+ deploy_progress.finish(
618
+ f"Complete: {total_available} skills ready (all up-to-date)"
619
+ )
620
+
621
+ # Log deployment errors if any
622
+ from ..core.logger import get_logger
623
+
624
+ logger = get_logger("cli")
625
+
626
+ errors = deployment_result.get("errors", [])
627
+ if errors:
628
+ logger.warning(
629
+ f"Skill deployment completed with {len(errors)} errors: {errors}"
630
+ )
631
+
632
+ # Log sync errors if any
633
+ if results["failed_count"] > 0:
634
+ logger.warning(
635
+ f"Skill sync completed with {results['failed_count']} failures"
636
+ )
637
+
638
+ except Exception as e:
639
+ # Non-critical - log but don't fail startup
640
+ from ..core.logger import get_logger
641
+
642
+ logger = get_logger("cli")
643
+ logger.debug(f"Failed to sync remote skills: {e}")
644
+ # Continue execution - skill sync failure shouldn't block startup
645
+
646
+
163
647
  def run_background_services():
164
648
  """
165
649
  Initialize all background services on startup.
166
650
 
167
651
  WHY: Centralizes all startup service initialization for cleaner main().
652
+
653
+ NOTE: System instructions (PM_INSTRUCTIONS.md, WORKFLOW.md, MEMORY.md) and
654
+ templates do NOT deploy automatically on startup. They only deploy when user
655
+ explicitly requests them via agent-manager commands. This prevents unwanted
656
+ file creation in project .claude/ directories.
657
+ See: SystemInstructionsDeployer and agent_deployment.py line 504-509
168
658
  """
169
659
  initialize_project_registry()
170
660
  check_mcp_auto_configuration()
171
661
  verify_mcp_gateway_startup()
172
662
  check_for_updates_async()
173
- deploy_bundled_skills()
174
- discover_and_link_runtime_skills()
663
+ sync_remote_agents_on_startup() # Sync agents from remote sources
664
+
665
+ # Skills deployment order (precedence: remote > bundled)
666
+ # 1. Deploy bundled skills first (base layer from package)
667
+ # 2. Sync and deploy remote skills (Git sources, can override bundled)
668
+ # 3. Discover and link runtime skills (user-added skills)
669
+ # This ensures remote skills take precedence over bundled skills when names conflict
670
+ deploy_bundled_skills() # Base layer: package-bundled skills
671
+ sync_remote_skills_on_startup() # Override layer: Git-based skills (takes precedence)
672
+ discover_and_link_runtime_skills() # Discovery: user-added skills
673
+
674
+ deploy_output_style_on_startup()
175
675
 
176
676
 
177
677
  def setup_mcp_server_logging(args):
@@ -247,12 +747,26 @@ def check_mcp_auto_configuration():
247
747
  user consent.
248
748
 
249
749
  DESIGN DECISION: This is blocking but quick - it only runs once and has
250
- a 10-second timeout. We want to catch users on first run for the best
251
- experience.
750
+ a 10-second timeout. Shows progress feedback during checks to avoid
751
+ appearing frozen.
752
+
753
+ OPTIMIZATION: Skip ALL MCP checks for doctor and configure commands to avoid
754
+ duplicate checks (doctor performs its own comprehensive check, configure
755
+ allows users to select services).
252
756
  """
757
+ # Skip MCP service checks for the doctor and configure commands
758
+ # The doctor command performs its own comprehensive MCP service check
759
+ # The configure command allows users to configure which services to enable
760
+ # Running both would cause duplicate checks and log messages (9 seconds apart)
761
+ if len(sys.argv) > 1 and sys.argv[1] in ("doctor", "configure"):
762
+ return
763
+
253
764
  try:
254
765
  from ..services.mcp_gateway.auto_configure import check_and_configure_mcp
255
766
 
767
+ # Show progress feedback - this operation can take 10+ seconds
768
+ print("Checking MCP configuration...", end="", flush=True)
769
+
256
770
  # This function handles all the logic:
257
771
  # - Checks if already configured
258
772
  # - Checks if pipx installation
@@ -261,45 +775,18 @@ def check_mcp_auto_configuration():
261
775
  # - Configures if user agrees
262
776
  check_and_configure_mcp()
263
777
 
264
- except Exception as e:
265
- # Non-critical - log but don't fail
266
- from ..core.logger import get_logger
267
-
268
- logger = get_logger("cli")
269
- logger.debug(f"MCP auto-configuration check failed: {e}")
270
-
271
- # Skip MCP service fixes for the doctor and configure commands
272
- # The doctor command performs its own comprehensive MCP service check
273
- # The configure command allows users to configure which services to enable
274
- # Running both would cause duplicate checks and log messages (9 seconds apart)
275
- if len(sys.argv) > 1 and sys.argv[1] in ("doctor", "configure"):
276
- return
277
-
278
- # Also ensure MCP services are properly configured in ~/.claude.json
279
- # This fixes incorrect paths and adds missing services
280
- try:
281
- from ..core.logger import get_logger
282
- from ..services.mcp_config_manager import MCPConfigManager
283
-
284
- logger = get_logger("cli")
285
- mcp_manager = MCPConfigManager()
286
-
287
- # Fix any corrupted installations first
288
- _fix_success, fix_message = mcp_manager.fix_mcp_service_issues()
289
- if fix_message and "Fixed:" in fix_message:
290
- logger.info(f"MCP service fixes applied: {fix_message}")
291
-
292
- # Ensure all services are configured correctly
293
- _config_success, config_message = mcp_manager.ensure_mcp_services_configured()
294
- if config_message and "Added MCP services" in config_message:
295
- logger.info(f"MCP services configured: {config_message}")
778
+ # Clear the "Checking..." message by overwriting with spaces
779
+ print("\r" + " " * 30 + "\r", end="", flush=True)
296
780
 
297
781
  except Exception as e:
782
+ # Clear progress message on error
783
+ print("\r" + " " * 30 + "\r", end="", flush=True)
784
+
298
785
  # Non-critical - log but don't fail
299
786
  from ..core.logger import get_logger
300
787
 
301
788
  logger = get_logger("cli")
302
- logger.debug(f"MCP services configuration update failed: {e}")
789
+ logger.debug(f"MCP auto-configuration check failed: {e}")
303
790
 
304
791
 
305
792
  def verify_mcp_gateway_startup():
@@ -328,7 +815,6 @@ def verify_mcp_gateway_startup():
328
815
 
329
816
  try:
330
817
  import asyncio
331
- import time
332
818
 
333
819
  from ..core.logger import get_logger
334
820
  from ..services.mcp_gateway.core.startup_verification import (
@@ -343,68 +829,14 @@ def verify_mcp_gateway_startup():
343
829
 
344
830
  # DISABLED: Pre-warming MCP servers can interfere with Claude Code's MCP management
345
831
  # This was causing issues with MCP server initialization and stderr handling
346
- # def run_pre_warming():
347
- # loop = None
348
- # try:
349
- # start_time = time.time()
350
- # loop = asyncio.new_event_loop()
351
- # asyncio.set_event_loop(loop)
352
- #
353
- # # Pre-warm MCP servers (especially vector search)
354
- # logger.info("Pre-warming MCP servers to eliminate startup delay...")
355
- # loop.run_until_complete(pre_warm_mcp_servers())
356
- #
357
- # pre_warm_time = time.time() - start_time
358
- # if pre_warm_time > 1.0:
359
- # logger.info(f"MCP servers pre-warmed in {pre_warm_time:.2f}s")
360
-
361
- # Dummy function to maintain structure
362
- def run_pre_warming():
363
- loop = None
364
- try:
365
- time.time()
366
- loop = asyncio.new_event_loop()
367
- asyncio.set_event_loop(loop)
368
-
369
- # Also run gateway verification if needed
370
- if not gateway_configured:
371
- loop.run_until_complete(verify_mcp_gateway_on_startup())
832
+ # Pre-warming functionality has been removed. Gateway verification only runs
833
+ # if MCP gateway is not already configured.
372
834
 
373
- except Exception as e:
374
- # Non-blocking - log but don't fail
375
- logger.debug(f"MCP pre-warming error (non-critical): {e}")
376
- finally:
377
- # Properly clean up event loop to prevent kqueue warnings
378
- if loop is not None:
379
- try:
380
- # Cancel all running tasks
381
- pending = asyncio.all_tasks(loop)
382
- for task in pending:
383
- task.cancel()
384
- # Wait for tasks to complete cancellation
385
- if pending:
386
- loop.run_until_complete(
387
- asyncio.gather(*pending, return_exceptions=True)
388
- )
389
- except Exception:
390
- pass # Ignore cleanup errors
391
- finally:
392
- loop.close()
393
- # Clear the event loop reference to help with cleanup
394
- asyncio.set_event_loop(None)
395
-
396
- # Run pre-warming in background thread
397
- import threading
398
-
399
- pre_warm_thread = threading.Thread(target=run_pre_warming, daemon=True)
400
- pre_warm_thread.start()
401
-
402
- return
403
-
404
- # Run detailed verification in background if not configured
835
+ # Run gateway verification in background if not configured
405
836
  if not gateway_configured:
406
- # Note: We don't await this to avoid blocking startup
837
+
407
838
  def run_verification():
839
+ """Background thread to verify MCP gateway configuration."""
408
840
  loop = None
409
841
  try:
410
842
  loop = asyncio.new_event_loop()