plugins/claude-code-fitness-hermit/skills/weekly-coaching-patterns/SKILL.md
Interval scheduled check — detects multi-session cardiac-drift trends across recent compiled activity notes. Runs weekly via the scheduled-checks routine; findings are routed through the proposal pipeline as Evidence Source: scheduled-check/weekly-coaching-patterns.
npx skillsauth add gtapps/claude-code-hermit weekly-coaching-patternsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Scheduled-check skill: reads the last 4 compiled/activity-*.md artifacts for steady sessions and detects whether cardiac drift is trending upward over time. Returns a fixed findings block for reflect-scheduled-checks to classify and route.
Contract: idempotent, read-only, no self-scheduling, short-running. Returns findings or silence — never creates proposals itself.
Glob activity notes. Use Glob on .claude-code-hermit/compiled/activity-*.md. If no files match, output the zero-findings block (Step 5, no-trend path) and stop.
Read and filter. For each matched file, Read it. Keep only entries where the YAML frontmatter has type: activity-note AND session_kind: steady. Sort by created date descending (most recent first). Take the 4 most recent steady sessions.
If fewer than 4 steady sessions exist across all artifacts, output the zero-findings block and stop. This is expected on weeks with predominantly interval or strength training — insufficient data is not an error.
Extract cardiac-drift values. Working oldest-to-newest (reverse the most-recent-first list), for each of the 4 steady sessions parse the body for a line starting with Cardiac drift:. Extract the signed integer bpm value, preserving the sign (+12 → +12, -5 → -5). A negative value means HR fell over the session (an improving signal) and must compare as less than any positive value — never strip the sign to magnitude. Treat a missing line as no data and exclude that session from the series.
If fewer than 4 values are extractable after exclusions, output the zero-findings block and stop.
Evaluate the drift trend. A trend holds when the 4 values are strictly increasing oldest-to-newest — every value greater than the one immediately before it (all 3 adjacent pairs rising). A single flat or falling pair breaks the trend. This is a deliberately strict bar for v1: a clean monotonic rise is unambiguous and avoids false positives from noisy week-to-week variation.
Anti-duplication guard: emit a finding ONLY for this quantitative upward numeric trend across the 4-session bpm series. Do NOT emit on label recurrence alone.
Output the findings block. Always output a plain-text findings block to stdout, regardless of outcome. reflect-scheduled-checks classifies the result from this block.
Trend holds (4 values strictly rising):
weekly-coaching-patterns findings — <YYYY-MM-DD>
Coaching patterns: 1
- Coaching pattern detected [cardiac-drift-high]: cardiac drift rising across 4 consecutive steady sessions (<V1>→<V2>→<V3>→<V4> bpm) — check pacing strategy and hydration; consider an easy recovery run next session
Replace <V1>…<V4> with the four drift values oldest-to-newest (each rendered with its sign, e.g. +6), and <YYYY-MM-DD> with today's date.
No trend (including insufficient data):
weekly-coaching-patterns findings — <YYYY-MM-DD>
No actionable findings.
The [cardiac-drift-high] label reuses the seed vocabulary from activity-deep-dive step 7b — no new label is introduced.
Four steady sessions, oldest-to-newest, with drift lines +4, +7, +9, +13:
weekly-coaching-patterns findings — 2026-05-31
Coaching patterns: 1
- Coaching pattern detected [cardiac-drift-high]: cardiac drift rising across 4 consecutive steady sessions (+4→+7→+9→+13 bpm) — check pacing strategy and hydration; consider an easy recovery run next session
The same four sessions with values +4, +7, +6, +13 do not hold (the +7→+6 pair falls), so the output is the No actionable findings. block. A series of -3, +1, +5, +9 does hold (every pair rises; the leading negative compares as smallest).
The following metrics follow the same steady-session pattern and would add items to the Coaching patterns list. NOT implemented in v1 — cardiac drift alone proves the mechanism end-to-end.
Pace/HR efficiency: X.XX min·km⁻¹·bpm⁻¹ from each artifact; detect a strictly declining trend across the 4 steady sessions. Label: efficiency-regression.Recovery: N/5 from each artifact (applies to both steady and interval sessions); detect a strictly hardening trend across the 4 sessions. Label: recovery-insufficient.reflect-scheduled-checks to classify and route. Runtime state (last_run, consecutive_empty, etc.) is written by reflect-scheduled-checks to state/reflection-state.json → scheduled_checks.weekly-coaching-patterns — not by this skill./claude-code-fitness-hermit:hatch step 8c via a scheduled_checks config entry (interval_days: 7). The core daily scheduled-checks routine fires reflect-scheduled-checks, which picks it up once 7+ days have elapsed since last_run.[cardiac-drift-high] label has two upstream producers. activity-deep-dive step 7b writes single-session observations (graduated to proposals via reflect's current-session path); this skill emits on a multi-session trend. Both flow into proposal-triage, which dedups — so a triage DUPLICATE verdict here is expected behavior, not a bug.tools
Presence history & tracker-health report — current home/away state, reliability, recent arrival/departure transitions, and activity patterns for person/device_tracker entities. Use when the operator asks about presence history or when a presence-dependent automation (locks, alarm, vacuum, climate) misbehaves.
development
Evening house brief — end-of-day security check, device status, and energy snapshot. Runs as a daily routine at 22:30 or on demand.
tools
Browse and explain the hermit's Home Assistant automations — list by topic, filter by keyword with plain-language YAML explanations, or sort by last-fired. Read-only. Use when the operator asks "what automations do I have / what does this one do / which haven't fired."
tools
On-demand HA-voice brainstorm — reads entity inventory, automation/script listings, and operator intent to surface at most 2 capability-gap ideas, each gated by proposal-triage before becoming a PROP. Invoke when the operator asks "what automations am I missing?", "any coverage gaps?", or "brainstorm improvements". Never runs autonomously.