Languages: English | 한국어 | Español | 日本語
Garmin Personal Coach is a Garmin-first AI coaching engine for endurance athletes.
It works today through:
- CLI
- Telegram
- MCP / OpenClaw
It is not yet a dashboard, mobile app, or food-photo calorie app.
- Connects to Garmin Connect as the primary source of truth
- Supports Strava as a supplemental sync source
- Calculates training load (CTL / ATL / TSB)
- Gives coaching guidance through CLI, Telegram, and MCP/OpenClaw
- Supports optional AI providers: OpenAI, Anthropic, Gemini
- Supports lightweight personalized nutrition coaching
Recommended:
pip install garmin-personal-coach[all]From source:
git clone https://github.com/HOYALIM/garmin-personal-coach.git
cd garmin-personal-coach
pip install -e .[all]garth login your@email.comgarmin-coach setupCreate a Strava API app, then run:
garmin-coach connect-stravaStrava is supplemental only in this release. Garmin remains the primary source of truth.
To inspect sync state:
garmin-coach oauth-status
garmin-coach strava-sync --dry-rungarmin-coach status
garmin-coach log
garmin-coach oauth-status
garmin-coach garmin-sync --dry-run
garmin-coach strava-sync --dry-run
garmin-coach --version
garmin-coach --check-updatesexport TELEGRAM_BOT_TOKEN="your_bot_token"
garmin-coach-telegramFor a bot token:
- Open Telegram
- Talk to @BotFather
- Create a new bot
- Copy the token into
TELEGRAM_BOT_TOKEN
Common commands:
/start/status/plan/help
Natural-language examples:
How is my condition today?I finished my workoutWhat should I do tomorrow?
Recommended MCP config:
{
"mcpServers": {
"garmin-coach": {
"command": "garmin-coach-mcp",
"args": []
}
}
}Fallback:
{
"mcpServers": {
"garmin-coach": {
"command": "python",
"args": ["-m", "mcp_server"]
}
}
}Available MCP tools:
get_training_statusget_user_profileget_recent_activitieshandle_natural_languagehealthget_training_plan
Optional AI enhancement:
export OPENAI_API_KEY="sk-..."
# or
export ANTHROPIC_API_KEY="sk-ant-..."
# or
export GEMINI_API_KEY="..."Without API keys, the product still works with rule-based coaching.
The current release supports lightweight personalized nutrition coaching based on:
- training load / fatigue context
- weight goal (
maintain,lose,gain) - dietary style (
omnivore,vegetarian,vegan,other) - food restrictions / avoidances
- preferred coaching style (
brief,detailed,macros)
This is guidance only in the current release.
Not included yet:
- meal logging
- barcode scanning
- image upload
- calorie estimation from photos
In a future update, the nutrition layer may expand to image-based meal analysis where a user uploads a meal photo and gets calorie estimation plus meal recommendations.
That is not part of the current release.
- Garmin-first coaching engine
- Strava supplemental sync
- CLI / Telegram / MCP usage
- lightweight nutrition coaching
- Web dashboard
- iMessage integration
- Nike Run Club integration
- Apple HealthKit / Apple Watch integration
- full meal tracking or photo-calorie workflows
garmin_coach/
├── adapters/ # Garmin/Strava data access, Nike scaffold only
├── handler/ # Natural language coaching core
├── integrations/ # Garmin / Strava sync-to-load flows
├── wizard/ # Interactive setup
├── nutrition/ # Nutrition guidance logic
├── telegram_bot.py # Telegram runtime
└── cli.py # CLI entrypoint
mcp_server/
├── server.py # MCP handlers
└── entrypoint.py # MCP stdio entrypoint
- Main profile/config:
~/.config/garmin_coach/config.yaml - Strava token:
~/.config/garmin_coach/strava_token.json
This release should be understood as an honest beta for local/power users:
- Garmin-first
- usable now through CLI, Telegram, and MCP/OpenClaw
- still early for broader consumer UX
MIT