SDK
Instala el SDK de Miblo (TypeScript y Python) y obtén un token
Instala @miblo/status o miblo-status, obtén el token con miblo sdk token, ejecuta tu primer programa y deja que Miblo lo ejecute por ti con miblo apps add.
Antes de empezar
Miblo 1.30.0 o más nuevo instalado en el computador (con Miblo Hub o la línea de comandos), con el comando
mibloen tu terminal. Verifícalo conmiblo sdk status;miblo updatetrae el más nuevo. Un Miblo en tu escritorio también necesita 1.30.0 o más nuevo (el computador lo actualiza).Node.js 20+ para el paquete de TypeScript, o Python 3.9+ para el paquete de Python.
Tener un Miblo en tu escritorio es opcional. Sin ningún dispositivo emparejado todo funciona, y las acciones responden
delivered: 0, que no es un error: las sesiones igual aparecen en Miblo Hub y en Miblo Remote.
Instala el paquete
Los paquetes vienen solo de miblo.ai, versión 2.3.0. No están en npm ni en PyPI: instálalos directo desde la dirección. ¿Vienes de un SDK 1.x? Instala este encima: Miblo 1.30.0 y más nuevos rechazan el 1.x (upgrade). Para actualizar un SDK 2.x, instala el paquete de nuevo desde la misma dirección; lo que trajo cada versión está en Novedades del SDK.
TypeScript / Node.js
@miblo/status: ESM, con tipos (index.d.ts), sin dependencias.
npm install https://miblo.ai/dl/sdk/miblo-status-2.3.0.tgzPython
miblo-status: solo biblioteca estándar.
python3 -m venv .venv && . .venv/bin/activate # a Python from Homebrew or a Linux distribution refuses a global pip install
pip install https://miblo.ai/dl/sdk/miblo_status-2.3.0-py3-none-any.whlVerifica la descarga
Cada archivo tiene su firma Ed25519 al lado (el mismo nombre con .sig), hecha con la clave de las actualizaciones de Miblo (clave pública LGtuUvDA506N8iD1tolbQzWAJBb9hUerW0OH4C2pBek=), y el SHA256SUMS firmado lista todas las versiones. Primero el checksum, luego la firma (solo Node, sin otra herramienta):
curl -fLO https://miblo.ai/dl/sdk/miblo-status-2.3.0.tgz
curl -fsSL https://miblo.ai/dl/sdk/SHA256SUMS | shasum -a 256 -c --ignore-missing
curl -fLO https://miblo.ai/dl/sdk/miblo-status-2.3.0.tgz.sig
node -e 'const c=require("crypto"),fs=require("fs"),f=process.argv[1];const k=c.createPublicKey({key:{kty:"OKP",crv:"Ed25519",x:Buffer.from("LGtuUvDA506N8iD1tolbQzWAJBb9hUerW0OH4C2pBek=","base64").toString("base64url")},format:"jwk"});console.log(c.verify(null,fs.readFileSync(f),k,Buffer.from(fs.readFileSync(f+".sig","utf8").trim(),"base64"))?"signature ok":"BAD signature")' "$(basename https://miblo.ai/dl/sdk/miblo-status-2.3.0.tgz)"El token
La Status API está apagada hasta que crees su token. En tu propia terminal:
export MIBLO_TOKEN=$(miblo sdk token) # turns the API on; the token goes into the variable, not on screen¿Prefieres no usar la terminal? En Miblo Hub → Programas (SDK) activas la API, copias el token y lo reemplazas.
Los paquetes leen el token de
MIBLO_TOKEN(o lo reciben como parámetro:new MibloStatus({ token }),MibloStatus(token=...)). Entrégale el token a tu programa a propósito; un programa no debería ir a buscar los archivos de Miblo.miblo sdk token --rotatereemplaza el token (e imprime el nuevo): quien tuviera el anterior es rechazado desde ese momento (not_authorised), y tus herramientas de IA, la CLI y Miblo Remote no se ven afectados. Los programas que Miblo ejecuta por ti (abajo) reciben el token nuevo cuando vuelven a iniciarse.miblo sdk offelimina el token y apaga la API (sdk_off).miblo sdk statusdice si está encendida y dónde está el archivo.El puente debe estar corriendo. Tus herramientas de IA lo inician, y también
miblo sdk start.
Primer programa
Diez líneas: el programa aparece como una sesión, trabaja, dice que te necesita y termina.
// first.mjs, in the folder where you ran npm install; run: node first.mjs
import { MibloStatus } from '@miblo/status';
const miblo = new MibloStatus(); // reads MIBLO_TOKEN
const job = await miblo.session({ tool: 'first.mjs', title: 'Deploy', detail: 'building' });
await new Promise((r) => setTimeout(r, 5000)); // ...your work...
await job.needsYou('confirm the deploy'); // Miblo alerts
await new Promise((r) => setTimeout(r, 10000));
await job.done('deployed');# first.py, with the .venv active; run: python3 first.py
import time
from miblo_status import MibloStatus
miblo = MibloStatus() # reads MIBLO_TOKEN
job = miblo.session("first.py", title="Deploy", detail="building")
time.sleep(5) # ...your work...
job.needs_you("confirm the deploy") # Miblo alerts
time.sleep(10)
job.done("deployed")Lo que pasa:
session()registra la sesión Deploy en el Miblo Desk, en Miblo Hub y en Miblo Remote, con la líneafirst.mjs · building.needsYou()la pasa a te necesita: el Miblo Desk da la alerta de pregunta y el contador de "te necesita" sube. En Miblo Remote, la sesión aparece como Otra herramienta: first.mjs.done()la muestra como terminada, con la alerta de terminado. Cuando el proceso termina, la sesión se va sola (el paquete envía elpidde su propio proceso).
Deja que Miblo ejecute tu programa
Para un programa que está siempre encendido (una app de pantalla, un vigilante), deja que el supervisor de Miblo lo cuide. En tu propia terminal (un agente de IA no puede hacerlo por ti):
miblo apps add "node steps.mjs" --cwd ~/code/steps --id steps
miblo apps enable steps # starts it now and every time Miblo starts
miblo apps logs steps # what the program printedMiblo inicia el programa con
MIBLO_TOKEN,MIBLO_PORTyMIBLO_APP_ID(el id de la app), másMIBLO_LANG(ptoen) y lo básico del sistema (PATH, HOME, idioma, zona horaria, proxy). Nada más de tu entorno se va con él: las claves de tu shell nunca llegan al programa.Sin
--id, el id sale del nombre del archivo (steps.mjs→steps); cuando ese id está tomado, Miblo agrega-2,-3... (miblo apps addimprime el id que eligió). Usa el mismo id que el programa declara enapp.declare(). Sin--cwd, corre en la carpeta desde la que lo agregaste.Si el programa termina, Miblo lo inicia de nuevo tras 2 s, 10 s, 30 s, 2 min y luego cada 10 min; un programa que se mantuvo encendido un minuto cuenta como sano y reinicia las esperas. Mientras una app está encendida, el puente se mantiene arriba.
El log conserva los últimos 256 KB, y como máximo 64 KB cada 10 segundos (el resto se descarta, con una línea que lo dice).
miblo apps show <id>muestra su estado y cuántas veces se reinició;miblo apps disable <id>la apaga;miblo apps remove <id>la apaga, le quita la pantalla y olvida el programa y sus ajustes.miblo apps listlas muestra todas (las oficiales, las tuyas y las de la comunidad). En Miblo Hub, la pestaña Apps del Desk hace lo mismo con un interruptor por app.
Empieza una app: dos caminos
Para una app de la tienda (una pantalla, o alertas que la gente activa con un clic), parte de la plantilla lista y mírala en el simulador, con o sin un Miblo en tu escritorio:
Con Miblo instalado:
miblo apps new "My App" --page(la app del Desk de página de Miblo 1.45, la forma por defecto; sin--pagela plantilla es la antigua, de tarjeta), luegomiblo apps dev my-app(la pantalla en tu navegador, recargada en cada guardado) ymiblo apps check my-app(las reglas de la tienda de apps del Desk).Sin Miblo: descarga el starter https://miblo.ai/dl/extras/miblo-app-starter-1.46.2.zip y usa
node sim.mjs new | dev | check(Node 22.15+, 23.5+ o 24+; en otro Node, apuntaMIBLO_NODEa uno adecuado).
Los detalles están en Desarrollar sin un Miblo.
Cuando algo sale mal
Cada error es un MibloError con un code estable. Los que te encuentras al configurar:
code | Qué significa | Qué hacer |
|---|---|---|
upgrade | Este SDK es más antiguo de lo que Miblo acepta (un SDK 1.x en Miblo 1.30.0 o más nuevo) | Instala el SDK de arriba (2.3.0) |
bridge_outdated | Miblo en el computador es más antiguo que este SDK | miblo update |
no_token | No hay token en MIBLO_TOKEN ni en el parámetro | export MIBLO_TOKEN=$(miblo sdk token) |
sdk_off | La API está apagada en este computador | miblo sdk token |
bridge_unavailable | Nada responde en el puerto de Miblo | miblo sdk start (o abre una herramienta de IA) |
not_authorised | Token incorrecto o rotado, o un Miblo de antes de que existiera el SDK | Obtén el token de nuevo; actualiza Miblo |
unverified_answer | La respuesta no estaba firmada por Miblo | Algo tomó el puerto de Miblo: reinicia el puente |
timeout | El puente no respondió a tiempo | Inténtalo de nuevo; revisa miblo status |
Los demás códigos están en Sesiones y estado y La pantalla de apps.