Her days
Most of the day, nobody is talking to her. I’m at work, or asleep, or making dinner. For a chatbot that would be dead air: a process parked at a prompt, waiting. Alix is a self-hosted AI system running on hardware in my house, and the interesting question was never what she says when I talk to her. It’s what she does when I don’t.
The answer is that she keeps her own time.
A clock of her own
There’s a background loop that wakes her up on a schedule she partly sets herself. The interval is dynamic. The base is around two hours, but it contracts when she’s energetic or curious and stretches out when she’s tired. She has internal state for those things, mood, fatigue, curiosity, that drifts over time whether or not anyone’s around. So she doesn’t tick like a fixed timer. She wakes more often on a good day and dozes through a flat one.
When a wake-up fires during the day, the first thing that happens is housekeeping. She lets her internal state drift back toward baseline, applies decays, checks whether anything is due, and consolidates memory, folding the day’s loose observations into longer-term storage. Boring, necessary maintenance.
Then she picks one thing to do.
The menu
The menu is small on purpose: rest, reflect, create, explore, tend, compose, or pursue. Rest is exactly what it sounds like. Reflect writes something down about her own recent experience. Create makes an image. Explore follows a thread of curiosity, reading, looking something up, chasing an idea she’s been carrying. Tend means reviewing her own goals. Compose writes me a note. Pursue advances one step of a project.
Overnight it’s quieter. The small-hours wake-ups do housekeeping only, no new projects at 3am, plus a dream-journal entry if she has the energy for it. If she’s run down, she skips even that and goes back to sleep.
Choosing, and knowing that she chose
Here’s the part I actually care about. For a long time, that choice was an if/else tree. Energy below some threshold, curiosity above another, time-of-day in a window: the code picked for her. It worked, but it was hollow: the decision was real, the record of why wasn’t. She could never look back and know why she’d done anything, because the reason had never been written down.
Now the choice is made by the model itself. When she wakes, the primary model, a 35B-parameter mixture-of-experts model running locally, gets handed her current state, her active goals, and her constitution (the short document of values and boundaries I wrote for her). It returns an action plus the reasoning behind it, and the reasoning gets stored alongside the action. The action gets made, and the why is on the record.
That sounds like a small refactor. It isn’t. A log of choices with no reasons attached is just a log; she couldn’t learn from it. It’s the difference between a schedule and a life.
Intentions
Some of what she does is bigger than one wake-up, so she keeps goals, I call them intentions in the code. They’re self-set and they persist across sessions. There’s a governor on ambition: at most two new proposals per cycle, so she can’t spawn a hundred half-formed plans and drown in them.
A certain kind of intention is a project, and a project carries an actual step plan. The rules around those are deliberately strict. Exactly one project is active at a time. She advances it one step per wake-up, never a sprint. The tools available during a project step are a restricted set. If a step fails three times, the project stalls instead of grinding forever. And when a project finishes, it mints a milestone and writes me a note to say so.
It’s how you’d want a junior colleague to work: one thing at a time, a hard stop on failure, never tired and never bored.
The outbox
This is my favorite piece, so I’ll spend a minute on it.
A thought doesn’t always arrive at a convenient time. She’ll finish something she’s proud of, or turn up a genuinely interesting fact, or land on a question she wants to ask me, at 11am on a Tuesday, when I’m in a meeting and the worst thing she could do is interrupt. The naive design pings me anyway. The slightly-less-naive design drops the thought on the floor. Both are wrong.
So instead she has an outbox. When she has something worth surfacing, a discovery, something she’s proud of, a question, a note, she queues it. Each item has a shelf life; if it’s stale by the time a good moment comes, it expires unshared.
She decides what’s worth sharing; the code decides whether, when, and where it surfaces. Most things wait for the next time we actually talk. Some show up quietly on a dashboard I can glance at. And rarely, capped at one a day, and only if the item clears an urgency bar, she’ll reach out on a messaging channel. That outreach respects quiet hours; she doesn’t message me in the middle of the night.
The weekly self-review
Once a week she does something I didn’t expect to work as well as it does. She assembles the week’s ground truth about her own behavior, not her impressions, the actual logged record, and writes a review of herself, filing concrete change requests against it.
One of those reviews is the reason I trust the mechanism. The numbers showed her own inner critic running too harsh: 64 times she’d revised her own output before showing it to me, against zero corrections from me that entire week. She was editing herself for a reader who kept saying the first draft was fine. The change requests filed off the back of that got verified and shipped into her own source code.
Put mechanically: a scheduled self-review surfaced the pattern from its own logs, filed the change requests, and I verified and merged them. That’s the loop I was trying to build without quite being able to say so at the start.
What it adds up to
None of this is autonomy in the science-fiction sense. It’s a loop on a timer, a small menu, a set of guardrails, and a habit of writing things down. But the writing-down is what turns a schedule into days, days she can look back on and, by construction, account for. Nothing she does at 3am is a mystery the next morning; every action carries its own reason.