Mission Built

A training partner from the Rack

Ironstack.

In testing

Weight is a number. Heavy is a feeling. Other apps know the number. Ironstack knows how it felt.

Dashboards
7
Skills
2+ 1 coach
Status
In testingv1 to follow
Source
GitHub

A training partner with your whole history in its head.

Other apps know the number: the weight, the reps, the date. Ironstack holds every set you have ever done and every note you wrote about how it felt, which bar you had in your hands, where you were, and what you told yourself to watch next time. Then it uses all of it, in two places.

At the rack · in the moment

It adjusts the day with you.

Talk to it between sets. It answers from your ceiling, your notes, and your program, and it shows its reasoning.

  • Comp bench today and the program gives no opener.Open at 185.Under your 228 ceiling, from the Sept 4 set. Your all-time best is older; not the number to chase today.
  • Third set felt like a 9 and the sheet says 8.Hold the load, drop a rep.Last time you pushed through a 9 in week 3 you wrote "slow off the chest" for the next two sessions.
  • Squat rack is taken. What covers it in this block?Belt squat or front squat.Same pattern, and you have logged both in a strength phase before.
  • Cue me on the next set.Brace before the unrack.Your own note from the last three chain sessions.

At the table · the deep read

It tells you what the week meant.

Seven dashboards, verdict first. A sentence, the number behind it, the window it counted, and an honest decline when it cannot say.

  • How heavy was this week?Heavier than 10 of your last 12.Heavy means heavy for you now: measured against your best in the trailing 90 days, not an all-time PR.
  • Am I ramping?Ramping.Seven-day load 37% above your four-week average. The last two times you were here: Jul 2026, May 2026.
  • What am I neglecting?Calves: 17 days. Normally every 6.Beside it, in your own words, you wrote "grip" five times this month. The gap between the two is the finding.
  • Was I flat every time I trained on the road?Four of five sessions.Found by meaning, not keyword: "no pop", "dragging" and "tired" all count. Joined to what you lifted on those days.

What no logging app can say.

Each of these needs your whole history, your notes, and a reader that has both. Other apps have the sets. They have never had the rest.

Heavy means heavy for you now

Heavier than 10 of your last 12 weeks.

Every set is measured against your best in the trailing 90 days, not an all-time PR. Come back from a layoff and other apps call everything light. Ironstack knows what heavy is this month.

Overview · intensity

Precedent

The last two times you were here.

Ramping is a number on a chart until something holds seven years of your history and can say: this load band, this phase, Jul 2026 and May 2026, and what happened next.

Overview · load

The machine versus your own words

It says calves. You wrote grip.

The computed drift and what you told yourself to watch sit on the same screen. When they disagree, that is the most interesting thing on the page, and nothing else shows it.

Overview · drift, in your own words

Notes with meaning

Flat, dragging, no pop: one question.

Your notes are indexed for meaning, not keywords, and joined to the sets. How you felt and what you lifted have never been in the same query before. Optional, and it degrades to full text without it.

Elastic semantic text · recall and the coach

A coach with a ceiling

Open at 185. Here is why.

Starting loads, a cue from your own notes, an alternative in the same pattern, a rep off the plan when the set said 9. Never above your ceiling, and it names the set the ceiling came from. Not your program. Not a doctor.

Coach · Kibana Agent Builder

It names its threshold

Two meets is a comparison, not a rule.

When the data is thin the card says how much it needs and when the verdict unlocks, in the same type as a finding. A logging app shows you a zero. This tells you why.

Every card · honest declines

Other appsIronstack
Logs a setThree taps at the rack.Tell Claude, in your own words, with the bar and how it felt.
Compares againstYour all-time PR.Your best in the trailing 90 days. Heavy for you now.
Tells youA chart, going up and to the right.A sentence, the number behind it, the window it counted.
When it cannot sayShows a zero.Says what it needs and when the verdict unlocks.
Your notesA text box per set nobody can search.Indexed for meaning, joined to the sets, read by the coach.
Answers a questionNo.Ask the coach, over your actual history, with a ceiling it shows you.
Your dataOn their servers.In your repo and your Elastic. Nothing phones home.
Best atLogging. They have spent years on it, and Ironstack will not try to beat them.Reading. Keep your logging app for the rack if you like; come here for the verdict.

The first screen is a verdict.

Three screens from the app, redrawn with invented numbers. The real ones look like this with your history behind them.

Iron Stack OverviewA Mission Built training systemAsk the coach ↗
OverviewProgramSessionHistoryMeetsMindset

How heavy was this week Open week

Heavier than 8 of your last 12 weeks.

6 of 61 main-lift reps at 80% or more of your 90-day best.

Open week, so ranked per training day: 1.5 across 4 so far.

Tick: your 12-week average, 4.1 reps a week.

Main lifts only, ranked against your last 13 weeks
History › reps by week

Am I ramping

Ramping.

7-day load 24% above your 4-week average.
Monotony 1.12.
Measured to 2026-09-06; you last trained 2026-09-05.

The last two times you were here: Jun 2026, Mar 2026.

Tonnage, 7 days against the trailing 28
History › acute vs chronic

What am I neglecting

Rear delts: 16 days.

Normally every 5 days.

Tick: your normal gap.
Indexed 2026-09-06.

Working sets over the whole log, not this page's range
Session › every set

