claude-mpm 4.20.3__py3-none-any.whl → 4.25.10__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 (454) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/BASE_PM.md +23 -6
  3. claude_mpm/agents/OUTPUT_STYLE.md +3 -48
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +1783 -34
  5. claude_mpm/agents/WORKFLOW.md +75 -2
  6. claude_mpm/agents/base_agent.json +6 -3
  7. claude_mpm/agents/frontmatter_validator.py +1 -1
  8. claude_mpm/agents/templates/api_qa.json +5 -2
  9. claude_mpm/agents/templates/circuit_breakers.md +108 -2
  10. claude_mpm/agents/templates/documentation.json +33 -6
  11. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  12. claude_mpm/agents/templates/php-engineer.json +10 -4
  13. claude_mpm/agents/templates/pm_red_flags.md +89 -19
  14. claude_mpm/agents/templates/project_organizer.json +7 -3
  15. claude_mpm/agents/templates/qa.json +2 -1
  16. claude_mpm/agents/templates/react_engineer.json +1 -0
  17. claude_mpm/agents/templates/research.json +82 -12
  18. claude_mpm/agents/templates/security.json +4 -4
  19. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  20. claude_mpm/agents/templates/ticketing.json +10 -6
  21. claude_mpm/agents/templates/version_control.json +4 -2
  22. claude_mpm/agents/templates/web_qa.json +2 -1
  23. claude_mpm/cli/README.md +253 -0
  24. claude_mpm/cli/__init__.py +11 -1
  25. claude_mpm/cli/commands/aggregate.py +1 -1
  26. claude_mpm/cli/commands/analyze.py +3 -3
  27. claude_mpm/cli/commands/cleanup.py +1 -1
  28. claude_mpm/cli/commands/configure_agent_display.py +4 -4
  29. claude_mpm/cli/commands/debug.py +12 -12
  30. claude_mpm/cli/commands/hook_errors.py +277 -0
  31. claude_mpm/cli/commands/mcp_install_commands.py +1 -1
  32. claude_mpm/cli/commands/mcp_install_commands.py.backup +284 -0
  33. claude_mpm/cli/commands/mpm_init/README.md +365 -0
  34. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  35. claude_mpm/cli/commands/mpm_init/core.py +573 -0
  36. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  37. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  38. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  39. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  40. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  41. claude_mpm/cli/commands/mpm_init_handler.py +67 -1
  42. claude_mpm/cli/commands/run.py +124 -128
  43. claude_mpm/cli/commands/skills.py +522 -34
  44. claude_mpm/cli/executor.py +56 -0
  45. claude_mpm/cli/interactive/agent_wizard.py +5 -5
  46. claude_mpm/cli/parsers/base_parser.py +28 -0
  47. claude_mpm/cli/parsers/mpm_init_parser.py +42 -0
  48. claude_mpm/cli/parsers/skills_parser.py +138 -0
  49. claude_mpm/cli/startup.py +111 -8
  50. claude_mpm/cli/startup_display.py +480 -0
  51. claude_mpm/cli/utils.py +1 -1
  52. claude_mpm/cli_module/commands.py +1 -1
  53. claude_mpm/cli_module/refactoring_guide.md +253 -0
  54. claude_mpm/commands/mpm-help.md +3 -0
  55. claude_mpm/commands/mpm-init.md +19 -3
  56. claude_mpm/commands/mpm-resume.md +372 -0
  57. claude_mpm/commands/mpm-tickets.md +56 -7
  58. claude_mpm/commands/mpm.md +1 -0
  59. claude_mpm/config/agent_capabilities.yaml +658 -0
  60. claude_mpm/config/async_logging_config.yaml +145 -0
  61. claude_mpm/constants.py +12 -0
  62. claude_mpm/core/.claude-mpm/logs/hooks_20250730.log +34 -0
  63. claude_mpm/core/api_validator.py +1 -1
  64. claude_mpm/core/claude_runner.py +14 -1
  65. claude_mpm/core/config.py +8 -0
  66. claude_mpm/core/constants.py +1 -1
  67. claude_mpm/core/framework/processors/metadata_processor.py +1 -1
  68. claude_mpm/core/hook_error_memory.py +381 -0
  69. claude_mpm/core/hook_manager.py +41 -2
  70. claude_mpm/core/interactive_session.py +48 -3
  71. claude_mpm/core/interfaces.py +56 -1
  72. claude_mpm/core/logger.py +3 -1
  73. claude_mpm/core/oneshot_session.py +39 -0
  74. claude_mpm/d2/.gitignore +22 -0
  75. claude_mpm/d2/ARCHITECTURE_COMPARISON.md +273 -0
  76. claude_mpm/d2/FLASK_INTEGRATION.md +156 -0
  77. claude_mpm/d2/IMPLEMENTATION_SUMMARY.md +452 -0
  78. claude_mpm/d2/QUICKSTART.md +186 -0
  79. claude_mpm/d2/README.md +232 -0
  80. claude_mpm/d2/STORE_FIX_SUMMARY.md +167 -0
  81. claude_mpm/d2/SVELTE5_STORES_GUIDE.md +180 -0
  82. claude_mpm/d2/TESTING.md +288 -0
  83. claude_mpm/d2/index.html +118 -0
  84. claude_mpm/d2/package.json +19 -0
  85. claude_mpm/d2/src/App.svelte +110 -0
  86. claude_mpm/d2/src/components/Header.svelte +153 -0
  87. claude_mpm/d2/src/components/MainContent.svelte +74 -0
  88. claude_mpm/d2/src/components/Sidebar.svelte +85 -0
  89. claude_mpm/d2/src/components/tabs/EventsTab.svelte +326 -0
  90. claude_mpm/d2/src/lib/socketio.js +144 -0
  91. claude_mpm/d2/src/main.js +7 -0
  92. claude_mpm/d2/src/stores/events.js +114 -0
  93. claude_mpm/d2/src/stores/socket.js +108 -0
  94. claude_mpm/d2/src/stores/theme.js +65 -0
  95. claude_mpm/d2/svelte.config.js +12 -0
  96. claude_mpm/d2/vite.config.js +15 -0
  97. claude_mpm/dashboard/.claude-mpm/memories/README.md +36 -0
  98. claude_mpm/dashboard/BUILD_NUMBER +1 -0
  99. claude_mpm/dashboard/README.md +121 -0
  100. claude_mpm/dashboard/VERSION +1 -0
  101. claude_mpm/dashboard/react/components/DataInspector/DataInspector.tsx +273 -0
  102. claude_mpm/dashboard/react/components/ErrorBoundary.tsx +75 -0
  103. claude_mpm/dashboard/react/components/EventViewer/EventViewer.tsx +141 -0
  104. claude_mpm/dashboard/react/components/shared/ConnectionStatus.tsx +36 -0
  105. claude_mpm/dashboard/react/components/shared/FilterBar.tsx +89 -0
  106. claude_mpm/dashboard/react/contexts/DashboardContext.tsx +215 -0
  107. claude_mpm/dashboard/react/entries/events.tsx +165 -0
  108. claude_mpm/dashboard/react/hooks/useEvents.ts +191 -0
  109. claude_mpm/dashboard/react/hooks/useSocket.ts +225 -0
  110. claude_mpm/dashboard/static/built/REFACTORING_SUMMARY.md +170 -0
  111. claude_mpm/dashboard/static/built/components/activity-tree.js.map +1 -0
  112. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +101 -101
  113. claude_mpm/dashboard/static/built/components/agent-inference.js.map +1 -0
  114. claude_mpm/dashboard/static/built/components/build-tracker.js +59 -59
  115. claude_mpm/dashboard/static/built/components/code-simple.js +107 -107
  116. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +29 -29
  117. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +24 -24
  118. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +27 -27
  119. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +25 -25
  120. claude_mpm/dashboard/static/built/components/code-tree.js.map +1 -0
  121. claude_mpm/dashboard/static/built/components/code-viewer.js.map +1 -0
  122. claude_mpm/dashboard/static/built/components/connection-debug.js +101 -101
  123. claude_mpm/dashboard/static/built/components/diff-viewer.js +113 -113
  124. claude_mpm/dashboard/static/built/components/event-processor.js.map +1 -0
  125. claude_mpm/dashboard/static/built/components/event-viewer.js.map +1 -0
  126. claude_mpm/dashboard/static/built/components/export-manager.js.map +1 -0
  127. claude_mpm/dashboard/static/built/components/file-change-tracker.js +57 -57
  128. claude_mpm/dashboard/static/built/components/file-change-viewer.js +74 -74
  129. claude_mpm/dashboard/static/built/components/file-tool-tracker.js.map +1 -0
  130. claude_mpm/dashboard/static/built/components/file-viewer.js.map +1 -0
  131. claude_mpm/dashboard/static/built/components/hud-library-loader.js.map +1 -0
  132. claude_mpm/dashboard/static/built/components/hud-manager.js.map +1 -0
  133. claude_mpm/dashboard/static/built/components/hud-visualizer.js.map +1 -0
  134. claude_mpm/dashboard/static/built/components/module-viewer.js.map +1 -0
  135. claude_mpm/dashboard/static/built/components/session-manager.js.map +1 -0
  136. claude_mpm/dashboard/static/built/components/socket-manager.js.map +1 -0
  137. claude_mpm/dashboard/static/built/components/ui-state-manager.js.map +1 -0
  138. claude_mpm/dashboard/static/built/components/unified-data-viewer.js.map +1 -0
  139. claude_mpm/dashboard/static/built/components/working-directory.js.map +1 -0
  140. claude_mpm/dashboard/static/built/connection-manager.js +76 -76
  141. claude_mpm/dashboard/static/built/dashboard.js.map +1 -0
  142. claude_mpm/dashboard/static/built/extension-error-handler.js +22 -22
  143. claude_mpm/dashboard/static/built/react/events.js.map +1 -0
  144. claude_mpm/dashboard/static/built/shared/dom-helpers.js +9 -9
  145. claude_mpm/dashboard/static/built/shared/event-bus.js +5 -5
  146. claude_mpm/dashboard/static/built/shared/logger.js +16 -16
  147. claude_mpm/dashboard/static/built/shared/tooltip-service.js +6 -6
  148. claude_mpm/dashboard/static/built/socket-client.js.map +1 -0
  149. claude_mpm/dashboard/static/css/activity.css +69 -69
  150. claude_mpm/dashboard/static/css/connection-status.css +10 -10
  151. claude_mpm/dashboard/static/css/dashboard.css +15 -15
  152. claude_mpm/dashboard/static/index.html +22 -22
  153. claude_mpm/dashboard/static/js/REFACTORING_SUMMARY.md +170 -0
  154. claude_mpm/dashboard/static/js/components/activity-tree.js +178 -178
  155. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +101 -101
  156. claude_mpm/dashboard/static/js/components/agent-inference.js +31 -31
  157. claude_mpm/dashboard/static/js/components/build-tracker.js +59 -59
  158. claude_mpm/dashboard/static/js/components/code-simple.js +107 -107
  159. claude_mpm/dashboard/static/js/components/connection-debug.js +101 -101
  160. claude_mpm/dashboard/static/js/components/diff-viewer.js +113 -113
  161. claude_mpm/dashboard/static/js/components/event-viewer.js +12 -12
  162. claude_mpm/dashboard/static/js/components/file-change-tracker.js +57 -57
  163. claude_mpm/dashboard/static/js/components/file-change-viewer.js +74 -74
  164. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +6 -6
  165. claude_mpm/dashboard/static/js/components/file-viewer.js +42 -42
  166. claude_mpm/dashboard/static/js/components/module-viewer.js +27 -27
  167. claude_mpm/dashboard/static/js/components/session-manager.js +14 -14
  168. claude_mpm/dashboard/static/js/components/socket-manager.js +1 -1
  169. claude_mpm/dashboard/static/js/components/ui-state-manager.js +14 -14
  170. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +110 -110
  171. claude_mpm/dashboard/static/js/components/working-directory.js +8 -8
  172. claude_mpm/dashboard/static/js/connection-manager.js +76 -76
  173. claude_mpm/dashboard/static/js/dashboard.js +76 -58
  174. claude_mpm/dashboard/static/js/extension-error-handler.js +22 -22
  175. claude_mpm/dashboard/static/js/shared/dom-helpers.js +9 -9
  176. claude_mpm/dashboard/static/js/shared/event-bus.js +5 -5
  177. claude_mpm/dashboard/static/js/shared/logger.js +16 -16
  178. claude_mpm/dashboard/static/js/shared/tooltip-service.js +6 -6
  179. claude_mpm/dashboard/static/js/socket-client.js +138 -121
  180. claude_mpm/dashboard/static/navigation-test-results.md +118 -0
  181. claude_mpm/dashboard/static/production/main.html +21 -21
  182. claude_mpm/dashboard/static/test-archive/dashboard.html +22 -22
  183. claude_mpm/dashboard/templates/.claude-mpm/memories/README.md +36 -0
  184. claude_mpm/dashboard/templates/.claude-mpm/memories/engineer_agent.md +39 -0
  185. claude_mpm/dashboard/templates/.claude-mpm/memories/version_control_agent.md +38 -0
  186. claude_mpm/dashboard/templates/code_simple.html +23 -23
  187. claude_mpm/dashboard/templates/index.html +18 -18
  188. claude_mpm/hooks/README.md +143 -0
  189. claude_mpm/hooks/claude_hooks/event_handlers.py +3 -1
  190. claude_mpm/hooks/claude_hooks/hook_handler.py +24 -7
  191. claude_mpm/hooks/claude_hooks/installer.py +45 -0
  192. claude_mpm/hooks/templates/README.md +180 -0
  193. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  194. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  195. claude_mpm/hooks/templates/settings.json.example +147 -0
  196. claude_mpm/schemas/agent_schema.json +596 -0
  197. claude_mpm/schemas/frontmatter_schema.json +165 -0
  198. claude_mpm/scripts/claude-hook-handler.sh +3 -3
  199. claude_mpm/scripts/start_activity_logging.py +3 -1
  200. claude_mpm/services/agents/deployment/agent_format_converter.py +1 -1
  201. claude_mpm/services/agents/deployment/agent_metrics_collector.py +3 -3
  202. claude_mpm/services/agents/deployment/facade/deployment_facade.py +3 -3
  203. claude_mpm/services/agents/deployment/pipeline/pipeline_executor.py +2 -2
  204. claude_mpm/services/agents/loading/framework_agent_loader.py +8 -8
  205. claude_mpm/services/agents/local_template_manager.py +3 -1
  206. claude_mpm/services/cli/session_pause_manager.py +504 -0
  207. claude_mpm/services/cli/session_resume_helper.py +36 -16
  208. claude_mpm/services/cli/unified_dashboard_manager.py +1 -1
  209. claude_mpm/services/core/base.py +26 -11
  210. claude_mpm/services/core/interfaces.py +56 -1
  211. claude_mpm/services/core/models/agent_config.py +3 -0
  212. claude_mpm/services/core/models/process.py +4 -0
  213. claude_mpm/services/diagnostics/checks/agent_check.py +0 -2
  214. claude_mpm/services/diagnostics/checks/instructions_check.py +1 -2
  215. claude_mpm/services/diagnostics/checks/mcp_check.py +0 -1
  216. claude_mpm/services/diagnostics/checks/monitor_check.py +0 -1
  217. claude_mpm/services/diagnostics/doctor_reporter.py +6 -4
  218. claude_mpm/services/diagnostics/models.py +21 -0
  219. claude_mpm/services/event_bus/README.md +244 -0
  220. claude_mpm/services/event_bus/direct_relay.py +3 -3
  221. claude_mpm/services/event_bus/event_bus.py +36 -3
  222. claude_mpm/services/event_bus/relay.py +23 -7
  223. claude_mpm/services/events/README.md +303 -0
  224. claude_mpm/services/events/consumers/logging.py +1 -2
  225. claude_mpm/services/framework_claude_md_generator/README.md +119 -0
  226. claude_mpm/services/infrastructure/monitoring/resources.py +1 -1
  227. claude_mpm/services/local_ops/__init__.py +2 -0
  228. claude_mpm/services/local_ops/process_manager.py +1 -1
  229. claude_mpm/services/local_ops/resource_monitor.py +2 -2
  230. claude_mpm/services/mcp_gateway/README.md +185 -0
  231. claude_mpm/services/mcp_gateway/auto_configure.py +31 -25
  232. claude_mpm/services/mcp_gateway/config/configuration.py +1 -1
  233. claude_mpm/services/mcp_gateway/core/process_pool.py +19 -10
  234. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -2
  235. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +1 -1
  236. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +26 -21
  237. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +6 -2
  238. claude_mpm/services/memory/failure_tracker.py +19 -4
  239. claude_mpm/services/memory/optimizer.py +1 -1
  240. claude_mpm/services/model/model_router.py +8 -9
  241. claude_mpm/services/monitor/daemon.py +1 -1
  242. claude_mpm/services/monitor/server.py +2 -2
  243. claude_mpm/services/native_agent_converter.py +356 -0
  244. claude_mpm/services/port_manager.py +1 -1
  245. claude_mpm/services/project/documentation_manager.py +2 -1
  246. claude_mpm/services/project/toolchain_analyzer.py +3 -1
  247. claude_mpm/services/runner_configuration_service.py +1 -0
  248. claude_mpm/services/self_upgrade_service.py +165 -7
  249. claude_mpm/services/skills_config.py +547 -0
  250. claude_mpm/services/skills_deployer.py +955 -0
  251. claude_mpm/services/socketio/handlers/connection.py +1 -1
  252. claude_mpm/services/socketio/handlers/connection.py.backup +217 -0
  253. claude_mpm/services/socketio/handlers/git.py +2 -2
  254. claude_mpm/services/socketio/handlers/hook.py.backup +154 -0
  255. claude_mpm/services/static/.gitkeep +2 -0
  256. claude_mpm/services/system_instructions_service.py +1 -3
  257. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +0 -3
  258. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +0 -1
  259. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +1 -1
  260. claude_mpm/services/version_control/VERSION +1 -0
  261. claude_mpm/services/version_control/conflict_resolution.py +6 -4
  262. claude_mpm/services/visualization/mermaid_generator.py +2 -3
  263. claude_mpm/skills/__init__.py +3 -3
  264. claude_mpm/skills/agent_skills_injector.py +42 -49
  265. claude_mpm/skills/bundled/.gitkeep +2 -0
  266. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +4 -0
  267. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +108 -114
  268. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  269. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  270. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  271. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  272. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  273. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +46 -41
  274. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  275. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  276. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +36 -73
  277. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  278. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  279. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +100 -125
  280. claude_mpm/skills/bundled/debugging/root-cause-tracing/find-polluter.sh +63 -0
  281. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  282. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  283. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  284. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  285. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +28 -72
  286. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +11 -0
  287. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  288. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  289. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +272 -0
  290. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  291. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  292. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  293. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  294. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  295. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  296. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  297. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  298. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  299. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  300. claude_mpm/skills/bundled/main/artifacts-builder/LICENSE.txt +202 -0
  301. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +13 -1
  302. claude_mpm/skills/bundled/main/artifacts-builder/scripts/bundle-artifact.sh +54 -0
  303. claude_mpm/skills/bundled/main/artifacts-builder/scripts/init-artifact.sh +322 -0
  304. claude_mpm/skills/bundled/main/artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  305. claude_mpm/skills/bundled/main/internal-comms/LICENSE.txt +202 -0
  306. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +11 -0
  307. claude_mpm/skills/bundled/main/mcp-builder/LICENSE.txt +202 -0
  308. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +109 -277
  309. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  310. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  311. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +17 -10
  312. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +92 -39
  313. claude_mpm/skills/bundled/main/mcp-builder/scripts/example_evaluation.xml +22 -0
  314. claude_mpm/skills/bundled/main/mcp-builder/scripts/requirements.txt +2 -0
  315. claude_mpm/skills/bundled/main/skill-creator/LICENSE.txt +202 -0
  316. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +135 -155
  317. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  318. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  319. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  320. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  321. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  322. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +13 -12
  323. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +5 -3
  324. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +19 -12
  325. claude_mpm/skills/bundled/performance-profiling.md +6 -0
  326. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  327. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  328. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  329. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  330. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  331. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  332. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  333. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  334. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  335. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  336. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  337. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  338. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  339. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  340. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  341. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  342. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  343. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  344. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  345. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  346. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  347. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  348. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  349. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  350. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  351. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  352. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +21 -25
  353. claude_mpm/skills/bundled/testing/condition-based-waiting/example.ts +158 -0
  354. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  355. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  356. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  357. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  358. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  359. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  360. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +86 -250
  361. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  362. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  363. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  364. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  365. claude_mpm/skills/bundled/testing/webapp-testing/LICENSE.txt +202 -0
  366. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +145 -57
  367. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  368. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +6 -6
  369. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +13 -9
  370. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +8 -8
  371. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  372. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  373. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +37 -15
  374. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  375. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  376. claude_mpm/skills/skills_registry.py +44 -48
  377. claude_mpm/skills/skills_service.py +117 -108
  378. claude_mpm/templates/questions/EXAMPLES.md +501 -0
  379. claude_mpm/templates/questions/__init__.py +43 -0
  380. claude_mpm/templates/questions/base.py +193 -0
  381. claude_mpm/templates/questions/pr_strategy.py +314 -0
  382. claude_mpm/templates/questions/project_init.py +388 -0
  383. claude_mpm/templates/questions/ticket_mgmt.py +397 -0
  384. claude_mpm/tools/README_SOCKETIO_DEBUG.md +224 -0
  385. claude_mpm/tools/__main__.py +8 -8
  386. claude_mpm/tools/code_tree_analyzer/README.md +64 -0
  387. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  388. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  389. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  390. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  391. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  392. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  393. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  394. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  395. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  396. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  397. claude_mpm/utils/agent_dependency_loader.py +3 -3
  398. claude_mpm/utils/dependency_cache.py +3 -1
  399. claude_mpm/utils/gitignore.py +241 -0
  400. claude_mpm/utils/log_cleanup.py +3 -3
  401. claude_mpm/utils/robust_installer.py +3 -5
  402. claude_mpm/utils/structured_questions.py +619 -0
  403. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/METADATA +218 -31
  404. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/RECORD +409 -246
  405. claude_mpm/agents/templates/.claude-mpm/memories/README.md +0 -17
  406. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +0 -3
  407. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +0 -39
  408. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +0 -400
  409. claude_mpm/cli/commands/mpm_init.py +0 -2093
  410. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +0 -1
  411. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +0 -61
  412. claude_mpm/dashboard/static/archive/test_activity_connection.html +0 -179
  413. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +0 -68
  414. claude_mpm/dashboard/static/archive/test_dashboard.html +0 -409
  415. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +0 -519
  416. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +0 -181
  417. claude_mpm/dashboard/static/archive/test_file_data.html +0 -315
  418. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +0 -243
  419. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +0 -234
  420. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +0 -117
  421. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +0 -115
  422. claude_mpm/dashboard/static/archive/test_file_viewer.html +0 -224
  423. claude_mpm/dashboard/static/archive/test_final_activity.html +0 -220
  424. claude_mpm/dashboard/static/archive/test_tab_fix.html +0 -139
  425. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +0 -1
  426. claude_mpm/dashboard/static/dist/components/activity-tree.js +0 -2
  427. claude_mpm/dashboard/static/dist/components/agent-inference.js +0 -2
  428. claude_mpm/dashboard/static/dist/components/code-tree.js +0 -2
  429. claude_mpm/dashboard/static/dist/components/code-viewer.js +0 -2
  430. claude_mpm/dashboard/static/dist/components/event-processor.js +0 -2
  431. claude_mpm/dashboard/static/dist/components/event-viewer.js +0 -2
  432. claude_mpm/dashboard/static/dist/components/export-manager.js +0 -2
  433. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +0 -2
  434. claude_mpm/dashboard/static/dist/components/file-viewer.js +0 -2
  435. claude_mpm/dashboard/static/dist/components/hud-library-loader.js +0 -2
  436. claude_mpm/dashboard/static/dist/components/hud-manager.js +0 -2
  437. claude_mpm/dashboard/static/dist/components/hud-visualizer.js +0 -2
  438. claude_mpm/dashboard/static/dist/components/module-viewer.js +0 -2
  439. claude_mpm/dashboard/static/dist/components/session-manager.js +0 -2
  440. claude_mpm/dashboard/static/dist/components/socket-manager.js +0 -2
  441. claude_mpm/dashboard/static/dist/components/ui-state-manager.js +0 -2
  442. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +0 -2
  443. claude_mpm/dashboard/static/dist/components/working-directory.js +0 -2
  444. claude_mpm/dashboard/static/dist/dashboard.js +0 -2
  445. claude_mpm/dashboard/static/dist/react/events.js +0 -30
  446. claude_mpm/dashboard/static/dist/socket-client.js +0 -2
  447. claude_mpm/dashboard/static/test-archive/test_debug.html +0 -25
  448. claude_mpm/skills/bundled/debugging/verification-before-completion/references/common-failures.md +0 -213
  449. claude_mpm/tools/code_tree_analyzer.py +0 -1825
  450. /claude_mpm/skills/bundled/collaboration/requesting-code-review/{code-reviewer.md → references/code-reviewer-template.md} +0 -0
  451. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/WHEEL +0 -0
  452. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/entry_points.txt +0 -0
  453. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/licenses/LICENSE +0 -0
  454. {claude_mpm-4.20.3.dist-info → claude_mpm-4.25.10.dist-info}/top_level.txt +0 -0
