El cierre de mes tiene su ritmo: sumar las horas, cuadrar el dinero, perseguir las facturas, archivar los números. Si ya vives en una terminal, hacer todo eso pinchando por pantallas es la vía lenta. El cliente de línea de comandos (@ceum/cli) ejecuta las mismas operaciones que la aplicación, así que toda la rutina se convierte en un puñado de comandos que podrás releer el mes que viene, o entregar a cron.
Este recorrido sigue un trabajo concreto —cerrar un mes— desde una shell en blanco hasta un informe que puedes archivar. La configuración del paso 1 es un coste único; los pasos 2 y 3 son la rutina que repetirás de verdad.
El objetivo
Convierte «es fin de mes» en una secuencia corta y repetible: extrae el tiempo registrado y las transacciones del mes en un formato que una máquina pueda leer, dale la forma del resumen que necesitas y devuelve cualquier corrección, todo con scripts, para que el mes que viene sea un solo comando.
1. Instala y autentícate — una vez
La CLI es un pequeño binario que instalas desde npm:
$ npm install -g @ceum/cli # installs the `ceum` command (Node.js 22+)
Se autentica con un token MCP, el mismo token que impulsa la integración MCP. Genera uno en la aplicación, en Ajustes → Integraciones, y luego inicia sesión:
$ ceum auth login # paste the token (starts with ceum_)
Signed in. 42 tools available under this token.
El token se guarda con permisos 0600 en tu directorio de configuración. Para un trabajo programado que no deba tocar el disco, pásalo a través del entorno; es ideal para cron o CI:
$ CEUM_TOKEN=ceum_… ceum invoices list
Mantén separados los espacios de trabajo distintos con perfiles con nombre (ceum auth add work y luego ceum --profile work …). La superficie de comandos se deriva en vivo de lo que tu token puede hacer, así que ceum --help siempre muestra exactamente los recursos y las acciones disponibles para ti.
2. Obtén un mes de datos — en un formato que puedas usar
Cada comando de listado es primero el recurso (ceum <resource> <action>) y admite -o para elegir una salida. El text predeterminado se tabula de forma legible; los formatos para máquinas —json, csv, ndjson— son limpios byte a byte para canalizarlos.
Empieza por la cifra principal. time-entries aggregate totaliza el tiempo registrado sobre un conjunto de filtros y puede agruparlo:
$ ceum time-entries aggregate \
--start-date 2026-07-01 --end-date 2026-07-31 \
--group-by project -o json
Eso devuelve los segundos totales del mes y un desglose por proyecto. Para extraer las filas subyacentes para una hoja de cálculo, lístalas directamente a CSV, y usa --all para saltarte el tope de página por petición y fusionar todas las páginas:
$ ceum time-entries list --start-date 2026-07-01 --end-date 2026-07-31 \
--all -o csv > july-time.csv
$ ceum transactions list --all -o csv > july-transactions.csv
Dos toques hacen la salida más ajustada: --columns elige exactamente los campos que quieres, y un preajuste guardado captura un conjunto de filtros para que no lo reescribas:
$ ceum transactions list --columns date,desc,amount,type,client
$ ceum presets save transactions month --type expense # save once
$ ceum transactions list --preset month -o json # reuse (explicit flags win)
3. Dale forma y luego devuelve las correcciones
Como solo la salida del comando va a stdout —los avisos, el progreso y los errores van todos a stderr—, las tuberías se mantienen limpias. Eso significa que jq y compañía funcionan justo como esperarías:
$ ceum invoices list -o json | jq '.[] | select(.status=="overdue") | .invoiceNumber'
$ ceum time-entries aggregate --group-by tag -o json \
| jq -r '.groups[] | [.key, .totalSeconds/3600] | @tsv'
La tubería funciona en ambos sentidos. Cuando el cierre de mes incluye devolver datos —registrar un lote de gastos, por ejemplo—, alimenta filas desde un archivo o desde stdin a un comando bulk-create; la entrada se detecta automáticamente (array JSON, objeto único, NDJSON o CSV) y se trocea hasta el tope de 50 por petición del servidor:
$ ceum transactions bulk-create --file july-expenses.ndjson
$ jq -c '.[]' corrections.json | ceum transactions bulk-create --stdin
Ahora todo el proceso es un script. Los códigos de salida codifican la clase de fallo (0 correcto, 2 uso, 3 autenticación, 4 prohibido, 5 error de herramienta, 6 red, 7 configuración), así que un trabajo de cron puede distinguir un corte de red de un token erróneo y actuar en consecuencia en lugar de fallar en silencio.
Lo que consigues al final
Un cierre de mes que es un archivo que ejecutas, no una pantalla por la que pinchas: autentícate una vez, extrae el mes en JSON o CSV, remodélalo con herramientas que ya conoces y devuelve el resultado, las mismas operaciones que realiza la aplicación, conectadas a tu shell y a tu programador de tareas.
¿Prefieres quedarte en la aplicación pero mantener la velocidad del teclado? La paleta de comandos integrada ejecuta la misma gramática de comandos desde un panel dentro de Ceum. Y una vez que los números están fuera, Descubre en qué se va realmente tu tiempo y Del trabajo registrado a la factura pagada retoman donde la exportación lo deja.