claude-mpm 5.4.41__py3-none-any.whl → 5.6.72__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 (490) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +66 -241
  3. claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
  4. claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +109 -1925
  5. claude_mpm/agents/PM_INSTRUCTIONS.md +161 -298
  6. claude_mpm/agents/WORKFLOW.md +2 -0
  7. claude_mpm/agents/templates/circuit-breakers.md +26 -17
  8. claude_mpm/auth/__init__.py +35 -0
  9. claude_mpm/auth/callback_server.py +328 -0
  10. claude_mpm/auth/models.py +104 -0
  11. claude_mpm/auth/oauth_manager.py +266 -0
  12. claude_mpm/auth/providers/__init__.py +12 -0
  13. claude_mpm/auth/providers/base.py +165 -0
  14. claude_mpm/auth/providers/google.py +261 -0
  15. claude_mpm/auth/token_storage.py +252 -0
  16. claude_mpm/cli/__init__.py +5 -1
  17. claude_mpm/cli/commands/agents.py +2 -4
  18. claude_mpm/cli/commands/agents_reconcile.py +197 -0
  19. claude_mpm/cli/commands/autotodos.py +566 -0
  20. claude_mpm/cli/commands/commander.py +216 -0
  21. claude_mpm/cli/commands/configure.py +620 -21
  22. claude_mpm/cli/commands/configure_agent_display.py +3 -1
  23. claude_mpm/cli/commands/hook_errors.py +60 -60
  24. claude_mpm/cli/commands/mcp.py +29 -17
  25. claude_mpm/cli/commands/mcp_command_router.py +39 -0
  26. claude_mpm/cli/commands/mcp_service_commands.py +304 -0
  27. claude_mpm/cli/commands/monitor.py +2 -2
  28. claude_mpm/cli/commands/mpm_init/core.py +15 -8
  29. claude_mpm/cli/commands/oauth.py +481 -0
  30. claude_mpm/cli/commands/profile.py +9 -10
  31. claude_mpm/cli/commands/run.py +35 -3
  32. claude_mpm/cli/commands/skill_source.py +51 -2
  33. claude_mpm/cli/commands/skills.py +182 -32
  34. claude_mpm/cli/executor.py +129 -16
  35. claude_mpm/cli/helpers.py +1 -1
  36. claude_mpm/cli/interactive/__init__.py +10 -0
  37. claude_mpm/cli/interactive/agent_wizard.py +30 -50
  38. claude_mpm/cli/interactive/questionary_styles.py +65 -0
  39. claude_mpm/cli/interactive/skill_selector.py +481 -0
  40. claude_mpm/cli/parsers/base_parser.py +89 -1
  41. claude_mpm/cli/parsers/commander_parser.py +116 -0
  42. claude_mpm/cli/parsers/mcp_parser.py +79 -0
  43. claude_mpm/cli/parsers/oauth_parser.py +165 -0
  44. claude_mpm/cli/parsers/profile_parser.py +0 -1
  45. claude_mpm/cli/parsers/run_parser.py +10 -0
  46. claude_mpm/cli/parsers/skill_source_parser.py +4 -0
  47. claude_mpm/cli/parsers/skills_parser.py +2 -3
  48. claude_mpm/cli/startup.py +662 -524
  49. claude_mpm/cli/startup_display.py +76 -7
  50. claude_mpm/cli/startup_logging.py +2 -2
  51. claude_mpm/cli/utils.py +7 -3
  52. claude_mpm/commander/__init__.py +78 -0
  53. claude_mpm/commander/adapters/__init__.py +60 -0
  54. claude_mpm/commander/adapters/auggie.py +260 -0
  55. claude_mpm/commander/adapters/base.py +288 -0
  56. claude_mpm/commander/adapters/claude_code.py +392 -0
  57. claude_mpm/commander/adapters/codex.py +237 -0
  58. claude_mpm/commander/adapters/communication.py +366 -0
  59. claude_mpm/commander/adapters/example_usage.py +310 -0
  60. claude_mpm/commander/adapters/mpm.py +389 -0
  61. claude_mpm/commander/adapters/registry.py +204 -0
  62. claude_mpm/commander/api/__init__.py +16 -0
  63. claude_mpm/commander/api/app.py +121 -0
  64. claude_mpm/commander/api/errors.py +133 -0
  65. claude_mpm/commander/api/routes/__init__.py +8 -0
  66. claude_mpm/commander/api/routes/events.py +184 -0
  67. claude_mpm/commander/api/routes/inbox.py +171 -0
  68. claude_mpm/commander/api/routes/messages.py +148 -0
  69. claude_mpm/commander/api/routes/projects.py +271 -0
  70. claude_mpm/commander/api/routes/sessions.py +226 -0
  71. claude_mpm/commander/api/routes/work.py +296 -0
  72. claude_mpm/commander/api/schemas.py +186 -0
  73. claude_mpm/commander/chat/__init__.py +7 -0
  74. claude_mpm/commander/chat/cli.py +149 -0
  75. claude_mpm/commander/chat/commands.py +122 -0
  76. claude_mpm/commander/chat/repl.py +1821 -0
  77. claude_mpm/commander/config.py +51 -0
  78. claude_mpm/commander/config_loader.py +115 -0
  79. claude_mpm/commander/core/__init__.py +10 -0
  80. claude_mpm/commander/core/block_manager.py +325 -0
  81. claude_mpm/commander/core/response_manager.py +323 -0
  82. claude_mpm/commander/daemon.py +603 -0
  83. claude_mpm/commander/env_loader.py +59 -0
  84. claude_mpm/commander/events/__init__.py +26 -0
  85. claude_mpm/commander/events/manager.py +392 -0
  86. claude_mpm/commander/frameworks/__init__.py +12 -0
  87. claude_mpm/commander/frameworks/base.py +233 -0
  88. claude_mpm/commander/frameworks/claude_code.py +58 -0
  89. claude_mpm/commander/frameworks/mpm.py +57 -0
  90. claude_mpm/commander/git/__init__.py +5 -0
  91. claude_mpm/commander/git/worktree_manager.py +212 -0
  92. claude_mpm/commander/inbox/__init__.py +16 -0
  93. claude_mpm/commander/inbox/dedup.py +128 -0
  94. claude_mpm/commander/inbox/inbox.py +224 -0
  95. claude_mpm/commander/inbox/models.py +70 -0
  96. claude_mpm/commander/instance_manager.py +865 -0
  97. claude_mpm/commander/llm/__init__.py +6 -0
  98. claude_mpm/commander/llm/openrouter_client.py +167 -0
  99. claude_mpm/commander/llm/summarizer.py +70 -0
  100. claude_mpm/commander/memory/__init__.py +45 -0
  101. claude_mpm/commander/memory/compression.py +347 -0
  102. claude_mpm/commander/memory/embeddings.py +230 -0
  103. claude_mpm/commander/memory/entities.py +310 -0
  104. claude_mpm/commander/memory/example_usage.py +290 -0
  105. claude_mpm/commander/memory/integration.py +325 -0
  106. claude_mpm/commander/memory/search.py +381 -0
  107. claude_mpm/commander/memory/store.py +657 -0
  108. claude_mpm/commander/models/__init__.py +18 -0
  109. claude_mpm/commander/models/events.py +127 -0
  110. claude_mpm/commander/models/project.py +162 -0
  111. claude_mpm/commander/models/work.py +214 -0
  112. claude_mpm/commander/parsing/__init__.py +20 -0
  113. claude_mpm/commander/parsing/extractor.py +132 -0
  114. claude_mpm/commander/parsing/output_parser.py +270 -0
  115. claude_mpm/commander/parsing/patterns.py +100 -0
  116. claude_mpm/commander/persistence/__init__.py +11 -0
  117. claude_mpm/commander/persistence/event_store.py +274 -0
  118. claude_mpm/commander/persistence/state_store.py +403 -0
  119. claude_mpm/commander/persistence/work_store.py +164 -0
  120. claude_mpm/commander/polling/__init__.py +13 -0
  121. claude_mpm/commander/polling/event_detector.py +104 -0
  122. claude_mpm/commander/polling/output_buffer.py +49 -0
  123. claude_mpm/commander/polling/output_poller.py +153 -0
  124. claude_mpm/commander/project_session.py +268 -0
  125. claude_mpm/commander/proxy/__init__.py +12 -0
  126. claude_mpm/commander/proxy/formatter.py +89 -0
  127. claude_mpm/commander/proxy/output_handler.py +191 -0
  128. claude_mpm/commander/proxy/relay.py +155 -0
  129. claude_mpm/commander/registry.py +410 -0
  130. claude_mpm/commander/runtime/__init__.py +10 -0
  131. claude_mpm/commander/runtime/executor.py +191 -0
  132. claude_mpm/commander/runtime/monitor.py +346 -0
  133. claude_mpm/commander/session/__init__.py +6 -0
  134. claude_mpm/commander/session/context.py +81 -0
  135. claude_mpm/commander/session/manager.py +59 -0
  136. claude_mpm/commander/tmux_orchestrator.py +362 -0
  137. claude_mpm/commander/web/__init__.py +1 -0
  138. claude_mpm/commander/work/__init__.py +30 -0
  139. claude_mpm/commander/work/executor.py +207 -0
  140. claude_mpm/commander/work/queue.py +405 -0
  141. claude_mpm/commander/workflow/__init__.py +27 -0
  142. claude_mpm/commander/workflow/event_handler.py +241 -0
  143. claude_mpm/commander/workflow/notifier.py +146 -0
  144. claude_mpm/commands/mpm-config.md +8 -0
  145. claude_mpm/commands/mpm-doctor.md +8 -0
  146. claude_mpm/commands/mpm-help.md +8 -0
  147. claude_mpm/commands/mpm-init.md +8 -0
  148. claude_mpm/commands/mpm-monitor.md +8 -0
  149. claude_mpm/commands/mpm-organize.md +8 -0
  150. claude_mpm/commands/mpm-postmortem.md +8 -0
  151. claude_mpm/commands/mpm-session-resume.md +9 -1
  152. claude_mpm/commands/mpm-status.md +8 -0
  153. claude_mpm/commands/mpm-ticket-view.md +8 -0
  154. claude_mpm/commands/mpm-version.md +8 -0
  155. claude_mpm/commands/mpm.md +8 -0
  156. claude_mpm/config/agent_presets.py +8 -7
  157. claude_mpm/config/skill_sources.py +16 -0
  158. claude_mpm/constants.py +6 -0
  159. claude_mpm/core/claude_runner.py +154 -2
  160. claude_mpm/core/config.py +35 -22
  161. claude_mpm/core/config_constants.py +74 -9
  162. claude_mpm/core/constants.py +56 -12
  163. claude_mpm/core/hook_manager.py +53 -4
  164. claude_mpm/core/interactive_session.py +12 -11
  165. claude_mpm/core/logger.py +26 -9
  166. claude_mpm/core/logging_utils.py +39 -13
  167. claude_mpm/core/network_config.py +148 -0
  168. claude_mpm/core/oneshot_session.py +7 -6
  169. claude_mpm/core/optimized_startup.py +3 -1
  170. claude_mpm/core/output_style_manager.py +66 -18
  171. claude_mpm/core/shared/config_loader.py +3 -1
  172. claude_mpm/core/socketio_pool.py +47 -15
  173. claude_mpm/core/unified_config.py +54 -8
  174. claude_mpm/core/unified_paths.py +95 -90
  175. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
  176. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
  177. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
  178. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
  179. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
  180. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
  181. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
  182. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
  183. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
  184. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
  185. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
  186. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
  187. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
  188. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
  189. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
  190. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
  191. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
  192. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
  193. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
  194. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
  195. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
  196. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
  197. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
  198. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
  199. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
  200. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
  201. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
  202. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
  203. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
  204. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
  205. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
  206. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
  207. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
  208. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
  209. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
  210. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
  211. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
  212. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
  213. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
  214. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{N4qtv3Hx.js → DR8nis88.js} +2 -2
  215. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
  216. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
  217. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
  218. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
  219. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
  220. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
  221. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
  222. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
  223. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
  224. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
  225. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
  226. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
  227. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
  228. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
  229. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
  230. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
  231. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
  232. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
  233. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
  234. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
  235. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
  236. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.CAGBuiOw.js → 0.RgBboRvH.js} +1 -1
  237. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
  238. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
  239. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
  240. claude_mpm/dashboard/static/svelte-build/index.html +11 -11
  241. claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
  242. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
  243. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
  244. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
  245. claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
  246. claude_mpm/experimental/cli_enhancements.py +2 -1
  247. claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
  248. claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
  249. claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
  250. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  251. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  252. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  253. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  254. claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
  255. claude_mpm/hooks/claude_hooks/event_handlers.py +466 -136
  256. claude_mpm/hooks/claude_hooks/hook_handler.py +204 -104
  257. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
  258. claude_mpm/hooks/claude_hooks/installer.py +291 -59
  259. claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
  260. claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
  261. claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
  262. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  263. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  264. claude_mpm/hooks/claude_hooks/services/__pycache__/container.cpython-311.pyc +0 -0
  265. claude_mpm/hooks/claude_hooks/services/__pycache__/protocols.cpython-311.pyc +0 -0
  266. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  267. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  268. claude_mpm/hooks/claude_hooks/services/connection_manager.py +41 -26
  269. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
  270. claude_mpm/hooks/claude_hooks/services/container.py +326 -0
  271. claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
  272. claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
  273. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
  274. claude_mpm/hooks/kuzu_memory_hook.py +5 -5
  275. claude_mpm/hooks/session_resume_hook.py +89 -1
  276. claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
  277. claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
  278. claude_mpm/init.py +224 -4
  279. claude_mpm/mcp/__init__.py +9 -0
  280. claude_mpm/mcp/google_workspace_server.py +610 -0
  281. claude_mpm/scripts/claude-hook-handler.sh +46 -19
  282. claude_mpm/services/agents/agent_recommendation_service.py +8 -8
  283. claude_mpm/services/agents/agent_selection_service.py +2 -2
  284. claude_mpm/services/agents/cache_git_manager.py +1 -1
  285. claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
  286. claude_mpm/services/agents/deployment/agent_format_converter.py +25 -13
  287. claude_mpm/services/agents/deployment/agent_template_builder.py +37 -17
  288. claude_mpm/services/agents/deployment/async_agent_deployment.py +31 -27
  289. claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
  290. claude_mpm/services/agents/deployment/local_template_deployment.py +3 -1
  291. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +36 -8
  292. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +50 -26
  293. claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
  294. claude_mpm/services/agents/git_source_manager.py +21 -2
  295. claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
  296. claude_mpm/services/agents/single_tier_deployment_service.py +4 -4
  297. claude_mpm/services/agents/sources/git_source_sync_service.py +116 -5
  298. claude_mpm/services/agents/startup_sync.py +5 -2
  299. claude_mpm/services/cli/__init__.py +3 -0
  300. claude_mpm/services/cli/incremental_pause_manager.py +561 -0
  301. claude_mpm/services/cli/session_resume_helper.py +10 -2
  302. claude_mpm/services/command_deployment_service.py +44 -26
  303. claude_mpm/services/delegation_detector.py +175 -0
  304. claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
  305. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
  306. claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
  307. claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
  308. claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
  309. claude_mpm/services/diagnostics/models.py +14 -1
  310. claude_mpm/services/event_log.py +325 -0
  311. claude_mpm/services/hook_installer_service.py +77 -8
  312. claude_mpm/services/infrastructure/__init__.py +4 -0
  313. claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
  314. claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
  315. claude_mpm/services/mcp_config_manager.py +99 -19
  316. claude_mpm/services/mcp_service_registry.py +294 -0
  317. claude_mpm/services/monitor/daemon_manager.py +15 -4
  318. claude_mpm/services/monitor/management/lifecycle.py +8 -3
  319. claude_mpm/services/monitor/server.py +111 -16
  320. claude_mpm/services/pm_skills_deployer.py +302 -94
  321. claude_mpm/services/profile_manager.py +10 -4
  322. claude_mpm/services/skills/git_skill_source_manager.py +192 -29
  323. claude_mpm/services/skills/selective_skill_deployer.py +211 -46
  324. claude_mpm/services/skills/skill_discovery_service.py +74 -4
  325. claude_mpm/services/skills_deployer.py +192 -70
  326. claude_mpm/services/socketio/handlers/hook.py +14 -7
  327. claude_mpm/services/socketio/server/main.py +12 -4
  328. claude_mpm/skills/__init__.py +2 -1
  329. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  330. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  331. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  332. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  333. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  334. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  335. claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
  336. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  337. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  338. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  339. claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
  340. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  341. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  342. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  343. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  344. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  345. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  346. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  347. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  348. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  349. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  350. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  351. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  352. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  353. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  354. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  355. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  356. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  357. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  358. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  359. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  360. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  361. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  362. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  363. claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
  364. claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
  365. claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
  366. claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
  367. claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
  368. claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
  369. claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
  370. claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
  371. claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
  372. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  373. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  374. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  375. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  376. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  377. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  378. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  379. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  380. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  381. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  382. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  383. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  384. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  385. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  386. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  387. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  388. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  389. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  390. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  391. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  392. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  393. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  394. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  395. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  396. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  397. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  398. claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
  399. claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
  400. claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
  401. claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
  402. claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
  403. claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
  404. claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
  405. claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
  406. claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
  407. claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
  408. claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
  409. claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
  410. claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
  411. claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
  412. claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
  413. claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
  414. claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
  415. claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
  416. claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
  417. claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
  418. claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
  419. claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
  420. claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
  421. claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
  422. claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
  423. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  424. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  425. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  426. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  427. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  428. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  429. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  430. claude_mpm/skills/bundled/security-scanning.md +112 -0
  431. claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
  432. claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
  433. claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
  434. claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
  435. claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
  436. claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
  437. claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
  438. claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
  439. claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
  440. claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
  441. claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
  442. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  443. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  444. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  445. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  446. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  447. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  448. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  449. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  450. claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
  451. claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
  452. claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
  453. claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
  454. claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
  455. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  456. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  457. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  458. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  459. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  460. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  461. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  462. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  463. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  464. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  465. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  466. claude_mpm/skills/registry.py +295 -90
  467. claude_mpm/skills/skill_manager.py +29 -23
  468. claude_mpm/templates/.pre-commit-config.yaml +112 -0
  469. claude_mpm/utils/agent_dependency_loader.py +103 -4
  470. claude_mpm/utils/robust_installer.py +45 -24
  471. claude_mpm-5.6.72.dist-info/METADATA +416 -0
  472. {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.72.dist-info}/RECORD +477 -159
  473. {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.72.dist-info}/WHEEL +1 -1
  474. {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.72.dist-info}/entry_points.txt +2 -0
  475. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
  476. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
  477. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
  478. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
  479. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +0 -1
  480. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
  481. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
  482. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
  483. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
  484. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
  485. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  486. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  487. claude_mpm-5.4.41.dist-info/METADATA +0 -998
  488. {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.72.dist-info}/licenses/LICENSE +0 -0
  489. {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.72.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  490. {claude_mpm-5.4.41.dist-info → claude_mpm-5.6.72.dist-info}/top_level.txt +0 -0
@@ -65,6 +65,7 @@ class AgentDependencyLoader:
65
65
  self.deployment_state_file = (
66
66
  Path.cwd() / ".claude" / "agents" / ".mpm_deployment_state"
67
67
  )
68
+ self.is_uv_tool = self._check_uv_tool_installation()
68
69
 
69
70
  def discover_deployed_agents(self) -> Dict[str, Path]:
70
71
  """
@@ -191,9 +192,42 @@ class AgentDependencyLoader:
191
192
  logger.debug(f"Loaded dependencies for {len(agent_dependencies)} agents")
192
193
  return agent_dependencies
193
194
 
195
+ def _check_uv_tool_installation(self) -> bool:
196
+ """
197
+ Check if running in UV tool environment (no pip available).
198
+
199
+ WHY: UV tool environments don't have pip installed. The executable
200
+ path typically contains ".local/share/uv/tools/" and the UV_TOOL_DIR
201
+ environment variable is set. In such environments, we need to use
202
+ 'uv pip' instead of 'python -m pip'.
203
+
204
+ Returns:
205
+ True if UV tool environment, False otherwise
206
+ """
207
+ import os
208
+
209
+ # Check UV_TOOL_DIR environment variable
210
+ uv_tool_dir = os.environ.get("UV_TOOL_DIR", "")
211
+ if uv_tool_dir and "claude-mpm" in uv_tool_dir:
212
+ logger.debug(f"UV tool environment detected via UV_TOOL_DIR: {uv_tool_dir}")
213
+ return True
214
+
215
+ # Check executable path for UV tool patterns
216
+ executable = sys.executable
217
+ if ".local/share/uv/tools/" in executable or "/uv/tools/" in executable:
218
+ logger.debug(
219
+ f"UV tool environment detected via executable path: {executable}"
220
+ )
221
+ return True
222
+
223
+ return False
224
+
194
225
  def check_python_dependency(self, package_spec: str) -> Tuple[bool, Optional[str]]:
195
226
  """
196
- Check if a Python package dependency is satisfied.
227
+ Check if a Python package dependency is satisfied in the TARGET environment.
228
+
229
+ WHY: UV tool environments use a separate Python installation. We must check
230
+ packages in the same environment where they would be installed/used.
197
231
 
198
232
  Args:
199
233
  package_spec: Package specification (e.g., "pandas>=2.0.0")
@@ -221,7 +255,70 @@ class AgentDependencyLoader:
221
255
  )