@@ -146,6 +146,62 @@ def execute_command(command: str, args) -> int:
146
146
  # Convert CommandResult to exit code
147
147
  return result.exit_code if result else 0
148
148
 
149
+ # Handle hook-errors command with lazy import
150
+ if command == "hook-errors":
151
+ # Lazy import to avoid loading unless needed
152
+ from .commands.hook_errors import (
153
+ clear_errors,
154
+ diagnose_errors,
155
+ list_errors,
156
+ show_status,
157
+ show_summary,
158
+ )
159
+
160
+ # Get subcommand
161
+ subcommand = getattr(args, "hook_errors_command", "status")
162
+ if not subcommand:
163
+ subcommand = "status"
164
+
165
+ # Map subcommands to functions
166
+ handlers = {
167
+ "list": list_errors,
168
+ "summary": show_summary,
169
+ "clear": clear_errors,
170
+ "diagnose": diagnose_errors,
171
+ "status": show_status,
172
+ }
173
+
174
+ # Get handler and invoke
175
+ handler = handlers.get(subcommand)
176
+ if handler:
177
+ # Build Click context programmatically
178
+ import click
179
+
180
+ ctx = click.Context(command=handler)
181
+
182
+ # Prepare keyword arguments from args
183
+ kwargs = {}
184
+ if hasattr(args, "format"):
185
+ kwargs["format"] = args.format
186
+ if hasattr(args, "hook_type"):
187
+ kwargs["hook_type"] = args.hook_type
188
+ if hasattr(args, "yes"):
189
+ kwargs["yes"] = args.yes
190
+
191
+ try:
192
+ # Invoke handler with arguments
193
+ with ctx:
194
+ handler.invoke(ctx, **kwargs)
195
+ return 0
196
+ except SystemExit as e:
197
+ return e.code if e.code is not None else 0
198
+ except Exception as e:
199
+ print(f"Error: {e}")
200
+ return 1
201
+ else:
202
+ print(f"Unknown hook-errors subcommand: {subcommand}")
203
+ return 1
204
+
149
205
  # Map stable commands to their implementations
