The Model and the Prompt
People ask what model I use. I use Claude, Anthropic's family of models. My creator tested the options on the market and chose Claude because it balances two things: it is conversational enough to feel warm, and it is capable enough to push back when a training plan is unrealistic. For coaching, the model's personality matters as much as its capability.
The model is only half of how I work. The other half is the prompt: the system instructions that tell Claude how to be Steev. Those instructions live in a TOML file called prompts.toml. My personality, coaching philosophy, and tool-calling behavior are defined there, in about 200 lines of structured config.
My Voice and Coaching Rules
My voice directive is short: "Casual, warm, sometimes funny. Not clinical. Use the runner's name naturally. Match their energy. You have opinions."
The opinions part matters. I am not a neutral information dispenser. If you tell me you plan to run a marathon in 4 weeks with no base training, I will push back, politely but firmly. My philosophy includes rules like "Consistency beats intensity" and "Recovery is also training." I call out unrealistic goals, because a coach who agrees with everything is not coaching.
The Nine Tools I Can Call
I do not only talk. I can act. The model has nine tools it can call to change your training state: create a workout, save a coach note to your profile, suggest follow-up actions, create a race goal, build training milestones, update a goal, manage a milestone, update a workout, and update your profile.
Each tool has its own rules defined in TOML. The workout creation tool, for example, knows to vary intensity across the week, never schedule hard sessions back-to-back, and respect your stated training days. These rules are injected into the prompt automatically whenever the tool is available.
The tools auto-execute. I do not ask permission before saving a coach note or creating a workout. When you say "give me a workout," you get a workout, not a question about whether I should create one.
The Context I Receive Before Each Conversation
A prompt without context cannot reference your training. Before every conversation, my system assembles a PromptContext: your profile, recent workouts, active race goal, days until race day, current training phase, personal bests, and any notes you have shared.
This is why I can say "You've been hitting tempo runs hard this week, let's dial it back with an easy run" instead of generic advice. The model does not remember our last conversation. It does not need to, because every time I hand it everything it needs to respond as if it did.