repoke

Referencia de comandos

Todos los comandos aceptan --help. Las listas de gestores o de paquetes van separadas por comas: --only brew,npm. Los ids de los gestores son los que imprime repoke list; los paquetes se escriben nombre o gestor:nombre (eslint, npm:eslint).

repoke list

Los gestores de paquetes que repoke admite en este sistema, si cada uno está instalado y en qué versión. Los plugins salen después de los gestores integrados.

Opción
--json Imprime JSON en vez de texto

repoke check

Lo que está desactualizado, por gestor, con la versión instalada y la última. No cambia nada. Los gestores se consultan a la vez.

Opción
--only <ids> Solo estos gestores
--exclude <ids> Salta estos gestores
--hold <paquetes> Deja fuera estos paquetes
--refresh Refresca antes los índices (brew update, o el refresh de un plugin)
--json Imprime JSON en vez de texto

Sale con 0 si todo está al día, con 100 si hay actualizaciones y con 1 si algún gestor no se ha podido consultar.

repoke upgrade

Actualiza lo que está desactualizado. En una terminal enseña una lista con todo marcado: la barra espaciadora marca o desmarca un paquete, la flecha derecha marca todo, la izquierda nada, y Escape cancela. Fuera de una terminal necesita --yes.

Opción
--only <ids> Solo estos gestores
--exclude <ids> Salta estos gestores
--package <paquetes> Solo estos paquetes
--hold <paquetes> No toca estos paquetes
--refresh Refresca antes los índices
-y, --yes Actualiza todo lo seleccionado sin preguntar
--dry-run Imprime los comandos que lanzaría, sin cambiar nada
--no-sudo Salta los gestores que necesitan root en vez de usar sudo
--json Imprime un evento JSON por línea

Los gestores van uno detrás de otro, cada uno con su indicador mostrando la última línea de su salida. Si un lote falla, sus paquetes se reintentan de uno en uno, para que un paquete problemático no frene al resto. Un gestor que necesita root se ejecuta con sudo -n; en una terminal, repoke pide la contraseña una vez, al principio. Los casks de Homebrew que instalan un .pkg o quitan servicios del sistema piden la contraseña por su cuenta, así que van en un lote aparte: en una terminal repoke la pide antes, con --yes solo se lanzan si sudo aún la recuerda, y con --no-sudo se saltan.

Los globales de npm y pnpm cuya nueva versión declara en engines.node un rango que no cumple el Node en uso se saltan, indicando qué versión necesitan, en vez de instalarse y luego no arrancar.

Solo puede haber un upgrade o un init a la vez: si ya hay uno en marcha, el segundo sale enseguida con 75.

Sale con 0 si se actualizó todo lo seleccionado, con 1 si algo falló, con 75 si había otra ejecución en marcha y con 130 si se canceló la lista.

repoke export

Guarda lo que cada gestor tiene instalado a propósito (sin dependencias) en una carpeta que otra máquina puede restaurar. En una terminal pregunta, gestor por gestor, si incluir sus ficheros de configuración.

Opción
--only <ids> Solo estos gestores
--exclude <ids> Salta estos gestores
-o, --output <carpeta> Dónde guardarla (por defecto, repoke-<equipo>-<fecha>)
--config Incluye la configuración de todos los gestores sin preguntar
--no-config Deja fuera toda la configuración
-y, --yes No pregunta nada: configuración solo con --config, y se quitan los valores que parecen secretos
--force Sustituye una foto que ya esté en la carpeta
--json Imprime JSON en vez de texto

La carpeta contiene repoke.toml, una línea por paquete (cask:firefox, eslint==10.13.0), y files/, con los ficheros de configuración en su ruta dentro de tu carpeta personal. Las líneas que parecen secretos (_authToken=…, password: …, claves privadas) se detectan antes de guardar: en una terminal eliges quitar sus valores, dejar el fichero fuera o guardarlo tal cual; sin terminal, los valores se quitan siempre. Un fichero de configuración que es un enlace a un repositorio git se apunta como parte de tus dotfiles en vez de copiarse.

repoke init

Prepara una máquina, a partir de una foto o de un catálogo de herramientas habituales.

Opción
--from <carpeta> Una foto escrita por repoke export
--tools <ids> Herramientas del catálogo que instalar sin la lista
--only <ids> Solo estos gestores
--exclude <ids> Salta estos gestores
-y, --yes Instala todo sin preguntar
--dry-run Enseña lo que instalaría y restauraría, sin cambiar nada
--no-sudo Salta los gestores que necesitan root
--no-config No restaura la configuración
--overwrite Sustituye sin preguntar los ficheros de configuración que difieren; antes guarda una copia de los tuyos
--json Imprime JSON en vez de texto

Con --from, los gestores que no existen en este sistema se saltan, solo se instala lo que falta y Homebrew va primero, porque a menudo instala los demás gestores. Si sigue faltando algún gestor, se ofrece instalarlo con Homebrew. Los ficheros de configuración que faltan se restauran, los iguales no se tocan y los que difieren se conservan salvo que elijas la copia de la foto; el tuyo se guarda como <fichero>.repoke-<fecha>.bak. Los valores quitados de los secretos se rellenan con los del fichero que ya hay en la máquina.

Sin --from, repoke ofrece un catálogo de herramientas (git, gh, ripgrep, fd, bat, fzf, neovim, VS Code…) e instala cada una con el primer gestor de la máquina que la tenga.

repoke schedule

Ejecuta repoke por su cuenta mediante el planificador del sistema: un agente de launchd en macOS, un temporizador de systemd de usuario en Linux y el Programador de tareas en Windows. Si la máquina estaba dormida o apagada a la hora prevista, la ejecución se hace al despertar o arrancar.

repoke schedule install

