Skills sparky
SparkyFitness CLI for food diary, exercise tracking, biometric check-ins, and health summaries.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/aronjanosch/sparkyfitness" ~/.claude/skills/openclaw-skills-sparky-67138d && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/aronjanosch/sparkyfitness" ~/.openclaw/skills/openclaw-skills-sparky-67138d && rm -rf "$T"
manifest:
skills/aronjanosch/sparkyfitness/SKILL.mdsource content
sparky
Use
sparky to interact with a self-hosted SparkyFitness server — log food, exercise, weight, steps, and mood.
Install
- Homebrew (macOS/Linux):
brew tap aronjanosch/tap && brew install sparky-cli - Build from source (requires Go 1.21+):
git clone https://github.com/aronjanosch/sparky-cli cd sparky-cli go build -o sparky . sudo mv sparky /usr/local/bin/
Setup (once)
— e.g.sparky config set-url <url>sparky config set-url https://sparky.example.comsparky config set-key <key>sparky config show
— verify connectionsparky ping
Food
- Search:
— local DB first, falls back to Open Food Facts; shows Brand columnsparky food search "chicken breast" [-l 10] - Search by barcode:
— exact product lookup, no ambiguitysparky food search --barcode 4061458284547 - Log by name:
sparky food log "chicken breast" -m lunch -q 150 -u g [-d YYYY-MM-DD] - Log by barcode:
— most reliable, no brand guessingsparky food log --barcode 4061458284547 -m lunch -q 113 -u g - Log by ID:
— skips search, unambiguoussparky food log --id <uuid> -m lunch -q 150 -u g - Pick result:
— select Nth search result instead of defaulting to results[0]sparky food log "Hähnchenbrust" --pick 2 - Diary:
sparky food diary [-d YYYY-MM-DD] - Delete entry:
sparky food delete <uuid> - Remove from library:
— purge a wrongly imported product from local librarysparky food remove <external_id>
Exercise
- Search:
— local DB first, falls back to Free Exercise DBsparky exercise search "bench press" [-l 10] - Search external only:
— bypasses local cachesparky exercise search --external "pushup" - Log by name:
sparky exercise log "Pushups" [--duration 45] [--calories 400] [-d YYYY-MM-DD] - Log by ID:
— skips search, unambiguoussparky exercise log --id <uuid> --set 10x80@8 --set 10x80@9 - Sets format:
— e.g.REPS[xWEIGHT][@RPE]
= 10 reps, 80 kg, RPE 8;10x80@8
or10x80
also valid10@8 - Diary:
sparky exercise diary [-d YYYY-MM-DD] - Delete:
sparky exercise delete <uuid>
Check-ins
- Weight:
sparky checkin weight 75.5 [-u kg|lbs] [-d YYYY-MM-DD] - Steps:
sparky checkin steps 9500 [-d YYYY-MM-DD] - Mood:
sparky checkin mood 8 [-n "notes"] [-d YYYY-MM-DD] - Diary:
— shows biometrics + mood togethersparky checkin diary [-d YYYY-MM-DD]
Summary & trends
— nutrition/exercise/wellbeing totals (default: last 7 days)sparky summary [-s YYYY-MM-DD] [-e YYYY-MM-DD]
— day-by-day nutrition tablesparky trends [-n 30]
Agentic workflow (always prefer --id to avoid ambiguity)
Exercise — search first, then log by ID:
# 1. Find candidates; use --external to bypass local cache if needed sparky -j exercise search --external "pushup" # Each result has is_local: true/false # is_local: true → id is a UUID → use --id directly # is_local: false → id is a source string → log by exact name to import first, # then search again to get the UUID # 2a. Local exercise sparky -j exercise log --id <uuid> --set 3x10@8 # 2b. External exercise (import on first log, then switch to --id) sparky -j exercise log "Pushups" --set 3x10 sparky -j exercise search "Pushups" # now is_local: true sparky -j exercise log --id <uuid> --set 3x10
Food — preferred agentic workflow:
# Option A: barcode (most reliable) sparky food log --barcode 4061458284547 -q 113 -u g -m lunch # Option B: search → inspect brand+macros → log by --id sparky -j food search "Hähnchenbrust" # check brand + calories in results; pick the right one sparky food log --id <uuid> -q 400 -u g -m dinner # Option C: search with --pick N (when brand column shows the right one) sparky food log "Hähnchenbrust" --pick 3 -q 400 -u g -m dinner # Remove a bad import from local library sparky food remove <external_id> # external_id from search results
Notes
/-j
is a root-level flag:--json
, notsparky -j food diarysparky food diary -j- Always verify brand in search results before logging — Open Food Facts has many products with identical names
is the most reliable option when the product has a scannable barcode--barcode
selects the Nth result (1-based); exact local match bypasses--pick N
entirely--pick- Both search commands fall back to online providers automatically; matches are added to your library on first log
- Weight is stored in kg; lbs are auto-converted (
)166 lbs → 75.30 kg - Full UUIDs for delete:
sparky -j food diary | jq '.[0].id' - Meal options:
,breakfast
,lunch
,dinner
(default:snacks
)snacks