Repository navigation
Add Kiro to databricks aitools install - #6436
antonyprasad-db wants to merge 3 commits into
Conversation
Approval status: pending
|
|
Update on the one maintainer TODO in the description — the I've submitted that change internally: Two things I confirmed while doing it:
No changes to this PR as a result — just closing the loop so the proto side isn't left as an open question. |
|
Closing the loop on my previous comment: the
So both halves are done and this PR is the complete change. I've updated the description, which still carried the original "a maintainer will need to do" caveat and read as though something was outstanding. Two things I can't do from outside the org, in case either is what's holding this up:
Happy to rebase or split this if either would help. |
|
@lennartkats-db — the approval bot flagged you as the reviewer for This is ready. The single maintainer TODO in the description — the Happy to rebase or split it if that makes review easier. |
Kiro reads agent skills from ~/.kiro/skills (user-level) and <workspace>/.kiro/skills (workspace-level), each skill a directory holding a SKILL.md. Its loader requires frontmatter name and description, rejects a name longer than 64 characters or a description longer than 1024, and requires the name to match its directory. That is already what this repo emits, so Kiro needs only a registry entry. Verified on macOS with Kiro 1.0.182: all 29 stable skills written to ~/.kiro/skills are accepted by Kiro's loader. The only rejections in that directory were two deliberately malformed probes and two unrelated pre-existing skills whose frontmatter name does not match their directory. Kiro is IDE-first, so the `kiro` binary is frequently absent from PATH. Detection then falls back to ConfigDir and reports files-only, which is the correct state for a skills-only agent (Plugin nil). Also adds the telemetry enum and agentType case so Kiro installs are not logged as TYPE_UNSPECIFIED, keeping TestAgentTypeCoversRegistry green. Note the matching AitoolsAgentType value is still needed in enum.proto on the Universe side; only the CLI half is in this change. Follows the same shape as Goose (databricks#6214), Gemini CLI (databricks#6204) and Pi (databricks#6199).
136fa64 to
fb30ee6
Compare
|
Rebased onto current |
The Goose (databricks#6214) and Gemini CLI (databricks#6204) precedents each ship a .nextchanges fragment plus a Kiro-equivalent assertion in cmd/aitools/install_test.go and cmd/aitools/update_test.go. This branch was missing all three. The update test also needed its fixture extended, not just an assertion: it creates .pi, .gemini and .goose project skill dirs, so DetectProjectInstalled correctly reported no Kiro until .kiro was created alongside them. The production path was never at fault. libs/aitools/agents/detect_test.go is deliberately left alone. Goose and Gemini CLI have custom config-dir resolution worth covering there (XDG_CONFIG_HOME, GOOSE_PATH_ROOT); Kiro uses a plain ~/.kiro with no env override, and registry_test.go already pins both its global and project skills paths. Co-authored-by: Isaac <no-reply@databricks.com>
|
An authorized user can trigger integration tests manually by following the instructions below: Trigger: Inputs:
Checks will be approved automatically on success. |
Integration test reportCommit: df8fb9f
Top 6 slowest tests (at least 2 minutes):
|
The nextchanges validator requires the fragment's trailing PR link to reference the PR that ships it. This branch supersedes the fork PR #6436. Co-authored-by: Isaac <no-reply@databricks.com>
|
Superseded by #6908, which was recreated as a branch in this repository so the JFrog/OIDC-gated CI jobs ( |
> Recreated from databricks#6436 as a branch in `databricks/cli` (not a fork) so the JFrog/OIDC-gated CI jobs (`task test`, `task test-exp-aitools`, `validate-generated`) actually run — fork PRs can't obtain the OIDC token. Original author's commits are preserved. Supersedes databricks#6436. ## Summary Adds Kiro to the agent registry so `databricks aitools install` treats it like any other skills-only agent. Follows the same shape as Goose (databricks#6214), Gemini CLI (databricks#6204) and Pi (databricks#6199). ## Why Kiro reads agent skills from `~/.kiro/skills` (user-level) and `<workspace>/.kiro/skills` (workspace-level), each skill a directory containing `SKILL.md` — exactly the layout this repo already emits. Today Kiro users have to fall back to `databricks aitools install --path ~/.kiro/skills`, which works but records no state, so `aitools update` and `aitools uninstall` never see those skills and `aitools list` reports every one of them as `not installed`. ## Verification Tested on macOS with Kiro 1.0.182. Kiro's loader (`NodeProgressiveContextSource`) rejects a skill when frontmatter is missing, when `name` or `description` is empty, when `name` is outside 1–64 characters, when `description` exceeds 1024, or when `name` does 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 frontmatter `name` disagrees with their directory: ``` skill.frontmatter.missing zz-probe-no-frontmatter (deliberate probe) skill.fields.missing zz-probe-no-description (deliberate probe) skill.name.mismatch analyze-mlflow-trace (pre-existing, unrelated) skill.name.mismatch analyze-mlflow-chat-session (pre-existing, unrelated) ``` 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 - `SkillsSubdir` is left empty because Kiro's directory is literally `skills`, 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 from `PATH`. Detection then falls back to `ConfigDir` and reports files-only, which is the correct state for a skills-only agent (`Plugin nil`). ## Telemetry Also adds `AitoolsAgentTypeKiro` and the matching `agentType` case, so Kiro installs are not logged as `TYPE_UNSPECIFIED` and `TestAgentTypeCoversRegistry` stays 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 as `aitools_install.go` (CLI). `KIRO = 10` was added to `AitoolsAgentType.Type` and merged to master on 2026-09-01 (universe 2524420), with `Protobuf-Linter-Pr` and `OpenAPICompatibility-Pr` both 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 ``` go test ./cmd/aitools/... ./libs/aitools/... ./libs/telemetry/... ok github.com/databricks/cli/cmd/aitools 4.159s ok github.com/databricks/cli/libs/aitools/agents 1.529s ok github.com/databricks/cli/libs/aitools/installer 2.648s ok github.com/databricks/cli/libs/telemetry 6.616s ok github.com/databricks/cli/libs/telemetry/protos 2.023s ``` Test coverage added alongside the existing Goose cases: registry paths and project detection in `libs/aitools/agents/registry_test.go`, the skills-only assertion in `agents_test.go`, the project-scope declaration in `libs/aitools/installer/installer_test.go`, the agent-choices assertion in `cmd/aitools/install_test.go`, and the project-scope update path in `cmd/aitools/update_test.go` — which needed a `.kiro` project skills dir in the fixture alongside the existing `.pi`, `.gemini` and `.goose` ones. `libs/aitools/agents/detect_test.go` is 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 `~/.kiro` with no env override and `registry_test.go` already 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. --------- Co-authored-by: Antony Prasad Thevaraj <280810845+antonyprasad-db@users.noreply.github.com> Co-authored-by: Isaac <no-reply@databricks.com>
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.This pull request and its description were written by Isaac.