ohbin es una herramienta de línea de comandos diseñada para resolver un problema habitual en proyectos Python gestionados con uv: la instalación de binarios distribuidos exclusivamente como GitHub Releases, como ripgrep, oasdiff o linters escritos en Rust. uv solo puede instalar paquetes Python, por lo que distribuir estas dependencias obligaba a mantener paquetes envoltorio artesanales en cada repositorio o a pedir a cada desarrollador que instalase los binarios manualmente, con el riesgo de versiones divergentes y roturas en CI.
ohbin elimina esa duplicación: se instala como una única dev-dependency y permite declarar cada herramienta en pyproject.toml indicando su repositorio, versión, binario y, por plataforma, el asset correspondiente y su SHA256. Al ejecutar ohbin run <herramienta>, el motor descarga el binario la primera vez, verifica su hash, lo almacena en caché por host y lo ejecuta sustituyendo el proceso actual (os.execv), de modo que la herramienta conserva stdin/stdout, señales y código de salida. Entre ejecuciones posteriores se reutiliza la caché, ubicada en $XDG_CACHE_HOME/ohbin/<herramienta>/<versión>/<binario>, lo que evita colisiones al cambiar de versión. La primera descarga se realiza bajo flock, lo que permite su uso seguro en CI paralelizado, por ejemplo con pytest-xdist.
El comando ohbin add resuelve el release desde la API de GitHub, o mediante el CLI gh cuando está disponible y autenticado, selecciona el asset por plataforma, calcula o lee el SHA256 y escribe la entrada en pyproject.toml conservando el formato y los comentarios gracias a tomlkit. La verificación de integridad se realiza antes de extraer el archivo, de modo que un hash incorrecto aborta la operación sin dejar archivos parciales. Todas las peticiones de red usan reintentos con backoff exponencial, y un 404 real nunca se confunde con un fallo transitorio.
Para casos donde el binario no puede publicarse en un repositorio abierto, como linters propietarios, CLIs internos o binarios con código fuente cerrado, ohbin ofrece publish-gist y add-gist: el binario se comprime con gzip, se cifra con AES-256-CBC y PBKDF2 (200.000 iteraciones) mediante openssl, y el resultado se almacena en un gist no listado protegido por enlace. El enlace por sí solo no sirve sin la contraseña, que se pasa al ejecutar la herramienta y nunca aparece en argv, ya que se envía a openssl mediante descriptor de archivo. Para revocar el acceso basta con borrar el gist o rotar la contraseña.
Como limitaciones operativas, add-gist requiere tener el CLI gh y openssl en PATH, y la contraseña debe facilitarse en cada ejecución si no se almacena en el manifiesto. La herramienta se instala con uv add --dev git+https://github.com/prostomarkeloff/ohbin.git y expone además una API Python (from ohbin import ensure) para integraciones programáticas que necesiten únicamente la ruta del binario.