222
256
  return True, "optional-skipped"
223
257
 
224
- # Try to import and check version
258
+ # For UV tool environments, check via UV's Python
259
+ if self.is_uv_tool:
260
+ try:
261
+ verify_cmd = [
262
+ "uv",
263
+ "run",
264
+ "--no-project",
265
+ "python",
266
+ "-c",
267
+ f"import importlib.metadata; print(importlib.metadata.version('{package_name}'))",
268
+ ]
269
+ result = subprocess.run(
270
+ verify_cmd, capture_output=True, timeout=30, check=False
271
+ )
272
+ if result.returncode == 0:
273
+ version = result.stdout.decode().strip()
274
+ self.checked_packages.add(package_name)
275
+ if req.specifier.contains(version):
276
+ logger.debug(
277
+ f"Package {package_name} {version} satisfied in UV environment"
278
+ )
279
+ return True, version
280
+ logger.debug(
281
+ f"{package_name} {version} does not satisfy {req.specifier}"
282
+ )
283
+ return False, version
284
+ # Check alternatives for optional packages
285
+ if package_name in self.OPTIONAL_DB_PACKAGES:
286
+ for alternative in self.OPTIONAL_DB_PACKAGES[package_name]:
287
+ alt_cmd = [
288
+ "uv",
289
+ "run",
290
+ "--no-project",
291
+ "python",
292
+ "-c",
293
+ f"import importlib.metadata; print(importlib.metadata.version('{alternative}'))",
294
+ ]
295
+ alt_result = subprocess.run(
296
+ alt_cmd, capture_output=True, timeout=30, check=False
297
+ )
298
+ if alt_result.returncode == 0:
299
+ alt_version = alt_result.stdout.decode().strip()
300
+ logger.info(
301
+ f"Using {alternative} as alternative to {package_name}"
302
+ )
303
+ self.checked_packages.add(package_name)
304
+ return True, f"{alternative}:{alt_version}"
305
+ # If no alternatives work, mark as optional failure
306
+ self.optional_failed[package_name] = "No alternatives available"
307
+ logger.warning(
308
+ f"Optional package {package_name} not found, marking as optional"
309
+ )
310
+ return True, "optional-not-found"
311
+ return False, None
312
+ except subprocess.TimeoutExpired:
313
+ logger.warning(f"Timeout checking {package_name} in UV environment")
314
+ return False, None
315
+ except Exception as e:
316
+ logger.debug(
317
+ f"Error checking {package_name} in UV environment: {e}"
318
+ )
319
+ return False, None
320
+
321
+ # For normal Python, try to import and check version
225
322
  try:
