- Enable in config:
[providers.garmin]
enabled = true
username = "you@example.com"
password = "your-password"- Authenticate (required once; session is cached):
pulse garmin-loginIf your account has two-factor authentication enabled, wait for the MFA prompt and pass the code:
pulse garmin-login --mfa 123456- Sync:
pulse sync garminGarmin sleep data is typically available the next morning, not immediately after waking. If today's sleep score is missing, sync again after ~9:00 AM local time.
-
Get your API key: Log in to intervals.icu → Settings → Developer → API Key.
-
Add to config:
[providers.intervals]
enabled = true
athlete_id = "i12345" # from your profile URL
api_key = "your-api-key"- Sync:
pulse sync intervalspulse sync # syncs all enabled providers
pulse sync --days 7 # backfill the past 7 days# Run daily at 09:30, backfilling 2 days to catch late Garmin uploads
30 9 * * * /home/user/.cargo/bin/pulse sync --days 2$action = New-ScheduledTaskAction -Execute "pulse" -Argument "sync --days 2"
$trigger = New-ScheduledTaskTrigger -Daily -At "09:30"
Register-ScheduledTask -TaskName "PulseSync" -Action $action -Trigger $triggerThe --days 2 overlap ensures that any data that arrived late (e.g., last night's sleep) is captured without re-syncing the full history.