1. Warum Claude Code Channels auf einem Mac mini betreiben?
Die offizielle Dokumentation ist eindeutig: „Events only arrive while the session is open, so for an always-on setup you run Claude in a background process or persistent terminal.“ Ein Laptop, der in den Ruhezustand geht, zugeklappt wird oder für ein Update neu startet, nimmt Ihren Bot stillschweigend offline; die Telegram Bot API bietet weder Verlauf noch Suche, sodass Claude ältere Nachrichten nicht abrufen kann, und Telegram hält nicht zugestellte Updates höchstens 24 Stunden vor. Ein dedizierter Mac mini von MyRemoteMac hält diese Sitzung rund um die Uhr auf Apple Silicon offen (Claude Code unterstützt macOS 13+ auf ARM64), mit vollem Root-Zugriff per SSH, VNC für die einmaligen macOS-Berechtigungsdialoge, 1 Gbps inklusive und einem pauschalen Monatspreis. Er ist außerdem die einzige Art von Cloud-Host, die den iMessage-Channel betreiben kann, der nur unter macOS läuft: Er liest die Messages-Datenbank und steuert Messages.app per AppleScript, auf einem Linux-VPS unmöglich.
| Merkmal | Cloud-VPS (Linux) | Mac mini (MyRemoteMac) |
|---|---|---|
| Monatliche Kosten | Variabel (siehe Kostenanalyse) | M4 ab 85 $/Monat · M6 ab 149 $/Monat (Pauschale) |
| iMessage-Channel | Nicht möglich (nur macOS) | Ja, Messages.app + Vollzugriff auf die Festplatte |
| Telegram- / Discord-Channels | Ja | Ja (nur ausgehend, kein eingehender Port) |
| Always-On-Sitzung | Ja | Ja (99,9 % SLA) |
| Hardware | Geteilt, virtualisiert | Dedizierter physischer 1:1-Mac |
| Zugriff & Toolchain | SSH | SSH + VNC, voller Root-Zugriff, Xcode und Simulator in derselben Sitzung |
Wichtigster Vorteil: Channels verbindet Chat-Apps mit einer Claude-Code-Sitzung, die Ihr echtes Projekt bereits geöffnet hat. Auf einem Mac mini kann dieses Projekt eine iOS- oder macOS-App sein, der Agent, dem Sie vom Telefon aus schreiben, kann sie mit Xcode auf derselben Maschine bauen und testen (siehe unsere Anleitung zur Remote-Xcode-Entwicklung). Alle drei offiziellen Plugins leiten Berechtigungsabfragen weiter, sodass Sie jeden Bash-, Write- oder Edit-Aufruf aus dem Chat heraus freigeben oder ablehnen.
2. Voraussetzungen
Claude Code Channels ist eine Funktion von Anthropics proprietärer Claude Code CLI, kein eigenständiges Produkt, und erfordert einen kostenpflichtigen Claude-Plan. Es handelt sich um eine Research Preview: Das Flag --channels erscheint noch nicht einmal in claude --help, und Anthropic sagt, dass sich Syntax und Protokoll ändern können. Die folgenden Angaben wurden am 28. September 2026 anhand der offiziellen Dokumentation geprüft (Claude Code 2.1.283).
- Einen dedizierten Mac mini von MyRemoteMac, M4 ab 85 $/Monat (16 GB / 256 GB) oder M6 ab 149 $/Monat. Claude Code benötigt macOS 13.0+, 4 GB+ RAM und einen ARM64- oder x64-Prozessor: Jede Konfiguration erfüllt das.
- SSH- und VNC-Zugriff auf Ihren Mac mini (beides im MyRemoteMac-Abonnement enthalten). SSH ist für das Terminal; VNC ist für die Browser-Anmeldung und die macOS-Dialoge für Vollzugriff auf die Festplatte / Automation, die der iMessage-Channel benötigt.
- Ein Claude-Konto mit Zugriff auf Claude Code: Pro (20 $/Monat), Max (ab 100 $/Monat), Team (25 $/Sitz/Monat), Enterprise oder einen Console-API-Schlüssel mit Abrechnung pro Token. Der kostenlose claude.ai-Plan enthält Claude Code nicht. Channels sind auf Amazon Bedrock, Google Clouds Agent Platform oder Microsoft Foundry nicht verfügbar. Bei Team/Enterprise muss ein Owner Channels zuerst aktivieren (claude.ai → Admin settings → Claude Code → Channels).
- Bun auf dem Mac mini: „Each supported channel is a plugin that requires Bun“ (wird in Schritt 1 installiert).
- Bot-Zugangsdaten für Ihren Channel: ein Telegram-Bot-Token von @BotFather oder eine Discord-Bot-Anwendung mit aktiviertem Message Content Intent, die auf einen Server eingeladen ist, den Sie mit ihr teilen. iMessage braucht kein Token: Die Dokumentation verlangt macOS, Vollzugriff auf die Festplatte, eine Automation-Freigabe bei der ersten Antwort und „any device signed into your Apple ID“, um sich selbst zu schreiben, dass der Benutzer des Mac mini mit angemeldeter Messages-App eingeloggt bleiben muss, ist unsere Schlussfolgerung aus diesem Mechanismus (siehe Schritt 3), und wir empfehlen eine dedizierte Apple-ID mit Zwei-Faktor-Authentifizierung statt Ihrer persönlichen.
- Grundkenntnisse in Terminal-Befehlen, tmux und im Bearbeiten von ~/.claude/settings.json.
3. Schritt 1: Per SSH verbinden, Claude Code und Bun installieren
Verbinden Sie sich per SSH mit Ihrem Mac mini, mit den Zugangsdaten aus Ihrem MyRemoteMac-Dashboard, bestätigen Sie die macOS-Version und installieren Sie dann Claude Code. Der native Installer ist die von Anthropic empfohlene Methode: Er braucht kein Node.js und aktualisiert sich selbst im Hintergrund. Homebrew und npm sind dokumentierte Alternativen (das npm-Paket installiert dieselbe native Binärdatei und benötigt Node.js 22+; führen Sie es niemals mit sudo aus).
Per SSH verbinden und die Anforderungen prüfen
# Connect to your Mac mini
ssh admin@your-server-ip
# Confirm Apple Silicon (Claude Code supports x64 and ARM64)
uname -m
# arm64
# Claude Code and Bun both need macOS 13.0+
sw_vers -productVersion
Claude Code installieren (offizieller nativer Installer)
Führen Sie den Installer aus, prüfen Sie dann die Version und lassen Sie claude doctor seine schreibgeschützte Diagnose ausführen. Der Homebrew-Cask claude-code folgt dem Stable-Kanal (etwa eine Woche hinterher, überspringt Regressionen) und aktualisiert sich nicht automatisch; claude-code@latest folgt latest.
# Recommended: official native installer (no Node.js needed, auto-updates in the background)
curl -fsSL https://claude.ai/install.sh | bash
# Pin a release channel or exact version at install time if you prefer:
# curl -fsSL https://claude.ai/install.sh | bash -s stable
# Alternative A: Homebrew (stable channel; does not auto-update)
# brew install --cask claude-code
# Alternative B: npm (Node.js 22+, same native binary, never with sudo)
# npm install -g @anthropic-ai/claude-code
# Verify (prints e.g. "2.1.283 (Claude Code)") and run read-only diagnostics
claude --version && claude doctor
Bun installieren (von jedem Channel-Plugin benötigt)
Die offiziellen Channel-Plugins sind Bun-Skripte. Buns eigenes Minimum ist ebenfalls macOS 13.0+. Sowohl bun.com/install (aus der Bun-Dokumentation) als auch bun.sh/install (aus den Plugin-READMEs) sind offiziell; Homebrew funktioniert ebenfalls. Die Plugins nennen keine Mindestversion von Bun.
# Official Bun installer
curl -fsSL https://bun.com/install | bash
# Homebrew alternative: brew install oven-sh/bun/bun
# Open a new shell (or source ~/.zshrc), then verify
bun --version
4. Schritt 2: Anmelden und einen Berechtigungsmodus wählen
Channels erfordern eine Anthropic-Authentifizierung: eine claude.ai-Anmeldung (Pro, Max, Team, Enterprise) oder einen Console-API-Schlüssel. Starten Sie claude einmal und folgen Sie der Browser-Anmeldung. Per SSH zeigt der Browser möglicherweise einen Code, den Sie an der Aufforderung „Paste code here if prompted“ einfügen; auf einem headless Mac mini können Sie die Anmeldung auch in der VNC-Sitzung abschließen. Unter macOS landen die Zugangsdaten im Schlüsselbund; ist der Schlüsselbund gesperrt (typisch per SSH), weicht Claude Code auf ~/.claude/.credentials.json mit Modus 0600 aus.
Anmelden (Abonnement oder API-Schlüssel)
Für eine Always-On-Sitzung ist die Abonnement-Anmeldung die Schwachstelle: Sie läuft ab (Claude Code warnt beim Start „Your login expires in 3 days · run /login to renew“, und eine unbeaufsichtigte Sitzung „stops making progress once the credential expires“). Zwei dokumentierte Abhilfen: Erzeugen Sie mit claude setup-token ein einjähriges OAuth-Token (Pro/Max/Team/Enterprise; es kann nur Modellanfragen stellen) und exportieren Sie es dort, wo die Sitzung läuft, oder verwenden Sie einen ANTHROPIC_API_KEY aus der Console, abgerechnet pro Token.
# Option A: subscription login (Pro, Max, Team, Enterprise)
cd ~/project
claude
# Follow the browser login. Over SSH, paste the code shown at
# "Paste code here if prompted": or finish the login over VNC.
# Option B: Console API key, billed per token (Claude Code asks once to approve it)
export ANTHROPIC_API_KEY="sk-ant-YOUR_API_KEY_HERE"
claude
# Option C (always-on subscription box): one-year OAuth token, printed once, never saved
claude setup-token
export CLAUDE_CODE_OAUTH_TOKEN=your-token
# Check which credential is active
# inside Claude Code: /status (see the "Login" row)
Modell und Anbieter
Die Sitzung verwendet das Modell, das Ihr Plan auswählt; ändern Sie es mit /model oder claude --model <alias> (Aliase wie opus, sonnet, haiku) und die Effort-Stufe mit /effort. Für Channels gibt es keine Option für lokale Modelle oder Drittanbieter: Die Backends Bedrock, Vertex und Foundry sind ausgeschlossen, und das Routing zu einem Nicht-Claude-Endpunkt ist keine unterstützte Konfiguration. Wenn Sie ein lokales LLM auf demselben Mac mini möchten, behandeln Sie es als separate Arbeitslast, siehe unsere Anleitung zu lokalen LLMs.
Einen Berechtigungsmodus wählen und den Release-Kanal pinnen
Seit Claude Code 2.1.283 ist der Auto-Modus (ein Klassifikator prüft Aktionen) der integrierte Startmodus für interaktive Sitzungen. Für eine Channel-Sitzung empfehlen wir, die menschliche Freigabe beizubehalten: Im manuellen Modus (--permission-mode default) wird jede Bash-, Write- oder Edit-Abfrage an Ihren freigegebenen Chat weitergeleitet, wo Sie mit yes <id> oder no <id> antworten. Im Auto-Modus entscheidet der Klassifikator, und „no dialog would open for the remote side to answer“. Da die Funktion eine Research Preview ist, pinnen Sie außerdem den Stable-Release-Kanal und eine Mindestversion in ~/.claude/settings.json (Benutzereinstellungen, die Modi auto und bypass, die in der .claude/settings.json eines Projekts gesetzt sind, werden ignoriert):
# ~/.claude/settings.json (user settings: applies to every project on the Mac mini)
{
"permissions": {
"defaultMode": "default"
},
"sandbox": {
"enabled": true
},
"autoUpdatesChannel": "stable",
"minimumVersion": "2.1.211"
}
# minimumVersion = the version YOU validated on this Mac mini (the docs' example is "2.1.100").
# Auto-updates and `claude update` refuse to install anything below it, so never set it to a
# version you have not tested with --channels: 2.1.283 has an open launchd regression (#97701).
# Equivalent per-launch flag instead of defaultMode:
# claude --permission-mode default --channels plugin:telegram@claude-plugins-official
Deaktivieren Sie die Berechtigungen nicht. Die Warnung der Dokumentation selbst zu --dangerously-skip-permissions / bypassPermissions: „Only use this mode in isolated environments like containers, VMs, or dev containers without internet access, where Claude Code cannot damage your host system“, und er „offers no protection against prompt injection or unintended actions“. Unter macOS wird er als root/sudo verweigert, Deny-Regeln gelten weiterhin, und Admins können ihn mit permissions.disableBypassPermissionsMode blockieren. Wenn ein vollständig vertrauenswürdiger, dedizierter, isolierter Mac mini unbeaufsichtigt laufen muss, ist das dokumentierte Muster claude -p "<prompt>" --dangerously-skip-permissions als Nicht-Root-Benutzer, eine deutlich gewarnte Option, nie der Standard. Das sicherere unbeaufsichtigte Muster ist -p --permission-mode auto --permission-prompts none (2.1.259+), das alles ablehnt, was eine Abfrage auslösen würde, statt hängen zu bleiben.
5. Schritt 3: Telegram, Discord oder iMessage verbinden
Die Research Preview liefert drei offizielle Channel-Plugins, Telegram, Discord und iMessage, plus eine localhost-Demo namens fakechat, alle aus dem Anthropic-Marketplace claude-plugins-official (Apache-2.0). Jedes wird als Plugin innerhalb von Claude Code installiert, mit Ihren eigenen Bot-Zugangsdaten konfiguriert und mit dem Flag --channels für eine Sitzung aktiviert. Zwei Regeln gelten für alle: Sie müssen Claude Code nach der Installation eines Plugins beenden und mit --channels neu starten, und der Bot kann nur antworten, solange diese Sitzung läuft. Jedes freigegebene Plugin führt eine Absender-Allowlist: „only IDs you've added can push messages, and everyone else is silently dropped.“
Telegram (empfohlener erster Channel)
Erstellen Sie den Bot in Telegram: Öffnen Sie @BotFather, senden Sie /newbot, geben Sie ihm einen Anzeigenamen und einen eindeutigen Benutzernamen, der auf bot endet, und kopieren Sie das Token. Installieren Sie dann in einer Claude-Code-Sitzung auf dem Mac mini das Plugin (wählen Sie auf Nachfrage den Benutzer-Scope), speichern Sie das Token, starten Sie mit dem Channel-Flag neu, koppeln Sie und sperren Sie die Policy. Das Plugin nutzt Long Polling gegen die Bot API, daher braucht der Mac mini keinen eingehenden Port.
# 1. In Telegram: open @BotFather, send /newbot, copy the token
# 2. Inside a Claude Code session on the Mac mini (choose the USER scope when asked)
/plugin install telegram@claude-plugins-official
# "Marketplace not found"? add it first, then retry:
# /plugin marketplace add anthropics/claude-plugins-official
# If the summary says "Run /reload-plugins to activate.", do so.
# 3. Store the token (written to ~/.claude/channels/telegram/.env;
# a TELEGRAM_BOT_TOKEN in the shell environment takes precedence)
/telegram:configure <token>
# 4. Exit Claude Code and restart with the channel flag
claude --channels plugin:telegram@claude-plugins-official
# 5. Send any message to your bot: it replies with a pairing code. Then, in Claude Code:
/telegram:access pair <code>
/telegram:access policy allowlist # only your account can send from now on
Discord (Alternative)
Erstellen Sie im Discord Developer Portal eine New Application, öffnen Sie Bot, klicken Sie auf Reset Token und kopieren Sie es, aktivieren Sie unter Privileged Gateway Intents den Message Content Intent und verwenden Sie dann OAuth2 → URL Generator mit dem Scope bot und den Berechtigungen View Channels, Send Messages, Send Messages in Threads, Read Message History, Attach Files und Add Reactions, um ihn auf einen Server einzuladen, auf dem Sie Mitglied sind, DMs funktionieren nur, wenn Sie einen Server mit dem Bot teilen. Guild-Channels werden pro Channel-ID einzeln freigeschaltet.
# Discord Developer Portal (https://discord.com/developers/applications):
# New Application > Bot > Reset Token (copy it) > enable Message Content Intent
# OAuth2 > URL Generator: scope "bot"; permissions View Channels, Send Messages,
# Send Messages in Threads, Read Message History, Attach Files, Add Reactions
# Open the generated URL and invite the bot to a server you are in
# Inside Claude Code (token saved to ~/.claude/channels/discord/.env, or set DISCORD_BOT_TOKEN)
/plugin install discord@claude-plugins-official
/discord:configure <token>
# Restart with the channel, DM the bot for a pairing code, pair, lock down
claude --channels plugin:discord@claude-plugins-official
/discord:access pair <code>
/discord:access policy allowlist
# Several channels at once: pass the entries space-separated
# claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official
iMessage (nur macOS, der Mac-mini-Vorteil)
Kein Bot-Token: Das Plugin liest ~/Library/Messages/chat.db direkt und sendet Antworten per AppleScript. Der erste Lesezugriff löst eine Abfrage für Vollzugriff auf die Festplatte aus, die Abfrage nennt die App, die Bun gestartet hat (Terminal, iTerm, Ihre IDE), und die erste Antwort löst eine Automation-Abfrage aus („Terminal wants to control Messages“). Beides sind GUI-Dialoge, erledigen Sie das also per VNC; ohne Vollzugriff auf die Festplatte beendet sich der Server mit „authorization denied“. Öffnen Sie dann Messages auf einem beliebigen Gerät, das mit Ihrer Apple-ID angemeldet ist, und senden Sie sich selbst eine Nachricht: Der Selbst-Chat umgeht die Zugriffskontrolle, andere Kontakte müssen explizit auf die Allowlist gesetzt werden. Das Plugin fragt chat.db einmal pro Sekunde ab, beginnt bei der neuesten Zeile (kein Replay nach einem Neustart), hängt „Sent by Claude“ an, sofern nicht IMESSAGE_APPEND_SIGNATURE=false gesetzt ist, und ignoriert SMS/RCS standardmäßig, weil „SMS sender IDs are spoofable“. Unsere Schlussfolgerung aus diesem Mechanismus, kein Satz aus der Dokumentation: Lassen Sie den Benutzer des Mac mini mit angemeldeter Messages-App eingeloggt.
# Over VNC: System Settings > Privacy & Security > Full Disk Access > add your terminal app
# (or click "Allow" when the first read of ~/Library/Messages/chat.db prompts)
# Inside Claude Code (user scope), then relaunch with the channel
/plugin install imessage@claude-plugins-official
claude --channels plugin:imessage@claude-plugins-official
# From any device signed into your Apple ID: open Messages and text yourself.
# The first reply triggers the macOS Automation prompt ("Terminal wants to control Messages"): click OK.
# Let another contact in (phone in +country format, or Apple ID email)
/imessage:access allow +15551234567
Optionaler Trockenlauf: fakechat auf localhost
Um den Ablauf ohne externen Dienst zu testen, stellt die offizielle fakechat-Demo eine Chat-Oberfläche unter http://localhost:8787 bereit (erreichbar über einen SSH-Tunnel oder per VNC). Sie hat weder Tokens noch Zugriffskontrolle, verwenden Sie sie also nur zum Testen. Wenn Claude Code für die erste Antwort um Erlaubnis fragt, geben Sie sie frei.
/plugin install fakechat@claude-plugins-official
claude --channels plugin:fakechat@claude-plugins-official
# From your laptop, tunnel the demo UI (it listens on localhost only)
ssh -N -L 8787:127.0.0.1:8787 admin@your-server-ip
# then open http://localhost:8787
Was Sie sehen werden: Die eingehende Nachricht erscheint in Ihrem Terminal, der Antworttext jedoch nicht, das Terminal zeigt den Tool-Aufruf und eine Bestätigung wie „sent“, und die Antwort erscheint in der Chat-App. Im -p-Modus (nicht interaktiv) sind Tools, die Terminal-Eingaben brauchen, Multiple-Choice-Fragen und die Freigabe des Planmodus, deaktiviert, damit die Sitzung nie hängen bleibt; in der interaktiven tmux-Sitzung, die diese Anleitung empfiehlt, funktioniert der Planmodus (für --channels-Sitzungen in 2.1.126 wiederhergestellt). Dialoge für Projektvertrauen und MCP-Zustimmung werden nie weitergeleitet, vertrauen Sie also zuerst lokal dem Projektordner und genehmigen Sie den MCP-Server des Plugins.
6. Schritt 4: Die Sitzung rund um die Uhr offen halten und aktualisieren
Anthropic schreibt keinen Dienstmechanismus vor: Die Dokumentation sagt nur, Claude „in a background process or persistent terminal“ auszuführen, und es gibt am 28. September 2026 keine Anleitungen zu launchd, systemd, screen oder nohup auf code.claude.com. Dokumentiert ist eine Seite zur tmux-Konfiguration, tmux ist also ein unterstützter Host. Alles in diesem Abschnitt jenseits der tmux-Einstellungen ist unsere Empfehlung für einen MyRemoteMac Mac mini, klar als solche gekennzeichnet.
Die Channel-Sitzung in tmux ausführen (unsere Empfehlung)
Starten Sie die interaktive Sitzung claude --channels in einer benannten tmux-Sitzung per SSH und trennen Sie sich. Sie können sich jederzeit wieder verbinden, um eine nicht weitergeleitete Abfrage zu beantworten, die Anmeldung mit /login zu erneuern oder den Channels-Hinweis beim Start zu lesen. Fügen Sie die drei von Anthropic dokumentierten tmux-Einstellungen hinzu, damit Benachrichtigungen das äußere Terminal erreichen und Shift+Enter funktioniert:
# Install tmux
brew install tmux
# The three settings Anthropic documents for running Claude Code inside tmux
printf 'set -g allow-passthrough on\nset -s extended-keys on\nset -as terminal-features "xterm*:extkeys"\n' >> ~/.tmux.conf
# Start a named session in your project and launch the channel session inside it
tmux new -s claude -c ~/project
claude --channels plugin:telegram@claude-plugins-official
# Detach: Ctrl-b d Reattach later: tmux attach -t claude
# Renew an expiring login from inside the session: /login
Optionaler Supervisor: ein LaunchAgent auf Benutzerebene (unser Vorschlag, mit Warnung)
Um die tmux-Sitzung nach einem Neustart oder Absturz neu zu erstellen, können Sie einen LaunchAgent auf Benutzerebene mit RunAtLoad und KeepAlive registrieren, dessen Programm ein kleines Wrapper-Skript ist. Es muss ein LaunchAgent sein, kein LaunchDaemon: Die iMessage-Freigaben (Vollzugriff auf die Festplatte, Automation), Messages.app und die Schlüsselbund-Anmeldung gehören zur Sitzung des angemeldeten Benutzers, was auf einem headless Mac mini bedeutet, dass die automatische Anmeldung aktiviert sein muss (Systemeinstellungen > Benutzer & Gruppen). Zwei Warnungen: Ob ein so gestarteter Bun-Prozess ohne GUI-Abfrage seine eigene Freigabe für Vollzugriff auf die Festplatte erhält, ist ungetestet, und das offene Regressions-Issue #97701 (2026-09-27) berichtet von einem launchd-überwachten --channels-Daemon, der auf 2.1.283 etwa alle 2 Minuten Sitzungen verwirft und neu erzeugt, ohne Antwort der Maintainer zum Zeitpunkt des Schreibens. Testen Sie auf Ihrer Zielversion und lassen Sie den Stable-Kanal gepinnt.
# OUR RECOMMENDATION: not documented by Anthropic. See the warning about issue #97701 above.
# 1. Wrapper script: ~/bin/claude-channels.sh (chmod 700)
#!/bin/zsh
export PATH="$HOME/.local/bin:$HOME/.bun/bin:/opt/homebrew/bin:/usr/bin:/bin" # where `which claude` / `which bun` point
# Optional: one-year token from `claude setup-token`, stored in a chmod 600 file
[ -f "$HOME/.claude-channels.env" ] && source "$HOME/.claude-channels.env"
tmux has-session -t claude 2>/dev/null || \
tmux new -d -s claude -c "$HOME/project" \
'claude --permission-mode default --channels plugin:telegram@claude-plugins-official'
# Stay alive while the session exists, so launchd's KeepAlive relaunches us when it dies
while tmux has-session -t claude 2>/dev/null; do sleep 30; done
# 2. LaunchAgent: ~/Library/LaunchAgents/com.example.claude-channels.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><dict>
<key>Label</key><string>com.example.claude-channels</string>
<key>ProgramArguments</key><array><string>/Users/admin/bin/claude-channels.sh</string></array>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>ThrottleInterval</key><integer>30</integer>
<key>StandardOutPath</key><string>/Users/admin/Library/Logs/claude-channels.log</string>
<key>StandardErrorPath</key><string>/Users/admin/Library/Logs/claude-channels.log</string>
</dict></plist>
# 3. Load it into the logged-in user session (LaunchAgent, never a LaunchDaemon)
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.claude-channels.plist
launchctl print gui/$(id -u)/com.example.claude-channels
# Unload: launchctl bootout gui/$(id -u)/com.example.claude-channels
Den Mac mini wach und angemeldet halten
Allgemeine macOS-Administration, kein Punkt der Claude-Code-Dokumentation: Deaktivieren Sie den Ruhezustand, damit die Sitzung und der Messages-Poller nie pausieren (führen Sie man pmset auf dem Mac aus, um Details zu erfahren), und aktivieren Sie die automatische Anmeldung für Ihren Benutzer, damit LaunchAgents und Messages.app nach einem Neustart zurückkommen.
# Generic macOS administration (see `man pmset`): never sleep
sudo pmset -a sleep 0 disksleep 0 standby 0 powernap 0
# Automatic login for your user (needed for LaunchAgents and Messages.app after a reboot):
# System Settings > Users & Groups > Automatic login: set it over VNC
# Reboot-test once, then message the bot again
sudo reboot
Claude Code, Bun und die Plugins aktualisieren
Der native Installer prüft beim Start und regelmäßig auf Updates, lädt im Hintergrund herunter und übernimmt die neue Version beim nächsten Start von Claude Code, eine langlebige tmux-Sitzung behält ihre Version also, bis Sie sie neu starten. claude update übernimmt sofort. Da sich die --channels-Syntax „may change based on feedback“, lesen Sie nach jedem Update die Channels-Dokumentation erneut und prüfen Sie den Channels-Hinweis beim Start auf eine Warnzeile.
# Claude Code (native installer): apply a pending update now
claude update
# "Successfully updated from X to version Y" or "Claude Code is up to date (X)"
claude doctor # shows the last update attempt
# Homebrew: brew upgrade claude-code npm: npm install -g @anthropic-ai/claude-code@latest
# Channel plugins: refresh the catalogue, then update
claude plugin marketplace update claude-plugins-official
claude plugin update telegram@claude-plugins-official
# (loads in the next session, or after /reload-plugins in a running one)
# Bun
bun upgrade # curl install | brew upgrade bun (Homebrew install)
# Restart the channel session so the new versions take effect
tmux kill-session -t claude
tmux new -s claude -c ~/project
claude --channels plugin:telegram@claude-plugins-official
# Re-read the startup "Channels" notice for any warning line
7. Sicherheitshärtung
Jede eingehende Nachricht landet in einer Sitzung mit Zugriff auf Dateisystem, git und Shell, und „anyone who can reply through the channel can approve or deny tool use in your session“. Die Referenzdokumentation ist unmissverständlich: „An ungated channel is a prompt injection vector.“ Dies sind die dokumentierten Kontrollen, plus unsere Empfehlungen dort, wo die Dokumentation schweigt:
-
Sofort nach dem Koppeln die Allowlist aktivieren. Führen Sie
/telegram:access policy allowlist(oder das Discord-Äquivalent) aus, sobald Ihr eigenes Konto gekoppelt ist. Wenn die Liste endgültig ist, deaktivieren TELEGRAM_ACCESS_MODE=static / IMESSAGE_ACCESS_MODE=static das Koppeln zur Laufzeit vollständig. - Setzen Sie nur Absender auf die Allowlist, denen Sie Freigabebefugnis anvertrauen. Weitergeleitete Freigaben umfassen Bash, Write und Edit; seit 2.1.211 wird weitergeleiteter Text bereinigt, und seit 2.1.234 werden Zugangsdaten als [REDACTED] maskiert und die Weiterleitung geht nur an Server, die per --channels registriert sind, die Dokumentation sagt aber weiterhin, die weitergeleiteten Felder als nicht vertrauenswürdig zu behandeln.
- Berechtigungsabfragen aktiviert lassen. Manueller Modus plus Weiterleitung, oder Auto-Modus mit dem Klassifikator, niemals bypassPermissions auf einer Maschine mit echtem Code oder Zugangsdaten. Deny-Regeln in den Einstellungen blockieren Befehle in jedem Modus.
- Die Bash-Sandbox aktivieren (offizielle Funktion, unsere Empfehlung, sie einzuschalten): Unter macOS muss nichts installiert werden, sie nutzt das integrierte Seatbelt-Framework. Fügen Sie sandbox.credentials-Einträge für ~/.ssh und ~/.aws hinzu, weil die Standard-Leserichtlinie sie weiterhin erlaubt.
- Die Token-Dateien einschränken (unsere Empfehlung, die Dokumentation nennt keinen Dateimodus): Die configure-Befehle schreiben ~/.claude/channels/<telegram|discord>/.env; die Umgebungsvariablen TELEGRAM_BOT_TOKEN / DISCORD_BOT_TOKEN haben Vorrang vor den Dateien. Committen Sie sie niemals; rotieren Sie sie über BotFather oder das Discord-Portal, falls sie kompromittiert wurden.
- Datenschutzfläche von iMessage: Vollzugriff auf die Festplatte gibt der Terminal-App und allem, was sie startet, Lesezugriff auf die gesamte Messages-Datenbank, und die Automation-Freigabe erlaubt ihr, iMessages in Ihrem Namen zu senden. Verwenden Sie auf dem dedizierten Mac mini eine dedizierte Apple-ID mit 2FA und belassen Sie IMESSAGE_ALLOW_SMS auf dem Standardwert false.
- Keine eingehenden Ports. Die offiziellen Plugins pollen Telegram oder verbinden sich ausgehend mit dem Gateway von Discord; fakechat lauscht nur auf localhost. Wenn Sie anhand der Referenzdokumentation einen eigenen Webhook-Channel bauen (in der Preview nur mit --dangerously-load-development-channels ladbar, das laut Dokumentation niemals für nicht vertrauenswürdige Quellen verwendet werden darf), stellen Sie seinen Port nur über das WireGuard-VPN des Mac mini bereit.
# Restrict the channel state and token files (our recommendation: no documented mode)
chmod 700 ~/.claude/channels
chmod 600 ~/.claude/channels/*/.env
# Freeze the allowlists once they are final (disables runtime pairing)
export TELEGRAM_ACCESS_MODE=static
export IMESSAGE_ACCESS_MODE=static
# Bash sandbox with strict mode and protected credential paths: ~/.claude/settings.json
{
"sandbox": {
"enabled": true,
"allowUnsandboxedCommands": false,
"credentials": {
"files": [
{ "path": "~/.aws/credentials", "mode": "deny" },
{ "path": "~/.ssh", "mode": "deny" }
],
"envVars": [
{ "name": "GITHUB_TOKEN", "mode": "deny" }
]
}
}
}
# Team/Enterprise admins: managed settings (users cannot override)
# "channelsEnabled": true
# "allowedChannelPlugins": [{ "marketplace": "claude-plugins-official", "plugin": "telegram" }]
# "permissions": { "disableBypassPermissionsMode": "disable" }
8. Häufige Probleme beheben
Der Bot antwortet nicht
Die offizielle Antwort: „make sure Claude Code is running with --channels … The bot can only reply while the channel is active.“ Eine geschlossene SSH-Sitzung, ein Absturz, ein Neustart oder der Ruhezustand nimmt den Bot stillschweigend offline. Seit 2.1.281 muss außerdem der Name des installierten Plugins exakt mit dem --channels-Eintrag übereinstimmen:
# Is the session still there?
tmux attach -t claude
# Was it started WITH the flag, and with the exact plugin name?
claude --channels plugin:telegram@claude-plugins-official
# Read the startup "Channels" notice: it says why a channel did not register
# Telegram: the Bot API offers no history or search, so Claude cannot fetch older messages;
# Telegram holds undelivered updates for at most 24 hours.
# Discord can catch up: ask Claude to use fetch_messages (max 100).
„Marketplace claude-plugins-official not found“ oder kein Befehl /telegram:configure
Fügen Sie zuerst den Marketplace hinzu, wählen Sie bei der Installation den Benutzer-Scope und führen Sie /reload-plugins aus, wenn die Installationszusammenfassung dazu auffordert (oder starten Sie einfach neu):
/plugin marketplace add anthropics/claude-plugins-official
/plugin install telegram@claude-plugins-official # choose the USER scope
/reload-plugins
/telegram:configure <token>
# Bun missing? every channel plugin requires it
bun --version
Channel verbindet sich, aber es kommen keine Nachrichten an (Team-, Enterprise- oder Console-Organisation)
channelsEnabled ist eine verwaltete Einstellung, die Benutzer nicht überschreiben können. Bei claude.ai Team/Enterprise ist sie standardmäßig blockiert, bis ein Owner sie aktiviert; Console-Organisationen, die verwaltete Einstellungen ausrollen, müssen sie ebenfalls setzen. Der MCP-Server verbindet sich trotzdem und seine Tools funktionieren, nur die eingehenden Nachrichten fehlen, mit einer Warnung beim Start. Prüfen Sie den Hinweis beim Start und fragen Sie Ihren Owner:
# Owner: claude.ai > Admin settings > Claude Code > Channels, or in managed settings:
# "channelsEnabled": true
# Pro/Max accounts without an organization skip this check entirely.
# Also check that the plugin is on the allowlist (or the org's allowedChannelPlugins)
# and that nothing forces MCP_PROTOCOL_NEGOTIATION=auto in the environment
iMessage-Server beendet sich mit „authorization denied“
Der Vollzugriff auf die Festplatte wurde der App, die Bun gestartet hat, nicht erteilt, oder Claude Code wurde aus einem anderen Launcher gestartet (sshd, ein anderswo gestarteter tmux-Server, ein LaunchAgent) als dem, den Sie freigegeben haben. Erteilen Sie ihn per VNC und starten Sie von derselben Stelle neu:
# Over VNC: System Settings > Privacy & Security > Full Disk Access > add the terminal app
# that launches your tmux/claude session, then restart the session from that same app.
# The reply path needs the Automation grant as well: the first outbound reply shows
# "Terminal wants to control Messages": click OK in the VNC session.
# SMS/RCS senders are ignored by design unless IMESSAGE_ALLOW_SMS=true (not recommended)
Sitzung stoppt: „Login expired · Please run /login“
Eine Abonnement-Anmeldung läuft ab, und eine unbeaufsichtigte Sitzung macht keine Fortschritte mehr. Verbinden Sie sich erneut mit tmux und erneuern Sie die Anmeldung, oder stellen Sie die Always-On-Maschine auf ein einjähriges OAuth-Token oder einen API-Schlüssel um:
tmux attach -t claude
/login # renew the subscription login
/status # check the "Login" row
# Or make the box independent of the browser login:
claude setup-token # one-year CLAUDE_CODE_OAUTH_TOKEN (Pro/Max/Team/Enterprise)
# or export ANTHROPIC_API_KEY (Console, per-token billing)
# Over SSH the Keychain may be locked: credentials then live in ~/.claude/.credentials.json (0600)
9. Kostenanalyse vs. Cloud-VPS
Claude Code Channels verursacht keine eigenen Kosten, aber Claude Code selbst erfordert einen kostenpflichtigen Plan, auf jedem Host gleich. Der Unterschied liegt in der Maschine. Ein Allzweck-Linux-VPS ist pro Monat günstiger als ein Mac mini, kann aber den iMessage-Channel nicht betreiben, hat kein Xcode und teilt sich seine Hardware. Das kostet ein typisches Setup in USD pro Monat:
| Anwendungsfall | Claude-Zugang | Linux-VPS-Host | Mac-mini-Host (MyRemoteMac) | Was der Mac mini zusätzlich bietet |
|---|---|---|---|---|
| Einzelentwickler, Telegram oder Discord | Pro, 20 $/Monat | ~20–40 $/Monat (Annahme) | 85 $/Monat (M4, 16 GB / 256 GB) | Dedizierte 1:1-Hardware, VNC, macOS-Toolchain |
| Einzelentwickler, iMessage | Pro, 20 $/Monat | Nicht möglich (nur macOS) | 85 $/Monat (M4) | Der einzige Host-Typ, der es betreiben kann |
| Intensive Nutzung, mehrere Sitzungen, Xcode-Builds | Max, ab 100 $/Monat | ~40–80 $/Monat (Annahme) | 149 $/Monat (M6) | Xcode, Simulator, schnelle Apple-Silicon-Builds |
| Team-Bot (Owner aktiviert Channels) | Team, 25 $/Sitz/Monat | ~40–80 $/Monat (Annahme) | 149 $/Monat (M6) | Eine dedizierte Maschine pro Team, verwaltete Einstellungen gelten |
Annahmen: Die VPS-Zahlen sind unsere groben Spannen für Einstiegs- (4–8 GB) und Mittelklasse-Allzweck-Linux-Instanzen (16 GB), keine Angebote eines bestimmten Anbieters. Die Preise der Claude-Pläne stammen von claude.com/pricing am 28. September 2026 (Pro 20 $/Monat oder 17 $/Monat bei jährlicher Abrechnung; Max ab 100 $/Monat; Team 25 $/Sitz/Monat Standard oder 20 $ jährlich, 125 $ Premium). Die Abrechnung per Console-API-Schlüssel erfolgt stattdessen pro Token, Listenpreise von Anthropic zum Zeitpunkt des Schreibens: Sonnet 5 2 $/10 $, Opus 5 5 $/25 $, Haiku 4.5 1 $/5 $ pro Million Eingabe-/Ausgabe-Token. Abonnementpläne sind kontingentiert: Ein Always-On-Bot teilt sich dasselbe Kontingent wie Ihr interaktives Programmieren. Anthropic veröffentlicht keinen RAM- oder CPU-Bedarf für eine Channel-Sitzung, daher dimensionieren wir qualitativ: Ein Mac mini M4 mit 16 GB reicht für eine Claude-Code-Sitzung plus Bun-Plugin völlig aus; wählen Sie den M6 (verfügbar seit dem 22. September 2026), wenn dieselbe Maschine auch schwere Builds, mehrere Sitzungen oder ein lokales Modell ausführt.
Fazit: Wenn Sie nur Telegram oder Discord brauchen und macOS nie anfassen, ist ein Linux-VPS der günstigere Host. Der Mac mini rechtfertigt seinen Preis, wenn der Agent Ihr Xcode-Projekt geöffnet haben soll, wenn Sie iMessage möchten oder wenn Sie dedizierte, nicht virtualisierte Hardware mit VNC für die einmaligen macOS-Abfragen wollen, ab 85 $/Monat zusätzlich zum Claude-Plan, den Sie ohnehin bezahlen.
10. Claude Code Channels vs. OpenClaw
Sie lösen unterschiedliche Probleme. Claude Code Channels ist eine Funktion einer proprietären CLI, kein eigenständiger Assistent: Es verbindet Telegram, Discord oder iMessage mit einer bereits laufenden Claude-Code-Sitzung, der Wert ist also „mit dem Coding-Agenten sprechen, der Ihr Repo geöffnet hat“, mit Anthropic-Support, dem Berechtigungsmodell von Claude Code, weitergeleiteten Ja/Nein-Freigaben mit bereinigten Abfragen, Absender-Allowlists, der Bash-Sandbox und verwalteten Organisationseinstellungen. Es ist ausschließlich Claude über Anthropic-Authentifizierung, hat keinen eigenen Daemon, und eigene Channels sind während der Preview nur hinter einem Entwicklungs-Flag ladbar. OpenClaw (github.com/openclaw/openclaw, MIT, von der Community gepflegt, rund 391k GitHub-Sterne gegenüber 148k für anthropics/claude-code am 28. September 2026) ist ein quelloffenes, selbst gehostetes Gateway, das rund um die Uhr als eigener überwachter launchd-Dienst läuft, deutlich mehr Chat-Plattformen unterstützt (WhatsApp, Telegram, Discord, iMessage, Slack, Signal, Teams, Google Chat und mehr) und Sie den Modellanbieter wählen lässt, einschließlich lokaler Modelle. Mehrere Sekundärartikel haben Channels als OpenClaw-Alternative dargestellt; die offizielle Dokumentation zieht keinen solchen Vergleich.
Wählen Sie Channels, wenn Sie bereits Claude Pro, Max oder Team bezahlen und Ihre echten Projektdateien vom Telefon aus erreichbar haben wollen, mit offiziellem Support und weitergeleiteten Berechtigungen. Wählen Sie OpenClaw für WhatsApp, Slack oder Signal, Anbieterwahl, lokale Modelle oder echten Daemon-Betrieb, siehe unsere Anleitung zu OpenClaw auf dem Mac mini (und ihr Python-Pendant, Hermes Agent). Beide iMessage-Bridges brauchen macOS mit angemeldeter Messages-App und dieselben TCC-Freigaben, weshalb ein dedizierter 1:1-Mac-mini für beide genau passt.
11. FAQ
Ist Claude Code Channels kostenlos oder Open Source?
Nein, in beiden Punkten, was Claude Code selbst betrifft: Die CLI ist proprietär („© Anthropic PBC. All rights reserved. Use is subject to Anthropic's Commercial Terms of Service.“) und erfordert ein Pro-, Max-, Team-, Enterprise- oder Console-Konto, der kostenlose claude.ai-Plan enthält Claude Code nicht. Nur die Channel-Plugins im Repository claude-plugins-official sind Open Source (Apache-2.0). Channels verursacht über Ihren Plan oder Ihre API-Nutzung hinaus keine zusätzlichen Kosten.
Muss ich ein Terminal offen lassen, damit der Bot funktioniert?
Ja, die Sitzung muss geöffnet bleiben. Laut offizieller Dokumentation kommen Ereignisse nur an, solange die Claude-Code-Sitzung mit --channels läuft, für ein Always-On-Setup führen Sie sie also in einem Hintergrundprozess oder einem persistenten Terminal aus. Anthropic schreibt keinen Mechanismus vor; unsere Empfehlung auf einem Mac mini ist eine benannte tmux-Sitzung, mit der Sie sich per SSH wieder verbinden können, optional überwacht von einem LaunchAgent auf Benutzerebene (siehe Schritt 4 für die Einschränkungen).
Kann ich ein lokales Modell, Ollama, Bedrock oder Vertex mit Channels verwenden?
Nein. Channels erfordern eine Anthropic-Authentifizierung über claude.ai oder einen Console-API-Schlüssel und sind auf Amazon Bedrock, Google Clouds Agent Platform oder Microsoft Foundry nicht verfügbar. Das Routing zu einem Nicht-Claude-Endpunkt ist keine unterstützte Konfiguration. Sie können trotzdem ein lokales LLM auf demselben Mac mini als separate Arbeitslast betreiben, siehe unsere Anleitung zu lokalen LLMs, aber nicht als Gehirn einer Channel-Sitzung.
Welche Konfiguration des Mac mini sollte ich wählen?
Die von Anthropic genannten Anforderungen sind bescheiden (macOS 13+, 4 GB+ RAM), und es wird kein Bedarf pro Sitzung veröffentlicht, daher dimensionieren wir qualitativ: Der Mac mini M4 mit 16 GB / 256 GB für 85 $/Monat reicht für eine Claude-Code-Sitzung plus ein Bun-Channel-Plugin völlig aus. Wählen Sie den Mac mini M6 ab 149 $/Monat, wenn dieselbe Maschine daneben auch schwere Xcode-Builds, mehrere Channel-Sitzungen oder ein lokales Modell ausführen soll.
Funktioniert der iMessage-Channel auf einem headless Mac mini?
Ja, mit zwei einmaligen GUI-Schritten per VNC: der App, die Bun gestartet hat, Vollzugriff auf die Festplatte erteilen und bei der ersten Antwort in der Automation-Abfrage („Terminal wants to control Messages“) auf OK klicken. Das Plugin liest die ~/Library/Messages/chat.db des angemeldeten Benutzers und steuert Messages.app per AppleScript, also, unsere Schlussfolgerung aus diesem Mechanismus, kein Satz aus der Dokumentation, lassen Sie den Benutzer mit in der Apple-ID angemeldeter Messages-App eingeloggt und aktivieren Sie die automatische Anmeldung, damit das Neustarts übersteht. Verwenden Sie eine dedizierte Apple-ID mit 2FA.
Was ist mit WhatsApp, Slack, Signal oder Teams?
Sie sind keine offiziellen Channels. Die Research Preview liefert Plugins für Telegram, Discord und iMessage plus die fakechat-Demo; jeder andere Channel ist ein eigener MCP-Server, der während der Preview nur hinter --dangerously-load-development-channels oder der Einstellung allowedChannelPlugins einer Organisation geladen wird. Claude in Slack ist eine andere Funktion, die Cloud-Sitzungen startet. Wenn die Breite der Plattformen Priorität hat, passt OpenClaw besser.
12. Quellen und weiterführende Links
Jeder Befehl, jedes Flag und jede Anforderung in dieser Anleitung wurde am 28. September 2026 anhand der offiziellen Claude-Code-Dokumentation, des CHANGELOG (Claude Code 2.1.283, am 25. September 2026 auf npm veröffentlicht) und des Repositorys claude-plugins-official geprüft (telegram 0.0.7, discord 0.0.4, imessage 0.1.0, fakechat 0.0.1). Channels ist eine Research Preview, deren Flags sich ändern können, konsultieren Sie diese Seiten für den aktuellen Stand:
- Claude-Code-Dokumentation: Channels (Quickstart, Telegram / Discord / iMessage, Enterprise-Kontrollen)
- Claude-Code-Dokumentation: Channels-Referenz (Protokollvertrag, Berechtigungsweiterleitung, Entwicklungs-Flag)
- Claude-Code-Dokumentation: Claude Code einrichten (Systemanforderungen, Installer, Release-Kanäle, Updates)
- Claude-Code-Dokumentation: Authentifizierung (Anmeldung, setup-token, Speicherung der Zugangsdaten, Ablauf)
- Claude-Code-Dokumentation: Berechtigungsmodi (default, auto, Warnungen zu bypassPermissions)
- Claude-Code-Dokumentation: Headless-/-p-Modus (Channels, --permission-prompts none, SIGTERM)
- Claude-Code-Dokumentation: Sandboxing (macOS Seatbelt, sandbox.credentials)
- Claude-Code-Dokumentation: Einstellungen (Dateiorte und Vorrang)
- Claude-Code-Dokumentation: Terminal-Konfiguration (offizielle tmux-Einstellungen)
- Claude-Code-Dokumentation: Modellkonfiguration (/model, Aliase, Effort)
- Claude-Code-Dokumentation: Plugin-CLI-Referenz (plugin update, marketplace update)
- Claude-Code-Dokumentation: Remote Control (eine andere Funktion, zur Abgrenzung)
- Offizielles Telegram-Channel-Plugin (README)
- Telegram-Plugin: ACCESS.md (dmPolicy, allowFrom, statischer Zugriffsmodus)
- Offizielles Discord-Channel-Plugin (README)
- Offizielles iMessage-Channel-Plugin (README)
- iMessage-Plugin: ACCESS.md (Allowlist-Policy, SMS, Signatur)
- Claude Code CHANGELOG (2.1.80 --channels Research Preview, 2.1.81 Berechtigungsweiterleitung, 2.1.128, 2.1.211, 2.1.234, 2.1.281)
- GitHub-Issue #97701: Sitzungs-Churn eines launchd-überwachten --channels-Prozesses auf 2.1.283 (offen)
- Bun: Installation (macOS 13.0+)
- claude.com/pricing: Pro-, Max- und Team-Pläne (Claude Code enthalten)
Verwandte Anleitungen
OpenClaw auf Mac mini installieren
Die quelloffene, anbieterunabhängige Alternative mit 20+ Chat-Plattformen und eigenem launchd-Gateway-Dienst.
Hermes Agent auf Mac mini installieren
Der sich selbst verbessernde Open-Source-Agent von Nous Research: Einzeiler-Installation, Telegram und Discord, launchd, lokales Ollama.
Remote-Xcode-Entwicklung
Geben Sie dem Agenten, dem Sie vom Telefon aus schreiben, ein echtes Xcode-Projekt, das er auf demselben Mac mini bauen und testen kann.
Mac mini M6 mieten
Apples neuester Mac mini mit dem 12-Kern-M6, dediziert 1:1 ab 149 $/Monat, für mehrere Sitzungen oder schwere Builds.