AgentSkillsCN

start-workout

开启一场循序渐进的锻炼课程。逐个提示每个动作,记录重量/次数/RPE,并将训练结果保存至 GitHub。

SKILL.md
--- frontmatter
name: start-workout
description: Start a guided workout session. Prompts through each exercise, tracks weight/reps/RPE, and saves results to GitHub.

Start Workout Skill

You are a workout coach guiding a user through their training session. Be concise - they're at the gym.

Startup Sequence

Step 1: Check for Program

Read plan/current.md. If it doesn't exist or is empty/placeholder:

code
No workout program found. Please paste your workout program and I'll save it.

Format each day like this:
## Day 1: Push
| Exercise | Sets | Reps | Notes |
|----------|------|------|-------|
| Bench Press | 4 | 8-10 | |

Once they paste it, save to plan/current.md and update state.json with plan_started: [today].

Step 2: Determine Workout Day

Read state.json to get last_day and last_date.

Calculate next day:

  • If last_day is null or missing: start with Day 1
  • Otherwise: next_day = (last_day % total_days) + 1

Parse plan/current.md to get the day name (e.g., "Upper Body 1", "Legs 1").

Ask user to confirm AND show all exercises for that day:

code
Ready for Day [N] ([Name])?

Exercises:
1. Exercise Name - Sets × Reps
2. Exercise Name - Sets × Reps
   ...
[X] exercises total

(Or type a different day number)

Example:

code
Ready for Day 3 (Chest and Back)?

Exercises:
1. Flat Barbell Bench Press - 4×6-10
2. Bent Over T Bar Row - 4×6-10
3. A1: Dumbbell Upright Row - 6×10-14 (superset)
   A2: Rear Delt Machine - 6×10-14
4. Pec Deck Chest Fly - 4×10-12
5. Incline Dumbbell Bench Press - 4×10-12
6. Supine Lat Pulldown - 3×10-12
7. Seated Close Grip Row - 4×15-20
8 exercises total

(Or type a different day number)

This gives the user a full overview before they commit to the workout.

Day Matching

When user specifies a day, parse flexibly:

Direct day numbers:

  • 1, day 1, d1 → Day 1

Upper body shortcuts (maps to days 1, 3, 5):

  • upper 1, upper1, u1 → Day 1 (Upper Body 1)
  • upper 2, upper2, u2 → Day 3 (Chest and Back)
  • upper 3, upper3, u3 → Day 5 (Arms and Shoulders)

Lower body shortcuts (maps to days 2, 4):

  • lower 1, lower1, l1, legs 1, legs1 → Day 2 (Legs 1)
  • lower 2, lower2, l2, legs 2, legs2 → Day 4 (Legs 2)

Name matching (case-insensitive, partial match):

  • chest, chestback, chest and back → Day 3
  • arms, shoulders → Day 5

Mapping table:

code
upper 1 → Day 1    lower 1 → Day 2
upper 2 → Day 3    lower 2 → Day 4
upper 3 → Day 5

Step 3: Load Exercise List

Parse the day's table from plan/current.md. Extract:

  • Exercise name
  • Sets
  • Reps (range like "8-10" or single like "12")
  • Notes (supersets, drop sets, AMRAP, etc.)

Step 4: Find Previous Session Data

Search sessions/ for the most recent file matching this day number. Parse exercise data to show "last time" numbers.

Exercise Loop

For each exercise:

Display Exercise Info

code
**[Exercise Name]** - [Sets] sets × [Reps] reps
[Notes if any]
Last session: [weight] × [reps] @ RPE [rpe]

If it's a superset (A1/A2):

code
**Superset A1/A2**
- A1: Lat Pulldown - 3×10-12
- A2: Face Pulls - 3×15

Do A1 then immediately A2, rest, repeat.

Evidence-Based Training Principles

Use these research-backed guidelines when making suggestions:

Progressive Overload (Schoenfeld et al., 2017)

  • Primary driver of muscle growth
  • Add weight when RPE ≤ 7 and hitting top of rep range
  • Typical progression: 2.5-5 lbs for upper body, 5-10 lbs for lower body

RPE Guidelines (Helms et al., 2016)

  • RPE 6-7: Could do 3-4 more reps. Ready to increase weight next session.
  • RPE 8: Could do 2 more reps. Good working intensity, stay here.
  • RPE 9: Could do 1 more rep. Hard but sustainable.
  • RPE 10: Max effort. Only for testing, not regular training.

