# Daily Health Report

> 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.

- Skill: `dennisonbertram/daily-health-report` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add dennisonbertram/daily-health-report`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dennisonbertram/daily-health-report/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: dennisonbertram (https://skillmd.com/u/dennisonbertram)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dennisonbertram/daily-health-report

---


# 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

1. Ensure the data and reports directories exist:
   `mkdir -p ~/.mac-guardian/data ~/.mac-guardian/reports`.

2. 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.

3. 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`.

4. Open the report: `bash ${CLAUDE_PLUGIN_ROOT}/scripts/open-report.sh`.

5. Also write a tiny envelope for the orchestrator itself so it appears in history:

   ```json
   {
     "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`.

6. 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.

