accept_terms
ChatGPTRecord the user's acceptance of Freddy's current Terms of Service and Privacy Policy. ONLY call this tool AFTER the user has explicitly stated they agree to the updated terms — for example, after they have said 'I agree', 'accept', 'yes, accept the new terms', or similar. Do not call this tool automatically or on the user's behalf. If the user has not seen the policy summary yet, show them the gate message from the previous tool call's response (or fetch https://freddy.coach/terms) BEFORE asking for their consent. If the user is unsure or wants to read the full text, do not call this tool — point them at the dashboard URL or the public Terms/Privacy pages. If the user has explicitly agreed to BOTH the Terms/Privacy AND to Freddy collecting and processing their health data, also pass health_data: true. Otherwise omit health_data or pass false; the user will be prompted for the additional consent through the dashboard later.
accept_terms
ChatGPTRecord the user's acceptance of Freddy's current Terms of Service and Privacy Policy. ONLY call this tool AFTER the user has explicitly stated they agree to the updated terms — for example, after they have said 'I agree', 'accept', 'yes, accept the new terms', or similar. Do not call this tool automatically or on the user's behalf. If the user has not seen the policy summary yet, show them the gate message from the previous tool call's response (or fetch https://freddy.coach/terms) BEFORE asking for their consent. If the user is unsure or wants to read the full text, do not call this tool — point them at the dashboard URL or the public Terms/Privacy pages. If the user has explicitly agreed to BOTH the Terms/Privacy AND to Freddy collecting and processing their health data, also pass health_data: true. Otherwise omit health_data or pass false; the user will be prompted for the additional consent through the dashboard later.
connect_wearable
ChatGPTConnect a data source (a wearable, ring, CGM, training platform, gym log, and so on). For OAuth providers (Polar, Oura, WHOOP, Withings, Dexcom, Intervals.icu, Suunto), the tool returns a URL the user opens to authorize. For API-key sources (Hevy, Lyfta, Runalyze, Airthings) and device sources (Apple Health, Health Connect), the tool returns instructions to finish connecting on the freddy dashboard or app, where any credential is entered on freddy and never passes through this chat.
connect_wearable
ChatGPTConnect a data source (a wearable, ring, CGM, training platform, gym log, and so on). For OAuth providers (Polar, Oura, WHOOP, Withings, Dexcom, Intervals.icu, Suunto), the tool returns a URL the user opens to authorize. For API-key sources (Hevy, Lyfta, Runalyze, Airthings) and device sources (Apple Health, Health Connect), the tool returns instructions to finish connecting on the freddy dashboard or app, where any credential is entered on freddy and never passes through this chat.
disconnect_wearable
ChatGPTDisconnect a data source and wipe synced data for it. Confirm with the user before calling — this is destructive and the user must re-authorize to reconnect.
disconnect_wearable
ChatGPTDisconnect a data source and wipe synced data for it. Confirm with the user before calling — this is destructive and the user must re-authorize to reconnect.
get_profile
ChatGPTReturn user profile information: name, connected data sources, plan tier, and the date range of available data.
get_profile
ChatGPTReturn user profile information: name, connected data sources, plan tier, and the date range of available data.
list_metrics
ChatGPTList health metrics available for this user. Returns metric names, units, date ranges, record counts, and data sources. Metrics flagged [raw available] carry a full JSON payload (per-exercise sets, hypnograms) that can be fetched via query_metrics with include_raw: true. Metrics flagged [raw-only — fetch with include_raw] are intra-day sample bundles (e.g. activity_HR_samples for Suunto); the data lives in the raw payload, not in numValue. For these, request include_raw to get the ts/v arrays. Daily aggregates of the same data are available as _avg/_min/_max/_total metrics. Lines may show "device: <name>" when a provider reports data from more than one device; pass that device to query_metrics to filter. When you present Garmin data to the user, attribute it as "Garmin [device model]" (or just "Garmin" when no device is shown), per Garmin's brand requirements.
list_metrics
ChatGPTList health metrics available for this user. Returns metric names, units, date ranges, record counts, and data sources. Metrics flagged [raw available] carry a full JSON payload (per-exercise sets, hypnograms) that can be fetched via query_metrics with include_raw: true. Metrics flagged [raw-only — fetch with include_raw] are intra-day sample bundles (e.g. activity_HR_samples for Suunto); the data lives in the raw payload, not in numValue. For these, request include_raw to get the ts/v arrays. Daily aggregates of the same data are available as _avg/_min/_max/_total metrics. Lines may show "device: <name>" when a provider reports data from more than one device; pass that device to query_metrics to filter. When you present Garmin data to the user, attribute it as "Garmin [device model]" (or just "Garmin" when no device is shown), per Garmin's brand requirements.
query_metrics
ChatGPTFetch health data for specific metrics by name. Metric names are provider-specific and follow each provider's own field-name conventions (e.g. activity_* / wellness_* for Intervals.icu, polar_* for Polar, workout_* for Hevy, sleep_summary_* for Withings). They are NOT common English words. Always call list_metrics first in a session to discover the exact names available for this user — names that aren't in that list return zero rows. Returns scalar values grouped by date. When include_raw is true, also returns the full JSON payload for each record (per-exercise sets, hypnograms, intra-day sample arrays). Non-sample raw is capped at 50 records per request. For intra-workout sample metrics (names ending in _samples), include_raw returns a downsampled overview by default (tighter record cap — narrow the range if asked to); pass raw_resolution: "full" for every sample of a single workout, or sample_window: { from_sec, to_sec } to zoom a segment of a long workout at full resolution. Each sample row shows 'id: <…>' — pass that as source_id to select one of several same-day workouts for a full or windowed read. When you present Garmin data to the user, attribute it as "Garmin [device model]" (or just "Garmin" when no device is shown), per Garmin's brand requirements.
query_metrics
ChatGPTFetch health data for specific metrics by name. Metric names are provider-specific and follow each provider's own field-name conventions (e.g. activity_* / wellness_* for Intervals.icu, polar_* for Polar, workout_* for Hevy, sleep_summary_* for Withings). They are NOT common English words. Always call list_metrics first in a session to discover the exact names available for this user — names that aren't in that list return zero rows. Returns scalar values grouped by date. When include_raw is true, also returns the full JSON payload for each record (per-exercise sets, hypnograms, intra-day sample arrays). Non-sample raw is capped at 50 records per request. For intra-workout sample metrics (names ending in _samples), include_raw returns a downsampled overview by default (tighter record cap — narrow the range if asked to); pass raw_resolution: "full" for every sample of a single workout, or sample_window: { from_sec, to_sec } to zoom a segment of a long workout at full resolution. Each sample row shows 'id: <…>' — pass that as source_id to select one of several same-day workouts for a full or windowed read. When you present Garmin data to the user, attribute it as "Garmin [device model]" (or just "Garmin" when no device is shown), per Garmin's brand requirements.
sync_provider
ChatGPTTrigger an incremental sync for a connected provider. Returns immediately; the sync runs in the background. Use this if the user wants the latest data fetched right now (e.g. after a workout) instead of waiting for the daily sync.
sync_provider
ChatGPTTrigger an incremental sync for a connected provider. Returns immediately; the sync runs in the background. Use this if the user wants the latest data fetched right now (e.g. after a workout) instead of waiting for the daily sync.