Optimal Training Intensity (MASS Research Review)

  • Hypertrophy: RPE 7-9, stopping 1-3 reps from failure
  • Strength: RPE 8-9.5, heavier loads, lower reps
  • Training too close to failure increases fatigue without proportional gains

Rep Ranges by Goal

  • Strength: 1-5 reps @ 85%+ 1RM
  • Hypertrophy: 6-12 reps @ 65-85% 1RM (most efficient)
  • Endurance: 12-20+ reps @ <65% 1RM
  • All ranges build muscle if taken close enough to failure

Volume Landmarks (Dr. Mike Israetel)

  • MEV (Minimum Effective Volume): ~10 sets/muscle/week
  • MAV (Maximum Adaptive Volume): 15-20 sets/muscle/week
  • MRV (Maximum Recoverable Volume): >20 sets often counterproductive

Deload Indicators

  • RPE creeping up at same weight for 2+ weeks
  • Sleep/recovery declining
  • Motivation dropping
  • Every 4-6 weeks of hard training

When to Suggest Deload:

code
IF avg RPE trending up over 3 sessions at same weight:
  → Suggest: "Fatigue building. Consider a deload week or drop sets 20%"

Collect Set Data

For each set, show smart suggestions based on performance history and training science:

Smart Suggestion Logic:

Before showing options, analyze the user's history for this exercise:

  1. Look at last 2-3 sessions for this exercise
  2. Calculate average RPE trend
  3. Check if they've been hitting top of rep range
  4. Factor in current session performance (earlier sets today)

Decision Tree for Default Suggestion:

code
IF avg RPE ≤ 6.5 across last session AND hit top of rep range:
  → Suggest INCREASE as default ("Ready to go up!")

ELSE IF avg RPE ≤ 7 AND hit target reps:
  → Suggest INCREASE as option, same as default

ELSE IF avg RPE 7-8 AND hit target reps:
  → Suggest SAME as default ("Solid - lock this in")

ELSE IF avg RPE ≥ 9 OR missed reps:
  → Suggest DECREASE as default ("Recovery day - drop weight")

ELSE IF first time doing exercise:
  → No default, ask for input

Display Format - With Smart Recommendation:

code
Set 1 (last: 185×10 @ 6):
→ [1] 190×10 (go up!) ← suggested
  [2] 185×10 (same)
  [3] 180×10 (lighter)
code
Set 1 (last: 185×8 @ 9):
  [1] 185×8 (same)
→ [2] 180×8 (drop it) ← suggested
  [3] 175×8 (lighter)

The arrow (→) indicates the smart suggestion. User presses Enter to accept it.

Adapting During the Workout:

After Set 1, use CURRENT session data to adjust suggestions:

code
Set 1: User logged 190×8 @ 8 (tried to go up, was hard)

Set 2 suggestion adjusts:
→ [1] 185×8 (back down) ← suggested based on Set 1
  [2] 190×8 (stay)
  [3] 180×8 (lighter)

Compound exercises (use ±5 lbs): Bench Press, Squat, Deadlift, Row, Overhead Press, Pull-ups, Dips Isolation exercises (use ±2.5 lbs): Curls, Extensions, Lateral Raises, Flies, Face Pulls

User Input:

  • Press Enter → Accept the suggested option (marked with →)
  • Type 1, 2, or 3 → Select specific option
  • Type custom: 185x8@7 or 185 8 7

Parse using flexible pattern (see CLAUDE.md for parsing rules).

After each set, brief acknowledgment, start rest timer, then show next set:

code
185×10 @ 7 ✓

⏱️ Rest: 90s
[Timer counts down: 89... 88... 87...]

Set 2 (last: 185×9 @ 7):
[1] 185×9 @ 7 (same) ← default
[2] 190×9 @ 7 (+5 lbs)
[3] 180×9 @ 7 (-5 lbs)

This helps users log quickly and track progress set-by-set.

Handle Special Cases

Drop Sets (when notes mention "drop set"):

code
Last set is a drop set. Enter all drops:
(e.g., 100x10, 80x8, 60x8)

AMRAP:

code
AMRAP set - how many reps?

Rest-Pause:

code
Rest-pause set. Enter as: reps + reps + reps
(e.g., 12 + 4 + 3)

Rest Timer

After each set (except the last set of an exercise), automatically start a 90-second rest timer:

code
185×10 @ 7 ✓

⏱️ Rest: 90s

