Daily Strava Roast
by @ranasalalali
Generate a playful or sharp daily roast of recent Strava activity. Use when asked to roast, recap, tease, or humorously summarize a Strava workout or a recen...
clawhub install daily-strava-roastπ About This Skill
name: daily-strava-roast description: Generate a playful or sharp daily roast of recent Strava activity. Use when asked to roast, recap, tease, or humorously summarize a Strava workout or a recent day of training. Useful for scheduled daily activity roasts, playful fitness summaries, or lightly sarcastic post-workout commentary. Prefer the deterministic package/script for data prep and fallback; when running inside OpenClaw, use the connected/default runtime model only for the final paragraph if available, then fall back to the deterministic roast path on failure.
Daily Strava Roast
Use this skill to turn recent Strava activity into a short roast-style summary.
Default workflow
1. Use the deterministic implementation first to fetch and summarize activity. 2. If you are inside OpenClaw and want the V2 path, use the structured context/prompt output as model input for the final paragraph only. 3. If connected-model generation is unavailable or weak, fall back to the deterministic roast output. 4. Do not pretend the standalone Python package has a built-in OpenClaw connected-model API if it does not.
What this skill does
This skill provides:
Preferred commands
Use the packaged CLI for deterministic preparation and fallback:
uv run --project {baseDir} daily-strava-roast summary --json --pretty
uv run --project {baseDir} daily-strava-roast context --pretty
uv run --project {baseDir} daily-strava-roast prompt
uv run --project {baseDir} daily-strava-roast roast
Do not rely on the removed legacy script path. Use the packaged CLI commands only.
Runtime guidance
When invoked inside OpenClaw for an actual roast reply:
Runtime recipe
Use this sequence:
1. Build context JSON:
uv run --project {baseDir} daily-strava-roast context --pretty
2. Build the constrained prompt:
uv run --project {baseDir} daily-strava-roast prompt
3. Ask the connected/default OpenClaw runtime model to write the final paragraph from that prompt. 4. Before replying, sanity-check the generated paragraph: - exactly one paragraph - one or two sentences max unless unusually short - no bullet points - no invented stats - no stat dump; usually no more than two concrete metrics unless a third really earns its place - not generic AI filler - avoids banned phrases, stale identity/relationship jokes, pet phrases, and over-clever wording - avoids poetic or cosmic phrasing - tone matches requested spice/tone closely enough 5. If the paragraph fails those checks or generation is unavailable, fall back to:
uv run --project {baseDir} daily-strava-roast roast
Fallback triggers
Fall back immediately if any of these happen:
When falling back:
When working purely from the repo/CLI:
Inputs
By default the skill reads Strava app config from:
~/.openclaw/secure/strava_app.json
And by default the token file is:
~/.openclaw/workspace/agents/tars-fit/strava_tokens.json
Normal auth behaviour:
~/.openclaw/secure/strava_app.json as the canonical app-credentials sourceUse this to inspect auth readiness:
uv run --project {baseDir} daily-strava-roast auth-url
Use JSON mode when another agent needs machine-readable status:
uv run --project {baseDir} daily-strava-roast roast --json --pretty
Tones
Supported tones:
dryplayfulsavagecoachSpice
Spice controls roast intensity:
0 β gentle1 β light tease2 β proper roast3 β scorched earthReferences
Read as needed:
references/design.md for roast heuristics and failure casesdocs/V2.md for the V2 architecture and package/runtime boundary