## Release v1.20.0
### Notable Changes
* Remove the Terraform deployment engine. `bundle.engine: terraform` and `DATABRICKS_BUNDLE_ENGINE=terraform` now error, and a failed migration of existing Terraform state is reported as an error instead of falling back to Terraform. To keep deploying with Terraform, use Databricks CLI v1.19.x. ([#6888](#6888), [#6889](#6889))
### CLI
* `databricks aitools install` now supports Kiro, installing Databricks agent skills into its skills directory. ([#6908](#6908))
* Fixed `databricks api` corrupting integers larger than 2^53 (such as job and pipeline ids) — request bodies and responses now preserve them exactly. ([#6884](#6884))
* Added `--auth-mode` and `--set <plugin>.<resourceKey>.authMode=obo|sp|both` to `databricks apps init` so AppKit resources can be accessed on behalf of the user, by the service principal, or both. The default stays service principal. ([#6886](#6886))
* `databricks apps init` now requires a value for every field a service principal resource binding references, prompting for missing values in an interactive terminal and otherwise failing with the `--set` key to use, instead of creating a project with unset variables. ([#6903](#6903))
* Add `databricks apps init --package-manager <npm|pnpm>` to select the package manager for Node.js templates. Infer the default quietly from template lockfiles and AppKit version, check prerequisites before creating files, and preserve template formatting and pnpm version pins. ([#6902](#6902))
* Select npm or pnpm from `packageManager` declarations and lockfiles for `apps validate` and project validation during `apps deploy`. ([#6892](#6892))
* Fix `auth docker host` reporting the credential helper as configured when its executable is missing from `PATH`. ([#6880](#6880))
* Warn when the CLI binary was built more than 6 months ago and recommend updating. ([#6898](#6898))
### AI Runtime
* Add an experimental rank-partitioned container images to AI Runtime jobs. ([#6841](#6841))
* Support snapshot fields directly under `code_source` without requiring `type` or a nested `snapshot` block. ([#6927](#6927))
* Map AIR priority and Unity Catalog image fields when converting run configurations to bundles. ([#6905](#6905))
* Add workspace backend validation to `air run --dry-run`. ([#6934](#6934))
### Bundles
* Warn that `bundle.terraform` is deprecated and has no effect since the Terraform deployment engine was removed. ([#6940](#6940))
* Direct engine now detects and applies an explicitly configured zero-value boolean or float (e.g. `gcp_attributes.use_preemptible_executors: false`, `azure_attributes.spot_bid_max_price: 0`) added to a resource first deployed without the field, matching the existing handling of an explicit integer zero. ([#6882](#6882))
* Fix `bundle deployment migrate` failing with "no such file or directory" when the Terraform state has no resources or the configuration no longer declares any of them. ([#6958](#6958))
* `bundle run` and `pipelines run` now send the per-update `development` parameter for pipelines in development mode targets. Setting `development` on a pipeline is deprecated and now emits a warning; use `mode: development` instead. ([#6863](#6863))
* Remove the hidden `bundle debug terraform` command. ([#6933](#6933))
* Add support for `run_as.group_name` at the bundle and target levels for jobs and pipelines. ([#6676](#6676))
* Fix recreating a secret scope that was deleted outside of the bundle with the direct deployment engine. ([#6970](#6970))
* Accept title-case booleans (`True`/`False`, as rendered by Azure Pipelines) for boolean variables, and accept the same boolean strings (`yes`/`no`, `on`/`off`, ...) in Python bundles as in YAML. ([#6942](#6942))
### Dependency Updates
* Bump `github.com/databricks/databricks-sdk-go` from v0.182.0 to v0.185.0. ([#6928](#6928))
Summary
Adds Kiro to the agent registry so
databricks aitools installtreats it like any other skills-only agent. Follows the same shape as Goose (#6214), Gemini CLI (#6204) and Pi (#6199).Why
Kiro reads agent skills from
~/.kiro/skills(user-level) and<workspace>/.kiro/skills(workspace-level), each skill a directory containingSKILL.md— exactly the layout this repo already emits. Today Kiro users have to fall back todatabricks aitools install --path ~/.kiro/skills, which works but records no state, soaitools updateandaitools uninstallnever see those skills andaitools listreports every one of them asnot installed.Verification
Tested on macOS with Kiro 1.0.182.
Kiro's loader (
NodeProgressiveContextSource) rejects a skill when frontmatter is missing, whennameordescriptionis empty, whennameis outside 1–64 characters, whendescriptionexceeds 1024, or whennamedoes not equal the directory name. Everything this repo emits satisfies that.With 29 stable skills installed into
~/.kiro/skills, Kiro accepted all 29. The only rejections in that directory were two deliberately malformed probe skills added to confirm the loader was really scanning, plus two unrelated pre-existing skills whose frontmatternamedisagrees with their directory:Worth knowing for anyone testing this: Kiro resolves skills lazily when a chat session starts, not when the IDE launches. Installing and then looking at an already-open Kiro shows nothing until a new session begins.
Notes on the registry entry
SkillsSubdiris left empty because Kiro's directory is literallyskills, so the default applies.SupportsProjectScope: true— Kiro's own picker text documents both scopes.Binary: "kiro"is set, but Kiro is IDE-first so the binary is frequently absent fromPATH. Detection then falls back toConfigDirand reports files-only, which is the correct state for a skills-only agent (Plugin nil).Telemetry
Also adds
AitoolsAgentTypeKiroand the matchingagentTypecase, so Kiro installs are not logged asTYPE_UNSPECIFIEDandTestAgentTypeCoversRegistrystays green.The Universe half is already merged, so nothing is owed on the proto side. That guard's failure message notes the enum lives in
enum.proto(Universe) as well asaitools_install.go(CLI).KIRO = 10was added toAitoolsAgentType.Typeand merged to master on 2026-09-01 (universe 2524420), withProtobuf-Linter-PrandOpenAPICompatibility-Prboth green — the latter being the machine check that the additive enum value is backward compatible. The two changes are order-independent: the enum addition is additive, and the CLI only emits"KIRO"once this PR merges. So this is the complete change and needs a review rather than any follow-up work.Tests
Test coverage added alongside the existing Goose cases: registry paths and project detection in
libs/aitools/agents/registry_test.go, the skills-only assertion inagents_test.go, the project-scope declaration inlibs/aitools/installer/installer_test.go, the agent-choices assertion incmd/aitools/install_test.go, and the project-scope update path incmd/aitools/update_test.go— which needed a.kiroproject skills dir in the fixture alongside the existing.pi,.geminiand.gooseones.libs/aitools/agents/detect_test.gois deliberately not extended: Goose and Gemini CLI have custom config-dir resolution to cover there (XDG_CONFIG_HOME,GOOSE_PATH_ROOT), while Kiro uses a plain~/.kirowith no env override andregistry_test.goalready pins both of its paths.Changelog
.nextchanges/cli/aitools-kiro.md, matching the fragment the Goose and Gemini CLI PRs each shipped.Co-authored-by: Antony Prasad Thevaraj 280810845+antonyprasad-db@users.noreply.github.com
This pull request and its description were written by Isaac.