- OP-1: Implement reactive _wait_session_gone in lib.sh and stop_session.sh with set -e || true guard - OP-2: Event-driven MQTT subscribe handshake with sub_pid liveness in delegate-job - OP-3: Replace CPU time.sleep(0.5) spin with threading.Event wait in reconcile.sh - OP-4: Define mam_tmux dispatcher targeting resolved _REAL_TMUX_PATH to prevent recursion - OP-6 & OP-7: Add token variables and bash version source check in lib.sh - Integrate approved optimization plan and PASS review reports from all agents
6.7 KiB
6.7 KiB
📑 Multi-Agent Mux (MAM) Skill Optimization Plan
Based on the joint code audits conducted by Reviewer Cline and Creator Claude, this plan identifies the structural inefficiencies, duplicate code paths, and latent portability risks in the MAM skills library (.agents/skills/), and provides a phased execution blueprint for refactoring and optimization.
📊 Summary of Optimization Focus Areas
The audit of all 8 shell entry points (~3,422 lines) revealed three key areas where the skills codebase can be significantly optimized:
- Sleeps to Handshakes (Timing Bets): Replacing fixed timing loops with event-driven or reactive waits (e.g., reactive tmux stop, MQTT suback event check).
- Structural Consolidation (DRY principle): Reducing code duplication across scripts, such as 7 identical copies of the SQLite/YAML loader block and 4 copies of tmux server resolution.
- Portability & Observability: Guarding against zsh path resolution anomalies when sourcing
lib.sh, and eliminating silent failures inside monitor loops.
🛠️ Detailed Optimization Items
1. Inefficient Polling & Sleep Reductions
🚀 OP-1: Reactive Tmux Graceful Stopping (stop_session.sh)
- Location:
stop_session.sh:193,200 - Defect: Graceful stopping uses fixed sleeps (
sleep 3after sending exitkey,sleep 5after kill-session). Every stop operation incurs an unconditional 3–8 s delay, even if the agent session exits in milliseconds. - Optimization: Implement
_wait_session_gonehelper inlib.shthat pollstmux has-sessionat a high frequency (e.g., every 250 ms) up to a deadline. - Outcome: Reduces average session stop time from 8 s to <0.3 s under ordinary circumstances.
🚀 OP-2: MQTT Subscriber Event-Driven Handshake (delegate-job)
- Location:
multi-agent-mux-delegate-job:119,205 - Defect: Sponsoring a subscriber runs in the background, followed by a blind
sleep 1to win the race against the agent's startup event publish. If HiveMQ CONNACK/SUBACK is slow, the start event is lost; if fast, 1 s is wasted. - Optimization: Modify
job_subscriber.pyto write a sentinel line (e.g.SUBSCRIBED <topic>) to its log file on a successful SUBSCRIBE callback. Replacesleep 1in the wrapper with a fast-poll loop matching this sentinel. - Outcome: Eliminates event-loss race conditions over WAN brokers, while dropping the startup delay to the physical minimum.
🚀 OP-3: Main Event Loop Pacing (reconcile.sh)
- Location:
reconcile.sh:243-256(MQTT client wait) - Defect: The foreground loop spins on a CPU-wake polling model
while True: time.sleep(0.5)just to compare time differentials for deadlines, bypassing python's event capabilities. - Optimization: Use a
threading.Event()wait state (stop.wait(timeout=next_deadline - now)) to suspend the main thread until a true timeout occurs or an interrupt event fires. - Outcome: Zero-CPU footprint while idling.
2. Code Duplication & Modularization (DRY)
🚀 OP-4: Unify Divergent Tmux Server Resolvers
- Location:
lib.sh:1043-1046,create_session.sh:212,delegate-job:347 - Defect: String resolution for tmux servers (
local_tmux="tmux -L $TMUX_SERVER_NAME") is duplicated 4 times, leading to potential word-splitting hazards (shellcheck SC2086). - Optimization: Extract a single, canonical
mam_tmux()dispatch function intolib.shthat safely handles server arguments and exports them cleanly.
🚀 OP-5: Single-Source the YAML / SQLite Load Boilerplate (7× Duplicate)
- Location:
lib.sh(3 sites),stop_session.sh:87,status.sh:42,update_yaml_resumed.sh:66,reconcile.sh:298 - Defect: The ~20 lines of Python heredoc code that dynamically queries merged YAML and SQLite state is copy-pasted in 7 separate files, each with slightly drifted error policies.
- Optimization: Implement
load_state_jsoninlib.shwhich executes the Python boilerplate exactly once and emits the state to stdout as a JSON document. Script files can then parse this single JSON document.
🚀 OP-6: Consolidate TUI Ready / Dialog Tokens
- Location:
lib.sh:1058andlib.sh:1205 - Defect: Regular expressions for Claude ready-states and trust dialog tokens are duplicated. Updates to one block (e.g. for new Claude versions) can lead to drift and prompt-lock bugs.
- Optimization: Declare central constants (
_MAM_DIALOG_TOKENS,_MAM_READY_TOKENS_CLAUDE) at the top oflib.shand refer to them.
3. Portability & Robustness
🚀 OP-7: Guard against Non-Bash Sourced Environments
- Location:
lib.sh:17and all 8 script headers - Defect: If a user runs a zsh session and types
source .agents/skills/lib.sh,${BASH_SOURCE[0]}resolves to empty, leading to silent path resolution failure. - Optimization: Add a zsh-aware fallback detection block for the parent script path (
ZSH_VERSIONcheck) or print an explicit exit message warning users not to source from a foreign shell.
🚀 OP-8: Make Degraded Mode Failures Observable (reconcile.sh)
- Location:
reconcile.sh:269 - Defect: Fallback polling mode (
bash reconcile.sh --once --emit-diff >/dev/null 2>&1 || true) discards stderr and exit codes. If database locks or SQLite faults occur, the monitor stays silently broken. - Optimization: Capture stdout/stderr of the one-off run. Log errors and exit the loop for supervisor restart if 5 consecutive runs fail.
📅 Actionable Optimization Roadmap
We recommend executing these optimizations in three sequential phases:
gantt
title MAM Skill Optimization Roadmap
dateFormat YYYY-MM-DD
section Phase 1 (Latency)
OP-1 (Reactive Tmux Stop) :active, p1, 2026-07-12, 1d
OP-2 (MQTT Subscribe Handshake):active, p2, after p1, 2d
OP-3 (Event Loop CPU Wait) :p3, after p2, 1d
section Phase 2 (DRY & Consolidate)
OP-4 (Tmux Dispatcher) :p4, 2026-07-15, 1d
OP-5 (JSON Loader Helper) :p5, after p4, 2d
OP-6 (Ready Token Constants) :p6, after p5, 1d
section Phase 3 (Portability & Safety)
OP-7 (zsh Source Guard) :p7, 2026-07-19, 1d
OP-8 (Reconcile Observability) :p8, after p7, 1d
📋 Definition of Done (DoD) for Optimizations
- Shell Linting:
bash -n <script>passes; zero newshellcheckwarnings. - Functional verification: All tests in the prompt-lock test suite (T-A through T-E) pass on an isolated scratch server (
-L sks-test). - Drift-Free:
reconcile.shcorrectly resolves running tmux sessions after code unification. - Interactive testing: Graceful stop runs successfully and reports exit time under 1 s.