Claude Code Remote Control : reprendre ses sessions WSL depuis le téléphone

Claude Code Remote Control : reprendre ses sessions WSL depuis le téléphone

·8 min de lecture·Mis à jour le 26 mai 2026

Le problème : des sessions Claude Code enfermées dans WSL

Les sessions Claude Code s'empilent dans ~/.claude/projects/-home-kwuic-projects-* : des JSONL d'historique, des todos, parfois plusieurs heures de contexte par session. Dès qu'on s'éloigne du bureau, plus rien n'est accessible.

Claude Desktop ne peut pas ouvrir les sessions WSL, et la CLI claude --resume <session-id> non plus depuis un autre filesystem. Chaque environnement — Windows natif, WSL, app Desktop — est enfermé dans sa bulle.

Les contournements ne valent pas mieux : Tailscale + SSH + client mobile fonctionne, mais taper du code sur clavier mobile dans un terminal nu n'est pas viable ; GitHub Actions pour déléguer des tâches est asynchrone, donc sans workflow naturel.

La solution : claude remote-control

Depuis Claude Code 2.1.51 :

claude remote-control

Le binaire ouvre un bridge entre le terminal local et les serveurs Anthropic, et affiche un QR code plus une URL claude.ai/code?environment=env_xxxxx. On scanne avec l'app Claude (onglet « Code ») ou on ouvre l'URL n'importe où. À partir de là, la session continue de tourner sur la machine (fichiers, MCP, git, env WSL intacts), mobile et desktop synchronisés en temps réel.

C'est l'inverse d'un éditeur cloud type Cursor Web : le calcul reste local, seule l'UI est distante. Les secrets MCP, les credentials et le code privé ne quittent jamais la machine.

Le piège DISABLE_TELEMETRY

Premier lancement :

❯ claude remote-control
Error: Remote Control is not yet enabled for your account.

Sur plan Max 200 $/mois. Il n'y a pourtant aucun toggle à chercher dans /config, claude.ai/settings ou admin-settings : la feature est gated server-side via GrowthBook, le système de feature flags d'Anthropic, par un flag interne nommé tengu_ccr_bridge.

