Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
8c97fac
aitools: promote skills-management surface to top-level
simonfaltum Apr 30, 2026
514cceb
aitools: update tip and error messages to canonical top-level path
simonfaltum Apr 30, 2026
506a8ef
aitools install: accept [skill-name] positional arg
simonfaltum Apr 30, 2026
fbb2a1b
Revert "aitools install: accept [skill-name] positional arg"
simonfaltum Apr 30, 2026
7efa0d3
aitools/README: fix install command shape
simonfaltum Apr 30, 2026
e7f09a4
experimental/aitools: fix stale Long help text
jamesbroadhead Apr 30, 2026
c677e6f
aitools install: accept [skill-name] positional to match alias
jamesbroadhead Apr 30, 2026
8a66a93
Merge remote-tracking branch 'origin/main' into jbroadhead/aitools-re…
jamesbroadhead May 5, 2026
ae72f55
Merge remote-tracking branch 'origin/main' into jbroadhead/aitools-re…
jamesbroadhead May 6, 2026
960a74d
gofmt: align field alignment in aitools.go
jamesbroadhead May 6, 2026
51d5258
Merge remote-tracking branch 'origin/main' into jb/aitools-drop-posit…
jamesbroadhead May 8, 2026
9e5bcbc
aitools install: drop positional [skill-name] form
jamesbroadhead May 8, 2026
9df5e93
Merge remote-tracking branch 'origin/main' into jb/aitools-move-only
jamesbroadhead May 11, 2026
994aa20
Merge remote-tracking branch 'origin/main' into jb/aitools-merge-main
jamesbroadhead May 12, 2026
d15ad6e
Merge remote-tracking branch 'origin/main' into jb/aitools-merge-main2
jamesbroadhead May 13, 2026
191e97e
Merge branch 'main' into jbroadhead/aitools-public
simonfaltum May 18, 2026
b02d78e
address review feedback: layout, deprecation, test injection
simonfaltum May 18, 2026
6dd7618
rewrite NEXT_CHANGELOG entry: focus on what users get
simonfaltum May 18, 2026
dbc227b
OWNERS: add team:platform to aitools paths
simonfaltum May 18, 2026
b8a5b8d
tests: set USERPROFILE alongside HOME so Windows test job picks up th…
simonfaltum May 18, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .agent/skills/pr-checklist/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ Before submitting a PR, run these commands to match what CI checks. CI uses the
# 5. If you changed files in python/:
./task pydabs-codegen pydabs-test pydabs-lint pydabs-docs

# 6. If you changed experimental/aitools or experimental/ssh:
./task test-exp-aitools # only if aitools code changed
# 6. If you changed cmd/aitools/, libs/aitools/, experimental/aitools/, or experimental/ssh/:
./task test-exp-aitools # only if aitools code changed (top-level or experimental)
./task test-exp-ssh # only if ssh code changed
```

Expand Down
4 changes: 4 additions & 0 deletions .github/OWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,10 @@
# Internal
/internal/ team:platform

# AI tools
/cmd/aitools/ team:eng-apps-devex team:platform @lennartkats-db
/libs/aitools/ team:eng-apps-devex team:platform @lennartkats-db

# CLI compatibility manifest
/internal/build/cli-compat.json team:eng-apps-devex team:platform
/libs/clicompat/ team:eng-apps-devex team:platform
Expand Down
2 changes: 2 additions & 0 deletions NEXT_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@

### CLI

* Added `databricks aitools` command group for installing Databricks skills into your coding agents (Claude Code, Cursor, Codex CLI, OpenCode, GitHub Copilot, Antigravity). Skills are fetched from [github.com/databricks/databricks-agent-skills](https://github.com/databricks/databricks-agent-skills) and either symlinked into each agent's skills directory or copied into the current project. Use `databricks aitools install` to set up, `update` to pull newer versions, `list` to see what's available, and `uninstall` to remove them.

### Bundles
* Make sure warnings asking for approval are understood by agents ([#5239](https://github.com/databricks/cli/pull/5239))

Expand Down
6 changes: 4 additions & 2 deletions Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -609,8 +609,10 @@ tasks:
# generic `test` target (the catch-all) instead.

test-exp-aitools:
desc: Run experimental aitools unit and acceptance tests
desc: Run aitools (top-level + experimental) unit and acceptance tests
sources:
- cmd/aitools/**
- libs/aitools/**
- experimental/aitools/**
- acceptance/apps/**
- "{{.EMBED_SOURCES}}"
Expand All @@ -619,7 +621,7 @@ tasks:
{{.GO_TOOL}} gotestsum \
--format ${GOTESTSUM_FORMAT:-pkgname-and-test-fails} \
--no-summary=skipped \
--packages ./experimental/aitools/... \
--packages "./cmd/aitools/... ./libs/aitools/... ./experimental/aitools/..." \
-- -timeout=${LOCAL_TIMEOUT:-30m}
- |
{{.GO_TOOL}} gotestsum \
Expand Down
1 change: 1 addition & 0 deletions acceptance/help/output.txt
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,7 @@ Developer Tools

Additional Commands:
account Databricks Account Commands
aitools Databricks AI Tools for coding agents
api Perform Databricks API call
auth Authentication related commands
cache Local cache related commands
Expand Down
25 changes: 25 additions & 0 deletions cmd/aitools/aitools.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package aitools

import (
"github.com/spf13/cobra"
)

func NewAitoolsCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "aitools",
Short: "Databricks AI Tools for coding agents",
Long: `Install Databricks skills into your coding agent so it can work
effectively with Databricks resources (bundles, jobs, SQL, and more).

