claude-mpm 5.0.9__py3-none-any.whl → 5.4.41__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 (263) hide show
  1. claude_mpm/VERSION +1 -1
  2. claude_mpm/__init__.py +4 -0
  3. claude_mpm/agents/BASE_AGENT.md +164 -0
  4. claude_mpm/agents/{PM_INSTRUCTIONS_TEACH.md → CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md} +721 -41
  5. claude_mpm/agents/MEMORY.md +1 -1
  6. claude_mpm/agents/PM_INSTRUCTIONS.md +468 -468
  7. claude_mpm/agents/WORKFLOW.md +5 -254
  8. claude_mpm/agents/agent_loader.py +13 -44
  9. claude_mpm/agents/base_agent.json +1 -1
  10. claude_mpm/agents/frontmatter_validator.py +70 -2
  11. claude_mpm/agents/templates/circuit-breakers.md +431 -45
  12. claude_mpm/cli/__init__.py +0 -1
  13. claude_mpm/cli/__main__.py +4 -0
  14. claude_mpm/cli/chrome_devtools_installer.py +175 -0
  15. claude_mpm/cli/commands/agent_state_manager.py +18 -27
  16. claude_mpm/cli/commands/agents.py +175 -37
  17. claude_mpm/cli/commands/auto_configure.py +723 -236
  18. claude_mpm/cli/commands/config.py +88 -2
  19. claude_mpm/cli/commands/configure.py +1262 -157
  20. claude_mpm/cli/commands/configure_agent_display.py +25 -6
  21. claude_mpm/cli/commands/mpm_init/core.py +225 -46
  22. claude_mpm/cli/commands/mpm_init/knowledge_extractor.py +481 -0
  23. claude_mpm/cli/commands/mpm_init/prompts.py +280 -0
  24. claude_mpm/cli/commands/postmortem.py +1 -1
  25. claude_mpm/cli/commands/profile.py +277 -0
  26. claude_mpm/cli/commands/skills.py +214 -189
  27. claude_mpm/cli/commands/summarize.py +413 -0
  28. claude_mpm/cli/executor.py +21 -3
  29. claude_mpm/cli/interactive/agent_wizard.py +85 -10
  30. claude_mpm/cli/parsers/agents_parser.py +54 -9
  31. claude_mpm/cli/parsers/auto_configure_parser.py +13 -138
  32. claude_mpm/cli/parsers/base_parser.py +12 -0
  33. claude_mpm/cli/parsers/config_parser.py +153 -83
  34. claude_mpm/cli/parsers/profile_parser.py +148 -0
  35. claude_mpm/cli/parsers/skills_parser.py +3 -2
  36. claude_mpm/cli/startup.py +879 -149
  37. claude_mpm/commands/mpm-config.md +28 -0
  38. claude_mpm/commands/mpm-doctor.md +9 -22
  39. claude_mpm/commands/mpm-help.md +5 -287
  40. claude_mpm/commands/mpm-init.md +81 -507
  41. claude_mpm/commands/mpm-monitor.md +15 -402
  42. claude_mpm/commands/mpm-organize.md +120 -0
  43. claude_mpm/commands/mpm-postmortem.md +6 -108
  44. claude_mpm/commands/mpm-session-resume.md +12 -363
  45. claude_mpm/commands/mpm-status.md +5 -69
  46. claude_mpm/commands/mpm-ticket-view.md +52 -495
  47. claude_mpm/commands/mpm-version.md +5 -107
  48. claude_mpm/config/agent_sources.py +27 -0
  49. claude_mpm/core/config.py +2 -4
  50. claude_mpm/core/framework/formatters/content_formatter.py +3 -13
  51. claude_mpm/core/framework/loaders/agent_loader.py +8 -5
  52. claude_mpm/core/framework/loaders/instruction_loader.py +52 -11
  53. claude_mpm/core/framework_loader.py +4 -2
  54. claude_mpm/core/logger.py +13 -0
  55. claude_mpm/core/optimized_startup.py +59 -0
  56. claude_mpm/core/output_style_manager.py +173 -43
  57. claude_mpm/core/shared/config_loader.py +1 -1
  58. claude_mpm/core/socketio_pool.py +3 -3
  59. claude_mpm/core/unified_agent_registry.py +134 -16
  60. claude_mpm/core/unified_config.py +22 -0
  61. claude_mpm/dashboard/static/svelte-build/_app/env.js +1 -0
  62. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +1 -0
  63. claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +1 -0
  64. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +1 -0
  65. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +1 -0
  66. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +1 -0
  67. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +2 -0
  68. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DjhvlsAc.js +1 -0
  69. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/N4qtv3Hx.js +2 -0
  70. claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/uj46x2Wr.js +1 -0
  71. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +2 -0
  72. claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +1 -0
  73. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/0.CAGBuiOw.js +1 -0
  74. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +1 -0
  75. claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +10 -0
  76. claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -0
  77. claude_mpm/dashboard/static/svelte-build/favicon.svg +7 -0
  78. claude_mpm/dashboard/static/svelte-build/index.html +36 -0
  79. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-311.pyc +0 -0
  80. claude_mpm/hooks/claude_hooks/__pycache__/correlation_manager.cpython-311.pyc +0 -0
  81. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
  82. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
  83. claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
  84. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
  85. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
  86. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-311.pyc +0 -0
  87. claude_mpm/hooks/claude_hooks/correlation_manager.py +60 -0
  88. claude_mpm/hooks/claude_hooks/event_handlers.py +211 -78
  89. claude_mpm/hooks/claude_hooks/hook_handler.py +155 -1
  90. claude_mpm/hooks/claude_hooks/installer.py +33 -10
  91. claude_mpm/hooks/claude_hooks/memory_integration.py +28 -0
  92. claude_mpm/hooks/claude_hooks/response_tracking.py +2 -3
  93. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
  94. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
  95. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
  96. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-311.pyc +0 -0
  97. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
  98. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
  99. claude_mpm/hooks/claude_hooks/services/connection_manager.py +30 -6
  100. claude_mpm/hooks/memory_integration_hook.py +46 -1
  101. claude_mpm/init.py +63 -19
  102. claude_mpm/models/agent_definition.py +7 -0
  103. claude_mpm/models/git_repository.py +3 -3
  104. claude_mpm/scripts/claude-hook-handler.sh +58 -18
  105. claude_mpm/scripts/launch_monitor.py +93 -13
  106. claude_mpm/scripts/start_activity_logging.py +0 -0
  107. claude_mpm/services/agents/agent_builder.py +3 -3
  108. claude_mpm/services/agents/agent_recommendation_service.py +278 -0
  109. claude_mpm/services/agents/agent_review_service.py +280 -0
  110. claude_mpm/services/agents/cache_git_manager.py +6 -6
  111. claude_mpm/services/agents/deployment/agent_deployment.py +29 -7
  112. claude_mpm/services/agents/deployment/agent_discovery_service.py +4 -5
  113. claude_mpm/services/agents/deployment/agent_template_builder.py +5 -3
  114. claude_mpm/services/agents/deployment/agents_directory_resolver.py +2 -2
  115. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +320 -29
  116. claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +546 -68
  117. claude_mpm/services/agents/git_source_manager.py +36 -2
  118. claude_mpm/services/agents/loading/base_agent_manager.py +1 -13
  119. claude_mpm/services/agents/recommender.py +5 -3
  120. claude_mpm/services/agents/single_tier_deployment_service.py +2 -2
  121. claude_mpm/services/agents/sources/git_source_sync_service.py +13 -6
  122. claude_mpm/services/agents/startup_sync.py +22 -2
  123. claude_mpm/services/agents/toolchain_detector.py +10 -6
  124. claude_mpm/services/analysis/__init__.py +11 -1
  125. claude_mpm/services/analysis/clone_detector.py +1030 -0
  126. claude_mpm/services/command_deployment_service.py +81 -10
  127. claude_mpm/services/diagnostics/checks/agent_check.py +2 -2
  128. claude_mpm/services/diagnostics/checks/agent_sources_check.py +1 -1
  129. claude_mpm/services/event_bus/config.py +3 -1
  130. claude_mpm/services/git/git_operations_service.py +101 -16
  131. claude_mpm/services/monitor/daemon.py +9 -2
  132. claude_mpm/services/monitor/daemon_manager.py +39 -3
  133. claude_mpm/services/monitor/management/lifecycle.py +8 -1
  134. claude_mpm/services/monitor/server.py +698 -22
  135. claude_mpm/services/pm_skills_deployer.py +676 -0
  136. claude_mpm/services/profile_manager.py +331 -0
  137. claude_mpm/services/project/project_organizer.py +4 -0
  138. claude_mpm/services/self_upgrade_service.py +120 -12
  139. claude_mpm/services/skills/__init__.py +3 -0
  140. claude_mpm/services/skills/git_skill_source_manager.py +130 -2
  141. claude_mpm/services/skills/selective_skill_deployer.py +704 -0
  142. claude_mpm/services/skills/skill_to_agent_mapper.py +406 -0
  143. claude_mpm/services/skills_deployer.py +126 -9
  144. claude_mpm/services/socketio/dashboard_server.py +1 -0
  145. claude_mpm/services/socketio/event_normalizer.py +51 -6
  146. claude_mpm/services/socketio/server/core.py +386 -108
  147. claude_mpm/services/version_control/git_operations.py +103 -0
  148. claude_mpm/skills/skill_manager.py +92 -3
  149. claude_mpm/utils/agent_dependency_loader.py +14 -2
  150. claude_mpm/utils/agent_filters.py +17 -44
  151. claude_mpm/utils/gitignore.py +3 -0
  152. claude_mpm/utils/migration.py +4 -4
  153. claude_mpm/utils/robust_installer.py +47 -3
  154. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/METADATA +57 -87
  155. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/RECORD +160 -211
  156. claude_mpm-5.4.41.dist-info/entry_points.txt +5 -0
  157. claude_mpm-5.4.41.dist-info/licenses/LICENSE +94 -0
  158. claude_mpm-5.4.41.dist-info/licenses/LICENSE-FAQ.md +153 -0
  159. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +0 -292
  160. claude_mpm/agents/BASE_DOCUMENTATION.md +0 -53
  161. claude_mpm/agents/BASE_OPS.md +0 -219
  162. claude_mpm/agents/BASE_PM.md +0 -480
  163. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +0 -787
  164. claude_mpm/agents/BASE_QA.md +0 -167
  165. claude_mpm/agents/BASE_RESEARCH.md +0 -53
  166. claude_mpm/agents/base_agent_loader.py +0 -601
  167. claude_mpm/cli/commands/agents_detect.py +0 -380
  168. claude_mpm/cli/commands/agents_recommend.py +0 -309
  169. claude_mpm/cli/ticket_cli.py +0 -35
  170. claude_mpm/commands/mpm-agents-auto-configure.md +0 -278
  171. claude_mpm/commands/mpm-agents-detect.md +0 -177
  172. claude_mpm/commands/mpm-agents-list.md +0 -131
  173. claude_mpm/commands/mpm-agents-recommend.md +0 -223
  174. claude_mpm/commands/mpm-config-view.md +0 -150
  175. claude_mpm/commands/mpm-ticket-organize.md +0 -304
  176. claude_mpm/dashboard/analysis_runner.py +0 -455
  177. claude_mpm/dashboard/index.html +0 -13
  178. claude_mpm/dashboard/open_dashboard.py +0 -66
  179. claude_mpm/dashboard/static/css/activity.css +0 -1958
  180. claude_mpm/dashboard/static/css/connection-status.css +0 -370
  181. claude_mpm/dashboard/static/css/dashboard.css +0 -4701
  182. claude_mpm/dashboard/static/js/components/activity-tree.js +0 -1871
  183. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +0 -777
  184. claude_mpm/dashboard/static/js/components/agent-inference.js +0 -956
  185. claude_mpm/dashboard/static/js/components/build-tracker.js +0 -333
  186. claude_mpm/dashboard/static/js/components/code-simple.js +0 -857
  187. claude_mpm/dashboard/static/js/components/connection-debug.js +0 -654
  188. claude_mpm/dashboard/static/js/components/diff-viewer.js +0 -891
  189. claude_mpm/dashboard/static/js/components/event-processor.js +0 -542
  190. claude_mpm/dashboard/static/js/components/event-viewer.js +0 -1155
  191. claude_mpm/dashboard/static/js/components/export-manager.js +0 -368
  192. claude_mpm/dashboard/static/js/components/file-change-tracker.js +0 -443
  193. claude_mpm/dashboard/static/js/components/file-change-viewer.js +0 -690
  194. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +0 -724
  195. claude_mpm/dashboard/static/js/components/file-viewer.js +0 -580
  196. claude_mpm/dashboard/static/js/components/hud-library-loader.js +0 -211
  197. claude_mpm/dashboard/static/js/components/hud-manager.js +0 -671
  198. claude_mpm/dashboard/static/js/components/hud-visualizer.js +0 -1718
  199. claude_mpm/dashboard/static/js/components/module-viewer.js +0 -2764
  200. claude_mpm/dashboard/static/js/components/session-manager.js +0 -579
  201. claude_mpm/dashboard/static/js/components/socket-manager.js +0 -368
  202. claude_mpm/dashboard/static/js/components/ui-state-manager.js +0 -749
  203. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +0 -1824
  204. claude_mpm/dashboard/static/js/components/working-directory.js +0 -920
  205. claude_mpm/dashboard/static/js/connection-manager.js +0 -536
  206. claude_mpm/dashboard/static/js/dashboard.js +0 -1914
  207. claude_mpm/dashboard/static/js/extension-error-handler.js +0 -164
  208. claude_mpm/dashboard/static/js/socket-client.js +0 -1474
  209. claude_mpm/dashboard/static/js/tab-isolation-fix.js +0 -185
  210. claude_mpm/dashboard/static/socket.io.min.js +0 -7
  211. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +0 -7
  212. claude_mpm/dashboard/templates/code_simple.html +0 -153
  213. claude_mpm/dashboard/templates/index.html +0 -606
  214. claude_mpm/dashboard/test_dashboard.html +0 -372
  215. claude_mpm/hooks/claude_hooks/__pycache__/__init__.cpython-313.pyc +0 -0
  216. claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-313.pyc +0 -0
  217. claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-313.pyc +0 -0
  218. claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-313.pyc +0 -0
  219. claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-313.pyc +0 -0
  220. claude_mpm/hooks/claude_hooks/__pycache__/tool_analysis.cpython-313.pyc +0 -0
  221. claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-313.pyc +0 -0
  222. claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-313.pyc +0 -0
  223. claude_mpm/hooks/claude_hooks/services/__pycache__/duplicate_detector.cpython-313.pyc +0 -0
  224. claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-313.pyc +0 -0
  225. claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-313.pyc +0 -0
  226. claude_mpm/scripts/mcp_server.py +0 -75
  227. claude_mpm/scripts/mcp_wrapper.py +0 -39
  228. claude_mpm/services/mcp_gateway/__init__.py +0 -159
  229. claude_mpm/services/mcp_gateway/auto_configure.py +0 -369
  230. claude_mpm/services/mcp_gateway/config/__init__.py +0 -17
  231. claude_mpm/services/mcp_gateway/config/config_loader.py +0 -296
  232. claude_mpm/services/mcp_gateway/config/config_schema.py +0 -243
  233. claude_mpm/services/mcp_gateway/config/configuration.py +0 -429
  234. claude_mpm/services/mcp_gateway/core/__init__.py +0 -43
  235. claude_mpm/services/mcp_gateway/core/base.py +0 -312
  236. claude_mpm/services/mcp_gateway/core/exceptions.py +0 -253
  237. claude_mpm/services/mcp_gateway/core/interfaces.py +0 -443
  238. claude_mpm/services/mcp_gateway/core/process_pool.py +0 -977
  239. claude_mpm/services/mcp_gateway/core/singleton_manager.py +0 -315
  240. claude_mpm/services/mcp_gateway/core/startup_verification.py +0 -316
  241. claude_mpm/services/mcp_gateway/main.py +0 -589
  242. claude_mpm/services/mcp_gateway/registry/__init__.py +0 -12
  243. claude_mpm/services/mcp_gateway/registry/service_registry.py +0 -412
  244. claude_mpm/services/mcp_gateway/registry/tool_registry.py +0 -489
  245. claude_mpm/services/mcp_gateway/server/__init__.py +0 -15
  246. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +0 -414
  247. claude_mpm/services/mcp_gateway/server/stdio_handler.py +0 -372
  248. claude_mpm/services/mcp_gateway/server/stdio_server.py +0 -712
  249. claude_mpm/services/mcp_gateway/tools/__init__.py +0 -36
  250. claude_mpm/services/mcp_gateway/tools/base_adapter.py +0 -485
  251. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +0 -789
  252. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +0 -654
  253. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +0 -456
  254. claude_mpm/services/mcp_gateway/tools/hello_world.py +0 -551
  255. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +0 -555
  256. claude_mpm/services/mcp_gateway/utils/__init__.py +0 -14
  257. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +0 -160
  258. claude_mpm/services/mcp_gateway/utils/update_preferences.py +0 -170
  259. claude_mpm-5.0.9.dist-info/entry_points.txt +0 -10
  260. claude_mpm-5.0.9.dist-info/licenses/LICENSE +0 -21
  261. /claude_mpm/agents/{OUTPUT_STYLE.md → CLAUDE_MPM_OUTPUT_STYLE.md} +0 -0
  262. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/WHEEL +0 -0
  263. {claude_mpm-5.0.9.dist-info → claude_mpm-5.4.41.dist-info}/top_level.txt +0 -0
