claude-mpm 5.4.48__py3-none-any.whl → 5.6.34__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.
- claude_mpm/VERSION +1 -1
- claude_mpm/agents/CLAUDE_MPM_OUTPUT_STYLE.md +66 -241
- claude_mpm/agents/CLAUDE_MPM_RESEARCH_OUTPUT_STYLE.md +413 -0
- claude_mpm/agents/CLAUDE_MPM_TEACHER_OUTPUT_STYLE.md +109 -1925
- claude_mpm/agents/PM_INSTRUCTIONS.md +119 -689
- claude_mpm/agents/WORKFLOW.md +2 -0
- claude_mpm/agents/templates/circuit-breakers.md +26 -17
- claude_mpm/cli/__init__.py +5 -1
- claude_mpm/cli/commands/agents.py +2 -4
- claude_mpm/cli/commands/agents_reconcile.py +197 -0
- claude_mpm/cli/commands/autotodos.py +566 -0
- claude_mpm/cli/commands/commander.py +216 -0
- claude_mpm/cli/commands/configure.py +620 -21
- claude_mpm/cli/commands/configure_agent_display.py +3 -1
- claude_mpm/cli/commands/hook_errors.py +60 -60
- claude_mpm/cli/commands/monitor.py +2 -2
- claude_mpm/cli/commands/mpm_init/core.py +15 -8
- claude_mpm/cli/commands/profile.py +9 -10
- claude_mpm/cli/commands/run.py +35 -3
- claude_mpm/cli/commands/skill_source.py +51 -2
- claude_mpm/cli/commands/skills.py +171 -17
- claude_mpm/cli/executor.py +120 -16
- claude_mpm/cli/interactive/__init__.py +10 -0
- claude_mpm/cli/interactive/agent_wizard.py +30 -50
- claude_mpm/cli/interactive/questionary_styles.py +65 -0
- claude_mpm/cli/interactive/skill_selector.py +481 -0
- claude_mpm/cli/parsers/base_parser.py +76 -1
- claude_mpm/cli/parsers/commander_parser.py +116 -0
- claude_mpm/cli/parsers/profile_parser.py +0 -1
- claude_mpm/cli/parsers/run_parser.py +10 -0
- claude_mpm/cli/parsers/skill_source_parser.py +4 -0
- claude_mpm/cli/parsers/skills_parser.py +5 -0
- claude_mpm/cli/startup.py +544 -511
- claude_mpm/cli/startup_display.py +74 -6
- claude_mpm/cli/startup_logging.py +2 -2
- claude_mpm/cli/utils.py +7 -3
- claude_mpm/commander/__init__.py +78 -0
- claude_mpm/commander/adapters/__init__.py +60 -0
- claude_mpm/commander/adapters/auggie.py +260 -0
- claude_mpm/commander/adapters/base.py +288 -0
- claude_mpm/commander/adapters/claude_code.py +392 -0
- claude_mpm/commander/adapters/codex.py +237 -0
- claude_mpm/commander/adapters/communication.py +366 -0
- claude_mpm/commander/adapters/example_usage.py +310 -0
- claude_mpm/commander/adapters/mpm.py +389 -0
- claude_mpm/commander/adapters/registry.py +204 -0
- claude_mpm/commander/api/__init__.py +16 -0
- claude_mpm/commander/api/app.py +121 -0
- claude_mpm/commander/api/errors.py +133 -0
- claude_mpm/commander/api/routes/__init__.py +8 -0
- claude_mpm/commander/api/routes/events.py +184 -0
- claude_mpm/commander/api/routes/inbox.py +171 -0
- claude_mpm/commander/api/routes/messages.py +148 -0
- claude_mpm/commander/api/routes/projects.py +271 -0
- claude_mpm/commander/api/routes/sessions.py +226 -0
- claude_mpm/commander/api/routes/work.py +296 -0
- claude_mpm/commander/api/schemas.py +186 -0
- claude_mpm/commander/chat/__init__.py +7 -0
- claude_mpm/commander/chat/cli.py +146 -0
- claude_mpm/commander/chat/commands.py +96 -0
- claude_mpm/commander/chat/repl.py +310 -0
- claude_mpm/commander/config.py +51 -0
- claude_mpm/commander/config_loader.py +115 -0
- claude_mpm/commander/core/__init__.py +10 -0
- claude_mpm/commander/core/block_manager.py +325 -0
- claude_mpm/commander/core/response_manager.py +323 -0
- claude_mpm/commander/daemon.py +603 -0
- claude_mpm/commander/env_loader.py +59 -0
- claude_mpm/commander/events/__init__.py +26 -0
- claude_mpm/commander/events/manager.py +332 -0
- claude_mpm/commander/frameworks/__init__.py +12 -0
- claude_mpm/commander/frameworks/base.py +146 -0
- claude_mpm/commander/frameworks/claude_code.py +58 -0
- claude_mpm/commander/frameworks/mpm.py +62 -0
- claude_mpm/commander/inbox/__init__.py +16 -0
- claude_mpm/commander/inbox/dedup.py +128 -0
- claude_mpm/commander/inbox/inbox.py +224 -0
- claude_mpm/commander/inbox/models.py +70 -0
- claude_mpm/commander/instance_manager.py +450 -0
- claude_mpm/commander/llm/__init__.py +6 -0
- claude_mpm/commander/llm/openrouter_client.py +167 -0
- claude_mpm/commander/llm/summarizer.py +70 -0
- claude_mpm/commander/memory/__init__.py +45 -0
- claude_mpm/commander/memory/compression.py +347 -0
- claude_mpm/commander/memory/embeddings.py +230 -0
- claude_mpm/commander/memory/entities.py +310 -0
- claude_mpm/commander/memory/example_usage.py +290 -0
- claude_mpm/commander/memory/integration.py +325 -0
- claude_mpm/commander/memory/search.py +381 -0
- claude_mpm/commander/memory/store.py +657 -0
- claude_mpm/commander/models/__init__.py +18 -0
- claude_mpm/commander/models/events.py +121 -0
- claude_mpm/commander/models/project.py +162 -0
- claude_mpm/commander/models/work.py +214 -0
- claude_mpm/commander/parsing/__init__.py +20 -0
- claude_mpm/commander/parsing/extractor.py +132 -0
- claude_mpm/commander/parsing/output_parser.py +270 -0
- claude_mpm/commander/parsing/patterns.py +100 -0
- claude_mpm/commander/persistence/__init__.py +11 -0
- claude_mpm/commander/persistence/event_store.py +274 -0
- claude_mpm/commander/persistence/state_store.py +309 -0
- claude_mpm/commander/persistence/work_store.py +164 -0
- claude_mpm/commander/polling/__init__.py +13 -0
- claude_mpm/commander/polling/event_detector.py +104 -0
- claude_mpm/commander/polling/output_buffer.py +49 -0
- claude_mpm/commander/polling/output_poller.py +153 -0
- claude_mpm/commander/project_session.py +268 -0
- claude_mpm/commander/proxy/__init__.py +12 -0
- claude_mpm/commander/proxy/formatter.py +89 -0
- claude_mpm/commander/proxy/output_handler.py +191 -0
- claude_mpm/commander/proxy/relay.py +155 -0
- claude_mpm/commander/registry.py +410 -0
- claude_mpm/commander/runtime/__init__.py +10 -0
- claude_mpm/commander/runtime/executor.py +191 -0
- claude_mpm/commander/runtime/monitor.py +346 -0
- claude_mpm/commander/session/__init__.py +6 -0
- claude_mpm/commander/session/context.py +81 -0
- claude_mpm/commander/session/manager.py +59 -0
- claude_mpm/commander/tmux_orchestrator.py +361 -0
- claude_mpm/commander/web/__init__.py +1 -0
- claude_mpm/commander/work/__init__.py +30 -0
- claude_mpm/commander/work/executor.py +207 -0
- claude_mpm/commander/work/queue.py +405 -0
- claude_mpm/commander/workflow/__init__.py +27 -0
- claude_mpm/commander/workflow/event_handler.py +241 -0
- claude_mpm/commander/workflow/notifier.py +146 -0
- claude_mpm/commands/mpm-config.md +8 -0
- claude_mpm/commands/mpm-doctor.md +8 -0
- claude_mpm/commands/mpm-help.md +8 -0
- claude_mpm/commands/mpm-init.md +8 -0
- claude_mpm/commands/mpm-monitor.md +8 -0
- claude_mpm/commands/mpm-organize.md +8 -0
- claude_mpm/commands/mpm-postmortem.md +8 -0
- claude_mpm/commands/mpm-session-resume.md +9 -1
- claude_mpm/commands/mpm-status.md +8 -0
- claude_mpm/commands/mpm-ticket-view.md +8 -0
- claude_mpm/commands/mpm-version.md +8 -0
- claude_mpm/commands/mpm.md +8 -0
- claude_mpm/config/agent_presets.py +8 -7
- claude_mpm/config/skill_sources.py +16 -0
- claude_mpm/constants.py +1 -0
- claude_mpm/core/claude_runner.py +154 -2
- claude_mpm/core/config.py +35 -22
- claude_mpm/core/config_constants.py +74 -9
- claude_mpm/core/constants.py +56 -12
- claude_mpm/core/hook_manager.py +51 -3
- claude_mpm/core/interactive_session.py +12 -11
- claude_mpm/core/logger.py +26 -9
- claude_mpm/core/logging_utils.py +39 -13
- claude_mpm/core/network_config.py +148 -0
- claude_mpm/core/oneshot_session.py +7 -6
- claude_mpm/core/optimized_startup.py +3 -1
- claude_mpm/core/output_style_manager.py +66 -18
- claude_mpm/core/shared/config_loader.py +3 -1
- claude_mpm/core/socketio_pool.py +47 -15
- claude_mpm/core/unified_config.py +54 -8
- claude_mpm/core/unified_paths.py +95 -90
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.C33zOoyM.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.CW1J-YuA.css +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/1WZnGYqX.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/67pF3qNn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/6RxdMKe4.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/8cZrfX0h.js +60 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/9a6T2nm-.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B443AUzu.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/B8AwtY2H.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BF15LAsF.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BQaXIfA_.js +331 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BRcwIQNr.js +4 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{uj46x2Wr.js → BSNlmTZj.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BV6nKitt.js +43 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BViJ8lZt.js +128 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BcQ-Q0FE.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Bpyvgze_.js +30 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BzTRqg-z.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C0Fr8dve.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C3rbW_a-.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C8WYN38h.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/C9I8FlXH.js +61 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIQcWgO2.js +36 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIctN7YN.js +7 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CKrS_JZW.js +145 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CR6P9C4A.js +89 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRRR9MD_.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CRcR2DqT.js +334 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CSXtMOf0.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CT-sbxSk.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWm6DJsp.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CmKTTxBW.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CpqQ1Kzn.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Cu_Erd72.js +261 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D2nGpDRe.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9iCMida.js +267 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D9ykgMoY.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DL2Ldur1.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DPfltzjH.js +165 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{N4qtv3Hx.js → DR8nis88.js} +2 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DUliQN2b.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DVp1hx9R.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DXlhR01x.js +122 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/D_lyTybS.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DngoTTgh.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DqkmHtDC.js +220 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DsDh8EYs.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DypDmXgd.js +139 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Gi6I4Gst.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/IPYC-LnN.js +162 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JTLiF7dt.js +24 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/JpevfAFt.js +68 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/{DjhvlsAc.js → NqQ1dWOy.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/R8CEIRAd.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/Zxy7qc-l.js +64 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/q9Hm6zAU.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/qtd3IeO4.js +15 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/ulBFON_C.js +65 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/wQVh1CoA.js +10 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.Dr7t0z2J.js +2 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.BGhZHUS3.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/{0.CAGBuiOw.js → 0.RgBboRvH.js} +1 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DG-KkbDf.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.D_jnf-x6.js +1 -0
- claude_mpm/dashboard/static/svelte-build/_app/version.json +1 -1
- claude_mpm/dashboard/static/svelte-build/index.html +11 -11
- claude_mpm/dashboard-svelte/node_modules/katex/src/fonts/generate_fonts.py +58 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_tfms.py +114 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/extract_ttfs.py +122 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/format_json.py +28 -0
- claude_mpm/dashboard-svelte/node_modules/katex/src/metrics/parse_tfm.py +211 -0
- claude_mpm/experimental/cli_enhancements.py +2 -1
- claude_mpm/hooks/claude_hooks/INTEGRATION_EXAMPLE.md +243 -0
- claude_mpm/hooks/claude_hooks/README_AUTO_PAUSE.md +403 -0
- claude_mpm/hooks/claude_hooks/__pycache__/auto_pause_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/event_handlers.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/hook_handler.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/memory_integration.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/__pycache__/response_tracking.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/auto_pause_handler.py +485 -0
- claude_mpm/hooks/claude_hooks/event_handlers.py +527 -136
- claude_mpm/hooks/claude_hooks/hook_handler.py +170 -104
- claude_mpm/hooks/claude_hooks/hook_wrapper.sh +6 -11
- claude_mpm/hooks/claude_hooks/installer.py +206 -36
- claude_mpm/hooks/claude_hooks/memory_integration.py +52 -32
- claude_mpm/hooks/claude_hooks/response_tracking.py +43 -60
- claude_mpm/hooks/claude_hooks/services/__init__.py +21 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/__init__.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager_http.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/container.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/protocols.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/state_manager.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/subagent_processor.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/connection_manager.py +41 -26
- claude_mpm/hooks/claude_hooks/services/connection_manager_http.py +38 -105
- claude_mpm/hooks/claude_hooks/services/container.py +310 -0
- claude_mpm/hooks/claude_hooks/services/protocols.py +328 -0
- claude_mpm/hooks/claude_hooks/services/state_manager.py +25 -38
- claude_mpm/hooks/claude_hooks/services/subagent_processor.py +75 -77
- claude_mpm/hooks/session_resume_hook.py +89 -1
- claude_mpm/hooks/templates/pre_tool_use_simple.py +6 -6
- claude_mpm/hooks/templates/pre_tool_use_template.py +16 -8
- claude_mpm/init.py +215 -2
- claude_mpm/scripts/claude-hook-handler.sh +46 -19
- claude_mpm/scripts/start_activity_logging.py +0 -0
- claude_mpm/services/agents/agent_recommendation_service.py +8 -8
- claude_mpm/services/agents/agent_selection_service.py +2 -2
- claude_mpm/services/agents/cache_git_manager.py +1 -1
- claude_mpm/services/agents/deployment/agent_discovery_service.py +3 -1
- claude_mpm/services/agents/deployment/agent_format_converter.py +8 -6
- claude_mpm/services/agents/deployment/agent_template_builder.py +14 -4
- claude_mpm/services/agents/deployment/deployment_reconciler.py +577 -0
- claude_mpm/services/agents/deployment/multi_source_deployment_service.py +4 -4
- claude_mpm/services/agents/deployment/remote_agent_discovery_service.py +4 -1
- claude_mpm/services/agents/deployment/startup_reconciliation.py +138 -0
- claude_mpm/services/agents/git_source_manager.py +6 -2
- claude_mpm/services/agents/loading/framework_agent_loader.py +75 -2
- claude_mpm/services/agents/single_tier_deployment_service.py +4 -4
- claude_mpm/services/agents/sources/git_source_sync_service.py +10 -5
- claude_mpm/services/agents/startup_sync.py +5 -2
- claude_mpm/services/cli/__init__.py +3 -0
- claude_mpm/services/cli/incremental_pause_manager.py +561 -0
- claude_mpm/services/cli/session_resume_helper.py +10 -2
- claude_mpm/services/command_deployment_service.py +44 -26
- claude_mpm/services/delegation_detector.py +175 -0
- claude_mpm/services/diagnostics/checks/agent_sources_check.py +30 -0
- claude_mpm/services/diagnostics/checks/configuration_check.py +24 -0
- claude_mpm/services/diagnostics/checks/installation_check.py +22 -0
- claude_mpm/services/diagnostics/checks/mcp_services_check.py +23 -0
- claude_mpm/services/diagnostics/doctor_reporter.py +31 -1
- claude_mpm/services/diagnostics/models.py +14 -1
- claude_mpm/services/event_log.py +325 -0
- claude_mpm/services/hook_installer_service.py +77 -8
- claude_mpm/services/infrastructure/__init__.py +4 -0
- claude_mpm/services/infrastructure/context_usage_tracker.py +291 -0
- claude_mpm/services/infrastructure/resume_log_generator.py +24 -5
- claude_mpm/services/monitor/daemon_manager.py +15 -4
- claude_mpm/services/monitor/management/lifecycle.py +8 -3
- claude_mpm/services/monitor/server.py +106 -16
- claude_mpm/services/pm_skills_deployer.py +267 -94
- claude_mpm/services/profile_manager.py +10 -4
- claude_mpm/services/skills/git_skill_source_manager.py +192 -29
- claude_mpm/services/skills/selective_skill_deployer.py +211 -46
- claude_mpm/services/skills/skill_discovery_service.py +74 -4
- claude_mpm/services/skills_deployer.py +188 -67
- claude_mpm/services/socketio/handlers/hook.py +14 -7
- claude_mpm/services/socketio/server/main.py +12 -4
- claude_mpm/skills/__init__.py +2 -1
- claude_mpm/skills/bundled/collaboration/brainstorming/SKILL.md +79 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/SKILL.md +178 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/agent-prompts.md +577 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/coordination-patterns.md +467 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/examples.md +537 -0
- claude_mpm/skills/bundled/collaboration/dispatching-parallel-agents/references/troubleshooting.md +730 -0
- claude_mpm/skills/bundled/collaboration/git-worktrees.md +317 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/SKILL.md +112 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/code-reviewer-template.md +146 -0
- claude_mpm/skills/bundled/collaboration/requesting-code-review/references/review-examples.md +412 -0
- claude_mpm/skills/bundled/collaboration/stacked-prs.md +251 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/SKILL.md +81 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/best-practices.md +362 -0
- claude_mpm/skills/bundled/collaboration/writing-plans/references/plan-structure-templates.md +312 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/SKILL.md +152 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/advanced-techniques.md +668 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/examples.md +587 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/integration.md +438 -0
- claude_mpm/skills/bundled/debugging/root-cause-tracing/references/tracing-techniques.md +391 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/CREATION-LOG.md +119 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/SKILL.md +148 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/anti-patterns.md +483 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/examples.md +452 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/troubleshooting.md +449 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/references/workflow.md +411 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-academic.md +14 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-1.md +58 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-2.md +68 -0
- claude_mpm/skills/bundled/debugging/systematic-debugging/test-pressure-3.md +69 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/SKILL.md +131 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/gate-function.md +325 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/integration-and-workflows.md +490 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/red-flags-and-failures.md +425 -0
- claude_mpm/skills/bundled/debugging/verification-before-completion/references/verification-patterns.md +499 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/INTEGRATION.md +611 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/README.md +596 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/SKILL.md +260 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/examples/nextjs-env-structure.md +315 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/frameworks.md +436 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/security.md +433 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/synchronization.md +452 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/troubleshooting.md +404 -0
- claude_mpm/skills/bundled/infrastructure/env-manager/references/validation.md +420 -0
- claude_mpm/skills/bundled/main/artifacts-builder/SKILL.md +86 -0
- claude_mpm/skills/bundled/main/internal-comms/SKILL.md +43 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/3p-updates.md +47 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/company-newsletter.md +65 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/faq-answers.md +30 -0
- claude_mpm/skills/bundled/main/internal-comms/examples/general-comms.md +16 -0
- claude_mpm/skills/bundled/main/mcp-builder/SKILL.md +160 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/design_principles.md +412 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/evaluation.md +602 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/mcp_best_practices.md +915 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/node_mcp_server.md +916 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/python_mcp_server.md +752 -0
- claude_mpm/skills/bundled/main/mcp-builder/reference/workflow.md +1237 -0
- claude_mpm/skills/bundled/main/skill-creator/SKILL.md +189 -0
- claude_mpm/skills/bundled/main/skill-creator/references/best-practices.md +500 -0
- claude_mpm/skills/bundled/main/skill-creator/references/creation-workflow.md +464 -0
- claude_mpm/skills/bundled/main/skill-creator/references/examples.md +619 -0
- claude_mpm/skills/bundled/main/skill-creator/references/progressive-disclosure.md +437 -0
- claude_mpm/skills/bundled/main/skill-creator/references/skill-structure.md +231 -0
- claude_mpm/skills/bundled/php/espocrm-development/SKILL.md +170 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/architecture.md +602 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/common-tasks.md +821 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/development-workflow.md +742 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/frontend-customization.md +726 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/hooks-and-services.md +764 -0
- claude_mpm/skills/bundled/php/espocrm-development/references/testing-debugging.md +831 -0
- claude_mpm/skills/bundled/pm/mpm/SKILL.md +38 -0
- claude_mpm/skills/bundled/pm/mpm-agent-update-workflow/SKILL.md +75 -0
- claude_mpm/skills/bundled/pm/mpm-bug-reporting/SKILL.md +248 -0
- claude_mpm/skills/bundled/pm/mpm-circuit-breaker-enforcement/SKILL.md +476 -0
- claude_mpm/skills/bundled/pm/mpm-config/SKILL.md +29 -0
- claude_mpm/skills/bundled/pm/mpm-delegation-patterns/SKILL.md +167 -0
- claude_mpm/skills/bundled/pm/mpm-doctor/SKILL.md +53 -0
- claude_mpm/skills/bundled/pm/mpm-git-file-tracking/SKILL.md +113 -0
- claude_mpm/skills/bundled/pm/mpm-help/SKILL.md +35 -0
- claude_mpm/skills/bundled/pm/mpm-init/SKILL.md +125 -0
- claude_mpm/skills/bundled/pm/mpm-monitor/SKILL.md +32 -0
- claude_mpm/skills/bundled/pm/mpm-organize/SKILL.md +121 -0
- claude_mpm/skills/bundled/pm/mpm-postmortem/SKILL.md +22 -0
- claude_mpm/skills/bundled/pm/mpm-pr-workflow/SKILL.md +124 -0
- claude_mpm/skills/bundled/pm/mpm-session-management/SKILL.md +312 -0
- claude_mpm/skills/bundled/pm/mpm-session-pause/SKILL.md +170 -0
- claude_mpm/skills/bundled/pm/mpm-session-resume/SKILL.md +31 -0
- claude_mpm/skills/bundled/pm/mpm-status/SKILL.md +37 -0
- claude_mpm/skills/bundled/pm/mpm-teaching-mode/SKILL.md +657 -0
- claude_mpm/skills/bundled/pm/mpm-ticket-view/SKILL.md +110 -0
- claude_mpm/skills/bundled/pm/mpm-ticketing-integration/SKILL.md +154 -0
- claude_mpm/skills/bundled/pm/mpm-tool-usage-guide/SKILL.md +386 -0
- claude_mpm/skills/bundled/pm/mpm-verification-protocols/SKILL.md +198 -0
- claude_mpm/skills/bundled/pm/mpm-version/SKILL.md +21 -0
- claude_mpm/skills/bundled/react/flexlayout-react.md +742 -0
- claude_mpm/skills/bundled/rust/desktop-applications/SKILL.md +226 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/architecture-patterns.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/native-gui-frameworks.md +901 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/platform-integration.md +775 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/state-management.md +937 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/tauri-framework.md +770 -0
- claude_mpm/skills/bundled/rust/desktop-applications/references/testing-deployment.md +961 -0
- claude_mpm/skills/bundled/security-scanning.md +112 -0
- claude_mpm/skills/bundled/tauri/tauri-async-patterns.md +495 -0
- claude_mpm/skills/bundled/tauri/tauri-build-deploy.md +599 -0
- claude_mpm/skills/bundled/tauri/tauri-command-patterns.md +535 -0
- claude_mpm/skills/bundled/tauri/tauri-error-handling.md +613 -0
- claude_mpm/skills/bundled/tauri/tauri-event-system.md +648 -0
- claude_mpm/skills/bundled/tauri/tauri-file-system.md +673 -0
- claude_mpm/skills/bundled/tauri/tauri-frontend-integration.md +767 -0
- claude_mpm/skills/bundled/tauri/tauri-performance.md +669 -0
- claude_mpm/skills/bundled/tauri/tauri-state-management.md +573 -0
- claude_mpm/skills/bundled/tauri/tauri-testing.md +384 -0
- claude_mpm/skills/bundled/tauri/tauri-window-management.md +628 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/SKILL.md +119 -0
- claude_mpm/skills/bundled/testing/condition-based-waiting/references/patterns-and-implementation.md +253 -0
- claude_mpm/skills/bundled/testing/test-driven-development/SKILL.md +145 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/anti-patterns.md +543 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/examples.md +741 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/integration.md +470 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/philosophy.md +458 -0
- claude_mpm/skills/bundled/testing/test-driven-development/references/workflow.md +639 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/SKILL.md +458 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/examples/example-inspection-report.md +411 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/assertion-quality.md +317 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/inspection-checklist.md +270 -0
- claude_mpm/skills/bundled/testing/test-quality-inspector/references/red-flags.md +436 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/SKILL.md +140 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/completeness-anti-patterns.md +572 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/core-anti-patterns.md +411 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/detection-guide.md +569 -0
- claude_mpm/skills/bundled/testing/testing-anti-patterns/references/tdd-connection.md +695 -0
- claude_mpm/skills/bundled/testing/webapp-testing/SKILL.md +184 -0
- claude_mpm/skills/bundled/testing/webapp-testing/decision-tree.md +459 -0
- claude_mpm/skills/bundled/testing/webapp-testing/playwright-patterns.md +479 -0
- claude_mpm/skills/bundled/testing/webapp-testing/reconnaissance-pattern.md +687 -0
- claude_mpm/skills/bundled/testing/webapp-testing/server-management.md +758 -0
- claude_mpm/skills/bundled/testing/webapp-testing/troubleshooting.md +868 -0
- claude_mpm/skills/registry.py +295 -90
- claude_mpm/skills/skill_manager.py +29 -23
- claude_mpm/templates/.pre-commit-config.yaml +112 -0
- claude_mpm/utils/agent_dependency_loader.py +103 -4
- claude_mpm/utils/robust_installer.py +45 -24
- claude_mpm-5.6.34.dist-info/METADATA +393 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/RECORD +453 -151
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/0.B_FtCwCQ.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/assets/2.Cl_eSA4x.css +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/BgChzWQ1.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CIXEwuWe.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/CWc5urbQ.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/chunks/DMkZpdF2.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/app.DTL5mJO-.js +0 -2
- claude_mpm/dashboard/static/svelte-build/_app/immutable/entry/start.DzuEhzqh.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/1.DFLC8jdE.js +0 -1
- claude_mpm/dashboard/static/svelte-build/_app/immutable/nodes/2.DPvEihJJ.js +0 -10
- claude_mpm/hooks/claude_hooks/__pycache__/installer.cpython-311.pyc +0 -0
- claude_mpm/hooks/claude_hooks/services/__pycache__/connection_manager.cpython-311.pyc +0 -0
- claude_mpm-5.4.48.dist-info/METADATA +0 -999
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/WHEEL +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/entry_points.txt +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/licenses/LICENSE-FAQ.md +0 -0
- {claude_mpm-5.4.48.dist-info → claude_mpm-5.6.34.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"""Basic notification delivery for events.
|
|
2
|
+
|
|
3
|
+
This module provides Notifier which sends notifications for events.
|
|
4
|
+
Currently supports logging, with extensibility for future channels
|
|
5
|
+
(Slack, email, webhooks).
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
import logging
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
|
|
11
|
+
from ..models.events import Event
|
|
12
|
+
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass
|
|
17
|
+
class NotifierConfig:
|
|
18
|
+
"""Configuration for notifier.
|
|
19
|
+
|
|
20
|
+
Attributes:
|
|
21
|
+
log_level: Logging level for notifications (default: INFO)
|
|
22
|
+
|
|
23
|
+
Future attributes:
|
|
24
|
+
slack_webhook: URL for Slack webhook notifications
|
|
25
|
+
email_config: SMTP configuration for email notifications
|
|
26
|
+
webhook_urls: List of webhook URLs for custom integrations
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
log_level: str = "INFO"
|
|
30
|
+
# Future: slack_webhook, email_config, webhook_urls
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class Notifier:
|
|
34
|
+
"""Sends notifications for events.
|
|
35
|
+
|
|
36
|
+
Currently implements logging-based notifications with configurable
|
|
37
|
+
log levels. Designed for extensibility to support future notification
|
|
38
|
+
channels like Slack, email, and webhooks.
|
|
39
|
+
|
|
40
|
+
Attributes:
|
|
41
|
+
config: Notifier configuration
|
|
42
|
+
|
|
43
|
+
Example:
|
|
44
|
+
>>> config = NotifierConfig(log_level="INFO")
|
|
45
|
+
>>> notifier = Notifier(config)
|
|
46
|
+
>>> await notifier.notify(event)
|
|
47
|
+
>>> await notifier.notify_resolution(event, "User responded")
|
|
48
|
+
"""
|
|
49
|
+
|
|
50
|
+
def __init__(self, config: NotifierConfig | None = None) -> None:
|
|
51
|
+
"""Initialize notifier.
|
|
52
|
+
|
|
53
|
+
Args:
|
|
54
|
+
config: Optional NotifierConfig (uses defaults if not provided)
|
|
55
|
+
"""
|
|
56
|
+
self.config = config or NotifierConfig()
|
|
57
|
+
|
|
58
|
+
# Map log level string to logging level
|
|
59
|
+
level_map = {
|
|
60
|
+
"DEBUG": logging.DEBUG,
|
|
61
|
+
"INFO": logging.INFO,
|
|
62
|
+
"WARNING": logging.WARNING,
|
|
63
|
+
"ERROR": logging.ERROR,
|
|
64
|
+
"CRITICAL": logging.CRITICAL,
|
|
65
|
+
}
|
|
66
|
+
self._log_level = level_map.get(self.config.log_level.upper(), logging.INFO)
|
|
67
|
+
|
|
68
|
+
logger.debug("Notifier initialized with log level: %s", self.config.log_level)
|
|
69
|
+
|
|
70
|
+
async def notify(self, event: Event) -> None:
|
|
71
|
+
"""Send notification for an event.
|
|
72
|
+
|
|
73
|
+
Currently logs the event at the configured log level. Future versions
|
|
74
|
+
will support additional notification channels.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
event: Event to notify about
|
|
78
|
+
|
|
79
|
+
Example:
|
|
80
|
+
>>> await notifier.notify(event)
|
|
81
|
+
# Logs: [HIGH] Event evt_123: Choose deployment target
|
|
82
|
+
"""
|
|
83
|
+
# Format notification message
|
|
84
|
+
message = self._format_event(event)
|
|
85
|
+
|
|
86
|
+
# Log notification
|
|
87
|
+
logger.log(
|
|
88
|
+
self._log_level,
|
|
89
|
+
"Event notification: %s",
|
|
90
|
+
message,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
# Future: Send to Slack, email, webhooks
|
|
94
|
+
# if self.config.slack_webhook:
|
|
95
|
+
# await self._send_slack(event)
|
|
96
|
+
# if self.config.email_config:
|
|
97
|
+
# await self._send_email(event)
|
|
98
|
+
|
|
99
|
+
async def notify_resolution(self, event: Event, response: str) -> None:
|
|
100
|
+
"""Notify that an event was resolved.
|
|
101
|
+
|
|
102
|
+
Logs the resolution with the user's response. Future versions will
|
|
103
|
+
send resolution notifications to configured channels.
|
|
104
|
+
|
|
105
|
+
Args:
|
|
106
|
+
event: Event that was resolved
|
|
107
|
+
response: User's response to the event
|
|
108
|
+
|
|
109
|
+
Example:
|
|
110
|
+
>>> await notifier.notify_resolution(event, "Deploy to staging")
|
|
111
|
+
# Logs: Event evt_123 resolved: Deploy to staging
|
|
112
|
+
"""
|
|
113
|
+
message = f"Event {event.id} resolved: {response[:100]}"
|
|
114
|
+
|
|
115
|
+
logger.log(
|
|
116
|
+
self._log_level,
|
|
117
|
+
"Event resolution: %s",
|
|
118
|
+
message,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
# Future: Send resolution notifications to channels
|
|
122
|
+
|
|
123
|
+
def _format_event(self, event: Event) -> str:
|
|
124
|
+
"""Format event for notification display.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
event: Event to format
|
|
128
|
+
|
|
129
|
+
Returns:
|
|
130
|
+
Formatted notification string
|
|
131
|
+
|
|
132
|
+
Example:
|
|
133
|
+
>>> msg = notifier._format_event(event)
|
|
134
|
+
'[HIGH] evt_123 (proj_456): Choose deployment target'
|
|
135
|
+
"""
|
|
136
|
+
parts = [
|
|
137
|
+
f"[{event.priority.value.upper()}]",
|
|
138
|
+
f"{event.id}",
|
|
139
|
+
f"({event.project_id})",
|
|
140
|
+
f"{event.title}",
|
|
141
|
+
]
|
|
142
|
+
|
|
143
|
+
if event.options:
|
|
144
|
+
parts.append(f"Options: {', '.join(event.options)}")
|
|
145
|
+
|
|
146
|
+
return " ".join(parts)
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-config]
|
|
|
5
5
|
migration_target: /mpm/config
|
|
6
6
|
category: config
|
|
7
7
|
description: Manage Claude MPM configuration
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-config"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-config` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-config` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-config
|
|
10
18
|
|
|
11
19
|
Unified configuration management with auto-detection.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-doctor]
|
|
|
5
5
|
migration_target: /mpm/system:doctor
|
|
6
6
|
category: system
|
|
7
7
|
description: Run diagnostic checks on Claude MPM installation
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-doctor"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-doctor` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-doctor` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-doctor
|
|
10
18
|
|
|
11
19
|
Run comprehensive diagnostics on Claude MPM installation.
|
claude_mpm/commands/mpm-help.md
CHANGED
|
@@ -5,7 +5,15 @@ aliases: [mpm-help]
|
|
|
5
5
|
migration_target: /mpm/system:help
|
|
6
6
|
category: system
|
|
7
7
|
description: Display help for Claude MPM commands
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-help"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-help` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-help` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-help
|
|
10
18
|
|
|
11
19
|
Show help for MPM commands. Delegates to PM agent.
|
claude_mpm/commands/mpm-init.md
CHANGED
|
@@ -5,7 +5,15 @@ aliases: [mpm-init]
|
|
|
5
5
|
migration_target: /mpm/system:init
|
|
6
6
|
category: system
|
|
7
7
|
description: Initialize or update project for Claude Code and MPM
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-init"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-init` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-init` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-init
|
|
10
18
|
|
|
11
19
|
Initialize or intelligently update project for Claude Code and Claude MPM.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-monitor]
|
|
|
5
5
|
migration_target: /mpm/system:monitor
|
|
6
6
|
category: system
|
|
7
7
|
description: Control monitoring server and dashboard
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-monitor"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-monitor` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-monitor` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-monitor
|
|
10
18
|
|
|
11
19
|
Manage Socket.IO monitoring server for real-time dashboard.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-organize]
|
|
|
5
5
|
migration_target: /mpm/system:organize
|
|
6
6
|
category: system
|
|
7
7
|
description: Organize project files with intelligent consolidation
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-organize"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-organize` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-organize` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-organize
|
|
10
18
|
|
|
11
19
|
Organize ALL project files with intelligent detection, consolidation, and pruning.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-postmortem]
|
|
|
5
5
|
migration_target: /mpm/analysis:postmortem
|
|
6
6
|
category: analysis
|
|
7
7
|
description: Analyze session errors and suggest improvements
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-postmortem"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-postmortem` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-postmortem` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-postmortem
|
|
10
18
|
|
|
11
19
|
Analyze session errors and generate improvement suggestions.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-session-resume]
|
|
|
5
5
|
migration_target: /mpm/session:resume
|
|
6
6
|
category: session
|
|
7
7
|
description: Load context from paused session
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-session-resume"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-session-resume` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-session-resume` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-session-resume
|
|
10
18
|
|
|
11
19
|
Load and display context from most recent paused session.
|
|
@@ -21,7 +29,7 @@ Load and display context from most recent paused session.
|
|
|
21
29
|
- Git context and recent commits
|
|
22
30
|
- Next recommended actions
|
|
23
31
|
|
|
24
|
-
**Session location:** `.claude-mpm/sessions/session-*.
|
|
32
|
+
**Session location:** `.claude-mpm/sessions/session-*.md`
|
|
25
33
|
|
|
26
34
|
**Token usage:** ~20-40k tokens (10-20% of context budget)
|
|
27
35
|
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-status]
|
|
|
5
5
|
migration_target: /mpm/system:status
|
|
6
6
|
category: system
|
|
7
7
|
description: Display Claude MPM system status
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-status"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-status` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-status` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-status
|
|
10
18
|
|
|
11
19
|
Show MPM system status. Delegates to PM agent.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-ticket-view]
|
|
|
5
5
|
migration_target: /mpm/ticket:view
|
|
6
6
|
category: tickets
|
|
7
7
|
description: Orchestrate ticketing agent for project management workflows
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-ticket-view"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-ticket-view` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-ticket-view` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-ticket
|
|
10
18
|
|
|
11
19
|
High-level ticketing workflows delegating to ticketing agent.
|
|
@@ -5,7 +5,15 @@ aliases: [mpm-version]
|
|
|
5
5
|
migration_target: /mpm/system:version
|
|
6
6
|
category: system
|
|
7
7
|
description: Show version information
|
|
8
|
+
deprecated: true
|
|
9
|
+
deprecated_in: "5.5.0"
|
|
10
|
+
replacement: "skill:mpm-version"
|
|
8
11
|
---
|
|
12
|
+
|
|
13
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm-version` skill.
|
|
14
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm-version` command instead.
|
|
15
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
16
|
+
|
|
9
17
|
# /mpm-version
|
|
10
18
|
|
|
11
19
|
Display version information for MPM, agents, and skills.
|
claude_mpm/commands/mpm.md
CHANGED
|
@@ -6,7 +6,15 @@ migration_target: /mpm
|
|
|
6
6
|
category: system
|
|
7
7
|
deprecated_aliases: []
|
|
8
8
|
description: Access Claude MPM functionality and manage multi-agent orchestration
|
|
9
|
+
deprecated: true
|
|
10
|
+
deprecated_in: "5.5.0"
|
|
11
|
+
replacement: "skill:mpm"
|
|
9
12
|
---
|
|
13
|
+
|
|
14
|
+
> **Deprecated:** This command file is deprecated in favor of the `mpm` skill.
|
|
15
|
+
> For Claude Code 2.1.3+, use the skill-based `/mpm` command instead.
|
|
16
|
+
> This file is kept for backward compatibility with Claude Code < 2.1.3.
|
|
17
|
+
|
|
10
18
|
# Claude MPM - Multi-Agent Project Manager
|
|
11
19
|
|
|
12
20
|
Access Claude MPM functionality and manage your multi-agent orchestration.
|
|
@@ -25,12 +25,17 @@ from typing import Any, Callable, Dict, List, Union
|
|
|
25
25
|
PresetResolver = Union[List[str], Callable[[], List[str]]]
|
|
26
26
|
|
|
27
27
|
# Core agents included in ALL presets (MIN and MAX)
|
|
28
|
+
# Standard 9 core agents for essential PM workflow functionality
|
|
28
29
|
CORE_AGENTS = [
|
|
29
30
|
"claude-mpm/mpm-agent-manager", # Agent lifecycle management
|
|
30
31
|
"claude-mpm/mpm-skills-manager", # Skills management
|
|
31
|
-
"
|
|
32
|
+
"engineer/core/engineer", # General-purpose implementation
|
|
33
|
+
"universal/research", # Codebase exploration and analysis
|
|
34
|
+
"qa/qa", # Testing and quality assurance
|
|
35
|
+
"qa/web-qa", # Browser-based testing specialist
|
|
32
36
|
"documentation/documentation", # Documentation generation
|
|
33
|
-
"
|
|
37
|
+
"ops/core/ops", # Basic deployment operations
|
|
38
|
+
"documentation/ticketing", # Ticket tracking (essential for PM workflow)
|
|
34
39
|
]
|
|
35
40
|
|
|
36
41
|
PRESETS: Dict[str, Dict[str, Any]] = {
|
|
@@ -39,11 +44,7 @@ PRESETS: Dict[str, Dict[str, Any]] = {
|
|
|
39
44
|
# ========================================
|
|
40
45
|
"minimal": {
|
|
41
46
|
"description": "Core agents only - universal starter kit",
|
|
42
|
-
"agents": CORE_AGENTS
|
|
43
|
-
+ [
|
|
44
|
-
"qa/qa",
|
|
45
|
-
"ops/core/ops",
|
|
46
|
-
],
|
|
47
|
+
"agents": CORE_AGENTS, # All 8 core agents (no additional needed)
|
|
47
48
|
"use_cases": ["Any project type", "Quick start", "Learning"],
|
|
48
49
|
},
|
|
49
50
|
# ========================================
|
|
@@ -54,6 +54,7 @@ class SkillSource:
|
|
|
54
54
|
branch: Git branch to use (default: "main")
|
|
55
55
|
priority: Priority for skill resolution (lower = higher precedence)
|
|
56
56
|
enabled: Whether this source should be synced
|
|
57
|
+
token: Optional GitHub token or env var reference (e.g., "$MY_TOKEN")
|
|
57
58
|
|
|
58
59
|
Priority System:
|
|
59
60
|
- 0: Reserved for system repository (highest precedence)
|
|
@@ -61,6 +62,12 @@ class SkillSource:
|
|
|
61
62
|
- 100-999: Normal priority custom sources
|
|
62
63
|
- 1000+: Low priority custom sources
|
|
63
64
|
|
|
65
|
+
Token Authentication:
|
|
66
|
+
- Direct token: "ghp_xxxxx" (stored in config, not recommended)
|
|
67
|
+
- Env var reference: "$PRIVATE_REPO_TOKEN" (resolved at runtime)
|
|
68
|
+
- If None, falls back to GITHUB_TOKEN or GH_TOKEN env vars
|
|
69
|
+
- Priority: source.token > GITHUB_TOKEN > GH_TOKEN
|
|
70
|
+
|
|
64
71
|
Example:
|
|
65
72
|
>>> source = SkillSource(
|
|
66
73
|
... id="system",
|
|
@@ -70,6 +77,12 @@ class SkillSource:
|
|
|
70
77
|
... )
|
|
71
78
|
>>> source.validate()
|
|
72
79
|
[]
|
|
80
|
+
>>> private_source = SkillSource(
|
|
81
|
+
... id="private",
|
|
82
|
+
... type="git",
|
|
83
|
+
... url="https://github.com/myorg/private-skills",
|
|
84
|
+
... token="$PRIVATE_REPO_TOKEN"
|
|
85
|
+
... )
|
|
73
86
|
"""
|
|
74
87
|
|
|
75
88
|
id: str
|
|
@@ -78,6 +91,7 @@ class SkillSource:
|
|
|
78
91
|
branch: str = "main"
|
|
79
92
|
priority: int = 100
|
|
80
93
|
enabled: bool = True
|
|
94
|
+
token: Optional[str] = None
|
|
81
95
|
|
|
82
96
|
def __post_init__(self):
|
|
83
97
|
"""Validate skill source configuration after initialization.
|
|
@@ -262,6 +276,7 @@ class SkillSourceConfiguration:
|
|
|
262
276
|
branch=source_data.get("branch", "main"),
|
|
263
277
|
priority=source_data.get("priority", 100),
|
|
264
278
|
enabled=source_data.get("enabled", True),
|
|
279
|
+
token=source_data.get("token"),
|
|
265
280
|
)
|
|
266
281
|
sources.append(source)
|
|
267
282
|
except (KeyError, ValueError) as e:
|
|
@@ -326,6 +341,7 @@ class SkillSourceConfiguration:
|
|
|
326
341
|
"branch": source.branch,
|
|
327
342
|
"priority": source.priority,
|
|
328
343
|
"enabled": source.enabled,
|
|
344
|
+
**({"token": source.token} if source.token else {}),
|
|
329
345
|
}
|
|
330
346
|
for source in sources
|
|
331
347
|
]
|
claude_mpm/constants.py
CHANGED
|
@@ -169,6 +169,7 @@ class SkillsCommands(str, Enum):
|
|
|
169
169
|
INFO = "info"
|
|
170
170
|
CONFIG = "config"
|
|
171
171
|
CONFIGURE = "configure" # Interactive skills selection (like agents configure)
|
|
172
|
+
SELECT = "select" # Interactive topic-grouped skill selector
|
|
172
173
|
# GitHub deployment commands
|
|
173
174
|
DEPLOY_FROM_GITHUB = "deploy-github"
|
|
174
175
|
LIST_AVAILABLE = "list-available"
|
claude_mpm/core/claude_runner.py
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"""Claude runner with both exec and subprocess launch methods."""
|
|
2
2
|
|
|
3
|
+
import hashlib
|
|
4
|
+
import json
|
|
3
5
|
import os
|
|
4
6
|
from pathlib import Path
|
|
5
7
|
from typing import Optional
|
|
@@ -211,9 +213,146 @@ class ClaudeRunner:
|
|
|
211
213
|
}
|
|
212
214
|
)
|
|
213
215
|
|
|
216
|
+
def _get_deployment_state_path(self) -> Path:
|
|
217
|
+
"""Get path to deployment state file.
|
|
218
|
+
|
|
219
|
+
CRITICAL: Must match path used by startup.py::_save_deployment_state_after_reconciliation()
|
|
220
|
+
Located at: .claude-mpm/cache/deployment_state.json
|
|
221
|
+
"""
|
|
222
|
+
return Path.cwd() / ".claude-mpm" / "cache" / "deployment_state.json"
|
|
223
|
+
|
|
224
|
+
def _calculate_deployment_hash(self, agents_dir: Path) -> str:
|
|
225
|
+
"""Calculate hash of all agent files for change detection.
|
|
226
|
+
|
|
227
|
+
Args:
|
|
228
|
+
agents_dir: Directory containing agent .md files
|
|
229
|
+
|
|
230
|
+
Returns:
|
|
231
|
+
SHA256 hash of agent file contents
|
|
232
|
+
"""
|
|
233
|
+
if not agents_dir.exists():
|
|
234
|
+
return ""
|
|
235
|
+
|
|
236
|
+
# Get all .md files sorted for consistent hashing
|
|
237
|
+
agent_files = sorted(agents_dir.glob("*.md"))
|
|
238
|
+
|
|
239
|
+
hash_obj = hashlib.sha256()
|
|
240
|
+
for agent_file in agent_files:
|
|
241
|
+
# Include filename and content in hash
|
|
242
|
+
hash_obj.update(agent_file.name.encode())
|
|
243
|
+
try:
|
|
244
|
+
hash_obj.update(agent_file.read_bytes())
|
|
245
|
+
except Exception as e:
|
|
246
|
+
self.logger.debug(f"Error reading {agent_file} for hash: {e}")
|
|
247
|
+
|
|
248
|
+
return hash_obj.hexdigest()
|
|
249
|
+
|
|
250
|
+
def _check_deployment_state(self) -> bool:
|
|
251
|
+
"""Check if agents are already deployed and up-to-date.
|
|
252
|
+
|
|
253
|
+
Returns:
|
|
254
|
+
True if agents are already deployed and match current version, False otherwise
|
|
255
|
+
"""
|
|
256
|
+
state_file = self._get_deployment_state_path()
|
|
257
|
+
agents_dir = Path.cwd() / ".claude" / "agents"
|
|
258
|
+
|
|
259
|
+
# If state file doesn't exist, need to deploy
|
|
260
|
+
if not state_file.exists():
|
|
261
|
+
return False
|
|
262
|
+
|
|
263
|
+
# If agents directory doesn't exist, need to deploy
|
|
264
|
+
if not agents_dir.exists():
|
|
265
|
+
return False
|
|
266
|
+
|
|
267
|
+
try:
|
|
268
|
+
# Load deployment state
|
|
269
|
+
state_data = json.loads(state_file.read_text())
|
|
270
|
+
|
|
271
|
+
# Get current version from package
|
|
272
|
+
from claude_mpm import __version__
|
|
273
|
+
|
|
274
|
+
# Check if version matches
|
|
275
|
+
if state_data.get("version") != __version__:
|
|
276
|
+
self.logger.debug(
|
|
277
|
+
f"Version mismatch: {state_data.get('version')} != {__version__}"
|
|
278
|
+
)
|
|
279
|
+
return False
|
|
280
|
+
|
|
281
|
+
# Check if agent count and hash match
|
|
282
|
+
current_hash = self._calculate_deployment_hash(agents_dir)
|
|
283
|
+
stored_hash = state_data.get("deployment_hash", "")
|
|
284
|
+
|
|
285
|
+
if current_hash != stored_hash:
|
|
286
|
+
self.logger.debug("Agent deployment hash mismatch")
|
|
287
|
+
return False
|
|
288
|
+
|
|
289
|
+
# All checks passed - agents are already deployed
|
|
290
|
+
agent_count = state_data.get("agent_count", 0)
|
|
291
|
+
self.logger.debug(
|
|
292
|
+
f"Agents already deployed: {agent_count} agents (v{__version__})"
|
|
293
|
+
)
|
|
294
|
+
return True
|
|
295
|
+
|
|
296
|
+
except Exception as e:
|
|
297
|
+
self.logger.debug(f"Error checking deployment state: {e}")
|
|
298
|
+
return False
|
|
299
|
+
|
|
300
|
+
def _save_deployment_state(self, agent_count: int) -> None:
|
|
301
|
+
"""Save current deployment state.
|
|
302
|
+
|
|
303
|
+
Args:
|
|
304
|
+
agent_count: Number of agents deployed
|
|
305
|
+
"""
|
|
306
|
+
state_file = self._get_deployment_state_path()
|
|
307
|
+
agents_dir = Path.cwd() / ".claude" / "agents"
|
|
308
|
+
|
|
309
|
+
try:
|
|
310
|
+
import time
|
|
311
|
+
|
|
312
|
+
from claude_mpm import __version__
|
|
313
|
+
|
|
314
|
+
# Calculate deployment hash
|
|
315
|
+
deployment_hash = self._calculate_deployment_hash(agents_dir)
|
|
316
|
+
|
|
317
|
+
# Create state data
|
|
318
|
+
state_data = {
|
|
319
|
+
"version": __version__,
|
|
320
|
+
"agent_count": agent_count,
|
|
321
|
+
"deployment_hash": deployment_hash,
|
|
322
|
+
"deployed_at": time.time(),
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
# Ensure directory exists
|
|
326
|
+
state_file.parent.mkdir(parents=True, exist_ok=True)
|
|
327
|
+
|
|
328
|
+
# Write state file
|
|
329
|
+
state_file.write_text(json.dumps(state_data, indent=2))
|
|
330
|
+
self.logger.debug(f"Saved deployment state: {agent_count} agents")
|
|
331
|
+
|
|
332
|
+
except Exception as e:
|
|
333
|
+
self.logger.debug(f"Error saving deployment state: {e}")
|
|
334
|
+
|
|
214
335
|
def setup_agents(self) -> bool:
|
|
215
336
|
"""Deploy native agents to .claude/agents/."""
|
|
216
337
|
try:
|
|
338
|
+
# SIMPLE CHECK: If agents already exist from reconciliation, skip deployment
|
|
339
|
+
# This ensures reconciliation's user-configured agents are never overwritten
|
|
340
|
+
agents_dir = Path.cwd() / ".claude" / "agents"
|
|
341
|
+
if agents_dir.exists():
|
|
342
|
+
existing_agents = list(agents_dir.glob("*.md"))
|
|
343
|
+
if len(existing_agents) > 0:
|
|
344
|
+
# Reconciliation already deployed agents - skip
|
|
345
|
+
self.logger.debug(
|
|
346
|
+
f"Skipping setup_agents: {len(existing_agents)} agents already deployed by reconciliation"
|
|
347
|
+
)
|
|
348
|
+
if self.project_logger:
|
|
349
|
+
self.project_logger.log_system(
|
|
350
|
+
f"Agents already deployed via reconciliation: {len(existing_agents)} agents",
|
|
351
|
+
level="DEBUG",
|
|
352
|
+
component="deployment",
|
|
353
|
+
)
|
|
354
|
+
return True
|
|
355
|
+
|
|
217
356
|
if self.project_logger:
|
|
218
357
|
self.project_logger.log_system(
|
|
219
358
|
"Starting agent deployment", level="INFO", component="deployment"
|
|
@@ -239,6 +378,12 @@ class ClaudeRunner:
|
|
|
239
378
|
|
|
240
379
|
# Set Claude environment
|
|
241
380
|
self.deployment_service.set_claude_environment()
|
|
381
|
+
|
|
382
|
+
# Save deployment state for future runs
|
|
383
|
+
agents_dir = Path.cwd() / ".claude" / "agents"
|
|
384
|
+
total_agents = len(list(agents_dir.glob("*.md")))
|
|
385
|
+
self._save_deployment_state(total_agents)
|
|
386
|
+
|
|
242
387
|
return True
|
|
243
388
|
self.logger.info("All agents already up to date")
|
|
244
389
|
if self.project_logger:
|
|
@@ -247,6 +392,13 @@ class ClaudeRunner:
|
|
|
247
392
|
level="INFO",
|
|
248
393
|
component="deployment",
|
|
249
394
|
)
|
|
395
|
+
|
|
396
|
+
# Save deployment state even if no changes
|
|
397
|
+
agents_dir = Path.cwd() / ".claude" / "agents"
|
|
398
|
+
if agents_dir.exists():
|
|
399
|
+
total_agents = len(list(agents_dir.glob("*.md")))
|
|
400
|
+
self._save_deployment_state(total_agents)
|
|
401
|
+
|
|
250
402
|
return True
|
|
251
403
|
|
|
252
404
|
except PermissionError as e:
|
|
@@ -730,7 +882,7 @@ Use these agents to delegate specialized work via the Task tool.
|
|
|
730
882
|
import json
|
|
731
883
|
|
|
732
884
|
settings = json.loads(settings_file.read_text())
|
|
733
|
-
if settings.get("activeOutputStyle") == "
|
|
885
|
+
if settings.get("activeOutputStyle") == "Claude MPM":
|
|
734
886
|
# Already active, check if file exists
|
|
735
887
|
output_style_file = (
|
|
736
888
|
Path.home() / ".claude" / "output-styles" / "claude-mpm.md"
|
|
@@ -740,7 +892,7 @@ Use these agents to delegate specialized work via the Task tool.
|
|
|
740
892
|
"Output style 'Claude MPM' already deployed and active"
|
|
741
893
|
)
|
|
742
894
|
return
|
|
743
|
-
except Exception:
|
|
895
|
+
except Exception: # nosec B110
|
|
744
896
|
pass # Continue with deployment if we can't read settings
|
|
745
897
|
|
|
746
898
|
# Read the OUTPUT_STYLE.md content if it exists
|