My First Personal AI Agent - J.A.R.V.I.S.
Since I started using Claude Code, I've wanted to build a truly autonomous agent: one that keeps working when I walk away from my desk.
Since I started using Claude Code, I've wanted to build a truly autonomous agent. One that keeps working when I walk away from my desk, laptop closed and nobody watching. I wanted to see how far you can push AI agents right now. Of course I had to go with a cliché name. J.A.R.V.I.S. was born.

How it works
During research, I decided to go with a system consisting of 3 parts. First, something that reliably responds to triggers and runs cron jobs, so work can start without me. Second, a way to reliably run an LLM: an application that takes a prompt and returns an answer. Third, memory. Each run needs to know who I am, what I'm working on, and where to find more context. Without it, the agent starts every task as a stranger.
Orchestration
I needed something that hooks into other systems without me building an orchestration platform myself. I went with n8n, an open-source automation tool. It's remarkably complete: triggers for all kinds of services, plus scheduled cron jobs out of the box. That covers the first part. A trigger fires, n8n catches it, and the agent has a reason to wake up.
Brain
This is where the AI comes in. The brain is an LLM that takes a prompt and responds. I'm using Claude, called through Claude Code in headless mode with the -p flag, so it runs without a terminal session attached. Each call is fully isolated. Claude remembers nothing from the last run, which means the only thing left to solve is giving it the right context every time.
Memory
Orchestration and brain together give me a system that reliably calls the LLM. What's missing is memory, because every Claude run starts from nothing. If I ask for the weather, I don't want to tell it where I live every single time. The fix is a CLAUDE.md file that gets loaded into every session. It holds the context about me and, just as importantly, pointers to where the rest lives. Each project I work on has its own file, so when I mention one, Claude knows to go read it. The memory itself is just Obsidian: a folder of plain markdown files, nothing fancier than that.
What it actually does
All of this stays abstract until you watch it do something. Jarvis is keeping the homelab alive. The second is keeping the homelab alive. It watches my Docker containers, and when one falls over it doesn't just ping me. It restarts the container, checks it came back healthy, and then tells me what happened. Self-healing infrastructure with a human kept in the loop, not in the critical path.
It also allows me to build things from my phone. Over Telegram, I can start work on a side project from anywhere. I describe what I want, Jarvis runs Claude Code against the repo, and I review the result later.
Where it runs
My homelab runs almost entirely on a Beelink S13. It's amazing what this little machine handles: around 15 Docker containers without breaking a sweat. A dedicated box means I'm not tied to my laptop to keep things running. When I started this project, the AI tools were still very much bound to your own machine. Claude has since added ways to hand a session off to your phone, but a computer that runs 24/7 still wins for me.
The LLM providers would rather you live in their cloud tooling. You don't have to think about the machine, but you pay a premium and you lose flexibility. Build everything into someone else's Cloud AI infrastructure and don't expect an easy exit when they decide to jack up the prices.
Cost
Then there's the bill. Companies are starting to realise that running autonomous agents on tokens can cost more than hiring a human to do the same work. Today's AI subscriptions are heavily subsidised, and we don't know which way it's going.
For now, my answer is to run Jarvis on a flat subscription rather than metered API tokens. A fixed monthly fee means no nasty surprises at the end of the month, no invoice that scales with how chatty the agent got. Predictable cost is part of the design, not an afterthought.
Where this goes next
Jarvis' architecture is deliberately boring: an orchestrator, a headless LLM, and a folder of markdown files. Boring means I understand every part, I can swap any piece, and nothing locks me in.
What surprised me is how far that simple setup goes. Most of the value didn't come from clever prompting. It came from giving the agent reliable triggers and good memory, then getting out of its way. The hard part was never the AI. It was the plumbing around it.
If you're tempted to build your own, start smaller than you think. Get that working end to end before you add the next thing. You'll learn more from one agent that actually runs than from a perfect plan that never ships.