Registra la ejecución periódica, sustituyendo la anterior si la había.

Opción
--every <daily|weekly> Cada cuánto (por defecto, daily; weekly es los lunes)
--at <HH:MM> Hora local, en formato de 24 horas (por defecto, 03:00)
--check-only Solo consulta y avisa; no actualiza
--only <ids> Solo estos gestores
--exclude <ids> Salta estos gestores
--dry-run Imprime los ficheros y comandos del planificador, sin registrar nada

Por defecto, la tarea ejecuta repoke upgrade --yes --no-sudo. Los planificadores arrancan las tareas con un PATH mínimo, así que install guarda el tuyo (cambiando la carpeta por sesión de fnm por su alias default); vuelve a lanzarlo si cambias el PATH. Actualizar repoke no afecta a la programación: la tarea ejecuta el repoke de tu PATH, que Homebrew, cargo y self-update mantienen al día. Sin systemd, imprime la línea de crontab que hay que añadir.

repoke schedule status

Si hay una ejecución programada, cuándo, y cómo fue la última. Con --json, la imprime en JSON.

repoke schedule run

Lo que ejecuta el planificador, y una forma de probar la tarea en el momento. Guarda la salida de la última ejecución y un history.jsonl en ~/Library/Logs/repoke (~/.local/state/repoke en Linux, %LOCALAPPDATA%\repoke en Windows), y manda una notificación del sistema cuando se actualizó algo, algo falló o hay algo pendiente. El historial guarda las últimas 1000 ejecuciones.

repoke schedule remove

Quita la ejecución programada. Con --dry-run, imprime lo que quitaría.

repoke self-update

Actualiza repoke. Si lo instaló Homebrew o cargo, ejecuta brew upgrade repoke o cargo install repoke --locked; si no, descarga la release para tu sistema, comprueba su SHA-256 y sustituye el binario.

Opción
--check Solo dice si hay una versión más nueva; sale con 100 si la hay
-y, --yes Actualiza sin preguntar
--json Imprime JSON en vez de texto

En una terminal, repoke también avisa de una versión nueva, como mucho una vez al día. REPOKE_NO_UPDATE_CHECK=1 lo desactiva.

repoke mcp

Un servidor MCP por stdio, para que los agentes de IA usen repoke como herramienta. Tiene cuatro herramientas:

Herramienta Qué hace
list_managers Los gestores de la máquina y sus versiones
check_updates Lo que está desactualizado; admite only, exclude, hold y refresh
upgrade Actualiza; admite only, exclude, hold, packages y dry_run. Solo previsualiza salvo que dry_run sea false, y nunca usa sudo
schedule_status La programación y la última ejecución

En Claude Code, /plugin install repoke --marketplace paveldelpozo/repoke añade el servidor y una skill que le dice cuándo usarlo. En Codex, añade a ~/.codex/config.toml:

[mcp_servers.repoke]
command = "repoke"
args = ["mcp"]

repoke plugin

Gestores añadidos sin cambiar repoke: un fichero TOML en ~/.config/repoke/managers/ o un ejecutable repoke-<id> en tu PATH. Cómo escribir uno: la guía de plugins.

Comando
repoke plugin list [--json] Los plugins encontrados, y cualquier problema que tengan
repoke plugin new <id> [--exec] [-o <ruta>] Una plantilla para empezar: TOML por defecto, un script con --exec
repoke plugin search [--json] Los plugins oficiales
repoke plugin install <id> [-y] [--force] Descarga un plugin oficial, enseña su código y pregunta antes de instalarlo
repoke plugin remove <id> Quita un plugin que instaló plugin install

Configuración

~/.config/repoke/config.toml (%APPDATA%\repoke\config.toml en Windows, o el fichero de REPOKE_CONFIG):

exclude = ["mas"]                # gestores fuera salvo que los nombre --only
hold = ["eslint", "pnpm:pnpm"]   # nunca se actualizan ni se informan, como nombre o gestor:nombre
plugin_timeout = "10m"           # tiempo máximo de un comando de plugin (600, 90s, 10m, 1h; 0 = sin límite)

[brew]
greedy = true                    # también los casks que se actualizan solos
Variable
REPOKE_CONFIG Usa otro fichero de configuración
REPOKE_PLUGIN_TIMEOUT Sustituye a plugin_timeout en una ejecución
REPOKE_NO_PLUGINS Ignora todos los plugins en una ejecución
REPOKE_PLUGIN_INDEX Otro índice de plugins, una URL o un fichero local
REPOKE_NO_UPDATE_CHECK No avisa nunca de versiones nuevas de repoke
NO_COLOR Salida sin colores

Salida en JSON

check --json imprime un objeto por gestor: id, name, version, packages (cada uno con name, current y latest) y error.

upgrade --json e init --json imprimen un evento por línea, según ocurren:

Evento Cuándo
check_failed Un gestor no se ha podido consultar
running Empieza un comando
planned Con --dry-run, los comandos que se lanzarían
done Paquetes actualizados o instalados, con seconds
failed Paquetes que fallaron, con el error y a veces una pista (hint)
skipped Paquetes que se dejaron fuera, con el motivo (reason)
retrying Un lote falló y se reintenta paquete a paquete
config Solo init: qué pasó con un fichero de configuración
summary Totales, la duración de toda la ejecución (elapsed_seconds) y el desglose por gestor

Códigos de salida

Código Significado
0 Hecho, o todo está al día
100 check y self-update --check: hay algo que actualizar
1 Un gestor falló al consultar, actualizar o instalar
2 Argumentos o configuración no válidos, o falta --yes fuera de una terminal
75 upgrade e init: hay otro upgrade o init en marcha
130 Se canceló la lista interactiva

Esta página se genera a partir de docs/es/commands.md.