#!/usr/bin/env bash # PreToolUse / Agent (subagent spawn) — RAM-gate the fan-out. # The historic 8-9-way crash was RAM starvation, not CPU load; gate on FREE RAM. # Fail-open: if memory_pressure is unavailable/unparsable → allow. set -euo pipefail free=$(memory_pressure -Q 2>/dev/null | grep -oE 'free percentage: [0-9]+' | grep -oE '[0-9]+' || true) [ -z "${free:-}" ] && exit 0 if [ "$free" -lt 10 ]; then jq -n --arg f "$free" '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"deny",permissionDecisionReason:("Free RAM \($f)% (<10%): do NOT spawn more agents — the historic crash was RAM starvation from an 8-9-way fan-out. Wait for memory_pressure -Q to recover, then retry.")}}' elif [ "$free" -lt 20 ]; then jq -n --arg f "$free" '{hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"ask",permissionDecisionReason:("Free RAM \($f)% (<20%): near the fan-out ceiling. Confirm before adding another build/implementer agent (read-only recon agents are cheap).")}}' fi exit 0