Files
clawdbot/skills/claude-code-usage/scripts/monitor-usage.sh
James 36eb4a7b3b Add skills, learnings & memory updates (2026-01-26)
- New skills: clawddocs, claude-code-usage, summarize, homeassistant, humanizer, self-improving-agent
- Add .learnings/ for self-improvement tracking
- Document proaktive cron config (LRN-20260126-001)
- Update USER.md: Löchgau as former residence
- Update TOOLS.md: Peekaboo workaround
- Memory files for 2026-01-25 and 2026-01-26
2026-01-26 09:26:26 +01:00

118 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# Claude Code Usage Monitor
# Detects usage resets and sends notifications via Clawdbot
set -euo pipefail
STATE_FILE="${STATE_FILE:-/tmp/claude-usage-state.json}"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Get current usage (JSON format)
CURRENT=$("$SCRIPT_DIR/claude-usage.sh" --json --fresh 2>/dev/null)
if [ -z "$CURRENT" ]; then
echo "❌ Failed to fetch usage" >&2
exit 1
fi
# Extract current values using better JSON parsing
SESSION_NOW=$(echo "$CURRENT" | grep -A3 '"session"' | grep '"utilization"' | grep -o '[0-9]*')
WEEKLY_NOW=$(echo "$CURRENT" | grep -A3 '"weekly"' | grep '"utilization"' | grep -o '[0-9]*')
SESSION_RESETS=$(echo "$CURRENT" | grep -A3 '"session"' | grep '"resets_in"' | sed 's/.*"resets_in": "//;s/".*//')
WEEKLY_RESETS=$(echo "$CURRENT" | grep -A3 '"weekly"' | grep '"resets_in"' | sed 's/.*"resets_in": "//;s/".*//')
SESSION_NOW=${SESSION_NOW:-0}
WEEKLY_NOW=${WEEKLY_NOW:-0}
# Check if state file exists
if [ ! -f "$STATE_FILE" ]; then
# First run - save state and exit
cat > "$STATE_FILE" <<EOF
{
"session": $SESSION_NOW,
"weekly": $WEEKLY_NOW,
"last_check": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
echo "📊 Initial state saved. Monitoring started."
exit 0
fi
# Read previous state
SESSION_PREV=$(grep '"session"' "$STATE_FILE" | grep -o '[0-9]*')
WEEKLY_PREV=$(grep '"weekly"' "$STATE_FILE" | grep -o '[0-9]*')
SESSION_PREV=${SESSION_PREV:-0}
WEEKLY_PREV=${WEEKLY_PREV:-0}
# Detect resets (usage went down significantly)
SESSION_RESET=0
WEEKLY_RESET=0
# Session reset: if usage dropped by more than 10% AND is now <10%, or dropped by >20%
if [ "$SESSION_NOW" -lt "$SESSION_PREV" ]; then
if ([ "$SESSION_NOW" -lt 10 ] && [ "$SESSION_PREV" -gt 15 ]) || [ "$SESSION_NOW" -lt $((SESSION_PREV - 20)) ]; then
SESSION_RESET=1
fi
fi
# Weekly reset: if usage dropped by more than 10% AND is now <10%, or dropped by >20%
if [ "$WEEKLY_NOW" -lt "$WEEKLY_PREV" ]; then
if ([ "$WEEKLY_NOW" -lt 10 ] && [ "$WEEKLY_PREV" -gt 15 ]) || [ "$WEEKLY_NOW" -lt $((WEEKLY_PREV - 20)) ]; then
WEEKLY_RESET=1
fi
fi
# Send notifications if resets detected
if [ "$SESSION_RESET" -eq 1 ] || [ "$WEEKLY_RESET" -eq 1 ]; then
MESSAGE=""
if [ "$SESSION_RESET" -eq 1 ]; then
MESSAGE="🎉 *Claude Code Session Reset!*\n\n"
MESSAGE+="⏱️ Your 5-hour quota has reset\n"
MESSAGE+="📊 Usage: *${SESSION_NOW}%*\n"
MESSAGE+="⏰ Next reset: ${SESSION_RESETS}\n"
fi
if [ "$WEEKLY_RESET" -eq 1 ]; then
if [ -n "$MESSAGE" ]; then
MESSAGE+="\n---\n\n"
fi
MESSAGE+="🎊 *Claude Code Weekly Reset!*\n\n"
MESSAGE+="📅 Your 7-day quota has reset\n"
MESSAGE+="📊 Usage: *${WEEKLY_NOW}%*\n"
MESSAGE+="⏰ Next reset: ${WEEKLY_RESETS}\n"
fi
MESSAGE+="\nFresh usage available! 🦞"
# Send via clawdbot message tool
# Note: This script is typically run by Clawdbot cron, which will capture output
# and send it as a notification automatically. For manual testing, print to stdout.
echo -e "$MESSAGE"
echo "✅ Reset notification sent"
fi
# Update state file
cat > "$STATE_FILE" <<EOF
{
"session": $SESSION_NOW,
"weekly": $WEEKLY_NOW,
"last_check": "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
}
EOF
# Log current status
if [ "$SESSION_RESET" -eq 1 ]; then
echo "📊 Session: ${SESSION_PREV}% → ${SESSION_NOW}% (RESET)"
else
echo "📊 Session: ${SESSION_PREV}% → ${SESSION_NOW}%"
fi
if [ "$WEEKLY_RESET" -eq 1 ]; then
echo "📊 Weekly: ${WEEKLY_PREV}% → ${WEEKLY_NOW}% (RESET)"
else
echo "📊 Weekly: ${WEEKLY_PREV}% → ${WEEKLY_NOW}%"
fi