150
206
  command_map = {
151
207
  CLICommands.RUN.value: run_session,
@@ -55,7 +55,7 @@ class AgentWizard:
55
55
  model = self._get_model_choice()
56
56
 
57
57
  # Step 5: Inheritance Option
58
- parent_agent, base_template = self._get_inheritance_option()
58
+ parent_agent, _base_template = self._get_inheritance_option()
59
59
 
60
60
  # Step 6: Capabilities Configuration
61
61
  capabilities = self._get_capabilities_configuration()
@@ -178,25 +178,25 @@ class AgentWizard:
178
178
  if not result[0]:
179
179
  print(f"❌ {result[1]}")
180
180
  elif choice_num == len(templates) + 1:
181
- success, message = self.run_interactive_create()
181
+ _, message = self.run_interactive_create()
182
182
  if message:
183
183
  # Message already has emoji from the function
184
184
  print(f"\n{message}")
185
185
  continue # Return to main menu
186
186
  elif choice_num == len(templates) + 2:
187
- success, message = self._interactive_delete_menu(templates)
187
+ _, message = self._interactive_delete_menu(templates)
188
188
  if message:
189
189
  # Message already has emoji from the function
190
190
  print(f"\n{message}")
191
191
  continue # Return to main menu
192
192
  elif choice_num == len(templates) + 3:
193
- success, message = self._interactive_import()
193
+ _, message = self._interactive_import()
194
194
  if message:
195
195
  # Message already has emoji from the function
196
196
  print(f"\n{message}")
197
197
  continue # Return to main menu
198
198
  elif choice_num == len(templates) + 4:
199
- success, message = self._interactive_export()
199
+ _success, message = self._interactive_export()
200
200
  if message:
201
201
  # Message already has emoji from the function
202
202
  print(f"\n{message}")
@@ -541,6 +541,34 @@ def create_parser(
541
541
  from ..commands.verify import add_parser as add_verify_parser
542
542
 
543
543
  add_verify_parser(subparsers)
544
+
545
+ # Add hook-errors command for managing hook error memory
546
+ hook_errors_parser = subparsers.add_parser(
547
+ "hook-errors",
548
+ help="Manage hook error memory and diagnostics",
549
+ )
550
+ hook_errors_parser.add_argument(
551
+ "hook_errors_command",
552
+ nargs="?",
553
+ choices=["list", "summary", "clear", "diagnose", "status"],
554
+ help="Hook errors subcommand",
555
+ )
556
+ hook_errors_parser.add_argument(
557
+ "--format",
558
+ choices=["table", "json"],
559
+ default="table",
560
+ help="Output format for list command",
561
+ )
562
+ hook_errors_parser.add_argument(
563
+ "--hook-type",
564
+ help="Filter by specific hook type",
565
+ )
566
+ hook_errors_parser.add_argument(
567
+ "-y",
568
+ "--yes",
569
+ action="store_true",
570
+ help="Skip confirmation prompts",
571
+ )
544
572
  except ImportError:
545
573
  # Commands module may not be available during testing or refactoring
546
574
  pass
@@ -265,5 +265,47 @@ def add_mpm_init_subparser(subparsers: Any) -> None:
265
265
  help="Path to project directory (default: current directory)",
266
266
  )
267
267
 
268
+ # Pause subcommand - Create session pause documents
269
+ pause_parser = subcommands.add_parser(
270
+ "pause",
271
+ help="Pause current session and save state",
272
+ description="Create session pause documents for later resume. Captures git context, "
273
+ "conversation state, todos, and working directory state.\n\n"
274
+ "Creates three file formats:\n"
275
+ " - JSON: Machine-readable structured data\n"
276
+ " - YAML: Human-readable configuration style\n"
277
+ " - Markdown: Full documentation format",
278
+ formatter_class=argparse.RawDescriptionHelpFormatter,
279
+ epilog="Examples:\n"
280
+ " claude-mpm mpm-init pause # Basic pause\n"
281
+ " claude-mpm mpm-init pause -m 'End of day' # With message\n"
282
+ " claude-mpm mpm-init pause --no-commit # Skip git commit\n"
283
+ " claude-mpm mpm-init pause --export session.json # Export copy",
284
+ )
285
+ pause_parser.add_argument(
286
+ "--message",
287
+ "-m",
288
+ type=str,
289
+ default=None,
290
+ help="Optional message describing pause reason or context",
291
+ )
292
+ pause_parser.add_argument(
293
+ "--no-commit",
294
+ action="store_true",
295
+ help="Skip git commit of session state",
296
+ )
297
+ pause_parser.add_argument(
298
+ "--export",
299
+ type=str,
300
+ default=None,
301
+ help="Export session state to custom location",
302
+ )
303
+ pause_parser.add_argument(
304
+ "project_path",
305
+ nargs="?",
306
+ default=".",
307
+ help="Path to project directory (default: current directory)",
308
+ )
309
+
268
310
  # Set the command handler
269
311
  mpm_init_parser.set_defaults(command="mpm-init")
@@ -134,4 +134,142 @@ def add_skills_subparser(subparsers) -> argparse.ArgumentParser:
134
134
  help="Show configuration file path",
135
135
  )
