Lack of Updates

Not that anyone probably uses this library or reads this blog but it's been about two months since I've pushed any updates. I've been pretty busy with my day job so give me a break, gotta pay the bills and I love my job. Regardless I might as well ramble for a bit about other ventures I've been dedicating my free time too. It could be assumed that I've abandoned this project but it's the exact opposite.

I'm actually using this library (sdk?) pretty often with my other projects. The whole point of creating it, was to plug the non-deterministic machine into other things to see what comes out.

Other Ventures

Stack Overhaul

Metal

Previously I had two OVH dedicated servers linked together as a simple k3s cluster with ubuntu as the host OS. It got the job done with one being the main workhorse and the other acting as cold storage. I decided to consolidate them into one large 128gb ram, EPYC 7451 rental from OVH. Given that this was a ground up rebuild and provision, I took it upon myself to roll NixOS this time around even if it's not supported by OVH in the slightest.

After leveraging some deep research tooling, and a lot of trial and error. I found that installing Ubuntu latest via OVH and booting to a rescue disk immediately after, to be the best path.

Once you're in rescue disk, just leverage the nixos-anywhere + kexec technique and take over the partitions and disk. I attempted to redo the partition scheme a few times but kept running into post-install boot issues, either self inflicted or not jiving with OVH's PXE boot setup. It's worth noting that OVH has a fantastic Serial over LAN (SSH) that made my partition scheme explorations very tolerable. In the end I still opted for the "cheating" method of letting OVH set up my partition scheme and simply taking over it.

I need to make a standalone SEO maxxxed blog post about this ordeal with my notes to pay it back to those that did it before me. Shout out raghavsood for an up to date post on this topic that saved me a lot of time.

NixOS & K3S

Typically a kubernetes node has a very minimal set of services running on it's host operating system. It's just a node so why would it have other critical services running? Well because it's a personal system, hosting fees limit the amount of nodes, and I want to take advantage of the host NixOS system and kubernetes simultaneously. Some services simply make more sense to run on the host.

Headscale

The most obvious service that cannot run within the k3s cluster is headscale. The k3s network needs encryption, otherwise I'm just blasting my data across the internet in clear text. So each node needs to join the headscale network and use only the tailscale0 interface with flannel. Meaning that we can't have our control plane node hosting the headscale service from within k3s because k3s depends on that headscale service.

I did try to make this insane chicken and egg k3s / headscale combo work at one point for the sake of it. I thought maybe with the right combination of k8s service hostport configuration on the headscale service, it was somewhat feasible. Definitely was not and you're just asking for a startup nightmare if the k3s control plane goes down. I always knew this was a bad idea but I was curious if I could make it viable, some things are best left for the host OS.

Also I am aware that k3s has a wireguard kernel module, I've tried it and prefer to run my own.

Forgejo

Data sovereignty is something I really believe in and have engaged with throughout my career. Government entities, organizations, and corporations want total control and rightfully so. Why not the individual?

Who am I kidding, I'm just cheap and am sick of paying $4 per seat so my buddies and I can have a few private repositories on GitHub with branch protections. So I decided to roll my own forgejo instance with a complimenting simple mail server.

Forgejo has excellent mirroring (push & pull) against essentially all major forge providers. So I've been shifting all of my development to my instance and mirroring main to github accordingly. It's been an absolute pleasure to work in branches on forgejo and have them sync'd to github on merge to main.

Creep

Creep was my first rust project and where I spent most of my time getting introduced to the language. It's a web crawler with the sole intention of extracting URLs. Given that it was my first foray into learning rust, it's not a codebase I was particularly proud of. So I've been spending some time revisiting it and rewriting it from the ground up.

Cloudflare has an excellent HTML library aptly named lol-html aka the "Low output latency streaming HTML" library. It's a really nice library that has really cut my memory usage down to the point that I think I'm limited more by network IO than churning through documents. So I'm at a nice point where the core library is wicked fast and leverages petgraph to graph the relationships between extracted URLs and their origin(s).

I think my next big venture in this repository will be about data compaction. Every custom security tool I've written has always included a complimenting ToolImplementation in an effort to craft an agentic security assessment. URL crawling can have pretty explosive results if you're not careful so it's the perfect use case for leveraging LLMs to rank, categorize, etc. I'll likely explore compaction using the AgentTask tool which is essentially spinning off a child conversation that will have a summary as the tool return.

GANDALF aka Armok

The "Generative AI Network for Dwarf fortress Analytics and Logical Functions" aka GANDALF is probably one of the only personal projects of mine that could see real users and engagement. It's essentially a Dwarf Fortress copilot program. It's a hacked together codebase that has way to much embedded lua within multiple crates, so I've been rewriting and stripping it for parts into Armok.

