Widget desktop para macOS, Windows y Ubuntu que muestra el uso disponible de Codex, Claude Code y Gemini usando sus CLIs locales.
- Licencia: MIT
- Autor: Elisardo González Agulla
- Stack: Tauri + TypeScript + backend Node local
El repositorio queda preparado para publicarse con:
README.mdLICENSE.gitignore.gitattributesCONTRIBUTING.mdSECURITY.md- plantillas basicas de issues y pull request en
.github/ - workflows de CI y release en
.github/workflows/
- macOS, Windows o Ubuntu
- Node.js 20 o superior
- Rust y Cargo para compilar Tauri
- CLI
codex,claudey/ogeminiinstaladas si se quieren ver datos reales
Node.js es necesario en los tres sistemas operativos soportados porque la app usa un backend local en Node para detectar CLIs, lanzar procesos auxiliares y parsear la salida de codex, claude y gemini.
Los imports como node:fs, node:path o node:child_process son modulos nativos incluidos en Node.js. No son paquetes de npm y por eso no aparecen en node_modules.
Instalacion recomendada:
- Windows: instalar Node.js 20+ desde el instalador oficial o mediante
winget. - macOS: instalar Node.js 20+ mediante Homebrew, Volta, nvm o el instalador oficial.
- Ubuntu: instalar Node.js 20+ desde NodeSource, nvm o el gestor de paquetes que garantice una version 20 o superior.
La app resuelve el binario node siguiendo una politica comun:
MONITORAI_NODE_BIN, si esta definido.- runtime empaquetado junto a la app, si existe.
nodeonodejsdisponible enPATH.- rutas habituales del sistema.
Si la app empaquetada no encuentra Node, define MONITORAI_NODE_BIN con la ruta absoluta del binario:
MONITORAI_NODE_BIN=/usr/bin/node ./AI-Usage-Widget.AppImageEn Ubuntu, instala ademas las dependencias habituales de Tauri/WebKitGTK:
sudo apt update
sudo apt install -y \
libwebkit2gtk-4.1-dev \
build-essential \
curl \
wget \
file \
libxdo-dev \
libssl-dev \
libayatana-appindicator3-dev \
librsvg2-devEn macOS la app puede arrancar desde Finder/Dock con un PATH distinto al de la terminal. El backend anade rutas habituales de Homebrew, MacPorts, npm global, ~/.local/bin, Cargo, nvm, Volta y asdf antes de detectar o lanzar CLIs.
Si Node no esta en una ruta del sistema, define MONITORAI_NODE_BIN con la ruta absoluta del binario node.
npm ciUsa npm install solo cuando vayas a actualizar dependencias y regenerar package-lock.json.
npm run tauri:devLa ventana se abre como widget flotante, sin bordes y siempre visible.
En Windows la transparencia del widget es un objetivo razonable. En Linux no debe asumirse transparencia real: Tauri depende de WebKitGTK y el resultado final tambien depende del compositor y del entorno grafico. El fallback soportado en Linux es un panel oscuro estable y legible.
npm test
npm run build
cargo check --manifest-path src-tauri/Cargo.tomlEl build local genera bundles para la plataforma actual. No es una estrategia de cross-compilacion completa.
npm run tauri:buildEl ejecutable se genera bajo src-tauri/target/release/bundle.
No distribuyas solo el .exe suelto movido a otra carpeta. La app necesita recursos empaquetados junto al bundle, incluyendo el backend Node y node-pty. Para uso normal instala desde el .msi o el instalador NSIS generado por Tauri.
npm run tauri:buildEn Ubuntu el bundle saldra bajo src-tauri/target/release/bundle, normalmente como .deb y/o AppImage segun tu entorno.
npm run tauri:buildEn macOS el bundle saldra bajo src-tauri/target/release/bundle, normalmente como .app y/o .dmg segun tu entorno.
Los instaladores deben generarse en sistemas nativos o en runners CI equivalentes:
- Windows:
windows-latest - Ubuntu:
ubuntu-latest - macOS:
macos-latest
El workflow de release se dispara con tags v* y sube los bundles generados por Tauri a GitHub Releases.
La primera distribucion puede publicarse sin firma ni notarizacion. En ese caso deben esperarse avisos de SmartScreen en Windows y Gatekeeper en macOS.
Crear config.json en la raiz:
{
"refresh_interval_sec": 45
}El valor se limita entre 30 y 120 segundos.
npm run dev: servidor Vite del frontendnpm run build: compila TypeScript y generadistnpm run tauri:dev: ejecuta la app Tauri en modo desarrollonpm run tauri:build: genera build para la plataforma actualnpm run tauri -- <args>: passthrough directo al CLI de Tauri mediante el wrapper localnpm test: valida parsers con outputs simulados
El backend solo permite ejecutar comandos de la whitelist:
where codex/which codexwhere claude/which claudewhere gemini/which geminicodex ...claude ...gemini ...
Cada proceso usa timeout y los fallos de una CLI no bloquean el widget.