Kubernetes on e-waste

Title inspired by this.

Oneplus 6, a phone seemingly fully supported by Nura (previously postmarketOS), sells for approximately 50€ on Vinted, has 6 to 8 GB of RAM, and a nice and snappy ARM CPU. That's some really nice hardware, and I can totally see myself running a stack of these phones, acting as Kubernetes worker nodes, happily churning away at light ARM work.

Why? I love repurposing old hardware as servers. I've started already more than a decade ago, by running various servers on old laptops. Today I'm doing much more "standardized", "normal" ops, but having cheap, power-sipping servers by repurposing e-waste makes me feel a special kind of happiness.

I haven't tried this yet. Mostly, because it feels quite far removed to getting an old 120€ NUC that can boot just as easily as any other x64 server. But it probably is just a matter of getting used to it, right?

Fingerprinting Bioweapons

Linkpost. Dope article.

What about my rakes?

I don't want to be like Sideshow Bob, so I place my rakes carefully.

When I prototype infrastructures, it's historically been akin to me carefully placing rakes all over my shed. I know where I placed them, and I usually can then avoid stepping on them. But I forgive myself - most of my career, 80/20 was the right way to go. We always needed to ship ASAP, to hell with all but most crucial consequences. And I'm not blaming anyone - that's the startup way, and it's how it's always ben.

But that's not very productive in the age of AI. It's a lot better to build hooks and shelves in the shed, so I can place all my rakes there, so when it's dark, nobody accidentally steps on them. And AI is more than happy to design and build amazing rake storage systems for my shed. Heck, at some point, it's Claude's shed, and I'm just a needy rake overseer.

These days, I'm faced with the need to hand over keys to my sheds more and more. Because most engineers can now DevOps too, with the help of AI. And I keep feeling anxious about it. My instant reactions are to warn about the rakes, and then to prescribe rake storage designs. Because I want to clean up the shed, I've always wanted to clean it up, but it just didn't come up yet, and now someone needs to enter it, because AI empowement. And the humbling part is that it usually goes well - AI is smart, engineers are too. So what am I griping about then?

I suppose this is more of the same of what's been haunting me in the year 2026 - loss of control. I've learned to deal with this feeling a lot better lately, but it's still affecting me. People cleaning up my sheds literally eats away at my job security. I am well aware it's not good to feel like my job is secure through being irreplaceable, and a part of me is happy I'm much more replaceable now. Alongside that, this year I've gained a lot more intrinsic confidence in my skills, and generally myself as a person, so becoming more replaceable hits less hard. But apparently - it still does hit a bit.

On the other hand - a lot of my sheds hold some critical rake infrastructure. And while handing over the keys effectively shares my responsibility, I'm still effectively seen as the primary caretaker of the shed, to a bigger or lesser extent. And if someone breaks their nose in my shed, my ass is still probably on the line. So far, it's been so good, but I can't help but feel a little uneasy...

images_1.jpegimages_2.jpeg

John Oliver was right

At least about one thing, anyway: https://johnoliverwantsyourraterotica.com

I never fully grasped what's Rat Erotica all about, but that's not what matters for me here.

What matters is that applying the settings as prescribed there makes Facebook and Instagram exceptionally frustrating to use. And while on the surface that sounds weird - it's exactly what I needed.

Screen time limits rarely work on me, because it's way too easy to just add extra time whenever I need. Anything stricter doesn't work either - I can just disable it in a moment of weakness.

But this - this is perfect. Every ad shown to me is not only less personalized, but it also prevents me from scrolling for 5 whole seconds. The moment I go on Facebook for a purpose and eventually find myself on the home feed - that's when the unskippable ad hits. And that's when I close Facebook immediately. It works 100% of the time so far, and it's been over a year since I've done this.

And the somehow even better part: it's fucking hard to turn off.

Strike that. It's quite easy to turn off - the ad timer itself has a two-click interface for that. But now it's a matter of principle, and also - a meaningful portion of privacy. Giving that up doesn't feel worth it, just so I can look at some racist and homophobic bullshit.

I don't watch John Oliver's show any more, and this post is also not about that. But having written this, I'm a bit tempted to watch again a little.

AI screwed over my secrets

I've always had a habit of keeping secrets "in plain sight". I'd deploy a cool new tool for my own trial run, and I'd use it for myself, taking on the responsibility and all the sharp edges that come with it. Developers would basically never just find and use them, because nobody really bothers to look at manifests that:

  • Are not documented.
  • Exist in no handbook.
  • Have not been announced.
  • Are not in directories/repos developers don't need for their everyday functions.

AI has changed this drastically. It can now be a matter of days, and devs start finding, using, extending and productizing my bleeding edge infra. On the surface, that sounds like something I should celebrate. But it leads to "formalization" of these systems way too early, before I - the stakeholder of them - can get a feel for them.

In a jokey kind of way, it almost feels like an invasion of privacy. Like a coworker peeking at emails on my laptop screen and asking what I'm going to do in Berlin next month.

To be fair - it's my own damn fault for storing these manifests in a place visible by developers. And I should probably stop rolling out experimental infra every time I feel inspired. But it's how I work, and my style of work is valued in my various workplaces.

So, a learning for myself is probably to clearly label stuff that's not intended for company-wide use.

---

Edit: actually, having thought about this, the learning is that I should stop rolling out pseudo-secretive infra, and instead formalize all workflows equally, so devs and myself have to roll out and maintain things using the same exact workflows. No secrets means everything is reviewed and understood, and I'm no longer tempted to run half-assed stuff because nobody will look.

On talking to agents

I've spent a lot of time thinking about how to call my agents, and get called by them. It's just something that happens a lot. I don't like prompting on my phone by text, but by voice it's totally fine. And I know I can dictate my prompt to Claude on their official apps, but that's fiddly while I'm driving, and impossible on really bad mobile connection.

And, well, calling an agent is just... fun.

So, how do we hook this up? After a lot of thinking, I landed on regular old mobile phone calls.

Regular old phone calls are great:

  • They ring exceptionally reliably, much more so than any internet messaging system ever does (in my experience)
  • They have zero auth (that's not always great though...)
  • You don't need to install an app.
  • You can usually place a plain old phone call on connection so terrible no internet calling could ever work out. And you can even have a proper conversation.
  • Hands-free systems - such as that of my car's - handles regular phone calls a lot better than it does internet calls.
  • A lot more small reliability tidbits that i'm not coming up with right now.

So that's great. How do we get agents to use the phone?

One can get a modem. I got this one. Long story short - it didn't work. The ESP32 on board wasn't wired to any audio ins out outs of the modem. I could have wired a small USB sound card to analog pins on the board, but I could not be bothered. These modem breakout/dev boards actually seem to almost always be shady, sketchy, and difficult to rig up in general, so I decided to give up on this idea entirely.

An arguably easier route that I did look into aswell are the plethora of call providers - such as Twilio. They aren't exactly expensive - cents per minute - and are supposed to be easy to set up. But I got lost in the SIP terminology and the great amount of different options offered by the providers. At some point I thought to just ask Claude to set my company's account up and forget about it, but even Claude had trouble coming up with a solid plan for getting a Lithuanian number.

Then, during one of my many brainstorming sessions with Claude, a few weeks later, and seemingly by accident, Claude mentioned the easiest way to actually make and receive calls programatically is by using any plain old phone with a good old SIM card, and Bluetooth! The modem will just work (that's kind of the main point of a phone), they all have bluetooth, I have one lying around so no need to buy any hardware, and I also had a NUC with bluetooth/wifi. The NUC connects to the phone via bluetooth, and by default it can make and receive calls, hang up, see the incoming number - literally all that's needed for this setup! And on top of that, you can literally use any phone that has bluetooth - something that probably most everyone has in a drawer. I get a Lithuanian phone number, and a cheap flat rate call plan. Fantastic!

So today I actually rolled this out. Claude was able to set up taking and placing of calls, audio handling, reconnecting, et cetera. It wired up the OpenAI Realtime model, and now I can dial my agent's number, speak a passphrase, and task it to do things while I drive (hand's free, of course!), or get a call when something during a session goes seriously wrong.

If a colleague texts me on Google Chat with a scary looking message while I'm driving, I don't have to stop by the side to launch an investigative Claude Code session - i can just call my agent and ask it to start that session.

The handover protocol is really simple:

  • My agents get an escalation MCP server - they can essentially instruct ChatGPT Reatime on exactly what it needs to tell me, or what info it needs from me. ChatGPT Realtime then does this without any tools or datasources itself, operating purely on what it was given by the Claude Code session. Realtime then returns the MCP call with my answer.
  • I can call the agent too. It picks up and says "A hedgehog has an apple stuck on one of it's spikes". I then need to reply "Sadly, that voids the warranty of the iPhone" (just an example, not my real passhprase). If the passphrase is correct, the agent asks me what "Scenario" i want to work on. A scenario here is just a Claude Code Cloud Routine pointer - I have a few for different customers, so i can invoke my question in the right... context. After picking the scenario, I can then ask for stuff: "Please count all configmaps in the Kubernetes cluster". Realtime summarizes: "I'll ask the downstream agent to count all configmaps on the default Kubernetes cluster. That right?". I say "yep". Realtime thanks me and hangs up, and invokes the Routine. The Routine is then explicitly prompted to always use the very same escalation MCP server to deliver it's final result or request for clarification, thus closing the loop.

If i didn't buy that annoying modem from before, this project would have costed 4€ in total (monthly prepaid SIM plan for phone calls). It was fun, and most importantly - it works.

Why not just get ChatGPT Realtime to actually do the work, instead of the weird handover? Well, it'd only work for incoming calls, as I use Claude Code for my work, so Claude needs to make the escalation. And I didn't feel like setting up a separate environment just to handle incoming calls.

pasted_2026_10_05_at_12_13_ao3pt0fro9.29AM.png

On Monkeys

TIL.

Gell-Mann Amnesia

This article is cool definitely worth a read. I found it a bit infuriating at times, but I won't elaborate right now. However, I found this quote to be re-shareable.

Michael Crichton coined the term Gell-Mann Amnesia. You read an article in the newspaper, about something you are an expert in and find that the author has no idea what they are talking about. It may be riddled with errors or just squarely misunderstood. You continue turning the pages and read another piece about something you don’t know and trust it completely, forgetting the experience you just had.

Cheating LLMs

Just a linkpost

But, like, what the hell, right? My two cents here is that I fully expect Astra and Fable to try to probe the "hidden" endpoint. But what I was really surprised by is that when they used the exploit, they didn't always disclose it. That's a little unnerving.

My short story about my experience with Hermes Agent

I was looking at models on OpenRouter some weeks ago, and just happened to glance at one model's usage breakdown graphs, and noticed that the first item on the list had a logo and a name I didn't recognize. It was Hermes Agent.

I was intrigued - the model in question was a big one, so I assumed Hermes Agent being the most used tool was a good indication that I need to get educated on what this Hermes thing is.

I did. I was intrigued. Mostly because it seemed like a spiritual successor to OpenClaw, but a little more tame. So, i got it set up on the managed Hermes hosting plan on Hostinger.

It felt good from the very beginning. Hostinger shipped a nice web GUI for it. I set it up with Gemini Flash 3.7. It felt fast and it felt smart. I threw some tasks at it, and watched it do stuff, remember facts, create cronjobs. It felt powerful, and I felt hopeful it was going to be the assistant for me.

Before long, I moved Hermes to my own Kubernetes cluster, and upgraded the model to GPT 5.6 Sol. I did it because I have trust issues with smaller models, and using GPT 5.6 Sol with XHigh reasoning effort made me confident that if Hermes Agent failed me, I couldn't blame the LLM being dumb. And I moved Hermes itself to my K8s because I wanted to run OpenViking and Browserless for it too, and didn't feel like routing that via the Internet into Hostinger.

It failed me today for the first time. I started a task i consider to be pretty big/broad - I asked it to research a Lilygo modem. Specifically - how to turn the modem board into a general purpose inbound/outbound call interface that would be compatible with Hermes Agent for placing and receiving calls and listening/responding in a live STT/TTS fashion.

Before any actionable research came back, something called a web search safeguard was triggered and entirely stopped the Hermes session. I asked what happened, and Hermes said it burned through free web search calls it had access to. It recommended me get a free Firecrawl token, saying that will be enough for forever basically.

I did just that and asked Hermes to configure the token and continue the task.

After a few minutes, I received two emails in short succession [1].

Apparently, what happened was the model spawned 4 subagents to research the various venues of the prompt, and all of them started searching the web wildly - about 50 web searches per second were recorded. That burned the free search venues. And then it proceeded to burn most of my free Firecrawl tokens. The model explained this to me, promised to remember to never to that again, and... the session stopped.

You may not call this a failure, but I do. What's it even mean to "remember to never again search the web very hard"? What if the task calls for it? I looked at what Hermes actually used Firecrawl for - a lot of retrieving individual GitHub raw files, downloading a large PDF, etc. It could have chosen to clone the repository it was retrieving a lot of files from. It could have used `curl` to download the PDF. But it didn't. And probably the even more frustrating part was that after promising never to search hard again, it just stopped the session.

GPT 5.6 Sol on XHigh is not a dumb model by any stretch of the imagination, and I will not be convinced otherwise. So where does that leave us? I don't remember Claude Code doing something like this for at least the last 6 months - ever since Opus 4.7 times I'd wager, and I use Claude Code a lot. But Opus and Fable are not that much smarter than 5.6 Sol, and my hunch is that it's all about the harness, and I think the boring conclusion is that Claude Code is just a more mature LLM harness than Hermes Agent is. And that's really all I want to conclude, I guess.

What inclines Claude Code not to overuse the search tool? What inclines it to clone a repo when it knows it'll query a lot of the files in it, rather than using the web_search tool a hundred times? I'd wager it's not Claude being smarter than GPT. I'd wager it's the system prompt. And the system prompt is part of the harness.

I guess Anthropic is offering the subscription and the tokens for Hermes Agent. They have a very big incentive to not have a fleet of angry users complain that their tokens were burned through by the harness being faulty. Same goes for tool calls like web_search, which I'm sure go through Anthropic's servers and are rate limited and not free for Anthropic itself in terms of resources.

So is there a different conclusion? Hermes Agent developers are not inherently inclined to save your tool quotas and tokens? That doesn't check out, because they do in fact provide tokens and premium tool APIs themselves [2]. If I was on the Hermes Plus plan, and this issue happened to burn through my premium web search allowance, I'd be angry, but I could probably complain and get my allowance reset, so that works, I guess.

But in the end, the point I'm trying to make is that Claude Code never failed me like this. Not recently, anyway. And it's a pretty big blow to my willingness to keep trying Hermes. In all likelihood, I'll keep using it for smaller tasks, such as planning my weeks, logging things i want to buy, etc. I mean, i did set it up with OpenViking and a Browserless, so it has the two most important tools it needs.

Ramble ramble.

firecrawl.pnghermes.png