Guida - AI & Automazione

Come eseguire Claude Code Channels 24/7 su un Mac mini dedicato

Claude Code Channels è una funzionalità in research preview della CLI Claude Code di Anthropic: un canale è un server MCP che invia eventi alla tua sessione Claude Code in esecuzione, così puoi parlare con l'agente di coding che ha il tuo repository aperto da Telegram, Discord o iMessage, e approvare le sue chiamate agli strumenti dal telefono. Gli eventi arrivano solo mentre la sessione è aperta, quindi serve una macchina che non vada mai in stop. Un Mac mini Apple Silicon dedicato è l'host always-on naturale, e, poiché il canale iMessage è solo per macOS, il tipo di host che un VPS Linux non potrà mai essere, da $85/mese.

25 min di lettura Aggiornato il 28 settembre 2026

1. Perché eseguire Claude Code Channels su un Mac mini?

La documentazione ufficiale è esplicita: "Events only arrive while the session is open, so for an always-on setup you run Claude in a background process or persistent terminal." Un laptop che va in stop, chiude il coperchio o si riavvia per un aggiornamento mette silenziosamente offline il tuo bot; la Bot API di Telegram non offre cronologia né ricerca, quindi Claude non può recuperare i messaggi precedenti, e Telegram conserva gli aggiornamenti non consegnati per al massimo 24 ore. Un Mac mini dedicato di MyRemoteMac mantiene quella sessione aperta 24/7 su Apple Silicon (Claude Code supporta macOS 13+ su ARM64), con root completo via SSH, VNC per le finestre di autorizzazione macOS una tantum, 1 Gbps inclusi e un prezzo mensile fisso. È anche l'unico tipo di host cloud in grado di eseguire il canale iMessage, che è solo per macOS: legge il database di Messaggi e pilota Messages.app tramite AppleScript, impossibile su un VPS Linux.

Caratteristica VPS cloud (Linux) Mac mini (MyRemoteMac)
Costo mensile Variabile (vedi analisi dei costi) M4 da $85/mese · M6 da $149/mese (fisso)
Canale iMessage Non possibile (solo macOS) Sì, Messages.app + Accesso completo al disco
Canali Telegram / Discord Sì Sì (solo in uscita, nessuna porta in ingresso)
Sessione always-on Sì Sì (SLA 99,9%)
Hardware Condiviso, virtualizzato Mac fisico dedicato 1:1
Accesso e toolchain SSH SSH + VNC, root completo, Xcode e Simulator nella stessa sessione

Vantaggio chiave: Channels collega le app di chat a una sessione Claude Code che ha già aperto il tuo progetto reale. Su un Mac mini quel progetto può essere un'app iOS o macOS, l'agente a cui scrivi dal telefono può compilarla e testarla con Xcode sulla stessa macchina (vedi la nostra guida allo sviluppo Xcode remoto). Tutti e tre i plugin ufficiali inoltrano le richieste di permesso, quindi approvi o rifiuti ogni chiamata Bash, Write o Edit dalla chat.

2. Prerequisiti

Claude Code Channels è una funzionalità della CLI proprietaria Claude Code di Anthropic, non un prodotto separato, e richiede un piano Claude a pagamento. È una research preview: il flag --channels non compare ancora nemmeno in claude --help, e Anthropic avverte che sintassi e protocollo potrebbero cambiare. I fatti riportati qui sotto sono stati verificati sulla documentazione ufficiale il 28 settembre 2026 (Claude Code 2.1.283).

  • Un Mac mini dedicato di MyRemoteMac, M4 da $85/mese (16 GB / 256 GB) o M6 da $149/mese. Claude Code richiede macOS 13.0+, almeno 4 GB di RAM e un processore ARM64 o x64: tutti i modelli sono idonei.
  • Accesso SSH e VNC al tuo Mac mini (entrambi inclusi nel tuo abbonamento MyRemoteMac). SSH serve per il terminale; VNC per il login nel browser e per le finestre di Accesso completo al disco / Automazione di macOS richieste dal canale iMessage.
  • Un account Claude con accesso a Claude Code: Pro ($20/mese), Max (da $100/mese), Team ($25/postazione/mese), Enterprise, oppure una chiave API Console fatturata per token. Il piano gratuito di claude.ai non include Claude Code. I canali non sono disponibili su Amazon Bedrock, Agent Platform di Google Cloud o Microsoft Foundry. Su Team/Enterprise, un Owner deve prima abilitare i canali (claude.ai → Admin settings → Claude Code → Channels).
  • Bun sul Mac mini: "Each supported channel is a plugin that requires Bun" (installato nel Passo 1).
  • Credenziali del bot per il tuo canale: un token bot Telegram da @BotFather, oppure un'applicazione bot Discord con il Message Content Intent abilitato e invitata in un server di cui fai parte. iMessage non richiede token: la documentazione richiede macOS, Accesso completo al disco, un'autorizzazione di Automazione alla prima risposta e "any device signed into your Apple ID" per scriverti da solo, mantenere l'utente del Mac mini connesso con Messaggi collegato è una nostra deduzione da quel meccanismo (vedi Passo 3), e consigliamo un Apple ID dedicato con autenticazione a due fattori anziché quello personale.
  • Familiarità di base con i comandi da terminale, tmux e la modifica di ~/.claude/settings.json.

