A few dozen commits later

This week was one of the most random, unfocused weeks I spent working on LazerBunny and so many things moved forward in a meaningful way. The goal never was to get everything "done", but good enough to use it on a daily basis and validate design decisions and figure out potential adjustments that need to be made.

I took the opportunity to have two agents running in parallel and have them prepare smaller chunks of code using Qwen 3.6 27b. Overall an okay experience. Code layout and design were horrendous and there is still a bit cleaning up to do. But kicking a task off before joining a meeting or getting actual work done and then coming back to refine the code in the evening was practical and worked 80 percent of the time.

Qwen 3.6

The 27b model being a dense model means it is expected that it is slow. For small edits or questions it does not matter too much. Having four to five loops, parsing the output of tools and producing 300 lines of code? Things are getting noticeably slow on my M4 Pro. It is far from unusable, but you notice the latency.

As mentioned above, like any LLM it needs some hand holding and gentle massaging to make sure the code is maintainable and to not go completely off the rails.

One of my experiments was asking it to implement a client for OpenRouter in a similar style like the OpenAI client. It simply copied the OpenAI client and renamed some functions and structures. It even reused some of the OpenAI structures. Technically job done. Practically useless, I could simply use the OpenAI client with OpenRouter if I wanted this.

What this showed me is that I need a practical way to feed documentation into my agent. I do not want to scrape websites live. I also do not want to scrape them once and store everything as a markdown file. Something like Dash with its MCP integration. Except that it is not a desktop app for the Mac and does not leverage MCP would be perfect.

I assumed this will become a requirement at some point, so this did not come as a surprise. But it forces me to spend some time on it.

Agent

There were some smaller features such as polishing the TUI, adding a few configuration options and general error handling optimisations in case something goes really wrong like the LLM not returning a response in its payload.

The major feature was adding a new LLM client for my router. And this showed a small inconvenience. The payload consists of a few different structures. Right now I simply added and vendor-ed the router with go mod -replace. A little bit cleaner than copy and pasting the structures and it does not force me to make my private repository accessible to go mod. In the long run this will not be a good idea.

I am considering a mono repository which would partially address the issue. I have used mono repositories, they are manageable, but I am not a fan. It also does not address how I integrate Python for some of the services.

I hate to say it, but this might be one of the moments where gRPC is actually a possible solution. I do not like to debug the protocol. Auto-generating server and client is kind of decent. It is fully typed but cannot model all of the required structures (interface / any). Overall not the worst idea I can think of. I will wait a bit and see if this actually turns into an issue.

If gRPC-web would be mature enough and support bi-directional streaming I might be more inclined as I could standardise on exactly one way to move data between components.

Router

Not all features I talked about landed, some are still hidden away in local branches and need more testing. But overall the router is working well enough.

Having queues waiting to be processed and seeing which client is currently active also got me thinking if I expose all telemetry via Prometheus and visualise it in my Grafana dashboard or if I get a new shaver and take on the next yak. The potential telemetry might also be the one reason I can see why I would route all calls through it instead of having the brain use its dedicated GPU directly.

The codebase is still in a bit of a rough shape. As mentioned above the OpenRouter client is a bit of a dumpster fire. I personally do not care much about it, but it is a convenient way to test new models to know what is going on in the hosted world, so I want it as a feature (especially for cost control).

Avatar

The body is done! Well, at least it is at a place I could stop because any detail like refining the muscles will most likely never be seen when I get to the clothes. I am still thinking about refining them a bit more to get more practice.

Next time you will see Endirillia she will at least have a top and pants. And more importantly hair! I have now seen three ways to model hair. The one in the tutorial seems to be the worst possible based on consensus of four people who do this for a living. But as I got no idea what I am doing here, I have the low key fear that diverging too far from the tutorial might manoeuvre me into a corner where I cannot follow the tutorial anymore and have to start improvising.

I also started collecting references to use. They kind of helped with some of the modelling. The fun thing about not knowing anything about a topic is that you can easily learn something new every day.

Progress

I got more done this week than expected including setting up Docker image builds and a deployment pipeline. Things are getting day to day ready!

I also found some time for the first time drawing something on my new graphic tablet. Even more strange than using Blender. With Blender I could use a fairly mechanical approach of moving edges, vertexes and faces around. But using a pen to draw an eye? Witchcraft I say! I might spend more time on this than on Blender next week. I was told some basic anatomy and "body flow" studies might be beneficial for next steps.

The only planned code changes so far is finishing up the brain with basic functionality and then using the whole thing for a few days. This feels like a good point to take a pause for a week or so on the implementation and evaluate if everything makes sense and if I am on track.

posted on May 3, 2026, 7 p.m. in AI, lazerbunny

I am perpetually a little bit annoyed by the state of software - projects constantly changing, being abandoned or adding features that make no sense for my use case - so I started writing small tools for myself which I use on a daily basis. And it has not only been fun, but also useful. For the rest of the year I will focus on a project I have been thinking about for a few years: Building a useful, personal AI assistant.