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. Connecting your own assistant needs a paid Claude or ChatGPT plan; these don't — they run on the server's key, for everyone you've let in.
That key is yours, so these cost you a few cents on a day someone uses them. Cheap model for parsing, cached prompts, and a per-user daily cap you set — the bill stays boring.


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 rather than a password Almanac has to store. Assistants connect with a token or the MCP OAuth flow. The deploy guide covers DNS, TLS, nginx and the OAuth client end to end.
Run it for yourself or for a few people. An email allowlist decides who gets in; everyone on it signs in and gets their own account, their own history, and their own assistant connection. Nobody sees anyone else's numbers.