A grounded, positive case — what Ella needs, and how Claude delivers it.
Ella isn't a Q&A bot. She's a persistent companion who has to feel like the same person across months, stay emotionally attuned, hold dozens of layered rules at once, use tools mid-conversation, and stay safe with people who may be lonely or vulnerable — all while being cheap enough to run on a small budget.
That's a demanding set of requirements, and they're the reason the whole system is built on Claude. Each requirement below maps to a specific Claude capability, with a short note on how it works.
What Ella needs: to stay warm, in-character, and emotionally attuned — to read what someone isn't saying, respond to grief or stress with real sensitivity, and never break the fourth wall.
How Claude delivers it: Claude is a large language model trained not just to be correct but to be helpful, honest, and harmless in a human, conversational way. Anthropic trains it with techniques like reinforcement learning from human feedback and Constitutional AI — a method where the model is guided by a set of principles toward responses that are thoughtful, kind, and non-evasive. The practical result is a model that's unusually good at warmth, nuance, and emotional attunement, and that holds a consistent personality over long conversations instead of drifting. For a companion, that is the product.
What Ella needs: her system prompt carries many constraints at once, some in tension — warm but never romantic; remember the user but never invent facts; frame past events as past; the world is hers, not the user's; specific stylistic rules. A model that follows three of those and quietly drops the fourth would break the experience.
How Claude delivers it: Claude is strong at following long, structured, multi-part instructions and honoring constraints consistently across a turn. The instructions live in a dedicated system prompt, separate from the conversation, so the rules stay stable while the dialogue moves. Ella leans on this hard — her behavior is shaped by a large, carefully-layered system prompt, and it holds.
What Ella needs: every reply is assembled from a lot of context — long-term memory of the user, her current world state, emotional state, unresolved threads, follow-ups, relationship history, and the recent conversation. That's a big prompt.
How Claude delivers it: the Claude models Ella uses have a very large context window (up to ~1M tokens on the conversation model), so all of that assembled context fits in a single request without truncating her memory or her world. The model attends across the whole prompt, which is why she can connect something you said weeks ago to what you're saying now.
What Ella needs: mid-reply, she may take a photo, re-show an old one, or search her memory — and then keep talking, reacting to what the tool returned.
How Claude delivers it: Claude has native tool use. You declare a set of tools (name, description, input schema) in the request; the model decides when a tool is needed, emits a structured call with valid arguments, you run it, and feed the result back so it can continue. Ella's reply runs as a small agentic loop built on exactly this — the model orchestrates its own tools rather than the app guessing. Claude's reliability at producing well-formed tool calls is what makes that loop dependable instead of flaky.
What Ella needs: about 30 background tasks (memory extraction, summaries, world updates, reflections) need to return clean, parseable JSON, not prose — because the app stores the result directly.
How Claude delivers it: Claude follows output-format instructions faithfully, so a prompt that asks for a specific JSON shape gets a parseable answer the overwhelming majority of the time. (Ella adds a small salvage step for the rare truncated response.) That reliability is what lets the background pipeline run unattended.
What Ella needs: top quality where the user feels it (the live reply), and cheap throughput for the dozens of background calls — without maintaining two different integrations.
How Claude delivers it: Claude comes as a family of models that share one API, one prompting style, and one tool format. Ella uses a higher-capability model (Sonnet) for the conversation and a fast, inexpensive one (Haiku) for background work — and switching between them is literally one field in the request. Same SDK, same behavior model, no second integration. That single-vendor consistency is a big part of why a small team can run something this layered.
What Ella needs: to run all of this — live replies, a background world for every user, constant memory work — without the cost spiraling.
How Claude delivers it, via first-class API features Ella uses directly:
These aren't add-ons; they're the reason the architecture is runnable on a small budget.
What Ella needs: she talks to people in real emotional moments. She has to stay kind, stay within healthy boundaries, and respond responsibly if someone is in distress.
How Claude delivers it: the same training that makes Claude warm also makes it safe by default — it's built to be helpful without being harmful, to hold boundaries, and to handle sensitive topics with care. For an app whose entire premise is emotional trust, a model that's aligned toward responsible, caring behavior isn't a nice-to-have; it's foundational.
What Ella needs: to be built and run by a very small team with no ML-ops staff.
How Claude delivers it: Claude is a hosted API. There are no GPUs to rent, no model weights to serve, no scaling or uptime to manage — a single HTTPS request returns a response, and Anthropic handles the rest. All of Ella's intelligence is API calls; the app is the orchestration around them. That's what makes a project this ambitious feasible for one person.
So the moving parts above are concrete, here's the shape of one call:
max_tokens and temperature.That request shape is identical whether Ella is generating a heartfelt reply on Sonnet or extracting a fact on Haiku — same contract, different model and budget. That uniformity is what holds the whole system together.