Almanac · self-hosted fitness record

A precise log of what you eat and lift, written for your AI agent to read.

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.

Single-user MCP + web dashboard One SQLite file BSD-2 licensed

One record, two ways in

Same data from your assistant or from the browser.

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.

The Almanac web dashboard: nutrition phase and TDEE, today's macros and meals, a 7-day macro grid, weight trend, sleep, and the training panel.
The dashboard: nutrition phase and TDEE, today's macros, a seven-day grid, weight trend, sleep, and the training panel with a recommended session.

Answers from your own numbers

The point isn't that it talks back. It's that it's right.

Every answer comes out of what you logged, so it knows what's recovered and where the cut actually stands.

What should I train next?

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.

How am I doing today?

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

It tells you which numbers actually mattered.

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

No agent of your own? There's one built in.

Two chat surfaces ship with the web app, so you don't have to wire anything up to get the same thing.

The AI meal assistant parsing a plain-language meal description into editable macro entries.
Meal assistant: describe what you ate and it returns editable entries, looking up unfamiliar foods and asking about portion size when it changes the math.
The AI insights coach summarizing nutrition, training, and sleep from the user's history.
Insights coach: reads your nutrition, training, and sleep back to you and takes follow-up questions. It reads the log but never changes it.

What it keeps track of

More than calories.

Nutrition and TDEE

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.

Weight trend

A smoothed trend, so a salty dinner doesn't read as fat gain. You get a usable direction after a couple of weigh-ins.

Training and recovery

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.

Sleep and steps

Hours, quality, and a running sleep debt. Steps count toward the energy balance as everyday movement.

Nutrition phases

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.

Calendar and history

Open any past day and fix it. Month view flips between workouts and intake.

Self-hosted by design

Why the data stays yours.

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.

# the stack
almanac-web  static SPA (nginx)
almanac-api  Fastify + SQLite
almanac-mcp  MCP server
└─ oauth2-proxy · your SSO

# clients
Claude Desktop / Code
ChatGPT · any MCP client
# or just the browser