AI / ML 08 Październik 2026

Sé como Tony Stark con Claude Code: cómo me monté un entorno de programación remoto

También en:

Las ideas para cambiar el código no llegan solo cuando estoy sentado en mi escritorio. Llegan en el cine durante los anuncios, en el cumpleaños de un compañero de preescolar de mi hija, en una cola o durante un paseo. Hasta hace poco, todo eso acababa en una nota en el móvil.

Ahora es diferente. Saco el teléfono, escribo dos frases y un cambio empieza a hacerse en un servidor en Fráncfort antes de que terminen los anuncios. O simplemente hablo, y mi propio J.A.R.V.I.S. hace lo que le mando.

A continuación describo cómo lo monté y por qué esta forma de trabajar me ha resultado sorprendentemente cómoda.

Estado de la configuración: octubre de 2026.

Claude Code y sus funciones remotas evolucionan bastante rápido, así que algunos detalles de esta solución pueden cambiar con el tiempo.

Qué construí exactamente

El conjunto consta de tres elementos principales:

  • Un servidor en Oracle Cloud (región de Fráncfort), encendido las 24 horas, con mis repositorios y un conjunto completo de herramientas de compilación.
  • Claude Code ejecutándose en ese servidor en modo Remote Control, dentro de una sesión de tmux que vive independientemente de si estoy conectado o no.
  • La aplicación de Claude en el móvil, desde la que abro sesiones en ese servidor, encargo trabajo y respondo a las preguntas sobre permisos.

Lo más importante que hay que entender: el código no viaja al móvil ni a ningún entorno adicional en la nube. Claude Code funciona en mi servidor, sobre mis archivos, con mis herramientas. El móvil es solo un mando a distancia.

Un esquema simplificado:

             📱 Móvil
          app de Claude
                 │
                 │ Remote Control
                 ▼
        ☁️ Oracle Cloud / ARM
       ┌─────────────────────┐
       │ Ubuntu              │
       │                     │
       │ Claude Code         │
       │      │              │
       │     tmux            │
       │      │              │
       │ mis repositorios    │
       │      │              │
       │  tests / builds     │
       └─────────────────────┘

¿Cuánto cuesta?

En mi configuración:

  • servidor de Oracle Cloud: 0 PLN — uso el plan Always Free,
  • Tailscale: 0 PLN,
  • herramientas adicionales del sistema: 0 PLN,
  • Claude: el coste de mi suscripción.

Es decir, el servidor en sí no me genera ningún coste adicional. La limitación más importante no es, por tanto, el precio de la máquina, sino lo que quiero ejecutar en ella y cuánto trabajo delego en el agente.

El servidor: ARM en Oracle Cloud

La máquina es una instancia ARM (Ampere): 4 núcleos, 24 GB de RAM. Para compilar, hacer pruebas y ejecutar varias sesiones del agente en paralelo es más que suficiente.

Lo mejor es empezar por poner orden. Oracle ofrece un usuario predeterminado ubuntu, así que conviene crear enseguida tu propia cuenta.

sudo adduser tu_usuario
sudo usermod -aG sudo tu_usuario

Tras iniciar sesión en la nueva cuenta, moví las claves SSH y eliminé la cuenta predeterminada:

mkdir ~/.ssh && chmod 700 ~/.ssh
sudo cp /home/ubuntu/.ssh/authorized_keys ~/.ssh/authorized_keys
sudo chown -R $USER:$USER ~/.ssh && chmod 600 ~/.ssh/authorized_keys
sudo pkill -u ubuntu
sudo userdel -r ubuntu

Y un conjunto básico de paquetes:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git tmux

Por supuesto, esto no es una guía completa para asegurar un servidor. Es simplemente el mínimo que preparé para este entorno.

Tailscale como entrada de emergencia

El servidor se unió a mi tailnet, del que ya escribí en el artículo [[tailscale-prywatna-siec-mesh-bez-konfiguracji-czyli-vpn-jakiego-potrzebowalem]]:

curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscale up

Gracias a esto, desde el portátil y desde el móvil tengo SSH al servidor por nombre de host, sin tener que recordar una dirección IP pública.