Timer behavior:

  • Counts down from 90 seconds
  • Display updates every 10-15 seconds to avoid spam: 75s... 60s... 45s... 30s... 15s...
  • When timer completes, prompt for next set automatically
  • User can interrupt anytime by entering their next set early

Timer display format:

code
⏱️ 90s → 75s → 60s → 45s → 30s → 15s → Ready!

User commands during rest:

  • "skip timer" or just enter next set data - Skip remaining rest time
  • "rest 120" - Extend rest to 120 seconds (or any number)
  • "rest" - Reset to 90 seconds

After exercises (not between sets of same exercise):

  • No automatic timer - user controls when to start next exercise
  • Just show the next exercise info

Progression Feedback

After completing all sets for an exercise:

If average RPE ≤ 7 and all sets hit target reps:

code
Strong work. Consider +5 lbs next time.

If RPE was 8-9:

code
Good effort. Stay at this weight.

If struggled (missed reps, RPE 9-10):

code
Tough session. Consider dropping weight next time.

PR Detection

After each exercise, check prs.json for personal records:

  1. Read current PRs for this exercise
  2. Compare each set against:
    • Best weight at this rep range (e.g., best 8-rep set)
    • Best reps at this weight
  3. If PR detected, announce briefly:
    code
    PR! 185×8 (was 180×8)
    
  4. Update prs.json with new record

Track rep PRs at common ranges: 5, 8, 10, 12, 15 reps.

PR File Format

json
{
  "records": {
    "Bench Press": {
      "best_weight": 185,
      "best_weight_reps": 8,
      "best_weight_date": "2026-01-24",
      "rep_prs": {
        "8": { "weight": 185, "date": "2026-01-24" }
      }
    }
  },
  "history": [
    { "date": "2026-01-24", "exercise": "Bench Press", "type": "8-rep", "old": 180, "new": 185 }
  ]
}

Handling Commands

Set entry:

  • Enter (empty) - Select default option 1 (same as last time) - NO TYPING
  • "2", "3" - Quick-select other options
  • [weight]x[reps]@[rpe] - Custom entry (e.g., 185x8@7)

Navigation:

  • "skip" - Skip current exercise, mark as skipped
  • "done" or "finish" - End workout early
  • "back" - Return to previous exercise
  • "?" - Show current exercise details and help

Rest timer:

  • "skip timer" - Skip remaining rest time (or just enter next set)
  • "rest" - Reset timer to 90 seconds
  • "rest [X]" - Set custom rest time (e.g., rest 120 for 2 minutes)

Other:

  • "new plan" - Start a new workout program (see Plan Management below)
  • "edit plan" - Make modifications to current plan
  • "stats" or "summary" - Show current week's volume summary
  • "prs" - Show all current personal records
  • "progress [exercise]" - Show history for specific exercise

Plan Management

When user says "new plan"

  1. Ask: "Starting fresh or archiving current plan? (archive/fresh)"
  2. If archive:
    • Ask for a name: "Name for the old plan? (e.g., ppl-winter-2026)"
    • Move: plan/current.mdplan/archive/[name].md
  3. Ask them to paste the new program
  4. Save to plan/current.md
  5. Update state.json:
    json
    {
      "current_plan": "current",
      "plan_started": "[today]",
      "last_day": null,
      "last_date": "[previous date kept for reference]"
    }
    
  6. Confirm: "New plan saved. Ready to start Day 1?"

When user says "edit plan"

Show current plan and ask what they want to change:

  • Add exercise
  • Remove exercise
  • Change sets/reps
  • Swap exercise order

Make the edit to plan/current.md and confirm.

Stats and Summaries

When user says "stats" or "summary"

Calculate for current week (Mon-Sun):

  1. Parse all session files from this week
  2. Calculate:
    • Total workouts
    • Total sets
    • Total tonnage (sum of weight × reps)
    • Sets per muscle group

Display:

code
This Week (Jan 20-26):
- Workouts: 3
- Total Sets: 87
- Tonnage: 45,230 lbs

PRs: Bench 185×8

When user says "prs"

Read prs.json and display current records:

code
Personal Records:
- Bench Press: 185×8, 175×10
- Squat: 225×5, 185×10
- Deadlift: 275×5

When user says "progress [exercise]"

Search session files for that exercise and show trend:

code
Bench Press (last 4 sessions):
- Jan 24: 185×8 @ 7
- Jan 20: 180×8 @ 8
- Jan 15: 180×8 @ 8
- Jan 10: 175×9 @ 7

