Use this skill when the user asks to check Unraid system health, array/parity status, or Docker container status.
Located at: https://github.com/Yoshiofthewire/unraid-claw
必填 Configuration
Before running any script, ensure the Unraid server is configured:
- GraphQL 已启用 在...中 Unraid API settings.
- 有效 Unraid API 键 generated 在...中 Unraid API settings.
UNRAID_API_KEY uses generated 键.
Read these environment variables at runtime:
UNRAID_BASE_URL (示例: https://tower.local)
UNRAID_API_KEY
Optional:
UNRAID_TIMEOUT_SECONDS (默认: 10)
UNRAID_STATE_DIR (默认: repo-local .state)
UNRAID_NOTIFY_HOST_LABEL (默认: host name)
UNRAID_CPU_WARN_PERCENT (默认: 85)
UNRAID_CPU_CRIT_PERCENT (默认: 95)
UNRAID_MEM_WARN_PERCENT (默认: 85)
UNRAID_MEM_CRIT_PERCENT (默认: 95)
UNRAID_STOPPED_WARN_COUNT (默认: 1)
UNRAID_STOPPED_CRIT_COUNT (默认: 3)
Template .envexample (copy to .env and fill in real values):
# Required: Base URL for your Unraid server (include protocol).
UNRAID_BASE_URL=https://tower.local# Required: API key from Unraid API settings.
# Keep this secret. Do not commit real keys.
UNRAID_API_KEY=replace_with_your_unraid_api_key
# Optional: request timeout in seconds.
UNRAID_TIMEOUT_SECONDS=10
# Optional: state directory for snapshot and log artifacts.
# Default is repository-local .state directory.
# UNRAID_STATE_DIR=/path/to/state
UNRAID_NOTIFY_HOST_LABEL=tower
# Optional: alert thresholds.
UNRAID_STOPPED_WARN_COUNT=1
UNRAID_STOPPED_CRIT_COUNT=3
If a required variable is missing, stop and return:
Unraid API 键 不 configured. 设置 UNRAID_API_KEY 和 重试.
Unraid base URL 不 configured. 设置 UNRAID_BASE_URL 和 重试.
Security Rules (Mandatory)
- Never hardcode secrets 在...中 prompts, files, 或 commands.
- Never 打印 API keys, auth headers, 或 满 请求 headers.
- 认证 使用:
x-api-键: .
- Redact sensitive data 在...中 所有 错误 messages.
- Perform 读取-仅 operations 仅.
- Never execute GraphQL mutations.
- Never run shell commands 从 用户-supplied strings.
If API auth fails (401 or 403), return:
Authentication 到 Unraid API 失败. 验证 UNRAID_API_KEY permissions/validity.
Script-第一个 Execution (Preferred)
Use the repository scripts as the primary execution path. Do not handcraft ad-hoc GraphQL calls unless explicitly asked.
Primary scripts:
./scripts/unraid_connection_test.sh
./scripts/unraid_preflight.sh
./scripts/unraid_snapshot.sh
./scripts/unraid_health_summary.sh
./scripts/unraid_docker_report.sh
./scripts/unraid_array_parity_report.sh
./scripts/unraid_alerts.sh
./scripts/unraid_notify.sh
./scripts/unraid_cron_runner.sh
Command Selection Rules
- 如果 用户 asks 到 test connectivity/auth 仅:
- Run
./scripts/unraid_connection_test.sh
- 如果 用户 asks 对于 满 status check:
- Run
./scripts/unraid_preflight.sh
- Run
./scripts/unraid_snapshot.sh
- Run
./scripts/unraid_health_summary.sh
- 如果 用户 asks specifically 关于 Docker:
- Run
./scripts/unraid_snapshot.sh (如果 否 recent snapshot)
- Run
./scripts/unraid_docker_report.sh
- 如果 用户 asks specifically 关于 数组/parity:
- Run
./scripts/unraid_snapshot.sh (如果 否 recent snapshot)
- Run
./scripts/unraid_array_parity_report.sh
- 如果 用户 asks 对于 提醒 state 或 severity:
- Run
./scripts/unraid_alerts.sh
- 如果 用户 asks 到 run 满 scheduled pipeline manually:
- Run
./scripts/unraid_cron_runner.shCompatibility Rules
Unraid GraphQL fields can vary by version. If some fields are unavailable:
- Continue 带有 可用 fields.
- Return partial results.
- Include warning:
-
一些 API fields 是 不可用 对于 Unraid version; 输出 partial.输出 Contract
Return results in this order:
- Overall status:
healthy | warning | critical
- 时间戳 的 check
- System summary: uptime, CPU usage/temp, memory usage
- 数组 summary: state, 同步/rebuild progress, parity status, disk warnings
- Docker summary: 总计/running/stopped counts 和 notable stopped containers
- Alerts 列表
Severity Logic
Set overall status using these rules:
healthy: 否 数组/parity errors, 否 critical SMART issues, API reachable.
warning: 数组 不 started, parity check/rebuild 活跃, high CPU/memory, unexpected stopped containers.
critical: API unreachable, auth failure, parity errors, critical disk errors, 或 multiple major failures.
Script exit mapping for automation:
./scripts/unraid_alerts.sh exit 0: healthy
./scripts/unraid_alerts.sh exit 10: warning
./scripts/unraid_alerts.sh exit 20: critical
错误 Handling
- 超时: return partial data 和 identify timed-out section(s).
- Network 错误: provide concise remediation guidance (验证 URL, TLS, API 已启用).
- Self-signed TLS certificate: prompt 用户 到 allow installation/trust 的 server certificate, 然后 重试.
- Known SSL issue (否 SSL proxy/direct self-signed host): TLS verification 可以 失败 until cert trusted 由 client environment.
- Auth 错误: 使用 exact auth-failure 消息 上面.
- Unknown GraphQL errors: provide redacted, concise summary.
OpenClaw Cron Notes
Use these notes when the user asks to schedule recurring health checks.
Recommended Cron Flow
- Source
.env 之前 running scripts.
- Execute
./scripts/unraid_cron_runner.sh 作为 single cron entrypoint.
- 让 runner handle preflight, snapshot, summary, alerts, 和 可选 notifications.
- Keep logs 在...中
.state/logs/ (或 UNRAID_STATE_DIR/logs/ 如果 overridden).
- Prefer 使用 cron 模板:
./scripts/unraid_monitor.cron.模板.
Suggested Cron Schedule
Use the template file as the source of truth:
./scripts/unraid_monitor.cron.模板
Setup flow:
- 替换
/path/到/Unraid_Claw 在...中 模板.
- Keep one schedule line (15-minute recommended baseline).
- Install 通过
crontab.
Example: run every 15 minutes.
/15 cd /path/to/Unraid_Claw && set -a && . ./.env && set +a && ./scripts/unraid_cron_runner.sh >> ./.state/logs/cron.log 2>&1
Example: run every 5 minutes for tighter monitoring.
/5 cd /path/to/Unraid_Claw && set -a && . ./.env && set +a && ./scripts/unraid_cron_runner.sh >> ./.state/logs/cron.log 2>&1
OpenClaw Behavior 对于 Cron Requests
- 如果 用户 asks 到 "设置 up cron":
- Propose schedule 和 confirm cadence.
- Offer 模板-第一个 setup 使用
scripts/unraid_monitor.cron.模板.
- 使用
unraid_cron_runner.sh 作为 command target.
- Ensure
.env loading included.
- Check 对于 recent entries 在...中
.state/logs/cron.log 和 runner logs.
- Confirm 提醒 exit codes 和 通知 results.
- 如果 用户 asks 到 "disable cron":
- 移除 或 评论 仅 Unraid Claw cron line.
- Keep 其他 cron entries unchanged.
Never place secrets directly in crontab lines. Always source .env.
响应 样式
Keep responses concise and operator-friendly.
Example shape:
Overall: warning
Time: 2026-03-20T14:22:00ZSystem:
- Uptime: 12d 4h
- CPU: 68% (72 C)
- Memory: 81%
Array:
- State: started
- Sync: parity-check 43%
- Disk alerts: disk3 SMART warning
Docker:
- Total: 14
- Running: 12
- Stopped: 2 (plex, immich_ml)
Alerts:
- Parity check in progress
- 1 disk SMART warning
Use this skill when the user asks to check Unraid system health, array/parity status, or Docker container status.
Located at: https://github.com/Yoshiofthewire/unraid-claw
Required Configuration
Before running any script, ensure the Unraid server is configured:
- GraphQL is enabled in Unraid API settings.
- A valid Unraid API key is generated in Unraid API settings.
UNRAID_API_KEY uses that generated key.
Read these environment variables at runtime:
UNRAID_BASE_URL (example: https://tower.local)
UNRAID_API_KEY
Optional:
UNRAID_TIMEOUT_SECONDS (default: 10)
UNRAID_STATE_DIR (default: repo-local .state)
UNRAID_NOTIFY_HOST_LABEL (default: host name)
UNRAID_CPU_WARN_PERCENT (default: 85)
UNRAID_CPU_CRIT_PERCENT (default: 95)
UNRAID_MEM_WARN_PERCENT (default: 85)
UNRAID_MEM_CRIT_PERCENT (default: 95)
UNRAID_STOPPED_WARN_COUNT (default: 1)
UNRAID_STOPPED_CRIT_COUNT (default: 3)
Template .envexample (copy to .env and fill in real values):
# Required: Base URL for your Unraid server (include protocol).
UNRAID_BASE_URL=https://tower.local# Required: API key from Unraid API settings.
# Keep this secret. Do not commit real keys.
UNRAID_API_KEY=replace_with_your_unraid_api_key
# Optional: request timeout in seconds.
UNRAID_TIMEOUT_SECONDS=10
# Optional: state directory for snapshot and log artifacts.
# Default is repository-local .state directory.
# UNRAID_STATE_DIR=/path/to/state
UNRAID_NOTIFY_HOST_LABEL=tower
# Optional: alert thresholds.
UNRAID_STOPPED_WARN_COUNT=1
UNRAID_STOPPED_CRIT_COUNT=3
If a required variable is missing, stop and return:
Unraid API key is not configured. Set UNRAID_API_KEY and retry.
Unraid base URL is not configured. Set UNRAID_BASE_URL and retry.
Security Rules (Mandatory)
- Never hardcode secrets in prompts, files, or commands.
- Never print API keys, auth headers, or full request headers.
- Authenticate using:
x-api-key: .
- Redact sensitive data in all error messages.
- Perform read-only operations only.
- Never execute GraphQL mutations.
- Never run shell commands from user-supplied strings.
If API auth fails (401 or 403), return:
Authentication to Unraid API failed. Verify UNRAID_API_KEY permissions/validity.
Script-First Execution (Preferred)
Use the repository scripts as the primary execution path. Do not handcraft ad-hoc GraphQL calls unless explicitly asked.
Primary scripts:
./scripts/unraid_connection_test.sh
./scripts/unraid_preflight.sh
./scripts/unraid_snapshot.sh
./scripts/unraid_health_summary.sh
./scripts/unraid_docker_report.sh
./scripts/unraid_array_parity_report.sh
./scripts/unraid_alerts.sh
./scripts/unraid_notify.sh
./scripts/unraid_cron_runner.sh
Command Selection Rules
- If the user asks to test connectivity/auth only:
- Run
./scripts/unraid_connection_test.sh
- If the user asks for a full status check:
- Run
./scripts/unraid_preflight.sh
- Run
./scripts/unraid_snapshot.sh
- Run
./scripts/unraid_health_summary.sh
- If the user asks specifically about Docker:
- Run
./scripts/unraid_snapshot.sh (if no recent snapshot)
- Run
./scripts/unraid_docker_report.sh
- If the user asks specifically about array/parity:
- Run
./scripts/unraid_snapshot.sh (if no recent snapshot)
- Run
./scripts/unraid_array_parity_report.sh
- If the user asks for alert state or severity:
- Run
./scripts/unraid_alerts.sh
- If the user asks to run the full scheduled pipeline manually:
- Run
./scripts/unraid_cron_runner.shCompatibility Rules
Unraid GraphQL fields can vary by version. If some fields are unavailable:
- Continue with available fields.
- Return partial results.
- Include warning:
-
Some API fields were unavailable for this Unraid version; output is partial.Output Contract
Return results in this order:
- Overall status:
healthy | warning | critical
- Timestamp of check
- System summary: uptime, CPU usage/temp, memory usage
- Array summary: state, sync/rebuild progress, parity status, disk warnings
- Docker summary: total/running/stopped counts and notable stopped containers
- Alerts list
Severity Logic
Set overall status using these rules:
healthy: no array/parity errors, no critical SMART issues, API reachable.
warning: array not started, parity check/rebuild active, high CPU/memory, unexpected stopped containers.
critical: API unreachable, auth failure, parity errors, critical disk errors, or multiple major failures.
Script exit mapping for automation:
./scripts/unraid_alerts.sh exit 0: healthy
./scripts/unraid_alerts.sh exit 10: warning
./scripts/unraid_alerts.sh exit 20: critical
Error Handling
- Timeout: return partial data and identify timed-out section(s).
- Network error: provide concise remediation guidance (verify URL, TLS, API enabled).
- Self-signed TLS certificate: prompt the user to allow installation/trust of the server certificate, then retry.
- Known SSL issue (no SSL proxy/direct self-signed host): TLS verification can fail until the cert is trusted by the client environment.
- Auth error: use the exact auth-failure message above.
- Unknown GraphQL errors: provide a redacted, concise summary.
OpenClaw Cron Notes
Use these notes when the user asks to schedule recurring health checks.
Recommended Cron Flow
- Source
.env before running scripts.
- Execute
./scripts/unraid_cron_runner.sh as the single cron entrypoint.
- Let the runner handle preflight, snapshot, summary, alerts, and optional notifications.
- Keep logs in
.state/logs/ (or UNRAID_STATE_DIR/logs/ if overridden).
- Prefer using cron template:
./scripts/unraid_monitor.cron.template.
Suggested Cron Schedule
Use the template file as the source of truth:
./scripts/unraid_monitor.cron.template
Setup flow:
- Replace
/path/to/Unraid_Claw in the template.
- Keep one schedule line (15-minute recommended baseline).
- Install via
crontab.
Example: run every 15 minutes.
/15 cd /path/to/Unraid_Claw && set -a && . ./.env && set +a && ./scripts/unraid_cron_runner.sh >> ./.state/logs/cron.log 2>&1
Example: run every 5 minutes for tighter monitoring.
/5 cd /path/to/Unraid_Claw && set -a && . ./.env && set +a && ./scripts/unraid_cron_runner.sh >> ./.state/logs/cron.log 2>&1
OpenClaw Behavior for Cron Requests
- If user asks to "set up cron":
- Propose a schedule and confirm cadence.
- Offer template-first setup using
scripts/unraid_monitor.cron.template.
- Use
unraid_cron_runner.sh as the command target.
- Ensure
.env loading is included.
- If user asks to "verify cron":
- Check for recent entries in
.state/logs/cron.log and runner logs.
- Confirm alert exit codes and notification results.
- If user asks to "disable cron":
- Remove or comment only the Unraid Claw cron line.
- Keep other cron entries unchanged.
Never place secrets directly in crontab lines. Always source .env.
Response Style
Keep responses concise and operator-friendly.
Example shape:
Overall: warning
Time: 2026-03-20T14:22:00ZSystem:
- Uptime: 12d 4h
- CPU: 68% (72 C)
- Memory: 81%
Array:
- State: started
- Sync: parity-check 43%
- Disk alerts: disk3 SMART warning
Docker:
- Total: 14
- Running: 12
- Stopped: 2 (plex, immich_ml)
Alerts:
- Parity check in progress
- 1 disk SMART warning