Sep 2026 · learning in public, projects timeline
On July 26 I started the project I had been postponing: stop treating inference as a black box and run my own agents on hardware I can touch. One month later I have a fleet of agents across two machines, my calendar and tasks out of Google, my habits and reading notes self-hosted, a Grafana dashboard with the cost of every agent, and this website as the public face.
This page is the log of that month, day by day. Every date is the day the work landed in a repo or on a machine, from first commits and file timestamps. Public projects are linked. The rest are still private: named here, and that is all.
The mission: know what a token costs on hardware I own. The first GGUFs
(Hermes 3.1 8B, Qwythos-9B MTP, Gemma 12B, Qwen3.5-9B) were already sitting in
~/models. Then the real work: ROCm, llama.cpp, and a BIOS trick.
Jul 26
Chose the machine and the cast. The machine: a Win Mini 2025 (Ryzen AI 9, 64 GB of unified memory) running Nobara. The cast: DIVA, a Hermes agent with a Discord frontend and a Moria Casán personality. I also wrote the tradeoff note that kept me honest: a Dell server vs. the handheld.
Jul 27
Set up Nobara for llama.cpp and downloaded the serious tests: Qwen3.6 27B, 35B and 40B GGUFs. Day notes on my own setup: "qwen on the win mini".
Jul 29
Installed LM Studio as a second UI for quick model swaps. The llama.cpp server stayed the workhorse.
By the end of the week the numbers were clear: 4 t/s out of the box, 9 t/s with an MTP draft head, and 17 t/s after giving the GPU 32 GB of UMA in BIOS — all on a 9B Q6_K. A 27B crawled at 4 t/s. The verdict hurt: 17 t/s still cannot serve long agent sessions. The brain moved to the DeepSeek API. The full story is its own post.
Aug 3
Collected the Moria-style dataset (24 QA pairs) that would power the fine-tune later, and captured the screenshot that opens the local-inference post.
Aug 4
Two private projects start. smarter-obsidian: a read-only audit of a four-year Obsidian vault — provenance and lifecycle tags for every note, without touching the text. ml_portfolio: scaffolding for a public fine-tune plus drift project.
Aug 7
DivaBot goes public (repo). One shared LLM layer — DeepSeek API or a local llama.cpp server — with two frontends: a Discord command bot and a WhatsApp bot through a Baileys bridge. The story: one brain, every channel.
Aug 10
DivaBot v2: the bots become systemd services, remote access gets designed, and WhatsApp only answers your own self-chat — strangers are dropped.
Aug 13
First real fine-tune run in ml_portfolio (private): LoRA on
gpt2-small-spanish, trained on the Moria dataset, plus the
reference embeddings the drift detector will compare against.
Aug 14
amsterdam goes public
(repo), born with secret-safety gates: gitleaks
pre-push hooks, a hardened .gitignore, an
.env.example. Same day, ml_portfolio gets its FastAPI deploy.
Aug 15
amsterdam ships as a Docker image. Backed up the alienhabits fork — the seed of the whole alien self-hosted family.
Aug 16
The agent loop, learned in public. aprendiendo-agentes (private): the bare loop by hand, then LangChain, then LangGraph, then an ML agent whose numbers come from real tools. kimi-war-games (private): first authorized red/blue run — Kimi K3 attacks this machine while a blue agent watches.
Aug 18
Google Exit, day one: Takeout downloaded, migration scripts for tasks and calendar, Radicale cloned as the self-hosted CalDAV home. Same day, the two public apps were born: alientasks (repo, CalDAV task UI) and alientracker (repo, habit tracker), which got todos, mobile layout and CI on its first day.
Aug 19
alientasks: alien-green favicon and an English UI. alientracker: a red-team security review with fixes, plus a solarized light theme. amsterdam: first usage-monitor landing page with spend charts.
Aug 20
Google Exit continues: the kanban-to-CalDAV sync script. alientracker grows unhabits — things to stop doing, tracked in red. Planned the Claude Code telemetry MVP.
Aug 21
The observability pivot. Two private repos: the telemetry wrapper (one adapter per agent, one event shape out) and the observability stack (Pushgateway, Prometheus, Grafana). amsterdam drops its in-repo monitor and links out to Grafana instead. Cloned OpenDesign to study a third orchestrator.
Aug 22
alienstation (private) first commits: the alien portal over the tailnet. Cost panels persist in the agent-telemetry dashboard. telemetry gains an mlflow subcommand and an OpenDesign adapter. amsterdam: alien-green palette and a hardened daemon.
A Raspberry Pi 3B+ with one gigabyte of RAM joins the fleet, gets named jacinto, and is pentested on the very day it arrives.
Aug 24
Pushgateway data survives restarts. Grafana's root URL is renamed to its new
hostname, mini. The Raspberry Pi server plan is written.
Aug 25
jacinto joins the observability stack: compose and Prometheus for the Pi, node_exporter, a health dashboard, per-process RAM panels. First alert rules with Alertmanager to Discord. TSDB backups run 2-2 between mini and jacinto. Cost panels break down by server and agent. Same day, the authorized pentest: Maradona found the hole in twenty minutes. Full story: jacinto's post and the pentest post.
Aug 26
alientasks runs on the Pi in an alien-terminal skin and syncs with the phone through DAVx5. The backend story: the backend of my life.
Aug 27
amsterdam: the sortable spend table — tokens, sessions and cost per model — merging the Hermes state database and Pi session logs. Cloned MoneyMatter to self-host a budget tracker too.
Aug 28
Audit day. Reviewed the whole tailnet (mini and the Pi); audit-backups (private) holds the findings and the fixes. alienstation gets the Matrix-style code rain, the Area 69 board and a boot sequence. amsterdam adds the Alibaba/DashScope provider.
Aug 29
jacinto's dashboard gains per-process RAM panels. Evening: the first posts of the month get written — local inference, the pentest, the Google Exit, the alien backend.
Aug 30
The Kindle chapter. kindle-diva (private): jailbreak plan, KOReader hooks, tailnet pipeline. diva-bridge (private): a TDD skeleton, then RSS feeds for KOReader. observability: kindle-health dashboards and a dashboard sync script. alienstation: a gzip/ETag static server and a ~6x cheaper rain animation.
Aug 31
diva-bridge: /feed/tasks and /feed/habits RSS; the
e-ink browser reaches it over tailnet and LAN; Radicale locks to loopback.
Sep 1
Site relaunch (v4.2): the observability, Claude Code and jacinto posts go public, and amsterdam's usage page goes live.
Sep 2
A Pi Zero v1.3 joins as a USB gadget: job Prometheus and a zero-health dashboard.
Sep 3
The actual jailbreak: LanguageBreak on Coyote, a 2015 Paperwhite 3 stuck on the last firmware Amazon ever gave it. The story: kindle joined the tailnet.
Sep 4
This page: one month of learning, day by day.
The next month starts the same way: a repo, a date, and something that works.