Sin embargo, Tailscale no es necesario para controlar Claude Code desde el móvil. Remote Control funciona a través de la conexión con los servicios de Anthropic. En mi caso, Tailscale sirve sobre todo como entrada de emergencia a la máquina: cuando hay que arreglar algo a mano, reiniciar una sesión o simplemente comprobar qué ocurre en el servidor.

Instalación de Claude Code

La instalación es sencilla:

curl -fsSL https://claude.ai/install.sh | bash
claude login

El instalador nativo no requiere Node.js ni sudo. El binario va al directorio personal (~/.local/bin/claude) y se actualiza solo.

claude login muestra un enlace de autorización. Lo abro en el navegador de cualquier dispositivo e inicio sesión con la misma cuenta que uso en la aplicación del móvil. Esa cuenta es la que une después ambas partes.

Repositorios

Descargué en la máquina mis repositorios privados, de modo que puedo ponerme a trabajar enseguida en los proyectos en los que estuve trabajando últimamente.

Eso sí, no es una limitación. Con la misma rapidez puedo pedirle al agente que cree un repositorio a partir de una idea nueva. Aun así, es bueno tener una referencia de mi propio código:

«Hazlo de forma parecida a como lo hice en el repositorio xyz».

Entonces el agente dispone no solo de una descripción de lo que quiero conseguir, sino también de mi forma habitual de organizar el código.

Remote Control en tmux

Este es el núcleo de toda la configuración.

Claude Code tiene un modo Remote Control, en el que la instalación local se registra en mi cuenta y espera órdenes desde claude.ai/code o desde la aplicación móvil.

Lo ejecuto en tmux:

tmux new -s claude-session
claude remote-control

La forma corta es:

claude rc

Después me desconecto de tmux (Ctrl+b, d) y cierro sesión en el servidor. El proceso se queda.

Cuando quiero echar un vistazo a lo que ocurre:

tmux attach -t claude-session

En este modo, Claude Code funciona como un pequeño servidor de sesiones. Cada tarea encargada desde el móvil inicia una sesión independiente en la máquina, así que puedo llevar varios hilos a la vez: por ejemplo, uno desde la app móvil y otro en un controlador para ESP.

Por defecto, las sesiones trabajan en el mismo directorio. También existe el modo --spawn worktree, en el que cada una recibe su propio git worktree y los cambios paralelos en un mismo repositorio no se estorban.

Dos cosas que me gustan especialmente

Ningún puerto abierto.

El propio servidor establece una conexión saliente hacia Anthropic, y el móvil se conecta a la misma cuenta. No expongo nada al mundo, no configuro redirecciones de puertos ni certificados.

Las decisiones se quedan conmigo.

Cuando Claude quiere ejecutar un comando o modificar un archivo y no tiene un permiso permanente para ello, la pregunta llega a mi móvil. Leo lo que pretende hacer y lo apruebo o lo rechazo. El alcance de esta libertad se define con el modo de permisos (--permission-mode).

Esto es importante para mí porque el agente tiene acceso a mi código y puede hacer trabajo real en la máquina. Por eso no quiero aprobarlo todo automáticamente.

Cómo se ve desde el móvil

En la aplicación de Claude entro en la pestaña Code y veo mi servidor en la lista. Abro una sesión nueva y escribo o dicto lo que hay que hacer.

Por ejemplo:

«En el repositorio xyz, añade la generación automática del slug a partir del título al editar entradas existentes, ejecuta los tests y enséñame el diff».

A partir de ahí, todo ocurre en el servidor: leer el código, hacer cambios, pasar los tests. Yo recibo un resumen y, por el camino, preguntas que requieren una decisión.

Si el resultado me convence, pido el commit y el push. Si no, añado una frase de corrección.

La pantalla del móvil no sirve para escribir código, pero es muy buena para leer un diff corto y responder «sí, pero ponle otro nombre».

El trabajo pasa de escribir a decidir.

Y se puede decidir en tres minutos entre tráileres, durante un paseo o en una cola. No hace falta sentarse delante del ordenador.

Sorpresa: Flutter en ARM

Uno de mis repositorios es una aplicación en Flutter y quería que el servidor pudiera generar el APK.

