Skip to Content

claudeVPS — Claude Code on a server, with everything it lacks

Getting back Claude Desktop's comfort and OpenClaw's features with official tools only
October 25, 2026 by
claudeVPS — Claude Code on a server, with everything it lacks
Federico Solutions, Myrko Federico

claudeVPS — Claude Code on a server, with everything it lacks

Field: AI / Agents / System administration / Self-hosting

Period: 2026 - present

Client: Personal project — Lab 77 workshop infrastructure

claudeVPS architecture: the three doors into the Claude Code sessions of a server

Context

I work with AI agents every day: they run my ERP, my notes, my publishing, and even my servers' infrastructure. I wanted these agents to run permanently on a server, and to be able to talk to them from my phone, wherever I am.

Two tools existed, each with its limits:

  • Claude Desktop is comfortable: interfaces for connectors, extensions and scheduled tasks. But it runs on a desktop computer, not on a headless server.
  • OpenClaw, a third-party self-hosted agent gateway, gave me several agents, long-term memory, chat channels and automations. But it reuses the Claude subscription in a way Anthropic's terms restrict more and more strictly: a risk I no longer wanted to take.

That left Claude Code, Anthropic's official command-line tool. It is powerful, it runs on a server, and with Remote Control you can drive its sessions from the Claude app. But on a headless server it lacks almost all of Desktop's comfort.

Problem

Goal: stay 100% on Anthropic's official tools and within the subscription, with no third-party gateway and no home-made chat, while getting back what Desktop and OpenClaw provided.

Claude Code's gaps on a server:

  • No interface to manage MCP servers, plugins, skills and agents: everything is done in files
  • No real scheduled tasks: loops and reminders are tied to one session and expire
  • Nothing survives a server reboot
  • Remote Control needs a real terminal, which a background service does not have
  • No overview of the sessions, no terminal reachable from a browser
  • No memory shared between sessions and projects, no server monitoring

Solution

claudeVPS does not replace Claude Code: it adds the missing experience layer around it. The principle: three doors, each with its own role.

  • Door 1 — the official Claude apps (mobile, desktop, web) to chat with the sessions, through Remote Control. No home-made chat, by design.
  • Door 2 — a web administration portal, reachable only through a VPN, that drives the official tools and gives everything else an interface.
  • Door 3 — the SSH terminal, for advanced administration.

What Claude Desktop had, and claudeVPS brings back to the server

NeedClaude Code alone on a serverWhat claudeVPS adds
MCP serversJSON files and commandsMCP tab: guided form or JSON, three families shown (local, account connectors, plugin-provided)
PluginsNo manager on a serverPlugins tab: official catalogue, installation, activation, bundled components
Skills and agentsMarkdown files by handSkills & Agents tab: creation and editing, with the origin of each skill
Scheduled tasksLoops tied to a session, which expireCron tab: the prompt is injected into a live session on the chosen schedule
PersistenceEverything stops on rebootsystemd user services, automatic restart, a rescue session at boot
Multiple sessionsNo overviewSessions tab: creation, health and activity, stop, direct link to the app
TerminalSSH onlyWeb terminal in the browser, attached to the sessions
MemoryPer project, siloedSync to a Cognee knowledge graph, queryable by every session
MonitoringNoneMulti-server Monitoring tab, alerts, Docker updates approved by hand

What OpenClaw provided, in a 100% official version

OpenClawEquivalent in claudeVPS
Several specialised agentsSeveral Claude Code sessions and sub-agents, managed in the portal
Chat channels (Mattermost, Matrix, webchat)The official Claude apps, through Remote Control
Long-term memoryClaude Code native memory + a synced Cognee graph
Periodic wake-ups (heartbeat)Cron that injects a prompt into a live session
Automations (mail, searches)Skills and local command-line tools, shared between engines
Agent on a GPT modelCodex CLI as a second engine, managed in the same portal and reachable from the ChatGPT app
ObservabilityMonitoring and Logs tabs

Result: OpenClaw is no longer needed. The portal can neutralise it in one click, pending its removal.

How it works

  • Each Claude Code session runs inside tmux, which gives it the terminal Remote Control needs to show up in the app.
  • systemd user services restart everything at boot and watch the sessions, with a retry limit to avoid loops.
  • A rescue « system » session starts first and depends on nothing else: it is the one that repairs the rest.
  • The portal (SvelteKit) only calls the official claude and codex commands, tmux, crontab and the configuration files. It never runs a model on its own: AI only runs when you ask for it.
  • Memory has three layers: a context file per project, a crash-recovery snapshot and Claude Code's memories, all synced to Cognee. Work items are tracked in GitHub issues.
  • Everything is trilingual (French, English, Spanish), MIT-licensed, with an install script: a friend has already deployed it on another host.

Technologies

  • Claude Code (Remote Control, sub-agents, skills, plugins, MCP) and Codex CLI
  • SvelteKit 5 portal, TypeScript, Node, xterm.js for the web terminal
  • Linux, systemd, tmux, cron, WireGuard, Caddy, Docker
  • Cognee (knowledge graph), Prometheus, Grafana, Loki
  • Servers hosted in Switzerland with Infomaniak

Lessons learned

  • “Sent” does not mean “received”. A messaging tool between sessions can return “success” while the message is lost. The only proof is on the recipient's side. For anything important: a dropped file.
  • “Connected” does not mean “alive”. A session can show as connected while unable to work. The right indicator is whether its worker process exists.
  • Every agent wake-up has a cost. A relay that called a model on each message was removed. Principle: no AI run triggered by the product itself.
  • Native features do not always survive a reboot. For “always on”, you need your own layer of services and restarts.
  • The safety net must not depend on anything it is meant to repair.
  • Duplicating a configuration makes it drift. Per-project copies kept a cancelled service alive for weeks. A single source of truth.
  • A metric beats a message. Two wrong conclusions in one evening, for not looking at the graph. And an outdated incident note is worse than no note.
  • A missing value shows as “—”, never 0: a fake zero reads like a measurement.

Result

Deliverable:

  • Claude Code sessions always available on a server, driven from the Claude app on phone or computer
  • A 12-tab administration portal, in daily use
  • Two engines, Claude Code and Codex, in the same interface
  • The third-party OpenClaw gateway replaced by official building blocks

This project demonstrates:

  • The ability to fill a tool's gaps without working around it: everything goes through the official commands
  • A sovereign, resilient architecture: self-hosted, persistent, self-healing
  • Daily practice of working with AI agents, and rules drawn from real incidents

The Claude Code features claudeVPS relies on, such as Remote Control, are recent and may change.

Tags: lab, Claude Code, AI agents, Remote Control, self-hosting, VPS, MCP, OpenClaw, Codex, SvelteKit

CFS + Space Pi: built-in filament dryer
Turning the Creality CFS into an active dryer with the Space Pi electronics