| name | daily-health-report |
| description | This skill should be used when the user asks to "generate daily report", "mac health report", "show me my status", "open health dashboard", "daily mac check", or mentions a unified macOS status report. Orchestrates every claude-mac-guardian skill, aggregates today's JSON, renders a dark-mode HTML dashboard, and opens it in the default browser. |
daily-health-report
Orchestrator skill. Invokes every sibling skill in the suite, aggregates their JSON output, and renders a unified dashboard HTML file from template.html.
When to invoke
Trigger on phrases like: "generate daily report", "mac health report", "show me my status", "open health dashboard", "daily mac check".
Procedure
-
Ensure the data and reports directories exist:
mkdir -p ~/.mac-guardian/data ~/.mac-guardian/reports.
-
Invoke each collection skill, in this order, and wait for each to complete writing its JSON envelope. The list:
machine-security-check
malware-scan
network-diagnostics
wifi-debug
bluetooth-debug
disk-usage
performance-check
When running inside Claude Code, prefer invoking the skills via Claude's planner (one user-visible step per skill). If a skill fails, continue with the remaining ones — a single skill's failure must not block the dashboard.
-
Render the combined HTML report:
bash ${CLAUDE_PLUGIN_ROOT}/scripts/render.sh.
This reads all JSON files in ~/.mac-guardian/data/ dated today except daily-health-report-*.json, injects them into ${CLAUDE_PLUGIN_ROOT}/skills/daily-health-report/template.html, and writes ~/.mac-guardian/reports/report-<ISOdate>.html.
-
Open the report: bash ${CLAUDE_PLUGIN_ROOT}/scripts/open-report.sh.
-
Also write a tiny envelope for the orchestrator itself so it appears in history:
{
"skill": "daily-health-report",
"timestamp": "<ISO8601 UTC>",
"severity": "info",
"summary": "Aggregated N skill results for <ISOdate>.",
"findings": [],
"raw": { "report_path": "<path to HTML>" }
}
Write to ~/.mac-guardian/data/daily-health-report-<ISOdate>.json.
-
Report to the user:
- report path
- number of skills succeeded vs failed
- overall severity (derived by the dashboard itself — you do not need to recompute)
Retention
render.sh prunes reports/ to the most recent 30 HTML files. No pruning for data/ (small JSON files; leave history intact).
Template substitution
render.sh uses awk to substitute these sentinels in template.html:
__MG_MACHINE__ — scutil --get ComputerName
__MG_GENERATED__ — ISO-8601 UTC timestamp
__MG_DATE__ — today's ISO date
__MG_PAYLOAD__ — JSON array of all skill envelopes
No other transformation is done — the template is self-contained (Tailwind via CDN, vanilla JS rendering).
Handoff
- Do not call
render-single.sh from this orchestrator.
- Never re-run a skill that already has a JSON file for today unless the user explicitly asks to refresh.
Safety
- Read-only. No system state is modified.
- If a sibling skill prompts the user (none should by default), pass the prompt through verbatim.