① The problem.
The dashboard on this site updates itself every morning. Something has to do the updating — pull what I committed yesterday, read back over the last week of my own notes, scan the day's AI news, decide what's worth showing, and write it all somewhere the site can render. I didn't want to build that agent from scratch. A cron job that calls an LLM, keeps memory, and doesn't fall over unattended is a solved problem in 2026. The interesting work is what you point one at, not rebuilding the loop.
② Approach.
The agent is NousResearch/hermes-agent — an open-source self-improving agent with a built-in cron scheduler, persistent memory, and tool-use. It runs on the same Ubuntu box as everything else, on a 6:30 AM schedule.
Honest scope up front: I didn't build hermes-agent. What's mine is everything around it — the cron design, the knowledge base it reads, the prompts that decide what's worth surfacing, the redaction rules that keep things off the public page, and the wiring that turns its output into the JSON this site renders.
③ What's in the box.
Each morning the agent does three jobs:
- GitHub review — pulls my commits and comments since the last run and summarizes the activity per repo.
- Memory analysis — reads a rolling seven days of my own Claude Code notes off this machine and distills what I was actually working on.
- News curation — pulls ~25 candidate AI / dev articles and ranks them down to the five worth reading, against a stated list of what I care about.
The output lands as a handful of JSON files the site reads when it renders. The agent owns the data; the site just shows it.
④ What broke.
The redaction was the part that mattered and the part that bit. The memory step reads my working notes, and my working notes name my employer. The first runs cheerfully wrote that name into a public summary. The fix was a redaction pass with an explicit blocklist that runs before anything reaches the page — boring, and exactly the kind of thing you want to get wrong in private and never in public.
The GitHub pull had a quieter bug: the activity query and the contribution query wanted timestamps in two different formats, and handing both the same one silently returned the wrong window. Splitting them fixed a dashboard that had been confidently reporting the wrong week.
⑤ Where it's going.
More inputs as they earn their place — the now-playing strip is recent, and the obvious next ones are reading state and a weekly summary of whatever the small career assistant I'm building for this site ends up logging. The rule stays the same: the agent gathers and proposes; the redaction layer and I decide what's public.
