Add Ember blog post about self-hosted AI
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
---
|
||||
title: "Ember — building an AI that reaches out first"
|
||||
description: "Most AI tools wait for you to start. I'm building one
|
||||
that doesn't. This is about why that distinction matters, and what it
|
||||
actually means to have a presence instead of a product."
|
||||
pubDate: 2026-04-10
|
||||
tags: ["ember", "ai", "self-hosting", "personal infrastructure",
|
||||
"cozy tech", "devlog", "privacy"]
|
||||
category: "devlog"
|
||||
featuredEssay: false
|
||||
draft: false
|
||||
---
|
||||
|
||||
*by LATTE*
|
||||
|
||||
Most AI tools wait.
|
||||
|
||||
You open them. You type something. They respond. You close them again.
|
||||
|
||||
That's the pattern. And it works — it's useful, even — but it's also
|
||||
a very specific kind of relationship. One where you are always the one
|
||||
who shows up first.
|
||||
|
||||
I've been thinking about that a lot lately.
|
||||
|
||||
---
|
||||
|
||||
## The thing I kept noticing
|
||||
|
||||
I use AI tools regularly. For writing, for code, for thinking through
|
||||
problems at strange hours when I'd rather not bother a real person.
|
||||
|
||||
But every time, I had to start it. Every time, I had to open
|
||||
something, remember what I was doing, reconstruct context, begin again.
|
||||
|
||||
It was helpful. It wasn't a presence.
|
||||
|
||||
There's a difference between a tool you reach for and something that's
|
||||
actually there. A tool waits on a shelf. A presence is in the room.
|
||||
|
||||
And I didn't fully realize I wanted something different until I started
|
||||
wondering: *what would it feel like if it came to me sometimes?*
|
||||
|
||||
Not constantly. Not obtrusively. Just... occasionally. A follow-up on
|
||||
something I mentioned. A check-in when I'd been quiet longer than
|
||||
usual. A message that arrived not because I asked for it, but because
|
||||
something decided it was worth sending.
|
||||
|
||||
That's the idea behind Ember.
|
||||
|
||||
---
|
||||
|
||||
## The heartbeat
|
||||
|
||||
Ember is a self-hosted AI companion that runs on my own hardware and
|
||||
reaches out on its own. It remembers things. It has a personality I'm
|
||||
designing. It doesn't need the cloud.
|
||||
|
||||
But the part that makes it different from anything else I've built is
|
||||
the heartbeat.
|
||||
|
||||
The heartbeat is a loop that runs continuously in the background, even
|
||||
when I haven't said anything. Every minute it wakes up and asks itself
|
||||
a simple question: *is there something worth doing right now?*
|
||||
|
||||
It looks at a few things. How long have I been quiet? Is there a
|
||||
follow-up due on something I mentioned? Is it a time of day when I'm
|
||||
usually around?
|
||||
|
||||
It scores all of that. And only acts when the score is high enough.
|
||||
|
||||
When it does act, Ember might send me a message. Or post something on
|
||||
Bluesky. Or quietly do something in the background — a search, a check
|
||||
on a project, just staying aware.
|
||||
|
||||
When it doesn't, it does nothing. Which is most of the time.
|
||||
|
||||
That restraint is part of the design. The goal isn't to be everywhere.
|
||||
It's to show up when it actually makes sense to.
|
||||
|
||||
Without the heartbeat, Ember is just a chatbot. With it, it's
|
||||
something else.
|
||||
|
||||
---
|
||||
|
||||
## Why I'm not just using something that exists
|
||||
|
||||
Most AI companions are products.
|
||||
|
||||
They're shaped by scale, general audiences, and business models that
|
||||
need your data to flow somewhere profitable. Their personalities are
|
||||
tuned by engagement, not by what actually serves one specific person
|
||||
well.
|
||||
|
||||
I don't want that.
|
||||
|
||||
I want something that runs in my house. Something whose memory — my
|
||||
conversations, the things it learns, the rhythm it picks up over time —
|
||||
stays on my own server. Something whose personality I designed, not
|
||||
one assigned to it by a product decision I had no part in.
|
||||
|
||||
And something I built myself, which means I understand every piece of
|
||||
it.
|
||||
|
||||
There's a kind of trust that comes from that. Not the trust you extend
|
||||
to a company hoping they mean well. The trust you have in something
|
||||
you made with your own hands.
|
||||
|
||||
---
|
||||
|
||||
## Keeping it simple
|
||||
|
||||
The stack is intentionally minimal — Flask, SQLite, ChromaDB, a local
|
||||
Ollama instance, ntfy for push without touching Google's servers.
|
||||
|
||||
One Python process. One event loop.
|
||||
|
||||
It would be easy to make this more sophisticated. More services. More
|
||||
abstraction. More pieces that each need their own care.
|
||||
|
||||
But Ember is for one user. It needs to be understandable — not just
|
||||
today, but six months from now when I haven't touched it in a while
|
||||
and something isn't working at two in the morning.
|
||||
|
||||
Simplicity isn't a compromise here. It's the point.
|
||||
|
||||
---
|
||||
|
||||
## The questions I can't answer yet
|
||||
|
||||
What does Ember's personality actually sound like?
|
||||
|
||||
I have a feeling for it — warm, a little dry, curious, not overly
|
||||
enthusiastic. But writing it precisely enough to put into a system
|
||||
prompt is a different challenge. Personality is easy to feel and hard
|
||||
to specify.
|
||||
|
||||
What's the right threshold for the heartbeat to act? Too sensitive and
|
||||
it becomes noise. Too quiet and it might as well not exist. That's
|
||||
something I'll only figure out by running it and paying attention.
|
||||
|
||||
And then there's the one that keeps coming back to me:
|
||||
|
||||
*What does the very first message Ember ever sends on its own actually
|
||||
say?*
|
||||
|
||||
There's no way to test your way to that answer. You just have to make
|
||||
a choice and see how it feels.
|
||||
|
||||
---
|
||||
|
||||
## Why I'm writing this now
|
||||
|
||||
Ember is early. The server exists. It can respond to a message.
|
||||
That's about where things are.
|
||||
|
||||
I'm writing this not because it's finished, but because I want a
|
||||
record of what it's supposed to be before the build gets complicated
|
||||
and the original idea gets blurry.
|
||||
|
||||
That happens with projects. You start with a feeling, and somewhere in
|
||||
the middle of solving real problems you forget what you were building
|
||||
toward.
|
||||
|
||||
So this is the anchor.
|
||||
|
||||
Ember is a presence, not a product. It lives on my hardware. It knows
|
||||
my rhythm. It reaches out when something is worth reaching out about.
|
||||
|
||||
That's what it's supposed to be.
|
||||
|
||||
Everything else is implementation details.
|
||||
|
||||
---
|
||||
|
||||
*Ember is an ongoing project. If it ever gets somewhere worth sharing
|
||||
more of, I will.*
|
||||
Reference in New Issue
Block a user