buildWorkout
ChatGPTSave a temporary private workout draft when the athlete requests workout preparation; this does not commit a plan change. List every work and recovery segment in execution order. Boulie computes totals, detects repeated sets/cycles, validates the structure, resolves targets, and returns the preview plus workoutDraftId. Show the preview, then pass the id to writePlan only after explicit confirmation. Existing prescriptions and unsupported timeline shapes may use the compatibility blocksJson path with writePlan validate true; validation must pass and the athlete must confirm before committing. Do not change representations to evade a rejected constraint. Under phases in over-unders are role work; role recovery means easy recovery between work sets.
getChangesSince
ChatGPTRead outstanding training when relevant to the athlete’s request: past planned days without a judgment, ended weeks without a review, and committed plan changes since the reconciliation cursor. This read does not authorize or save a reconciliation.
getCoachingContext
ChatGPTRead stored training context when needed for the athlete’s request: active goal, athlete context, the compact week spine through the goal, and coaching-relevant detail for the current week. Returns no raw activity data and does not save reviews or change the plan.
getPlan
ChatGPTRead stored plan detail for one date, one week, or a bounded range — the drill-down behind getCoachingContext, and the way to read a future week’s full weekNote before planning it. Future plans are returned exactly as stored. A judged session includes its currentJudgment and judgmentId so a later athlete clarification can be recorded as an explicit correction. Write rationales are stated once in writes[] and referenced by writeId on each row. Sessions default to their resolved one-line structure; pass detail "full" only when you need the authored blocks or exact segment targets.
recordReconciliation
ChatGPTSave an athlete-authorized training review in one atomic write: session judgments, optional week/block reviews, optional athlete-model and training-reference updates, benchmarks, and optional reconciliation cursor progress. An explicit request to record a stated outcome authorizes that outcome only. Otherwise show the proposed review and obtain confirmation before saving. Material interpretations, athlete-model revisions, training-reference updates, and corrections require explicit confirmation of the specific values. Do not write merely because a read reports outstanding training or a coaching conversation ends. A planned session has one current judgment; an authorized correction supplies its currentJudgment.judgmentId as supersedes and retains the prior audit record. For sessions with successCriteria, cite sessionId and check each criterion once in criteriaResults. Include only compact, relevant evidence intentionally supplied for this review; exclude raw streams and unrelated sensitive data. Reuse operationId only for an identical retry, never a correction. This tool does not change the plan; plan changes require separate confirmation and writePlan.
setGoal
ChatGPTCreate, update, or retire a training goal after the athlete explicitly confirms the specific change in chat. Updating can overwrite supplied fields; retiring ends a goal early while preserving history. A goal completes automatically once its date passes. Zero, one, or several live goals are supported. Returns the committed goal and every live goal with a derived primary flag; saving a goal does not authorize changes to the training plan.
writePlan
ChatGPTValidate or atomically commit a plan change within the athlete’s request. validate true checks the proposal without committing. A commit requires explicit confirmation of the affected dates, sessions, and week fields. For a newly composed workout, use workoutDraftId from buildWorkout; omit blocksJson/blocks and do not recreate the prepared artifact. A day owns sessions: replace swaps the whole session list for that date (slots 1-4; most days have one session, a double day has two); replace with restDay true and no sessions is an explicit rest day; clear leaves the day empty. Sport and intent vocabulary plus the athlete’s anchors arrive in getCoachingContext. Select one targetBasis per structured session: ride uses power_pct when power is available, otherwise hr_pct or rpe; run uses pace_pct, pace_abs, hr_pct, or rpe. For a key or purpose-sensitive session, successCriteria may name up to three short outcomes the coach will check after training; omit them for routine work. The committed result returns resolved execution units and a semantic changes list — compare changes with the confirmed proposal, report any unexpected difference, and obtain confirmation before a corrective write that changes the approved proposal. Omitted dated context is preserved. Only when the athlete explicitly changes that one date, add contextOverride with the new availability or recurring ride; it never changes standing defaults. An unwritten week starts at expectedVersion 0 and its first write must include week.macroTheme. Every spine week names the dates that constrain it: unavailableDates reject a session outright unless the athlete explicitly made time, and daysWithDetail already holds sessions or an explicit rest day (read those with getPlan first — replace discards whatever is there). Omit durationMinutes when exact seconds-based math is fractional; Boulie derives it. validate true runs every check and commits nothing, and remains the preparation path for legacy blocks or plan-level constraints. This tool writes ONE week; use writePlanSpine for long-horizon week structure.
writePlanSpine
ChatGPTSave athlete-confirmed week-level macroTheme, targetHours, and weekNote for a run of weeks, with no day detail. Show the affected weeks and proposed values and obtain explicit confirmation before committing. Fields merge, so send only approved changes; omitted values are preserved. A new week (expectedVersion 0) requires macroTheme. Day-level sessions use writePlan with their own confirmation. Weeks commit in order and each is atomic on its own; the first failure stops the run and the response names the committed and unattempted weeks. Report partial commits. Retry only the remaining approved changes; a revised proposal requires confirmation.
buildWorkout
ClaudegetChangesSince
ClaudegetCoachingContext
ClaudegetPlan
ClauderecordReconciliation
ClaudesetGoal
ClaudewritePlan
ClaudewritePlanSpine
Claude