Hermes — Self-hosted AI agents

Two agents running in production on my own infrastructure. And a network problem that took a Raspberry Pi to solve.

  • Python
  • SQLite
  • LangGraph
  • Telegram
  • Tailscale
  • Docker

The problem

I wanted a personal assistant and a trading research bot that ran under my control — no SaaS that can change pricing, shut down, or read my financial data.

Architecture decisions

Skills are fixed scripts, not LLM-generated code. Every capability (expense tracking, reminders, quotes, technical analysis) is a Python script in /opt/data/skills/. The LLM decides which one to call, not what code to write. An agent that regenerates its own logic on every run is non-deterministic and undebuggable — when it fails, you can’t tell whether it was the prompt, the model, or the logic.

SQLite, not Postgres. One user, one server, low write frequency. Postgres would be infrastructure to maintain with no benefit.

Model chosen for cost, not benchmarks. An agent that runs on cron every day accumulates cost. Model selection is an architecture decision, not a footnote.

The interesting trade-off

The trading bot needed read access to my brokerage account (IOL). IOL blocks datacenter IPs. A VPS is, by definition, a datacenter IP.

The fix: Tailscale connecting the VPS to a Raspberry Pi at home, with tinyproxy as the exit. Traffic to the broker leaves through a residential Argentine IP. Two details that mattered: DisableViaHeader yestinyproxy ships a Via header by default that announces the presence of a proxy — and browser-like headers.

The cost: I now depend on my home connection staying up. That’s a failure point a commercial proxy wouldn’t have. But a commercial proxy costs money and can be detected too. I took the trade.

Result

Two agents in production. The finance bot runs economic news research on a weekday cron, technical analysis over 35 tickers, and fundamentals via Finnhub.