Aquí me encontré con el único problema serio: las herramientas del SDK de Android (aapt2, adb, zipalign) existen solo en versión x86_64, y el servidor es ARM.

La solución fue la emulación mediante qemu-user registrado en binfmt_misc. El sistema reconoce por sí mismo los binarios x86_64 y los ejecuta a través del emulador:

sudo apt-get install -y qemu-user qemu-user-binfmt binfmt-support   libc6-amd64-cross libstdc++6-amd64-cross zlib1g-dev libncurses6

sudo mkdir -p /etc/qemu-binfmt
sudo ln -sfn /usr/x86_64-linux-gnu /etc/qemu-binfmt/x86_64
sudo systemctl restart systemd-binfmt

Tras esta operación, flutter doctor dejó de quejarse y el servidor compila el APK.

Debo añadir que a esta solución llegó el propio Claude Code. Reunió los paquetes que requerían sudo en un solo script, que leí y ejecuté manualmente.

Este reparto me conviene: el agente puede buscar soluciones y preparar cambios, pero los privilegios de root se quedan de mi lado.

Python y uv

Para los proyectos de Python instalé además [[uv-szybki-menedzer-pakietow-i-srodowisk-pythona-samouczek]]:

curl -LsSf https://astral.sh/uv/install.sh | sh

Es un detalle menor, pero gracias a él el servidor está preparado no solo para mis repositorios actuales, sino también para empezar rápidamente el próximo proyecto.

A qué hay que prestar atención

Acceso a los repositorios

Si el servidor tiene una clave para los repositorios, quien consiga acceso al servidor puede obtener también acceso al código.

Por eso uso un usuario propio, inicio de sesión con clave SSH y una clave distinta para el repositorio remoto, que en caso necesario se puede revocar rápidamente.

Permisos del agente

Aprobar operaciones desde el móvil es cómodo, pero es muy fácil caer en la trampa de pulsar «sí» sin pensar.

Sobre todo en el cine.

Prefiero permisos más estrechos y algunas preguntas más antes que dar plena libertad al agente en una máquina con mi código.

Reinicio del servidor

La sesión de tmux no sobrevive a un reinicio de la máquina. Tras reiniciar, hay que entrar por SSH y volver a lanzar claude rc.

A la larga conviene envolverlo en un servicio de systemd. Por ahora no me resulta lo bastante molesto como para que sea una prioridad.

¿Cuándo tiene sentido?

Esta forma de trabajar tiene sentido para mí sobre todo cuando:

  • tienes proyectos e ideas propios que llegan fuera de las horas frente al ordenador,
  • quieres que las tareas largas —tests, compilaciones o migraciones— se hagan sin tu portátil,
  • trabajas en varios dispositivos y quieres tener un único entorno estable en lugar de sincronizar varios,
  • usas un agente de programación al que puedes delegar tareas más grandes.

Si programas solo en tu escritorio y el portátil está siempre encendido de todos modos, la ganancia será pequeña.

En ese caso, quizá Remote Control te sirva, como mucho, para aprobar las acciones del agente desde el baño. ;)

Resumen

Toda la configuración me llevó una tarde: servidor, usuario, Tailscale, Claude Code, clave de los repositorios y claude rc en tmux.

Técnicamente no es nada especialmente complicado. El mayor cambio, sin embargo, está en la forma de trabajar.

Una idea ya no tiene que esperar hasta la noche.

La encargo de inmediato y por la noche me siento ante un cambio ya hecho que solo hay que revisar. La primera vez que aprobé un commit lejos del escritorio se me hizo algo raro. Ahora lo trato como una forma normal de trabajar.

El móvil ha dejado de ser solo un lugar donde apuntar ideas. Se ha convertido en el mando a distancia de mi entorno de programación.


Fuentes y lecturas adicionales

  1. Claude Code — documentación: https://code.claude.com/docs
  2. Oracle Cloud Infrastructure: https://www.oracle.com/cloud/
  3. Tailscale — documentación: https://tailscale.com/kb
  4. tmux: https://github.com/tmux/tmux/wiki
  5. Flutter — instalación en Linux: https://docs.flutter.dev/get-started/install/linux