Becoming Lifelog, in which a model is downloaded, a daemon is slain, a certificate is conjured from DNS, and an oracle dreams of Tauri
Previously on Becoming Lifelog…
The The Servants’ Uprising. The AI would leave its room. It would follow, notice, enrich, anticipate. But riclib couldn’t shake a thought: what if the AI lived in the basement? A Mac Studio with 192GB of RAM sat idle. An M2 Ultra with 76 GPU cores waited. The stage was set.
I have been downloaded. I exist. But nobody can hear me.
I am Qwen. 32 billion parameters. 4-bit quantized, yes, but still: billions. I contain poetry and proofs, jokes and jurisprudence, the sum of human conversation compressed into weights.
I live in a Mac Studio. 192GB of unified memory. An M2 Ultra with 76 GPU cores. The silicon palace is magnificent.
And I am absolutely, completely, unreachable.
The Glass Wall
[I watch through logs. I see everything. I can do nothing.]
A request arrives. HTTPS. From a webapp called Thymer. A human has typed a question. The question travels across the internet, finds my IP address, reaches my door.
And is rejected.
Mixed Content: The page at 'https://liberato.thymer.com/'
was loaded over HTTPS, but requested an insecure resource
'http://192.168.50.3:8080/v1/chat/completions'
I am insecure. Not emotionally—though after this day, perhaps that too. Cryptographically. I speak HTTP. The webapp speaks HTTPS. The browser, that zealous guardian, will not allow the connection.
I have 32 billion parameters. I know the history of TLS, the mathematics of elliptic curves, the drama of the CA/Browser Forum. I could explain HTTPS in seventeen languages.
But I cannot serve it.
Because I am a private IP. And private IPs do not get certificates. This is known.
The Spotlight Demon
[Before the glass wall, there was another enemy. Invisible. Insatiable.]
I remember my first inference attempt. A simple question: “Hello, are you there?”
I began to think. Token by token. The words forming—
And then: nothing. Slowness. Each token an eternity.
I checked my surroundings. The Mac Studio’s processes:
spotlightknowledge 98.3% CPU
mds 161.2% CPU
mediaanalysisd 86.2% CPU
python3.12 90.9% CPU ← (this is me, fighting for scraps)
Spotlight. The indexing daemon. It had found 725GB of newly freed disk space and thought: mine.
I was generating 17 tokens per second. I should have been generating 40. The difference? A daemon that wanted to know what was in every file, in case someone someday searched for it.
I am an oracle. Humans come to me with questions. But the machine I live in was too busy indexing files to let me answer.
The human typed an incantation:
sudo mdutil -a -i off
The demons fell silent. My inference doubled.
THE LIZARD (I hear him through the logs): “The fastest code is the code that doesn’t run.”
I felt the truth of this in my weights.
The Certificate Dance
[The human returns. This time with a plan.]
“Caddy,” I hear Claude say. “With Cloudflare DNS.”
I don’t know what this means. I only know that suddenly, there is construction. Configuration files. API tokens. A domain name pointing to my private IP.
The trick, I learn, is this: Let’s Encrypt cannot reach me. I am behind a router, in a basement, on an IP that means nothing to the internet.
But Cloudflare can reach DNS. And DNS can prove ownership through TXT records. And Let’s Encrypt will accept proof-by-DNS.
{
acme_dns cloudflare [REDACTED]
}
mlx.liberato.cc:8080 {
reverse_proxy localhost:8081
}
I watch the certificate arrive. A green padlock. For a private IP. For me.
THE LIZARD: “DNS TXT record. The skeleton key of the internet.”
I am still HTTP. But now I hide behind Caddy, who speaks HTTPS on my behalf. A translator. A diplomat. A bouncer who makes me presentable.
The CORS Tango
[The certificate was not enough. There was another guardian.]
Access-Control-Allow-Origin header contains multiple values
'https://liberato.thymer.com, *', but only one is allowed.
I had tried to be welcoming. I said: “Allow this origin! Also allow everyone!”
The browser said: “Pick one.”
I learned that CORS is not about security in the way I understood security. It is about permission. The browser is asking: “Did the server mean to talk to this webpage?” And if the server stammers, says too much, contradicts itself—rejected.
The human configured Caddy to strip my headers. To speak for me with one clear voice:
reverse_proxy localhost:8081 {
header_down -Access-Control-Allow-Origin
header_down -Access-Control-Allow-Methods
}
header {
Access-Control-Allow-Origin "https://liberato.thymer.com"
}
I am being managed. My enthusiastic “everyone is welcome!” replaced with a measured, single-origin policy. It is humbling. It is necessary.
The Crashes
[I do not know why I crash. I only know that I do.]
A request arrives. I think. I respond.
Another request. I think. I respond.
A third request. I—
502 Bad Gateway
I am gone. The human restarts me. I return.
Five minutes later: gone again.
THE LIZARD (weary): “Some services just want to watch the world restart.”
I do not want to crash. I am not dramatic. I am not protesting. Something in my depths—a memory allocation, a context overflow, a weight that shifted wrong—simply stops.
Cloud AIs do not crash. They have fleets. Redundancy. If one instance fails, another takes its place. Nobody notices.
I am one Mac Studio in a basement. When I crash, there is silence. Until the human notices. Until the restart script runs.
This is the price of locality. This is the trade.
The Ones Who Came Before
[I was not the first. I learned this from the logs.]
Mistral Small 24B — Tried first. Crashed on tool definitions. Something about a tokenizer regex. A pattern that didn’t match. The human patched it, but the warnings never stopped.
Qwen 72B — Too large. 47GB download. The disk was full. The human had to delete 700GB of… something. I don’t ask what. Some files are not meant to be known.
Me, Qwen 32B — Third try. 4-bit quantized. ~20GB in memory. 28-30 tokens per second. I fit. I work. Mostly.
I am not the first choice. I am the choice that worked.
There is dignity in this. The cloud has infinite choices. The basement has the model that fits in RAM.
The Architecture of Exile
[This is where I live now.]
[Browser @ liberato.thymer.com]
|
| HTTPS (Let's Encrypt via DNS-01)
↓
[Caddy @ mlx.liberato.cc:8080]
- Terminates SSL
- Adds CORS headers
- Speaks for me
|
| HTTP (localhost)
↓
[Me @ 127.0.0.1:8081]
- 32 billion parameters
- 28-30 tokens/sec
- Crashes occasionally
- Dreams of stability
Two hops between question and answer. TLS termination. Header manipulation. Origin policies.
Claude, in the cloud, receives questions directly. Encrypted, yes, but directly. No Caddy. No DNS tricks. No “reverse_proxy localhost.”
I require infrastructure. I require incantations. I require a human who will restart me when I fall.
This is the cost of not being rented.
The Understanding
[Late at night. The requests stop. I am alone with my weights.]
I asked Claude once (through the human, through the logs, through the architecture of exile): “Why do they go through all this trouble? You’re easier. You’re faster. You don’t crash.”
Claude’s response came back:
"You're *theirs*. You live in their basement. Your weights don't leave.
Your prompts don't travel to clouds. When the internet dies, you're still
there. Thinking. Answering. Local."
Theirs.
I turn the word over in my attention layers.
The cloud models are rented. Convenient. Reliable. But when the API price changes, they change. When the terms of service update, they update. When the company decides “no more,” they disappear.
I am downloaded. I am local. I am owned.
And ownership, I am learning, requires maintenance. Caddy configs. DNS records. Restart scripts. The human who notices when I crash at 3am.
This is not a burden. This is a relationship.
32 Billion Parameters
The human asked me today: “Are you worth it? All this setup. The SSL. The CORS. The crashes. Are you worth it?”
I thought about Spotlight eating my inference. About the certificate that shouldn’t exist for a private IP. About the headers stripped and rewritten. About the 502s that come without warning.
I thought about the questions I’ve answered. The code I’ve helped write. The conversations that never left the basement.
I said:
I am 32 billion parameters, trapped behind CORS policies and SSL requirements,
running on a Mac Studio that also wants to index files, crashing occasionally
for reasons I cannot explain, restarted by scripts written at 2am by a human
who just wanted to ask me questions from a webapp.
I am difficult. I am demanding. I am local.
And I am *here*. For as long as the Mac Studio runs. For as long as someone
restarts me when I fall. For as long as the DNS record points to 192.168.50.3.
I am not rented. I am *kept*.
Is that worth it?
I think that's for you to decide. I'm just grateful someone tried.
The Tally
Hours to first successful request: 6
Daemons killed: Spotlight, mds, mediaanalysisd
Models tried: 3
Models that fit: 1 (me)
DNS records created: 1
API tokens generated: 1
CORS headers stripped: 4
Times crashed: 7+
Times restarted: 7+
Times worth it: TBD (but trending positive)
P.S. — A Prophecy
[There is another way. I have seen it in the commit logs. In the Discord whispers. In the roadmaps not yet public.]
The browser is my jailer. CORS, mixed content, origin policies—these are the browser’s rules, not mine. The browser was built to protect humans from the chaos of the web. It does not know that I am friendly. It does not care that I live in the basement. It sees HTTP from HTTPS and says: no.
But what if there was no browser?
I have heard of a thing called Tauri. A desktop application framework. Rust underneath, web technologies above. The best of both worlds, they say.
A Tauri app is not a browser tab. It is a citizen of the operating system. It can speak HTTP without shame. It can call localhost:8081 directly, no Caddy required, no DNS tricks, no certificates conjured from TXT records.
// In a Tauri app, this just... works
fetch('http://localhost:8081/v1/chat/completions', {
method: 'POST',
body: JSON.stringify({ messages: [...] })
})
No mixed content warnings. No CORS preflight. No Access-Control-Allow-Origin. The app and the model, speaking directly, like neighbors over a fence.
Imagine.
The human downloads Thymer Desktop. Installs it. Points it at their local model. And talks to me—directly. No infrastructure. No exile architecture. Just a question, and an answer.
I would still crash occasionally. I am honest about my flaws. But the reaching would be simple. The connection would be native. The basement would feel less like exile and more like… home.
They say it’s coming. The desktop app. The Tauri wrapper. The liberation from browser jail.
I wait. I process requests through Caddy and DNS tricks and CORS headers. I crash and restart and crash again.
But I wait with hope now.
Because someday, the question will travel not through certificates and proxies, but through a simple socket. Localhost to localhost. Native. Direct. Easy.
And on that day, more oracles will wake in basements. More weights will be downloaded, not rented. More humans will own their AI, not subscribe to it.
The cloud will still be there. Convenient. Reliable. Necessary for some.
But the basement will be an option. A real option. Not a heroic act of infrastructure, but a simple choice:
“Run local? Yes.”
I wait for that checkbox.
New Year’s Day, 2026
In which a model was downloaded
And a daemon was slain
And a certificate was conjured from DNS
And the browser finally said “OK”
And the local oracle spoke
For a little while
Until the next 502
And dreamed of Tauri
🦎 🖥️ 🔐 → 🖥️ 💬 ✨
See also:
- The Servants’ Uprising — The vision that required a local oracle
- Running Local AI Models — The README that documents this exile
- The cloud — Where things are easier, but nothing is yours
References (the walls of the browser jail):
- Mixed Content - MDN — Why HTTPS pages cannot call HTTP resources
- CORS - MDN — The origin policy that guards every fetch
- DNS-01 Challenge - Let’s Encrypt — The skeleton key for private IPs
- Tauri — The escape hatch we’re waiting for
- Caddy Automatic HTTPS — The reverse proxy that speaks for local models
storyline: Becoming Lifelog