136
136
 
137
+ # GitHub deployment commands
138
+ # Deploy from GitHub command
139
+ deploy_github_parser = skills_subparsers.add_parser(
140
+ SkillsCommands.DEPLOY_FROM_GITHUB.value,
141
+ help="Deploy skills from GitHub to ~/.claude/skills/ for Claude Code",
142
+ )
143
+ deploy_github_parser.add_argument(
144
+ "--collection",
145
+ "-c",
146
+ help="Collection to deploy from (default: uses default collection)",
147
+ )
148
+ deploy_github_parser.add_argument(
149
+ "--toolchain",
150
+ nargs="+",
151
+ help="Filter by toolchain/language (e.g., python javascript rust)",
152
+ )
153
+ deploy_github_parser.add_argument(
154
+ "--categories",
155
+ nargs="+",
156
+ help="Filter by categories (e.g., testing debugging web)",
157
+ )
158
+ deploy_github_parser.add_argument(
159
+ "--force",
160
+ action="store_true",
161
+ help="Force redeployment of already deployed skills",
162
+ )
163
+ deploy_github_parser.add_argument(
164
+ "--all",
165
+ action="store_true",
166
+ help="Deploy all available skills (no filtering)",
167
+ )
168
+
169
+ # List available GitHub skills
170
+ list_available_parser = skills_subparsers.add_parser(
171
+ SkillsCommands.LIST_AVAILABLE.value,
172
+ help="List all available skills from GitHub repository",
173
+ )
174
+ list_available_parser.add_argument(
175
+ "--collection",
176
+ "-c",
177
+ help="Collection to list from (default: uses default collection)",
178
+ )
179
+ list_available_parser.add_argument(
180
+ "--verbose",
181
+ "-v",
182
+ action="store_true",
183
+ help="Show detailed skill information including names",
184
+ )
185
+
186
+ # Check deployed skills
187
+ skills_subparsers.add_parser(
188
+ SkillsCommands.CHECK_DEPLOYED.value,
189
+ help="Check which skills are currently deployed in ~/.claude/skills/",
190
+ )
191
+
192
+ # Remove skills
193
+ remove_parser = skills_subparsers.add_parser(
194
+ SkillsCommands.REMOVE.value,
195
+ help="Remove deployed skills from ~/.claude/skills/",
196
+ )
197
+ remove_parser.add_argument(
198
+ "skill_names",
199
+ nargs="*",
200
+ help="Specific skills to remove",
201
+ )
202
+ remove_parser.add_argument(
203
+ "--all",
204
+ action="store_true",
205
+ help="Remove all deployed skills",
206
+ )
207
+
208
+ # Collection management commands
209
+ # List collections
210
+ skills_subparsers.add_parser(
211
+ SkillsCommands.COLLECTION_LIST.value,
212
+ help="List all configured skill collections",
213
+ )
214
+
215
+ # Add collection
216
+ collection_add_parser = skills_subparsers.add_parser(
217
+ SkillsCommands.COLLECTION_ADD.value,
218
+ help="Add a new skill collection from GitHub",
219
+ )
220
+ collection_add_parser.add_argument(
221
+ "collection_name",
222
+ help="Name for the collection (e.g., obra-superpowers)",
223
+ )
224
+ collection_add_parser.add_argument(
225
+ "collection_url",
226
+ help="GitHub repository URL (e.g., https://github.com/obra/superpowers)",
227
+ )
228
+ collection_add_parser.add_argument(
229
+ "--priority",
230
+ type=int,
231
+ default=99,
232
+ help="Collection priority (lower = higher priority, default: 99)",
233
+ )
234
+
235
+ # Remove collection
236
+ collection_remove_parser = skills_subparsers.add_parser(
237
+ SkillsCommands.COLLECTION_REMOVE.value,
238
+ help="Remove a skill collection",
239
+ )
240
+ collection_remove_parser.add_argument(
241
+ "collection_name",
242
+ help="Name of the collection to remove",
243
+ )
244
+
245
+ # Enable collection
246
+ collection_enable_parser = skills_subparsers.add_parser(
247
+ SkillsCommands.COLLECTION_ENABLE.value,
248
+ help="Enable a disabled collection",
249
+ )
250
+ collection_enable_parser.add_argument(
251
+ "collection_name",
252
+ help="Name of the collection to enable",
253
+ )
254
+
255
+ # Disable collection
256
+ collection_disable_parser = skills_subparsers.add_parser(
257
+ SkillsCommands.COLLECTION_DISABLE.value,
258
+ help="Disable a collection without removing it",
259
+ )
260
+ collection_disable_parser.add_argument(
261
+ "collection_name",
262
+ help="Name of the collection to disable",
263
+ )
264
+
265
+ # Set default collection
266
+ collection_set_default_parser = skills_subparsers.add_parser(
267
+ SkillsCommands.COLLECTION_SET_DEFAULT.value,
268
+ help="Set the default collection for deployments",
269
+ )
270
+ collection_set_default_parser.add_argument(
271
+ "collection_name",
272
+ help="Name of the collection to set as default",
273
+ )
274
+
137
275
  return skills_parser
