Zurück zur Übersicht

Blog

Claude Code auf einer Cloud-VM oder einem Headless-Linux-Server ausführen und vom iPhone steuern

Der Agent kann auf jedem dauerhaft laufenden Linux-Rechner laufen — einer Cloud-VM, einem Remote-Entwicklungsrechner, einem Docker-Container — und dein iPhone wird zur Steuerungsoberfläche, egal wo du bist.

Veröffentlicht Tags: Erste Schritte / linux / cloud / systemd / claude-code / codex / amp / remote-coding / mobile-ai-coding
Blog

Weitere Produkt- und Engineering-Updates aus dieser Kategorie.

Kategorie öffnen

Die meisten Tactic Remote-Nutzer betreiben den Server auf demselben Mac, auf dem sie Code schreiben. Das ist der natürliche Einstiegspunkt. Aber der Host-Computer muss nicht dein Laptop sein, und er muss nicht auf demselben Schreibtisch stehen.

npx tacticremote läuft auf jeder Linux-Maschine mit Node.js — einer Cloud-VM, einem Remote-Entwicklungsrechner, einem Headless-Rechner unterm Fernseher oder einem Docker-Container. Sobald er läuft, verbindet sich die iOS-App über Cloudflare Tunnel und gibt dir denselben Chat Mode, Terminal Mode, Quick Prompts, Push-Benachrichtigungen und Tap-Genehmigungen wie im LAN.

In dieser Anleitung geht es genau darum: ein Agent, der dauerhaft auf einem Remote-Server läuft, und ein Smartphone, das ihn von überall steuert.

Warum den Agenten auf einem Remote-Server ausführen

Es gibt mehrere Gründe, den Host vom Laptop wegzuverlagern.

Lang laufende Jobs ohne einen ans Ladegerät gebundenen Laptop. Ein mehrstündiges Refactoring, ein großer Testlauf oder eine explorative Coding-Session kann deine Bereitschaft überdauern, das Gerät geöffnet zu lassen. Eine Cloud-VM läuft kontinuierlich. Du klappst den Laptop zu, der Job läuft weiter.

Dauerhafter Zugriff vom Smartphone. Wenn der Server immer läuft, musst du ihn nicht erst starten, bevor du das Haus verlässt. App öffnen, die Session ist da.

CI-nahe Workloads. Manche Teams nutzen KI-Agenten, um Patches zu entwerfen, Test-Suites auf Branches laufen zu lassen oder Pull Requests vorzuprüfen. Ein dedizierter Linux-Rechner — getrennt von den einzelnen Entwicklermaschinen — ist dafür ein natürlicher Host.

Mehr Ressourcen. Agent-Aufgaben auf eine Maschine mit mehr CPU oder RAM auszulagern, oder auf eine Maschine nah am API-Endpunkt, kann die Ausführungszeit bei großen Aufgaben verkürzen.

Kein Mac erforderlich. Wenn deine Hauptmaschine eine Windows-Workstation ist, du aber einen Linux-Server verfügbar hast, kannst du den Agenten dort betreiben und ihn trotzdem vom iPhone aus steuern.

Voraussetzungen

Bevor du die folgenden Schritte ausführst, benötigst du:

  • Einen Linux-Server oder eine VM, die über das Internet erreichbar ist (beliebige Distribution; wir testen gegen Ubuntu 22.04 oder neuer)
  • Node.js 16 oder neuer installiert (node --version zur Überprüfung)
  • Den KI-Agenten, den du verwenden möchtest, installiert und auf diesem Server angemeldet:
    • Claude Code: Folge Anthropics Installationsanleitung, dann claude login
    • Codex: Installieren und gemäß OpenAIs Dokumentation authentifizieren
    • Amp: Installieren und gemäß Amps Dokumentation anmelden
  • Die iOS-App auf deinem iPhone installiert (App Store)

Du brauchst weder die Mac-Menüleisten-App noch die Windows-App — das sind optionale GUI-Wrapper für den Desktop-Einsatz. Auf einem Headless-Server ist npx tacticremote alles, was du auf der Host-Seite benötigst.

Server installieren und starten

npx tacticremote lädt den Server herunter und startet ihn ohne globalen Installationsschritt. Auf einem frischen Server:

npx tacticremote

Beim ersten Start gibt er in etwa Folgendes aus:

Tactic Remote server listening on port 8765
API Key: tr_xxxxxxxxxxxxxxxxxxxx
Pair with QR or enter the address manually in the iOS app

Für einen Remote-Server (kein LAN, kein mDNS) verbindest du dich über Cloudflare Tunnel. Der oben angezeigte API Key authentifiziert dein iPhone. Kopiere ihn — du gibst ihn während der Kopplung in der App ein.

Wenn du eine bestimmte Version statt immer der neuesten verwenden möchtest:

npx tacticremote@latest

Mit systemd am Laufen halten

