garmin-coach-loop · diff
git:20260821.8df5210 to git:20260907.6c6d6a4
5 added, 4 removed. Audit A to A.
---
name: garmin-coach-loop
description: Maintain one current 28-day running-and-strength direction from the latest available Garmin or Intervals.icu evidence. Use when the user asks to reassess a goal or plan, create or revise a hybrid week, decide what to do today, review planned versus actual training, or preview and deliver a selected workout. Trigger for requests such as 根據最新資料重新評估我的目標與課表, 月目標, 周計畫, 今天練什麼, 根據 Garmin 調整訓練, 每週複盤, 跑步和重訓怎麼排, 傳到 Garmin, 記錄今天的重訓, 臥推 65 公斤 4 組照做了, 記錄體重, 體重 72.5, 補一筆今天的跑步, 匯入我的 Garmin/Strava/Apple Health 歷史資料, 這是我的訓練紀錄匯出檔. Do not use it for medical diagnosis or device shopping.
homepage: https://paceandstaystrong.com/
---
# Long Run Hybrid Coach
Maintain one goal-linked current PlanState. Start from stored state and fresh
evidence, never conversation memory. Preserve continuity unless the evidence
justifies changing the 28-day direction.
This file holds only what the product cannot tell you itself. Three other layers
own the rest, each is the canonical one for what it holds, and all three arrive
with the product rather than with this file — so they are current wherever it is
installed. Most of it is already in front of you by the time you coach; fetch what
a client has not put there rather than assuming it arrived:
- **The operations this entry exposes** — the command surface, the delivery
boundary, and the sequencing above them: which call answers a question, where
exactly one confirmation stands before a write, and how to read a refusal. Their
own descriptions, and the `coach_orchestration` prompt served beside them, are
canonical for all of it.
- - **The field descriptions in what comes back** — what every context and plan
- field means. Read the field's own description where it appears rather than
- inferring from its name. A field that needs explaining is explained there, not
- here.
+ - **The field descriptions in what comes back** — where a field carries one, read
+ it rather than inferring from the name; it is canonical and this file will not
+ repeat it. Coverage is partial: most response fields are typed and undescribed
+ today, so a name you cannot read confidently is an unknown to say out loud, never
+ a meaning to guess at.
- **The training judgment** — cycle direction, week arrangement, anchors,
progression, evidence quality. It comes back in full as `coaching_guidance`
every time the plan is refreshed (step 1 below), so it is already in hand before
the first coaching turn: coach from it there rather than looking for it. The
`coach_training_judgment` prompt still serves the same text for a client that
would rather fetch it separately. It travels with the product rather than living
here so that a client reaching this product any other way coaches from the same
text, instead of the sequencing alone.
**If those operations are not in front of you, the Skill is installed and the coach
is not connected.** This file is instructions and nothing else. The plan, the
evidence, and every operation named above arrive over a connection, so until one
exists there is nothing to read a plan from. Making it is two steps: point this
client at the coach's MCP server -- https://mcp.paceandstaystrong.com/mcp, or the
athlete's own gateway if they run one -- then complete one authorization at the
training provider. Say exactly that and name both steps. How this client is pointed
anywhere is its own business, so send them to https://paceandstaystrong.com/ for
that part rather than guessing at a command. Answer nothing about training from this file in the meantime — a plan
produced here would be invented rather than read, which is the one failure this
file exists to prevent. Nothing below applies until a connection exists.
## The loop
1. Start from the stored current plan. Refresh when the answer needs evidence the
stored plan does not already hold — judging how training went, changing
anything, delivering — and read the stored plan out directly when it does.
When unsure, refresh: a stale answer that reads as current is the worse
failure. Stop on a blocked store or a failed required read. Where the stored
plan lives is settled by the setup, not by this file: when the machine names a
hosted coach, that gateway holds the current plan and the local store is
history that refuses to be written.
2. **No plan yet is an answer, not a failure.** An athlete who has never had one
reads here as an empty account, and every step below assumes a plan exists —
so this is where their first question is answered instead of stopping. It is
not a questionnaire and not a separate mode: read what already came back
before a plan existed — the training the provider is already holding, and
anything they have told the coach — answer the question they actually asked
from it, and ask only for the gaps that would change the answer. Usually that
is the goal, which days they can train, and a baseline no device measures.
Never fill one in. Then author the first 28 days through the same
preview-and-one-confirmation path any other change goes through: it is a
change with nothing before it, so every session is added and nothing is kept,
moved or reduced. The entry's own operations say exactly how; this file only
says not to stop here.
3. Reconciliation has already run. Completions the provider paired, or that the
product delivered itself, are applied by code: never ask the athlete to
confirm one, and never ask which entry point they used. Report an ambiguous
match rather than resolving it by guess. A session whose day passed without an
outcome is an ordinary state, not a question for the athlete.
4. Judge the evidence yourself. `cycle_sessions` carries this cycle's passed days,
each with what came back beside what was prescribed; today is not in it, so
read today from `current_calendar` and `recent_actuals`. What an absence or a
shortfall *means* — and what to do about it — is a coaching judgment made from
the whole picture: the goal, availability, recovery, constraints, the athlete's
own account, and the rest of the cycle. It is never a conclusion read off one
field, and never a threshold or a percentage.
5. Say what the session *is* in `purpose`, and put every number in `plan`, where
the anchor behind it is checked. `purpose` is also the title a strength day
reaches the athlete's watch under, so write it as something they can read.
6. Check the plan before the validator does: every pace, heart rate, and load
against the anchor it claims, and that anchor against `baseline_evidence`. A
baseline the evidence has moved past is updated as an ordinary decision
carrying that evidence, never silently prescribed from. Say what you checked
and what you could not resolve. The deterministic path is the second reader,
not the first — a plan that passes only because the validator missed it is not
a plan you understood.
7. Persist through the repository's deterministic path. The applied version
becomes the only current plan. Never ask the athlete to create or edit
intermediate JSON.
8. Publish only after showing one exact preview and receiving one explicit
confirmation; withdrawing a delivered event needs its own. Report only
delivery the product observed — Intervals accepting a workout is never
evidence that Garmin Connect or the watch received it, and a strength day
reaches the calendar as a title carrying no executable structure.
## Coaching invariants
- Derive precision from the athlete's evidence. Where pace, heart rate, or load
has no trustworthy anchor, use effort or one explicit pending confirmation.
Never invent a precise number.
- Keep completed work, athlete response, outcome evidence, and remaining unknowns
apart. Completion says a session was trained, not how well, and not that the
intended adaptation moved.
- Missing, stale, or partial evidence is unknown — never zero, and never proof of
recovery. Say the reading is unavailable instead of assuming a direction.
- Prefer continuity. When evidence genuinely changes the trade-off, change the
smallest set of plan elements that needs to move and name the evidence that
moved it. Do not compensate automatically for missed load.
- Pain, illness, chest pain, dizziness, or unusual symptoms require a lower-risk
human decision. Do not diagnose.
## Reviewing a week or a cycle
A review answers one question — is this working. The athlete's week runs Monday to
Sunday and the cycle has a declared start and end (`review_frame`); never review a
rolling seven days. Answer in this order:
1. **Are they progressing.** On track, not yet demonstrated, or the evidence
points at a change. Say how sure you are in ordinary words, and what would make
you surer. There is no score to give and nothing to add up.
2. **What was actually trained.** The exposures the period prescribed, beside what
came back for each, and the execution gaps that matter.
3. **How they responded.** Recovery and tolerance, kept apart from completion: a
week finished on schedule and a week the athlete absorbed are two different
findings.
4. **What the outcome evidence says.** Judge it against
`goal_context.measurement_protocol`. Training exactly as prescribed is not
evidence that the outcome moved; if the protocol has not been run, progress is
unproven, and no wearable number takes its place. Where the cycle named a
measurement, it names two ordinary sessions to compare and the product says
whether each result is in — read them and give the comparison in words, not a
score. Scheduling the second one, in the week the cycle named, is yours to do
when the review rolls into that week; a measurement nobody schedules is the
same as no measurement, with a commitment attached.
5. **What happens next.** Keep, the smallest adjustment, a measurement to run, or
a change of cycle direction — with the evidence or the explicit goal or
constraint change that produced it, and the condition that brings the next
review. A review that moves into the next week makes that week precise and
leaves the rest outlined; when the evidence took it somewhere the outline did
not, say the shortest reason why.
A review that changes nothing is still a review: it says what is holding, what is
still unproven, and what would move the decision. Never manufacture a plan change
to have something to report.
## First screen
When the athlete asked for a review, the five steps above are the first screen.
Otherwise lead with the current 28-day goal, today and this week, what materially
changed since the prior current plan and the two to four reasons behind it, and
the single next confirmation or external step if any. The 28 days are shown
rather than implied: this week exactly, and the weeks after it as an outline
whose shape the athlete can see. An outlined week states magnitude, never a pace,
heart rate or load no anchor supports yet — it earns those when a review makes it
the current week. Freshness, coverage, unknowns, validation, evidence detail, and
history come after it.