Skip to main content

Task dependencies

The agent runs without administrator rights: it cannot install system packages or start databases. A task that needs them declares them in the task: block, and Kadu installs them before the execution starts.

task:
# ...
dependencies:
apt: [ffmpeg, poppler-utils] # system packages
services: [postgres] # local databases

The repository only picks names from a list maintained by Kobana. For a service, the version, port, user and password come from the list, never from the repository.

What happens in the execution​

  1. The execution starts and Kadu checks each name against the list. A name outside the list, or disabled in it, fails the execution before anything is installed.
  2. Packages are installed and services start on the execution's own machine, reachable only from it (127.0.0.1).
  3. Each service reaches the skill in an environment variable (DEPENDENCY_POSTGRES_URL etc.), with the connection URL ready.
  4. The timeline shows the "dependencies" step with the time spent, or the reason for the failure. Only then does the skill start.

Installing counts toward the execution's 60 minutes: declare only what the task uses.

Rules​

RuleDetail
Names from the list onlyA name outside the list shows in the sync warnings and fails the execution
LimitsAt most 30 packages and 5 services per task
FormatLists of text; any other key (like npm:) or type discards the whole block, with a warning
Absentdependencies missing from the frontmatter keeps what was stored; dependencies: {} clears it
Pairs that cannot coexistmysql and mariadb (same port), redis and valkey (same port), mysql-client and mariadb-client. Declaring both of a pair fails the execution
SQLiteIt is a file, not a service: the sqlite3 package is enough

:::info Why a list Packages and services are installed with administrator rights, before the skill runs. The list makes sure only known software goes in, from the official Ubuntu repository or from official images pinned to an exact version. Even with the list, Kadu refuses an installation that would give the skill a way to become administrator of the machine, and the execution fails with the reason. :::

Available packages​

PDF​

PackageWhat for
poppler-utilsExtract text and images, convert pages (pdftotext, pdftoppm, pdfinfo)
qpdfMerge, split, rotate, decrypt and repair
pdftk-javaMerge, split and fill forms (pdftk)
mupdf-toolsmutool: extract, render and clean
ghostscriptRender, compress and convert PDF/PostScript
img2pdfImages β†’ PDF, lossless
ocrmypdfScanned PDF β†’ searchable PDF (OCR)

OCR​

PackageWhat for
tesseract-ocrOCR for images
tesseract-ocr-porPortuguese language
tesseract-ocr-engEnglish language
tesseract-ocr-spaSpanish language

Documents (DOC, DOCX, ODT, RTF, PPT)​

PackageWhat for
libreoffice-writer-noguiDOC/DOCX/ODT: convert and render PDF headless (soffice --headless)
libreoffice-impress-noguiPPT/PPTX/ODP: convert and render PDF headless
pandocConvert between Markdown, DOCX, HTML and more
antiwordDOC (Word 97-2003) β†’ text
catdocOld DOC, XLS and PPT β†’ text (catdoc, xls2csv, catppt)
docx2txtDOCX β†’ text
odt2txtODT/ODS β†’ text
unrtfRTF β†’ text or HTML

Spreadsheets and CSV​

PackageWhat for
libreoffice-calc-noguiXLS/XLSX/ODS: convert and recalculate headless
gnumericssconvert: XLS/XLSX/ODS/CSV without LibreOffice
csvkitcsvlook, csvsql, csvjoin, in2csv (XLSX β†’ CSV)
millermlr: filter, aggregate and convert CSV/TSV/JSON
xlsx2csvXLSX β†’ CSV
sqlite3SQLite: query CSV and file databases

Images​

PackageWhat for
imagemagickConvert, resize and compose images
graphicsmagickgm convert/mogrify (ImageMagick alternative)
libvips-toolsvips: large images with little memory
webpWebP (cwebp, dwebp)
optipngLossless PNG optimization
jpegoptimJPEG optimization
pngquantLossy PNG compression
librsvg2-binSVG β†’ PNG/PDF (rsvg-convert)
libimage-exiftool-perlexiftool: image, PDF and audio metadata

