# SKILL.md

```
name: macos-system-stats
description: "Get macOS system resource utilization including CPU, memory, disk, and network usage in real-time or summary format."
homepage: https://support.apple.com/guide/terminal/welcome/mac
metadata: { 
  "openclaw": { 
    "emoji": "📊", 
    "requires": { 
      "bins": ["top", "vm_stat", "df", "iostat", "netstat", "ps"] 
    } 
  } 
}

```

# macOS System Stats Skill

Monitor and report macOS system resource utilization including CPU, memory, disk I/O, and network statistics.

## When to Use

✅ **USE this skill when:**
- "What's my CPU usage?"
- "How much memory is available?"
- "Check disk space on my Mac"
- "Monitor system performance"
- "Get a system health overview"

❌ **DON'T use this skill when:**
- Windows/Linux systems → use platform-specific tools
- Detailed process analysis → use Activity Monitor directly
- Historical trends → use system monitoring tools
- Remote server monitoring → use appropriate remote tools

## Commands

### Quick System Overview
```bash
./system-stats.sh --overview
```

### Specific Resource Checks
```bash
# CPU usage only
./system-stats.sh --cpu

# Memory usage only  
./system-stats.sh --memory

# Disk usage only
./system-stats.sh --disk

# Network stats only
./system-stats.sh --network

# Top processes by CPU
./system-stats.sh --top-cpu

# Top processes by memory
./system-stats.sh --top-mem
```

### Real-time Monitoring
```bash
# Live monitoring (5 second updates)
./system-stats.sh --live --duration=30

# Custom interval
./system-stats.sh --live --interval=2 --duration=60
```

### Output Formats
```bash
# JSON output for parsing
./system-stats.sh --overview --format=json

# Simple text (default)
./system-stats.sh --overview --format=text
```

## Notes

- All commands work on macOS without additional dependencies
- Real-time monitoring requires appropriate permissions
- JSON output is machine-readable for automation
- Duration values are in seconds
- Default live monitoring interval is 5 seconds

# 命令脚本

## system-stats.sh
```

#!/bin/bash

# macOS System Stats - 获取系统资源利用率
# 支持 JSON 和文本格式输出

set -euo pipefail

# 默认参数
FORMAT="text"
HELP=false

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        --format|-f)
            FORMAT="$2"
            shift 2
            ;;
        --help|-h)
            HELP=true
            shift
            ;;
        *)
            echo "未知参数: $1" >&2
            exit 1
            ;;
    esac
done

if [ "$HELP" = true ]; then
    cat << EOF
用法: $0 [--format text|json]

选项:
  --format, -f    输出格式 (text 或 json)
  --help, -h      显示帮助信息

示例:
  $0                    # 默认文本格式
  $0 --format json     # JSON 格式输出
EOF
    exit 0
fi

# 获取 CPU 使用率 (使用 top 命令)
get_cpu_usage() {
    # 使用 top 获取 CPU 使用率，排除空闲时间
    local cpu_idle=$(top -l 1 | grep "CPU usage" | awk '{print $7}' | sed 's/%//')
    local cpu_used=$(echo "100 - $cpu_idle" | bc -l)
    printf "%.1f" $cpu_used
}

# 获取内存使用情况
get_memory_info() {
    local memory_info=$(vm_stat)
    local page_size=$(echo "$memory_info" | grep "page size" | awk '{print $8}')
    
    # 提取各种内存数据（单位：页）
    local pages_free=$(echo "$memory_info" | grep "Pages free" | awk '{print $3}' | sed 's/\.//')
    local pages_active=$(echo "$memory_info" | grep "Pages active" | awk '{print $3}' | sed 's/\.//')
    local pages_inactive=$(echo "$memory_info" | grep "Pages inactive" | awk '{print $3}' | sed 's/\.//')
    local pages_wired=$(echo "$memory_info" | grep "Pages wired down" | awk '{print $4}' | sed 's/\.//')
    
    # 转换为字节
    local free_bytes=$((pages_free * page_size))
    local active_bytes=$((pages_active * page_size))
    local inactive_bytes=$((pages_inactive * page_size))
    local wired_bytes=$((pages_wired * page_size))
    
    # 总内存使用量（活跃 + 非活跃 + 有线）
    local used_bytes=$((active_bytes + inactive_bytes + wired_bytes))
    
    # 获取总物理内存
    local total_bytes=$(sysctl hw.memsize | awk '{print $2}')
    
    # 计算使用百分比
    local mem_percent=$(echo "scale=1; $used_bytes * 100 / $total_bytes" | bc)
    
    if [ "$FORMAT" = "json" ]; then
        echo "\"memory_total_bytes\": $total_bytes,"
        echo "\"memory_used_bytes\": $used_bytes,"
        echo "\"memory_percent\": $mem_percent"
    else
        # 转换为 GB 显示
        local total_gb=$(echo "scale=1; $total_bytes / 1024 / 1024 / 1024" | bc)
        local used_gb=$(echo "scale=1; $used_bytes / 1024 / 1024 / 1024" | bc)
        echo "Memory: ${used_gb}GB / ${total_gb}GB (${mem_percent}%)"
    fi
}

# 获取磁盘使用情况
get_disk_info() {
    if [ "$FORMAT" = "json" ]; then
        local disk_info=$(df -k / | tail -1 | awk '{
            total = $2 * 1024;
            used = $3 * 1024;
            percent = $5;
            gsub(/%/, "", percent);
            printf "\"disk_total_bytes\": %d,\n\"disk_used_bytes\": %d,\n\"disk_percent\": %.1f", total, used, percent
        }')
        echo "$disk_info"
    else
        df -h / | tail -1 | awk '{printf "Disk: %s / %s (%s)\n", $3, $2, $5}'
    fi
}

# 主函数
main() {
    local cpu_usage=$(get_cpu_usage)
    
    if [ "$FORMAT" = "json" ]; then
        echo "{"
        echo "\"cpu_percent\": $cpu_usage,"
        get_memory_info
        echo ","
        get_disk_info
        echo "}"
    else
        echo "=== macOS 系统资源利用率 ==="
        echo "CPU: ${cpu_usage}%"
        get_memory_info
        get_disk_info
        echo ""
        echo "数据更新时间: $(date '+%Y-%m-%d %H:%M:%S')"
    fi
}

main

```