Lenny v3 is the major refactor I’ve been working on, and the real challenge is just… focus. One of the interesting things about vibecoding is that everything seems possible. You can throw so many things out at once that it’s easy to get lost.
The current focus is giving Lenny a lot of tools to understand data about me. It’s more on the data liberation side than the ”assistant” side of things. Quantified self, lifelogging, etc. I use tons of services every day, and I want that data available to my agent. How is it gonna use it? No clue for some of it. But step one is getting it available.
This refactoring has also been the start of… gardening? the vibecode. Lots of mildly messy code that I’m cleaning up, but I’ll write another post about that later.
MCP -> CLI
The big thing I’ve done since I last posted is moving away from MCP.
I’m using a local LLM, so context windows matter a lot. I’ve got maybe 20,000 to 64,000 tokens of usefulness before things start to crawl. I had noticed things were getting slow and started investigating.
Turns out MCPs are verbose. The number of tools you expose matters a lot when you’re running on a local LLM.
I’d seen a few posts online noting that these models are actually really good at making CLI calls. A CLI that does something in a standard way? They can often one-shot it. If I say “what’s my latest calendar entry?” it can run compendium calendar --limit 1 and be fine.
Moving to a CLI has been fantastic. Way faster.
Despite floundering a few rounds for more complex workflows where it’ll try something, run —help, then run the right command. It’s much faster. And I can fix with better prompts and more proactive information but that hasn’t been a priority.
The model now has one tool: run_cli with a set of commands. The help for the CLI is injected into the system prompt (not a ton of tokens). Lenny is prompted to run the --help subcommand for everything. So I say “can you add a calendar event for Tuesday at 7?” — it sees there’s a calendar command, runs compendium calendar --help, gets the details, and makes the tool call.
The Extension Architecture
The other thing I’ve been doing is making it as easy as possible to add a new data source. This has been the most eye-opening part around actually maintaining vibecode.
I basically refactored the whole project. There are two pieces now: the core thing (an LLM plus a bunch of protocol interfaces), and the extensions. A protocol is just a way for an extension to declare its capabilities — “I can sync data” or “I have CLI commands” or “I have searchable data, here’s my search function.” There’s a bunch of these little protocols now.
The best part about this has been I’ve really reduce the “blast radius” of any change, and makes code review (most of my actual coding) much easier. For example, if I ask it to improve one of the features that provides data about my Oura ring, it should only modify the files in one folder that is extremely isolated and resilient. So if something gets messed up, it’s only going to hurt Oura sync, not tear down the whole system.
What’s Next
So now I can pretty effortlessly give Lenny more data and tools to do things. Now it’s focusing on usefulness.
The first one I’m thinking is - I booked some flights recently. Got an email confirming them. I went into Lenny and said “hey, I just got an email from Southwest, can you add those flights to my calendar?” He searched my email, found the flights, and added calendar events. Perfect, nailed it.
But it should probably be proactive, right? That’s the goal — reduce the cognitive load so I don’t have to think about adding things to my calendar. It should just be magic. But I also need to think about prompt injections from email? So it’ll be a balance.
The other thing is building more proactivity, what I’m calling “outreaches”. Like every day at the end of the day I’m doing a journal entry about what I did and how I’m feeling. Can Lenny help prompt me? “Hey, you went to these places today, you took pictures of this.”
I have a terrible memory. That’s part of why I want this thing. How much can I go out of my way now to remember more things in the future? How much can I lean on this for the things that cause me problems?
We’ll see 😅
