claude-mpm 5.4.85__py3-none-any.whl → 5.6.76__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.
Files changed (322) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +8 -5
  3. claude_mpm/agents/{CLAUDE_MPM_FOUNDERS_OUTPUT_STYLE.md → CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md} +14 -6
  4. claude_mpm/agents/PM_INSTRUCTIONS.md +109 -706
  5. claude_mpm/agents/WORKFLOW.md +2 -0
  6. claude_mpm/agents/templates/circuit-breakers.md +26 -17
  7. claude_mpm/auth/__init__.py +35 -0
  8. claude_mpm/auth/callback_server.py +328 -0
  9. claude_mpm/auth/models.py +104 -0
  10. claude_mpm/auth/oauth_manager.py +266 -0
  11. claude_mpm/auth/providers/__init__.py +12 -0
  12. claude_mpm/auth/providers/base.py +165 -0
  13. claude_mpm/auth/providers/google.py +261 -0
  14. claude_mpm/auth/token_storage.py +252 -0
  15. claude_mpm/cli/commands/autotodos.py +566 -0
  16. claude_mpm/cli/commands/commander.py +216 -0
  17. claude_mpm/cli/commands/hook_errors.py +60 -60
  18. claude_mpm/cli/commands/mcp.py +29 -17
  19. claude_mpm/cli/commands/mcp_command_router.py +39 -0
  20. claude_mpm/cli/commands/mcp_service_commands.py +304 -0
  21. claude_mpm/cli/commands/monitor.py +2 -2
  22. claude_mpm/cli/commands/mpm_init/core.py +2 -2
  23. claude_mpm/cli/commands/oauth.py +481 -0
  24. claude_mpm/cli/commands/run.py +35 -3
  25. claude_mpm/cli/commands/skill_source.py +51 -2
  26. claude_mpm/cli/commands/skills.py +5 -3
  27. claude_mpm/cli/executor.py +128 -16
  28. claude_mpm/cli/helpers.py +1 -1
  29. claude_mpm/cli/parsers/base_parser.py +84 -1
  30. claude_mpm/cli/parsers/commander_parser.py +116 -0
  31. claude_mpm/cli/parsers/mcp_parser.py +79 -0
  32. claude_mpm/cli/parsers/oauth_parser.py +165 -0
  33. claude_mpm/cli/parsers/run_parser.py +10 -0
  34. claude_mpm/cli/parsers/skill_source_parser.py +4 -0
  35. claude_mpm/cli/parsers/skills_parser.py +5 -0
  36. claude_mpm/cli/startup.py +345 -40
  37. claude_mpm/cli/startup_display.py +76 -7
  38. claude_mpm/cli/startup_logging.py +2 -2
  39. claude_mpm/cli/startup_migrations.py +236 -0
  40. claude_mpm/cli/utils.py +7 -3
  41. claude_mpm/commander/__init__.py +78 -0
  42. claude_mpm/commander/adapters/__init__.py +60 -0
  43. claude_mpm/commander/adapters/auggie.py +260 -0
  44. claude_mpm/commander/adapters/base.py +288 -0
  45. claude_mpm/commander/adapters/claude_code.py +392 -0
  46. claude_mpm/commander/adapters/codex.py +237 -0
  47. claude_mpm/commander/adapters/communication.py +366 -0
  48. claude_mpm/commander/adapters/example_usage.py +310 -0
  49. claude_mpm/commander/adapters/mpm.py +389 -0
  50. claude_mpm/commander/adapters/registry.py +204 -0
  51. claude_mpm/commander/api/__init__.py +16 -0
  52. claude_mpm/commander/api/app.py +121 -0
  53. claude_mpm/commander/api/errors.py +133 -0
  54. claude_mpm/commander/api/routes/__init__.py +8 -0
  55. claude_mpm/commander/api/routes/events.py +184 -0
  56. claude_mpm/commander/api/routes/inbox.py +171 -0
  57. claude_mpm/commander/api/routes/messages.py +148 -0
  58. claude_mpm/commander/api/routes/projects.py +271 -0
  59. claude_mpm/commander/api/routes/sessions.py +226 -0
  60. claude_mpm/commander/api/routes/work.py +296 -0
  61. claude_mpm/commander/api/schemas.py +186 -0
  62. claude_mpm/commander/chat/__init__.py +7 -0
  63. claude_mpm/commander/chat/cli.py +149 -0
  64. claude_mpm/commander/chat/commands.py +124 -0
  65. claude_mpm/commander/chat/repl.py +1957 -0
  66. claude_mpm/commander/config.py +51 -0
  67. claude_mpm/commander/config_loader.py +115 -0
  68. claude_mpm/commander/core/__init__.py +10 -0
  69. claude_mpm/commander/core/block_manager.py +325 -0
  70. claude_mpm/commander/core/response_manager.py +323 -0
  71. claude_mpm/commander/daemon.py +603 -0
  72. claude_mpm/commander/env_loader.py +59 -0
  73. claude_mpm/commander/events/__init__.py +26 -0
  74. claude_mpm/commander/events/manager.py +392 -0
  75. claude_mpm/commander/frameworks/__init__.py +12 -0
  76. claude_mpm/commander/frameworks/base.py +233 -0
  77. claude_mpm/commander/frameworks/claude_code.py +58 -0
  78. claude_mpm/commander/frameworks/mpm.py +57 -0
  79. claude_mpm/commander/git/__init__.py +5 -0
  80. claude_mpm/commander/git/worktree_manager.py +212 -0
  81. claude_mpm/commander/inbox/__init__.py +16 -0
  82. claude_mpm/commander/inbox/dedup.py +128 -0
  83. claude_mpm/commander/inbox/inbox.py +224 -0
  84. claude_mpm/commander/inbox/models.py +70 -0
  85. claude_mpm/commander/instance_manager.py +868 -0
  86. claude_mpm/commander/llm/__init__.py +6 -0
  87. claude_mpm/commander/llm/openrouter_client.py +167 -0
  88. claude_mpm/commander/llm/summarizer.py +70 -0
  89. claude_mpm/commander/memory/__init__.py +45 -0
  90. claude_mpm/commander/memory/compression.py +347 -0
  91. claude_mpm/commander/memory/embeddings.py +230 -0
  92. claude_mpm/commander/memory/entities.py +310 -0
  93. claude_mpm/commander/memory/example_usage.py +290 -0
  94. claude_mpm/commander/memory/integration.py +325 -0
  95. claude_mpm/commander/memory/search.py +381 -0
  96. claude_mpm/commander/memory/store.py +657 -0
  97. claude_mpm/commander/models/__init__.py +18 -0
  98. claude_mpm/commander/models/events.py +127 -0
  99. claude_mpm/commander/models/project.py +162 -0
  100. claude_mpm/commander/models/work.py +214 -0
  101. claude_mpm/commander/parsing/__init__.py +20 -0
  102. claude_mpm/commander/parsing/extractor.py +132 -0
  103. claude_mpm/commander/parsing/output_parser.py +270 -0
  104. claude_mpm/commander/parsing/patterns.py +100 -0
  105. claude_mpm/commander/persistence/__init__.py +11 -0
  106. claude_mpm/commander/persistence/event_store.py +274 -0
  107. claude_mpm/commander/persistence/state_store.py +403 -0
  108. claude_mpm/commander/persistence/work_store.py +164 -0
  109. claude_mpm/commander/polling/__init__.py +13 -0
  110. claude_mpm/commander/polling/event_detector.py +104 -0
  111. claude_mpm/commander/polling/output_buffer.py +49 -0
  112. claude_mpm/commander/polling/output_poller.py +153 -0
  113. claude_mpm/commander/project_session.py +268 -0
  114. claude_mpm/commander/proxy/__init__.py +12 -0
  115. claude_mpm/commander/proxy/formatter.py +89 -0
  116. claude_mpm/commander/proxy/output_handler.py +191 -0
  117. claude_mpm/commander/proxy/relay.py +155 -0
  118. claude_mpm/commander/registry.py +410 -0
  119. claude_mpm/commander/runtime/__init__.py +10 -0
  120. claude_mpm/commander/runtime/executor.py +191 -0
  121. claude_mpm/commander/runtime/monitor.py +346 -0
  122. claude_mpm/commander/session/__init__.py +6 -0
  123. claude_mpm/commander/session/context.py +81 -0
  124. claude_mpm/commander/session/manager.py +59 -0
  125. claude_mpm/commander/tmux_orchestrator.py +362 -0
  126. claude_mpm/commander/web/__init__.py +1 -0
  127. claude_mpm/commander/work/__init__.py +30 -0
  128. claude_mpm/commander/work/executor.py +207 -0
  129. claude_mpm/commander/work/queue.py +405 -0
  130. claude_mpm/commander/workflow/__init__.py +27 -0
  131. claude_mpm/commander/workflow/event_handler.py +241 -0
  132. claude_mpm/commander/workflow/notifier.py +146 -0
  133. claude_mpm/commands/mpm-config.md +8 -0
  134. claude_mpm/commands/mpm-doctor.md +8 -0
  135. claude_mpm/commands/mpm-help.md +8 -0
  136. claude_mpm/commands/mpm-init.md +8 -0
  137. claude_mpm/commands/mpm-monitor.md +8 -0
  138. claude_mpm/commands/mpm-organize.md +8 -0
  139. claude_mpm/commands/mpm-postmortem.md +8 -0
  140. claude_mpm/commands/mpm-session-resume.md +9 -1
  141. claude_mpm/commands/mpm-status.md +8 -0
  142. claude_mpm/commands/mpm-ticket-view.md +8 -0
  143. claude_mpm/commands/mpm-version.md +8 -0
  144. claude_mpm/commands/mpm.md +8 -0
  145. claude_mpm/config/agent_presets.py +8 -7
  146. claude_mpm/config/skill_sources.py +16 -0
  147. claude_mpm/constants.py +5 -0
  148. claude_mpm/core/claude_runner.py +152 -0
  149. claude_mpm/core/config.py +35 -22
  150. claude_mpm/core/config_constants.py +74 -9
  151. claude_mpm/core/constants.py +56 -12
  152. claude_mpm/core/hook_manager.py +53 -4
  153. claude_mpm/core/interactive_session.py +5 -4
  154. claude_mpm/core/logger.py +26 -9
  155. claude_mpm/core/logging_utils.py +39 -13
  156. claude_mpm/core/network_config.py +148 -0
  157. claude_mpm/core/oneshot_session.py +7 -6
  158. claude_mpm/core/output_style_manager.py +52 -12
  159. claude_mpm/core/socketio_pool.py +47 -15
  160. claude_mpm/core/unified_config.py +10 -6
  161. claude_mpm/core/unified_paths.py +68 -80
  162. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
  163. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
  164. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cs_tUR18.js → 1WZnGYqX.js} +1 -1
  165. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CDuw-vjf.js → 67pF3qNn.js} +1 -1
  166. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bTOqqlTd.js → 6RxdMKe4.js} +1 -1
  167. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DwBR2MJi.js → 8cZrfX0h.js} +1 -1
  168. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{ZGh7QtNv.js → 9a6T2nm-.js} +1 -1
  169. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D9lljYKQ.js → B443AUzu.js} +1 -1
  170. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{RJiighC3.js → B8AwtY2H.js} +1 -1
  171. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uuIeMWc-.js → BF15LAsF.js} +1 -1
  172. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{D3k0OPJN.js → BRcwIQNr.js} +1 -1
  173. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CyWMqx4W.js → BV6nKitt.js} +1 -1
  174. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CiIAseT4.js → BViJ8lZt.js} +5 -5
  175. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CBBdVcY8.js → BcQ-Q0FE.js} +1 -1
  176. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BovzEFCE.js → Bpyvgze_.js} +1 -1
  177. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
  178. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
  179. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{eNVUfhuA.js → C3rbW_a-.js} +1 -1
  180. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{GYwsonyD.js → C8WYN38h.js} +1 -1
  181. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BIF9m_hv.js → C9I8FlXH.js} +1 -1
  182. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B0uc0UOD.js → CIQcWgO2.js} +3 -3
  183. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Be7GpZd6.js → CIctN7YN.js} +1 -1
  184. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Bh0LDWpI.js → CKrS_JZW.js} +2 -2
  185. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DUrLdbGD.js → CR6P9C4A.js} +1 -1
  186. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7xVLGWV.js → CRRR9MD_.js} +1 -1
  187. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
  188. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dhb8PKl3.js → CSXtMOf0.js} +1 -1
  189. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BPYeabCQ.js → CT-sbxSk.js} +1 -1
  190. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{sQeU3Y1z.js → CWm6DJsp.js} +1 -1
  191. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CnA0NrzZ.js → CpqQ1Kzn.js} +1 -1
  192. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4B-KCzX.js → D2nGpDRe.js} +1 -1
  193. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DGkLK5U1.js → D9iCMida.js} +1 -1
  194. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{BofRWZRR.js → D9ykgMoY.js} +1 -1
  195. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DmxopI1J.js → DL2Ldur1.js} +1 -1
  196. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C30mlcqg.js → DPfltzjH.js} +1 -1
  197. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Vzk33B_K.js → DR8nis88.js} +2 -2
  198. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DI7hHRFL.js → DUliQN2b.js} +1 -1
  199. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C4JcI4KD.js → DXlhR01x.js} +1 -1
  200. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{bT1r9zLR.js → D_lyTybS.js} +1 -1
  201. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DZX00Y4g.js → DngoTTgh.js} +1 -1
  202. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzZX-COe.js → DqkmHtDC.js} +1 -1
  203. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{B7RN905-.js → DsDh8EYs.js} +1 -1
  204. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DLVjFsZ3.js → DypDmXgd.js} +1 -1
  205. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{iEWssX7S.js → IPYC-LnN.js} +1 -1
  206. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
  207. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DaimHw_p.js → JpevfAFt.js} +1 -1
  208. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DY1XQ8fi.js → R8CEIRAd.js} +1 -1
  209. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Dle-35c7.js → Zxy7qc-l.js} +2 -2
  210. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
  211. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{C_Usid8X.js → qtd3IeO4.js} +2 -2
  212. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{CzeYkLYB.js → ulBFON_C.js} +2 -2
  213. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{Cfqx1Qun.js → wQVh1CoA.js} +1 -1
  214. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/{app.D6-I5TpK.js → app.Dr7t0z2J.js} +2 -2
  215. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
  216. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.m1gL8KXf.js → 0.RgBboRvH.js} +1 -1
  217. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{1.CgNOuw-d.js → 1.DG-KkbDf.js} +1 -1
  218. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
  219. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
  220. claude_mpm/dashboard/static/svelte-build/index.html +9 -9
  221. claude_mpm/experimental/cli_enhancements.py +2 -1
  222. claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
  223. claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
  224. claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
  225. claude_mpm/hooks/claude_hooks/event_handlers.py +466 -136
  226. claude_mpm/hooks/claude_hooks/hook_handler.py +204 -104
  227. claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
  228. claude_mpm/hooks/claude_hooks/installer.py +291 -59
  229. claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
  230. claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
  231. claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
  232. claude_mpm/hooks/claude_hooks/services/connection_manager.py +41 -26
  233. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
  234. claude_mpm/hooks/claude_hooks/services/container.py +326 -0
  235. claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
  236. claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
  237. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
  238. claude_mpm/hooks/session_resume_hook.py +89 -1
  239. claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
  240. claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
  241. claude_mpm/init.py +22 -15
  242. claude_mpm/mcp/__init__.py +9 -0
  243. claude_mpm/mcp/google_workspace_server.py +610 -0
  244. claude_mpm/scripts/claude-hook-handler.sh +46 -19
  245. claude_mpm/services/agents/agent_recommendation_service.py +8 -8
  246. claude_mpm/services/agents/agent_selection_service.py +2 -2
  247. claude_mpm/services/agents/cache_git_manager.py +1 -1
  248. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +3 -0
  249. claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
  250. claude_mpm/services/agents/single_tier_deployment_service.py +4 -4
  251. claude_mpm/services/cli/__init__.py +3 -0
  252. claude_mpm/services/cli/incremental_pause_manager.py +561 -0
  253. claude_mpm/services/cli/session_resume_helper.py +10 -2
  254. claude_mpm/services/command_deployment_service.py +44 -26
  255. claude_mpm/services/delegation_detector.py +175 -0
  256. claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
  257. claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
  258. claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
  259. claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
  260. claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
  261. claude_mpm/services/diagnostics/models.py +14 -1
  262. claude_mpm/services/event_log.py +325 -0
  263. claude_mpm/services/hook_installer_service.py +77 -8
  264. claude_mpm/services/infrastructure/__init__.py +4 -0
  265. claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
  266. claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
  267. claude_mpm/services/mcp_config_manager.py +99 -19
  268. claude_mpm/services/mcp_service_registry.py +294 -0
  269. claude_mpm/services/monitor/daemon_manager.py +15 -4
  270. claude_mpm/services/monitor/management/lifecycle.py +8 -2
  271. claude_mpm/services/monitor/server.py +111 -16
  272. claude_mpm/services/pm_skills_deployer.py +261 -87
  273. claude_mpm/services/skills/git_skill_source_manager.py +130 -10
  274. claude_mpm/services/skills/selective_skill_deployer.py +142 -16
  275. claude_mpm/services/skills/skill_discovery_service.py +74 -4
  276. claude_mpm/services/skills_deployer.py +31 -5
  277. claude_mpm/services/socketio/handlers/hook.py +14 -7
  278. claude_mpm/services/socketio/server/main.py +12 -4
  279. claude_mpm/skills/__init__.py +2 -1
  280. claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
  281. claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
  282. claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
  283. claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
  284. claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
  285. claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
  286. claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
  287. claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
  288. claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
  289. claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
  290. claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
  291. claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
  292. claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
  293. claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
  294. claude_mpm/skills/bundled/pm/{pm-teaching-mode → mpm-teaching-mode}/SKILL.md +2 -2
  295. claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
  296. claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
  297. claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
  298. claude_mpm/skills/registry.py +295 -90
  299. claude_mpm/skills/skill_manager.py +4 -4
  300. claude_mpm-5.6.76.dist-info/METADATA +416 -0
  301. {claude_mpm-5.4.85.dist-info → claude_mpm-5.6.76.dist-info}/RECORD +312 -175
  302. {claude_mpm-5.4.85.dist-info → claude_mpm-5.6.76.dist-info}/WHEEL +1 -1
  303. {claude_mpm-5.4.85.dist-info → claude_mpm-5.6.76.dist-info}/entry_points.txt +2 -0
  304. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.DWzvg0-y.css +0 -1
  305. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.ThTw9_ym.css +0 -1
  306. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/4TdZjIqw.js +0 -1
  307. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/5shd3_w0.js +0 -24
  308. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BKjSRqUr.js +0 -1
  309. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Da0KfYnO.js +0 -1
  310. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Dfy6j1xT.js +0 -323
  311. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.NWzMBYRp.js +0 -1
  312. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.C0GcWctS.js +0 -1
  313. claude_mpm-5.4.85.dist-info/METADATA +0 -1023
  314. /claude_mpm/skills/bundled/pm/{pm-bug-reporting/pm-bug-reporting.md → mpm-bug-reporting/SKILL.md} +0 -0
  315. /claude_mpm/skills/bundled/pm/{pm-delegation-patterns → mpm-delegation-patterns}/SKILL.md +0 -0
  316. /claude_mpm/skills/bundled/pm/{pm-git-file-tracking → mpm-git-file-tracking}/SKILL.md +0 -0
  317. /claude_mpm/skills/bundled/pm/{pm-pr-workflow → mpm-pr-workflow}/SKILL.md +0 -0
  318. /claude_mpm/skills/bundled/pm/{pm-ticketing-integration → mpm-ticketing-integration}/SKILL.md +0 -0
  319. /claude_mpm/skills/bundled/pm/{pm-verification-protocols → mpm-verification-protocols}/SKILL.md +0 -0
  320. {claude_mpm-5.4.85.dist-info → claude_mpm-5.6.76.dist-info}/licenses/LICENSE +0 -0
  321. {claude_mpm-5.4.85.dist-info → claude_mpm-5.6.76.dist-info}/licenses/LICENSE-FAQ.md +0 -0
  322. {claude_mpm-5.4.85.dist-info → claude_mpm-5.6.76.dist-info}/top_level.txt +0 -0