3. Passo 1: Connettiti via SSH, installa Claude Code e Bun

Connettiti al tuo Mac mini via SSH con le credenziali della tua dashboard MyRemoteMac, verifica la versione di macOS, poi installa Claude Code. L'installer nativo è il metodo raccomandato da Anthropic: non richiede Node.js e si aggiorna da solo in background. Homebrew e npm sono alternative documentate (il pacchetto npm installa lo stesso binario nativo e richiede Node.js 22+; non eseguirlo mai con sudo).

Connettiti via SSH e verifica i requisiti

# 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

Installa Claude Code (installer nativo ufficiale)

Esegui l'installer, poi verifica la versione e lascia che claude doctor esegua la sua diagnostica in sola lettura. Il cask claude-code di Homebrew segue il canale stable (circa una settimana indietro, salta le regressioni) e non si aggiorna automaticamente; claude-code@latest segue 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

Installa Bun (richiesto da ogni plugin di canale)

I plugin di canale ufficiali sono script Bun. Anche il requisito minimo di Bun è macOS 13.0+. Sia bun.com/install (dalla documentazione Bun) sia bun.sh/install (dai README dei plugin) sono ufficiali; funziona anche Homebrew. I plugin non indicano una versione minima di 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. Passo 2: Autenticati e scegli una modalità di permessi

I canali richiedono l'autenticazione Anthropic: un login claude.ai (Pro, Max, Team, Enterprise) o una chiave API Console. Avvia claude una volta e segui il login nel browser. Via SSH il browser può mostrare un codice da incollare al prompt "Paste code here if prompted"; su un Mac mini headless puoi anche completare il login nella sessione VNC. Su macOS le credenziali vanno nel Portachiavi; se il Portachiavi è bloccato (tipico via SSH) Claude Code ripiega su ~/.claude/.credentials.json con permessi 0600.

Accedi (abbonamento o chiave API)