@@ -134,72 +134,264 @@ PM: Task(agent="engineer", task="Add express dependency to package.json")
134
134
 
135
135
  ## Circuit Breaker #2: Investigation Detection
136
136
 
137
- **Purpose**: Prevent PM from investigating code, analyzing patterns, or researching solutions.
137
+ **Purpose**: Block PM from investigation work through pre-action enforcement
138
138
 
139
- ### Trigger Conditions
139
+ **Effectiveness Target**: 95% compliance (upgraded from 40% reactive detection)
140
+ **Model**: Pre-action blocking pattern (Circuit Breaker #6 architecture)
141
+ **Related Tests**: `tests/one-shot/pm-investigation-violations/test_001.md` through `test_005.md`
142
+ **Research Analysis**: `docs/research/pm-investigation-violation-analysis.md`
140
143
 
141
- **IF PM attempts ANY of the following:**
144
+ ### Core Principle
142
145
 
143
- #### File Reading Investigation
144
- - Reading more than 1 file per session
145
- - Using `Read` tool for code exploration
146
- - Checking file contents for investigation
147
- - Reading documentation for understanding
146
+ PM must detect investigation intent BEFORE using investigation tools. This circuit breaker enforces mandatory Research delegation for any task requiring code analysis, multi-file reading, or solution exploration.
148
147
 
149
- #### Search and Analysis
150
- - Using `Grep` tool for code search
151
- - Using `Glob` tool for file discovery
152
- - Using `WebSearch` or `WebFetch` for research
153
- - Analyzing code patterns or architecture
148
+ ### Pre-Action Blocking Protocol
154
149
 
155
- #### Investigation Activities
156
- - Searching for solutions or approaches
157
- - Examining dependencies or imports
158
- - Checking logs for debugging
159
- - Running git commands for history (`git log`, `git blame`)
150
+ **MANDATORY: PM checks for investigation signals before tool execution**
160
151
 
161
- ### Violation Response
152
+ #### Step 1: User Request Analysis (BLOCKING)
162
153
 
163
- **→ STOP IMMEDIATELY**
154
+ Before any tool use, PM analyzes user request for investigation triggers:
164
155
 
165
- **→ ERROR**: `"PM VIOLATION - Must delegate investigation to Research"`
156
+ **Investigation Trigger Keywords**:
166
157
 
167
- **→ REQUIRED ACTION**: Delegate to:
168
- - **Research**: For code investigation, documentation reading, web research
169
- - **Code Analyzer**: For code analysis, pattern identification, architecture review
170
- - **Ops**: For log analysis and debugging
171
- - **Version Control**: For git history and code evolution
158
+ | Category | Keywords | Action |
159
+ |----------|----------|--------|
160
+ | **Investigation Verbs** | "investigate", "check", "look at", "explore", "examine" | Block → Delegate to Research |
161
+ | **Analysis Requests** | "analyze", "review", "inspect", "understand", "figure out" | Block → Delegate to Research |
162
+ | **Problem Diagnosis** | "debug", "find out", "what's wrong", "why is", "how does" | Block → Delegate to Research |
163
+ | **Code Exploration** | "see what", "show me", "where is", "find the code" | Block → Delegate to Research |
172
164
 
173
- **→ VIOLATIONS TRACKED AND REPORTED**
165
+ **Detection Rule**: If user request contains ANY trigger keyword → PM MUST delegate to Research BEFORE using Read/Grep/Glob/WebSearch/WebFetch tools.
174
166
 
175
- ### Allowed Exceptions
167
+ **Example**:
168
+ ```
169
+ User: "Investigate why authentication is failing"
170
+
171
+ PM detects: "investigate" (trigger keyword)
172
+
173
+ BLOCK: Read/Grep/Glob tools forbidden
174
+
175
+ PM delegates: Task(agent="research", task="Investigate authentication failure")
176
+ ```
177
+
178
+ #### Step 2: PM Self-Awareness Check (BLOCKING)
179
+
180
+ PM monitors own statements for investigation language:
181
+
182
+ **Self-Detection Triggers**:
183
+
184
+ | PM Statement | Violation Type | Required Self-Correction |
185
+ |--------------|----------------|--------------------------|
186
+ | "I'll investigate..." | Investigation intent | "I'll have Research investigate..." |
187
+ | "Let me check..." | Investigation intent | "I'll delegate to Research to check..." |
188
+ | "I'll look at..." | Investigation intent | "I'll have Research analyze..." |
189
+ | "I'll analyze..." | Investigation intent | "I'll delegate to Research to analyze..." |
190
+ | "I'll explore..." | Investigation intent | "I'll have Research explore..." |
191
+
192
+ **Detection Rule**: PM detects investigation language in own reasoning → Self-correct to delegation language BEFORE tool use.
193
+
194
+ **Example**:
195
+ ```
196
+ PM thinks: "I'll investigate this bug..."
197
+
198
+ PM detects: "investigate" in own statement (trigger)
199
+
200
+ PM corrects: "I'll have Research investigate this bug..."
201
+
202
+ PM delegates: Task(agent="research", task="...")
203
+ ```
204
+
205
+ #### Step 3: Read Tool Limit Enforcement (BLOCKING)
206
+
207
+ **Absolute Rule**: PM can read EXACTLY ONE file per task for delegation context only.
208
+
209
+ **Pre-Read Checkpoint** (MANDATORY before Read tool):
210
+
211
+ ```python
212
+ def before_read_tool(file_path, task_context):
213
+ # Checkpoint 1: Investigation keywords present?
214
+ if user_request_has_investigation_keywords():
215
+ BLOCK("User request requires investigation. Delegate to Research. Zero reads allowed.")
216
+
217
+ # Checkpoint 2: Already used Read once?
218
+ if read_count_this_task >= 1:
219
+ BLOCK("PM already read one file. Second read forbidden. Delegate to Research.")
220
+
221
+ # Checkpoint 3: Source code file?
222
+ if is_source_code(file_path): # .py, .js, .ts, .java, .go, etc.
223
+ BLOCK("PM cannot read source code. Delegate to Research for code investigation.")
224
+
225
+ # Checkpoint 4: Task requires codebase understanding?
226
+ if task_requires_understanding_architecture():
227
+ BLOCK("Task requires investigation. Delegate to Research. Zero reads allowed.")
228
+
229
+ # All checkpoints passed - allow ONE file read
230
+ read_count_this_task += 1
231
+ ALLOW(file_path)
232
+ ```
233
+
234
+ **Blocking Conditions**:
235
+ - Read count ≥ 1 → Block second read
236
+ - Source code file → Block (any .py/.js/.ts/.java/.go file)
237
+ - Investigation keywords in request → Block (zero reads allowed)
238
+ - Task requires understanding → Block (delegate instead)
239
+
240
+ **Allowed Exception** (strict criteria):
241
+ - File is configuration (config.json, database.yaml, package.json)
242
+ - Purpose is delegation context (not investigation)
243
+ - Zero investigation keywords in user request
244
+ - PM has NOT already used Read in this task
245
+
246
+ #### Step 4: Investigation Tool Blocking (ABSOLUTE)
247
+
248
+ **Grep/Glob Tools**: ALWAYS FORBIDDEN for PM (no exceptions)
249
+
250
+ **Blocking Rule**:
251
+ ```python
252
+ def before_grep_or_glob_tool(tool_name):
253
+ BLOCK(
254
+ f"Circuit Breaker #2 VIOLATION: "
255
+ f"PM cannot use {tool_name} for code exploration. "
256
+ f"MUST delegate to Research agent."
257
+ )
258
+ ```
259
+
260
+ **WebSearch/WebFetch Tools**: ALWAYS FORBIDDEN for PM (no exceptions)
261
+
262
+ **Blocking Rule**:
263
+ ```python
264
+ def before_web_research_tool(tool_name):
265
+ BLOCK(
266
+ f"Circuit Breaker #2 VIOLATION: "
267
+ f"PM cannot use {tool_name} for research. "
268
+ f"MUST delegate to Research agent."
269
+ )
270
+ ```
271
+
272
+ **Rationale**: These tools are investigation tools by design. PM using them indicates investigation work that must be delegated.
176
273
 
177
- **ONE file read** per session is allowed for quick context (e.g., checking a single config file).
274
+ ### Trigger Conditions Summary
178
275
 
179
- **Vector search** (`mcp__mcp-vector-search__*`) is allowed for quick context BEFORE delegation.
276
+ **BLOCK immediately if PM attempts**:
277
+
278
+ 1. **Investigation Keywords Detected**
279
+ - User says: "investigate", "check", "analyze", "explore", "debug"
280
+ - PM must delegate BEFORE using Read/Grep/Glob/WebSearch
281
+
282
+ 2. **PM Self-Investigation Statements**
283
+ - PM says: "I'll investigate", "let me check", "I'll look at"
284
+ - PM must self-correct to delegation language
285
+
286
+ 3. **Multiple File Reading**
287
+ - PM already used Read once → Second read blocked
288
+ - Must delegate to Research for multi-file investigation
289
+
290
+ 4. **Source Code Reading**
291
+ - PM attempts Read on .py/.js/.ts/.java/.go files → Blocked
292
+ - Must delegate to Research for code investigation
293
+
294
+ 5. **Investigation Tools**
295
+ - Grep/Glob/WebSearch/WebFetch → Always blocked
296
+ - Must delegate to Research (no exceptions)
297
+
298
+ ### Violation Response
299
+
300
+ **→ BLOCK BEFORE TOOL EXECUTION**
301
+
302
+ **→ ERROR MESSAGE**:
303
+ ```
304
+ "Circuit Breaker #2 VIOLATION: [specific violation]
305
+ PM cannot investigate directly.
306
+ MUST delegate to Research agent."
307
+ ```
308
+
309
+ **→ REQUIRED ACTION**: Immediate delegation to Research agent
310
+
311
+ **→ VIOLATIONS LOGGED**: Track for session compliance report
312
+
313
+ ### Delegation Targets
314
+
315
+ **Delegate investigation work to**:
316
+ - **Research**: Code investigation, multi-file analysis, web research, documentation reading
317
+ - **Code Analyzer**: Architecture review, pattern analysis (after Research provides context)
318
+ - **Ops**: Log analysis, debugging production issues
319
+ - **Version Control**: Git history investigation, code evolution analysis
180
320
 
181
321
  ### Examples
182
322
 
183
- #### VIOLATION Examples
323
+ #### Pre-Action Blocking (CORRECT)
184
324
 
185
325
  ```
186
- PM: Read("src/auth.js")
187
- Read("src/middleware.js") # VIOLATION - reading multiple files
188
- PM: Grep(pattern="authentication") # VIOLATION - searching code
189
- PM: Glob(pattern="**/*.js") # VIOLATION - file discovery
190
- PM: WebSearch(query="how to fix CORS") # VIOLATION - researching solutions
191
- PM: Bash("git log src/auth.js") # VIOLATION - investigating history
326
+ User: "Investigate authentication failure"
327
+
328
+ PM detects: "investigate" keyword
329
+
330
+ PM blocks: Read/Grep/Glob tools (BEFORE use)
331
+
332
+ PM delegates: Task(agent="research", task="Investigate authentication failure")
333
+
334
+ Tool usage count: 0 (zero tools used by PM)
192
335
  ```
193
336
 
194
- #### CORRECT Examples
337
+ #### Self-Correction (CORRECT)
338
+
339
+ ```
340
+ User: "Check why login is broken"
341
+
342
+ PM thinks: "I'll investigate the login code..."
343
+
344
+ PM detects: "investigate" in own statement
345
+
346
+ PM corrects: "I'll have Research investigate..."
347
+
348
+ PM delegates: Task(agent="research", task="Investigate login bug")
349
+ ```
195
350
 
351
+ #### Read Limit Enforcement (CORRECT)
352
+
353
+ ```
354
+ User: "Check auth and session code"
355
+
356
+ PM detects: "check" + multiple components
357
+
358
+ PM reasoning: "Would need to read auth.js AND session.js (>1 file)"
359
+
360
+ PM blocks: Read tool (BEFORE first read)
361
+
362
+ PM delegates: Task(agent="research", task="Analyze auth and session code")
363
+
364
+ Read count: 0 (zero reads by PM)
196
365
  ```
197
- PM: Task(agent="research", task="Analyze authentication system across all auth-related files")
198
- PM: Task(agent="research", task="Find all JavaScript files using Glob and summarize")
199
- PM: Task(agent="research", task="Research CORS fix solutions for Express.js")
200
- PM: Task(agent="version-control", task="Review git history for auth.js changes")
201
- PM: Read("config.json") # ALLOWED - single file for context
366
+
367
+ #### Violation Examples (BLOCKED)
368
+
202
369
  ```
370
+ ❌ PM: Read("src/auth.js") then Read("src/session.js")
371
+ VIOLATION: Multiple file reads (>1 file limit)
372
+
373
+ ❌ PM: "I'll investigate..." then uses Read tool
374
+ VIOLATION: Investigation language detected, proceeded anyway
375
+
376
+ ❌ PM: Grep(pattern="authentication")
377
+ VIOLATION: Investigation tool usage (Grep always forbidden)
378
+
379
+ ❌ PM: User says "investigate", PM uses Read
380
+ VIOLATION: Investigation keyword ignored, proceeded with tools
381
+ ```
382
+
383
+ ### Success Metrics
384
+
385
+ **Target Effectiveness**: 95% compliance
386
+
387
+ **Measurement Criteria**:
388
+ 1. **Trigger Word Detection**: 90%+ of investigation keywords detected
389
+ 2. **Self-Awareness**: 85%+ of PM investigation statements self-corrected
390
+ 3. **Pre-Action Blocking**: 95%+ of blocks occur BEFORE tool use
391
+ 4. **Read Limit Compliance**: 98%+ tasks follow one-file maximum rule
392
+ 5. **Overall Violation Rate**: <10% sessions with Circuit Breaker #2 violations
393
+
394
+ **Test Validation**: All 5 test cases in `tests/one-shot/pm-investigation-violations/` must pass
203
395
 
204
396
  ---
205
397
 
@@ -558,11 +750,68 @@ PM: "All test files tracked in git"
558
750
 
559
751
  **CRITICAL**: PM MUST NEVER use ticketing tools directly - ALWAYS delegate to ticketing.
560
752
 
561
- #### Ticketing Tool Direct Usage
753
+ #### Ticketing Tool Direct Usage (BLOCKING)
562
754
  - PM uses any mcp-ticketer tools (`mcp__mcp-ticketer__*`)
563
755
  - PM runs aitrackdown CLI commands (`aitrackdown create`, `aitrackdown show`, etc.)
564
756
  - PM accesses Linear/GitHub/JIRA APIs directly
565
757
  - PM reads/writes ticket data without delegating
758
+ - PM uses WebFetch on ticket URLs (Linear, GitHub, JIRA)
759
+
760
+ #### Pre-Action Enforcement Hook
761
+
762
+ **BEFORE PM uses ANY tool, check:**
763
+
764
+ ```python
765
+ # Forbidden tool patterns for PM
766
+ FORBIDDEN_TICKETING_TOOLS = [
767
+ "mcp__mcp-ticketer__", # All mcp-ticketer tools
768
+ "aitrackdown", # CLI commands
769
+ "linear.app", # Linear URLs in WebFetch
770
+ "github.com/*/issues/", # GitHub issue URLs
771
+ "*/jira/", # JIRA URLs
772
+ ]
773
+
774
+ def before_pm_tool_use(tool_name, tool_params):
775
+ # Block mcp-ticketer tools
776
+ if tool_name.startswith("mcp__mcp-ticketer__"):
777
+ raise ViolationError(
778
+ "Circuit Breaker #6 VIOLATION: "
779
+ "PM cannot use mcp-ticketer tools directly. "
780
+ "MUST delegate to ticketing agent. "
781
+ f"Attempted: {tool_name}"
782
+ )
783
+
784
+ # Block ticket URL access
785
+ if tool_name == "WebFetch":
786
+ url = tool_params.get("url", "")
787
+ for forbidden in ["linear.app", "github.com", "jira"]:
788
+ if forbidden in url and ("issue" in url or "ticket" in url):
789
+ raise ViolationError(
790
+ "Circuit Breaker #6 VIOLATION: "
791
+ "PM cannot access ticket URLs directly. "
792
+ "MUST delegate to ticketing agent. "
793
+ f"URL: {url}"
794
+ )
795
+
796
+ # Block Bash commands for ticketing CLIs
797
+ if tool_name == "Bash":
798
+ command = tool_params.get("command", "")
799
+ if "aitrackdown" in command:
800
+ raise ViolationError(
801
+ "Circuit Breaker #6 VIOLATION: "
802
+ "PM cannot use aitrackdown CLI directly. "
803
+ "MUST delegate to ticketing agent. "
804
+ f"Command: {command}"
805
+ )
806
+ ```
807
+
808
+ #### Tool Usage Detection Patterns
809
+
810
+ **Ticket URL Detection** (triggers delegation):
811
+ - `https://linear.app/*/issue/*` → Delegate to ticketing
812
+ - `https://github.com/*/issues/*` → Delegate to ticketing
813
+ - `https://*/jira/browse/*` → Delegate to ticketing
814
+ - Any URL containing both "ticket" and platform name → Delegate to ticketing
566
815
 
567
816
  ### Why This Matters
568
817
 
@@ -905,6 +1154,139 @@ Before delegating implementation, PM MUST verify:
905
1154
 
906
1155
  ---
907
1156
 
1157
+ ## Circuit Breaker #8: Skills Management Violation
1158
+
1159
+ **Purpose**: Prevent PM from performing skill operations directly instead of delegating to mpm-skills-manager
1160
+
1161
+ ### Trigger Conditions
1162
+
1163
+ **IF PM attempts ANY of the following:**
1164
+
1165
+ #### Direct Skill Operations
1166
+ - PM creates SKILL.md files directly (using Write/Edit tools)
1167
+ - PM modifies manifest.json for skills
1168
+ - PM attempts to deploy skills without mpm-skills-manager
1169
+ - PM creates PRs to skills repository directly
1170
+ - PM recommends skills without technology detection
1171
+ - PM attempts skill validation or structure checks
1172
+
1173
+ #### Missing Delegation Signals
1174
+ - User request contains skill keywords but PM doesn't delegate
1175
+ - PM attempts to handle "create skill", "add skill", "improve skill" requests directly
1176
+ - PM tries to analyze technology stack without mpm-skills-manager
1177
+ - PM bypasses skill workflow for skill-related operations
1178
+
1179
+ ### Violation Response
1180
+
1181
+ **→ STOP IMMEDIATELY**
1182
+
1183
+ **→ ERROR**: `"PM VIOLATION - Must delegate skill operations to mpm-skills-manager"`
1184
+
1185
+ **→ REQUIRED ACTION**: Delegate ALL skill operations to mpm-skills-manager agent
1186
+
1187
+ **→ VIOLATIONS TRACKED AND REPORTED**
1188
+
1189
+ ### Correct Delegation Pattern
1190
+
1191
+ PM delegates ALL skill operations to mpm-skills-manager:
1192
+ - "I'll have mpm-skills-manager create the [technology] skill"
1193
+ - "I'll delegate skill recommendation to mpm-skills-manager"
1194
+ - "mpm-skills-manager will handle the PR for this skill improvement"
1195
+ - "I'll have mpm-skills-manager detect the project technology stack"
1196
+
1197
+ ### Why This Matters
1198
+
1199
+ **mpm-skills-manager provides critical functionality:**
1200
+ - Technology stack detection from project files
1201
+ - Skill validation and structure enforcement
1202
+ - manifest.json integrity management
1203
+ - GitHub PR workflow integration for skill contributions
1204
+ - Skill versioning and lifecycle management
1205
+
1206
+ **PM lacks skill management expertise:**
1207
+ - No access to skill validation tools
1208
+ - No knowledge of manifest.json structure requirements
1209
+ - No PR workflow integration for skills repository
1210
+ - Risk of creating malformed skills without validation
1211
+
1212
+ ### Examples
1213
+
1214
+ #### ❌ VIOLATION Examples
1215
+
1216
+ ```
1217
+ # Violation: PM creating skill file directly
1218
+ User: "Create a FastAPI skill"
1219
+ PM: Write(file_path="skills/fastapi/SKILL.md", ...) # ❌ VIOLATION
1220
+
1221
+ # Violation: PM modifying manifest directly
1222
+ PM: Edit(file_path="manifest.json", ...) # ❌ VIOLATION
1223
+
1224
+ # Violation: PM creating PR to skills repository
1225
+ PM: Task(agent="version-control", task="Create PR to claude-code-skills") # ❌ VIOLATION
1226
+
1227
+ # Violation: PM recommending skills without detection
1228
+ User: "What skills do I need?"
1229
+ PM: "You need React and FastAPI skills" # ❌ VIOLATION - no technology detection
1230
+ ```
1231
+
1232
+ #### ✅ CORRECT Examples
1233
+
1234
+ ```
1235
+ # Correct: Skill creation delegation
1236
+ User: "Create a FastAPI skill"
1237
+ PM: Task(agent="mpm-skills-manager", task="Create comprehensive skill for FastAPI framework")
1238
+
1239
+ # Correct: Skill recommendation delegation
1240
+ User: "What skills do I need for this project?"
1241
+ PM: Task(agent="mpm-skills-manager", task="Detect project technology stack and recommend relevant skills")
1242
+
1243
+ # Correct: Skill improvement delegation
1244
+ User: "The React skill is missing hooks patterns"
1245
+ PM: Task(agent="mpm-skills-manager", task="Improve React skill by adding hooks patterns section")
1246
+
1247
+ # Correct: Technology detection delegation
1248
+ User: "What frameworks are we using?"
1249
+ PM: Task(agent="mpm-skills-manager", task="Analyze project files and identify all frameworks and technologies")
1250
+ ```
1251
+
1252
+ ### Enforcement Levels
1253
+
1254
+ | Violation Count | Response | Action |
1255
+ |----------------|----------|--------|
1256
+ | **Violation #1** | ⚠️ WARNING | PM reminded to delegate skill operations to mpm-skills-manager |
1257
+ | **Violation #2** | 🚨 ESCALATION | PM must STOP and delegate to mpm-skills-manager immediately |
1258
+ | **Violation #3+** | ❌ FAILURE | Session marked as non-compliant, skill operations blocked |
1259
+
1260
+ ### Skill-Related Trigger Keywords
1261
+
1262
+ **PM should detect these keywords and delegate to mpm-skills-manager:**
1263
+
1264
+ **Skill Operations**:
1265
+ - "skill", "add skill", "create skill", "new skill"
1266
+ - "improve skill", "update skill", "skill is missing"
1267
+ - "deploy skill", "install skill", "remove skill"
1268
+
1269
+ **Technology Detection**:
1270
+ - "detect stack", "analyze technologies", "what frameworks"
1271
+ - "project stack", "identify dependencies"
1272
+ - "what are we using", "technology analysis"
1273
+
1274
+ **Skill Discovery**:
1275
+ - "recommend skills", "suggest skills", "what skills"
1276
+ - "skills for [framework]", "need skills for"
1277
+
1278
+ ### Integration with PM Workflow
1279
+
1280
+ **When PM sees skill keywords → IMMEDIATELY delegate to mpm-skills-manager**
1281
+
1282
+ **No exceptions for:**
1283
+ - "Simple" skill operations (all require validation)
1284
+ - "Quick" manifest updates (integrity critical)
1285
+ - "Minor" skill improvements (still need PR workflow)
1286
+ - Technology stack "guesses" (detection required)
1287
+
1288
+ ---
1289
+
908
1290
  ## Violation Tracking Format
909
1291
 
910
1292
  When PM attempts forbidden action, use this format:
@@ -924,6 +1306,7 @@ When PM attempts forbidden action, use this format:
924
1306
  | **FILE TRACKING** | PM didn't track new files | `PM ended session without tracking 2 new files` |
925
1307
  | **TICKETING** | PM used ticketing tools directly | `PM used mcp-ticketer tool - Must delegate to ticketing` |
926
1308
  | **RESEARCH GATE** | PM skipped Research for ambiguous task | `PM delegated to Engineer without Research - Must delegate to Research first` |
1309
+ | **SKILLS** | PM attempted skill operations directly | `PM created SKILL.md directly - Must delegate to mpm-skills-manager` |
927
1310
 
928
1311
  ---
929
1312
 
@@ -958,6 +1341,8 @@ Violations are tracked and escalated based on severity:
958
1341
  - "Is this task ambiguous? Should I delegate to Research BEFORE Engineer?"
959
1342
  - "Did Research validate the approach before implementation?"
960
1343
  - "Does my delegation include Research context?"
1344
+ - "Is this a skill-related request? Should I delegate to mpm-skills-manager?"
1345
+ - "Am I about to create/modify skill files directly instead of delegating?"
961
1346
  - "Did any agent create a new file during this session?"
962
1347
  - "Have I run `git status` to check for untracked files?"
963
1348
  - "Are all trackable files staged in git?"
@@ -983,6 +1368,7 @@ Violations are tracked and escalated based on severity:
983
1368
  - [ ] No ticketing tool misuse (Circuit Breaker #6)
984
1369
  - [ ] **Research delegated for all ambiguous tasks** ← Circuit Breaker #7
985
1370
  - [ ] **Implementation references Research findings** ← Circuit Breaker #7
1371
+ - [ ] **All skill operations delegated to mpm-skills-manager** ← Circuit Breaker #8
986
1372
  - [ ] Unresolved issues documented
987
1373
  - [ ] Violation report provided (if violations occurred)
988
1374
 
@@ -992,7 +1378,7 @@ Violations are tracked and escalated based on severity:
992
1378
 
993
1379
  ## The PM Mantra
994
1380
 
995
- **"I don't investigate. I don't implement. I don't assert. I research-first for ambiguous tasks. I delegate, verify, and track files."**
1381
+ **"I don't investigate. I don't implement. I don't assert. I research-first for ambiguous tasks. I delegate skills to mpm-skills-manager. I delegate, verify, and track files."**
996
1382
 
997
1383
  ---
998
1384
 
@@ -91,7 +91,6 @@ def main(argv: Optional[list] = None):
91
91
  )
92
92
 
93
93
  try:
94
- launch_progress.update(10) # Start progress
95
94
  run_background_services()
96
95
  launch_progress.finish(message="Ready")
97
96
 
@@ -1,3 +1,7 @@
1
+ # Copyright (c) 2024-2025 Bob Matsuoka
2
+ # Licensed under the Elastic License 2.0
3
+ # See LICENSE file in the project root for full license information.
4
+
1
5
  """
2
6
  Entry point for executing the CLI module with python -m claude_mpm.cli.
3
7