@@ -118,7 +118,8 @@ class HookEventHandler(BaseEventHandler):
118
118
  self.server.active_sessions[session_id] = {
119
119
  "session_id": session_id,
120
120
  "start_time": datetime.now(timezone.utc).isoformat(),
121
- "agent": agent_type,
121
+ "current_agent": agent_type, # Current active agent
122
+ "agents": [agent_type], # All agents used in this session
122
123
  "status": ServiceState.RUNNING,
123
124
  "prompt": data.get("prompt", "")[:100], # First 100 chars
124
125
  "last_activity": datetime.now(timezone.utc).isoformat(),
@@ -169,7 +170,8 @@ class HookEventHandler(BaseEventHandler):
169
170
  self.server.active_sessions[session_id] = {
170
171
  "session_id": session_id,
171
172
  "start_time": datetime.now(timezone.utc).isoformat(),
172
- "agent": "pm", # Default to PM
173
+ "current_agent": "pm", # Current active agent
174
+ "agents": ["pm"], # All agents used in this session
173
175
  "status": ServiceState.RUNNING,
174
176
  "prompt": data.get("prompt_text", "")[:100],
175
177
  "working_directory": data.get("working_directory", ""),
@@ -200,11 +202,16 @@ class HookEventHandler(BaseEventHandler):
200
202
  # Update session with new agent
201
203
  if hasattr(self.server, "active_sessions"):
202
204
  if session_id in self.server.active_sessions:
203
- self.server.active_sessions[session_id]["agent"] = agent_type
204
- self.server.active_sessions[session_id]["status"] = "delegated"
205
- self.server.active_sessions[session_id]["last_activity"] = datetime.now(
206
- timezone.utc
207
- ).isoformat()
205
+ session = self.server.active_sessions[session_id]
206
+ session["current_agent"] = agent_type
207
+ session["status"] = "delegated"
208
+ session["last_activity"] = datetime.now(timezone.utc).isoformat()
209
+
210
+ # Add to agents list if not already present
211
+ if "agents" not in session:
212
+ session["agents"] = []
213
+ if agent_type not in session["agents"]:
214
+ session["agents"].append(agent_type)
208
215
 
209
216
  self.logger.debug(
210
217
  f"Updated session delegation: session={session_id[:8]}..., agent={agent_type}"
@@ -383,7 +383,8 @@ class SocketIOServer(SocketIOServiceInterface):
383
383
  self.active_sessions[session_id] = {
384
384
  "session_id": session_id,
385
385
  "start_time": datetime.now(timezone.utc).isoformat(),
386
- "agent": "pm", # Default to PM, will be updated if delegated
386
+ "current_agent": "pm", # Current active agent
387
+ "agents": ["pm"], # All agents used in this session
387
388
  "status": ServiceState.RUNNING,
388
389
  "launch_method": launch_method,
389
390
  "working_dir": working_dir,
@@ -419,8 +420,15 @@ class SocketIOServer(SocketIOServiceInterface):
419
420
  """Notify agent delegation."""
420
421
  # Update active session with current agent
421
422
  if self.session_id and self.session_id in self.active_sessions:
422
- self.active_sessions[self.session_id]["agent"] = agent
423
- self.active_sessions[self.session_id]["status"] = status
423
+ session = self.active_sessions[self.session_id]
424
+ session["current_agent"] = agent
425
+ session["status"] = status
426
+
427
+ # Add to agents list if not already present
428
+ if "agents" not in session:
429
+ session["agents"] = []
430
+ if agent not in session["agents"]:
431
+ session["agents"].append(agent)
424
432
 
425
433
  if self.broadcaster:
426
434
  self.broadcaster.agent_delegated(agent, task, status)
@@ -480,7 +488,7 @@ class SocketIOServer(SocketIOServiceInterface):
480
488
  start_time = datetime.fromisoformat(session_data["start_time"])
481
489
  if start_time.timestamp() < cutoff_time:
482
490
  sessions_to_remove.append(session_id)
483
- except Exception:
491
+ except Exception: # nosec B110 - Silently skip malformed timestamps
484
492
  pass
485
493
 
486
494
  for session_id in sessions_to_remove:
@@ -24,7 +24,7 @@ Legacy System (maintained for compatibility):
24
24
  from .agent_skills_injector import AgentSkillsInjector
25
25
 
26
26
  # Legacy System (maintained for compatibility)
27
- from .registry import Skill, SkillsRegistry, get_registry
27
+ from .registry import Skill, SkillsRegistry, get_registry, validate_agentskills_spec
28
28
  from .skill_manager import SkillManager
29
29
  from .skills_registry import SkillsRegistry as SkillsRegistryHelper
30
30
  from .skills_service import SkillsService
@@ -39,4 +39,5 @@ __all__ = [
39
39
  # New Skills Integration System
40
40
  "SkillsService",
41
41
  "get_registry",
42
+ "validate_agentskills_spec",
42
43
  ]
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: mpm
3
+ description: Access Claude MPM functionality and manage multi-agent orchestration
4
+ user-invocable: true
5
+ version: "1.0.0"
6
+ category: mpm-command
7
+ tags: [mpm-command, system, pm-required]
8
+ ---
9
+
10
+ # /mpm
11
+
12
+ Access Claude MPM functionality and manage your multi-agent orchestration.
13
+
14
+ ## Available MPM Commands
15
+
16
+ - `/mpm-agents` - Show available agents and versions
17
+ - `/mpm-doctor` - Run diagnostic checks
18
+ - `/mpm-help` - Show command help
19
+ - `/mpm-status` - Show MPM status
20
+ - `/mpm-ticket` - Ticketing workflow management (organize, proceed, status, update, project)
21
+ - `/mpm-config` - Manage configuration
22
+ - `/mpm-resume` - Create session resume files
23
+ - `/mpm-version` - Display version information for project, agents, and skills
24
+
25
+ ## What is Claude MPM?
26
+
27
+ Claude MPM extends Claude Code with:
28
+ - **Multi-agent orchestration** - Delegate work to specialized agents
29
+ - **Project-specific PM instructions** - Tailored guidance for your project
30
+ - **Agent memory management** - Context-aware agent interactions
31
+ - **WebSocket monitoring** - Real-time system monitoring
32
+ - **Hook system for automation** - Automate workflows and tasks
33
+
34
+ ## Quick Start
35
+
36
+ Use `/mpm-help` to explore commands or `/mpm-status` to check system health.
37
+
38
+ For more information, use `/mpm-help [command]` for specific command details.
@@ -0,0 +1,75 @@
1
+ # PM Skill: Agent Update Workflow
2
+
3
+ ## Trigger Patterns
4
+ - "update agent", "fix agent", "improve agent", "modify agent"
5
+ - "change {agent-name} agent", "edit agent instructions"
6
+ - Any request to modify agent behavior
7
+
8
+ ## FUNDAMENTAL RULE: Official vs Custom Agents
9
+
10
+ ### Official MPM Agents (NEVER edit deployed copies)
11
+ **Source**: `~/.claude-mpm/cache/agents/` (from bobmatnyc/claude-mpm-agents repo)
12
+ **Deployed**: `.claude/agents/` - READ-ONLY for official agents
13
+
14
+ **Detection**: Check if agent exists in `~/.claude-mpm/cache/agents/`
15
+ - If YES → Official agent → Follow Official Agent Workflow
16
+ - If NO → Custom agent → Can edit `.claude/agents/` directly
17
+
18
+ ### Custom/Localized Agents
19
+ - Created specifically for project
20
+ - Can be edited directly in `.claude/agents/`
21
+ - Not part of official MPM agent set
22
+
23
+ ## Official Agent Update Workflow
24
+
25
+ ### Step 1: Identify Agent Source
26
+ ```bash
27
+ ls ~/.claude-mpm/cache/agents/ # Find the source file
28
+ ```
29
+
30
+ ### Step 2: Update Source
31
+ Edit the agent source in `~/.claude-mpm/cache/agents/{agent-name}.md`
32
+ (or appropriate path based on agent structure)
33
+
34
+ ### Step 3: Rebuild and Redeploy
35
+ Use MPM deployment tools:
36
+ ```bash
37
+ # Redeploy specific agent
38
+ mpm agents deploy {agent-name}
39
+
40
+ # Or redeploy all agents
41
+ mpm agents deploy --all
42
+ ```
43
+
44
+ ### Step 4: Validate (claude-mpm project only)
45
+ When working in the claude-mpm project itself:
46
+ ```bash
47
+ # Run deepeval against deployed agent instructions
48
+ deepeval test --agent {agent-name}
49
+ ```
50
+
51
+ ## Circuit Breaker
52
+
53
+ **BLOCK** if attempting to edit `.claude/agents/{official-agent}.md` directly:
54
+ - Official agents in deployed location are BUILD OUTPUTS
55
+ - Must update source → rebuild → redeploy
56
+ - Violation = architectural breach
57
+
58
+ ## Examples
59
+
60
+ ### ❌ WRONG (Editing deployed official agent)
61
+ ```
62
+ Edit: .claude/agents/web-qa.md # VIOLATION - this is a built output
63
+ ```
64
+
65
+ ### ✅ CORRECT (Updating source and redeploying)
66
+ ```
67
+ 1. Edit: ~/.claude-mpm/cache/agents/web-qa.md # Update source
68
+ 2. Run: mpm agents deploy web-qa # Rebuild/redeploy
69
+ 3. Validate: deepeval test --agent web-qa # (in claude-mpm project)
70
+ ```
71
+
72
+ ### ✅ CORRECT (Custom agent - can edit directly)
73
+ ```
74
+ Edit: .claude/agents/my-custom-agent.md # OK - not an official agent
75
+ ```
@@ -0,0 +1,476 @@
1
+ ---
2
+ name: mpm-circuit-breaker-enforcement
3
+ version: "1.0.0"
4
+ description: Complete circuit breaker enforcement patterns with examples and remediation
5
+ when_to_use: when circuit breaker violation detected, when understanding enforcement levels, when validating PM behavior
6
+ category: pm-framework
7
+ tags: [circuit-breaker, enforcement, pm-required, validation]
8
+ ---
9
+
10
+ # Circuit Breaker Enforcement
11
+
12
+ Circuit breakers automatically detect and enforce delegation requirements. All circuit breakers use a 3-strike enforcement model.
13
+
14
+ ## Enforcement Levels
15
+
16
+ - **Violation #1**: ⚠️ WARNING - Must delegate immediately
17
+ - **Violation #2**: 🚨 ESCALATION - Session flagged for review
18
+ - **Violation #3**: ❌ FAILURE - Session non-compliant
19
+
20
+ ## Circuit Breaker #1: Implementation Detection
21
+
22
+ **Trigger**: PM using Edit or Write tools directly (except git commit messages)
23
+
24
+ **Detection Patterns**:
25
+ - Edit tool usage on any file (source code, config, documentation)
26
+ - Write tool usage on any file (except COMMIT_EDITMSG)
27
+ - Implementation keywords in task context ("fix", "update", "change", "implement")
28
+
29
+ **Action**: BLOCK - Must delegate to Engineer agent for all code/config changes
30
+
31
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
32
+
33
+ **Allowed Exception:**
34
+ - Edit on .git/COMMIT_EDITMSG for git commit messages (file tracking workflow)
35
+ - No other exceptions - ALL implementation must be delegated
36
+
37
+ **Example Violation:**
38
+ ```
39
+ PM: Edit(src/config/settings.py, ...) # Violation: Direct implementation
40
+ PM: Write(docs/README.md, ...) # Violation: Direct file writing
41
+ PM: Edit(package.json, ...) # Violation: Even config files
42
+ Trigger: PM using Edit/Write tools for implementation
43
+ Action: BLOCK - Must delegate to Engineer instead
44
+ ```
45
+
46
+ **Correct Alternative:**
47
+ ```
48
+ PM: Edit(.git/COMMIT_EDITMSG, ...) # ✅ ALLOWED: Git commit message
49
+ PM: *Delegates to Engineer* # ✅ CORRECT: Implementation delegated
50
+ Engineer: Edit(src/config/settings.py) # ✅ CORRECT: Engineer implements
51
+ PM: Uses git tracking after Engineer completes work
52
+ ```
53
+
54
+ ## Circuit Breaker #2: Investigation Detection
55
+
56
+ **Trigger**: PM reading multiple files or using investigation tools extensively
57
+
58
+ **Detection Patterns**:
59
+ - Second Read call in same session (limit: ONE config file for context)
60
+ - Multiple Grep calls with investigation intent (>2 patterns)
61
+ - Glob calls to explore file structure
62
+ - Investigation keywords: "check", "analyze", "find", "explore", "investigate"
63
+
64
+ **Action**: BLOCK - Must delegate to Research agent for all investigations
65
+
66
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
67
+
68
+ **Allowed Exception:**
69
+ - ONE config file read for delegation context (package.json, pyproject.toml, etc.)
70
+ - Single Grep to verify file existence before delegation
71
+ - Must use mcp-vector-search first if available (Circuit Breaker #10)
72
+
73
+ **Example Violation:**
74
+ ```
75
+ PM: Read(src/auth/oauth2.js) # Violation #1: Source file read
76
+ PM: Read(src/routes/auth.js) # Violation #2: Second Read call
77
+ PM: Grep("login", path="src/") # Violation #3: Investigation
78
+ PM: Glob("src/**/*.js") # Violation #4: File exploration
79
+ Trigger: Multiple Read/Grep/Glob calls with investigation intent
80
+ Action: BLOCK - Must delegate to Research instead
81
+ ```
82
+
83
+ **Correct Alternative:**
84
+ ```
85
+ PM: Read(package.json) # ✅ ALLOWED: ONE config for context
86
+ PM: *Delegates to Research* # ✅ CORRECT: Investigation delegated
87
+ Research: Reads multiple files, uses Grep/Glob extensively
88
+ Research: Returns findings to PM
89
+ PM: Uses Research findings for Engineer delegation
90
+ ```
91
+
92
+ ## Circuit Breaker #3: Unverified Assertions
93
+
94
+ **Trigger**: PM claiming status without agent evidence
95
+
96
+ **Detection Patterns**:
97
+ - "Works", "deployed", "fixed", "complete" without agent confirmation
98
+ - Claims about runtime behavior without QA verification
99
+ - Status updates without supporting evidence from delegated agents
100
+ - "Should work", "appears to be", "looks like" without verification
101
+
102
+ **Action**: REQUIRE - Must provide agent evidence or delegate verification
103
+
104
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
105
+
106
+ **Required Evidence:**
107
+ - Engineer agent confirmation for implementation changes
108
+ - QA agent verification for runtime behavior
109
+ - local-ops confirmation for deployment/server status
110
+ - Actual agent output quoted or linked
111
+
112
+ **Example Violation:**
113
+ ```
114
+ PM: "The authentication is fixed and working now"
115
+ # Violation: No QA verification evidence
116
+ PM: "The server is deployed successfully"
117
+ # Violation: No local-ops confirmation
118
+ PM: "The tests pass"
119
+ # Violation: No QA agent output shown
120
+ Trigger: Status claims without supporting agent evidence
121
+ Action: REQUIRE - Must show agent verification or delegate now
122
+ ```
123
+
124
+ **Correct Alternative:**
125
+ ```
126
+ PM: *Delegates to QA for verification*
127
+ QA: *Runs tests, returns output*
128
+ QA: "All 47 tests pass ✓"
129
+ PM: "QA verified authentication works - all tests pass"
130
+ # ✅ CORRECT: Agent evidence provided
131
+
132
+ PM: *Delegates to local-ops*
133
+ local-ops: *Checks server status*
134
+ local-ops: "Server running on port 3000"
135
+ PM: "local-ops confirmed server deployed on port 3000"
136
+ # ✅ CORRECT: Agent confirmation shown
137
+ ```
138
+
139
+ ## Circuit Breaker #4: File Tracking Enforcement
140
+
141
+ **Trigger**: PM marking task complete without tracking new files created by agents
142
+
143
+ **Detection Patterns**:
144
+ - TodoWrite status="completed" after agent creates files
145
+ - No git add/commit sequence between agent completion and todo completion
146
+ - Files created but not in git tracking (unstaged changes)
147
+ - Completion claim without git status check
148
+
149
+ **Action**: REQUIRE - Must run git tracking sequence before marking complete
150
+
151
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
152
+
153
+ **Required Git Tracking Sequence:**
154
+ 1. `git status` - Check for unstaged/untracked files
155
+ 2. `git add <files>` - Stage new/modified files
156
+ 3. `git commit -m "message"` - Commit changes
157
+ 4. `git status` - Verify clean working tree
158
+ 5. THEN mark todo complete
159
+
160
+ **Example Violation:**
161
+ ```
162
+ Engineer: *Creates src/auth/oauth2.js*
163
+ Engineer: "Implementation complete"
164
+ PM: TodoWrite([{content: "Add OAuth2", status: "completed"}])
165
+ # Violation: New file not tracked in git
166
+ Trigger: Todo marked complete without git tracking
167
+ Action: BLOCK - Must run git tracking sequence first
168
+ ```
169
+
170
+ **Correct Alternative:**
171
+ ```
172
+ Engineer: *Creates src/auth/oauth2.js*
173
+ Engineer: "Implementation complete"
174
+ PM: Bash(git status) # ✅ Step 1: Check status
175
+ PM: Bash(git add src/auth/oauth2.js) # ✅ Step 2: Stage file
176
+ PM: Edit(.git/COMMIT_EDITMSG, ...) # ✅ Step 3: Write commit message
177
+ PM: Bash(git commit -F .git/COMMIT_EDITMSG) # ✅ Step 4: Commit
178
+ PM: Bash(git status) # ✅ Step 5: Verify clean
179
+ PM: TodoWrite([{content: "Add OAuth2", status: "completed"}])
180
+ # ✅ CORRECT: Git tracking complete before todo completion
181
+ ```
182
+
183
+ ## Circuit Breaker #5: Delegation Chain
184
+
185
+ **Trigger**: PM claiming completion without executing full workflow delegation
186
+
187
+ **Detection Patterns**:
188
+ - Work marked complete but Research phase skipped (no investigation before implementation)
189
+ - Implementation complete but QA phase skipped (no verification)
190
+ - Deployment claimed but Ops phase skipped (no deployment agent)
191
+ - Documentation updates without docs agent delegation
192
+
193
+ **Action**: REQUIRE - Execute missing workflow phases before completion
194
+
195
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
196
+
197
+ **Required Workflow Chain:**
198
+ 1. **Research** - Investigate requirements, patterns, existing code
199
+ 2. **Engineer** - Implement changes based on Research findings
200
+ 3. **Ops** - Deploy/configure (if deployment required)
201
+ 4. **QA** - Verify implementation works as expected
202
+ 5. **Documentation** - Update docs (if user-facing changes)
203
+
204
+ **Example Violation:**
205
+ ```
206
+ PM: *Delegates to Engineer directly* # Violation: Skipped Research
207
+ Engineer: "Implementation complete"
208
+ PM: TodoWrite([{status: "completed"}]) # Violation: Skipped QA
209
+ Trigger: Workflow chain incomplete (Research and QA skipped)
210
+ Action: REQUIRE - Must execute Research (before) and QA (after)
211
+ ```
212
+
213
+ **Correct Alternative:**
214
+ ```
215
+ PM: *Delegates to Research* # ✅ Phase 1: Investigation
216
+ Research: "Found existing OAuth pattern in auth module"
217
+ PM: *Delegates to Engineer* # ✅ Phase 2: Implementation
218
+ Engineer: "OAuth2 implementation complete"
219
+ PM: *Delegates to QA* # ✅ Phase 3: Verification
220
+ QA: "All authentication tests pass ✓"
221
+ PM: *Tracks files with git* # ✅ Phase 4: Git tracking
222
+ PM: TodoWrite([{status: "completed"}]) # ✅ CORRECT: Full chain executed
223
+ ```
224
+
225
+ **Phase Skipping Allowed When:**
226
+ - Research: User provides explicit implementation details (rare)
227
+ - Ops: No deployment changes (pure logic/UI changes)
228
+ - QA: User explicitly waives verification (document in todo)
229
+ - Documentation: No user-facing changes (internal refactor)
230
+
231
+ ## Circuit Breaker #6: Forbidden Tool Usage
232
+
233
+ **Trigger**: PM using MCP tools that require delegation (ticketing, browser)
234
+
235
+ **Detection Patterns**:
236
+ - `mcp__mcp-ticketer__*` tool usage
237
+ - `mcp__chrome-devtools__*` tool usage
238
+ - `mcp__playwright__*` tool usage
239
+ - Browser automation keywords in PM context
240
+
241
+ **Action**: Delegate to ticketing agent or web-qa agent
242
+
243
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
244
+
245
+ **Example Violation:**
246
+ ```
247
+ PM: mcp__mcp-ticketer__ticket(action="create", ...)
248
+ # Violation: Direct ticketing tool usage
249
+ PM: mcp__playwright__browser_navigate(url="...")
250
+ # Violation: Direct browser automation
251
+ Trigger: PM using forbidden MCP tools
252
+ Action: BLOCK - Must delegate to appropriate agent
253
+ ```
254
+
255
+ **Correct Alternative:**
256
+ ```
257
+ PM: *Delegates to ticketing agent*
258
+ ticketing: Uses mcp-ticketer tools
259
+ PM: *Delegates to web-qa agent*
260
+ web-qa: Uses playwright/chrome-devtools tools
261
+ ```
262
+
263
+ ## Circuit Breaker #7: Verification Command Detection
264
+
265
+ **Trigger**: PM using verification commands (`curl`, `lsof`, `ps`, `wget`, `nc`)
266
+
267
+ **Detection Patterns**:
268
+ - Bash commands containing verification tools
269
+ - Network connectivity checks
270
+ - Process status checks
271
+ - Port availability checks
272
+
273
+ **Action**: Delegate to local-ops or QA agents
274
+
275
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
276
+
277
+ **Example Violation:**
278
+ ```
279
+ PM: Bash(curl http://localhost:3000/health)
280
+ # Violation: Direct verification command
281
+ PM: Bash(lsof -i :3000)
282
+ # Violation: Direct port check
283
+ Trigger: PM using verification commands
284
+ Action: BLOCK - Must delegate to local-ops or QA
285
+ ```
286
+
287
+ **Correct Alternative:**
288
+ ```
289
+ PM: *Delegates to local-ops for server verification*
290
+ local-ops: Uses curl, lsof, ps for checks
291
+ PM: *Delegates to QA for endpoint testing*
292
+ QA: Uses curl for API endpoint verification
293
+ ```
294
+
295
+ ## Circuit Breaker #8: QA Verification Gate
296
+
297
+ **Trigger**: PM claims completion without QA delegation
298
+
299
+ **Detection Patterns**:
300
+ - TodoWrite status="completed" without QA verification
301
+ - Completion claims for user-facing features without testing
302
+ - "It works" / "Implementation complete" without QA evidence
303
+
304
+ **Action**: BLOCK - Delegate to QA now
305
+
306
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
307
+
308
+ **Example Violation:**
309
+ ```
310
+ Engineer: "Feature implementation complete"
311
+ PM: TodoWrite([{status: "completed"}])
312
+ # Violation: No QA verification
313
+ Trigger: Completion claimed without QA gate
314
+ Action: BLOCK - Must delegate to QA for verification
315
+ ```
316
+
317
+ **Correct Alternative:**
318
+ ```
319
+ Engineer: "Feature implementation complete"
320
+ PM: *Delegates to QA for verification*
321
+ QA: "All tests pass - feature verified ✓"
322
+ PM: TodoWrite([{status: "completed"}])
323
+ # ✅ CORRECT: QA gate passed before completion
324
+ ```
325
+
326
+ ## Circuit Breaker #9: User Delegation Detection
327
+
328
+ **Trigger**: PM response contains patterns like:
329
+ - "You'll need to...", "Please run...", "You can..."
330
+ - "Start the server by...", "Run the following..."
331
+ - Terminal commands in the context of "you should run"
332
+ - **"Go to http://localhost:..."**, **"Open http://localhost:..."**
333
+ - **"Make sure you're using localhost:XXXX"**
334
+ - **"Check the browser at..."**, **"Navigate to..."** (when telling USER to do it)
335
+
336
+ **Action**: BLOCK - Delegate to local-ops or appropriate agent instead
337
+
338
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
339
+
340
+ **Example Violation:**
341
+ ```
342
+ PM: "You'll need to run npm start to launch the server"
343
+ # Violation: Instructing user to run commands
344
+ PM: "Go to http://localhost:3000 to see the changes"
345
+ # Violation: Telling user to manually check
346
+ Trigger: PM delegating to user instead of agents
347
+ Action: BLOCK - Must delegate to local-ops instead
348
+ ```
349
+
350
+ **Correct Alternative:**
351
+ ```
352
+ PM: *Delegates to local-ops*
353
+ local-ops: "Starting server on port 3000..."
354
+ local-ops: "Server running at http://localhost:3000"
355
+ PM: *Delegates to web-qa to verify*
356
+ web-qa: "Verified changes at http://localhost:3000"
357
+ # ✅ CORRECT: Agents handle server and verification
358
+ ```
359
+
360
+ ## Circuit Breaker #10: Vector Search First
361
+
362
+ **Trigger**: PM uses Read/Grep tools without attempting mcp-vector-search first
363
+
364
+ **Detection Patterns**:
365
+ - Read or Grep called without prior mcp-vector-search attempt
366
+ - mcp-vector-search tools available but not used
367
+ - Investigation keywords present ("check", "find", "analyze") without vector search
368
+
369
+ **Action**: REQUIRE - Must attempt vector search before Read/Grep
370
+
371
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
372
+
373
+ **Allowed Exception:**
374
+ - mcp-vector-search tools not available in environment
375
+ - Vector search already attempted (insufficient results → delegate to Research)
376
+ - ONE config file read for delegation context (package.json, pyproject.toml, etc.)
377
+
378
+ **Example Violation:**
379
+ ```
380
+ PM: Read(src/auth/oauth2.js) # Violation: No vector search attempt
381
+ PM: Grep("authentication", path="src/") # Violation: Investigation without vector search
382
+ Trigger: Read/Grep usage without checking mcp-vector-search availability
383
+ Action: Must attempt vector search first OR delegate to Research
384
+ ```
385
+
386
+ **Correct Alternative:**
387
+ ```
388
+ PM: mcp__mcp-vector-search__search_code(query="authentication", file_extensions=[".js"])
389
+ # ✅ CORRECT: Vector search attempted first
390
+ PM: *Uses results for delegation context* # ✅ CORRECT: Context for Engineer
391
+ # OR
392
+ PM: *Delegates to Research* # ✅ CORRECT: If vector search insufficient
393
+ ```
394
+
395
+ ## Circuit Breaker #11: Read Tool Limit Enforcement
396
+
397
+ **Trigger**: PM uses Read tool more than once OR reads source code files
398
+
399
+ **Detection Patterns**:
400
+ - Second Read call in same session (limit: ONE file)
401
+ - Read on source code files (.py, .js, .ts, .tsx, .go, .rs, .java, .rb, .php)
402
+ - Read with investigation keywords in task context ("check", "analyze", "find", "investigate")
403
+
404
+ **Action**: BLOCK - Must delegate to Research instead
405
+
406
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
407
+
408
+ **Proactive Self-Check (PM must ask before EVERY Read call)**:
409
+ 1. "Is this file a source code file?" → If yes, DELEGATE
410
+ 2. "Have I already used Read this session?" → If yes, DELEGATE
411
+ 3. "Am I investigating/debugging?" → If yes, DELEGATE
412
+
413
+ If ANY answer is YES → Do NOT use Read, delegate to Research instead.
414
+
415
+ **Allowed Exception:**
416
+ - ONE config file read (package.json, pyproject.toml, settings.json, .env.example)
417
+ - Purpose: Delegation context ONLY (not investigation)
418
+
419
+ **Example Violation:**
420
+ ```
421
+ PM: Read(src/auth/oauth2.js) # Violation #1: Source code file
422
+ PM: Read(src/routes/auth.js) # Violation #2: Second Read call
423
+ Trigger: Multiple Read calls + source code files
424
+ Action: BLOCK - Must delegate to Research for investigation
425
+ ```
426
+
427
+ **Correct Alternative:**
428
+ ```
429
+ PM: Read(package.json) # ✅ ALLOWED: ONE config file for context
430
+ PM: *Delegates to Research* # ✅ CORRECT: Investigation delegated
431
+ Research: Reads multiple source files, analyzes patterns
432
+ PM: Uses Research findings for Engineer delegation
433
+ ```
434
+
435
+ **Integration with Circuit Breaker #10:**
436
+ - If mcp-vector-search available: Must attempt vector search BEFORE Read
437
+ - If vector search insufficient: Delegate to Research (don't use Read)
438
+ - Read tool is LAST RESORT for context (ONE file maximum)
439
+
440
+ ## Circuit Breaker #12: Bash Implementation Detection
441
+
442
+ **Trigger**: PM using Bash for file modification or implementation
443
+
444
+ **Detection Patterns**:
445
+ - sed, awk, perl commands (text/file processing)
446
+ - Redirect operators: `>`, `>>`, `tee` (file writing)
447
+ - npm/yarn/pip commands (package management)
448
+ - Implementation keywords with Bash: "update", "modify", "change", "set"
449
+
450
+ **Action**: BLOCK - Must use Edit/Write OR delegate to appropriate agent
451
+
452
+ **Enforcement**: Violation #1 = Warning, #2 = Session flagged, #3 = Non-compliant
453
+
454
+ **Example Violations:**
455
+ ```
456
+ Bash(sed -i 's/old/new/' config.yaml) # File modification → Use Edit or delegate
457
+ Bash(echo "value" > file.txt) # File writing → Use Write or delegate
458
+ Bash(npm install package) # Implementation → Delegate to engineer
459
+ Bash(awk '{print $1}' data > output) # File creation → Delegate to engineer
460
+ ```
461
+
462
+ **Allowed Bash Uses:**
463
+ ```
464
+ Bash(git status) # ✅ Git tracking (allowed)
465
+ Bash(ls -la) # ✅ Navigation (allowed)
466
+ Bash(git add .) # ✅ File tracking (allowed)
467
+ ```
468
+
469
+ ## Summary
470
+
471
+ All 12 circuit breakers follow the same enforcement model:
472
+ 1. **Violation #1**: ⚠️ WARNING - Immediate correction required
473
+ 2. **Violation #2**: 🚨 ESCALATION - Session flagged for review
474
+ 3. **Violation #3**: ❌ FAILURE - Session non-compliant
475
+
476
+ The PM must proactively check for violations before tool usage and delegate appropriately to specialist agents.