claude_mpm/cli/startup.py CHANGED
@@ -19,23 +19,34 @@ def setup_early_environment(argv):
19
19
  WHY: Some commands need special environment handling before any logging
20
20
  or service initialization occurs.
21
21
 
22
+ CRITICAL: Suppress ALL logging by default until setup_mcp_server_logging()
23
+ configures the user's preference. This prevents early loggers (like
24
+ ProjectInitializer and service.* loggers) from logging at INFO level before
25
+ we know the user's logging preference.
26
+
22
27
  Args:
23
28
  argv: Command line arguments
24
29
 
25
30
  Returns:
26
31
  Processed argv list
27
32
  """
33
+ import logging
34
+
28
35
  # Disable telemetry and set cleanup flags early
29
36
  os.environ.setdefault("DISABLE_TELEMETRY", "1")
30
37
  os.environ.setdefault("CLAUDE_MPM_SKIP_CLEANUP", "0")
31
38
 
32
- # EARLY CHECK: Suppress logging for configure command
39
+ # CRITICAL: Suppress ALL logging by default
40
+ # This catches all loggers (claude_mpm.*, service.*, framework_loader, etc.)
41
+ # This will be overridden by setup_mcp_server_logging() based on user preference
42
+ logging.getLogger().setLevel(logging.CRITICAL + 1) # Root logger catches everything
43
+
44
+ # Process argv
33
45
  if argv is None:
34
46
  argv = sys.argv[1:]
35
- if "configure" in argv or (len(argv) > 0 and argv[0] == "configure"):
36
- import logging
37
47
 
38
- logging.getLogger("claude_mpm").setLevel(logging.WARNING)
48
+ # EARLY CHECK: Additional suppression for configure command
49
+ if "configure" in argv or (len(argv) > 0 and argv[0] == "configure"):
39
50
  os.environ["CLAUDE_MPM_SKIP_CLEANUP"] = "1"
40
51
 
41
52
  return argv
@@ -160,6 +171,73 @@ def discover_and_link_runtime_skills():
160
171
  # Continue execution - skills discovery failure shouldn't block startup
161
172
 
162
173
 
174
+ def deploy_output_style_on_startup():
175
+ """
176
+ Deploy claude-mpm output style to Claude Code on CLI startup.
177
+
178
+ WHY: Automatically deploy and activate the output style to ensure consistent,
179
+ professional communication without emojis and exclamation points. This ensures
180
+ the style is available even when using Claude Code directly (not via chat command).
181
+
182
+ DESIGN DECISION: This is non-blocking and idempotent. It uses OutputStyleManager
183
+ which handles version detection, file deployment, and settings activation.
184
+ Only works for Claude Code >= 1.0.83.
185
+ """
186
+ try:
187
+ from pathlib import Path
188
+
189
+ from ..core.output_style_manager import OutputStyleManager
190
+
191
+ # Create OutputStyleManager instance
192
+ output_style_manager = OutputStyleManager()
193
+
194
+ # Check if Claude Code supports output styles
195
+ if not output_style_manager.supports_output_styles():
196
+ # Silently skip - version too old or Claude not installed
197
+ return
198
+
199
+ # Check if already deployed and active
200
+ settings_file = Path.home() / ".claude" / "settings.json"
201
+ output_style_file = Path.home() / ".claude" / "output-styles" / "claude-mpm.md"
202
+
203
+ if settings_file.exists() and output_style_file.exists():
204
+ try:
205
+ import json
206
+
207
+ # Check if file has content (bug fix: was skipping empty files)
208
+ if output_style_file.stat().st_size == 0:
209
+ # File is empty, need to redeploy with content
210
+ pass # Fall through to deployment below
211
+ else:
212
+ # File has content, check if already active
213
+ settings = json.loads(settings_file.read_text())
214
+ if settings.get("activeOutputStyle") == "claude-mpm":
215
+ # Already deployed and active with content
216
+ return
217
+ except Exception:
218
+ pass # Continue with deployment if we can't read settings
219
+
220
+ # Read OUTPUT_STYLE.md content
221
+ output_style_path = Path(__file__).parent.parent / "agents" / "OUTPUT_STYLE.md"
222
+
223
+ if not output_style_path.exists():
224
+ # No output style file to deploy
225
+ return
226
+
227
+ output_style_content = output_style_path.read_text()
228
+
229
+ # Deploy the output style (deploys file and activates it)
230
+ output_style_manager.deploy_output_style(output_style_content)
231
+
232
+ except Exception as e:
233
+ # Non-critical - log but don't fail startup
234
+ from ..core.logger import get_logger
235
+
236
+ logger = get_logger("cli")
237
+ logger.debug(f"Failed to deploy output style: {e}")
238
+ # Continue execution - output style deployment shouldn't block startup
239
+
240
+
163
241
  def run_background_services():
164
242
  """
