Agon tracks Relative Density (RD): your total session volume divided by total time multiplied by bodyweight. A rising RD means you are getting stronger relative to your bodyweight, regardless of whether that weight is going up or down.
Workout
Log each training session here. Set the date, your bodyweight, and optional session notes. Log sleep for the night before, total hours and deep sleep hours, to track recovery alongside training. Add exercises one by one - each set gets its own load, reps, and time. The app calculates volume, density, and RD automatically as you build the session. Hit Save to commit. Saved sessions appear in History.
- Bar type - toggle between Standard (total weight) and Vitruvian (weight per side ×2)
- Bodyweight exercises - choose Normal, Vest (adds lbs), or Assisted (subtracts %)
- Crown icon 👑 in History - flags when an exercise hit its rep accumulation trigger, signaling time to increase weight. The trigger is configurable in Settings
- Sleep - log total sleep and deep sleep in hours and minutes. Deep sleep quality is color-coded on the Trend chart (green ≥25%, yellow ≥15%, red <15% of total sleep)
- Quick log - one-tap dose logging for your stack items, right on the Workout tab. Buttons show each item's per-dose measure (syringe units or capsule count); stock decrements automatically
- Sync Garmin - optional. If an admin has configured Garmin in Settings, a ⌚ button appears next to the sleep fields and fills sleep, deep sleep, and bodyweight for the session date in one press. It is manual rather than automatic because the app is often opened before the overnight sync or the morning weigh-in has landed. Every value stays editable, and sleep and weight fill independently if only one is available
History
Filterable log of all sessions. Defaults to the current month. Use the date range and exercise filter to look further back. Edit or delete sessions from here. The delta badge shows RD change vs the prior session.
Trend
Weekly RD and bodyweight overlaid on a dual-axis chart. Colored bands show your training phases (Weight Loss, Cut, Recomp, Bulk, etc). The Recomp score card tells you whether you are building strength while losing weight, maintaining, or regressing.
- Phases - add phases to track your training cycles. Phases inform the AI and the macro calculator
- Protocols - toggle any protocol (active or discontinued) as a shaded band on the chart to correlate RD trends against its timing. For cycled protocols, shaded segments are on-cycle windows and gaps are off-cycle. Tap a name to edit; full management lives in the Stack tab
- Sleep overlay - toggle weekly deep sleep quality bands on the chart. Green = restorative (≥25% deep), yellow = marginal (≥15%), red = poor (<15%). Coexists with protocol overlays
- Macro calculator - computes BMR, TDEE, and daily macro targets based on your profile and current phase
- Macro targets - retroactive macro history across all logged phases using average bodyweight per phase period
Stack
Manage your supplements, peptides, and medications end to end: what you take (Protocols), what you physically have (Inventory), and what you actually took (dose log).
- Protocols - the protocol builder captures dose, unit, time of day, weekday schedule, and optional on/off cycling with an anchor date. Cycle status badges (On cycle, Off cycle, Upcoming, Discontinued) update automatically. Discontinued protocols are hidden by default; use the toggle to reveal them
- Inventory - physical stock per item with reconstitution math (BAC water, units per dose as a syringe reading), vials remaining, and low-stock flagging. Link items to protocols so doses decrement the right stock. The Backfill tool reconciles stock against your logged dose history
- Quick log - one-tap dose logging at each item's default amount, mirrored on the Workout tab
- Recent doses - the execution log. Edit or delete entries; deleting restores stock
Progress
Per-exercise analysis. Select any logged exercise to see top-set load over time, estimated 1RM (Epley formula), PR table by rep count, and session volume trend. For fixed-load accessory exercises, the Block Rep Curve panel appears showing the fatigue decay, total reps trend, Set 1 adaptation trend, and load reset arc. See The Method tab for an explanation of this system.
- Block Rep Curve - only appears for exercises with fewer than 10 sets per session. Exercises with 10+ sets are treated as wave/varied protocols and are exempt from Block Rep Curve analysis and rep trigger accumulation
Insights
AI-powered analysis of your training data. Ask plain-English questions and get answers grounded in your actual session history, profile, active phase, and protocols. Set up one of three AI providers in Settings: Google Gemini (free tier available), Anthropic Claude (API key required), or Ollama (fully self-hosted, no external API calls).
- Example questions: "Am I losing strength on my pulls?", "Which sessions had the best RD?", "How does my RD compare between my Weight Loss and Recomp phases?"
- The "Build a meal plan with AI" button on the Trend tab sends your macro targets directly here
- Garmin recovery - if Garmin is configured, the AI also receives 90 days of daily recovery: sleep, sleep score, overnight HRV, resting heart rate, body battery, and high-stress hours. This covers rest days too, which the session log cannot, so you can ask things like "did my RD drop the week my HRV fell?" or "how does my sleep score track against my training load?". It is read at question time and never stored
- Privacy tip: Choose Ollama for fully private analysis with zero data sent to external servers
Exercises
The shared exercise bank. Add, edit, or remove exercises. Each exercise has a tool type, a multiplier, muscle group tags, and a load hint. You can set a per-exercise rep trigger override here to override your global default for specific exercises.
Data
Import and export your session data as Excel files.
- Import - download the template, fill it out (each row is one set), upload it. The Phase column is optional but will create phase records automatically
- Export - filter by date range and phase before downloading. Exports Log, Trend, and ExerciseBank sheets
Settings (click your username)
Opens via clicking your username in the top-right corner.
- Profile - name, DOB, gender, height, target bodyweight, week start, activity level, rep accumulation trigger (default 50), and set time (default 1.5 min, pre-fills the time field on every new set and drives RD calculation)
- Account - change your password
- Two-factor authentication - enable TOTP-based 2FA. Scan the QR code with any authenticator app. Admins can reset it via the Admin panel if you lose your device
- External API - generate a read-only API key for your data for use with external AI tools
- Garmin - admin only, and optional: leave it blank and the feature does not appear anywhere. Point it at a garmin-grafana InfluxDB 1.x instance (URL plus database name) and a Sync Garmin button appears on the Workout tab, filling sleep and bodyweight from your own Garmin history. The URL must be reachable from the Agon backend container, so a container name works better than a host IP. It is admin-gated because the server fetches whatever URL is entered. Use Test to prove the connection before saving: it reports whether the host is reachable, whether the database exists, and the latest sleep and bodyweight it can see
- AI Insights - choose your AI provider: Gemini (free tier available), Claude (API key required), or Ollama (self-hosted, fully private). Keys are encrypted and stored on your server. Ollama requires a local or remote instance running an OpenAI-compatible API
Protocols (supplements, peptides, medications) are managed from the Stack tab, alongside inventory and dose logging. The Trend tab offers a simplified toggle list for chart correlation. Protocols are passed to the AI as context. Agon does not provide medical advice.
Agon is built around a specific training methodology that combines density-block accumulation for accessories with dual-wave progressive overload for compound lifts. This page explains the science behind both systems and why they work especially well during active weight loss or GLP-1 therapy.
Why Relative Density?
Conventional strength trackers reward absolute load on the bar. But when you are actively losing weight, through dieting, a cut phase, or GLP-1 medication, your bodyweight is a variable. A 200 lb person lifting 100 lbs is doing more relative work than a 220 lb person lifting the same weight. RD captures this: RD = volume ÷ (time × bodyweight). A rising RD alongside a falling bodyweight is the signal that you are preserving or building strength while losing mass.
This matters most for people on GLP-1 medications (semaglutide, tirzepatide, retatrutide), where weight loss can be rapid and the risk of losing lean mass alongside fat is real. If your RD is rising, your muscle is being preserved. If it is falling while your weight falls, you need to adjust training or nutrition before a body composition scan would show it.
Accessory blocks, escalating density, fixed time, cumulative reps
Accessory exercises (bicep curls, lateral raises, flyes, tricep extensions, etc.) are trained in fixed-load density blocks: multiple sets at the same weight, AMRAP each set, with a fixed rest interval between sets. The goal is to accumulate a target number of total reps across the block before increasing the load.
The principle is escalating density within a fixed time block. By keeping the load constant and the rest interval fixed, your body is forced to do more total work as it adapts, your rep counts climb session over session at the same weight until you hit the trigger and move up. This is a direct application of progressive overload at the volume level rather than the load level.
Taking each set close to muscular failure is the primary driver of both hypertrophy and strength across a wide rep range (Schoenfeld et al., 2017). Fixed load with timed rest creates a predictable fatigue curve, your first sets will be higher rep, your later sets lower as fatigue accumulates. This is expected and correct. The rest window sits squarely in the research-supported range for hypertrophy-focused work (Schoenfeld, 2010).
The rep accumulation target acts as a readiness signal: once you are producing enough total reps in your fatigued state, the load is no longer a sufficient stimulus and it is time to progress. A typical progression looks like:
- Session 1 at new load: 10, 8, 6, 6, 5, 5 = 40 reps, still building
- Session 3: 12, 10, 8, 7, 7, 6 = 50 reps, trigger hit, load up next session
Load increments are deliberately small, 1 lb for smaller muscle groups (biceps, triceps, shoulders), up to 1.5 lb for larger ones, because microloading allows near-continuous progression without the stalls common with larger jumps. Your rep trigger is configurable in Settings (default 50). Your set time is also configurable in Settings (default 1.5 min), this value pre-fills the time field on every new set and is the denominator in the RD and density calculations. Adjust it to match your actual rest-plus-effort window. You can also set a per-exercise rep trigger override in the Exercise bank.
Reading the Block Rep Curve
The Block Rep Curve panel appears in the Progress tab when you select a fixed-load accessory exercise. It shows three signals:
- Set-by-set bars: the fatigue decay from your last session. Set 1 is shown in green, subsequent sets in orange. A healthy curve slopes downward. A flat curve means the load is too light. A red bar flags any set below 4 reps, the load may have jumped too far.
- Total reps trend: cumulative reps per session over time, with your trigger threshold as a dashed reference line. Green bars have hit the trigger; orange bars have not.
- Set 1 reps trend: your opening set performance across sessions. This is the cleanest signal for systemic fatigue. If Set 1 reps start declining session-over-session at the same load, you may be under-recovered or under-fueled. Rising or stable Set 1 reps means the adaptation is on track.
If a load reset is detected (your logged load dropped from a previous peak), the Reset Arc shows where you reset from, your current load, and a progress bar back toward your previous peak.
Compound lifts, dual wave, weekly +1
Compound movements (deadlifts, squats, bench press, rows, shoulder press) use a different structure: 10–12 sets across two ascending waves, with the starting weight increasing by 1 lb each week regardless of rep performance.
Dual-wave loading alternates between two ascending load sequences within the same session. The first wave warms up the nervous system and accumulates submaximal volume. The second wave, starting slightly heavier, exploits post-activation potentiation, the CNS is already primed, so outputs are higher than they would be cold. The fixed +1 lb/week progression on the starting weight provides a simple, non-negotiable overload mechanism. Three months of consistent training adds roughly 12 lbs to the starting weight of every compound.
Timed efforts
Some exercises are trained as pure timed efforts, maximum reps in a fixed window (typically 20 minutes) with no fixed set count. Pull-up variations are a common example. As your bodyweight falls, the relative load per rep decreases automatically. Agon tracks total reps and your bodyweight so the RD calculation captures both dimensions.
Voluntary load resets
If you grind badly on an exercise, Sets 5 and 6 dropping to 3–4 reps, the right move is to reset the load and rebuild. This is calibration, not failure. Agon's load reset tracker detects this and shows the rebuild arc: where you reset from, your current load, and how close you are to your previous peak.
Global deloads from travel or time off are handled the same way, come back, reset, rebuild. The data stays and the RD trend will show the recovery arc.
Exemptions: Wave protocols and kettlebells
Two exercise patterns are exempt from Block Rep Curve tracking and rep trigger accumulation:
- Wave and varied protocols (10+ sets per session): exercises trained with 10 or more sets in a single session are assumed to be undulating periodization or wave loading. These don't follow fixed-load density escalation. Block Rep Curve won't appear for these exercises, and they won't trigger rep accumulation signals. Track them separately via your session notes or the Progress tab's overall trend chart.
- Kettlebell exercises: kettlebells are exempt from rep triggers entirely. The asymmetric load, inherent instability, and technique sensitivity make rep-count based progressions less reliable than fixed barbells or dumbbells. Progress kettlebells by feel, technique quality, or load when it suits the session.
Rep trigger mechanics: Load increments and muscle-dependent thresholds
The rep accumulation system is sensitive to muscle group size. Smaller muscles (biceps, triceps, shoulders) recover and adapt faster, so their load increments are smaller. Larger muscle groups (chest, back, legs, glutes) need bigger jumps to remain challenging as they adapt.
- Small muscles: 1 lb increments (biceps, triceps, shoulders, calves)
- Large muscles: 1.5 lb increments (chest, back, legs, glutes)
Default rep trigger: 50 reps per block. This is total reps across all sets at the same load. Once you hit 50 (or your custom threshold), the next session moves up by the increment above.
Bodyweight exercises have a separate trigger: 100 reps. Bodyweight movements accumulate reps faster due to reduced neural demand per rep, so the threshold is doubled to keep stimulus progression reasonable.
Per-exercise overrides: You can set a custom rep trigger for any individual exercise in the Exercise bank. Use this if an exercise responds better to a higher or lower threshold than the global default.
Bodyweight exercises: Multipliers and RD calculation
Bodyweight exercises (pull-ups, dips, push-ups) are scaled by a muscle-group specific multiplier. This accounts for the fact that bodyweight work is highly correlated with your total body mass, not just local muscle. Agon uses these multipliers:
- Pull-ups / chin-ups: 0.6× your bodyweight. A 200 lb person pulling up moves ~120 lbs of effective load.
- Dips: 0.6× your bodyweight
- Push-ups: 0.4× your bodyweight
- Pistol squats / shrimp squats: 0.75× your bodyweight
When you log a bodyweight exercise, the app calculates the effective load (bodyweight × multiplier) and uses that in your RD calculation. As you lose weight on GLP-1 or a cut, the effective load per rep automatically decreases, but the RD calculation captures it. A rising RD on bodyweight work while your weight falls is a powerful signal of true strength preservation.
You can also add weight via a vest (adds to BW) or subtract it via assistance (percentage reduction). These appear as modifiers in the set entry form.
Deload philosophy: Subjective, externally driven, not algorithmic
Agon does not suggest deloads or algorithmic recovery windows. This is intentional. Deloads are a response to life stress, travel, illness, accumulated fatigue, or a grinding session, not a calendar event. Forcing a deload based on an algorithm often leads to unnecessary training loss or, conversely, training when you shouldn't.
Instead, you own the decision. If you need a deload:
- Reduce volume, load, or frequency for 3–7 days
- Log the lighter sessions normally, Agon will show the dip in RD and volume
- When you return to normal intensity, you'll see the recovery arc in the Trend chart and a reset arc in Block Rep Curves if you stepped back load-wise
- Use your AI Insights to ask: "Did my RD recover after my deload week?" or "How does my Set 1 rep performance look?"
This approach respects the reality that you know your body better than an algorithm ever will, while Agon provides the data to verify that your decision worked.
Anatomy heatmap: RD delta by muscle group
The Progress tab shows an anatomy heatmap with muscle groups shaded by color intensity. This heatmap displays RD change per muscle, not load change. It answers: "Which muscles am I getting relatively stronger in, and which are lagging?"
Interpretation:
- Green (bright): RD is rising for that muscle group. You are accumulating strength in that area relative to your bodyweight.
- Yellow/orange (neutral to warm): RD is flat or rising slowly. Maintenance or modest progress.
- Red (dark): RD is falling for that muscle group. You may be losing relative strength there, or training frequency for that muscle is low.
This is useful for spotting imbalances. If your back RD is rising but your chest RD is falling, it might signal an overemphasis on rows/pulls and underemphasis on pressing. Use this as input to adjust your next training phase.