Almanac · self-hosted fitness record
Almanac keeps your meals, workouts, weight and sleep in one accurate log, and puts an MCP server in front of it so whatever assistant you already use can read and write the whole thing. Ask how the cut is going and the answer comes off your actual numbers instead of a guess.
One record, two ways in
The assistant reads and writes over MCP. The dashboard does all of it too. One API, one SQLite file, so the two sides can't drift apart.

Answers from your own numbers
Every answer comes out of what you logged, so it knows what's recovered and where the cut actually stands.
used 2 tools
PUSH is the clear call for tomorrow.
Chest, front delts, triceps, and abs are all in the prime window (~94h since last hit) — ideal timing, full output expected. No conflicts, no too-soon groups.
LEGS is available too (quads/hams/calves recovered at ~49h) but the timing signal is weak — acceptable, not prime. Fine to swap the order, but PUSH is the better pick today.
PULL is a hard no — you just finished it. Back, biceps, traps, forearms, rear delts all need another 24–48h minimum.
get today context
Solid day. Here's where you stand:
Nutrition — 1,790 / 1,900 kcal, on track with 110 left. Protein's at 142g of 180 — room for a high-protein snack before bed.
Training — PULL done today, your 4th workout this week. Back, biceps, traps, forearms all fully depleted, which is exactly right.
Weight — 169.2 lb this morning; trend 170.2 and drifting down, about 1.6 lb over the past 17 days.
Energy balance — net −438 kcal against your measured TDEE of ~2,230. Day 39 of the Spring cut. Everything's logged, zero nudges.
Precision where it counts
Hand it a recipe, a label, or a weight in grams and the arithmetic is done for you. The built-in meal assistant looks up whatever it doesn't already know, and asks about portion size when that's the part that changes the answer.
What comes back is the assumptions behind the total, and which parts of it carried the weight. A tablespoon of rice vinegar is noise; "a bit less than half" of the pan is a 150 calorie decision. Knowing which is which keeps logging from turning into busywork, and it's why an honest estimate on the nights you can't measure still leaves the trend intact.
Built in, if you don't run your own
Two chat surfaces ship with the web app, so you don't have to wire anything up to get the same thing.


What it keeps track of
Meals, macros, alcohol. Once there's enough data it back-calculates your TDEE from what you actually ate and how your weight actually moved, instead of a formula that's never met you.
A smoothed trend, so a salty dinner doesn't read as fat gain. You get a usable direction after a couple of weigh-ins.
Templates, per-muscle recovery timing, strength PRs, and a suggested next session based on what's actually recovered rather than what day of the week it is.
Hours, quality, and a running sleep debt. Steps count toward the energy balance as everyday movement.
Run a cut, bulk or maintenance with its own targets and adherence. Mark time off so a week at the cottage doesn't drag your averages down.
Open any past day and fix it. Month view flips between workouts and intake.
Self-hosted by design
It runs on your own hardware. Health data is about as personal as it gets, and years of it shouldn't have to sit on someone else's server just to be useful to an AI.
It's a Docker Compose stack behind oauth2-proxy, so you sign in with Google, GitHub, or whatever OIDC you already run. Assistants connect with a token or the MCP OAuth flow. The deploy guide covers nginx and TLS end to end.