226
323
  import importlib.metadata
227
324
 
@@ -671,8 +768,10 @@ class AgentDependencyLoader:
671
768
  )
672
769
 
673
770
  if is_uv_tool:
674
- cmd = ["uv", "pip", "install"]
675
- logger.debug("Using 'uv pip install' for UV tool environment")
771
+ cmd = ["uv", "pip", "install", "--python", sys.executable]
772
+ logger.debug(
773
+ f"Using 'uv pip install --python {sys.executable}' for UV tool environment"
774
+ )
676
775
  else:
677
776
  cmd = [sys.executable, "-m", "pip", "install"]
678
777
 
@@ -332,10 +332,12 @@ class RobustPackageInstaller:
332
332
  Returns:
333
333
  Command as list of arguments
334
334
  """
335
- # UV tool environments don't have pip; use uv pip instead
335
+ # UV tool environments don't have pip; use uv pip install --python instead
336
336
  if self.is_uv_tool:
337
- base_cmd = ["uv", "pip", "install"]
338
- logger.debug("Using 'uv pip install' for UV tool environment")
337
+ base_cmd = ["uv", "pip", "install", "--python", sys.executable]
338
+ logger.debug(
339
+ f"Using 'uv pip install --python {sys.executable}' for UV tool environment"
340
+ )
339
341
  else:
340
342
  base_cmd = [sys.executable, "-m", "pip", "install"]
341
343
 
@@ -478,42 +480,56 @@ class RobustPackageInstaller:
478
480
 
479
481
  def _verify_installation(self, package_spec: str) -> bool:
480
482
  """
