El agente se ejecuta sin permisos de administrador: no puede instalar paquetes
del sistema ni levantar bases de datos. La tarea que los necesita los
declara en el bloque task:, y Kadu los instala antes de que empiece
la ejecución.
task:
dependencies:
apt: [ffmpeg, poppler-utils]
services: [postgres]
El repositorio solo elige nombres de una lista que mantiene Kobana. En un
servicio, la versión, el puerto, el usuario y la contraseña vienen de la lista,
nunca del repositorio.
Qué pasa en la ejecución
- La ejecución empieza y Kadu verifica cada nombre en la lista. Un nombre
fuera de la lista, o desactivado en ella, hace fallar la ejecución antes de
instalar nada.
- Los paquetes se instalan y los servicios se levantan en la propia máquina de
la ejecución, accesibles solo desde ella (
127.0.0.1).
- Cada servicio llega a la skill en una variable de entorno
(
DEPENDENCY_POSTGRES_URL, etc.), con la URL de conexión lista.
- La línea de tiempo muestra el paso "dependencias" con el tiempo usado, o el
motivo del fallo. Solo después empieza la skill.
La instalación cuenta para los 60 minutos de la ejecución: declara solo lo que
la tarea usa.
Reglas
| Regla | Detalle |
|---|
| Solo nombres de la lista | Un nombre fuera de la lista aparece en los avisos de la sincronización y hace fallar la ejecución |
| Límites | Como máximo 30 paquetes y 5 servicios por tarea |
| Formato | Listas de texto; otra clave (como npm:) u otro tipo descarta el bloque entero, con aviso |
| Ausente | dependencies fuera del frontmatter mantiene lo guardado; dependencies: {} lo limpia |
| Pares que no conviven | mysql y mariadb (mismo puerto), redis y valkey (mismo puerto), mysql-client y mariadb-client. Declarar los dos de un par hace fallar la ejecución |
| SQLite | Es un archivo, no un servicio: basta el paquete sqlite3 |
:::info Por qué una lista
Los paquetes y servicios se instalan con permisos de administrador, antes de que
corra la skill. La lista garantiza que solo entra software conocido, del
repositorio oficial de Ubuntu o de imágenes oficiales fijadas a una versión
exacta. Aun con la lista, Kadu rechaza una instalación que le daría a la skill
una forma de volverse administradora de la máquina, y la ejecución falla con el
motivo.
:::
Paquetes disponibles
PDF
| Paquete | Para qué |
|---|
poppler-utils | Extraer texto e imágenes, convertir páginas (pdftotext, pdftoppm, pdfinfo) |
qpdf | Unir, dividir, rotar, descifrar y reparar |
pdftk-java | Unir, dividir y rellenar formularios (pdftk) |
mupdf-tools | mutool: extraer, renderizar y limpiar |
ghostscript | Renderizar, comprimir y convertir PDF/PostScript |
img2pdf | Imágenes → PDF sin pérdida |
ocrmypdf | PDF escaneado → PDF con búsqueda (OCR) |
OCR
| Paquete | Para qué |
|---|
tesseract-ocr | OCR de imágenes |
tesseract-ocr-por | Idioma portugués |
tesseract-ocr-eng | Idioma inglés |
tesseract-ocr-spa | Idioma español |
Documentos (DOC, DOCX, ODT, RTF, PPT)
| Paquete | Para qué |
|---|
libreoffice-writer-nogui | DOC/DOCX/ODT: convertir y generar PDF sin interfaz (soffice --headless) |
libreoffice-impress-nogui | PPT/PPTX/ODP: convertir y generar PDF sin interfaz |
pandoc | Convertir entre Markdown, DOCX, HTML y otros |
antiword | DOC (Word 97-2003) → texto |
catdoc | DOC, XLS y PPT antiguos → texto (catdoc, xls2csv, catppt) |
docx2txt | DOCX → texto |
odt2txt | ODT/ODS → texto |
unrtf | RTF → texto o HTML |
Hojas de cálculo y CSV
| Paquete | Para qué |
|---|
libreoffice-calc-nogui | XLS/XLSX/ODS: convertir y recalcular sin interfaz |
gnumeric | ssconvert: XLS/XLSX/ODS/CSV sin LibreOffice |
csvkit | csvlook, csvsql, csvjoin, in2csv (XLSX → CSV) |
miller | mlr: filtrar, agregar y convertir CSV/TSV/JSON |
xlsx2csv | XLSX → CSV |
sqlite3 | SQLite: consultar CSV y bases en archivo |
Imágenes
| Paquete | Para qué |
|---|
imagemagick | Convertir, redimensionar y componer imágenes |
graphicsmagick | gm convert/mogrify (alternativa a ImageMagick) |
libvips-tools | vips: imágenes grandes con poca memoria |
webp | WebP (cwebp, dwebp) |
optipng | Optimizar PNG sin pérdida |
jpegoptim | Optimizar JPEG |
pngquant | Compresión de PNG con pérdida |
librsvg2-bin | SVG → PNG/PDF (rsvg-convert) |
libimage-exiftool-perl | exiftool: metadatos de imagen, PDF y audio |
Audio y video
| Paquete | Para qué |
|---|
ffmpeg | Cortar, convertir y montar audio y video |
sox | Convertir, cortar, normalizar y aplicar efectos de audio |
libsox-fmt-mp3 | MP3 en sox |
lame | Codificar MP3 |
flac | FLAC |
opus-tools | Opus (opusenc, opusdec) |
vorbis-tools | OGG Vorbis (oggenc, oggdec) |
mediainfo | Metadatos de audio y video |
Archivos y datos
| Paquete | Para qué |
|---|
zip | Comprimir ZIP |
unzip | Descomprimir ZIP |
p7zip-full | 7z, y lectura de RAR y otros formatos |
xmlstarlet | Consultar y editar XML (NF-e, CNAB en XML) |
html2text | HTML → texto |
yq | Consultar y convertir YAML y XML |
Servicios y almacenamiento
| Paquete | Para qué |
|---|
gh | GitHub CLI |
git-lfs | Git LFS |
rclone | Copiar y sincronizar archivos con Google Drive, Dropbox, OneDrive, S3 y otros |
s3cmd | S3 y compatibles |
Clientes de base de datos
| Paquete | Para qué |
|---|
postgresql-client | psql, pg_dump |
mysql-client | mysql, mysqldump (no convive con mariadb-client) |
mariadb-client | mariadb, mariadb-dump (no convive con mysql-client) |
redis-tools | redis-cli |
valkey-tools | valkey-cli |
Fuentes y pantalla
| Paquete | Para qué |
|---|
fonts-noto-core | Fuentes Noto (latín, acentos) |
fonts-noto-color-emoji | Emoji a color |
fonts-liberation2 | Compatibles con Arial, Times y Courier |
fonts-dejavu-core | Fuentes DejaVu |
xvfb | Pantalla virtual para navegador con interfaz |
Servicios disponibles
| Servicio | Versión | Variable | Valor | Usuario / contraseña / base |
|---|
postgres | PostgreSQL 18 | DEPENDENCY_POSTGRES_URL | postgresql://postgres:postgres@127.0.0.1:5432/postgres | postgres / postgres / postgres |
mysql | MySQL 8.4 (LTS) | DEPENDENCY_MYSQL_URL | mysql://root:mysql@127.0.0.1:3306/app | root / mysql / app |
mariadb | MariaDB 11.4 (LTS) | DEPENDENCY_MARIADB_URL | mysql://root:mariadb@127.0.0.1:3306/app | root / mariadb / app |
redis | Redis 7 | DEPENDENCY_REDIS_URL | redis://127.0.0.1:6379 | sin contraseña |
valkey | Valkey 8 (protocolo Redis) | DEPENDENCY_VALKEY_URL | redis://127.0.0.1:6379 | sin contraseña |
La base nace vacía en cada ejecución y desaparece con ella: sirve para trabajo
temporal (armar datos, correr una app en modo de desarrollo), no para guardar
nada entre ejecuciones.
Lo que no está en la lista
| Necesitas | Hazlo así |
|---|
| Paquetes de npm o pip, navegadores | La skill los instala en su propia carpeta, sin permisos de administrador (npm install -g --prefix "$HOME/.local", npx, pip install --user) |
Slack CLI, Google Cloud CLI (gcloud), Linear | No están en el repositorio de Ubuntu. Instálalos en la carpeta de la skill, o llama a la API HTTP con curl |
| AWS CLI | No está en Ubuntu 24.04. Para S3, usa s3cmd o rclone |
| Google Drive, Dropbox, OneDrive | rclone |
| Otro paquete o base de datos | Pídelo al soporte de Kobana (abajo) |
Pedir un paquete o servicio
Contacta al soporte de Kobana con el nombre y para qué lo necesita la tarea. El
paquete debe estar en el repositorio oficial de Ubuntu 24.04 y no puede traer
programas con permisos especiales; el servicio necesita una imagen oficial. Una
vez incluido, vale para las próximas ejecuciones, sin cambiar nada en el
repositorio.
Errores comunes
| Síntoma | Causa | Solución |
|---|
| Aviso "fuera de la lista permitida" en la sincronización | El nombre no está en la lista, o está desactivado | Corrige el nombre o pide la inclusión |
| La ejecución falla antes de empezar, en el paso "dependencias" | Nombre fuera de la lista, un par que no convive o un paquete rechazado | Lee el motivo en la línea de tiempo |
dependencies ignorado, con aviso | Clave desconocida o tipo incorrecto en el bloque | Solo apt y services, como listas de texto |
| Conexión a la base rechazada | Servicio no declarado, o la skill lee otra variable | Declara en services y usa la variable DEPENDENCY_* |
| La ejecución se queda sin tiempo | Demasiados paquetes | Declara solo lo que la tarea usa |