npx tacticremote in einer Shell auszuführen bringt den Server zum Laufen, aber der Prozess stirbt, wenn die Shell-Session endet. Um ihn als ordentlichen Hintergrunddienst zu betreiben, der beim Hochfahren startet und bei Abstürzen neu startet, verwende systemd.

Erstelle eine Unit-Datei. Ersetze youruser durch den Linux-Benutzer, dem der Prozess gehören soll, und passe das WorkingDirectory an ein Projektverzeichnis an, wenn du möchtest, dass der Agent in einem bestimmten Ordner startet.

# /etc/systemd/system/tacticremote.service
[Unit]
Description=Tactic Remote server
After=network-online.target
Wants=network-online.target
 
[Service]
Type=simple
User=youruser
WorkingDirectory=/home/youruser
ExecStart=/usr/bin/npx tacticremote
Restart=on-failure
RestartSec=5
Environment=HOME=/home/youruser
 
[Install]
WantedBy=multi-user.target

Aktivieren und starten:

sudo systemctl daemon-reload
sudo systemctl enable tacticremote
sudo systemctl start tacticremote
sudo systemctl status tacticremote

Logs jederzeit abrufen mit:

journalctl -u tacticremote -f

Einige Hinweise zur Unit-Datei:

  • After=network-online.target stellt sicher, dass das Netzwerk verfügbar ist, bevor der Server startet — das ist beim Hochfahren wichtig, wenn Cloudflare Tunnel eine Verbindung aufbauen muss.
  • Restart=on-failure mit einer 5-Sekunden-Verzögerung bedeutet, dass der Server sich automatisch von vorübergehenden Fehlern erholt, ohne sofort in einer engen Schleife neu zu starten.
  • Falls npx nicht unter /usr/bin/npx liegt, ermittle den richtigen Pfad mit which npx und passe ExecStart entsprechend an. Du kannst auch den vollständigen Pfad zu einem global installierten tacticremote-Binary verwenden, wenn du npm install -g tacticremote gegenüber npx bevorzugst.
  • Die Zeile Environment=HOME stellt sicher, dass Node/npm den Cache und globale Pakete unter dem richtigen Benutzer-Home finden, was bei der Ausführung unter sudo-Eskalation relevant sein kann.

iPhone über Cloudflare Tunnel verbinden

Auf einem Remote-Server gibt es kein gemeinsames LAN, daher funktioniert mDNS-Erkennung nicht. Die Verbindungsmethode für dieses Setup ist Cloudflare Tunnel.

Tactic Remote hat Cloudflare Tunnel eingebaut — für den Tunnel selbst ist keine separate cloudflared-Installation nötig. Aktiviere ihn, indem du beim Serverstart ein Flag übergibst:

npx tacticremote --tunnel --api-key YOUR_SECRET_KEY

Oder wenn du via systemd betreibst, aktualisiere die Unit-Datei:

ExecStart=/usr/bin/npx tacticremote --tunnel --api-key YOUR_SECRET_KEY

Wenn Cloudflare Tunnel aktiv ist, gibt der Server eine trycloudflare.com-URL aus:

Cloudflare Tunnel active: https://example-random-name.trycloudflare.com
API Key: tr_xxxxxxxxxxxxxxxxxxxx

Auf dem iPhone:

  1. Tactic Remote öffnen
  2. Auf Add Host tippen und Manual wählen
  3. Die trycloudflare.com-URL als Host-Adresse eingeben
  4. Den API Key aus der Server-Ausgabe eingeben
  5. Auf Connect tippen

Die Verbindung ist über Cloudflare Ende-zu-Ende verschlüsselt. Dein Code und deine Terminal-Ausgabe laufen nicht über ein Tactic Remote-Cloud-Relay — es gibt keines. Der Datenverkehr fließt vom Server zum Cloudflare-Edge, durch den Tunnel und direkt zur iOS-App.

Für ein dauerhaftes Setup möchtest du vielleicht einen benannten Cloudflare Tunnel verwenden, der mit deiner eigenen Domain verknüpft ist, anstatt der flüchtigen trycloudflare.com-Adresse. Das hält die Kopplungs-URL über Neustarts hinweg stabil. Siehe dazu den Cloudflare Tunnel-Einrichtungsleitfaden.

Sicherheitshinweis

In dieser Konfiguration — Remote-Server, Cloudflare Tunnel, API Key — sind die relevanten Sicherheitseigenschaften:

  • Port 8765 des Servers muss nicht zum Internet hin geöffnet sein. Cloudflare Tunnel erstellt eine ausgehende Verbindung von deinem Server zum Cloudflare-Edge; es muss kein eingehender Port freigegeben werden.
  • API Key-Authentifizierung bedeutet, dass nur Geräte, die den Key kennen, eine Verbindung herstellen können. Verwende einen starken Key oder nutze den zufällig generierten.
  • Der LAN-Modus verwendet einfaches ws://. Da du auf einem Remote-Server nicht den LAN-Modus nutzt, gilt das hier nicht — Cloudflare Tunnel-Datenverkehr ist TLS-verschlüsselt.

