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