Supported agents: Claude Code, Cursor, Codex CLI, OpenCode, GitHub
Copilot, Antigravity.`,
}

cmd.AddCommand(NewInstallCmd())
cmd.AddCommand(NewUpdateCmd())
cmd.AddCommand(NewUninstallCmd())
cmd.AddCommand(NewListCmd())
cmd.AddCommand(NewVersionCmd())

return cmd
}
File renamed without changes.
File renamed without changes.
46 changes: 43 additions & 3 deletions experimental/aitools/cmd/install.go → cmd/aitools/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,51 @@ import (
"fmt"
"strings"

"github.com/databricks/cli/experimental/aitools/lib/agents"
"github.com/databricks/cli/experimental/aitools/lib/installer"
"github.com/charmbracelet/huh"
"github.com/databricks/cli/libs/aitools/agents"
"github.com/databricks/cli/libs/aitools/installer"
"github.com/databricks/cli/libs/cmdio"
"github.com/spf13/cobra"
)

func newInstallCmd() *cobra.Command {
// Package-level for testability. Tests in this package override them via
// helpers in install_test.go.
var (
promptAgentSelection = defaultPromptAgentSelection
installSkillsForAgentsFn = installer.InstallSkillsForAgents
)

func defaultPromptAgentSelection(ctx context.Context, detected []*agents.Agent) ([]*agents.Agent, error) {
options := make([]huh.Option[string], 0, len(detected))
agentsByName := make(map[string]*agents.Agent, len(detected))
for _, a := range detected {
options = append(options, huh.NewOption(a.DisplayName, a.Name).Selected(true))
agentsByName[a.Name] = a
}

var selected []string
err := huh.NewMultiSelect[string]().
Title("Select coding agents to install skills for").
Description("space to toggle, enter to confirm").
Options(options...).
Value(&selected).
Run()
if err != nil {
return nil, err
}

if len(selected) == 0 {
return nil, errors.New("at least one agent must be selected")
}

result := make([]*agents.Agent, 0, len(selected))
for _, name := range selected {
result = append(result, agentsByName[name])
}
return result, nil
}

func NewInstallCmd() *cobra.Command {
var skillsFlag, agentsFlag string
var includeExperimental bool
var projectFlag, globalFlag bool
Expand All @@ -27,6 +65,8 @@ Use --project to install to the current project directory instead.
When multiple agents are detected, skills are stored in a canonical location
and symlinked to each agent to avoid duplication.

Use --skills name1,name2 to install specific skills.

Supported agents: Claude Code, Cursor, Codex CLI, OpenCode, GitHub Copilot, Antigravity`,
Args: cobra.NoArgs,
RunE: func(cmd *cobra.Command, args []string) error {
Expand Down
Loading
Loading