# Training Desk > Paste your training log - one session per line: a date, a name, a duration and a session RPE, or a lift as sets x reps @ weight - and the browser computes the training-load numbers a coach would: session load by the session-RPE method, weekly load, monotony and strain, the rolling-average and EWMA acute:chronic workload ratios, a fitness/fatigue pair, per-lift tonnage and estimated 1RM with plateau detection, rest days and back-to-back hard days - free, before you sign in. Then a coach reviews the log against those numbers, and designs the next block as sessions the browser prices and checks for spikes. Live at https://training-desk.skillsafe.ai/ · API tutorial at https://training-desk.skillsafe.ai/api.html · Tokens at https://training-desk.skillsafe.ai/tokens.html ## What it does One work object: one athlete's training log, pasted as text (or dropped as a .csv/.txt file). Each line is a session: `2026-07-06, easy run 8 km, 45 min, RPE 4`, or a lift `2026-07-07, back squat, 5x5 @ 100 kg, 60 min, RPE 7` (exercise lines on the same date without a duration and RPE fold into that day's session). Dates are ISO (also yyyy/mm/dd, dd.mm.yyyy, and mm/dd/yyyy read as month/day/year with a note). Durations as `45 min`, `1h15`, `1:15:00`; RPE as `RPE 7`, `rpe7`, `7/10` or a bare number after the duration; interval notation such as `6x800 m` is not a set. Plus a short description of the athlete and, for the plan lane, a block length, an emphasis and a sessions-per-week target. The free engine (no account, no model), each definition from its source: - session load = duration (min) x session RPE (0-10), in AU - Foster et al. 2001 - weekly load over ISO weeks (Monday-Sunday), rest days counted as 0; week-over-week % change - training monotony = mean daily load / sample standard deviation over the 7 days; training strain = weekly load x monotony - Foster 1998 (the paper does not say which SD; the desk documents the sample form) - rolling-average acute:chronic workload ratio, coupled: this week / mean of this week and the three before it - Hulin et al. 2016, Gabbett 2016; needs four weeks - EWMA acute:chronic ratio with lambda = 2/(N+1), N = 7 and 28, both series seeded with the first day's load - Williams et al. 2017 - fitness/fatigue in Coggan's Performance Management Chart form: CTL (42-day) and ATL (7-day) exponential averages starting at 0, TSB = yesterday's CTL - yesterday's ATL, all in AU - per lift: tonnage, estimated 1RM by Epley (1985: w x (1 + r/30)) and Brzycki (1993: w x 36/(37 - r)), best per ISO week, weeks without a new best, plateau at three or more - rest days per week, longest gap, longest streak, days since the last rest day, pairs of consecutive days at RPE 8 or more, weeks without a rest day, sessions without an RPE - flags with their sources named: rolling ACWR above 1.5 or below 0.8 (Gabbett's bands), EWMA ACWR above 1.5, monotony above 2.0 (Foster), a week-over-week rise above 30%, back-to-back hard days, weeks without rest, missing RPE, lift plateaus - plus safety flags the ratios cannot see: a log line or the athlete note that mentions illness (with the usual no-hard-training-with-fever guidance) or chest pain / fainting / palpitations (stop and get medical care), a week of identical daily loads (monotony undefined because maximal), more than 30 hours of training in a week, and plausibility warnings for days over 16 h or an estimated 1RM beyond any recorded lift. The ACWR's predictive value is contested (Impellizzeri et al. 2020); the desk reports the number and names the band, it does not forecast injury. Two metered lanes (gpt-terra, one system prompt with a task router): - `review` (from @onewave-ai/training-log-analyzer) - the coach reads the log against the numbers: the trend week by week, the ratios with their bands, each lift's estimated 1RM and plateau, recovery, what the athlete said. Verdict: progressing / plateaued / overreaching / undertraining / insufficient_data. Body: reading, trend, recovery, plateaus, warning_signs (eight named signs each judged), adjustments. - `plan` (from @onewave-ai/workout-program-designer) - the coach proposes the next block as rows (week, day, name, duration, RPE; sets, reps, % of e1RM for lifts). The browser then projects the block forward from the log - weekly load, monotony, strain, the coupled ACWR across the seam, the EWMA ratio - and flags any week over Gabbett's 1.5 or Foster's 2.0, a week-1 jump above 30%, or a week without rest. Verdict: build / hold / deload / rebuild. Body: rationale, program, progression_rule, deload, checkpoints. Handoff: "Design the next block from this review" carries the review's adjustments into the plan lane. Every number the model writes is read back against the engine (and, in the plan lane, against the program it proposed and the projection computed from it); disagreements are shown. History is saved to the athlete's SkillSafe account (a declared collection) and mirrored in the browser. Exports: the numbers as Markdown, the weekly table as CSV, the program as CSV, the result as Markdown and JSON. ## The contract Run body: `{ "task": "review" | "plan", "about": string, "log": string, "facts": string }` where `facts` is the JSON the browser engine computed (`Training.analyze(logText)`, with `plan_request: {weeks, goal, sessions_per_week}` added in the plan lane; the daily series is replaced by `daily_last`). All fields are scalar strings. The reply is one JSON object with `lane`, `title`, `headline`, `verdict`, `summary`, `notes_on_input`, `risks`, `next_steps` and the lane body. ## Sources Derived from the agent skills @onewave-ai/training-log-analyzer (https://skillsafe.ai/skill/@onewave-ai/training-log-analyzer/) and @onewave-ai/workout-program-designer (https://skillsafe.ai/skill/@onewave-ai/workout-program-designer/), repository github.com/onewave-ai/claude-skills, MIT (licence text: https://training-desk.skillsafe.ai/LICENSE-ONEWAVE-CLAUDE-SKILLS.txt). Method sources: Foster C. (1998) MSSE 30(7):1164-1168; Foster C. et al. (2001) J Strength Cond Res 15(1):109-115; Hulin B.T. et al. (2016) Br J Sports Med 50:231-236; Gabbett T.J. (2016) Br J Sports Med 50:273-280; Williams S. et al. (2017) Br J Sports Med 51:209-210; Windt J., Gabbett T.J. (2018) Br J Sports Med 53:988-990; Impellizzeri F.M. et al. (2020) Int J Sports Physiol Perform 15(6):907-913; Banister E.W. (1991); Coggan A. (2003); Epley B. (1985); Brzycki M. (1993). The engine was verified against an independent Python oracle written from those definitions over 400 random logs (112,161 figures, 0 disagreements), with five wrong-definition controls that must and do fail: monotony with the population SD, the uncoupled ACWR, EWMA with lambda = 1/N, same-day TSB, and the Epley and Brzycki formulas swapped. Not medical advice; not affiliated with the skills' author.