Registra CLI de IA en un servidor remoto

Si ejecutas Claude Code, Cursor CLI u otra herramienta de IA de línea de comandos en un servidor Linux remoto, la aplicación de escritorio de tu equipo no puede ver esas sesiones. Instala el agente headless en el servidor. Hace el seguimiento de las mismas herramientas de línea de comandos que la aplicación de escritorio (Claude Code, Cursor CLI, Codex CLI, Gemini CLI, OpenCode, Aider y Ollama), cada sesión en ejecución por separado, con su proyecto y si está trabajando o esperándote.

Instalar

curl -fsSL https://app.timeuno.io/install-agent.sh | bash

El script:

  • descarga el binario para tu CPU (x86_64 o arm64) en ~/.local/share/timeuno/bin/ y comprueba su checksum. Si minisign está instalado, también comprueba la firma de la versión;
  • lo enlaza como timeuno-agent en /usr/local/bin (o en ~/.local/bin si no puede escribir ahí);
  • añade un hook de shell para bash, zsh y fish que anota el nombre de cada comando que ejecutas (más detalles abajo);
  • configura un servicio de usuario de systemd y activa el lingering, para que el agente siga ejecutándose después de que cierres sesión.

Define TIMEUNO_NO_SERVICE=1 para omitir el servicio de systemd y TIMEUNO_NO_SHELL_HOOK=1 para omitir el hook de shell. Define TIMEUNO_REF con una etiqueta de versión (como agent-v0.2.0) para instalar una versión concreta.

Conectarlo

timeuno-agent pair

Esto muestra un enlace. Ábrelo en el navegador de tu propio equipo, no en el servidor, y aprueba la conexión. Consulta Conectar un dispositivo. Después:

systemctl --user start timeuno-agent

Qué sale de tu dispositivo

El agente envía los mismos datos que la aplicación de escritorio: cuándo empieza y termina cada sesión de IA, si está trabajando o esperando, el modelo, el número de tokens y el coste, y la carpeta del proyecto. Tus prompts nunca salen de tu dispositivo, que aquí es el servidor. Tampoco salen las respuestas de la IA, la salida de los comandos ni tu código.

Para que las líneas de tu hoja de horas digan en qué trabajaste, también envía estos detalles de las tareas:

  • el título que la propia herramienta de IA le dio a la sesión;
  • los asuntos de los commits que hizo la IA;
  • las rutas de los archivos que editó la IA, relativas a la carpeta del proyecto;
  • el tipo de tarea (corrección, desarrollo, pruebas, documentación…) y el área afectada (facturación, inicio de sesión…), elegidos en tu dispositivo de una lista fija, nunca con tus palabras;
  • desde el hook de shell, el nombre de cada comando que ejecutas, más su primera palabra en algunas herramientas como git, npm, make o docker (git push, docker compose), nunca el resto de la línea, y la carpeta donde lo ejecutas, con tu carpeta personal mostrada como ~.

Todo lo que en un título o en el asunto de un commit parezca una clave o un token se sustituye antes por [redacted]. Más información en Herramientas de IA.

Para dejar de enviar los detalles de las tareas, desactiva Configuración → Tus datos → Compartir detalles de las tareas. Los detalles ya guardados se eliminan. En su siguiente conexión, el agente deja de enviarlos y vacía el archivo del hook de shell con los comandos que aún no había enviado. El registro del tiempo continúa.

Hook de shell

Para cada shell que haya en el servidor (bash, zsh, fish), el instalador añade el hook: una línea al final de ~/.bashrc o ~/.zshrc que termina en # timeuno-shell-hook, y para fish un archivo en ~/.config/fish/conf.d/. Antes de cada comando, el hook escribe su nombre y su carpeta en un archivo que el agente envía. Solo se guarda el nombre del comando, más su primera palabra en algunas herramientas como git, npm, make o docker, nunca el resto de la línea: git commit -m "arreglar login" queda como git commit, y vim notas.txt como vim. Solo anota nombres que corresponden a un comando real, así que una línea mal escrita o un secreto pegado no se guardan. Mientras el agente no esté conectado o tu cuenta no comparta los detalles de las tareas, el hook no escribe nada.

  • Para omitirlo al instalar, define TIMEUNO_NO_SHELL_HOOK=1.
  • Para añadirlo más tarde, ejecuta timeuno-agent shell-hook install.
  • Para quitarlo, ejecuta timeuno-agent shell-hook remove. También elimina los comandos que aún no había enviado.
  • timeuno-agent status muestra, para bash, zsh y fish, si el hook está instalado, cuándo anotó el último comando y cuánto ocupa su archivo.

Comandos

ComandoQué hace
timeuno-agent pairConecta el agente a tu cuenta.
timeuno-agent statusMuestra la versión, si las actualizaciones son automáticas, qué herramientas de IA encontró y el estado del hook de shell en cada shell.
timeuno-agent shell-hook installAñade el hook de shell (el instalador lo hace por ti).
timeuno-agent shell-hook removeQuita el hook de shell.
timeuno-agent updateInstala ahora la versión más reciente.
timeuno-agent runEjecuta el agente en primer plano (el servicio lo hace por ti).
timeuno-agent versionMuestra la versión.

Actualizaciones

Cuando se ejecuta como servicio de systemd, el agente busca una versión nueva un par de minutos después de iniciarse y luego cada 6 horas. Verifica la firma, se reemplaza a sí mismo y se reinicia.

  • Después de timeuno-agent update, ejecuta systemctl --user restart timeuno-agent.
  • Para desactivar las actualizaciones automáticas, define "auto_update": false en ~/.config/timeuno/config.json, o define TIMEUNO_NO_AUTO_UPDATE=1 en el entorno del servicio.

Los agentes instalados desde la versión 0.1.0 no pueden actualizarse solos. Ejecuta el comando de instalación otra vez, una sola vez.

Si systemctl falla

Si systemctl --user dice Failed to connect to bus: Permission denied, define XDG_RUNTIME_DIR=/run/user/$(id -u) en esa shell y vuelve a intentarlo.