481
- Verify that a package was successfully installed.
483
+ Verify that a package was successfully installed in the TARGET environment.
484
+
485
+ WHY: UV installs packages to its own Python environment, not the current process.
486
+ We must verify in the same environment where packages were installed.
482
487
 
483
488
  Args:
484
489
  package_spec: Package specification
485
490
 
486
491
  Returns:
487
- True if package is installed and importable
492
+ True if package is installed and importable in the target environment
488
493
  """
489
494
  package_name = self._extract_package_name(package_spec)
490
495
 
491
- # Convert package name to import name (e.g., tree-sitter-ruby -> tree_sitter_ruby)
492
- import_name = package_name.replace("-", "_")
493
-
494
496
  try:
495
- # Check if package is installed
497
+ if self.is_uv_tool:
498
+ # For UV tool, verify via UV's Python environment
499
+ verify_cmd = [
500
+ "uv",
501
+ "run",
502
+ "--no-project",
503
+ "python",
504
+ "-c",
505
+ f"import importlib.metadata; print(importlib.metadata.version('{package_name}'))",
506
+ ]
507
+ result = subprocess.run(
508
+ verify_cmd, capture_output=True, timeout=30, check=False
509
+ )
510
+ if result.returncode == 0:
511
+ logger.debug(
512
+ f"Package {package_name} verified in UV environment: {result.stdout.decode().strip()}"
513
+ )
514
+ return True
515
+ logger.debug(
516
+ f"Package {package_name} not found in UV environment: {result.stderr.decode().strip()}"
517
+ )
518
+ return False
519
+ # For normal Python, use importlib.metadata in current process
496
520
  import importlib.metadata
497
521
 
498
522
  try:
499
523
  version = importlib.metadata.version(package_name)
500
524
  logger.debug(f"Package {package_name} version {version} is installed")
501
-
502
- # For tree-sitter packages, don't try to import (they have C extensions)
503
- if package_name.startswith("tree-sitter-"):
504
- return True
505
-
506
- # Try to import the package
507
- try:
508
- __import__(import_name)
509
- return True
510
- except ImportError:
511
- # Some packages have different import names, that's OK
512
- return True
525
+ return True
513
526
 
514
527
  except importlib.metadata.PackageNotFoundError:
515
528
  return False
516
529
 
530
+ except subprocess.TimeoutExpired:
531
+ logger.warning(f"Verification timeout for {package_name}")
532
+ return False
517
533
  except ImportError:
518
534
  # Fallback for older Python versions
519
535
  try:
@@ -523,6 +539,9 @@ class RobustPackageInstaller:
523
539
  return True
524
540
  except pkg_resources.DistributionNotFound:
525
541
  return False
542
+ except Exception as e:
543
+ logger.debug(f"Verification error for {package_name}: {e}")
544
+ return False
526
545
 
527
546
  def _is_retryable_error(self, error: Optional[str]) -> bool:
528
547
  """
