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-checkmalware-scannetwork-diagnosticswifi-debugbluetooth-debugdisk-usageperformance-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 exceptdaily-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.shfrom 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.