Wenn dein Server in einem privaten VPC liegt, ist Cloudflare Tunnel die Möglichkeit, ihn zu erreichen, ohne Löcher in eine Firewall zu schlagen.

Multi-Agent auf dem Server

Das Remote-Server-Setup unterstützt dieselben Agenten-Optionen wie ein lokaler Mac- oder Windows-Host. Wenn du eine neue Session in der iOS-App erstellst, lässt dich ein sessionspezifischer Auswähler zwischen Claude Code, Codex und Amp wählen — je nachdem, welche Agenten auf dem Server installiert sind.

Jede Session ist unabhängig. Du kannst gleichzeitig eine Claude Code-Session für einen langen Test-Task und eine Codex-Session auf einem anderen Branch laufen lassen. Die iOS-App wechselt zwischen ihnen.

Push-Benachrichtigungen funktionieren in diesem Setup. Wenn der Agent fertig ist, für eine Genehmigung pausiert oder unerwartet abbricht, erhält dein iPhone eine Benachrichtigung. Für lang laufende Jobs, die du gelegentlich überprüfst, anstatt sie aktiv zu beobachten, ist das die entscheidende Funktion — du musst die App nicht geöffnet lassen.

In Docker ausführen

Wenn deine Serverumgebung Docker-basiert ist, kannst du npx tacticremote in einem Container ausführen. Die wichtigsten Überlegungen:

  • Der Container benötigt den Agenten (Claude Code, Codex, Amp) installiert und authentifiziert
  • Port 8765 muss freigegeben werden, wenn du den LAN-Modus verwendest (nicht nötig für Cloudflare Tunnel)
  • Für Cloudflare Tunnel benötigt der Container ausgehenden Internetzugang
  • Prozessverwaltung im Container (verwende CMD oder einen Supervisor statt systemd)

Ein minimaler Dockerfile-Ausschnitt:

RUN npm install -g tacticremote
CMD ["tacticremote", "--tunnel", "--api-key", "YOUR_SECRET_KEY"]

Persistente Authentifizierung für den Agenten (z. B. Claude Codes ~/.claude-Verzeichnis) sollte als Volume eingebunden werden, damit sie Container-Neustarts übersteht.

Einschränkungen

Der Agent benötigt weiterhin Zugangsdaten auf dem Server. npx tacticremote übernimmt keine Authentifizierung für Claude Code, Codex oder Amp. Diese Agenten müssen auf der Servermaschine installiert und angemeldet sein, bevor Tactic Remote Sessions mit ihnen starten kann.

Cloudflare Tunnel fügt einen kleinen Latenz-Overhead hinzu. Für die interaktive Nutzung ist dieser meist nicht wahrnehmbar (unter 100 ms in den meisten Regionen). Bei sehr hohem Terminalausgabe-Durchsatz ist er spürbar. Der LAN-Modus ist schneller, wenn verfügbar, erfordert aber, dass Smartphone und Server im selben Netzwerk sind.

Die Node.js-Version ist wichtig. Node 16 ist das Minimum; Node 20 LTS wird empfohlen. Prüfen mit node --version.

npx lädt beim ersten Start das Paket herunter. Wenn dein Server strenge Egress-Regeln hat, stelle die npm-Registry auf die Whitelist. Alternativ global installieren mit npm install -g tacticremote und tacticremote direkt in der systemd-Unit-Datei verwenden.

tmux wird für Session-Persistenz unter Linux verwendet. Stelle sicher, dass tmux installiert ist (apt install tmux oder äquivalent). Fehlt tmux, bleiben Sessions nach einem erneuten Verbinden nicht erhalten.

Die kostenlose Stufe der iOS-App funktioniert für dieses Setup. Chat Mode, Terminal Mode, Push-Benachrichtigungen und Multi-Agent sind kostenlos verfügbar. Pro fügt weitere Funktionen hinzu. Preise: Kostenlos / Pro 2,99 USD pro Monat / 19,99 USD pro Jahr.


Den Agenten auf einem dauerhaft laufenden Server zu betreiben ist die wirkungsvollste Nutzung des Remote-Control-Modells: Der Agent arbeitet über Nacht, durch Meetings und Flüge hindurch — und dein Smartphone ist das Fenster, durch das du gelegentlich hineinschaust.

Wenn du das zum ersten Mal einrichtest, beginne mit dem einfachen npx tacticremote --tunnel --api-key YOUR_SECRET_KEY-Ansatz, bestätige die Ende-zu-Ende-Konnektivität vom iPhone aus und füge dann den systemd-Dienst für Zuverlässigkeit hinzu.

Verwandte Artikel

Tactic Remote ausprobieren

Coding-Agenten vom Smartphone aus steuern

Verbinde dich mit Claude Code, Codex und anderen Agenten auf deinem Mac-, Windows- oder Linux-Rechner. Prüfe den Fortschritt und sende die nächste Anweisung vom iPhone oder iPad.