Releases: keboola/cli
v0.46.1
Patch release. No CLI runtime behavior change — both items are plugin/tooling.
What's new
Skill now surfaces kbagent data-app logs (#336, closes #335). The kbagent Claude Code skill and the keboola-expert subagent now route log-troubleshooting requests to kbagent data-app logs (shipped in 0.43.8). The SKILL.md description-trigger list gained data-app logs, container logs, app logs, tail logs, build logs, app stdout, app stderr, troubleshoot data app, debug data app, and the keboola-expert Tool Selection Matrix gained a row:
kbagent data-app logs --project P --app-id N [--lines N | --since ISO8601] (0.43.8+)
Before this, asking the agent for a data app's container logs fell back to the UI "Terminal Log" tab or the 20-line-capped get_data_apps MCP tool.
Frontend dev-tooling fix (#341). Bumped web/frontend dev dependencies — vite 5→8, vitest 2→4, and @vitejs/plugin-react 4→5.2 to keep the peer range consistent with vite 8. The earlier Dependabot PRs (#337, #338) bumped only vite + vitest, leaving plugin-react pinned below vite 8; that broke npm ci (ERESOLVE) in the Windows wheel-build job and silently shipped a UI-less wheel. The bundled SPA and kbagent serve --ui are unchanged.
Install
uv tool install git+https://github.com/keboola/cliv0.46.0 — Repository moved to keboola/cli
Repository moved to keboola/cli
The project's canonical home moved from github.com/padak/keboola_agent_cli to github.com/keboola/cli. This release ships from the new home so the fleet migrates itself.
Change. The auto-update and self-install constants (KBAGENT_GITHUB_REPO, KBAGENT_INSTALL_SOURCE) now point at the new repo: the startup version check hits api.github.com/repos/keboola/cli/releases/latest and kbagent update installs from git+https://github.com/keboola/cli. The Claude Code plugin manifest (homepage/repository), the marketplace install instructions (/plugin marketplace add keboola/cli), README / TUTORIAL / CONTRIBUTING, the doctor/serve install hints, the AGENT_CONTEXT snippet, and the README dev-setup clone target were all updated in lock-step. The marketplace name (keboola-agent-cli) and the /plugin install kbagent@keboola-agent-cli identifier are unchanged — they are logical names, not repo paths.
Migration note. Existing installs migrate themselves in a single update cycle: GitHub serves a 301 from the old repo path to keboola/cli, and both auto-update phases follow it (the version check uses httpx with follow_redirects=True; uv/git follow the redirect on clone/fetch). Once you are on >= 0.46.0 the baked-in constants already name the new repo, so the redirect is needed for at most one hop. The old padak/keboola_agent_cli path must not be re-created as a new repository, or the redirect dies and pre-0.46.0 installs are cut off from updates.
Install
uv tool install git+https://github.com/keboola/cliv0.45.0 — Reliability & code quality
Reliability & code-quality release.
- Fixed ~12 silently-broken REST API endpoints in
kbagent serve(config rename / folder / search, table column descriptions, file download, data-app password, variables). They would have failed on the first call — now they work and are covered by regression tests so the issue can't quietly come back. - Strict type-checking is now enforced across the whole codebase (blocking). This is what surfaced the broken endpoints, and it stops the same class of bug from shipping again.
- Fleet observability: every Keboola API call now reports OS + version, so CLI usage can be segmented in monitoring. No tokens, secrets, or user identity are exposed.
--hintis deprecated in favour of thekbagent serveREST API, which now covers every command. The flag still works (with a deprecation notice) and will be removed in a future release.
No breaking changes for CLI users. Upgrade with kbagent update.
v0.44.0 — kbagent agent <verb> (CLI parity for /agents)
kbagent agent <verb> — CLI parity for the /agents REST surface
kbagent agent brings the CLI to parity with the /agents REST surface that kbagent serve has exposed since v0.40.0 — twelve subcommands for scheduled agent tasks: CRUD, execution, history, and utilities.
What's in it
list, show, create, update, delete, run, runs, run-detail, run-events, test, cron-preview, prompt-improve.
- Offline-first: CRUD + ad-hoc
runread/write<config_dir>/agents.jsondirectly — nokbagent serveneeded. The cron loop that fires scheduled tasks still requires a running server, but the on-disk format is identical, so a CLI-created task fires on its cron as soon as the server boots. - Three action flavours mirror the REST endpoint byte-for-byte:
ai_agent(--cli claude|codex|gemini),cli_command(--argv),mcp_tool(--tool+--input).--from-file PATH|@path|-takes the full{type, params}envelope. - Flexible ID forms: every subcommand takes
TASK_ID/RUN_IDpositionally or via--id/--task-id/--run-id, matching the rest of the CLI (--job-id,--config-id, ...). - Streaming (
--stream): live events line-by-line in human mode, NDJSON under--json. - Trigger chaining (
--trigger-task-id+--trigger-on) with cycle / self-loop validation shared byte-for-byte with the REST router.
Install / upgrade
kbagent update
The startup auto-update hook picks this up on the next kbagent invocation.
Notes
cronitermoved from[server]extras into core dependencies;server/__init__.pywas split into a PEP 562 lazy shim +server/app.pyso the agent CLI works on plain installs without[server]extras.- Supersedes the
0.44.0b1/0.44.0b2pre-releases (left intact as history). - Tooling:
make version-syncnow also pins thekeboola-agent-cliself-version inuv.lock. - Full per-version detail:
kbagent changelog.
v0.44.0 — Beta 2 (kbagent agent CLI, rebased)
kbagent agent <verb> — CLI parity for the /agents REST surface (beta 2)
Beta 2 of #310. Identical agent-command surface as 0.44.0b1, rebased onto the current main so the installed tree carries the latest stable fixes (the 0.43.4–0.43.9 line: semantic-layer cascade delete, metastore error surfacing, Windows build hook, MCP --prerelease=allow pin, data-app logs, data-app sandbox-filter + plain-key secrets).
What's in it
Twelve kbagent agent subcommands matching the /agents REST endpoints that kbagent serve has exposed since v0.40.0:
list, show, create, update, delete, run, runs, run-detail, run-events, test, cron-preview, prompt-improve.
CRUD + ad-hoc run work fully offline against <config_dir>/agents.json; the cron loop that fires scheduled tasks still requires kbagent serve running, but the on-disk format is identical.
Install (opt-in)
kbagent update --beta
Stable users are unaffected — the auto-update startup hook only consults the stable /releases/latest, which never returns a pre-release.
Notes
- The earlier
v0.44.0b1pre-release (commitd828e83, cut 2026-05-18) is left intact as history; it was built on a 5-day-oldmain. - Verified locally before release:
make checkgreen (3536 passed, 7 skipped), and 11/12 subcommands exercised live against a real config (prompt-improveis covered by unit tests — it shells out to a local AI CLI).
v0.43.9 — Read/remove plain data-app env vars + list hides workspaces
Read & remove ALL data-app env-var keys, not just encrypted secrets (#330)
kbagent data-app secrets-list shows every key on a data app — both encrypted secrets (#…) and plain unencrypted config values like ADMIN_EMAILS or SMTP_HOST. But secrets-get and secrets-remove used to reject any key without a leading #:
$ kbagent data-app secrets-get --app-id N --key ADMIN_EMAILS
Error: Invalid secret key 'ADMIN_EMAILS'. Keys must start with '#' …
So a key you could plainly see in the list could be neither read nor removed — an inconsistency that blocked routine inspection of data-app configuration.
Fix: the leading # is now optional on secrets-get and secrets-remove.
- An encrypted secret returns metadata only — the decrypted value is still never echoed (the Encryption API is one-way and the CLI cannot decrypt).
- A plain value returns its literal value (
encrypted: false). That value is already visible viaconfig detail, so nothing new is exposed.
kbagent data-app secrets-get --project P --app-id N --key ADMIN_EMAILS # now works → shows the value
kbagent data-app secrets-get --project P --app-id N --key '#API_KEY' # encrypted → metadata only
kbagent data-app secrets-remove --project P --app-id N --key ADMIN_EMAILS --yes
secrets-set is intentionally unchanged — it still requires # because it encrypts. To add a plain env var, use config update.
Compatibility note for scripts: the
secrets-getJSON envelope gains anencrypted(bool) field and avalue(string for plain keys,nullfor encrypted).fingerprint/encryption_prefixare now always present but empty for plain keys — use the newencryptedflag as the discriminator, not a non-empty fingerprint.
data-app list no longer shows phantom "snowflake" apps (#330)
In a project with interactive Snowflake/BigQuery workspaces (sandboxes), kbagent data-app list showed them as unnamed (snowflake) rows that don't appear in the Apps UI and aren't data apps at all:
1299037558 (snowflake) state=running … ← a workspace, not a data app
1303774097 New Appggg (python-js) … ← the real data app
The Data Science /apps API returns every deployment type, not only data apps. The listing now filters to keboola.data-apps, so it matches the Apps UI. The JSON envelope also gains a component_id field per app.
Upgrade
Already have kbagent? It auto-updates on startup, or run:
kbagent update
v0.43.8 — MCP auto-update unblocked + data-app logs
keboola-mcp-server auto-update is unblocked (#324)
Every kbagent command was silently failing to update keboola-mcp-server, leaving installs pinned to the stale v1.32.0 while printing a misleading "Possible Python or dependency-version mismatch" warning on every run.
Root cause: keboola-mcp-server >= 1.55.0 declares a pre-release-only transitive dependency (toon-format~=0.9.0b1). uv / pip refuse pre-releases by default, so the bare uv tool upgrade couldn't resolve the latest server and silently backtracked to v1.32.0 — ~30 releases behind.
Fix: every path that installs or upgrades the MCP server — the startup auto-update, kbagent doctor / doctor --fix, the first-time-setup hint, and the command kbagent version recommends — now passes --prerelease=allow (--pre for pip). After upgrading, your MCP server moves to the current release and the warning disappears. This also removes the repeated, costly failed dependency resolution that slowed down every command on affected machines.
Note: this is a workaround on the kbagent side. The real fix lives in
keboola-mcp-server(tracked in keboola/mcp-server#538) — once it ships a stabletoon-format, the opt-in becomes a no-op.
New: kbagent data-app logs (#326, thanks @ottomansky)
Fetch the full container spin-up trace and runtime logs for a data app:
kbagent data-app logs --project ALIAS --app-id ID [--lines N | --since ISO8601]
A thin wrapper around the Data Science /apps/{id}/logs/tail endpoint with no client-side line cap (the MCP get_data_apps tool hard-caps at 20 lines — too small for a healthy spin-up). --lines 0 returns the full current buffer; --lines and --since are mutually exclusive.
⚠️ Logs can echo runtime secrets the app printed to stdout/stderr; the--jsonenvelope reproduces the body verbatim with no masking.
Upgrade
Already have kbagent? It auto-updates on startup, or run:
kbagent update
Stuck on MCP server v1.32.0 from before this release? After updating kbagent, the next run upgrades the MCP server automatically. To force it immediately:
uv tool install --reinstall --prerelease=allow keboola-mcp-server
v0.43.7 — Windows installation fixed
Windows installation is fixed
uv tool install git+https://github.com/padak/keboola_agent_cli was completely broken on Windows — two independent bugs in the wheel build hook meant there was no working install path at all. Both are fixed (closes #320).
npmis installed: the build crashed withFileNotFoundError [WinError 2], becausenpmisnpm.cmd(a batch launcher) on Windows and the bare["npm", …]spawn couldn't resolve it. The hook now hands the build the resolvednpm.cmdpath — which Windows runs via the system shell — and tolerates a spawn failure, so the React web UI actually builds into the wheel on Windows.npmis not installed: the build crashed withForced include not found, because an early return left the bundled-UI directory missing. The build now always succeeds — it produces a CLI-only wheel, andkbagent serve --uishows a friendly "no UI bundled" message instead of a traceback.
This was developed and verified without a Windows machine: a new windows-latest CI job runs a real uv build on every PR (asserting the UI is bundled with npm present, and that a UI-less wheel still builds), backed by 26 new cross-platform tests.
New: KBAGENT_SKIP_UI_BUILD=1 is a build-time env var that produces a deliberate CLI-only wheel (fast builds, no Node required).
Upgrade
Already have kbagent? It auto-updates on startup, or run:
kbagent update
On Windows and couldn't install before? This is the release that fixes it — the standard install now works:
uv tool install --with "keboola-agent-cli[server]" git+https://github.com/padak/keboola_agent_cli
v0.43.6 — Safe job runs with --mode debug
Run jobs in debug mode — safely, on production configs
kbagent job run now accepts --mode run|debug (default run, unchanged).
--mode debug runs a job with the same configuration and inputs as production, but sends its output to a Storage File tagged debug-<jobId> instead of writing to the destination tables — the run never touches live data.
Use it to:
- Reproduce a failing production job and inspect its real output, without polluting live tables.
- Capture a component's actual output as a test fixture (
kbagent storage file-download --tag debug-<jobId>). - Validate a configuration change before promoting it.
Omit --mode and jobs run exactly as before.
Upgrade
kbagent update
Authored by @matyas-jirat-keboola.
v0.44.0 — Beta 1: kbagent agent <verb>
Highlights
Beta release. This is the first pre-release tag for the agent CLI parity work. Stable users (kbagent update without --beta) are unaffected — the startup auto-update hook stays on /releases/latest which excludes prereleases.
Opt in
kbagent update --beta
# or persist for the shell:
export KBAGENT_INCLUDE_PRERELEASE=1Requires kbagent 0.43.3+ for tag-pinned install URL (otherwise uv resolves main HEAD instead of the tag, see #317).
New: kbagent agent <verb> — CLI parity for /agents REST
Twelve subcommands, byte-for-byte mirroring the /agents REST surface that kbagent serve exposes:
kbagent agent list
kbagent agent show TASK_ID
kbagent agent create --name N [--cron "..."] (--type ai_agent --cli claude --prompt "..." | --type cli_command --argv ARG ... | --type mcp_tool --tool T ... | --from-file PATH)
kbagent agent update TASK_ID [...]
kbagent agent delete TASK_ID
kbagent agent run TASK_ID [--stream] [--runtime-prompt T | --runtime-input JSON]
kbagent agent runs TASK_ID
kbagent agent run-detail TASK_ID RUN_ID
kbagent agent run-events TASK_ID RUN_ID
kbagent agent test (--type ... | --from-file PATH) [--stream]
kbagent agent cron-preview --cron "0 6 * * 1" [--count N]
kbagent agent prompt-improve --goal "..." [--cli claude|codex|gemini] [--stream/--no-stream]
Design highlights
- Pure-local CRUD.
AgentServicereads/writes<config_dir>/agents.jsondirectly. CRUD + ad-hocrunwork offline —kbagent serveis only needed for the cron loop firing scheduled tasks. - Three action flavours mirror the REST endpoint exactly:
ai_agent/cli_command/mcp_tool. Use--from-file PATH|@path|-for the full{type, params}envelope, or convenience flags (--cli + --prompt + --extra-arg,--argvrepeatable,--tool + --input + --mcp-project + --mcp-branch). - Streaming (
--stream) renders events line-by-line in human mode, NDJSON in--jsonmode — one packet per claude/codex/gemini stdout line, plusinitanddoneenvelopes. - Trigger chaining via
--trigger-task-id ID --trigger-on success|error|always(REST router's validation: no self-loops, target must exist). --runtime-promptappends ad-hoc text to the persisted prompt for one run (ai_agent only).--runtime-inputmerges JSON into action params (mcp_tool: shallow-merge intoinput; cli_command: appends toargv).- New blocking REST endpoint
POST /agents/prompt/improvemirrors the SSE variant for scripted callers (1:1 parity withkbagent agent prompt-improve --no-stream).
Why it matters
Closes the gap between the React UI sidebar "Agent Tasks" (shipped in v0.40.0) and the CLI users who had to fall back to kbagent http <verb> /agents... from scheduled subprocesses.
Tests
- 23 unit tests in
test_agent_service.py(CRUD round-trip, cron validation, trigger validation incl. self-loop + missing target, runtime_input merge, run mocking, stream test action, run history NOT_FOUND mapping) - 22 CLI tests in
test_agent_cli.py(every twelve subcommands via CliRunner, both human and--jsonmodes; happy-path + NOT_FOUND for every read endpoint) - 3 E2E tests in
tests/test_e2e.py::TestE2EAgentTasks(cron-preview, full create-show-update-run-runs-delete lifecycle, ad-hoc test) - Full suite: 3438 passed, 7 skipped
Feedback welcome
Please file issues / quirks at https://github.com/padak/keboola_agent_cli/issues. Stable v0.44.0 will follow once the beta has been exercised.