Les issues GitHub (#34528, #29569) et l'analyse minifiée du binaire par la communauté donnent la vraie cause. Quelque part dans le binaire claude, une fonction Pv() décide si le client doit interroger le service de feature flags :

// Reconstitué depuis le code minifié
function Pv() {
  return !!process.env.DISABLE_TELEMETRY || !!process.env.CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC
}

function qA(flagName, defaultValue) {
  if (!Pv()) {
    return fetchFromGrowthBook(flagName, defaultValue)
  }
  return defaultValue // ← retourne toujours false pour les features gated
}

// Plus loin :
const remoteControlEnabled = qA('tengu_ccr_bridge', false)

Si DISABLE_TELEMETRY=1 est set (ou son alias CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC), le client ne demande même pas au serveur : il assume que toutes les features gated sont à false. Remote Control disparaît, sans prévenir.

Le design mélange deux choses distinctes — « je ne veux pas envoyer d'analytics » (préférence privacy) et « je suis un client qui ne peut pas joindre Anthropic » (cas Bedrock, Vertex, Foundry). Deux endpoints, deux usages, gatés par le même booléen. Plusieurs PRs poussent pour scinder ça côté Anthropic ; en attendant, il faut connaître le piège.

Ce qui est safe vs ce qui casse

VariableEffetCasse Remote Control ?
DISABLE_TELEMETRYCoupe Statsig + GrowthBookOui
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFICAlias de la précédenteOui
DISABLE_ERROR_REPORTINGCoupe SentryNon ✅
DISABLE_NON_ESSENTIAL_MODEL_CALLSCoupe les appels Haiku (titres, etc.)Non ✅
CLAUDE_CODE_DISABLE_FEEDBACK_SURVEYCoupe les sondagesNon ✅

Piège typique : DISABLE_NON_ESSENTIAL_MODEL_CALLS ressemble visuellement à CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC, à un underscore et trois lettres près. Ce sont deux variables différentes avec deux effets différents. C'est DISABLE_TELEMETRY qui casse Remote Control, pas l'autre.

La procédure de fix

  1. Retirer DISABLE_TELEMETRY (et CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC si présent) de ~/.claude/settings.json :
{
  "env": {
    "DISABLE_ERROR_REPORTING": "1",
    "DISABLE_NON_ESSENTIAL_MODEL_CALLS": "1",
    "CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1"
  }
}
  1. Vérifier qu'elle n'est pas non plus dans le shell :
grep -i -E "DISABLE_TELEMETRY|NONESSENTIAL_TRAFFIC" ~/.bashrc ~/.zshrc ~/.profile ~/.config/fish/config.fish 2>/dev/null
  1. Fermer complètement le terminal. La variable reste exportée dans l'env du shell parent : relancer claude dans la même fenêtre ne suffit pas. En terminal intégré IDE, tuer toutes les instances pour purger l'env hérité.

  2. Rafraîchir le cache de feature flags en réauthentifiant :

claude
# dans la session :
/logout
/login   # OAuth claude.ai, surtout PAS API key
  1. Tester avec claude remote-control. Si tout est bon :
Take this session with you and pick up right where you left off on any device.
Open the Code tab in the Claude mobile app, or visit claude.ai/code in a browser.

Enable Remote Control? (y/n)

Choix du mode spawn : same-dir ou worktree

Au premier lancement :

Spawn mode for this project:
  [1] same-dir — sessions share the current directory (default)
  [2] worktree — each session gets an isolated git worktree

same-dir : toutes les sessions lancées depuis mobile bossent dans le dossier courant. Simple, mais deux sessions en parallèle peuvent se marcher dessus sur les mêmes fichiers.

worktree : chaque session a son propre git worktree isolé sur une branche dédiée. Parallélisme safe, avec l'overhead qui va avec (worktrees à nettoyer, branches à merger).

Pour de l'écriture en série, same-dir suffit largement. Pour laisser mobile traiter des tickets pendant qu'on bosse sur autre chose au bureau, worktree devient pertinent. On peut switcher en cours de route avec la touche w, ou redémarrer avec --spawn=worktree.

Workflow détaché avec tmux

Par défaut, claude remote-control mobilise le terminal en avant-plan : fermer la fenêtre tue la session.

# Créer une session tmux nommée "rc"
tmux new -s rc

# Dans tmux : lancer le remote
claude remote-control

# Détacher (Ctrl+B puis D) : le terminal se ferme, le remote continue
# Pour revenir plus tard :
tmux attach -t rc

Le remote vit alors en background tant que la machine est allumée. Trois alias dans ~/.bashrc pour éviter de retaper :

alias rc-start='tmux new -d -s rc "claude remote-control"'
alias rc-attach='tmux attach -t rc'
alias rc-stop='tmux kill-session -t rc'

Ce qui marche, ce qui ne marche pas (encore)

Ça marche :

  • Reprendre n'importe quelle session lancée depuis le remote sur mobile ou desktop
  • Édition de fichiers en direct (les modifs apparaissent sur les deux écrans)
  • Exécution de commandes bash, lecture de logs
  • MCP servers locaux disponibles (tous ceux configurés en local)
  • Notifications push quand une tâche longue se termine

Ça ne marche pas (ou pas encore) :

  • Reprendre une session antérieure lancée hors remote. Les vieilles JSONL en ~/.claude/projects/ restent invisibles depuis mobile : seul ce qui est lancé via remote-control est accessible.
  • Bosser sans connexion internet (c'est un bridge cloud).
  • Garder la session si la machine s'éteint ou si WSL2 est mis en pause par Windows.

Ce dernier point est insidieux : Windows 11 met agressivement WSL2 en pause après quelques minutes d'inactivité. On croit sa session vivante alors que la VM Linux est gelée. Solution, dans %UserProfile%\.wslconfig :

[wsl2]
vmIdleTimeout=-1

Ce qu'il faut retenir

Une commande, un QR code, et le téléphone devient un client Claude Code propre — sans bricolage SSH, sans Tailscale, et surtout avec le code qui reste sur la machine.

Le piège DISABLE_TELEMETRY donne une règle générale : sur Claude Code, dès qu'une feature payée ne marche pas, vérifier ses variables d'opt-out avant de blâmer le fournisseur. Pour un opt-out privacy minimal sans rien casser, DISABLE_ERROR_REPORTING + DISABLE_NON_ESSENTIAL_MODEL_CALLS + CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY couvrent l'essentiel sans toucher aux flags GrowthBook.

PartagerLinkedInXBluesky

Articles similaires