diff --git a/.claude/hooks/memory-guard.sh b/.claude/hooks/memory-guard.sh new file mode 100755 index 00000000..ebf3f4a4 --- /dev/null +++ b/.claude/hooks/memory-guard.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# 会话启动时的内存/进程守卫 +# 1. 检查可用内存,低于 2GB 时警告 +# 2. 检查是否有多个 claude 会话在运行 +# 输出 JSON 到 stdout,警告通过 additionalContext 注入 + +AVAILABLE_MB=$(awk '/^MemAvailable:/ {print int($2/1024)}' /proc/meminfo 2>/dev/null || echo "0") +CLAUDE_COUNT=$(pgrep -c -f "claude.*permission-mode" 2>/dev/null || echo "0") + +WARNINGS="" + +if [[ "$AVAILABLE_MB" -gt 0 && "$AVAILABLE_MB" -lt 2048 ]]; then + WARNINGS="${WARNINGS}- ⚠ 可用内存仅 ${AVAILABLE_MB}MB,建议关闭其他应用后再操作\n" +fi + +if [[ "$CLAUDE_COUNT" -gt 2 ]]; then + WARNINGS="${WARNINGS}- ⚠ 检测到 ${CLAUDE_COUNT} 个 claude 会话在运行,多会话可能导致 OOM\n" +fi + +if [[ -n "$WARNINGS" ]]; then + cat << EOF +{ + "continue": true, + "hookSpecificOutput": { + "hookEventName": "SessionStart", + "additionalContext": "## ⚠ 资源警告\n\n${WARNINGS}" + } +} +EOF +else + echo '{"continue": true}' +fi