Qué es Once y por qué existe
Once es una utilidad CLI escrita en Go que ejecuta un comando una vez, guarda su salida en un pequeño daemon en memoria por usuario y la reutiliza mientras el resultado no expire. Su autor, Alex Petrov (alex0ptr), la publicó en GitHub como un proyecto open source bajo licencia MIT. En el momento de lanzamiento, el repositorio cuenta con 37 estrellas y 5 commits, lo que confirma que se trata de una herramienta temprana, pero ya funcional y con una propuesta de valor muy concreta.
El caso de uso que el propio repositorio menciona es uno que cualquier desarrollador reconoce: leer secretos desde 1Password sin tener que aprobar cada lectura con el fingerprint. La idea es simple: la primera llamada te pide autenticación biométrica, y todas las llamadas siguientes dentro de la ventana de caché (por ejemplo 8 horas) devuelven el valor cacheado, sin volver a pedirte la huella.
export GITHUB_TOKEN="$(once --ttl 8h --no-dir -- op read op://Private/GitHub/token)"
El comando de arriba sustituye el prompt constante de 1Password por una única verificación al día. Para founders y equipos de ingeniería que ejecutan docenas de scripts contra secretos cada hora, el ahorro de fricción es inmediato.
¿Y esto cómo se aplica en tu negocio?
En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.
👥 Probar 7 díasCómo funciona la caché de Once
La mecánica interna es elegante y deliberadamente minimalista. Cuando ejecutas once --ttl 8h -- comando:
- El cliente calcula una clave de caché HMAC-SHA256 a partir del tenant key, el directorio de trabajo y el comando con sus argumentos.
- Consulta al daemon local a través de un Unix socket.
- Si hay coincidencia (cache hit), imprime el valor cacheado y termina.
- Si no hay coincidencia (cache miss), ejecuta el comando, captura solo su
stdouty, si termina con código 0, lo entrega al daemon junto con la fecha de expiración.
El daemon vive en $XDG_RUNTIME_DIR/once-<uid>/ (o en el directorio temporal si esa variable no existe), dentro de una carpeta con permisos 0700 y un socket con permisos 0600. Eso significa que otros usuarios del sistema no pueden conectarse al socket, aunque los procesos del mismo usuario sí pueden. Es una decisión consciente: la caché no es una frontera de seguridad, es una herramienta de productividad.
El daemon solo guarda valores en memoria, los sobrescribe antes de liberarlos (en el mejor de los casos) y desactiva los core dumps (RLIMIT_CORE 0 y PR_SET_DUMPABLE 0 en Linux) para que los secretos no terminen en un archivo de volcado.
Opciones que importan
Once expone cinco flags clave y tres subcomandos. Vale la pena entenderlos porque cambian completamente el comportamiento:
--ttl DURATION: cuánto tiempo vive la entrada (30m,1h,24h). Es obligatorio.--until TIME: un tope absoluto. La entrada expira al primero que llegue entre--ttly--until. Acepta formatos como2026-10-09T06:00:00+02:00o2026-10-09T22:00(hora local).--tenant KEY: un namespace para separar contextos de caché. Por defecto lee$ONCE_TENANT; el patrón recomendado es${ONCE_TENANT:-$(uuidgen)}en.zshrc, que da un tenant único por terminal y permite que subshells hereden la misma caché.--refresh: ignora la caché, ejecuta el comando y sobrescribe el valor guardado.--no-dir: excluye el directorio de trabajo de la clave de caché. Imprescindible para comandos cuyo output no depende del directorio, comoop read. Si lo usas, una misma entrada sirve para todos tus directorios.
Los subcomandos once status (muestra entradas y cuándo se apagará el daemon) y once clear (borra todo y detiene el daemon) cierran el círculo de operación.
Por qué importa para developers y startups
La fricción con secretos es uno de los costes ocultos más caros del día a día de un equipo técnico. Cada prompt de 1Password, cada export manual de un token, cada vez que un script aborta porque la variable expiró, son minutos muertos que se multiplican. 1Password lanzó en 2023 sus Shell Plugins precisamente con esa motivación: permitir a los desarrolladores «iniciar sesión en cualquier CLI con un fingerprint» y mantener las API keys en bóvedas cifradas, según reportó SD Times al presentar la funcionalidad.
Once encaja exactamente en ese hueco. Donde 1Password resuelve el almacenamiento y la autenticación, Once resuelve la capa de caché programática: deja que tu .zshrc, tu direnv o tu mise.local.toml pidan el secreto una vez al día y lo reutilicen durante horas sin volver a tocar la biometría.
Para un founder técnico el ahorro se nota en tres planos:
- Productividad personal: dejas de autorizar lecturas cada vez que un script se reinicia.
- Pipelines locales:
miseodirenvpueden precargar tokens al abrir un proyecto sin que se rompan al segundo script. - Onboarding: un nuevo dev clona el repo, define su
ONCE_TENANTy empieza a trabajar con secretos sin que nadie le pase un token por Slack.
Cómo se compara con otras soluciones
Antes de instalar Once conviene entender dónde se ubica en el ecosistema de gestión de secretos en terminales:
- 1Password CLI + Shell Plugins: cubre la autenticación y el almacenamiento, pero no cachea. Once se puede poner delante del CLI de 1Password como capa de caché.
- direnv / mise: gestionan variables de entorno por directorio, pero cada vez que recargan vuelven a invocar el comando fuente. Once reduce esa invocación a una por TTL.
- chaves o pass con gpg-agent:igualmente cubren almacenamiento, pero la fricción del prompt de GPG es comparable a la del fingerprint de 1Password. Once las puede envolver igual.
- Vault, AWS Secrets Manager, Doppler: son soluciones centralizadas para infraestructura, no para flujo de trabajo local de developer.
Once no reemplaza a ninguna de estas: se monta encima para reducir la cantidad de veces que el desarrollador tiene que autenticarse.
Cómo empezar a usarlo
La instalación es una línea, sin dependencias más allá de la librería estándar de Go 1.27+:
go install github.com/alex0ptr/once@latest
Funciona en macOS y Linux. Una vez instalado, el flujo recomendado es:
- Añade a tu
~/.zshrc(o~/.bashrc):
export ONCE_TENANT="${ONCE_TENANT:-$(uuidgen)}"
- En tu proyecto, crea o edita un
mise.local.tomlcon algo como:
[env]
ONCE_TENANT = "5D0F399A-5091-43F1-9C43-7C5A2377D90D"
TOKEN = "{{ exec(command='once --ttl 12h --no-dir -- op read op://Private/something/token') }}"
- Ejecuta
once statuspara ver qué hay cacheado y cuándo se apagará el daemon. - Si algo va mal,
once clearborra todo y reinicia el daemon.
Limitaciones que debes conocer
Once es deliberadamente pequeño, y eso tiene consecuencias:
- Outputs mayores a 64 MiB no se cachean, solo se pasan.
- No hay cifrado en reposo en memoria (más allá de los permisos del proceso). Si tu máquina entra en suspensión con el daemon vivo, los secretos siguen en RAM hasta que expiren.
- El
--tenantaparece en la lista de procesos (ps), así que no lo trates como secreto. - Los procesos de tu mismo usuario pueden leer la caché. No es un bug, es una decisión de diseño, pero conviene tenerla presente en máquinas compartidas.
- Está en una fase temprana: pocas estrellas, pocos commits, una sola persona detrás. Úsalo, pero no lo pongas como pieza crítica de producción sin revisarlo.
Qué significa esto para tu startup
Once no es una herramienta de IA ni un framework revolucionario. Es un multiplicador de productividad de bajo riesgo que ataca un punto de fricción muy concreto: la cantidad de veces al día que un developer se autentica para leer un secreto. Para equipos pequeños, donde cada hora de foco cuenta, ese tipo de optimización es lo que separa una jornada de deep work de una jornada llena de interrupciones.
Tres acciones concretas que puedes implementar hoy:
- Audita cuántas veces al día tu equipo aprueba prompts de 1Password o GPG. Si la respuesta es más de cinco, Once tiene sentido.
- Estandariza un
ONCE_TENANTpor entorno (terminal, proyecto, CI) y documéntalo en el README de cada repo. Así el onboarding deja de depender de Slack. - Combínalo con
miseodirenvpara que la caché se recargue sola al cambiar de directorio, y limita la superficie con--untilpara que ningún secreto viva más de lo necesario.
Si tu stack ya vive en 1Password, AWS Secrets Manager o Doppler, Once no compite con ellos: los hace más usables. Y eso, en una startup donde el tiempo del fundador técnico es el recurso más escaso, se nota.
Fuentes
- Once: cachea comandos CLI en un daemon local (GitHub)
- 1Password introduces new tools to secure development life cycle (SD Times)
¿Y esto cómo se aplica en tu negocio?
En CAR, dueños de empresa de Latinoamérica y España usan la tecnología para ser más rentables. Empiezas con una ruta de 7 días y terminas con un sistema funcionando en tu negocio.
👥 Probar 7 días