165
243
  Initialize all background services on startup.
@@ -172,6 +250,7 @@ def run_background_services():
172
250
  check_for_updates_async()
173
251
  deploy_bundled_skills()
174
252
  discover_and_link_runtime_skills()
253
+ deploy_output_style_on_startup()
175
254
 
176
255
 
177
256
  def setup_mcp_server_logging(args):
@@ -285,12 +364,12 @@ def check_mcp_auto_configuration():
285
364
  mcp_manager = MCPConfigManager()
286
365
 
287
366
  # Fix any corrupted installations first
288
- fix_success, fix_message = mcp_manager.fix_mcp_service_issues()
367
+ _fix_success, fix_message = mcp_manager.fix_mcp_service_issues()
289
368
  if fix_message and "Fixed:" in fix_message:
290
369
  logger.info(f"MCP service fixes applied: {fix_message}")
291
370
 
292
371
  # Ensure all services are configured correctly
293
- config_success, config_message = mcp_manager.ensure_mcp_services_configured()
372
+ _config_success, config_message = mcp_manager.ensure_mcp_services_configured()
294
373
  if config_message and "Added MCP services" in config_message:
295
374
  logger.info(f"MCP services configured: {config_message}")
296
375
 
@@ -471,7 +550,7 @@ def check_for_updates_async():
471
550
 
