claude-mpm 4.1.6__py3-none-any.whl → 4.24.0__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 (866) hide show
  1. claude_mpm/BUILD_NUMBER +1 -1
  2. claude_mpm/VERSION +1 -1
  3. claude_mpm/__init__.py +20 -5
  4. claude_mpm/agents/BASE_AGENT_TEMPLATE.md +118 -0
  5. claude_mpm/agents/BASE_DOCUMENTATION.md +53 -0
  6. claude_mpm/agents/BASE_ENGINEER.md +658 -0
  7. claude_mpm/agents/BASE_OPS.md +219 -0
  8. claude_mpm/agents/BASE_PM.md +431 -214
  9. claude_mpm/agents/BASE_PROMPT_ENGINEER.md +787 -0
  10. claude_mpm/agents/BASE_QA.md +167 -0
  11. claude_mpm/agents/BASE_RESEARCH.md +53 -0
  12. claude_mpm/agents/MEMORY.md +3 -0
  13. claude_mpm/agents/OUTPUT_STYLE.md +335 -0
  14. claude_mpm/agents/PM_INSTRUCTIONS.md +1159 -0
  15. claude_mpm/agents/WORKFLOW.md +355 -187
  16. claude_mpm/agents/agent_loader.py +40 -10
  17. claude_mpm/agents/agent_loader_integration.py +3 -2
  18. claude_mpm/agents/agents_metadata.py +57 -0
  19. claude_mpm/agents/async_agent_loader.py +3 -3
  20. claude_mpm/agents/base_agent_loader.py +11 -9
  21. claude_mpm/agents/frontmatter_validator.py +291 -251
  22. claude_mpm/agents/system_agent_config.py +3 -2
  23. claude_mpm/agents/templates/.claude-mpm/memories/README.md +17 -0
  24. claude_mpm/agents/templates/.claude-mpm/memories/engineer_memories.md +3 -0
  25. claude_mpm/agents/templates/README.md +465 -0
  26. claude_mpm/agents/templates/agent-manager.json +267 -18
  27. claude_mpm/agents/templates/agentic-coder-optimizer.json +248 -0
  28. claude_mpm/agents/templates/api_qa.json +16 -4
  29. claude_mpm/agents/templates/circuit_breakers.md +638 -0
  30. claude_mpm/agents/templates/clerk-ops.json +235 -0
  31. claude_mpm/agents/templates/code_analyzer.json +25 -9
  32. claude_mpm/agents/templates/content-agent.json +358 -0
  33. claude_mpm/agents/templates/dart_engineer.json +307 -0
  34. claude_mpm/agents/templates/data_engineer.json +87 -14
  35. claude_mpm/agents/templates/documentation.json +76 -13
  36. claude_mpm/agents/templates/engineer.json +44 -10
  37. claude_mpm/agents/templates/gcp_ops_agent.json +253 -0
  38. claude_mpm/agents/templates/git_file_tracking.md +584 -0
  39. claude_mpm/agents/templates/golang_engineer.json +270 -0
  40. claude_mpm/agents/templates/imagemagick.json +5 -2
  41. claude_mpm/agents/templates/java_engineer.json +346 -0
  42. claude_mpm/agents/templates/javascript_engineer_agent.json +380 -0
  43. claude_mpm/agents/templates/local_ops_agent.json +1840 -0
  44. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250826_014258_728.md +39 -0
  45. claude_mpm/agents/templates/logs/prompts/agent_engineer_20250901_010124_142.md +400 -0
  46. claude_mpm/agents/templates/memory_manager.json +6 -3
  47. claude_mpm/agents/templates/nextjs_engineer.json +285 -0
  48. claude_mpm/agents/templates/ops.json +27 -8
  49. claude_mpm/agents/templates/php-engineer.json +287 -0
  50. claude_mpm/agents/templates/pm_examples.md +474 -0
  51. claude_mpm/agents/templates/pm_red_flags.md +262 -0
  52. claude_mpm/agents/templates/product_owner.json +338 -0
  53. claude_mpm/agents/templates/project_organizer.json +19 -5
  54. claude_mpm/agents/templates/prompt-engineer.json +737 -0
  55. claude_mpm/agents/templates/python_engineer.json +387 -0
  56. claude_mpm/agents/templates/qa.json +26 -6
  57. claude_mpm/agents/templates/react_engineer.json +239 -0
  58. claude_mpm/agents/templates/refactoring_engineer.json +15 -5
  59. claude_mpm/agents/templates/research.json +47 -22
  60. claude_mpm/agents/templates/response_format.md +583 -0
  61. claude_mpm/agents/templates/ruby-engineer.json +280 -0
  62. claude_mpm/agents/templates/rust_engineer.json +275 -0
  63. claude_mpm/agents/templates/security.json +59 -10
  64. claude_mpm/agents/templates/svelte-engineer.json +225 -0
  65. claude_mpm/agents/templates/tauri_engineer.json +274 -0
  66. claude_mpm/agents/templates/ticketing.json +16 -7
  67. claude_mpm/agents/templates/typescript_engineer.json +285 -0
  68. claude_mpm/agents/templates/validation_templates.md +312 -0
  69. claude_mpm/agents/templates/vercel_ops_agent.json +164 -33
  70. claude_mpm/agents/templates/version_control.json +16 -4
  71. claude_mpm/agents/templates/web_qa.json +243 -21
  72. claude_mpm/agents/templates/web_ui.json +18 -5
  73. claude_mpm/cli/__init__.py +38 -363
  74. claude_mpm/cli/commands/__init__.py +8 -0
  75. claude_mpm/cli/commands/agent_manager.py +675 -20
  76. claude_mpm/cli/commands/agent_state_manager.py +186 -0
  77. claude_mpm/cli/commands/agents.py +722 -150
  78. claude_mpm/cli/commands/agents_detect.py +380 -0
  79. claude_mpm/cli/commands/agents_recommend.py +309 -0
  80. claude_mpm/cli/commands/aggregate.py +10 -6
  81. claude_mpm/cli/commands/analyze.py +553 -0
  82. claude_mpm/cli/commands/analyze_code.py +528 -0
  83. claude_mpm/cli/commands/auto_configure.py +570 -0
  84. claude_mpm/cli/commands/cleanup.py +12 -12
  85. claude_mpm/cli/commands/config.py +47 -13
  86. claude_mpm/cli/commands/configure.py +488 -884
  87. claude_mpm/cli/commands/configure_agent_display.py +261 -0
  88. claude_mpm/cli/commands/configure_behavior_manager.py +204 -0
  89. claude_mpm/cli/commands/configure_hook_manager.py +225 -0
  90. claude_mpm/cli/commands/configure_models.py +18 -0
  91. claude_mpm/cli/commands/configure_navigation.py +167 -0
  92. claude_mpm/cli/commands/configure_paths.py +104 -0
  93. claude_mpm/cli/commands/configure_persistence.py +254 -0
  94. claude_mpm/cli/commands/configure_startup_manager.py +646 -0
  95. claude_mpm/cli/commands/configure_template_editor.py +497 -0
  96. claude_mpm/cli/commands/configure_validators.py +73 -0
  97. claude_mpm/cli/commands/dashboard.py +286 -0
  98. claude_mpm/cli/commands/debug.py +1386 -0
  99. claude_mpm/cli/commands/doctor.py +43 -7
  100. claude_mpm/cli/commands/info.py +3 -4
  101. claude_mpm/cli/commands/local_deploy.py +537 -0
  102. claude_mpm/cli/commands/mcp.py +17 -10
  103. claude_mpm/cli/commands/mcp_command_router.py +11 -0
  104. claude_mpm/cli/commands/mcp_config.py +154 -0
  105. claude_mpm/cli/commands/mcp_external_commands.py +249 -0
  106. claude_mpm/cli/commands/mcp_install_commands.py +101 -32
  107. claude_mpm/cli/commands/mcp_pipx_config.py +2 -2
  108. claude_mpm/cli/commands/mcp_setup_external.py +868 -0
  109. claude_mpm/cli/commands/memory.py +55 -21
  110. claude_mpm/cli/commands/monitor.py +168 -617
  111. claude_mpm/cli/commands/mpm_init/__init__.py +73 -0
  112. claude_mpm/cli/commands/mpm_init/core.py +525 -0
  113. claude_mpm/cli/commands/mpm_init/display.py +341 -0
  114. claude_mpm/cli/commands/mpm_init/git_activity.py +427 -0
  115. claude_mpm/cli/commands/mpm_init/modes.py +397 -0
  116. claude_mpm/cli/commands/mpm_init/prompts.py +442 -0
  117. claude_mpm/cli/commands/mpm_init_cli.py +396 -0
  118. claude_mpm/cli/commands/mpm_init_handler.py +195 -0
  119. claude_mpm/cli/commands/run.py +169 -42
  120. claude_mpm/cli/commands/search.py +458 -0
  121. claude_mpm/cli/commands/skills.py +488 -0
  122. claude_mpm/cli/commands/uninstall.py +176 -0
  123. claude_mpm/cli/commands/upgrade.py +152 -0
  124. claude_mpm/cli/commands/verify.py +119 -0
  125. claude_mpm/cli/executor.py +204 -0
  126. claude_mpm/cli/helpers.py +105 -0
  127. claude_mpm/cli/interactive/__init__.py +21 -0
  128. claude_mpm/cli/interactive/agent_wizard.py +962 -0
  129. claude_mpm/cli/interactive/skills_wizard.py +491 -0
  130. claude_mpm/cli/parser.py +79 -2
  131. claude_mpm/cli/parsers/__init__.py +7 -1
  132. claude_mpm/cli/parsers/agent_manager_parser.py +161 -1
  133. claude_mpm/cli/parsers/agents_parser.py +116 -0
  134. claude_mpm/cli/parsers/analyze_code_parser.py +170 -0
  135. claude_mpm/cli/parsers/analyze_parser.py +135 -0
  136. claude_mpm/cli/parsers/auto_configure_parser.py +245 -0
  137. claude_mpm/cli/parsers/base_parser.py +187 -3
  138. claude_mpm/cli/parsers/configure_parser.py +34 -15
  139. claude_mpm/cli/parsers/dashboard_parser.py +113 -0
  140. claude_mpm/cli/parsers/debug_parser.py +319 -0
  141. claude_mpm/cli/parsers/local_deploy_parser.py +227 -0
  142. claude_mpm/cli/parsers/mcp_parser.py +15 -0
  143. claude_mpm/cli/parsers/monitor_parser.py +12 -2
  144. claude_mpm/cli/parsers/mpm_init_parser.py +311 -0
  145. claude_mpm/cli/parsers/run_parser.py +5 -0
  146. claude_mpm/cli/parsers/search_parser.py +245 -0
  147. claude_mpm/cli/parsers/skills_parser.py +137 -0
  148. claude_mpm/cli/shared/argument_patterns.py +20 -13
  149. claude_mpm/cli/shared/base_command.py +2 -2
  150. claude_mpm/cli/shared/output_formatters.py +28 -19
  151. claude_mpm/cli/startup.py +562 -0
  152. claude_mpm/cli/startup_logging.py +179 -13
  153. claude_mpm/cli/utils.py +53 -2
  154. claude_mpm/commands/__init__.py +14 -0
  155. claude_mpm/commands/mpm-agents-detect.md +168 -0
  156. claude_mpm/commands/mpm-agents-recommend.md +214 -0
  157. claude_mpm/commands/mpm-agents.md +122 -0
  158. claude_mpm/commands/mpm-auto-configure.md +269 -0
  159. claude_mpm/commands/mpm-config.md +141 -0
  160. claude_mpm/commands/mpm-doctor.md +24 -0
  161. claude_mpm/commands/mpm-help.md +290 -0
  162. claude_mpm/commands/mpm-init.md +521 -0
  163. claude_mpm/commands/mpm-monitor.md +409 -0
  164. claude_mpm/commands/mpm-organize.md +295 -0
  165. claude_mpm/commands/mpm-resume.md +372 -0
  166. claude_mpm/commands/mpm-status.md +75 -0
  167. claude_mpm/commands/mpm-tickets.md +151 -0
  168. claude_mpm/commands/mpm-version.md +113 -0
  169. claude_mpm/commands/mpm.md +21 -0
  170. claude_mpm/config/agent_config.py +4 -4
  171. claude_mpm/config/experimental_features.py +7 -7
  172. claude_mpm/config/model_config.py +428 -0
  173. claude_mpm/config/paths.py +3 -2
  174. claude_mpm/config/socketio_config.py +36 -7
  175. claude_mpm/constants.py +27 -1
  176. claude_mpm/core/__init__.py +53 -17
  177. claude_mpm/core/agent_name_normalizer.py +3 -2
  178. claude_mpm/core/agent_registry.py +2 -2
  179. claude_mpm/core/agent_session_manager.py +10 -10
  180. claude_mpm/core/api_validator.py +330 -0
  181. claude_mpm/core/base_service.py +33 -23
  182. claude_mpm/core/cache.py +9 -9
  183. claude_mpm/core/claude_runner.py +19 -8
  184. claude_mpm/core/config.py +103 -8
  185. claude_mpm/core/config_aliases.py +7 -6
  186. claude_mpm/core/constants.py +65 -0
  187. claude_mpm/core/container.py +11 -5
  188. claude_mpm/core/enums.py +452 -0
  189. claude_mpm/core/error_handler.py +623 -0
  190. claude_mpm/core/factories.py +1 -1
  191. claude_mpm/core/file_utils.py +764 -0
  192. claude_mpm/core/framework/__init__.py +38 -0
  193. claude_mpm/core/framework/formatters/__init__.py +11 -0
  194. claude_mpm/core/framework/formatters/capability_generator.py +367 -0
  195. claude_mpm/core/framework/formatters/content_formatter.py +288 -0
  196. claude_mpm/core/framework/formatters/context_generator.py +185 -0
  197. claude_mpm/core/framework/loaders/__init__.py +13 -0
  198. claude_mpm/core/framework/loaders/agent_loader.py +210 -0
  199. claude_mpm/core/framework/loaders/file_loader.py +223 -0
  200. claude_mpm/core/framework/loaders/instruction_loader.py +161 -0
  201. claude_mpm/core/framework/loaders/packaged_loader.py +232 -0
  202. claude_mpm/core/framework/processors/__init__.py +11 -0
  203. claude_mpm/core/framework/processors/memory_processor.py +230 -0
  204. claude_mpm/core/framework/processors/metadata_processor.py +146 -0
  205. claude_mpm/core/framework/processors/template_processor.py +244 -0
  206. claude_mpm/core/framework_loader.py +323 -1491
  207. claude_mpm/core/hook_manager.py +8 -6
  208. claude_mpm/core/injectable_service.py +11 -8
  209. claude_mpm/core/instruction_reinforcement_hook.py +267 -0
  210. claude_mpm/core/interactive_session.py +55 -8
  211. claude_mpm/core/interfaces.py +56 -1
  212. claude_mpm/core/lazy.py +3 -3
  213. claude_mpm/core/log_manager.py +100 -28
  214. claude_mpm/core/logger.py +19 -14
  215. claude_mpm/core/logging_config.py +6 -2
  216. claude_mpm/core/logging_utils.py +520 -0
  217. claude_mpm/core/oneshot_session.py +51 -7
  218. claude_mpm/core/optimized_agent_loader.py +9 -9
  219. claude_mpm/core/optimized_startup.py +1 -1
  220. claude_mpm/core/output_style_manager.py +12 -192
  221. claude_mpm/core/pm_hook_interceptor.py +118 -15
  222. claude_mpm/core/service_registry.py +7 -3
  223. claude_mpm/core/session_manager.py +14 -12
  224. claude_mpm/core/shared/config_loader.py +1 -1
  225. claude_mpm/core/socketio_pool.py +15 -15
  226. claude_mpm/core/tool_access_control.py +3 -2
  227. claude_mpm/core/types.py +4 -11
  228. claude_mpm/core/typing_utils.py +7 -6
  229. claude_mpm/core/unified_agent_registry.py +116 -12
  230. claude_mpm/core/unified_config.py +6 -6
  231. claude_mpm/core/unified_paths.py +23 -20
  232. claude_mpm/dashboard/.claude-mpm/socketio-instances.json +1 -0
  233. claude_mpm/dashboard/__init__.py +12 -0
  234. claude_mpm/dashboard/analysis_runner.py +455 -0
  235. claude_mpm/dashboard/api/simple_directory.py +261 -0
  236. claude_mpm/dashboard/react/components/DataInspector/DataInspector.module.css +188 -0
  237. claude_mpm/dashboard/react/components/EventViewer/EventViewer.module.css +156 -0
  238. claude_mpm/dashboard/react/components/shared/ConnectionStatus.module.css +38 -0
  239. claude_mpm/dashboard/react/components/shared/FilterBar.module.css +92 -0
  240. claude_mpm/dashboard/static/archive/activity_dashboard_fixed.html +248 -0
  241. claude_mpm/dashboard/static/archive/activity_dashboard_test.html +61 -0
  242. claude_mpm/dashboard/static/archive/test_activity_connection.html +179 -0
  243. claude_mpm/dashboard/static/archive/test_claude_tree_tab.html +68 -0
  244. claude_mpm/dashboard/static/archive/test_dashboard.html +409 -0
  245. claude_mpm/dashboard/static/archive/test_dashboard_fixed.html +519 -0
  246. claude_mpm/dashboard/static/archive/test_dashboard_verification.html +181 -0
  247. claude_mpm/dashboard/static/archive/test_file_data.html +315 -0
  248. claude_mpm/dashboard/static/archive/test_file_tree_empty_state.html +243 -0
  249. claude_mpm/dashboard/static/archive/test_file_tree_fix.html +234 -0
  250. claude_mpm/dashboard/static/archive/test_file_tree_rename.html +117 -0
  251. claude_mpm/dashboard/static/archive/test_file_tree_tab.html +115 -0
  252. claude_mpm/dashboard/static/archive/test_file_viewer.html +224 -0
  253. claude_mpm/dashboard/static/archive/test_final_activity.html +220 -0
  254. claude_mpm/dashboard/static/archive/test_tab_fix.html +139 -0
  255. claude_mpm/dashboard/static/built/assets/events.DjpNxWNo.css +1 -0
  256. claude_mpm/dashboard/static/built/components/activity-tree.js +2 -0
  257. claude_mpm/dashboard/static/built/components/agent-hierarchy.js +777 -0
  258. claude_mpm/dashboard/static/built/components/agent-inference.js +1 -1
  259. claude_mpm/dashboard/static/built/components/build-tracker.js +333 -0
  260. claude_mpm/dashboard/static/built/components/code-simple.js +857 -0
  261. claude_mpm/dashboard/static/built/components/code-tree/tree-breadcrumb.js +353 -0
  262. claude_mpm/dashboard/static/built/components/code-tree/tree-constants.js +235 -0
  263. claude_mpm/dashboard/static/built/components/code-tree/tree-search.js +409 -0
  264. claude_mpm/dashboard/static/built/components/code-tree/tree-utils.js +435 -0
  265. claude_mpm/dashboard/static/built/components/code-tree.js +2 -0
  266. claude_mpm/dashboard/static/built/components/code-viewer.js +2 -0
  267. claude_mpm/dashboard/static/built/components/connection-debug.js +654 -0
  268. claude_mpm/dashboard/static/built/components/diff-viewer.js +891 -0
  269. claude_mpm/dashboard/static/built/components/event-processor.js +1 -1
  270. claude_mpm/dashboard/static/built/components/event-viewer.js +1 -1
  271. claude_mpm/dashboard/static/built/components/export-manager.js +1 -1
  272. claude_mpm/dashboard/static/built/components/file-change-tracker.js +443 -0
  273. claude_mpm/dashboard/static/built/components/file-change-viewer.js +690 -0
  274. claude_mpm/dashboard/static/built/components/file-tool-tracker.js +1 -1
  275. claude_mpm/dashboard/static/built/components/file-viewer.js +2 -0
  276. claude_mpm/dashboard/static/built/components/module-viewer.js +1 -1
  277. claude_mpm/dashboard/static/built/components/nav-bar.js +145 -0
  278. claude_mpm/dashboard/static/built/components/page-structure.js +429 -0
  279. claude_mpm/dashboard/static/built/components/session-manager.js +1 -1
  280. claude_mpm/dashboard/static/built/components/unified-data-viewer.js +2 -0
  281. claude_mpm/dashboard/static/built/components/working-directory.js +1 -1
  282. claude_mpm/dashboard/static/built/connection-manager.js +536 -0
  283. claude_mpm/dashboard/static/built/dashboard.js +1 -1
  284. claude_mpm/dashboard/static/built/extension-error-handler.js +164 -0
  285. claude_mpm/dashboard/static/built/react/events.js +30 -0
  286. claude_mpm/dashboard/static/built/shared/dom-helpers.js +396 -0
  287. claude_mpm/dashboard/static/built/shared/event-bus.js +330 -0
  288. claude_mpm/dashboard/static/built/shared/event-filter-service.js +540 -0
  289. claude_mpm/dashboard/static/built/shared/logger.js +385 -0
  290. claude_mpm/dashboard/static/built/shared/page-structure.js +249 -0
  291. claude_mpm/dashboard/static/built/shared/tooltip-service.js +253 -0
  292. claude_mpm/dashboard/static/built/socket-client.js +1 -1
  293. claude_mpm/dashboard/static/built/tab-isolation-fix.js +185 -0
  294. claude_mpm/dashboard/static/css/activity.css +1958 -0
  295. claude_mpm/dashboard/static/css/dashboard.css +1413 -72
  296. claude_mpm/dashboard/static/dist/assets/events.DjpNxWNo.css +1 -0
  297. claude_mpm/dashboard/static/dist/components/activity-tree.js +2 -0
  298. claude_mpm/dashboard/static/dist/components/agent-inference.js +1 -1
  299. claude_mpm/dashboard/static/dist/components/code-tree.js +2 -0
  300. claude_mpm/dashboard/static/dist/components/code-viewer.js +2 -0
  301. claude_mpm/dashboard/static/dist/components/event-processor.js +1 -1
  302. claude_mpm/dashboard/static/dist/components/event-viewer.js +1 -1
  303. claude_mpm/dashboard/static/dist/components/export-manager.js +1 -1
  304. claude_mpm/dashboard/static/dist/components/file-tool-tracker.js +1 -1
  305. claude_mpm/dashboard/static/dist/components/file-viewer.js +2 -0
  306. claude_mpm/dashboard/static/dist/components/module-viewer.js +1 -1
  307. claude_mpm/dashboard/static/dist/components/session-manager.js +1 -1
  308. claude_mpm/dashboard/static/dist/components/unified-data-viewer.js +2 -0
  309. claude_mpm/dashboard/static/dist/components/working-directory.js +1 -1
  310. claude_mpm/dashboard/static/dist/dashboard.js +1 -1
  311. claude_mpm/dashboard/static/dist/react/events.js +30 -0
  312. claude_mpm/dashboard/static/dist/socket-client.js +1 -1
  313. claude_mpm/dashboard/static/events.html +607 -0
  314. claude_mpm/dashboard/static/index.html +635 -0
  315. claude_mpm/dashboard/static/js/components/activity-tree.js +1871 -0
  316. claude_mpm/dashboard/static/js/components/agent-hierarchy.js +4 -1
  317. claude_mpm/dashboard/static/js/components/agent-inference.js +3 -0
  318. claude_mpm/dashboard/static/js/components/build-tracker.js +23 -13
  319. claude_mpm/dashboard/static/js/components/code-simple.js +857 -0
  320. claude_mpm/dashboard/static/js/components/diff-viewer.js +891 -0
  321. claude_mpm/dashboard/static/js/components/event-processor.js +3 -107
  322. claude_mpm/dashboard/static/js/components/event-viewer.js +98 -11
  323. claude_mpm/dashboard/static/js/components/export-manager.js +3 -0
  324. claude_mpm/dashboard/static/js/components/file-change-tracker.js +443 -0
  325. claude_mpm/dashboard/static/js/components/file-change-viewer.js +690 -0
  326. claude_mpm/dashboard/static/js/components/file-tool-tracker.js +30 -10
  327. claude_mpm/dashboard/static/js/components/file-viewer.js +580 -0
  328. claude_mpm/dashboard/static/js/components/module-viewer.js +68 -205
  329. claude_mpm/dashboard/static/js/components/session-manager.js +46 -10
  330. claude_mpm/dashboard/static/js/components/socket-manager.js +16 -0
  331. claude_mpm/dashboard/static/js/components/ui-state-manager.js +359 -40
  332. claude_mpm/dashboard/static/js/components/unified-data-viewer.js +1824 -0
  333. claude_mpm/dashboard/static/js/components/working-directory.js +61 -10
  334. claude_mpm/dashboard/static/js/connection-manager.js +1 -1
  335. claude_mpm/dashboard/static/js/dashboard.js +523 -622
  336. claude_mpm/dashboard/static/js/shared/dom-helpers.js +396 -0
  337. claude_mpm/dashboard/static/js/shared/event-bus.js +330 -0
  338. claude_mpm/dashboard/static/js/shared/logger.js +385 -0
  339. claude_mpm/dashboard/static/js/shared/tooltip-service.js +253 -0
  340. claude_mpm/dashboard/static/js/socket-client.js +549 -62
  341. claude_mpm/dashboard/static/js/stores/dashboard-store.js +562 -0
  342. claude_mpm/dashboard/static/js/tab-isolation-fix.js +185 -0
  343. claude_mpm/dashboard/static/legacy/activity.html +736 -0
  344. claude_mpm/dashboard/static/legacy/agents.html +786 -0
  345. claude_mpm/dashboard/static/legacy/files.html +747 -0
  346. claude_mpm/dashboard/static/legacy/tools.html +831 -0
  347. claude_mpm/dashboard/static/monitors.html +431 -0
  348. claude_mpm/dashboard/static/production/events.html +659 -0
  349. claude_mpm/dashboard/static/production/main.html +698 -0
  350. claude_mpm/dashboard/static/production/monitors.html +483 -0
  351. claude_mpm/dashboard/static/socket.io.min.js +7 -0
  352. claude_mpm/dashboard/static/socket.io.v4.8.1.backup.js +7 -0
  353. claude_mpm/dashboard/static/test-archive/dashboard.html +635 -0
  354. claude_mpm/dashboard/static/test-archive/debug-events.html +147 -0
  355. claude_mpm/dashboard/static/test-archive/test-navigation.html +256 -0
  356. claude_mpm/dashboard/static/test-archive/test-react-exports.html +180 -0
  357. claude_mpm/dashboard/static/test-archive/test_debug.html +25 -0
  358. claude_mpm/dashboard/templates/code_simple.html +153 -0
  359. claude_mpm/dashboard/templates/index.html +267 -9
  360. claude_mpm/experimental/__init__.py +10 -0
  361. claude_mpm/experimental/cli_enhancements.py +4 -2
  362. claude_mpm/generators/agent_profile_generator.py +5 -3
  363. claude_mpm/hooks/__init__.py +37 -1
  364. claude_mpm/hooks/base_hook.py +5 -4
  365. claude_mpm/hooks/claude_hooks/connection_pool.py +4 -4
  366. claude_mpm/hooks/claude_hooks/event_handlers.py +21 -18
  367. claude_mpm/hooks/claude_hooks/hook_handler.py +209 -25
  368. claude_mpm/hooks/claude_hooks/installer.py +783 -0
  369. claude_mpm/hooks/claude_hooks/memory_integration.py +3 -3
  370. claude_mpm/hooks/claude_hooks/response_tracking.py +57 -17
  371. claude_mpm/hooks/claude_hooks/services/connection_manager.py +64 -49
  372. claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +140 -76
  373. claude_mpm/hooks/claude_hooks/services/state_manager.py +11 -9
  374. claude_mpm/hooks/claude_hooks/services/subagent_processor.py +3 -3
  375. claude_mpm/hooks/failure_learning/__init__.py +60 -0
  376. claude_mpm/hooks/failure_learning/failure_detection_hook.py +235 -0
  377. claude_mpm/hooks/failure_learning/fix_detection_hook.py +217 -0
  378. claude_mpm/hooks/failure_learning/learning_extraction_hook.py +286 -0
  379. claude_mpm/hooks/instruction_reinforcement.py +301 -0
  380. claude_mpm/hooks/kuzu_enrichment_hook.py +263 -0
  381. claude_mpm/hooks/kuzu_memory_hook.py +386 -0
  382. claude_mpm/hooks/kuzu_response_hook.py +183 -0
  383. claude_mpm/hooks/memory_integration_hook.py +1 -1
  384. claude_mpm/hooks/session_resume_hook.py +121 -0
  385. claude_mpm/hooks/templates/pre_tool_use_simple.py +78 -0
  386. claude_mpm/hooks/templates/pre_tool_use_template.py +323 -0
  387. claude_mpm/hooks/tool_call_interceptor.py +8 -5
  388. claude_mpm/hooks/validation_hooks.py +3 -3
  389. claude_mpm/init.py +23 -4
  390. claude_mpm/models/agent_session.py +8 -6
  391. claude_mpm/models/resume_log.py +340 -0
  392. claude_mpm/schemas/__init__.py +12 -0
  393. claude_mpm/scripts/claude-hook-handler.sh +187 -0
  394. claude_mpm/scripts/launch_monitor.py +85 -0
  395. claude_mpm/scripts/mcp_server.py +3 -5
  396. claude_mpm/scripts/mpm_doctor.py +3 -2
  397. claude_mpm/scripts/socketio_daemon.py +156 -396
  398. claude_mpm/services/__init__.py +144 -160
  399. claude_mpm/services/agents/__init__.py +18 -5
  400. claude_mpm/services/agents/agent_builder.py +13 -11
  401. claude_mpm/services/agents/auto_config_manager.py +796 -0
  402. claude_mpm/services/agents/deployment/agent_config_provider.py +127 -27
  403. claude_mpm/services/agents/deployment/agent_configuration_manager.py +1 -1
  404. claude_mpm/services/agents/deployment/agent_deployment.py +38 -15
  405. claude_mpm/services/agents/deployment/agent_discovery_service.py +125 -7
  406. claude_mpm/services/agents/deployment/agent_filesystem_manager.py +5 -5
  407. claude_mpm/services/agents/deployment/agent_format_converter.py +56 -12
  408. claude_mpm/services/agents/deployment/agent_lifecycle_manager.py +4 -2
  409. claude_mpm/services/agents/deployment/agent_operation_service.py +2 -2
  410. claude_mpm/services/agents/deployment/agent_record_service.py +5 -6
  411. claude_mpm/services/agents/deployment/agent_state_service.py +2 -2
  412. claude_mpm/services/agents/deployment/agent_template_builder.py +722 -37
  413. claude_mpm/services/agents/deployment/agent_validator.py +31 -7
  414. claude_mpm/services/agents/deployment/agent_version_manager.py +9 -1
  415. claude_mpm/services/agents/deployment/agent_versioning.py +1 -1
  416. claude_mpm/services/agents/deployment/async_agent_deployment.py +1 -1
  417. claude_mpm/services/agents/deployment/deployment_config_loader.py +131 -7
  418. claude_mpm/services/agents/deployment/deployment_type_detector.py +10 -14
  419. claude_mpm/services/agents/deployment/deployment_wrapper.py +58 -0
  420. claude_mpm/services/agents/deployment/interface_adapter.py +3 -2
  421. claude_mpm/services/agents/deployment/local_template_deployment.py +360 -0
  422. claude_mpm/services/agents/deployment/multi_source_deployment_service.py +134 -38
  423. claude_mpm/services/agents/deployment/pipeline/steps/agent_processing_step.py +8 -7
  424. claude_mpm/services/agents/deployment/pipeline/steps/base_step.py +7 -16
  425. claude_mpm/services/agents/deployment/pipeline/steps/configuration_step.py +4 -3
  426. claude_mpm/services/agents/deployment/pipeline/steps/target_directory_step.py +7 -5
  427. claude_mpm/services/agents/deployment/pipeline/steps/validation_step.py +6 -5
  428. claude_mpm/services/agents/deployment/refactored_agent_deployment_service.py +9 -6
  429. claude_mpm/services/agents/deployment/system_instructions_deployer.py +9 -6
  430. claude_mpm/services/agents/deployment/validation/__init__.py +3 -1
  431. claude_mpm/services/agents/deployment/validation/template_validator.py +64 -44
  432. claude_mpm/services/agents/deployment/validation/validation_result.py +1 -9
  433. claude_mpm/services/agents/loading/agent_profile_loader.py +10 -9
  434. claude_mpm/services/agents/loading/base_agent_manager.py +16 -6
  435. claude_mpm/services/agents/loading/framework_agent_loader.py +2 -2
  436. claude_mpm/services/agents/local_template_manager.py +744 -0
  437. claude_mpm/services/agents/management/agent_capabilities_generator.py +3 -2
  438. claude_mpm/services/agents/management/agent_management_service.py +5 -5
  439. claude_mpm/services/agents/memory/agent_memory_manager.py +32 -29
  440. claude_mpm/services/agents/memory/content_manager.py +17 -9
  441. claude_mpm/services/agents/memory/memory_categorization_service.py +4 -2
  442. claude_mpm/services/agents/memory/memory_file_service.py +32 -6
  443. claude_mpm/services/agents/memory/memory_format_service.py +7 -7
  444. claude_mpm/services/agents/memory/memory_limits_service.py +4 -2
  445. claude_mpm/services/agents/memory/template_generator.py +3 -3
  446. claude_mpm/services/agents/observers.py +547 -0
  447. claude_mpm/services/agents/recommender.py +615 -0
  448. claude_mpm/services/agents/registry/deployed_agent_discovery.py +3 -3
  449. claude_mpm/services/agents/registry/modification_tracker.py +30 -19
  450. claude_mpm/services/async_session_logger.py +141 -98
  451. claude_mpm/services/claude_session_logger.py +82 -74
  452. claude_mpm/services/cli/agent_cleanup_service.py +6 -5
  453. claude_mpm/services/cli/agent_dependency_service.py +1 -1
  454. claude_mpm/services/cli/agent_listing_service.py +5 -5
  455. claude_mpm/services/cli/agent_validation_service.py +6 -5
  456. claude_mpm/services/cli/memory_crud_service.py +12 -7
  457. claude_mpm/services/cli/memory_output_formatter.py +2 -2
  458. claude_mpm/services/cli/resume_service.py +617 -0
  459. claude_mpm/services/cli/session_manager.py +104 -13
  460. claude_mpm/services/cli/session_pause_manager.py +504 -0
  461. claude_mpm/services/cli/session_resume_helper.py +372 -0
  462. claude_mpm/services/cli/startup_checker.py +13 -21
  463. claude_mpm/services/cli/unified_dashboard_manager.py +439 -0
  464. claude_mpm/services/command_deployment_service.py +17 -9
  465. claude_mpm/services/command_handler_service.py +11 -5
  466. claude_mpm/services/core/__init__.py +33 -1
  467. claude_mpm/services/core/base.py +26 -11
  468. claude_mpm/services/core/cache_manager.py +1 -3
  469. claude_mpm/services/core/interfaces/__init__.py +90 -3
  470. claude_mpm/services/core/interfaces/agent.py +184 -0
  471. claude_mpm/services/core/interfaces/health.py +172 -0
  472. claude_mpm/services/core/interfaces/model.py +281 -0
  473. claude_mpm/services/core/interfaces/process.py +372 -0
  474. claude_mpm/services/core/interfaces/project.py +121 -0
  475. claude_mpm/services/core/interfaces/restart.py +307 -0
  476. claude_mpm/services/core/interfaces/stability.py +260 -0
  477. claude_mpm/services/core/interfaces.py +56 -1
  478. claude_mpm/services/core/memory_manager.py +92 -47
  479. claude_mpm/services/core/models/__init__.py +79 -0
  480. claude_mpm/services/core/models/agent_config.py +384 -0
  481. claude_mpm/services/core/models/health.py +162 -0
  482. claude_mpm/services/core/models/process.py +239 -0
  483. claude_mpm/services/core/models/restart.py +302 -0
  484. claude_mpm/services/core/models/stability.py +264 -0
  485. claude_mpm/services/core/models/toolchain.py +306 -0
  486. claude_mpm/services/core/path_resolver.py +37 -18
  487. claude_mpm/services/core/service_container.py +2 -2
  488. claude_mpm/services/diagnostics/__init__.py +2 -2
  489. claude_mpm/services/diagnostics/checks/__init__.py +4 -2
  490. claude_mpm/services/diagnostics/checks/agent_check.py +30 -32
  491. claude_mpm/services/diagnostics/checks/claude_code_check.py +270 -0
  492. claude_mpm/services/diagnostics/checks/common_issues_check.py +28 -27
  493. claude_mpm/services/diagnostics/checks/configuration_check.py +26 -25
  494. claude_mpm/services/diagnostics/checks/filesystem_check.py +18 -17
  495. claude_mpm/services/diagnostics/checks/installation_check.py +165 -60
  496. claude_mpm/services/diagnostics/checks/instructions_check.py +22 -24
  497. claude_mpm/services/diagnostics/checks/mcp_check.py +57 -43
  498. claude_mpm/services/diagnostics/checks/mcp_services_check.py +1066 -0
  499. claude_mpm/services/diagnostics/checks/monitor_check.py +24 -23
  500. claude_mpm/services/diagnostics/checks/startup_log_check.py +14 -11
  501. claude_mpm/services/diagnostics/diagnostic_runner.py +22 -13
  502. claude_mpm/services/diagnostics/doctor_reporter.py +275 -47
  503. claude_mpm/services/diagnostics/models.py +37 -21
  504. claude_mpm/services/event_aggregator.py +5 -3
  505. claude_mpm/services/event_bus/direct_relay.py +152 -13
  506. claude_mpm/services/event_bus/event_bus.py +51 -9
  507. claude_mpm/services/event_bus/relay.py +33 -14
  508. claude_mpm/services/events/consumers/dead_letter.py +7 -5
  509. claude_mpm/services/events/core.py +5 -6
  510. claude_mpm/services/events/producers/hook.py +6 -6
  511. claude_mpm/services/events/producers/system.py +8 -8
  512. claude_mpm/services/exceptions.py +5 -5
  513. claude_mpm/services/framework_claude_md_generator/__init__.py +1 -1
  514. claude_mpm/services/framework_claude_md_generator/content_assembler.py +5 -5
  515. claude_mpm/services/framework_claude_md_generator/content_validator.py +2 -2
  516. claude_mpm/services/framework_claude_md_generator/deployment_manager.py +3 -3
  517. claude_mpm/services/framework_claude_md_generator/section_generators/__init__.py +2 -2
  518. claude_mpm/services/framework_claude_md_generator/version_manager.py +1 -1
  519. claude_mpm/services/hook_installer_service.py +506 -0
  520. claude_mpm/services/hook_service.py +5 -6
  521. claude_mpm/services/infrastructure/context_preservation.py +13 -11
  522. claude_mpm/services/infrastructure/daemon_manager.py +9 -9
  523. claude_mpm/services/infrastructure/logging.py +2 -2
  524. claude_mpm/services/infrastructure/monitoring/__init__.py +12 -12
  525. claude_mpm/services/infrastructure/monitoring/aggregator.py +12 -12
  526. claude_mpm/services/infrastructure/monitoring/base.py +5 -13
  527. claude_mpm/services/infrastructure/monitoring/network.py +7 -6
  528. claude_mpm/services/infrastructure/monitoring/process.py +13 -12
  529. claude_mpm/services/infrastructure/monitoring/resources.py +8 -7
  530. claude_mpm/services/infrastructure/monitoring/service.py +16 -15
  531. claude_mpm/services/infrastructure/monitoring.py +12 -12
  532. claude_mpm/services/infrastructure/resume_log_generator.py +439 -0
  533. claude_mpm/services/local_ops/__init__.py +165 -0
  534. claude_mpm/services/local_ops/crash_detector.py +257 -0
  535. claude_mpm/services/local_ops/health_checks/__init__.py +28 -0
  536. claude_mpm/services/local_ops/health_checks/http_check.py +224 -0
  537. claude_mpm/services/local_ops/health_checks/process_check.py +236 -0
  538. claude_mpm/services/local_ops/health_checks/resource_check.py +255 -0
  539. claude_mpm/services/local_ops/health_manager.py +430 -0
  540. claude_mpm/services/local_ops/log_monitor.py +396 -0
  541. claude_mpm/services/local_ops/memory_leak_detector.py +294 -0
  542. claude_mpm/services/local_ops/process_manager.py +595 -0
  543. claude_mpm/services/local_ops/resource_monitor.py +331 -0
  544. claude_mpm/services/local_ops/restart_manager.py +401 -0
  545. claude_mpm/services/local_ops/restart_policy.py +387 -0
  546. claude_mpm/services/local_ops/state_manager.py +372 -0
  547. claude_mpm/services/local_ops/unified_manager.py +600 -0
  548. claude_mpm/services/mcp_config_manager.py +1612 -0
  549. claude_mpm/services/mcp_gateway/__init__.py +97 -93
  550. claude_mpm/services/mcp_gateway/auto_configure.py +43 -38
  551. claude_mpm/services/mcp_gateway/config/config_loader.py +3 -3
  552. claude_mpm/services/mcp_gateway/config/configuration.py +23 -4
  553. claude_mpm/services/mcp_gateway/core/__init__.py +1 -2
  554. claude_mpm/services/mcp_gateway/core/base.py +20 -33
  555. claude_mpm/services/mcp_gateway/core/process_pool.py +585 -31
  556. claude_mpm/services/mcp_gateway/core/singleton_manager.py +2 -2
  557. claude_mpm/services/mcp_gateway/core/startup_verification.py +3 -3
  558. claude_mpm/services/mcp_gateway/main.py +90 -15
  559. claude_mpm/services/mcp_gateway/registry/service_registry.py +4 -2
  560. claude_mpm/services/mcp_gateway/registry/tool_registry.py +12 -9
  561. claude_mpm/services/mcp_gateway/server/mcp_gateway.py +4 -4
  562. claude_mpm/services/mcp_gateway/server/stdio_server.py +9 -15
  563. claude_mpm/services/mcp_gateway/tools/__init__.py +14 -2
  564. claude_mpm/services/mcp_gateway/tools/base_adapter.py +15 -15
  565. claude_mpm/services/mcp_gateway/tools/document_summarizer.py +10 -9
  566. claude_mpm/services/mcp_gateway/tools/external_mcp_services.py +654 -0
  567. claude_mpm/services/mcp_gateway/tools/health_check_tool.py +36 -34
  568. claude_mpm/services/mcp_gateway/tools/hello_world.py +8 -8
  569. claude_mpm/services/mcp_gateway/tools/kuzu_memory_service.py +551 -0
  570. claude_mpm/services/mcp_gateway/utils/__init__.py +14 -0
  571. claude_mpm/services/mcp_gateway/utils/package_version_checker.py +160 -0
  572. claude_mpm/services/mcp_gateway/utils/update_preferences.py +170 -0
  573. claude_mpm/services/mcp_service_verifier.py +729 -0
  574. claude_mpm/services/memory/builder.py +9 -8
  575. claude_mpm/services/memory/cache/shared_prompt_cache.py +2 -1
  576. claude_mpm/services/memory/cache/simple_cache.py +2 -2
  577. claude_mpm/services/memory/failure_tracker.py +578 -0
  578. claude_mpm/services/memory/indexed_memory.py +8 -8
  579. claude_mpm/services/memory/optimizer.py +8 -9
  580. claude_mpm/services/memory/router.py +3 -3
  581. claude_mpm/services/memory_hook_service.py +165 -4
  582. claude_mpm/services/model/__init__.py +147 -0
  583. claude_mpm/services/model/base_provider.py +365 -0
  584. claude_mpm/services/model/claude_provider.py +412 -0
  585. claude_mpm/services/model/model_router.py +453 -0
  586. claude_mpm/services/model/ollama_provider.py +415 -0
  587. claude_mpm/services/monitor/__init__.py +20 -0
  588. claude_mpm/services/monitor/daemon.py +671 -0
  589. claude_mpm/services/monitor/daemon_manager.py +963 -0
  590. claude_mpm/services/monitor/event_emitter.py +350 -0
  591. claude_mpm/services/monitor/handlers/__init__.py +21 -0
  592. claude_mpm/services/monitor/handlers/code_analysis.py +332 -0
  593. claude_mpm/services/monitor/handlers/dashboard.py +299 -0
  594. claude_mpm/services/monitor/handlers/file.py +264 -0
  595. claude_mpm/services/monitor/handlers/hooks.py +512 -0
  596. claude_mpm/services/monitor/management/__init__.py +18 -0
  597. claude_mpm/services/monitor/management/health.py +124 -0
  598. claude_mpm/services/monitor/management/lifecycle.py +724 -0
  599. claude_mpm/services/monitor/server.py +817 -0
  600. claude_mpm/services/monitor_build_service.py +2 -2
  601. claude_mpm/services/native_agent_converter.py +356 -0
  602. claude_mpm/services/orphan_detection.py +786 -0
  603. claude_mpm/services/port_manager.py +2 -2
  604. claude_mpm/services/project/__init__.py +23 -0
  605. claude_mpm/services/project/analyzer.py +3 -3
  606. claude_mpm/services/project/architecture_analyzer.py +6 -6
  607. claude_mpm/services/project/archive_manager.py +1045 -0
  608. claude_mpm/services/project/dependency_analyzer.py +8 -8
  609. claude_mpm/services/project/detection_strategies.py +719 -0
  610. claude_mpm/services/project/documentation_manager.py +553 -0
  611. claude_mpm/services/project/enhanced_analyzer.py +572 -0
  612. claude_mpm/services/project/language_analyzer.py +3 -3
  613. claude_mpm/services/project/metrics_collector.py +7 -10
  614. claude_mpm/services/project/project_organizer.py +1005 -0
  615. claude_mpm/services/project/registry.py +13 -7
  616. claude_mpm/services/project/toolchain_analyzer.py +581 -0
  617. claude_mpm/services/project_port_allocator.py +596 -0
  618. claude_mpm/services/response_tracker.py +21 -10
  619. claude_mpm/services/runner_configuration_service.py +1 -0
  620. claude_mpm/services/self_upgrade_service.py +500 -0
  621. claude_mpm/services/session_management_service.py +7 -5
  622. claude_mpm/services/session_manager.py +380 -0
  623. claude_mpm/services/shared/__init__.py +2 -1
  624. claude_mpm/services/shared/async_service_base.py +16 -27
  625. claude_mpm/services/shared/config_service_base.py +17 -14
  626. claude_mpm/services/shared/lifecycle_service_base.py +1 -14
  627. claude_mpm/services/shared/service_factory.py +8 -5
  628. claude_mpm/services/socketio/client_proxy.py +60 -5
  629. claude_mpm/services/socketio/dashboard_server.py +361 -0
  630. claude_mpm/services/socketio/event_normalizer.py +74 -6
  631. claude_mpm/services/socketio/handlers/__init__.py +5 -0
  632. claude_mpm/services/socketio/handlers/base.py +2 -2
  633. claude_mpm/services/socketio/handlers/code_analysis.py +682 -0
  634. claude_mpm/services/socketio/handlers/connection.py +21 -40
  635. claude_mpm/services/socketio/handlers/connection_handler.py +16 -28
  636. claude_mpm/services/socketio/handlers/file.py +46 -10
  637. claude_mpm/services/socketio/handlers/git.py +8 -8
  638. claude_mpm/services/socketio/handlers/hook.py +29 -17
  639. claude_mpm/services/socketio/handlers/registry.py +4 -0
  640. claude_mpm/services/socketio/monitor_client.py +364 -0
  641. claude_mpm/services/socketio/server/broadcaster.py +9 -7
  642. claude_mpm/services/socketio/server/connection_manager.py +131 -68
  643. claude_mpm/services/socketio/server/core.py +275 -22
  644. claude_mpm/services/socketio/server/eventbus_integration.py +20 -14
  645. claude_mpm/services/socketio/server/main.py +99 -29
  646. claude_mpm/services/socketio_client_manager.py +4 -4
  647. claude_mpm/services/subprocess_launcher_service.py +19 -15
  648. claude_mpm/services/system_instructions_service.py +2 -2
  649. claude_mpm/services/ticket_services/formatter_service.py +1 -1
  650. claude_mpm/services/ticket_services/validation_service.py +5 -5
  651. claude_mpm/services/unified/__init__.py +65 -0
  652. claude_mpm/services/unified/analyzer_strategies/__init__.py +44 -0
  653. claude_mpm/services/unified/analyzer_strategies/code_analyzer.py +518 -0
  654. claude_mpm/services/unified/analyzer_strategies/dependency_analyzer.py +680 -0
  655. claude_mpm/services/unified/analyzer_strategies/performance_analyzer.py +903 -0
  656. claude_mpm/services/unified/analyzer_strategies/security_analyzer.py +746 -0
  657. claude_mpm/services/unified/analyzer_strategies/structure_analyzer.py +733 -0
  658. claude_mpm/services/unified/config_strategies/__init__.py +175 -0
  659. claude_mpm/services/unified/config_strategies/config_schema.py +731 -0
  660. claude_mpm/services/unified/config_strategies/context_strategy.py +747 -0
  661. claude_mpm/services/unified/config_strategies/error_handling_strategy.py +1005 -0
  662. claude_mpm/services/unified/config_strategies/file_loader_strategy.py +881 -0
  663. claude_mpm/services/unified/config_strategies/unified_config_service.py +823 -0
  664. claude_mpm/services/unified/config_strategies/validation_strategy.py +1148 -0
  665. claude_mpm/services/unified/deployment_strategies/__init__.py +97 -0
  666. claude_mpm/services/unified/deployment_strategies/base.py +553 -0
  667. claude_mpm/services/unified/deployment_strategies/cloud_strategies.py +573 -0
  668. claude_mpm/services/unified/deployment_strategies/local.py +607 -0
  669. claude_mpm/services/unified/deployment_strategies/utils.py +667 -0
  670. claude_mpm/services/unified/deployment_strategies/vercel.py +475 -0
  671. claude_mpm/services/unified/interfaces.py +475 -0
  672. claude_mpm/services/unified/migration.py +509 -0
  673. claude_mpm/services/unified/strategies.py +534 -0
  674. claude_mpm/services/unified/unified_analyzer.py +542 -0
  675. claude_mpm/services/unified/unified_config.py +691 -0
  676. claude_mpm/services/unified/unified_deployment.py +470 -0
  677. claude_mpm/services/utility_service.py +6 -3
  678. claude_mpm/services/version_control/branch_strategy.py +2 -2
  679. claude_mpm/services/version_control/conflict_resolution.py +8 -4
  680. claude_mpm/services/version_control/git_operations.py +26 -24
  681. claude_mpm/services/version_control/semantic_versioning.py +14 -14
  682. claude_mpm/services/version_control/version_parser.py +14 -11
  683. claude_mpm/services/version_service.py +104 -1
  684. claude_mpm/services/visualization/__init__.py +19 -0
  685. claude_mpm/services/visualization/mermaid_generator.py +938 -0
  686. claude_mpm/skills/__init__.py +42 -0
  687. claude_mpm/skills/agent_skills_injector.py +324 -0
  688. claude_mpm/skills/bundled/LICENSE_ATTRIBUTIONS.md +79 -0
  689. claude_mpm/skills/bundled/__init__.py +6 -0
  690. claude_mpm/skills/bundled/api-documentation.md +393 -0
  691. claude_mpm/skills/bundled/async-testing.md +571 -0
  692. claude_mpm/skills/bundled/code-review.md +143 -0
  693. claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
  694. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
  695. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
  696. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
  697. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
  698. claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
  699. claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
  700. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
  701. claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
  702. claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
  703. claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
  704. claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
  705. claude_mpm/skills/bundled/database-migration.md +199 -0
  706. claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
  707. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
  708. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
  709. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
  710. claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
  711. claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
  712. claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
  713. claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
  714. claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
  715. claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
  716. claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
  717. claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
  718. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
  719. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
  720. claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
  721. claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
  722. claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
  723. claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
  724. claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
  725. claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
  726. claude_mpm/skills/bundled/docker-containerization.md +194 -0
  727. claude_mpm/skills/bundled/express-local-dev.md +1429 -0
  728. claude_mpm/skills/bundled/fastapi-local-dev.md +1199 -0
  729. claude_mpm/skills/bundled/git-workflow.md +414 -0
  730. claude_mpm/skills/bundled/imagemagick.md +204 -0
  731. claude_mpm/skills/bundled/infrastructure/env-manager/scripts/validate_env.py +576 -0
  732. claude_mpm/skills/bundled/json-data-handling.md +223 -0
  733. claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
  734. claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
  735. claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
  736. claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
  737. claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
  738. claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
  739. claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
  740. claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
  741. claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
  742. claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
  743. claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
  744. claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
  745. claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
  746. claude_mpm/skills/bundled/main/mcp-builder/scripts/connections.py +157 -0
  747. claude_mpm/skills/bundled/main/mcp-builder/scripts/evaluation.py +425 -0
  748. claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
  749. claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
  750. claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
  751. claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
  752. claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
  753. claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
  754. claude_mpm/skills/bundled/main/skill-creator/scripts/init_skill.py +303 -0
  755. claude_mpm/skills/bundled/main/skill-creator/scripts/package_skill.py +113 -0
  756. claude_mpm/skills/bundled/main/skill-creator/scripts/quick_validate.py +72 -0
  757. claude_mpm/skills/bundled/nextjs-local-dev.md +807 -0
  758. claude_mpm/skills/bundled/pdf.md +141 -0
  759. claude_mpm/skills/bundled/performance-profiling.md +573 -0
  760. claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
  761. claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
  762. claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
  763. claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
  764. claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
  765. claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
  766. claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
  767. claude_mpm/skills/bundled/refactoring-patterns.md +180 -0
  768. claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
  769. claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
  770. claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
  771. claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
  772. claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
  773. claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
  774. claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
  775. claude_mpm/skills/bundled/security-scanning.md +327 -0
  776. claude_mpm/skills/bundled/systematic-debugging.md +473 -0
  777. claude_mpm/skills/bundled/test-driven-development.md +378 -0
  778. claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
  779. claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
  780. claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
  781. claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
  782. claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
  783. claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
  784. claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
  785. claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
  786. claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
  787. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
  788. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
  789. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
  790. claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
  791. claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
  792. claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
  793. claude_mpm/skills/bundled/testing/webapp-testing/examples/console_logging.py +35 -0
  794. claude_mpm/skills/bundled/testing/webapp-testing/examples/element_discovery.py +44 -0
  795. claude_mpm/skills/bundled/testing/webapp-testing/examples/static_html_automation.py +34 -0
  796. claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
  797. claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
  798. claude_mpm/skills/bundled/testing/webapp-testing/scripts/with_server.py +129 -0
  799. claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
  800. claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
  801. claude_mpm/skills/bundled/vite-local-dev.md +1061 -0
  802. claude_mpm/skills/bundled/web-performance-optimization.md +2305 -0
  803. claude_mpm/skills/bundled/xlsx.md +157 -0
  804. claude_mpm/skills/registry.py +286 -0
  805. claude_mpm/skills/skill_manager.py +310 -0
  806. claude_mpm/skills/skills_registry.py +348 -0
  807. claude_mpm/skills/skills_service.py +739 -0
  808. claude_mpm/storage/state_storage.py +31 -31
  809. claude_mpm/tools/__init__.py +10 -0
  810. claude_mpm/tools/__main__.py +208 -0
  811. claude_mpm/tools/code_tree_analyzer/__init__.py +45 -0
  812. claude_mpm/tools/code_tree_analyzer/analysis.py +299 -0
  813. claude_mpm/tools/code_tree_analyzer/cache.py +131 -0
  814. claude_mpm/tools/code_tree_analyzer/core.py +380 -0
  815. claude_mpm/tools/code_tree_analyzer/discovery.py +403 -0
  816. claude_mpm/tools/code_tree_analyzer/events.py +168 -0
  817. claude_mpm/tools/code_tree_analyzer/gitignore.py +308 -0
  818. claude_mpm/tools/code_tree_analyzer/models.py +39 -0
  819. claude_mpm/tools/code_tree_analyzer/multilang_analyzer.py +224 -0
  820. claude_mpm/tools/code_tree_analyzer/python_analyzer.py +284 -0
  821. claude_mpm/tools/code_tree_builder.py +631 -0
  822. claude_mpm/tools/code_tree_events.py +420 -0
  823. claude_mpm/tools/socketio_debug.py +671 -0
  824. claude_mpm/utils/agent_dependency_loader.py +108 -27
  825. claude_mpm/utils/common.py +544 -0
  826. claude_mpm/utils/config_manager.py +12 -6
  827. claude_mpm/utils/database_connector.py +298 -0
  828. claude_mpm/utils/dependency_cache.py +2 -2
  829. claude_mpm/utils/dependency_strategies.py +15 -10
  830. claude_mpm/utils/display_helper.py +260 -0
  831. claude_mpm/utils/environment_context.py +4 -3
  832. claude_mpm/utils/error_handler.py +5 -3
  833. claude_mpm/utils/file_utils.py +13 -14
  834. claude_mpm/utils/git_analyzer.py +407 -0
  835. claude_mpm/utils/log_cleanup.py +627 -0
  836. claude_mpm/utils/path_operations.py +7 -4
  837. claude_mpm/utils/robust_installer.py +133 -24
  838. claude_mpm/utils/session_logging.py +2 -2
  839. claude_mpm/utils/subprocess_utils.py +9 -8
  840. claude_mpm/validation/agent_validator.py +6 -6
  841. claude_mpm/validation/frontmatter_validator.py +6 -6
  842. claude_mpm-4.24.0.dist-info/METADATA +675 -0
  843. claude_mpm-4.24.0.dist-info/RECORD +1018 -0
  844. {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/entry_points.txt +1 -0
  845. claude_mpm/agents/INSTRUCTIONS.md +0 -237
  846. claude_mpm/agents/schema/agent_schema.json +0 -314
  847. claude_mpm/agents/templates/agent-manager.md +0 -304
  848. claude_mpm/cli/commands/configure_tui.py +0 -1921
  849. claude_mpm/cli/commands/socketio_monitor.py +0 -233
  850. claude_mpm/hooks/claude_hooks/hook_handler_eventbus.py +0 -425
  851. claude_mpm/hooks/claude_hooks/hook_handler_original.py +0 -1040
  852. claude_mpm/hooks/claude_hooks/hook_handler_refactored.py +0 -347
  853. claude_mpm/scripts/socketio_daemon_hardened.py +0 -937
  854. claude_mpm/scripts/socketio_server_manager.py +0 -349
  855. claude_mpm/services/agents/deployment/agent_lifecycle_manager_refactored.py +0 -575
  856. claude_mpm/services/cli/dashboard_launcher.py +0 -424
  857. claude_mpm/services/cli/socketio_manager.py +0 -498
  858. claude_mpm/services/diagnostics/checks/claude_desktop_check.py +0 -286
  859. claude_mpm/services/mcp_gateway/tools/ticket_tools.py +0 -645
  860. claude_mpm/services/mcp_gateway/tools/unified_ticket_tool.py +0 -602
  861. claude_mpm/services/project/analyzer_refactored.py +0 -450
  862. claude_mpm-4.1.6.dist-info/METADATA +0 -325
  863. claude_mpm-4.1.6.dist-info/RECORD +0 -550
  864. {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/WHEEL +0 -0
  865. {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/licenses/LICENSE +0 -0
  866. {claude_mpm-4.1.6.dist-info → claude_mpm-4.24.0.dist-info}/top_level.txt +0 -0
@@ -14,6 +14,7 @@ import sys
14
14
  from pathlib import Path
15
15
  from typing import Any, Dict, List, Optional
16
16
 
17
+ from ...core.enums import OutputFormat
17
18
  from ...core.logging_config import get_logger
18
19
  from ...services.agents.agent_builder import AgentBuilderService
19
20
  from ...services.agents.deployment.agent_deployment import AgentDeploymentService
@@ -36,6 +37,18 @@ class AgentManagerCommand(AgentCommand):
36
37
  self.deployment_service = AgentDeploymentService()
37
38
  return self.deployment_service
38
39
 
40
+ def _get_output_format(self, args) -> str:
41
+ """
42
+ Get output format from args with enum default.
43
+
44
+ Args:
45
+ args: Command arguments
46
+
47
+ Returns:
48
+ Output format string (compatible with both enum and string usage)
49
+ """
50
+ return getattr(args, "format", OutputFormat.TEXT)
51
+
39
52
  def run(self, args) -> CommandResult:
40
53
  """Execute agent manager command.
41
54
 
@@ -58,6 +71,19 @@ class AgentManagerCommand(AgentCommand):
58
71
  "test": self._test_agent,
59
72
  "templates": self._list_templates,
60
73
  "reset": self._reset_agents,
74
+ # Interactive commands
75
+ "create-interactive": self._create_interactive,
76
+ "manage-local": self._manage_local_interactive,
77
+ "edit-interactive": self._edit_interactive,
78
+ "test-local": self._test_local_agent,
79
+ # Local agent commands
80
+ "create-local": self._create_local_agent,
81
+ "deploy-local": self._deploy_local_agents,
82
+ "list-local": self._list_local_agents,
83
+ "sync-local": self._sync_local_agents,
84
+ "export-local": self._export_local_agents,
85
+ "import-local": self._import_local_agents,
86
+ "delete-local": self._delete_local_agents,
61
87
  }
62
88
 
63
89
  command = args.agent_manager_command
@@ -78,7 +104,7 @@ class AgentManagerCommand(AgentCommand):
78
104
  # Check project level
79
105
  project_dir = Path.cwd() / ".claude" / "agents"
80
106
  if project_dir.exists():
81
- for agent_file in project_dir.glob("*.yaml"):
107
+ for agent_file in project_dir.glob("*.md"):
82
108
  agents["project"].append(
83
109
  self._read_agent_summary(agent_file, "project")
84
110
  )
@@ -86,7 +112,7 @@ class AgentManagerCommand(AgentCommand):
86
112
  # Check user level
87
113
  user_dir = Path.home() / ".claude" / "agents"
88
114
  if user_dir.exists():
89
- for agent_file in user_dir.glob("*.yaml"):
115
+ for agent_file in user_dir.glob("*.md"):
90
116
  agent_id = agent_file.stem
91
117
  # Skip if overridden by project
92
118
  if not any(a["id"] == agent_id for a in agents["project"]):
@@ -109,8 +135,8 @@ class AgentManagerCommand(AgentCommand):
109
135
  )
110
136
 
111
137
  # Format output
112
- output_format = getattr(args, "format", "text")
113
- if output_format == "json":
138
+ output_format = self._get_output_format(args)
139
+ if str(output_format).lower() == OutputFormat.JSON:
114
140
  return CommandResult.success_result("Agents listed", data=agents)
115
141
  output = self._format_agent_list(agents)
116
142
  return CommandResult.success_result(output)
@@ -275,8 +301,8 @@ class AgentManagerCommand(AgentCommand):
275
301
  if not agent_info:
276
302
  return CommandResult.error_result(f"Agent '{agent_id}' not found")
277
303
 
278
- output_format = getattr(args, "format", "text")
279
- if output_format == "json":
304
+ output_format = self._get_output_format(args)
305
+ if str(output_format).lower() == OutputFormat.JSON:
280
306
  return CommandResult.success_result("Agent details", data=agent_info)
281
307
  output = self._format_agent_details(agent_info)
282
308
  return CommandResult.success_result(output)
@@ -319,8 +345,8 @@ class AgentManagerCommand(AgentCommand):
319
345
  """List available agent templates."""
320
346
  templates = self.builder_service.list_available_templates()
321
347
 
322
- output_format = getattr(args, "format", "text")
323
- if output_format == "json":
348
+ output_format = self._get_output_format(args)
349
+ if str(output_format).lower() == OutputFormat.JSON:
324
350
  return CommandResult.success_result("Templates listed", data=templates)
325
351
  output = "Available Agent Templates:\n\n"
326
352
  for template in templates:
@@ -344,7 +370,7 @@ class AgentManagerCommand(AgentCommand):
344
370
  clean_user = not getattr(args, "project_only", False)
345
371
  dry_run = getattr(args, "dry_run", False)
346
372
  force = getattr(args, "force", False)
347
- output_format = getattr(args, "format", "text")
373
+ output_format = self._get_output_format(args)
348
374
 
349
375
  # Track results
350
376
  results = {
@@ -384,7 +410,7 @@ class AgentManagerCommand(AgentCommand):
384
410
  )
385
411
 
386
412
  # Handle output based on format
387
- if output_format == "json":
413
+ if str(output_format).lower() == OutputFormat.JSON:
388
414
  return CommandResult.success_result("Reset completed", data=results)
389
415
 
390
416
  # Generate text output
@@ -607,7 +633,7 @@ class AgentManagerCommand(AgentCommand):
607
633
 
608
634
  # Save JSON configuration
609
635
  json_file = template_dir / f"{agent_id}.json"
610
- with open(json_file, "w") as f:
636
+ with json_file.open("w") as f:
611
637
  json.dump(config, f, indent=2)
612
638
 
613
639
  # Save instructions
@@ -624,8 +650,34 @@ class AgentManagerCommand(AgentCommand):
624
650
  def _read_agent_summary(self, agent_file: Path, tier: str) -> Dict[str, Any]:
625
651
  """Read agent summary from file."""
626
652
  try:
627
- # For YAML files, extract basic info
628
653
  agent_id = agent_file.stem
654
+ content = agent_file.read_text()
655
+
656
+ # Parse frontmatter for .md files
657
+ if agent_file.suffix == ".md" and content.startswith("---"):
658
+ import yaml
659
+
660
+ try:
661
+ # Extract YAML frontmatter
662
+ parts = content.split("---", 2)
663
+ if len(parts) >= 2:
664
+ frontmatter = yaml.safe_load(parts[1])
665
+ if isinstance(frontmatter, dict):
666
+ return {
667
+ "id": agent_id,
668
+ "name": frontmatter.get(
669
+ "name", agent_id.replace("-", " ").title()
670
+ ),
671
+ "tier": tier,
672
+ "file": str(agent_file),
673
+ "description": frontmatter.get("description", ""),
674
+ "is_local": frontmatter.get("is_local", False),
675
+ "priority": frontmatter.get("priority", 1000),
676
+ }
677
+ except Exception:
678
+ pass
679
+
680
+ # Fallback for files without proper frontmatter
629
681
  return {
630
682
  "id": agent_id,
631
683
  "name": agent_id.replace("-", " ").title(),
@@ -643,14 +695,16 @@ class AgentManagerCommand(AgentCommand):
643
695
  if agents["project"]:
644
696
  output += "[P] PROJECT LEVEL (Highest Priority)\n"
645
697
  for agent in agents["project"]:
646
- output += f" {agent['id']:<20} - {agent.get('name', agent['id'])}\n"
698
+ local_indicator = " [LOCAL-PROJECT]" if agent.get("is_local") else ""
699
+ output += f" {agent['id']:<20} - {agent.get('name', agent['id'])}{local_indicator}\n"
647
700
  output += "\n"
648
701
 
649
702
  # User agents
650
703
  if agents["user"]:
651
704
  output += "[U] USER LEVEL\n"
652
705
  for agent in agents["user"]:
653
- output += f" {agent['id']:<20} - {agent.get('name', agent['id'])}\n"
706
+ local_indicator = " [LOCAL-USER]" if agent.get("is_local") else ""
707
+ output += f" {agent['id']:<20} - {agent.get('name', agent['id'])}{local_indicator}\n"
654
708
  output += "\n"
655
709
 
656
710
  # System agents
@@ -671,7 +725,7 @@ class AgentManagerCommand(AgentCommand):
671
725
  """Load agent configuration."""
672
726
  try:
673
727
  return self.builder_service._load_template(agent_id)
674
- except:
728
+ except Exception:
675
729
  return None
676
730
 
677
731
  def _check_conflicts(self, agent_id: str) -> Optional[str]:
@@ -692,12 +746,573 @@ class AgentManagerCommand(AgentCommand):
692
746
  # Load predefined PM templates
693
747
  return "# PM Instructions Template\n"
694
748
 
749
+ def _create_local_agent(self, args) -> CommandResult:
750
+ """Create a new local agent template.
751
+
752
+ Creates a JSON template in .claude-mpm/agents/ directory.
753
+ """
754
+ try:
755
+ from ...services.agents.local_template_manager import (
756
+ LocalAgentTemplateManager,
757
+ )
758
+
759
+ manager = LocalAgentTemplateManager()
760
+
761
+ # Get arguments
762
+ agent_id = getattr(args, "agent_id", None)
763
+ if not agent_id:
764
+ return CommandResult.error_result(
765
+ "--agent-id is required for create-local"
766
+ )
767
+
768
+ name = getattr(args, "name", agent_id.replace("_", " ").title())
769
+ description = getattr(args, "description", f"Local {agent_id} agent")
770
+ instructions = getattr(
771
+ args, "instructions", f"Custom instructions for {agent_id}"
772
+ )
773
+ model = getattr(args, "model", "sonnet")
774
+ tools = getattr(args, "tools", "*")
775
+ parent_agent = getattr(args, "parent", None)
776
+ tier = getattr(args, "tier", "project")
777
+
778
+ # Create template
779
+ template = manager.create_local_template(
780
+ agent_id=agent_id,
781
+ name=name,
782
+ description=description,
783
+ instructions=instructions,
784
+ model=model,
785
+ tools=tools,
786
+ parent_agent=parent_agent,
787
+ tier=tier,
788
+ )
789
+
790
+ # Validate template
791
+ is_valid, errors = manager.validate_local_template(template)
792
+ if not is_valid:
793
+ return CommandResult.error_result(
794
+ f"Invalid template: {', '.join(errors)}"
795
+ )
796
+
797
+ # Save template
798
+ template_file = manager.save_local_template(template, tier)
799
+
800
+ return CommandResult.success_result(
801
+ f"Created local agent template: {template_file}\n"
802
+ f"Deploy with: claude-mpm agent-manager deploy-local --agent-id {agent_id}"
803
+ )
804
+
805
+ except Exception as e:
806
+ return CommandResult.error_result(f"Failed to create local agent: {e}")
807
+
808
+ def _deploy_local_agents(self, args) -> CommandResult:
809
+ """Deploy local JSON templates to Claude Code."""
810
+ try:
811
+ from ...services.agents.deployment.local_template_deployment import (
812
+ LocalTemplateDeploymentService,
813
+ )
814
+
815
+ service = LocalTemplateDeploymentService()
816
+
817
+ # Check for specific agent
818
+ agent_id = getattr(args, "agent_id", None)
819
+ force = getattr(args, "force", False)
820
+
821
+ if agent_id:
822
+ # Deploy single agent
823
+ success = service.deploy_single_local_template(agent_id, force)
824
+ if success:
825
+ return CommandResult.success_result(
826
+ f"Deployed local agent: {agent_id}"
827
+ )
828
+ return CommandResult.error_result(
829
+ f"Failed to deploy local agent: {agent_id}"
830
+ )
831
+
832
+ # Deploy all local agents
833
+ tier_filter = getattr(args, "tier", None)
834
+ results = service.deploy_local_templates(force, tier_filter)
835
+
836
+ # Format output
837
+ output = "Local Agent Deployment Results:\n"
838
+ output += f" Deployed: {len(results['deployed'])}\n"
839
+ output += f" Updated: {len(results['updated'])}\n"
840
+ output += f" Skipped: {len(results['skipped'])}\n"
841
+ output += f" Errors: {len(results['errors'])}\n"
842
+
843
+ if results["deployed"]:
844
+ output += f"\nDeployed agents: {', '.join(results['deployed'])}"
845
+ if results["updated"]:
846
+ output += f"\nUpdated agents: {', '.join(results['updated'])}"
847
+ if results["errors"]:
848
+ output += "\nErrors:\n"
849
+ for error in results["errors"]:
850
+ output += f" - {error}\n"
851
+
852
+ return CommandResult.success_result(output, data=results)
853
+
854
+ except Exception as e:
855
+ return CommandResult.error_result(f"Failed to deploy local agents: {e}")
856
+
857
+ def _list_local_agents(self, args) -> CommandResult:
858
+ """List all local agent templates."""
859
+ try:
860
+ from ...services.agents.local_template_manager import (
861
+ LocalAgentTemplateManager,
862
+ )
863
+
864
+ manager = LocalAgentTemplateManager()
865
+
866
+ # Get tier filter
867
+ tier = getattr(args, "tier", None)
868
+ templates = manager.list_local_templates(tier)
869
+
870
+ if not templates:
871
+ return CommandResult.success_result("No local agent templates found")
872
+
873
+ # Format output
874
+ output_format = self._get_output_format(args)
875
+
876
+ if str(output_format).lower() == OutputFormat.JSON:
877
+ data = [
878
+ {
879
+ "id": t.agent_id,
880
+ "name": t.metadata.get("name", t.agent_id),
881
+ "version": t.agent_version,
882
+ "author": t.author,
883
+ "tier": t.tier,
884
+ "tags": t.metadata.get("tags", []),
885
+ }
886
+ for t in templates
887
+ ]
888
+ return CommandResult.success_result("Local agents", data=data)
889
+
890
+ # Text format
891
+ output = "Local Agent Templates:\n\n"
892
+
893
+ # Group by tier
894
+ project_agents = [t for t in templates if t.tier == "project"]
895
+ user_agents = [t for t in templates if t.tier == "user"]
896
+
897
+ if project_agents:
898
+ output += "PROJECT AGENTS:\n"
899
+ for template in project_agents:
900
+ output += f" • {template.agent_id} (v{template.agent_version})"
901
+ output += f" - {template.metadata.get('name', template.agent_id)}\n"
902
+ if template.metadata.get("description"):
903
+ output += f" {template.metadata['description']}\n"
904
+ output += "\n"
905
+
906
+ if user_agents:
907
+ output += "USER AGENTS:\n"
908
+ for template in user_agents:
909
+ output += f" • {template.agent_id} (v{template.agent_version})"
910
+ output += f" - {template.metadata.get('name', template.agent_id)}\n"
911
+ if template.metadata.get("description"):
912
+ output += f" {template.metadata['description']}\n"
913
+
914
+ return CommandResult.success_result(output)
915
+
916
+ except Exception as e:
917
+ return CommandResult.error_result(f"Failed to list local agents: {e}")
918
+
919
+ def _sync_local_agents(self, args) -> CommandResult:
920
+ """Synchronize local templates with deployed agents."""
921
+ try:
922
+ from ...services.agents.deployment.local_template_deployment import (
923
+ LocalTemplateDeploymentService,
924
+ )
925
+
926
+ service = LocalTemplateDeploymentService()
927
+ results = service.sync_local_templates()
928
+
929
+ # Format output
930
+ output = "Local Agent Synchronization:\n"
931
+ output += f" Added: {len(results['added'])}\n"
932
+ output += f" Updated: {len(results['updated'])}\n"
933
+ output += f" Removed: {len(results['removed'])}\n"
934
+
935
+ if results["added"]:
936
+ output += f"\nAdded agents: {', '.join(results['added'])}"
937
+ if results["updated"]:
938
+ output += f"\nUpdated agents: {', '.join(results['updated'])}"
939
+ if results["removed"]:
940
+ output += f"\nRemoved agents: {', '.join(results['removed'])}"
941
+ if results["errors"]:
942
+ output += "\nErrors:\n"
943
+ for error in results["errors"]:
944
+ output += f" - {error}\n"
945
+
946
+ return CommandResult.success_result(output, data=results)
947
+
948
+ except Exception as e:
949
+ return CommandResult.error_result(f"Failed to sync local agents: {e}")
950
+
951
+ def _export_local_agents(self, args) -> CommandResult:
952
+ """Export local agent templates to a directory."""
953
+ try:
954
+ from ...services.agents.local_template_manager import (
955
+ LocalAgentTemplateManager,
956
+ )
957
+
958
+ manager = LocalAgentTemplateManager()
959
+
960
+ # Get output directory
961
+ output_dir = getattr(args, "output", "./exported-agents")
962
+ output_path = Path(output_dir)
963
+
964
+ count = manager.export_local_templates(output_path)
965
+
966
+ return CommandResult.success_result(
967
+ f"Exported {count} local agent templates to {output_path}"
968
+ )
969
+
970
+ except Exception as e:
971
+ return CommandResult.error_result(f"Failed to export local agents: {e}")
972
+
973
+ def _import_local_agents(self, args) -> CommandResult:
974
+ """Import agent templates from a directory."""
975
+ try:
976
+ from ...services.agents.local_template_manager import (
977
+ LocalAgentTemplateManager,
978
+ )
979
+
980
+ manager = LocalAgentTemplateManager()
981
+
982
+ # Get input directory
983
+ input_dir = getattr(args, "input", None)
984
+ if not input_dir:
985
+ return CommandResult.error_result("--input directory is required")
986
+
987
+ input_path = Path(input_dir)
988
+ if not input_path.exists():
989
+ return CommandResult.error_result(
990
+ f"Input directory does not exist: {input_path}"
991
+ )
992
+
993
+ # Get tier
994
+ tier = getattr(args, "tier", "project")
995
+
996
+ count = manager.import_local_templates(input_path, tier)
997
+
998
+ return CommandResult.success_result(
999
+ f"Imported {count} local agent templates from {input_path}"
1000
+ )
1001
+
1002
+ except Exception as e:
1003
+ return CommandResult.error_result(f"Failed to import local agents: {e}")
1004
+
1005
+ def _create_interactive(self, args) -> CommandResult:
1006
+ """Launch interactive agent creation wizard."""
1007
+ try:
1008
+ from ...cli.interactive.agent_wizard import run_interactive_agent_wizard
1009
+
1010
+ # Run the interactive wizard
1011
+ exit_code = run_interactive_agent_wizard()
1012
+
1013
+ if exit_code == 0:
1014
+ return CommandResult.success_result(
1015
+ "Interactive agent creation completed"
1016
+ )
1017
+ return CommandResult.error_result(
1018
+ "Interactive agent creation failed or cancelled"
1019
+ )
1020
+
1021
+ except Exception as e:
1022
+ return CommandResult.error_result(f"Interactive creation failed: {e}")
1023
+
1024
+ def _manage_local_interactive(self, args) -> CommandResult:
1025
+ """Launch interactive agent management menu."""
1026
+ try:
1027
+ from ...cli.interactive.agent_wizard import run_interactive_agent_manager
1028
+
1029
+ # Run the interactive management menu
1030
+ exit_code = run_interactive_agent_manager()
1031
+
1032
+ if exit_code == 0:
1033
+ return CommandResult.success_result(
1034
+ "Interactive agent management completed"
1035
+ )
1036
+ return CommandResult.error_result(
1037
+ "Interactive agent management failed or cancelled"
1038
+ )
1039
+
1040
+ except Exception as e:
1041
+ return CommandResult.error_result(f"Interactive management failed: {e}")
1042
+
1043
+ def _edit_interactive(self, args) -> CommandResult:
1044
+ """Edit agent configuration interactively."""
1045
+ try:
1046
+ from ...services.agents.local_template_manager import (
1047
+ LocalAgentTemplateManager,
1048
+ )
1049
+
1050
+ agent_id = getattr(args, "agent_id", None)
1051
+ if not agent_id:
1052
+ return CommandResult.error_result(
1053
+ "--agent-id is required for edit-interactive"
1054
+ )
1055
+
1056
+ manager = LocalAgentTemplateManager()
1057
+ template = manager.get_local_template(agent_id)
1058
+
1059
+ if not template:
1060
+ return CommandResult.error_result(f"Local agent '{agent_id}' not found")
1061
+
1062
+ # Get template file path
1063
+ if template.tier == "project":
1064
+ template_file = manager.project_agents_dir / f"{agent_id}.json"
1065
+ else:
1066
+ template_file = manager.user_agents_dir / f"{agent_id}.json"
1067
+
1068
+ # Open in editor
1069
+ import os
1070
+ import subprocess
1071
+
1072
+ editor = os.environ.get("EDITOR", "nano")
1073
+ print(f"Opening {template_file} in {editor}...")
1074
+
1075
+ try:
1076
+ subprocess.run([editor, str(template_file)], check=True)
1077
+ return CommandResult.success_result(
1078
+ f"Agent '{agent_id}' edited successfully"
1079
+ )
1080
+ except subprocess.CalledProcessError:
1081
+ return CommandResult.error_result("Editor exited with error")
1082
+ except FileNotFoundError:
1083
+ return CommandResult.error_result(
1084
+ f"Editor '{editor}' not found. Set EDITOR environment variable."
1085
+ )
1086
+
1087
+ except Exception as e:
1088
+ return CommandResult.error_result(f"Interactive edit failed: {e}")
1089
+
1090
+ def _test_local_agent(self, args) -> CommandResult:
1091
+ """Test a local agent with sample task."""
1092
+ try:
1093
+ from ...services.agents.local_template_manager import (
1094
+ LocalAgentTemplateManager,
1095
+ )
1096
+
1097
+ agent_id = getattr(args, "agent_id", None)
1098
+ if not agent_id:
1099
+ return CommandResult.error_result(
1100
+ "--agent-id is required for test-local"
1101
+ )
1102
+
1103
+ manager = LocalAgentTemplateManager()
1104
+ template = manager.get_local_template(agent_id)
1105
+
1106
+ if not template:
1107
+ return CommandResult.error_result(f"Local agent '{agent_id}' not found")
1108
+
1109
+ # Validate template
1110
+ is_valid, errors = manager.validate_local_template(template)
1111
+
1112
+ if not is_valid:
1113
+ error_msg = f"Agent '{agent_id}' validation failed:\n"
1114
+ error_msg += "\n".join(f" • {error}" for error in errors)
1115
+ return CommandResult.error_result(error_msg)
1116
+
1117
+ # Check if agent is deployed
1118
+ from ...services.agents.deployment.local_template_deployment import (
1119
+ LocalTemplateDeploymentService,
1120
+ )
1121
+
1122
+ deployment_service = LocalTemplateDeploymentService()
1123
+
1124
+ # Test deployment
1125
+ try:
1126
+ success = deployment_service.deploy_single_local_template(
1127
+ agent_id, force=True
1128
+ )
1129
+ if not success:
1130
+ return CommandResult.error_result(
1131
+ f"Failed to deploy agent '{agent_id}' for testing"
1132
+ )
1133
+ except Exception as deploy_error:
1134
+ return CommandResult.error_result(f"Deployment failed: {deploy_error}")
1135
+
1136
+ # Success message with usage instructions
1137
+ success_msg = (
1138
+ f"✅ Agent '{agent_id}' is valid and deployed successfully!\n\n"
1139
+ )
1140
+ success_msg += "🧪 Test your agent:\n"
1141
+ success_msg += (
1142
+ f' claude-mpm run --agent {agent_id} "Test task for this agent"\n\n'
1143
+ )
1144
+ success_msg += "📊 Agent Details:\n"
1145
+ success_msg += f" Name: {template.metadata.get('name', agent_id)}\n"
1146
+ success_msg += (
1147
+ f" Model: {template.capabilities.get('model', 'unknown')}\n"
1148
+ )
1149
+ success_msg += f" Version: {template.agent_version}\n"
1150
+ success_msg += f" Tier: {template.tier}\n"
1151
+
1152
+ if template.parent_agent:
1153
+ success_msg += f" Inherits: {template.parent_agent}\n"
1154
+
1155
+ return CommandResult.success_result(success_msg)
1156
+
1157
+ except Exception as e:
1158
+ return CommandResult.error_result(f"Local agent test failed: {e}")
1159
+
1160
+ def _delete_local_agents(self, args) -> CommandResult:
1161
+ """Delete local agent templates with comprehensive options."""
1162
+ try:
1163
+ from ...services.agents.local_template_manager import (
1164
+ LocalAgentTemplateManager,
1165
+ )
1166
+
1167
+ manager = LocalAgentTemplateManager()
1168
+
1169
+ # Get command arguments
1170
+ agent_ids = getattr(args, "agent_id", [])
1171
+ delete_all = getattr(args, "all", False)
1172
+ tier = getattr(args, "tier", "project")
1173
+ force = getattr(args, "force", False)
1174
+ keep_deployment = getattr(args, "keep_deployment", False)
1175
+ backup = getattr(args, "backup", False)
1176
+
1177
+ # Validate arguments
1178
+ if not agent_ids and not delete_all:
1179
+ return CommandResult.error_result(
1180
+ "Either --agent-id or --all must be specified"
1181
+ )
1182
+
1183
+ if delete_all and agent_ids:
1184
+ return CommandResult.error_result(
1185
+ "Cannot use both --agent-id and --all together"
1186
+ )
1187
+
1188
+ # Get agents to delete
1189
+ if delete_all:
1190
+ # Get all local agents for the specified tier
1191
+ templates = manager.list_local_templates(
1192
+ tier=None if tier == "all" else tier
1193
+ )
1194
+ if not templates:
1195
+ return CommandResult.success_result(
1196
+ f"No local agents found in {tier} tier(s)"
1197
+ )
1198
+ agent_ids = [t.agent_id for t in templates]
1199
+
1200
+ # Strong confirmation for --all
1201
+ if not force:
1202
+ print(
1203
+ f"\n⚠️ WARNING: This will delete ALL {len(agent_ids)} local agents in {tier} tier(s)!"
1204
+ )
1205
+ print("\nAgents to be deleted:")
1206
+ for agent_id in agent_ids:
1207
+ print(f" - {agent_id}")
1208
+
1209
+ confirm = input("\nType 'DELETE ALL' to confirm: ").strip()
1210
+ if confirm != "DELETE ALL":
1211
+ return CommandResult.error_result("Deletion cancelled")
1212
+ else:
1213
+ # Validate that agents exist
1214
+ missing_agents = []
1215
+ for agent_id in agent_ids:
1216
+ template = manager.get_local_template(agent_id)
1217
+ if not template:
1218
+ missing_agents.append(agent_id)
1219
+
1220
+ if missing_agents:
1221
+ return CommandResult.error_result(
1222
+ f"Agent(s) not found: {', '.join(missing_agents)}"
1223
+ )
1224
+
1225
+ # Confirmation for multiple agents
1226
+ if len(agent_ids) > 1 and not force:
1227
+ print(f"\n⚠️ This will delete {len(agent_ids)} agents:")
1228
+ for agent_id in agent_ids:
1229
+ print(f" - {agent_id}")
1230
+
1231
+ confirm = input("\nAre you sure? [y/N]: ").strip().lower()
1232
+ if confirm not in ["y", "yes"]:
1233
+ return CommandResult.error_result("Deletion cancelled")
1234
+
1235
+ # Confirmation for single agent
1236
+ elif len(agent_ids) == 1 and not force:
1237
+ template = manager.get_local_template(agent_ids[0])
1238
+ print("\n📋 Agent to delete:")
1239
+ print(f" ID: {template.agent_id}")
1240
+ print(f" Name: {template.metadata.get('name', template.agent_id)}")
1241
+ print(f" Tier: {template.tier}")
1242
+
1243
+ confirm = input("\nAre you sure? [y/N]: ").strip().lower()
1244
+ if confirm not in ["y", "yes"]:
1245
+ return CommandResult.error_result("Deletion cancelled")
1246
+
1247
+ # Perform deletion
1248
+ if len(agent_ids) == 1:
1249
+ # Single deletion
1250
+ result = manager.delete_local_template(
1251
+ agent_id=agent_ids[0],
1252
+ tier=tier,
1253
+ delete_deployment=not keep_deployment,
1254
+ backup_first=backup,
1255
+ )
1256
+
1257
+ if result["success"]:
1258
+ message = f"✅ Successfully deleted agent '{agent_ids[0]}'"
1259
+ if result["backup_location"]:
1260
+ message += f"\n Backup saved to: {result['backup_location']}"
1261
+ message += f"\n Removed {len(result['deleted_files'])} file(s)"
1262
+ return CommandResult.success_result(message)
1263
+ errors = "\n".join(result["errors"])
1264
+ return CommandResult.error_result(
1265
+ f"Failed to delete agent '{agent_ids[0]}':\n{errors}"
1266
+ )
1267
+ # Multiple deletion
1268
+ results = manager.delete_multiple_templates(
1269
+ agent_ids=agent_ids,
1270
+ tier=tier,
1271
+ delete_deployment=not keep_deployment,
1272
+ backup_first=backup,
1273
+ )
1274
+
1275
+ # Format results
1276
+ message = ""
1277
+ if results["successful"]:
1278
+ message = (
1279
+ f"✅ Successfully deleted {len(results['successful'])} agent(s):\n"
1280
+ )
1281
+ for agent_id in results["successful"]:
1282
+ message += f" - {agent_id}\n"
1283
+
1284
+ if results["failed"]:
1285
+ if message:
1286
+ message += "\n"
1287
+ message += f"❌ Failed to delete {len(results['failed'])} agent(s):\n"
1288
+ for agent_id in results["failed"]:
1289
+ errors = results["details"][agent_id]["errors"]
1290
+ message += f" - {agent_id}: {', '.join(errors)}\n"
1291
+
1292
+ if not message:
1293
+ message = "No agents were deleted"
1294
+
1295
+ return (
1296
+ CommandResult.success_result(message.strip())
1297
+ if results["successful"]
1298
+ else CommandResult.error_result(message.strip())
1299
+ )
1300
+
1301
+ except Exception as e:
1302
+ return CommandResult.error_result(f"Failed to delete local agents: {e}")
1303
+
695
1304
  def _show_help(self) -> CommandResult:
696
1305
  """Show help for agent manager."""
697
1306
  help_text = """
698
1307
  Agent Manager - Comprehensive Agent Lifecycle Management
699
1308
 
700
- Commands:
1309
+ Interactive Commands (Recommended):
1310
+ create-interactive 🧙‍♂️ Launch step-by-step agent creation wizard
1311
+ manage-local 🔧 Interactive menu for managing local agents
1312
+ edit-interactive ✏️ Edit agent configuration interactively
1313
+ test-local 🧪 Test local agent with validation and deployment
1314
+
1315
+ Standard Commands:
701
1316
  list List all agents across tiers with hierarchy
702
1317
  create Create a new agent (interactive or with arguments)
703
1318
  variant Create an agent variant based on existing agent
@@ -708,7 +1323,22 @@ Commands:
708
1323
  templates List available agent templates
709
1324
  reset Remove claude-mpm authored agents for clean install
710
1325
 
711
- Examples:
1326
+ Local Agent Commands:
1327
+ create-local Create a local JSON agent template in .claude-mpm/agents/
1328
+ deploy-local Deploy local JSON templates to Claude Code
1329
+ list-local List all local agent templates
1330
+ sync-local Synchronize local templates with deployed agents
1331
+ export-local Export local templates to a directory
1332
+ import-local Import templates from a directory
1333
+ delete-local Delete local agent templates with safety checks
1334
+
1335
+ Interactive Examples:
1336
+ claude-mpm agent-manager create-interactive
1337
+ claude-mpm agent-manager manage-local
1338
+ claude-mpm agent-manager edit-interactive --agent-id my-agent
1339
+ claude-mpm agent-manager test-local --agent-id my-agent
1340
+
1341
+ Standard Examples:
712
1342
  claude-mpm agent-manager list
713
1343
  claude-mpm agent-manager create --id my-agent --name "My Agent"
714
1344
  claude-mpm agent-manager variant --base research --id research-v2
@@ -717,7 +1347,32 @@ Examples:
717
1347
  claude-mpm agent-manager reset --dry-run
718
1348
  claude-mpm agent-manager reset --force --project-only
719
1349
 
720
- Note: PM customization writes to .claude-mpm/INSTRUCTIONS.md, not CLAUDE.md
1350
+ Local Agent Examples:
1351
+ claude-mpm agent-manager create-local --agent-id custom-research --name "Custom Research"
1352
+ claude-mpm agent-manager deploy-local --agent-id custom-research
1353
+ claude-mpm agent-manager list-local --tier project
1354
+ claude-mpm agent-manager sync-local
1355
+ claude-mpm agent-manager export-local --output ./my-agents
1356
+ claude-mpm agent-manager import-local --input ./shared-agents --tier user
1357
+ claude-mpm agent-manager delete-local --agent-id custom-qa
1358
+ claude-mpm agent-manager delete-local --agent-id qa research --force
1359
+ claude-mpm agent-manager delete-local --all --tier project --backup
1360
+
1361
+ Interactive Features:
1362
+ ✨ Step-by-step guided agent creation
1363
+ 🎯 Intelligent defaults and suggestions
1364
+ 🔍 Real-time validation with helpful errors
1365
+ 👁️ Preview configurations before creation
1366
+ 🏗️ Inherit from existing system agents
1367
+ 📝 Management menu for all local agents
1368
+ 🚀 One-click deployment and testing
1369
+
1370
+ Notes:
1371
+ • Interactive mode provides the best user experience
1372
+ • PM customization writes to .claude-mpm/INSTRUCTIONS.md, not CLAUDE.md
1373
+ • Local agents are stored as JSON templates in .claude-mpm/agents/
1374
+ • Local project agents override system agents with the same name
1375
+ • Project name is used as the "author" field for local agents
721
1376
  """
722
1377
  return CommandResult.success_result(help_text)
723
1378
 
@@ -737,8 +1392,8 @@ def manage_agent_manager(args) -> int:
737
1392
 
738
1393
  if result.success:
739
1394
  # Handle JSON output format
740
- output_format = getattr(args, "format", "text")
741
- if output_format == "json" and result.data is not None:
1395
+ output_format = getattr(args, "format", OutputFormat.TEXT)
1396
+ if str(output_format).lower() == OutputFormat.JSON and result.data is not None:
742
1397
  print(json.dumps(result.data, indent=2))
743
1398
  elif result.message:
744
1399
  print(result.message)