@@ -687,10 +706,12 @@ class RobustPackageInstaller:
687
706
  Tuple of (success, error_message)
688
707
  """
689
708
  try:
690
- # UV tool environments don't have pip; use uv pip instead
709
+ # UV tool environments don't have pip; use uv pip install --python instead
691
710
  if self.is_uv_tool:
692
- cmd = ["uv", "pip", "install"]
693
- logger.debug("Using 'uv pip install' for batch installation")
711
+ cmd = ["uv", "pip", "install", "--python", sys.executable]
712
+ logger.debug(
713
+ f"Using 'uv pip install --python {sys.executable}' for batch installation"
714
+ )
694
715
  else:
695
716
  cmd = [sys.executable, "-m", "pip", "install"]
696
717
 
@@ -0,0 +1,416 @@
1
+ Metadata-Version: 2.4
2
+ Name: claude-mpm
3
+ Version: 5.6.72
4
+ Summary: Claude Multi-Agent Project Manager - Orchestrate Claude with agent delegation and ticket tracking
5
+ Author-email: Bob Matsuoka <bob@matsuoka.com>
6
+ Maintainer: Claude MPM Team
7
+ License: Elastic-2.0
8
+ Project-URL: Homepage, https://github.com/bobmatnyc/claude-mpm
9
+ Project-URL: Repository, https://github.com/bobmatnyc/claude-mpm.git
10
+ Project-URL: Issues, https://github.com/bobmatnyc/claude-mpm/issues
11
+ Project-URL: Documentation, https://github.com/bobmatnyc/claude-mpm/blob/main/README.md
12
+ Keywords: claude,orchestration,multi-agent,ticket-management
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: Other/Proprietary License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ License-File: LICENSE-FAQ.md
24
+ Requires-Dist: ai-trackdown-pytools>=1.4.0
25
+ Requires-Dist: pyyaml>=6.0
26
+ Requires-Dist: python-dotenv>=1.0.0
27
+ Requires-Dist: click>=8.0.0
28
+ Requires-Dist: pexpect>=4.8.0
29
+ Requires-Dist: psutil>=5.9.0
30
+ Requires-Dist: requests>=2.25.0
31
+ Requires-Dist: flask>=3.0.0
32
+ Requires-Dist: flask-cors>=4.0.0
33
+ Requires-Dist: watchdog>=3.0.0
34
+ Requires-Dist: python-socketio>=5.14.0
35
+ Requires-Dist: aiohttp>=3.9.0
36
+ Requires-Dist: aiohttp-cors<0.8.0,>=0.7.0
37
+ Requires-Dist: python-engineio>=4.8.0
38
+ Requires-Dist: aiofiles>=23.0.0
39
+ Requires-Dist: websockets>=12.0
40
+ Requires-Dist: python-frontmatter>=1.0.0
41
+ Requires-Dist: mistune>=3.0.0
42
+ Requires-Dist: tree-sitter>=0.21.0
43
+ Requires-Dist: ijson>=3.2.0
44
+ Requires-Dist: toml>=0.10.2
45
+ Requires-Dist: packaging>=21.0
46
+ Requires-Dist: pydantic>=2.0.0
47
+ Requires-Dist: pydantic-settings>=2.0.0
48
+ Requires-Dist: rich>=13.0.0
49
+ Requires-Dist: questionary>=2.0.0
50
+ Requires-Dist: pyee>=13.0.0
51
+ Requires-Dist: pathspec>=0.11.0
52
+ Requires-Dist: fastapi>=0.100.0
53
+ Requires-Dist: uvicorn>=0.20.0
54
+ Requires-Dist: httpx>=0.24.0
55
+ Requires-Dist: keyring>=24.0.0
56
+ Requires-Dist: cryptography>=41.0.0
57
+ Requires-Dist: mcp>=1.0.0
58
+ Provides-Extra: mcp
59
+ Requires-Dist: mcp>=0.1.0; extra == "mcp"
60
+ Requires-Dist: mcp-vector-search>=0.1.0; extra == "mcp"
61
+ Requires-Dist: mcp-browser>=0.1.0; extra == "mcp"
62
+ Requires-Dist: mcp-ticketer>=0.1.0; extra == "mcp"
63
+ Provides-Extra: dev
64
+ Requires-Dist: pytest>=7.0; extra == "dev"
65
+ Requires-Dist: pytest-asyncio; extra == "dev"
66
+ Requires-Dist: pytest-cov; extra == "dev"
67
+ Requires-Dist: ruff>=0.8.0; extra == "dev"
68
+ Requires-Dist: pylint>=3.0.0; extra == "dev"
69
+ Requires-Dist: pre-commit; extra == "dev"
70
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
71
+ Requires-Dist: types-PyYAML>=6.0.0; extra == "dev"
72
+ Requires-Dist: types-requests>=2.25.0; extra == "dev"
73
+ Provides-Extra: eval
74
+ Requires-Dist: deepeval>=1.0.0; extra == "eval"
75
+ Requires-Dist: pytest>=7.4.0; extra == "eval"
76
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == "eval"
77
+ Requires-Dist: pytest-timeout>=2.1.0; extra == "eval"
78
+ Provides-Extra: docs
79
+ Requires-Dist: sphinx>=7.2.0; extra == "docs"
80
+ Requires-Dist: sphinx-rtd-theme>=1.3.0; extra == "docs"
81
+ Requires-Dist: sphinx-autobuild>=2021.3.14; extra == "docs"
82
+ Provides-Extra: monitor
83
+ Requires-Dist: python-socketio>=5.14.0; extra == "monitor"
84
+ Requires-Dist: aiohttp>=3.9.0; extra == "monitor"
85
+ Requires-Dist: aiohttp-cors<0.8.0,>=0.7.0; extra == "monitor"
86
+ Requires-Dist: python-engineio>=4.8.0; extra == "monitor"
87
+ Requires-Dist: aiofiles>=23.0.0; extra == "monitor"
88
+ Requires-Dist: websockets>=12.0; extra == "monitor"
89
+ Provides-Extra: data-processing
90
+ Requires-Dist: pandas>=2.1.0; extra == "data-processing"
91
+ Requires-Dist: openpyxl>=3.1.0; extra == "data-processing"
92
+ Requires-Dist: xlsxwriter>=3.1.0; extra == "data-processing"
93
+ Requires-Dist: numpy>=1.24.0; extra == "data-processing"
94
+ Requires-Dist: pyarrow>=14.0.0; extra == "data-processing"
95
+ Requires-Dist: dask>=2023.12.0; extra == "data-processing"
96
+ Requires-Dist: polars>=0.19.0; extra == "data-processing"
97
+ Requires-Dist: xlrd>=2.0.0; extra == "data-processing"
98
+ Requires-Dist: xlwt>=1.3.0; extra == "data-processing"
99
+ Requires-Dist: csvkit>=1.3.0; extra == "data-processing"
100
+ Requires-Dist: tabulate>=0.9.0; extra == "data-processing"
101
+ Requires-Dist: python-dateutil>=2.8.0; extra == "data-processing"
102
+ Requires-Dist: lxml>=4.9.0; extra == "data-processing"
103
+ Requires-Dist: sqlalchemy>=2.0.0; extra == "data-processing"
104
+ Requires-Dist: psycopg2-binary>=2.9.0; extra == "data-processing"
105
+ Requires-Dist: pymongo>=4.5.0; extra == "data-processing"
106
+ Requires-Dist: redis>=5.0.0; extra == "data-processing"
107
+ Requires-Dist: beautifulsoup4>=4.12.0; extra == "data-processing"
108
+ Requires-Dist: jsonschema>=4.19.0; extra == "data-processing"
109
+ Provides-Extra: memory
110
+ Requires-Dist: kuzu-memory>=1.1.5; extra == "memory"
111
+ Dynamic: license-file
112
+
113
+ # Claude MPM - Multi-Agent Project Manager
114
+
115
+ A powerful orchestration framework for **Claude Code (CLI)** that enables multi-agent workflows, session management, and real-time monitoring through a streamlined Rich-based interface.
116
+
117
+ > **⚠️ Important**: Claude MPM **requires Claude Code CLI** (v2.1.3+), not Claude Desktop (app). All MCP integrations work with Claude Code's CLI interface only.
118
+ >
119
+ > **Don't have Claude Code?** Install from: https://docs.anthropic.com/en/docs/claude-code
120
+ >
121
+ > **Quick Start**: See [Getting Started Guide](docs/getting-started/README.md) to get running in 5 minutes!
122
+
123
+ ---
124
+
125
+ ## Who Should Use Claude MPM?
126
+
127
+ - 👥 **[Non-Technical Users (Founders/PMs)](docs/usecases/non-technical-users.md)** - Research and understand codebases using Research Mode - no coding experience required
128
+ - 💻 **[Developers](docs/usecases/developers.md)** - Multi-agent development workflows with semantic code search and advanced features
129
+ - 🏢 **[Teams](docs/usecases/teams.md)** - Collaboration patterns, session management, and coordinated workflows
130
+
131
+ ---
132
+
133
+ ## What is Claude MPM?
134
+
135
+ Claude MPM transforms Claude Code into a **multi-agent orchestration platform** with:
136
+
137
+ - **47+ Specialized Agents** - From Git repositories (Python, Rust, QA, Security, Ops, etc.)
138
+ - **Intelligent Task Routing** - PM agent delegates work to specialist agents
139
+ - **Session Management** - Resume previous sessions with full context preservation
140
+ - **Semantic Code Search** - AI-powered discovery of existing code and patterns
141
+ - **Real-Time Monitoring** - Live dashboard showing agent activity and performance
142
+ - **Git Repository Integration** - Always up-to-date agents and skills from curated repositories
143
+
144
+ ---
145
+
146
+ ## Quick Installation
147
+
148
+ ### Prerequisites
149
+
150
+ 1. **Python 3.11+** (required - older versions will install outdated claude-mpm)
151
+ 2. **Claude Code CLI v2.1.3+** (required!)
152
+
153
+ > ⚠️ **Python Version Note**: Claude MPM requires Python 3.11 or higher. If you have Python 3.9 or 3.10, you'll get an old version (4.x) that lacks current features. Check with `python3 --version` before installing.
154
+
155
+ ```bash
156
+ # Verify Claude Code is installed
157
+ claude --version
158
+
159
+ # If not installed, get it from:
160
+ # https://docs.anthropic.com/en/docs/claude-code
161
+ ```
162
+
163
+ ### Install Claude MPM
164
+
165
+ **Homebrew (macOS):**
166
+ ```bash
167
+ brew install claude-mpm --with-monitor
168
+ ```
169
+
170
+ **pipx/uv (recommended):**
171
+ ```bash
172
+ # With pipx
173
+ pipx install "claude-mpm[monitor]"
174
+
175
+ # Or with uv
176
+ uv tool install "claude-mpm[monitor]"
177
+ ```
178
+
179
+ **pip:**
180
+ ```bash
181
+ pip install "claude-mpm[monitor]"
182
+ ```
183
+
184
+ ### Verify Installation
185
+
186
+ ```bash
187
+ # Check versions
188
+ claude-mpm --version
189
+ claude --version
190
+
191
+ # Run diagnostics
192
+ claude-mpm doctor
193
+
194
+ # Verify agents deployed
195
+ ls ~/.claude/agents/ # Should show 47+ agents
196
+ ```
197
+
198
+ **What You Should See:**
199
+ - ✅ 47+ agents deployed to `~/.claude/agents/`
200
+ - ✅ 17 bundled skills (in Python package)
201
+ - ✅ Agent sources configured
202
+ - ✅ Progress bars showing sync and deployment
203
+
204
+ **💡 Recommended Partners**: Install [kuzu-memory](https://github.com/bobmatnyc/kuzu-memory) (persistent context) and [mcp-vector-search](https://github.com/bobmatnyc/mcp-vector-search) (semantic search) for enhanced capabilities.
205
+
206
+ **💡 Tool Version Management**: Use [ASDF version manager](docs/guides/asdf-tool-versions.md) to avoid Python/uv version conflicts across projects.
207
+
208
+ ---
209
+
210
+ ## Key Features
211
+
212
+ ### 🎯 Multi-Agent Orchestration
213
+ - **47+ Specialized Agents** from Git repositories covering all development needs
214
+ - **Smart Task Routing** via PM agent intelligently delegating to specialists
215
+ - **Session Management** with `--resume` flag for seamless continuity
216
+ - **Resume Log System** with automatic 10k-token summaries at 70%/85%/95% thresholds
217
+
218
+ [→ Learn more: Multi-Agent Development](docs/usecases/developers.md#multi-agent-development)
219
+
220
+ ### 📦 Git Repository Integration
221
+ - **Curated Content** with 47+ agents automatically deployed from repositories
222
+ - **Always Up-to-Date** with ETag-based caching (95%+ bandwidth reduction)
223
+ - **Hierarchical BASE-AGENT.md** for template inheritance and DRY principles
224
+ - **Custom Repositories** via `claude-mpm agent-source add`
225
+
226
+ [→ Learn more: Agent Sources](docs/user/agent-sources.md)
227
+
228
+ ### 🎯 Skills System
229
+ - **17 Bundled Skills** covering Git, TDD, Docker, API docs, testing, and more
230
+ - **Three-Tier Organization**: Bundled/user/project with priority resolution
231
+ - **Auto-Linking** to relevant agents based on roles
232
+ - **Custom Skills** via `.claude/skills/` or skill repositories
233
+
234
+ [→ Learn more: Skills Guide](docs/user/skills-guide.md)
235
+
236
+ ### 🔍 Semantic Code Search
237
+ - **AI-Powered Discovery** with mcp-vector-search integration
238
+ - **Find by Intent** not just keywords ("authentication logic" finds relevant code)
239
+ - **Pattern Recognition** for discovering similar implementations
240
+ - **Live Updates** tracking code changes automatically
241
+
242
+ [→ Learn more: Developer Use Cases](docs/usecases/developers.md#semantic-code-search)
243
+
244
+ ### 🧪 MPM Commander (ALPHA)
245
+ - **Multi-Project Orchestration** with autonomous AI coordination across codebases
246
+ - **Tmux Integration** for isolated project environments and session management
247
+ - **Event-Driven Architecture** with inbox system for cross-project communication
248
+ - **LLM-Powered Decisions** via OpenRouter for autonomous work queue processing
249
+ - **Real-Time Monitoring** with state tracking (IDLE, WORKING, BLOCKED, PAUSED, ERROR)
250
+ - ⚠️ **Experimental** - API and CLI interface subject to change
251
+
252
+ [→ Commander Documentation](docs/commander/usage-guide.md)
253
+
254
+ ### 🔌 Advanced Integration
255
+ - **MCP Integration** with full Model Context Protocol support
256
+ - **Real-Time Monitoring** via `--monitor` flag and web dashboard
257
+ - **Multi-Project Support** with per-session working directories
258
+ - **Git Integration** with diff viewing and change tracking
259
+
260
+ [→ Learn more: MCP Gateway](docs/developer/13-mcp-gateway/README.md)
261
+
262
+ ### 🔐 OAuth & Google Workspace Integration
263
+ - **Browser-Based OAuth** for secure authentication with MCP services
264
+ - **Google Workspace MCP** built-in server for Gmail, Calendar, and Drive
265
+ - **Encrypted Token Storage** using Fernet encryption with system keychain
266
+ - **Automatic Token Refresh** handles expiration seamlessly
267
+
268
+ ```bash
269
+ # Set up Google Workspace OAuth
270
+ claude-mpm oauth setup workspace-mcp
271
+
272
+ # Check token status
273
+ claude-mpm oauth status workspace-mcp
274
+
275
+ # List OAuth-capable services
276
+ claude-mpm oauth list
277
+ ```
278
+
279
+ [→ Learn more: OAuth Setup Guide](docs/guides/oauth-setup.md)
280
+
281
+ ### ⚡ Performance & Security
282
+ - **Simplified Architecture** with ~3,700 lines removed for better performance
283
+ - **Enhanced Security** with comprehensive input validation
284
+ - **Intelligent Caching** with ~200ms faster startup via hash-based invalidation
285
+ - **Memory Management** with cleanup commands for large conversation histories
286
+
287
+ [→ Learn more: Architecture](docs/developer/ARCHITECTURE.md)
288
+
289
+ ---
290
+
291
+ ## Quick Usage
292
+
293
+ ```bash
294
+ # Start interactive mode
295
+ claude-mpm
296
+
297
+ # Start with monitoring dashboard
298
+ claude-mpm run --monitor
299
+
300
+ # Resume previous session
301
+ claude-mpm run --resume
302
+
303
+ # Semantic code search
304
+ claude-mpm search "authentication logic"
305
+ # or inside Claude Code:
306
+ /mpm-search "authentication logic"
307
+
308
+ # Health diagnostics
309
+ claude-mpm doctor
310
+
311
+ # Verify MCP services
312
+ claude-mpm verify
313
+
314
+ # Manage memory
315
+ claude-mpm cleanup-memory
316
+ ```
317
+
318
+ **💡 Update Checking**: Claude MPM automatically checks for updates and verifies Claude Code compatibility on startup. Configure in `~/.claude-mpm/configuration.yaml` or see [docs/update-checking.md](docs/update-checking.md).
319
+
320
+ [→ Complete usage examples: User Guide](docs/user/user-guide.md)
321
+
322
+ ---
323
+
324
+ ## What's New in v5.0
325
+
326
+ ### Git Repository Integration for Agents & Skills
327
+
328
+ - **📦 Massive Library**: 47+ agents and hundreds of skills deployed automatically
329
+ - **🏢 Official Content**: Anthropic's official skills repository included by default
330
+ - **🔧 Fully Extensible**: Add your own repositories with immediate testing
331
+ - **🌳 Smart Organization**: Hierarchical BASE-AGENT.md inheritance
332
+ - **📊 Clear Visibility**: Two-phase progress bars (sync + deployment)
333
+ - **✅ Fail-Fast Testing**: Test repositories before they cause startup issues
334
+
335
+ **Quick Start with Custom Repositories:**
336
+ ```bash
337
+ # Add custom agent repository
338
+ claude-mpm agent-source add https://github.com/yourorg/your-agents
339
+
340
+ # Add custom skill repository
341
+ claude-mpm skill-source add https://github.com/yourorg/your-skills
342
+
343
+ # Test repository without saving
344
+ claude-mpm agent-source add https://github.com/yourorg/your-agents --test
345
+ ```
346
+
347
+ [→ Full details: What's New](CHANGELOG.md)
348
+
349
+ ---
350
+
351
+ ## Documentation
352
+
353
+ **📚 [Complete Documentation Hub](docs/README.md)** - Start here for all documentation!
354
+
355
+ ### Quick Links by User Type
356
+
357
+ #### 👥 For Users
358
+ - **[🚀 5-Minute Quick Start](docs/user/quickstart.md)** - Get running immediately
359
+ - **[📦 Installation Guide](docs/user/installation.md)** - All installation methods
360
+ - **[📖 User Guide](docs/user/user-guide.md)** - Complete user documentation
361
+ - **[❓ FAQ](docs/guides/FAQ.md)** - Common questions answered
362
+
363
+ #### 💻 For Developers
364
+ - **[🏗️ Architecture Overview](docs/developer/ARCHITECTURE.md)** - Service-oriented system design
365
+ - **[💻 Developer Guide](docs/developer/README.md)** - Complete development documentation
366
+ - **[🧪 Contributing](docs/developer/03-development/README.md)** - How to contribute
367
+ - **[📊 API Reference](docs/API.md)** - Complete API documentation
368
+
369
+ #### 🤖 For Agent Creators
370
+ - **[🤖 Agent System](docs/AGENTS.md)** - Complete agent development guide
371
+ - **[📝 Creation Guide](docs/developer/07-agent-system/creation-guide.md)** - Step-by-step tutorials
372
+ - **[📋 Schema Reference](docs/developer/10-schemas/agent_schema_documentation.md)** - Agent format specifications
373
+
374
+ #### 🚀 For Operations
375
+ - **[🚀 Deployment](docs/DEPLOYMENT.md)** - Release management & versioning
376
+ - **[📊 Monitoring](docs/MONITOR.md)** - Real-time dashboard & metrics
377
+ - **[🐛 Troubleshooting](docs/TROUBLESHOOTING.md)** - Enhanced `doctor` command with auto-fix
378
+
379
+ ---
380
+
381
+ ## Contributing
382
+
383
+ Contributions are welcome! Please see:
384
+ - **[Contributing Guide](docs/developer/03-development/README.md)** - How to contribute
385
+ - **[Code Formatting](docs/developer/CODE_FORMATTING.md)** - Code quality standards
386
+ - **[Project Structure](docs/reference/STRUCTURE.md)** - Codebase organization
387
+
388
+ **Development Workflow:**
389
+ ```bash
390
+ # Complete development setup
391
+ make dev-complete
392
+
393
+ # Or step by step:
394
+ make setup-dev # Install in development mode
395
+ make setup-pre-commit # Set up automated code formatting
396
+ ```
397
+
398
+ ---
399
+
400
+ ## 📜 License
401
+
402
+ [![License](https://img.shields.io/badge/License-Elastic_2.0-blue.svg)](LICENSE)
403
+
404
+ Licensed under the [Elastic License 2.0](LICENSE) - free for internal use and commercial products.
405
+
406
+ **Main restriction:** Cannot offer as a hosted SaaS service without a commercial license.
407
+
408
+ 📖 [Licensing FAQ](LICENSE-FAQ.md) | 💼 Commercial licensing: bob@matsuoka.com
409
+
410
+ ---
411
+
412
+ ## Credits
413
+
414
+ - Based on [claude-multiagent-pm](https://github.com/kfsone/claude-multiagent-pm)
415
+ - Enhanced for [Claude Code (CLI)](https://docs.anthropic.com/en/docs/claude-code) integration
416
+ - Built with ❤️ by the Claude MPM community