← ClaudeAtlas

capture-activity-rpelisted

Captures RPE (1-10) and subjective notes when the operator replies to a strava-sync notification on any configured channel. Triggers on inbound channel messages matching RPE grammar while state/strava-pending-rpe.json has a sync from the last 24h. Channel-agnostic.
gtapps/claude-code-hermit · ★ 59 · AI & Automation · score 84
Install: claude install-skill gtapps/claude-code-hermit
# Capture Activity RPE Records the operator's perceived effort and subjective notes for the most recent synced activity. Self-triggers on RPE-shaped replies while `state/strava-pending-rpe.json` is fresh. The skill's `description` is intentionally narrower than `claude-code-hermit:channel-responder`'s so the harness picks it for these specific messages; any non-matching message exits silently and the normal `channel-responder` flow proceeds. Re-checks `allowed_users` itself. ## Steps 1. Read `.claude-code-hermit/state/strava-pending-rpe.json`. If the file is absent: exit silently. If `synced_at` is more than 24 hours ago: run `rm .claude-code-hermit/state/strava-pending-rpe.json` and exit silently (reply window closed). 2. **Authorization.** Read `.claude-code-hermit/config.json` → `channels.<channel>.allowed_users` for the inbound channel (extract the channel name from the inbound message metadata): - If `allowed_users` exists and the sender's platform user ID is **not** in it: exit silently. No response, no log, no state write. - If `allowed_users` is absent: accept (backwards-compatible). - If `allowed_users` is `[]`: reject all — exit silently. 3. Parse the inbound message body (case-insensitive, leading/trailing whitespace stripped): ``` ^(?:RPE\s*:?\s*)?(\d{1,2})(?:\s*/\s*10)?(?:[\s,:]+(.+))?$ ``` This matches: `7`, `7/10`, `RPE 7`, `RPE: 7`, `RPE:7`, `7 heavy legs`, `RPE 7, heavy legs`, `RPE: 7 heavy legs`. - Extract `rpe` (group 1) and