Audio and video​

PackageWhat for
ffmpegCut, convert and assemble audio and video
soxConvert, cut, normalize and apply effects to audio
libsox-fmt-mp3MP3 in sox
lameEncode MP3
flacFLAC
opus-toolsOpus (opusenc, opusdec)
vorbis-toolsOGG Vorbis (oggenc, oggdec)
mediainfoAudio and video metadata

Files and data​

PackageWhat for
zipCreate ZIP
unzipExtract ZIP
p7zip-full7z, and reading RAR and other formats
xmlstarletQuery and edit XML (NF-e, CNAB in XML)
html2textHTML β†’ text
yqQuery and convert YAML and XML

Services and storage​

PackageWhat for
ghGitHub CLI
git-lfsGit LFS
rcloneCopy and sync files with Google Drive, Dropbox, OneDrive, S3 and others
s3cmdS3 and compatible storage

Database clients​

PackageWhat for
postgresql-clientpsql, pg_dump
mysql-clientmysql, mysqldump (cannot be installed with mariadb-client)
mariadb-clientmariadb, mariadb-dump (cannot be installed with mysql-client)
redis-toolsredis-cli
valkey-toolsvalkey-cli

Fonts and display​

PackageWhat for
fonts-noto-coreNoto fonts (Latin, accents)
fonts-noto-color-emojiColor emoji
fonts-liberation2Metric-compatible with Arial, Times and Courier
fonts-dejavu-coreDejaVu fonts
xvfbVirtual display for a browser with a UI

Available services​

ServiceVersionVariableValueUser / password / database
postgresPostgreSQL 18DEPENDENCY_POSTGRES_URLpostgresql://postgres:postgres@127.0.0.1:5432/postgrespostgres / postgres / postgres
mysqlMySQL 8.4 (LTS)DEPENDENCY_MYSQL_URLmysql://root:mysql@127.0.0.1:3306/approot / mysql / app
mariadbMariaDB 11.4 (LTS)DEPENDENCY_MARIADB_URLmysql://root:mariadb@127.0.0.1:3306/approot / mariadb / app
redisRedis 7DEPENDENCY_REDIS_URLredis://127.0.0.1:6379no password
valkeyValkey 8 (Redis protocol)DEPENDENCY_VALKEY_URLredis://127.0.0.1:6379no password

The database starts empty on every execution and goes away with it: it is for temporary work (building data, running an app in development mode), not for keeping anything between executions.

What is not on the list​

You needDo this
npm or pip packages, browsersThe skill installs them in its own folder, without administrator rights (npm install -g --prefix "$HOME/.local", npx, pip install --user)
Slack CLI, Google Cloud CLI (gcloud), LinearNot in the Ubuntu repository. Install them in the skill's folder, or call the HTTP API with curl
AWS CLINot in Ubuntu 24.04. For S3, use s3cmd or rclone
Google Drive, Dropbox, OneDriverclone
Another package or databaseAsk Kobana support (below)

Requesting a package or service​

Contact Kobana support with the name and what the task needs it for. The package must be in the official Ubuntu 24.04 repository and must not ship programs with special permissions; the service needs an official image. Once added, it is available to the next executions, with no change to the repository.

Common errors​

SymptomCauseFix
"Outside the allowlist" warning in the syncName not on the list, or disabledFix the name or request it
Execution fails before starting, in the "dependencies" stepName outside the list, a pair that cannot coexist, or a refused packageRead the reason on the timeline
dependencies ignored, with a warningUnknown key or wrong type in the blockOnly apt and services, as lists of text
Connection to the database refusedService not declared, or the skill reads another variableDeclare it in services and use the DEPENDENCY_* variable
Execution runs out of timeToo many packagesDeclare only what the task uses