Skip to content

Add Gemini CLI to databricks aitools install - #6204

Merged
lennartkats-db merged 18 commits into
mainfrom
add-agent-gemini
Aug 11, 2026
Merged

lennartkats-db merged 18 commits into
mainfrom
add-agent-gemini

Conversation

@lennartkats-db

@lennartkats-db lennartkats-db commented Aug 7, 2026 •

Copy link
Copy Markdown
Contributor

Changes

  • Add Gemini CLI as a supported AI tools agent

  • Configure Gemini settings and skill discovery/update support

  • Add installation and acceptance test coverage

  • Stacked on top of Add Pi to databricks aitools install #6199: target branch must be set to main before merging

Tests

  • Unit tests
  • Verified end to end against a live model: after databricks aitools install, Gemini loads the databricks-core skill in a real session.

Add Pi as a skills-only coding agent: install and update now discover Pi
via ~/.pi/agent (honoring PI_CODING_AGENT_DIR) and write Databricks agent
skills into its skills directory, both globally and project-scoped (.pi/skills).

This also lands the shared project-scope plumbing the Goose and Gemini agents
build on: SupportedNames/SkillsOnlyNames derive the help text from the registry,
and update --scope project picks up project-local skill agents via
DetectProjectInstalled.

Co-authored-by: Isaac
Add Goose as a skills-only coding agent, stacked on the Pi change. Install
and update discover Goose via its config directory (honoring GOOSE_PATH_ROOT,
XDG_CONFIG_HOME, and the legacy Windows Block path) and write Databricks agent
skills into its skills directory, both globally and project-scoped (.goose/skills).

Co-authored-by: Isaac
Add Gemini CLI as a skills-only coding agent, stacked on the Goose change.
Install and update discover Gemini via ~/.gemini (honoring GEMINI_CLI_HOME) and
write Databricks agent skills into its skills directory, both globally and
project-scoped (.gemini/skills).

Gemini shares its ~/.gemini config directory with Antigravity, so bare-directory
detection would report Gemini installed whenever only Antigravity is present.
This adds a DetectFile marker (projects.json, which Gemini CLI writes on real use
and Antigravity does not) so detection keys on Gemini's own state.

Co-authored-by: Isaac
Add Gemini CLI as a skills-only coding agent, stacked on the Pi change. Install and update discover Gemini via ~/.gemini (honoring GEMINI_CLI_HOME) and write Databricks agent skills into its skills directory, both globally and project-scoped (.gemini/skills).

Gemini shares its ~/.gemini config directory with Antigravity, so bare-directory detection would report Gemini installed whenever only Antigravity is present. This adds a DetectFile marker (projects.json, which Gemini CLI writes on real use and Antigravity does not) so detection keys on Gemini-specific state.

Co-authored-by: Isaac
@eng-dev-ecosystem-bot

eng-dev-ecosystem-bot commented Aug 7, 2026 •

Copy link
Copy Markdown
Collaborator

Integration test report

Commit: 92aa590

Run: 31471892287

Env 💚​RECOVERED 🙈​SKIP ✅​pass 🙈​skip Time
💚​ aws linux 4 4 294 1122 6:05
💚​ aws windows 4 4 296 1120 6:30
💚​ azure linux 4 4 293 1122 5:46
💚​ azure windows 4 4 295 1120 6:30
💚​ gcp linux 1 5 294 1122 5:36
💚​ gcp windows 1 5 296 1120 6:39
8 interesting tests: 4 RECOVERED, 4 SKIP
Test Name aws linux aws windows azure linux azure windows gcp linux gcp windows
💚​ TestAccept 💚​R 💚​R 💚​R 💚​R 💚​R 💚​R
🙈​ TestAccept/bundle/invariant/no_drift 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/vector_search_endpoints/drift/recreated_same_name 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/bundle/resources/vector_search_indexes/recreate/embedding_dimension 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
🙈​ TestAccept/ssh/connection 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S 🙈​S
💚​ TestFetchRepositoryInfoAPI_FromRepo 💚​R 💚​R 💚​R 💚​R 🙈​S 🙈​S
💚​ TestFetchRepositoryInfoAPI_FromRepo/root 💚​R 💚​R 💚​R 💚​R
💚​ TestFetchRepositoryInfoAPI_FromRepo/subdir 💚​R 💚​R 💚​R 💚​R
Top 6 slowest tests (at least 2 minutes):
duration env testname
6:30 gcp windows TestAccept
6:22 aws windows TestAccept
6:22 azure windows TestAccept
3:21 gcp linux TestAccept
3:04 aws linux TestAccept
3:00 azure linux TestAccept

@renaudhartert-db renaudhartert-db left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM modulo some comment tweaks.

Comment thread libs/aitools/agents/agents.go Outdated
Comment thread libs/aitools/agents/agents.go Outdated
Comment thread libs/aitools/agents/agents.go Outdated
Base automatically changed from add-agent-pi to main August 11, 2026 07:51
# Conflicts:
#	cmd/aitools/install_test.go
#	cmd/aitools/telemetry.go
#	cmd/aitools/update_test.go
#	libs/aitools/agents/agents.go
#	libs/aitools/agents/agents_test.go
#	libs/aitools/agents/detect_test.go
#	libs/aitools/agents/registry_test.go
#	libs/aitools/installer/installer_test.go
#	libs/telemetry/protos/aitools_install.go
# Conflicts:
#	cmd/aitools/install_test.go
#	cmd/aitools/telemetry.go
#	cmd/aitools/update.go
#	cmd/aitools/update_test.go
#	libs/aitools/agents/agents.go
#	libs/aitools/agents/agents_test.go
#	libs/aitools/agents/detect_test.go
#	libs/aitools/agents/registry_test.go
#	libs/aitools/installer/installer_test.go
#	libs/telemetry/protos/aitools_install.go
@lennartkats-db
lennartkats-db added this pull request to the merge queue Aug 11, 2026
Merged via the queue into main with commit ca72d14 Aug 11, 2026
42 of 43 checks passed
@lennartkats-db
lennartkats-db deleted the add-agent-gemini branch August 11, 2026 14:00
varundeepsaini pushed a commit to varundeepsaini/cli that referenced this pull request Aug 17, 2026
## Changes

- Add Goose as a supported AI tools agent
- Configure Goose settings and skill discovery/update support
- Add installation and test coverage

- [x] Stacked on top of databricks#6204: target branch must be set to `main`
before merging

## Tests

- `go test ./libs/aitools/agents ./cmd/aitools`
- Verified end to end against a live model: after databricks aitools
install, Goose loads the databricks-core skill in a real session.
janniklasrose pushed a commit that referenced this pull request Sep 15, 2026
## Changes

- Add Goose as a supported AI tools agent
- Configure Goose settings and skill discovery/update support
- Add installation and test coverage

- [x] Stacked on top of #6204: target branch must be set to `main`
before merging

## Tests

- `go test ./libs/aitools/agents ./cmd/aitools`
- Verified end to end against a live model: after databricks aitools
install, Goose loads the databricks-core skill in a real session.
antonyprasad-db added a commit to antonyprasad-db/cli that referenced this pull request Sep 28, 2026
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).
antonyprasad-db added a commit to antonyprasad-db/cli that referenced this pull request Sep 30, 2026
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>
philip pushed a commit to philip/databricks-cli that referenced this pull request Oct 2, 2026
> 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants