I’ve been using Claude and Mistral to help manage my homelab more frequently. The workflows typically consist of me wanting to create or troubleshoot something on a remote machine.
What’s common in these processes is a bit of swivel-chair work, where I (the human-in-the-loop) vet the recommended command sequence being presented to me, and execute it on the command line.
Whilst there are plenty of examples of AI going off the rails and deleting everything on a server, I decided to ignore those warnings and bring AI closer to my homelab (it IS a homelab - for learning and experimenting after all), and vibe-coded an MCP that allows Mistral and Claude to talk directly to servers on my network, over an SSH connection.
There are a few things I am exploring here with this idea of an MCP:
Fatigue of approval What’s the best way to avoid approval fatigue? After a bunch of very boring commands, what happens when the LLM slips in something “dangerous”?
Maybe there are some design choices I can put in place, allowing approval of specific commands that are clearly safe - a live whitelist per server, so similar commands aren’t bugging the human?
Perhaps we could flag dangerous commands with a supervisor - having a numeric risk level so the human is more aware of the potential to get it wrong. Potentially moving the button for riskier commands, or making the human type what the command does as approval: “delete everything on disk”
Swivel-chair at a different desk Obviously a copy and paste process isn’t difficult for the typical user doing this work. So why just move the approval process into a web app? Isn’t the copy-and-paste also solving the approval process?
My thoughts here are that this is nuanced. Just wanting to smash out an idea super quickly in a test environment with an AI agent isn’t critical work. For me this is creative expression. Similar to building junk in the workshop, or painting Warhammer with the kids. In the limited windows of time a dad-of-two has, accelerating this means more ideas can become tangible.
Knowledge Collection Moving tools often means a bit of a re-education, and this is really the same swivel-chair problem just at a different desk. I know Claude is diligently collecting all my thoughts and chats and remembering how much I hate hearing “here’s where I need to push-back”. Claude tends to remember it’s working with OpenBSD and not Linux. Then, I move tools and have to remind another one how I like to work. Ugh. But with Vigil, I have a record of everything I have run in the past.
Vigil-SCC is very basic right now, but the vision is a customised UI for reviewing, collecting, and building chains of commands - so the payback on the swivel-chair is ALSO generating value in the longer term. Ideally a UI could bring up annotated previous tasks, take records across different environments, build replays, and just accelerate the process. If you’re moving between different tools (Claude Chat, Mistral Vibe, Agents etc) having an upstream tool that can educate these services quickly would mean more correctness, and a streamlined experience - solved once, upstream, rather than re-litigated per tool every time I switch.
Right now, I do have some safety measures in place - specifically I have an option to approve every command before it’s run (or run in YOLO mode without the HIL steps). This gives me the flexibility I need for both my prod environments and my throw-away experimental systems - a chance to just play with my ideas.
The basic implementation as it stands looks like this:
Overview diagram:
Happy path Sequence diagram:
Some improvements I have in mind, which honestly all keep circling back to the same gap of being able to recycle tasks:
- Task and Session Management - being able to identify the beginning of a new task/session so I can review these, and potentially automatically generate scripts/Terraform solutions to those processes.
- Better UI elements - maybe a built-in command-line editor so that when the HIL spots a possible improvement, they can edit the command directly rather than reject it, or give feedback back to the caller to help it land on the correct command.
- Better connection establishment - help the LLM understand WHAT it has connected to at the beginning, such as OS type, permissions, etc.
You’re welcome to take a look at what it is, maybe build your own ideas on top, or give me a PR on something that could be mega! I’d love to see your suggestions! Repo is at: https://github.com/mattejones/vigil-scc