If you've never played Dwarf Fortress before, it has been in development since 2002 and is one of the most incredibly detailed games I've ever played. It's pure information overload from every possible angle. The goal of the game is to create dwarven civilizations and manage tens to hundreds of dwarves.

Each of these dwarves has their own memories, wants, needs, fingers, eyes, hair, religion, and more. You could mistakenly allow dwarven children to perform burials and cause them trauma for life because they've spent their entire childhood burying neighbors. You could argue the game belongs in the simulation category of games if it weren't for it's graphics, interface, and fantasy elements. The point being that the game is incredibly rich in information.

What are large language models great at doing? Churning through somewhat curated nonsensical text and producing semi plausible results. Absolutely perfect for a whimsical game like Dwarf Fortress.

Thankfully dfhack and dfhackremote provide incredible interfaces for this game. As is with other games, Lua is the recommended API for interacting. So I've been exploring the DFHack LUA API structure with Claude Code via a custom MCP tool I wrote and have been mapping out various data structures and morphing them into interesting agentic tools using mlua and rmcp. The biggest challenge so far has been mapping every struct into mlua UserData and information explosion degrading context.

I'm hoping to open source this once it's more cohesive and put together. I should probably just get over myself and publish it now because it works relatively well as an MCP with Claude Code already. My favorite use case so far has been finding forum posts for world generation and copy/pasting them at Claude asking him to modify my world generation settings to match this post. It has been pretty successful as long as you consider the time period the post was made and if those values are still supported in your version of the game.

3jane

What good is an LLM api client and library if you can't run everything and anything? I've been using llama.cpp primarily throughout the development of neuromance and while the GGUF format is incredible, not having a python + transformers repository to experiment with is just asking to miss out on a ton of interesting models like Baguettotron which has 80 layers and is currently the deepest "Small Reasoning Model".

So I've been trying to build something out that can cover a variety of models with varying requirements using a nix flakes. I haven't had a lot of success but I also haven't leaned fully into development and runtime flakes as much as I should. Mostly I've tried my hand at a few of the "ease of use" inference engines like vllm, and sglang.

I think this repo is going to end up becoming an exercise in going deep on the nix language to lock in environments for each and every language I run locally on my desktop. I've already gone down a few rabbit holes with nvidia drivers and NixOS so this will not be something solved anytime soon.

What's Next?

Besides buttoning up and maintaining my current ventures. I have a few goals for 2026.

K8S Operators

They're a lot more work compared to a helm chart but infinitely more useful. Codifying and annealing systems with logic to self heal and manage components via Custom Resource Definitions is great. The upfront cost is heavy but long term it's fantastic. kube-rs is such an excellent repository that I've been using professionally for some time now, it's a no brainer to start writing all of my deployments with it.

Neuromance Branches

I still have a lot of experimental branches based off various ideas and write ups I've read over the last few months. I need to formalize a lot of them and take advantage of the rust features mechanism so they're optional. Some of them are as follows.

Recursive "Language Model" (RLM)

Infinitely spawning child conversations via tool calls. I've had some pretty fun large text summarization scenarios using my RLM tools. The deepest going 100 layer if I remembered correctly. Feeding massive text works to models in various ways is really interesting. I've found pairing a search or context tool with RLM against masses of text to produce very intersting results.

Context Crate

Managing context via token aware editing capabilities wrapped in a tool call that processes using the complimenting model's tokenizer config. Pairs well with the recursive language model tooling.

Inference

Taking advantage of huggingface's candle library for a rust native interfence experience. Particularly taking advantage of gguffiles.rs because of the simplicity of the format.

Agent Network (The Senate)

Inspired by PewDiePie's agentic network setup, I figured it was time to give this a shot using a mixture of local models and openrouter. While my implementation is less sophisticated and purely text based. It's been a lot of fun to rig up a "blackboard" style tool where agents can post their thoughts and ideas to the broader group while also having the ability to individually message other models. The biggest challenge thus far has been managing the tick rate to allow each model the chance to speak but also allow each model to proceed down rabbit holes while not being hindered by other models. Additionally finding the right conversational balance between system, tool and user messages has been a bit of a dark art that is very specific to each model.

This was one of the branches I've wanted to publish the most. I've had interesting results from several trolley problem scenarios, but what holds me back is that I don't feel confident in my vision for it. I'm hoping I can get something interesting with a couple of nights of prototyping, visualizations, and tracing. I just need to be in the right headspace for it and lean a bit more into one shot prompts while I still puzzle out my context crate.

Internet Radio

The RustAudio organization has a great collection of libraries and will be my starting point for trying to roll my own internet radio station software from scratch. I've used a few freeware platforms in the past and all of them were lackluster. I've been getting the audio itch again lately so this seems like the best idea to explore to scratch it.

Conclusion

Well that's my update. Have a happy new year! I hope 2026 is productive for everyone!