Per una sessione always-on il login con abbonamento è il punto debole: scade (Claude Code avvisa all'avvio "Your login expires in 3 days · run /login to renew", e una sessione non presidiata "stops making progress once the credential expires"). Due rimedi documentati: genera un token OAuth valido un anno con claude setup-token (Pro/Max/Team/Enterprise; può solo effettuare richieste ai modelli) ed esportalo dove gira la sessione, oppure usa una ANTHROPIC_API_KEY dalla Console, fatturata per 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)

Modello e provider

La sessione usa il modello selezionato dal tuo piano; cambialo con /model o claude --model <alias> (alias come opus, sonnet, haiku) e il livello di effort con /effort. Non esiste alcuna opzione di modello locale o provider di terze parti per Channels: i backend Bedrock, Vertex e Foundry sono esclusi e l'instradamento verso un endpoint non Claude non è una configurazione supportata. Se vuoi un LLM locale sullo stesso Mac mini, trattalo come un carico di lavoro separato, vedi la nostra guida agli LLM locali.

Scegli una modalità di permessi e fissa il canale di rilascio

Da Claude Code 2.1.283, la modalità auto (un classificatore esamina le azioni) è la modalità iniziale integrata per le sessioni interattive. Per una sessione con canali consigliamo di mantenere l'approvazione umana nel ciclo: in modalità Manual (--permission-mode default) ogni richiesta Bash, Write o Edit viene inoltrata alla tua chat in allowlist, dove rispondi yes <id> o no <id>. In modalità auto decide il classificatore e "no dialog would open for the remote side to answer". Poiché la funzionalità è una research preview, fissa anche il canale di rilascio stable e una versione minima in ~/.claude/settings.json (impostazioni utente, le modalità auto e bypass impostate nel .claude/settings.json di un progetto vengono ignorate):

# ~/.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

Non disattivare i permessi. L'avvertimento della documentazione stessa su --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" e "offers no protection against prompt injection or unintended actions". Viene rifiutato come root/sudo su macOS, le regole deny restano valide e gli amministratori possono bloccarlo con permissions.disableBypassPermissionsMode. Se un Mac mini dedicato, isolato e pienamente affidabile deve girare non presidiato, lo schema documentato è claude -p "<prompt>" --dangerously-skip-permissions come utente non root, un'opzione chiaramente segnalata, mai il default. Lo schema non presidiato più sicuro è -p --permission-mode auto --permission-prompts none (2.1.259+), che rifiuta tutto ciò che richiederebbe una conferma invece di bloccarsi.

5. Passo 3: Collega Telegram, Discord o iMessage

La research preview include tre plugin di canale ufficiali, Telegram, Discord e iMessage, più una demo su localhost chiamata fakechat, tutti dal marketplace Anthropic claude-plugins-official (Apache-2.0). Ciascuno si installa come plugin dentro Claude Code, si configura con le tue credenziali bot e si attiva in una sessione con il flag --channels. Due regole valgono per tutti: devi uscire e riavviare Claude Code con --channels dopo aver installato un plugin, e il bot può rispondere solo mentre quella sessione è in esecuzione. Ogni plugin approvato mantiene un'allowlist dei mittenti: "only IDs you've added can push messages, and everyone else is silently dropped."

Telegram (primo canale consigliato)

Crea il bot in Telegram: apri @BotFather, invia /newbot, assegnagli un nome visualizzato e uno username unico che termini con bot, e copia il token. Poi, dentro una sessione Claude Code sul Mac mini, installa il plugin (scegli lo scope user quando richiesto), salva il token, riavvia con il flag del canale, associa e blocca la policy. Il plugin fa long polling sulla Bot API, quindi il Mac mini non ha bisogno di porte in ingresso.

# 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 (alternativa)

Nel Discord Developer Portal crea una New Application, apri Bot, clicca Reset Token e copialo, abilita Message Content Intent sotto Privileged Gateway Intents, poi usa OAuth2 → URL Generator con lo scope bot e i permessi View Channels, Send Messages, Send Messages in Threads, Read Message History, Attach Files e Add Reactions per invitarlo in un server di cui fai parte, i DM funzionano solo se condividi un server con il bot. I canali guild sono opt-in per ID di canale.

# 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 (solo macOS, il vantaggio del Mac mini)

Nessun token bot: il plugin legge direttamente ~/Library/Messages/chat.db e invia le risposte tramite AppleScript. La prima lettura richiede l'Accesso completo al disco, la richiesta nomina l'app che ha avviato Bun (Terminale, iTerm, il tuo IDE), e la prima risposta attiva una richiesta di Automazione ("Terminal wants to control Messages"). Entrambe sono finestre grafiche, quindi fallo via VNC; senza Accesso completo al disco il server termina con "authorization denied". Poi apri Messaggi su un qualsiasi dispositivo collegato al tuo Apple ID e invia un messaggio a te stesso: la chat con se stessi bypassa il controllo degli accessi, mentre gli altri contatti devono essere aggiunti esplicitamente all'allowlist. Il plugin interroga chat.db una volta al secondo, parte dall'ultima riga (nessun replay dopo un riavvio), aggiunge "Sent by Claude" a meno che IMESSAGE_APPEND_SIGNATURE=false, e ignora SMS/RCS per impostazione predefinita perché "SMS sender IDs are spoofable". Nostra deduzione da quel meccanismo, non una frase della documentazione: mantieni l'utente del Mac mini connesso con Messaggi collegato.

# 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

Prova a secco facoltativa: fakechat su localhost

Per testare il flusso senza alcun servizio esterno, la demo ufficiale fakechat serve un'interfaccia di chat su http://localhost:8787 (raggiungila tramite un tunnel SSH o via VNC). Non ha token né controllo degli accessi, quindi usala solo per i test. Se Claude Code chiede il permesso per la prima risposta, approvalo.

/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

Cosa vedrai: il messaggio in ingresso compare nel terminale, ma il testo della risposta no, il terminale mostra la chiamata allo strumento e una conferma come "sent", e la risposta compare nell'app di chat. In modalità -p (non interattiva), gli strumenti che richiedono input da terminale, domande a scelta multipla e approvazione della modalità plan, sono disattivati così la sessione non si blocca mai; nella sessione tmux interattiva consigliata da questa guida, la modalità plan funziona (ripristinata per le sessioni --channels nella 2.1.126). Le finestre di fiducia del progetto e di consenso MCP non vengono mai inoltrate, quindi prima concedi fiducia alla cartella del progetto e approva localmente il server MCP del plugin.

6. Passo 4: Mantieni la sessione attiva 24/7 e aggiorna

Anthropic non prescrive alcun meccanismo di servizio: la documentazione dice solo di eseguire Claude "in a background process or persistent terminal", e al 28 settembre 2026 su code.claude.com non ci sono istruzioni per launchd, systemd, screen o nohup. Ciò che è documentato è una pagina di configurazione tmux, quindi tmux è un host supportato. Tutto ciò che in questa sezione va oltre le impostazioni tmux è una nostra raccomandazione per un Mac mini MyRemoteMac, chiaramente indicata come tale.

Esegui la sessione con canali in tmux (nostra raccomandazione)

Avvia la sessione interattiva claude --channels dentro una sessione tmux con nome via SSH e scollegati. Puoi ricollegarti in qualsiasi momento per rispondere a una richiesta non inoltrata, rinnovare il login con /login o leggere l'avviso Channels all'avvio. Aggiungi le tre impostazioni tmux documentate da Anthropic così che le notifiche raggiungano il terminale esterno e Shift+Enter funzioni:

# 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

Supervisore facoltativo: un LaunchAgent utente (nostro, con un avvertimento)

Per ricreare la sessione tmux dopo un riavvio o un crash puoi registrare un LaunchAgent utente con RunAtLoad e KeepAlive il cui programma è un piccolo script wrapper. Deve essere un LaunchAgent, non un LaunchDaemon: le autorizzazioni iMessage (Accesso completo al disco, Automazione), Messages.app e il login del Portachiavi appartengono alla sessione dell'utente connesso, il che su un Mac mini headless significa che il login automatico deve essere abilitato (Impostazioni di Sistema > Utenti e Gruppi). Due avvertimenti: non è stato testato se un processo Bun avviato in questo modo riceva la propria autorizzazione di Accesso completo al disco senza una richiesta grafica, e la issue di regressione aperta #97701 (2026-09-27) segnala un daemon --channels supervisionato da launchd che ricrea la sessione ogni ~2 minuti sulla 2.1.283, senza risposta dei maintainer al momento della stesura. Testa sulla tua versione di destinazione e mantieni fissato il canale stable.

# 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

Mantieni il Mac mini sveglio e connesso

Amministrazione macOS generica, non un punto della documentazione Claude Code: disattiva lo stop così che la sessione e il poller di Messaggi non si fermino mai (esegui man pmset sul Mac per i dettagli), e abilita il login automatico per il tuo utente così che LaunchAgent e Messages.app tornino attivi dopo un riavvio.

# 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

Aggiorna Claude Code, Bun e i plugin

L'installer nativo controlla gli aggiornamenti all'avvio e periodicamente, li scarica in background e applica la nuova versione al successivo avvio di Claude Code, quindi una sessione tmux di lunga durata mantiene la propria versione finché non la riavvii. claude update la applica subito. Poiché la sintassi --channels "may change based on feedback", rileggi la documentazione dei canali dopo ogni aggiornamento e ricontrolla l'avviso Channels all'avvio alla ricerca di una riga di avvertimento.

# 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. Rafforzamento della sicurezza

Ogni messaggio in ingresso arriva in una sessione con accesso al filesystem, a git e alla shell, e "anyone who can reply through the channel can approve or deny tool use in your session". La documentazione di riferimento è netta: "An ungated channel is a prompt injection vector." Ecco i controlli documentati, più le nostre raccomandazioni dove la documentazione tace:

  • Attiva l'allowlist subito dopo l'associazione. Esegui /telegram:access policy allowlist (o l'equivalente Discord) non appena il tuo account è associato. Quando la lista è definitiva, TELEGRAM_ACCESS_MODE=static / IMESSAGE_ACCESS_MODE=static disattivano del tutto l'associazione a runtime.
  • Metti in allowlist solo i mittenti a cui affideresti il potere di approvazione. Le approvazioni inoltrate coprono Bash, Write ed Edit; dalla 2.1.211 il testo inoltrato viene sanificato e dalla 2.1.234 le credenziali sono mascherate come [REDACTED] e l'inoltro va solo ai server registrati tramite --channels, ma la documentazione dice ancora di trattare i campi inoltrati come non affidabili.
  • Lascia attive le richieste di permesso. Modalità Manual più inoltro, oppure modalità auto con il classificatore, mai bypassPermissions su una macchina che contiene codice o credenziali reali. Le regole deny nelle impostazioni bloccano i comandi in ogni modalità.
  • Abilita la sandbox Bash (funzionalità ufficiale, nostra raccomandazione attivarla): su macOS non c'è nulla da installare, usa il framework Seatbelt integrato. Aggiungi voci sandbox.credentials per ~/.ssh e ~/.aws perché la policy di lettura predefinita li consente ancora.
  • Limita i permessi dei file dei token (nostra raccomandazione, la documentazione non indica un modo file): i comandi configure scrivono ~/.claude/channels/<telegram|discord>/.env; le variabili d'ambiente TELEGRAM_BOT_TOKEN / DISCORD_BOT_TOKEN hanno la precedenza sui file. Non committarli mai; ruotali tramite BotFather o il portale Discord in caso di fuga.
  • Superficie di privacy iMessage: l'Accesso completo al disco dà all'app terminale e a tutto ciò che avvia accesso in lettura all'intero database di Messaggi, e l'autorizzazione di Automazione le permette di inviare iMessage a tuo nome. Usa un Apple ID dedicato con 2FA sul Mac mini dedicato, e lascia IMESSAGE_ALLOW_SMS al suo valore predefinito false.
  • Nessuna porta in ingresso. I plugin ufficiali interrogano Telegram o si connettono in uscita al gateway Discord; fakechat ascolta solo su localhost. Se costruisci un canale webhook personalizzato a partire dalla documentazione di riferimento (caricabile nella preview solo con --dangerously-load-development-channels, che la documentazione dice di non usare mai per fonti non affidabili), esponi la sua porta solo tramite la VPN WireGuard del Mac mini.
# 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. Risoluzione dei problemi comuni

Il bot non risponde

La risposta ufficiale: "make sure Claude Code is running with --channels … The bot can only reply while the channel is active." Una sessione SSH chiusa, un crash, un riavvio o lo stop mettono silenziosamente offline il bot. Dalla 2.1.281 anche il nome del plugin installato deve corrispondere esattamente alla voce --channels:

# 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" oppure nessun comando /telegram:configure

Aggiungi prima il marketplace, scegli lo scope user all'installazione ed esegui /reload-plugins se il riepilogo dell'installazione lo richiede (o semplicemente riavvia):

/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

Il canale si connette ma non arriva alcun messaggio (organizzazione Team, Enterprise o Console)

channelsEnabled è un'impostazione gestita che gli utenti non possono sovrascrivere. Su claude.ai Team/Enterprise è bloccata per impostazione predefinita finché un Owner non la abilita; anche le organizzazioni Console che distribuiscono impostazioni gestite devono impostarla. Il server MCP si connette comunque e i suoi strumenti funzionano, mancano solo i messaggi in ingresso, con un avvertimento all'avvio. Controlla l'avviso all'avvio e chiedi al tuo 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

Il server iMessage termina con "authorization denied"

L'Accesso completo al disco non è stato concesso all'app che ha avviato Bun, oppure Claude Code è stato avviato da un launcher diverso (sshd, un server tmux avviato altrove, un LaunchAgent) rispetto a quello che hai autorizzato. Concedilo via VNC e riavvia dallo stesso punto:

# 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)

La sessione si ferma: "Login expired · Please run /login"

Un login con abbonamento scade e una sessione non presidiata smette di avanzare. Ricollegati a tmux e rinnovalo, oppure passa la macchina always-on a un token OAuth valido un anno o a una chiave API:

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. Analisi dei costi vs. VPS cloud

Claude Code Channels non aggiunge alcun costo proprio, ma Claude Code stesso richiede un piano a pagamento, lo stesso su qualsiasi host. Ciò che cambia è la macchina. Un VPS Linux generico costa meno al mese di un Mac mini, ma non può eseguire il canale iMessage, non ha Xcode e condivide l'hardware. Ecco quanto costa una configurazione tipica in USD al mese:

Caso d'uso Accesso a Claude Host VPS Linux Host Mac mini (MyRemoteMac) Cosa aggiunge il Mac mini
Sviluppatore singolo, Telegram o Discord Pro, $20/mese ~$20–40/mese (ipotesi) $85/mese (M4, 16 GB / 256 GB) Hardware dedicato 1:1, VNC, toolchain macOS
Sviluppatore singolo, iMessage Pro, $20/mese Non possibile (solo macOS) $85/mese (M4) L'unico tipo di host in grado di eseguirlo
Uso intensivo, più sessioni, build Xcode Max, da $100/mese ~$40–80/mese (ipotesi) $149/mese (M6) Xcode, Simulator, build rapide su Apple Silicon
Bot di team (l'Owner abilita i canali) Team, $25/postazione/mese ~$40–80/mese (ipotesi) $149/mese (M6) Una macchina dedicata per team, si applicano le impostazioni gestite

Ipotesi: le cifre VPS sono nostre stime approssimative per istanze Linux generiche entry-level (4–8 GB) e di fascia media (16 GB), non preventivi di un provider specifico. I prezzi dei piani Claude provengono da claude.com/pricing al 28 settembre 2026 (Pro $20/mese o $17/mese con fatturazione annuale; Max da $100/mese; Team $25/postazione/mese standard o $20 annuale, $125 premium). La fatturazione con chiave API Console è invece per token, prezzi di listino first-party al momento della stesura: Sonnet 5 $2/$10, Opus 5 $5/$25, Haiku 4.5 $1/$5 per milione di token in input/output. I piani in abbonamento sono a consumo: un bot always-on condivide la stessa quota del tuo coding interattivo. Anthropic non pubblica alcun consumo di RAM o CPU per una sessione con canali, quindi dimensioniamo in modo qualitativo: un Mac mini M4 con 16 GB è ampiamente sufficiente per una sessione Claude Code + plugin Bun; scegli l'M6 (disponibile dal 22 settembre 2026) se la stessa macchina esegue anche build pesanti, più sessioni o un modello locale.

In sintesi: Se ti servono solo Telegram o Discord e non tocchi mai macOS, un VPS Linux è l'host più economico. Il Mac mini si guadagna il suo prezzo quando l'agente deve avere aperto il tuo progetto Xcode, quando vuoi iMessage, o quando vuoi hardware dedicato non virtualizzato con VNC per le richieste macOS una tantum, da $85/mese in aggiunta al piano Claude che già paghi.

10. Claude Code Channels vs. OpenClaw

Risolvono problemi diversi. Claude Code Channels è una funzionalità di una CLI proprietaria, non un assistente autonomo: collega Telegram, Discord o iMessage a una sessione Claude Code già in esecuzione, quindi il valore è "parlare con l'agente di coding che ha il tuo repo aperto", con il supporto Anthropic, il modello di permessi di Claude Code, approvazioni sì/no inoltrate con prompt sanificati, allowlist dei mittenti, la sandbox Bash e le impostazioni gestite dell'organizzazione. È solo Claude tramite autenticazione Anthropic, non ha un daemon proprio, e i canali personalizzati sono caricabili solo dietro un flag di sviluppo durante la preview. OpenClaw (github.com/openclaw/openclaw, MIT, mantenuto dalla community, circa 391k stelle GitHub contro 148k per anthropics/claude-code al 28 settembre 2026) è un gateway open source e self-hosted che gira 24/7 come proprio servizio launchd supervisionato, supporta molte più piattaforme di chat (WhatsApp, Telegram, Discord, iMessage, Slack, Signal, Teams, Google Chat e altre) e ti lascia scegliere il provider del modello, inclusi i modelli locali. Diversi articoli secondari hanno presentato Channels come un'alternativa a OpenClaw; la documentazione ufficiale non fa alcun confronto del genere.

Scegli Channels se paghi già Claude Pro, Max o Team e vuoi che i file del tuo progetto reale siano raggiungibili dal telefono con supporto ufficiale e permessi inoltrati. Scegli OpenClaw per WhatsApp, Slack o Signal, la scelta del provider, i modelli locali o un vero funzionamento come daemon, vedi la nostra guida a OpenClaw su Mac mini (e il suo cugino Python, Hermes Agent). Entrambi i bridge iMessage richiedono macOS con Messaggi collegato e le stesse autorizzazioni TCC, ed è esattamente per questo che un Mac mini dedicato 1:1 si adatta a entrambi.

11. FAQ

Claude Code Channels è gratuito o open source?

No su entrambi i fronti per Claude Code stesso: la CLI è proprietaria ("© Anthropic PBC. All rights reserved. Use is subject to Anthropic's Commercial Terms of Service.") e richiede un account Pro, Max, Team, Enterprise o Console, il piano gratuito di claude.ai non include Claude Code. Solo i plugin di canale nel repository claude-plugins-official sono open source (Apache-2.0). Channels non aggiunge alcun costo extra oltre al tuo piano o all'utilizzo API.

Devo tenere un terminale aperto perché il bot funzioni?

Sì, la sessione deve restare aperta. Secondo la documentazione ufficiale, gli eventi arrivano solo mentre la sessione Claude Code è in esecuzione con --channels, quindi per una configurazione always-on la esegui in un processo in background o in un terminale persistente. Anthropic non prescrive un meccanismo; la nostra raccomandazione su un Mac mini è una sessione tmux con nome a cui puoi ricollegarti via SSH, facoltativamente supervisionata da un LaunchAgent utente (vedi il Passo 4 per le avvertenze).

Posso usare un modello locale, Ollama, Bedrock o Vertex con Channels?

No. I canali richiedono l'autenticazione Anthropic tramite claude.ai o una chiave API Console e non sono disponibili su Amazon Bedrock, Agent Platform di Google Cloud o Microsoft Foundry. L'instradamento verso un endpoint non Claude non è una configurazione supportata. Puoi comunque eseguire un LLM locale sullo stesso Mac mini come carico di lavoro separato, vedi la nostra guida agli LLM locali, ma non come cervello di una sessione con canali.

Quale configurazione di Mac mini dovrei scegliere?

I requisiti dichiarati da Anthropic sono modesti (macOS 13+, almeno 4 GB di RAM) e non viene pubblicato alcun consumo per sessione, quindi dimensioniamo in modo qualitativo: il Mac mini M4 con 16 GB / 256 GB a $85/mese è ampiamente sufficiente per una sessione Claude Code più un plugin di canale Bun. Scegli il Mac mini M6 da $149/mese se la stessa macchina eseguirà anche build Xcode pesanti, più sessioni con canali o un modello locale in parallelo.

Il canale iMessage funziona su un Mac mini headless?

Sì, con due passaggi grafici una tantum da fare via VNC: concedere l'Accesso completo al disco all'app che ha avviato Bun e cliccare OK sulla richiesta di Automazione ("Terminal wants to control Messages") alla prima risposta. Il plugin legge ~/Library/Messages/chat.db dell'utente connesso e pilota Messages.app tramite AppleScript, quindi, nostra deduzione da quel meccanismo, non una frase della documentazione, mantieni l'utente connesso con Messaggi collegato all'Apple ID, e abilita il login automatico così che sopravviva ai riavvii. Usa un Apple ID dedicato con 2FA.

E WhatsApp, Slack, Signal o Teams?

Non sono canali ufficiali. La research preview include i plugin Telegram, Discord e iMessage più la demo fakechat; qualsiasi altro canale è un server MCP personalizzato che, durante la preview, si carica solo dietro --dangerously-load-development-channels o l'impostazione allowedChannelPlugins di un'organizzazione. Claude in Slack è una funzionalità diversa che avvia sessioni cloud. Se la priorità è l'ampiezza delle piattaforme, OpenClaw è la scelta migliore.

12. Fonti e approfondimenti

Ogni comando, flag e requisito di questa guida è stato verificato il 28 settembre 2026 sulla documentazione ufficiale di Claude Code, sul CHANGELOG (Claude Code 2.1.283, pubblicato su npm il 25 settembre 2026) e sul repository claude-plugins-official (telegram 0.0.7, discord 0.0.4, imessage 0.1.0, fakechat 0.0.1). Channels è una research preview i cui flag potrebbero cambiare, consulta queste pagine per lo stato attuale:

Guide correlate

Pronto a scrivere al tuo agente di coding 24/7?

Distribuisci un Mac mini Apple Silicon dedicato come host per Claude Code Channels. M4 da $85/mese, M6 da $149/mese, 1 Gbps inclusi, SSH e VNC.

Cerchi maggiori dettagli?

Consulta la documentazione completa per guide passo passo, riferimenti di configurazione e risoluzione dei problemi.

Apri la documentazione →