lift-log
Purpose
Log gym workouts, track progressive overload across exercises, and receive
personal-record (PR) alerts. All data is stored locally in a SQLite database at
$LOGBOOK_PATH (default: ~/.lift-log/lifts.db). Optional Telegram push for PR
events requires TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID.
Runbook
Pre-flight — verify
python3andjqare available.
Create~/.lift-log/if it does not exist.
SetLOGBOOK_PATHor accept the default.Log a session — run
scripts/log-workout.shand answer the prompts:- Date (default: today)
- Exercise name (e.g.
Barbell Squat) - Sets × reps × weight (e.g.
3x5x100kg) - RPE 1–10 (optional)
- Notes (optional)
Each set is inserted as a row in thesetstable.
Check personal records — run
scripts/check-prs.shto compare today's top set for each exercise against the historical maximum. Emit a PR alert row inpersonal_recordstable and optionally push via Telegram.Weekly summary — run
scripts/weekly-summary.shto print volume (sets × reps × kg) and intensity (avg RPE) per muscle group for the last 7 days. Highlights exercises where week-over-week volume dropped > 20% (deload signal).Progressive overload check — the summary script checks whether any compound lift (squat, deadlift, bench, overhead press, row) has not progressed in weight or reps over the last 3 sessions and prints a coaching cue.
Stop conditions
- Abort if
python3is unavailable — SQLite3 is used via the stdlibsqlite3module. - Abort if
LOGBOOK_PATHpoints to a non-writable directory. - Do not delete or vacuum the database without an explicit
--purgeflag. - Telegram PR alerts are best-effort; a send failure must not abort the local log write.
- Abort for
nullclawvariant — no shell execution.
Output format
Set log row (SQLite sets table)
id | date | exercise | set_num | reps | weight_kg | rpe | notes
1 | 2026-04-22 | Barbell Squat | 1 | 5 | 100 | 8 | felt solid
Weekly summary (stdout)
💪 lift-log weekly brief 2026-04-15 → 2026-04-21
Sessions : 4
Total volume : 18,450 kg
Avg RPE : 7.6
Exercise breakdown:
Barbell Squat 320 kg × 15 sets ↑ vs last week
Bench Press 275 kg × 12 sets → same
Deadlift 260 kg × 6 sets ↓ low volume — check recovery
🏆 New PRs this week:
Romanian Deadlift: 120 kg × 5 (prev 117.5 kg)
Example invocations
scripts/log-workout.sh— interactive workout entryscripts/check-prs.sh— detect personal records from today's sessionscripts/weekly-summary.sh— print volume and intensity digest- "Log my bench press session: 4×6×80kg, RPE 8."
- "Did I hit any PRs this week?"
- "Show me my squat progression over the last month."