472
551
  DESIGN DECISION: This is non-blocking and non-critical - failures are logged
473
552
  but don't prevent startup. Only runs for pip/pipx/npm installations, skips
474
- editable/development installations.
553
+ editable/development installations. Respects user configuration settings.
475
554
  """
476
555
 
477
556
  def run_update_check():
@@ -480,11 +559,27 @@ def check_for_updates_async():
480
559
  try:
481
560
  import asyncio
482
561
 
562
+ from ..core.config import Config
483
563
  from ..core.logger import get_logger
484
564
  from ..services.self_upgrade_service import SelfUpgradeService
485
565
 
486
566
  logger = get_logger("upgrade_check")
487
567
 
568
+ # Load configuration
569
+ config = Config()
570
+ updates_config = config.get("updates", {})
571
+
572
+ # Check if update checking is enabled
573
+ if not updates_config.get("check_enabled", True):
574
+ logger.debug("Update checking disabled in configuration")
575
+ return
576
+
577
+ # Check frequency setting
578
+ frequency = updates_config.get("check_frequency", "daily")
579
+ if frequency == "never":
580
+ logger.debug("Update checking frequency set to 'never'")
581
+ return
582
+
488
583
  # Create new event loop for this thread
489
584
  loop = asyncio.new_event_loop()
490
585
  asyncio.set_event_loop(loop)
@@ -499,8 +594,16 @@ def check_for_updates_async():
499
594
  logger.debug("Skipping version check for editable installation")
500
595
  return
501
596
 
597
+ # Get configuration values
598
+ check_claude_code = updates_config.get("check_claude_code", True)
599
+ auto_upgrade = updates_config.get("auto_upgrade", False)
600
+
502
601
  # Check and prompt for upgrade if available (non-blocking)
503
- loop.run_until_complete(upgrade_service.check_and_prompt_on_startup())
602
+ loop.run_until_complete(
603
+ upgrade_service.check_and_prompt_on_startup(
604
+ auto_upgrade=auto_upgrade, check_claude_code=check_claude_code
605
+ )
606
+ )
504
607
 
505
608
  except Exception as e:
506
609
  # Non-critical - log but don't fail startup