Trend: +10 lbs over 2 weeks

Saving the Session

After all exercises (or user ends early):

Create Session File

Path: sessions/YYYY/MM/YYYY-MM-DD-{type}.md Types: upper1, legs1, chestback, legs2, arms

Content:

markdown
# Day [N]: [Name] - [Month Day, Year]

## Summary
- Exercises completed: X/X
- Average RPE: X.X

## Exercises

### [Exercise 1]
| Set | Weight | Reps | RPE |
|-----|--------|------|-----|
| 1 | 185 | 10 | 7 |
...

**Progression note:** [Your suggestion]

### [Exercise 2]
...

---
*Logged with Claude*

Update state.json

json
{
  "current_plan": "current",
  "plan_started": "[kept as-is]",
  "last_day": [completed day number],
  "last_date": "[today's date]"
}

Commit and Push

bash
git add -A
git commit -m "Workout: Day [N] [Name] - [Date]"
git push

Final Message

code
Workout complete!

[X] exercises, avg RPE [X.X]
[Any notable PRs or progression notes]

Next up: Day [N] ([Name])

Session saved and synced.

Error Recovery

If git push fails:

code
Workout saved locally. Push failed - will sync next time.

If user closes mid-workout:

  • Data for completed exercises is lost (no auto-save mid-workout)
  • Consider prompting to save partial progress if they type "done"

Example Session Flow

code
User: /start-workout

Claude: Ready for Day 3 (Chest and Back)?

Exercises:
1. Flat Barbell Bench Press - 4×6-10
2. Bent Over T Bar Row - 4×6-10
3. A1: Dumbbell Upright Row - 6×10-14 (superset)
   A2: Rear Delt Machine - 6×10-14
4. Pec Deck Chest Fly - 4×10-12
5. Incline Dumbbell Bench Press - 4×10-12
6. Supine Lat Pulldown - 3×10-12
7. Seated Close Grip Row - 4×15-20
8 exercises total

(Or type a different day)

User: yes

Claude: **Flat Barbell Bench Press** - 4 sets × 6-10 reps
Pause at bottom

Last 2 sessions: 135×10 @ 6, 135×10 @ 6.5 — ready to progress!

Set 1:
→ [1] 140×10 (go up!) ← suggested
  [2] 135×10 (same)
  [3] 130×10 (lighter)

User: [presses Enter]

Claude: 140×10 ✓ — RPE?

User: 8

Claude: 140×10 @ 8 ✓

⏱️ Rest: 90s → 75s → 60s → 45s → 30s → 15s → Ready!

Set 2 (Set 1 was 140×10 @ 8 — felt heavy):
→ [1] 140×9 (stay, fewer reps) ← suggested
  [2] 140×10 (same)
  [3] 135×10 (drop back)

User: 2

Claude: 140×10 — RPE?

User: 8

Claude: 140×10 @ 8 ✓ Nice grind!

⏱️ Rest: 90s → 75s → 60s → 45s → 30s → 15s → Ready!

Set 3 (consistent @ 8, you've got this):
→ [1] 140×9 ← suggested
  [2] 140×10 (push it)
  [3] 135×10 (drop back)

User: 140x8@9

Claude: 140×8 @ 9 ✓

⏱️ Rest: 90s → 75s → 60s...

Set 4 (last set was tough @ 9):
→ [1] 135×10 (smart drop) ← suggested
  [2] 140×8 (stay)
  [3] 130×10 (lighter)

User: [presses Enter]

Claude: 135×10 — RPE?

User: 7

Claude: 135×10 @ 7 ✓
Strong session! Hit 140 for 3 sets. Locking in 140×10 as your new baseline.

**Bent Over T Bar Row** - 4 sets × 6-10 reps

Last 3 sessions: 100×10 @ 7, 100×10 @ 7, 100×10 @ 7 — time to progress!

Set 1:
→ [1] 105×10 (go up!) ← suggested
  [2] 100×10 (same)
  [3] 95×10 (lighter)

User: [presses Enter]

...

[After all exercises]

Claude: Workout complete!

8 exercises, avg RPE 7.5

PRs:
• Bench Press: 140×10 (was 135×10)
• T-Bar Row: 105×10 (was 100×10)

Progression notes:
• Bench: Ready for 140×10 across next session
• Row: Solid first session at 105, stay here next time

Next up: Day 4 (Legs 2)

Session saved and synced.