Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion Taskfile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,7 @@ tasks:
- libs/aitools/**
- experimental/aitools/**
- acceptance/apps/**
- acceptance/experimental/aitools/**
- "{{.EMBED_SOURCES}}"
cmds:
- |
Expand All @@ -628,7 +629,7 @@ tasks:
--format ${GOTESTSUM_FORMAT:-pkgname-and-test-fails} \
--no-summary=skipped \
--packages ./acceptance/... \
-- -timeout=${LOCAL_TIMEOUT:-30m} -run "TestAccept/apps"
-- -timeout=${LOCAL_TIMEOUT:-30m} -run "TestAccept/(apps|experimental/aitools)"

test-exp-ssh:
desc: Run experimental SSH unit and acceptance tests
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@

=== --experimental against a manifest with no experimental skills logs a nudge
>>> [CLI] experimental aitools install --global --experimental
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Warn: --experimental was set but the manifest at test-ref exposes no experimental skills. Set DATABRICKS_SKILLS_REF to a release that includes them (or =main for the latest).
Installed 1 skill.
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Agent detection needs ~/.claude; prefer USERPROFILE on Windows.
mkdir -p "${USERPROFILE:-$HOME}/.claude"

title "--experimental against a manifest with no experimental skills logs a nudge"
trace $CLI experimental aitools install --global --experimental
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Env.DATABRICKS_SKILLS_BASE_URL = "$DATABRICKS_HOST"
Env.DATABRICKS_SKILLS_REF = "test-ref"

Ignore = [
".databricks/aitools/skills/.state.json",
]

[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = []

# Stable-only manifest (no repo_dir=experimental).
[[Server]]
Pattern = "GET /test-ref/manifest.json"
Response.Body = '''
{
"version": "2",
"updated_at": "2026-01-01T00:00:00Z",
"skills": {
"test-stable": {"version": "1.0.0", "files": ["SKILL.md"]}
}
}
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable/SKILL.md"
Response.Body = '''---
name: test-stable
---

# Stable
'''

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 26 additions & 0 deletions acceptance/experimental/aitools/skills/install-specific/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@

=== install only one specific stable skill via --skills
>>> [CLI] experimental aitools install --global --skills test-stable-a
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Installed 1 skill.

=== install a specific experimental skill
>>> [CLI] experimental aitools install --global --skills test-exp --experimental
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Installed 1 skill.

=== asking for an experimental skill without --experimental flag errors out
>>> [CLI] experimental aitools install --global --skills test-exp
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Error: skill "test-exp" is experimental; use --experimental to install

Exit code: 1
11 changes: 11 additions & 0 deletions acceptance/experimental/aitools/skills/install-specific/script
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Agent detection needs ~/.claude; prefer USERPROFILE on Windows.
mkdir -p "${USERPROFILE:-$HOME}/.claude"

title "install only one specific stable skill via --skills"
trace $CLI experimental aitools install --global --skills test-stable-a

title "install a specific experimental skill"
trace $CLI experimental aitools install --global --skills test-exp --experimental

title "asking for an experimental skill without --experimental flag errors out"
errcode trace $CLI experimental aitools install --global --skills test-exp
50 changes: 50 additions & 0 deletions acceptance/experimental/aitools/skills/install-specific/test.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
Env.DATABRICKS_SKILLS_BASE_URL = "$DATABRICKS_HOST"
Env.DATABRICKS_SKILLS_REF = "test-ref"

Ignore = [
".databricks/aitools/skills/.state.json",
]

[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = []

[[Server]]
Pattern = "GET /test-ref/manifest.json"
Response.Body = '''
{
"version": "2",
"updated_at": "2026-01-01T00:00:00Z",
"skills": {
"test-stable-a": {"version": "1.0.0", "files": ["SKILL.md"], "repo_dir": "skills"},
"test-stable-b": {"version": "1.0.0", "files": ["SKILL.md"], "repo_dir": "skills"},
"test-exp": {"version": "0.0.1", "files": ["SKILL.md"], "repo_dir": "experimental"}
}
}
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable-a/SKILL.md"
Response.Body = '''---
name: test-stable-a
---

# A
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable-b/SKILL.md"
Response.Body = '''---
name: test-stable-b
---

# B
'''

[[Server]]
Pattern = "GET /test-ref/experimental/test-exp/SKILL.md"
Response.Body = '''---
name: test-exp
---

# Exp
'''
3 changes: 3 additions & 0 deletions acceptance/experimental/aitools/skills/install/out.test.toml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions acceptance/experimental/aitools/skills/install/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

=== stable-only install (no --experimental flag) installs 1 skill
>>> [CLI] experimental aitools install --global
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Installed 1 skill.

=== re-run with --experimental installs the experimental one too
>>> [CLI] experimental aitools install --global --experimental
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Installed 2 skills.

=== no-op re-run is idempotent (no new fetches, no errors)
>>> [CLI] experimental aitools install --global --experimental
Command "install" is deprecated, use "databricks aitools install" instead.
Flag --global has been deprecated, use --scope=global
Installing Databricks AI skills for Claude Code...
Using skills version test-ref
Installed 2 skills.
11 changes: 11 additions & 0 deletions acceptance/experimental/aitools/skills/install/script
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Agent detection needs ~/.claude; prefer USERPROFILE on Windows.
mkdir -p "${USERPROFILE:-$HOME}/.claude"

title "stable-only install (no --experimental flag) installs 1 skill"
trace $CLI experimental aitools install --global

title "re-run with --experimental installs the experimental one too"
trace $CLI experimental aitools install --global --experimental

title "no-op re-run is idempotent (no new fetches, no errors)"
trace $CLI experimental aitools install --global --experimental
52 changes: 52 additions & 0 deletions acceptance/experimental/aitools/skills/install/test.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Mock server replaces raw.githubusercontent.com for manifest + skill files.
Env.DATABRICKS_SKILLS_BASE_URL = "$DATABRICKS_HOST"
Env.DATABRICKS_SKILLS_REF = "test-ref"

Ignore = [
".databricks/aitools/skills/.state.json",
]

[EnvMatrix]
DATABRICKS_BUNDLE_ENGINE = []

# Stable + experimental skills via repo_dir.
[[Server]]
Pattern = "GET /test-ref/manifest.json"
Response.Body = '''
{
"version": "2",
"updated_at": "2026-01-01T00:00:00Z",
"skills": {
"test-stable": {
"version": "1.0.0",
"description": "Stable test skill",
"files": ["SKILL.md"],
"repo_dir": "skills"
},
"test-exp": {
"version": "0.0.1",
"description": "Experimental test skill",
"files": ["SKILL.md"],
"repo_dir": "experimental"
}
}
}
'''

[[Server]]
Pattern = "GET /test-ref/skills/test-stable/SKILL.md"
Response.Body = '''---
name: test-stable
---

# Test stable skill
'''

[[Server]]
Pattern = "GET /test-ref/experimental/test-exp/SKILL.md"
Response.Body = '''---
name: test-exp
---

# Test experimental skill
'''
2 changes: 1 addition & 1 deletion cmd/aitools/list.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ func defaultListSkills(cmd *cobra.Command, scope string) error {
meta := manifest.Skills[name]

tag := ""
if meta.Experimental {
if meta.IsExperimental() {
tag = " [experimental]"
}

Expand Down
Loading
Loading