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
@@ -15,10 +15,10 @@
15
15
 
16
16
  <!-- External Dependencies -->
17
17
  <script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
18
-
18
+
19
19
  <!-- D3.js for Activity Tree Visualization -->
20
20
  <script src="https://d3js.org/d3.v7.min.js"></script>
21
-
21
+
22
22
  <!-- Font Awesome for icons -->
23
23
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
24
24
 
@@ -141,7 +141,7 @@
141
141
  <body>
142
142
  <!-- Connection Notifications Area -->
143
143
  <div id="connection-notifications" class="connection-notifications"></div>
144
-
144
+
145
145
  <div class="container">
146
146
  <!-- Header Section -->
147
147
  <div class="header">
@@ -435,19 +435,19 @@
435
435
  // Set up working directory environment variables
436
436
  // These will be used by the working-directory component
437
437
  // The server will inject these values through a separate API call
438
-
438
+
439
439
  // Get the current working directory from the server
440
440
  fetch('/api/working-directory')
441
441
  .then(response => response.json())
442
442
  .then(data => {
443
443
  window.processWorkingDirectory = data.working_directory || '/Users/masa/Projects/claude-mpm';
444
444
  window.homeDirectory = data.home_directory || '/Users/masa';
445
-
445
+
446
446
  // Store in session storage for persistence
447
447
  if (window.processWorkingDirectory && window.processWorkingDirectory !== '/') {
448
448
  sessionStorage.setItem('currentWorkingDirectory', window.processWorkingDirectory);
449
449
  }
450
-
450
+
451
451
  // Dispatch event to notify components that working directory is ready
452
452
  window.dispatchEvent(new CustomEvent('workingDirectoryInitialized', {
453
453
  detail: {
@@ -462,10 +462,10 @@
462
462
  window.processWorkingDirectory = '/Users/masa/Projects/claude-mpm';
463
463
  window.homeDirectory = '/Users/masa';
464
464
  });
465
-
465
+
466
466
  // Add timestamp-based cache busting and ensure proper loading order
467
467
  const timestamp = Date.now();
468
-
468
+
469
469
  // Load modules sequentially to ensure dashboard.js loads first
470
470
  const loadModule = (src) => {
471
471
  return new Promise((resolve, reject) => {
@@ -477,7 +477,7 @@
477
477
  document.body.appendChild(script);
478
478
  });
479
479
  };
480
-
480
+
481
481
  // Load shared services first, then components
482
482
  // Load services sequentially to ensure dependencies are available
483
483
  loadModule('/static/js/shared/tooltip-service.js')
@@ -540,21 +540,21 @@
540
540
  console.error('[CRITICAL] Error loading dashboard modules:', error);
541
541
  console.error('Stack trace:', error.stack);
542
542
  });
543
-
543
+
544
544
  // Give modules time to execute and initialize dashboard
545
545
  setTimeout(() => {
546
546
  console.log('Checking dashboard initialization...');
547
-
547
+
548
548
  if (window.dashboard) {
549
549
  console.log('Dashboard found, checking auto-connect status...');
550
-
550
+
551
551
  // Force auto-connect if not already connected
552
552
  if (window.dashboard.socketManager) {
553
553
  const socketManager = window.dashboard.socketManager;
554
-
554
+
555
555
  if (!socketManager.isConnected() && !socketManager.isConnecting()) {
556
556
  console.log('Dashboard loaded but not connected, forcing auto-connect...');
557
-
557
+
558
558
  // Try to trigger auto-connect manually
559
559
  const params = new URLSearchParams(window.location.search);
560
560
  socketManager.initializeFromURL(params);
@@ -566,23 +566,23 @@
566
566
  }
567
567
  } else {
568
568
  console.warn('Dashboard still not initialized after module loading');
569
-
569
+
570
570
  // Try to manually trigger initialization
571
571
  if (document.readyState === 'complete' || document.readyState === 'interactive') {
572
572
  console.log('Document ready, attempting to trigger dashboard initialization...');
573
573
  document.dispatchEvent(new Event('DOMContentLoaded'));
574
574
  }
575
575
  }
576
-
576
+
577
577
  // Debug: Test connection settings button
578
578
  const connectionToggleBtn = document.getElementById('connection-toggle-btn');
579
579
  if (connectionToggleBtn) {
580
580
  console.log('Connection toggle button found, testing functionality...');
581
-
581
+
582
582
  // Add a debug click handler to ensure the button works
583
583
  connectionToggleBtn.addEventListener('click', () => {
584
584
  console.log('Connection toggle button clicked (debug handler)');
585
-
585
+
586
586
  if (window.dashboard && window.dashboard.socketManager) {
587
587
  console.log('Calling socketManager.toggleConnectionControls()');
588
588
  window.dashboard.socketManager.toggleConnectionControls();
@@ -0,0 +1,143 @@
1
+ # Claude Code Hooks System
2
+
3
+ This directory contains the Claude Code hook integration for claude-mpm.
4
+
5
+ ## Overview
6
+
7
+ The hook system allows claude-mpm to intercept and handle commands typed in Claude Code, particularly the `/mpm` commands.
8
+
9
+ ## Version Requirements
10
+
11
+ **Claude Code 1.0.92 or higher is required for hook monitoring features.**
12
+
13
+ Earlier versions of Claude Code do not support the matcher-based hook configuration format needed for real-time event monitoring. If you have an older version:
14
+ - The dashboard and other features will still work
15
+ - Real-time monitoring will not be available
16
+ - You'll see a clear message about the version requirement
17
+ - To enable monitoring, upgrade Claude Code to 1.0.92+
18
+
19
+ **Claude Code 2.0.30 or higher is required for PreToolUse input modification.**
20
+
21
+ This advanced feature allows hooks to modify tool inputs before execution, enabling:
22
+ - Context injection into file operations
23
+ - Security guards that validate and block dangerous operations
24
+ - Parameter enhancement with default values
25
+ - Logging and auditing of tool invocations
26
+
27
+ See [PreToolUse Hook Documentation](../../docs/developer/pretool-use-hooks.md) for details.
28
+
29
+ ## Architecture (v4.1.8+)
30
+
31
+ Claude MPM uses a **deployment-root hook architecture** where Claude Code directly calls a script within the claude-mpm installation. See [HOOK_ARCHITECTURE.md](../../docs/developer/HOOK_ARCHITECTURE.md) for details.
32
+
33
+ ## Structure
34
+
35
+ ```
36
+ hooks/
37
+ ├── claude_hooks/ # Claude Code hook implementation
38
+ │ ├── hook_handler.py # Main Python handler that processes events
39
+ │ ├── installer.py # Hook installation and configuration
40
+ │ ├── event_handlers.py # Event processing logic
41
+ │ ├── memory_integration.py # Memory system integration
42
+ │ ├── response_tracking.py # Response tracking
43
+ │ └── services/ # Service modules
44
+ │ ├── connection_manager.py # SocketIO/HTTP connections
45
+ │ ├── state_manager.py # State and delegation tracking
46
+ │ └── subagent_processor.py # Subagent response processing
47
+ ├── templates/ # Hook script templates
48
+ │ ├── pre_tool_use_template.py # Comprehensive PreToolUse template
49
+ │ ├── pre_tool_use_simple.py # Simple PreToolUse template
50
+ │ └── README.md # Template documentation
51
+ └── scripts/
52
+ └── claude-hook-handler.sh # Deployment-root hook script (called by Claude Code)
53
+ ```
54
+
55
+ ## Claude Code Hooks
56
+
57
+ The Claude Code hooks are the primary integration point between claude-mpm and Claude Code. They allow:
58
+
59
+ - Intercepting `/mpm` commands before they reach the LLM
60
+ - Providing custom responses and actions
61
+ - Blocking LLM processing when appropriate
62
+
63
+ ### Installation
64
+
65
+ To install the Claude Code hooks:
66
+
67
+ ```bash
68
+ # Using the configure command (recommended)
69
+ claude-mpm configure --install-hooks
70
+
71
+ # Or check your version compatibility first
72
+ claude-mpm configure --verify-hooks
73
+ ```
74
+
75
+ This will:
76
+ 1. Check your Claude Code version for compatibility
77
+ 2. If compatible (1.0.92+), create/update `~/.claude/settings.json` with hook configuration
78
+ 3. Install the smart hook script that dynamically finds claude-mpm
79
+ 4. Copy any custom commands to `~/.claude/commands/`
80
+
81
+ If your Claude Code version is older than 1.0.92:
82
+ - You'll see a message explaining the version requirement
83
+ - Hooks will not be installed to prevent configuration errors
84
+ - The system will continue to work without real-time monitoring
85
+
86
+ ### How It Works
87
+
88
+ 1. When you type in Claude Code, it triggers hook events
89
+ 2. Claude Code calls `hook_wrapper.sh` (the path in `~/.claude/settings.json`)
90
+ 3. The wrapper script:
91
+ - Detects if it's running from a local dev environment, npm, or PyPI installation
92
+ - Activates the appropriate Python environment
93
+ - Runs `hook_handler.py` with the event data
94
+ 4. The handler processes various event types:
95
+ - **UserPromptSubmit**: Checks if the prompt starts with `/mpm` and handles commands
96
+ - **PreToolUse**: Logs tool usage before execution
97
+ - **PostToolUse**: Logs tool results after execution
98
+ - **Stop**: Logs when a session or task stops
99
+ - **SubagentStop**: Logs when a subagent completes with agent type and ID
100
+ 5. For `/mpm` commands, it returns exit code 2 to block LLM processing
101
+ 6. All events are logged to project-specific log files in `.claude-mpm/logs/`
102
+
103
+ ### Available Commands
104
+
105
+ - `/mpm` - Show help and available commands
106
+ - `/mpm status` - Show claude-mpm status and environment
107
+ - `/mpm help` - Show detailed help
108
+
109
+ ### Debugging
110
+
111
+ To enable debug logging for hooks:
112
+
113
+ ```bash
114
+ export CLAUDE_MPM_LOG_LEVEL=DEBUG
115
+ ```
116
+
117
+ Then run Claude Code from that terminal. Hook events will be logged to `~/.claude-mpm/logs/`.
118
+
119
+ ## Legacy Hook System (Removed)
120
+
121
+ The `builtin/` directory that contained the old internal hook system has been removed. All hook functionality is now handled through the Claude Code hooks system.
122
+
123
+ ## Development
124
+
125
+ To add new `/mpm` commands:
126
+
127
+ 1. Edit `hook_handler.py` to handle the new command
128
+ 2. Update the help text in the `handle_mpm_help()` function
129
+ 3. Test by running Claude Code with the new command
130
+
131
+ ## Exit Codes
132
+
133
+ The hook system uses specific exit codes:
134
+
135
+ - `0` - Success, continue normal processing
136
+ - `2` - Block LLM processing (command was handled)
137
+ - Other - Error occurred
138
+
139
+ ## Environment Variables
140
+
141
+ - `CLAUDE_MPM_LOG_LEVEL` - Set to DEBUG for detailed logging
142
+ - `HOOK_EVENT_TYPE` - Set by Claude Code (UserPromptSubmit, PreToolUse, PostToolUse)
143
+ - `HOOK_DATA` - JSON data from Claude Code with event details
@@ -393,7 +393,9 @@ class EventHandlers:
393
393
  "status": (
394
394
  "success"
395
395
  if exit_code == 0
396
- else "blocked" if exit_code == 2 else "error"
396
+ else "blocked"
397
+ if exit_code == 2
398
+ else "error"
397
399
  ),
398
400
  "duration_ms": duration,
399
401
  "result_summary": result_data,
@@ -311,11 +311,12 @@ class ClaudeHookHandler:
311
311
  )
312
312
 
313
313
  # Route event to appropriate handler
314
- self._route_event(event)
314
+ # Handlers can optionally return modified input for PreToolUse events
315
+ modified_input = self._route_event(event)
315
316
 
316
317
  # Always continue execution (only if not already sent)
317
318
  if not _continue_sent:
318
- self._continue_execution()
319
+ self._continue_execution(modified_input)
319
320
  _continue_sent = True
320
321
 
321
322
  except Exception:
@@ -376,7 +377,7 @@ class ClaudeHookHandler:
376
377
  print(f"Error reading hook event: {e}", file=sys.stderr)
377
378
  return None
378
379
 
379
- def _route_event(self, event: dict) -> None:
380
+ def _route_event(self, event: dict) -> Optional[dict]:
380
381
  """
381
382
  Route event to appropriate handler based on type.
382
383
 
@@ -385,6 +386,9 @@ class ClaudeHookHandler:
385
386
 
386
387
  Args:
387
388
  event: Hook event dictionary
389
+
390
+ Returns:
391
+ Modified input for PreToolUse events (v2.0.30+), None otherwise
388
392
  """
389
393
  # Try multiple field names for compatibility
390
394
  hook_type = (
@@ -416,23 +420,36 @@ class ClaudeHookHandler:
416
420
  handler = event_handlers.get(hook_type)
417
421
  if handler:
418
422
  try:
419
- handler(event)
423
+ # Handlers can optionally return modified input
424
+ result = handler(event)
425
+ # Only PreToolUse handlers should return modified input
426
+ if hook_type == "PreToolUse" and result is not None:
427
+ return result
420
428
  except Exception as e:
421
429
  if DEBUG:
422
430
  print(f"Error handling {hook_type}: {e}", file=sys.stderr)
423
431
 
432
+ return None
433
+
424
434
  def handle_subagent_stop(self, event: dict):
425
435
  """Delegate subagent stop processing to the specialized processor."""
426
436
  self.subagent_processor.process_subagent_stop(event)
427
437
 
428
- def _continue_execution(self) -> None:
438
+ def _continue_execution(self, modified_input: Optional[dict] = None) -> None:
429
439
  """
430
- Send continue action to Claude.
440
+ Send continue action to Claude with optional input modification.
431
441
 
432
442
  WHY: Centralized response ensures consistent format
433
443
  and makes it easier to add response modifications.
444
+
445
+ Args:
446
+ modified_input: Modified tool parameters for PreToolUse hooks (v2.0.30+)
434
447
  """
435
- print(json.dumps({"action": "continue"}))
448
+ if modified_input is not None:
449
+ # Claude Code v2.0.30+ supports modifying PreToolUse tool inputs
450
+ print(json.dumps({"action": "continue", "tool_input": modified_input}))
451
+ else:
452
+ print(json.dumps({"action": "continue"}))
436
453
 
437
454
  # Delegation methods for compatibility with event_handlers
438
455
  def _track_delegation(self, session_id: str, agent_type: str, request_data=None):
@@ -192,6 +192,8 @@ main "$@"
192
192
 
193
193
  # Minimum Claude Code version required for hook monitoring
194
194
  MIN_CLAUDE_VERSION = "1.0.92"
195
+ # Minimum version for PreToolUse input modification support
196
+ MIN_PRETOOL_MODIFY_VERSION = "2.0.30"
195
197
 
196
198
  def __init__(self):
197
199
  """Initialize the hook installer."""
@@ -292,6 +294,42 @@ main "$@"
292
294
 
293
295
  return (True, f"Claude Code {version} is compatible with hook monitoring.")
294
296
 
297
+ def supports_pretool_modify(self) -> bool:
298
+ """
299
+ Check if the installed Claude Code version supports PreToolUse input modification.
300
+
301
+ PreToolUse input modification was added in Claude Code v2.0.30.
302
+
303
+ Returns:
304
+ True if version supports input modification, False otherwise
305
+ """
306
+ version = self.get_claude_version()
307
+
308
+ if version is None:
309
+ return False
310
+
311
+ def parse_version(v: str) -> List[int]:
312
+ """Parse semantic version string to list of integers."""
313
+ try:
314
+ return [int(x) for x in v.split(".")]
315
+ except (ValueError, AttributeError):
316
+ return [0]
317
+
318
+ current = parse_version(version)
319
+ required = parse_version(self.MIN_PRETOOL_MODIFY_VERSION)
320
+
321
+ # Compare versions
322
+ for i in range(max(len(current), len(required))):
323
+ curr_part = current[i] if i < len(current) else 0
324
+ req_part = required[i] if i < len(required) else 0
325
+
326
+ if curr_part < req_part:
327
+ return False
328
+ if curr_part > req_part:
329
+ return True
330
+
331
+ return True
332
+
295
333
  def get_hook_script_path(self) -> Path:
296
334
  """Get the path to the hook handler script based on installation method.
297
335
 
@@ -677,6 +715,7 @@ main "$@"
677
715
  # Check version compatibility
678
716
  claude_version = self.get_claude_version()
679
717
  is_compatible, version_message = self.is_version_compatible()
718
+ pretool_modify_supported = self.supports_pretool_modify()
680
719
 
681
720
  is_valid, issues = self.verify_hooks()
682
721
 
@@ -701,6 +740,12 @@ main "$@"
701
740
  "version_compatible": is_compatible,
702
741
  "version_message": version_message,
703
742
  "deployment_type": "deployment-root", # New field to indicate new architecture
743
+ "pretool_modify_supported": pretool_modify_supported, # v2.0.30+ feature
744
+ "pretool_modify_message": (
745
+ f"PreToolUse input modification supported (v{claude_version})"
746
+ if pretool_modify_supported
747
+ else f"PreToolUse input modification requires Claude Code {self.MIN_PRETOOL_MODIFY_VERSION}+ (current: {claude_version or 'unknown'})"
748
+ ),
704
749
  }
705
750
 
706
751
  # Check Claude settings for hook configuration
@@ -0,0 +1,180 @@
1
+ # Claude MPM Hook Templates
2
+
3
+ This directory contains ready-to-use hook templates for extending Claude Code functionality.
4
+
5
+ ## Available Templates
6
+
7
+ ### PreToolUse Hooks (Claude Code v2.0.30+)
8
+
9
+ #### `pre_tool_use_template.py`
10
+
11
+ Comprehensive template with multiple example implementations:
12
+
13
+ - **ContextInjectionHook**: Auto-inject project context into file operations
14
+ - **SecurityGuardHook**: Block operations on sensitive files
15
+ - **LoggingHook**: Log all tool invocations for debugging
16
+ - **ParameterEnhancementHook**: Add default parameters to tool calls
17
+
18
+ **Usage:**
19
+ ```bash
20
+ # Copy and customize
21
+ cp pre_tool_use_template.py ~/.claude-mpm/hooks/my_hook.py
22
+ chmod +x ~/.claude-mpm/hooks/my_hook.py
23
+
24
+ # Edit to uncomment the implementation you want
25
+ nano ~/.claude-mpm/hooks/my_hook.py
26
+ ```
27
+
28
+ #### `pre_tool_use_simple.py`
29
+
30
+ Minimal example for quick customization:
31
+
32
+ - Shows basic hook structure
33
+ - Includes simple parameter enhancement example
34
+ - Includes security guard example
35
+ - Easy to understand and modify
36
+
37
+ **Usage:**
38
+ ```bash
39
+ # Copy for quick start
40
+ cp pre_tool_use_simple.py ~/.claude-mpm/hooks/my_hook.py
41
+ chmod +x ~/.claude-mpm/hooks/my_hook.py
42
+ ```
43
+
44
+ ## Configuration
45
+
46
+ Add hooks to `~/.claude/settings.json`:
47
+
48
+ ```json
49
+ {
50
+ "hooks": {
51
+ "PreToolUse": [
52
+ {
53
+ "matcher": "*",
54
+ "hooks": [
55
+ {
56
+ "type": "command",
57
+ "command": "/Users/YOUR_USERNAME/.claude-mpm/hooks/my_hook.py",
58
+ "modifyInput": true
59
+ }
60
+ ]
61
+ }
62
+ ]
63
+ }
64
+ }
65
+ ```
66
+
67
+ ## Requirements
68
+
69
+ - Claude Code v2.0.30+ for PreToolUse input modification
70
+ - Python 3.7+
71
+ - claude-mpm installed and configured
72
+
73
+ ## Version Check
74
+
75
+ Check if your Claude Code version supports input modification:
76
+
77
+ ```bash
78
+ claude --version
79
+ ```
80
+
81
+ Or programmatically:
82
+
83
+ ```python
84
+ from claude_mpm.hooks.claude_hooks.installer import HookInstaller
85
+
86
+ installer = HookInstaller()
87
+ if installer.supports_pretool_modify():
88
+ print("✓ PreToolUse input modification supported")
89
+ else:
90
+ print(f"✗ Requires Claude Code 2.0.30+ (current: {installer.get_claude_version()})")
91
+ ```
92
+
93
+ ## Documentation
94
+
95
+ See [PreToolUse Hook Documentation](../../../docs/developer/pretool-use-hooks.md) for:
96
+ - Detailed usage guide
97
+ - Best practices
98
+ - Testing strategies
99
+ - Troubleshooting
100
+ - Advanced examples
101
+
102
+ ## Quick Examples
103
+
104
+ ### Add Line Numbers to Grep
105
+
106
+ ```python
107
+ #!/usr/bin/env python3
108
+ import json
109
+ import sys
110
+
111
+ event = json.loads(sys.stdin.read())
112
+ if event.get("tool_name") == "Grep":
113
+ modified = event["tool_input"].copy()
114
+ modified["-n"] = True
115
+ print(json.dumps({"action": "continue", "tool_input": modified}))
116
+ else:
117
+ print(json.dumps({"action": "continue"}))
118
+ ```
119
+
120
+ ### Block Sensitive Files
121
+
122
+ ```python
123
+ #!/usr/bin/env python3
124
+ import json
125
+ import sys
126
+
127
+ event = json.loads(sys.stdin.read())
128
+ tool_name = event.get("tool_name", "")
129
+ if tool_name in ["Write", "Edit", "Read"]:
130
+ file_path = event["tool_input"].get("file_path", "")
131
+ if ".env" in file_path:
132
+ print(json.dumps({"action": "block", "message": "Access to .env blocked"}))
133
+ sys.exit(0)
134
+
135
+ print(json.dumps({"action": "continue"}))
136
+ ```
137
+
138
+ ### Add Default Timeout to Bash
139
+
140
+ ```python
141
+ #!/usr/bin/env python3
142
+ import json
143
+ import sys
144
+
145
+ event = json.loads(sys.stdin.read())
146
+ if event.get("tool_name") == "Bash":
147
+ modified = event["tool_input"].copy()
148
+ if "timeout" not in modified:
149
+ modified["timeout"] = 30000 # 30 seconds
150
+ print(json.dumps({"action": "continue", "tool_input": modified}))
151
+ sys.exit(0)
152
+
153
+ print(json.dumps({"action": "continue"}))
154
+ ```
155
+
156
+ ## Testing Your Hook
157
+
158
+ Test manually with sample input:
159
+
160
+ ```bash
161
+ echo '{
162
+ "hook_event_name": "PreToolUse",
163
+ "tool_name": "Grep",
164
+ "tool_input": {"pattern": "test"},
165
+ "session_id": "test123",
166
+ "cwd": "/tmp"
167
+ }' | python3 your_hook.py
168
+ ```
169
+
170
+ Enable debug mode:
171
+ ```bash
172
+ export CLAUDE_MPM_HOOK_DEBUG=true
173
+ ```
174
+
175
+ ## Support
176
+
177
+ For issues or questions:
178
+ - See [Documentation](../../../docs/developer/pretool-use-hooks.md)
179
+ - Check [GitHub Issues](https://github.com/yourusername/claude-mpm/issues)
180
+ - Review [Examples](./pre_tool_use_template.py)
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Simple PreToolUse Hook Example for Claude Code v2.0.30+
4
+
5
+ This is a minimal example showing the basic structure of a PreToolUse hook
6
+ that can modify tool inputs.
7
+
8
+ To use this hook:
9
+ 1. Copy this file to ~/.claude-mpm/hooks/
10
+ 2. Make it executable: chmod +x ~/.claude-mpm/hooks/pre_tool_use_simple.py
11
+ 3. Add to ~/.claude/settings.json:
12
+
13
+ {
14
+ "hooks": {
15
+ "PreToolUse": [
16
+ {
17
+ "matcher": "*",
18
+ "hooks": [
19
+ {
20
+ "type": "command",
21
+ "command": "/Users/YOUR_USERNAME/.claude-mpm/hooks/pre_tool_use_simple.py",
22
+ "modifyInput": true
23
+ }
24
+ ]
25
+ }
26
+ ]
27
+ }
28
+ }
29
+ """
30
+
31
+ import json
32
+ import sys
33
+
34
+
35
+ def main():
36
+ """Process PreToolUse event and optionally modify input."""
37
+ try:
38
+ # Read event from stdin
39
+ event_data = sys.stdin.read()
40
+ if not event_data.strip():
41
+ print(json.dumps({"action": "continue"}))
42
+ return
43
+
44
+ event = json.loads(event_data)
45
+ tool_name = event.get("tool_name", "")
46
+ tool_input = event.get("tool_input", {})
47
+
48
+ # Example: Add line numbers to all Grep operations
49
+ if tool_name == "Grep" and "-n" not in tool_input:
50
+ modified_input = tool_input.copy()
51
+ modified_input["-n"] = True
52
+ print(json.dumps({"action": "continue", "tool_input": modified_input}))
53
+ return
54
+
55
+ # Example: Block operations on .env files
56
+ if tool_name in ["Write", "Edit", "Read"]:
57
+ file_path = tool_input.get("file_path", "")
58
+ if ".env" in file_path:
59
+ print(
60
+ json.dumps(
61
+ {
62
+ "action": "block",
63
+ "message": "Access to .env file blocked for security",
64
+ }
65
+ )
66
+ )
67
+ return
68
+
69
+ # Default: continue without modification
70
+ print(json.dumps({"action": "continue"}))
71
+
72
+ except Exception:
73
+ # Always continue on error to avoid blocking Claude
74
+ print(json.dumps({"action": "continue"}))
75
+
76
+
77
+ if __name__ == "__main__":
78
+ main()