OverviewThe first screen is verdicts, not your log. Each card states a finding, shows one number, names its window, and declines when it cannot say.
Iron Stack SessionA Mission Built training systemAsk the coach ↗
OverviewProgramSessionHistoryMeetsMindset

Session

Strength Week 6 Day 2 of 4

Friday, Sep 5, 2026 · Home gym
prev 2026-09-03   next none   the table on the right walks to either

Prev / next

Session ↓PrevNext
2026-09-052026-09-03(null)

Top set

205lb×5@8

Comp bench

Tonnage

12,480 lb

moved this session

Length

1h 12m

3 day streak

Avg working RPE

7.4

14 working sets

Sets

26

218 reps · 12 lifts

SessionOne day. The main lift's top set in the header, the comparison with last time, your notes underneath.
ICIronstack CoachAgent· 6:41 AM

8 tools ran ›

Here is the read for today's bench (9/7), two days out from your last bench session (9/5):

Start your working sets at 200 ×5, straight bar. That is one step under what you actually hit for reps last time.

Why:

  • Ceiling check: lift_ceiling on comp-bench caps at 241 lb (estimated), from the 9/5 session, 205 ×5 @RPE 8, and you wrote "last rep slowed" on that set. Nothing today should approach that number.
  • Heaviest weight you have actually lifted in the last 90 days is 205 lb. Your all-time meet best is 248 lb (4/12/2025), an old PR, not the number to chase today.

Want a warm-up progression up to 200?

CoachA starting load, the ceiling it sits under, and the set that ceiling came from. Then a decline when asked for a program.

Start with a file. Add a stack when you want one.

Each rung is optional. The skill works on its own with nothing but Claude and a folder. Every rung after it adds one thing, and nothing you have already logged changes.

1

The skill

Claude as your workout partner. It logs what you say, keeps the count, and offers a cue when you want one. A markdown journal, one file per session, in a repo only you can read.

Needs

Claude. A private repo.

Gives

A log you own, in words you wrote.

2

The stack

Elasticsearch, free self-hosted or Serverless. The starter ships the schema, the mappings, and a GitHub Action that indexes every session on push. Reindex is safe: the ids are deterministic.

Needs

An Elastic endpoint and a write key, as two repo secrets.

Gives

Recall. Ask about any lift, any day, any note. Semantic search when the tier has it.

3

The dashboards

Seven Kibana pages linked by drilldowns, in Iron Log. One saved-objects file, one import. The verdict cards, the honest declines, the method written once at the foot of each page.

Needs

Kibana. One import script, or Stack Management.

Gives

The read of your training, not a copy of your log.

4

The coach

A Kibana Agent Builder agent. The prompt, the tools it runs, and the ceiling rule are files in the repo. Ask your training partner from any dashboard, top right.

Needs

Agent Builder on your Elastic tier. Ten minutes in Kibana with the README.

Gives

A starting weight with its reasoning. A decline when you ask for a program.

OverviewSignals and verdictsProgramBlock, week, phaseSessionOne day, top set firstLifte1RM over timeHistoryEvery sessionMeetsAttempts and tapersMindsetYour notes, read back

Three ways in, when it ships.

One repo is the source of truth for all three. Pick the door that matches how much of the stack you want.

In testing

Ironstack is in daily use by its author before v1. The code is public on GitHub today and you are welcome to read it. The doors below open with the v1.0 release, once a fresh install has been proven on a machine that is not mine.

Watch the repo

Door 1 · recommended

Let Claude install it

Add the Ironstack skills to Claude Code and say set up Ironstack. The setup skill creates your private repo from the starter, asks for your Elastic endpoint and key once, indexes the example session, imports the dashboards, and walks you through the coach. It stops at every step that touches your account.

# skills only, no server, nothing phones home
git clone https://github.com/missionbuilt/ironstack
cp -r ironstack/skills/* ~/.claude/skills/
# then, in Claude Code:
> set up Ironstack

Rungs 1 to 4 · opens with v1.0

Door 2

Do it yourself

Use the template repo for your private instance, add two secrets, run the setup script, and import the dashboards from the latest release in Stack Management. The coach README takes it from there.

github.com/missionbuilt/ironstack-template
  → Use this template → private
Secrets: ES_ENDPOINT, ES_API_KEY
python ingest/setup_indices.py
python ingest/index_workouts.py
# dashboards.ndjson from Releases

Rungs 2 to 4 · opens with v1.0

Door 3

Just the skill

Download the workout-partner skill as a folder and start logging today. No Elastic, no dashboards. Your journal is markdown in a folder you choose. Add the stack whenever you want the verdicts.

workout-partner.zip
workout-recall.zip
# drop into ~/.claude/skills/

Rung 1 · opens with v1.0


Fine print

Ironstack is a training partner, not a programmer and not a doctor. It will give you a starting weight under a ceiling it can show you, a cue for the set in front of you, or an alternative when the plan calls for a lift you cannot do today. It will not write your program. Any question about pain or injury gets a pointer to reputable material and a qualified person, and nothing else.

Your logs stay in your repo and your Elastic project. Mission Built has no server in the loop, collects nothing, and cannot see your data.


The other tool, and the other half.


Open source.

Ironstack ships under MIT, like the Loadout skills. The skills, the starter, the dashboards, and the coach's prompt and tools live in github.com/missionbuilt/ironstack. Your data never does.

Weight is a number. Heavy is a feeling.