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
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,12 @@ AI-Driven Development (vibe coding) on Databricks just got a whole lot better. T
- [Antigravity](https://antigravity.google)
- [Codex](https://openai.com/codex/)
- [Copilot](https://github.com/features/copilot/cli)
- [Windsurf](https://windsurf.com)


### Install in existing project
By default this will install at a project level rather than a user level. This is often a good fit, but requires you to run your client from the exact directory that was used for the install.
_Note: Project configuration files can be re-used in other projects. You find these configs under .claude, .cursor, .gemini, .codex, .github or .agents_
_Note: Project configuration files can be re-used in other projects. You find these configs under .claude, .cursor, .gemini, .codex, .github, .agents, .windsurf, or .codeium_

#### Mac / Linux

Expand Down Expand Up @@ -93,7 +94,7 @@ bash <(curl -sL https://github.com/ghraw/databricks-solutions/ai-dev-ki
**Install for specific tools only**

```bash
bash <(curl -sL https://github.com/ghraw/databricks-solutions/ai-dev-kit/main/install.sh) --tools cursor,gemini,antigravity
bash <(curl -sL https://github.com/ghraw/databricks-solutions/ai-dev-kit/main/install.sh) --tools cursor,gemini,antigravity,windsurf
```

</details>
Expand Down
29 changes: 26 additions & 3 deletions install.ps1
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#
# Databricks AI Dev Kit - Unified Installer (Windows)
#
# Installs skills, MCP server, and configuration for Claude Code, Cursor, OpenAI Codex, GitHub Copilot, Gemini CLI, and Antigravity.
# Installs skills, MCP server, and configuration for Claude Code, Cursor, OpenAI Codex, GitHub Copilot, Gemini CLI, Antigravity, and Windsurf.
#
# Usage: irm https://github.com/ghraw/databricks-solutions/ai-dev-kit/main/install.ps1 -OutFile install.ps1
# .\install.ps1 [OPTIONS]
Expand Down Expand Up @@ -233,7 +233,7 @@ while ($i -lt $args.Count) {
Write-Host " --mcp-only Skip skills installation"
Write-Host " --mcp-path PATH Path to MCP server installation"
Write-Host " --silent Silent mode (no output except errors)"
Write-Host " --tools LIST Comma-separated: claude,cursor,copilot,codex,gemini,antigravity"
Write-Host " --tools LIST Comma-separated: claude,cursor,copilot,codex,gemini,antigravity,windsurf"
Write-Host " --skills-profile LIST Comma-separated profiles: all,data-engineer,analyst,ai-ml-engineer,app-developer"
Write-Host " --skills LIST Comma-separated skill names to install (overrides profile)"
Write-Host " --list-skills List available skills and profiles, then exit"
Expand Down Expand Up @@ -569,16 +569,19 @@ function Invoke-DetectTools {
$hasGemini = $null -ne (Get-Command gemini -ErrorAction SilentlyContinue)
$hasAntigravity = ($null -ne (Get-Command antigravity -ErrorAction SilentlyContinue)) -or
(Test-Path "$env:LOCALAPPDATA\Programs\Antigravity\Antigravity.exe")
$hasWindsurf = ($null -ne (Get-Command windsurf -ErrorAction SilentlyContinue)) -or
(Test-Path "$env:LOCALAPPDATA\Programs\Windsurf\Windsurf.exe")

$claudeState = $hasClaude; $claudeHint = if ($hasClaude) { "detected" } else { "not found" }
$cursorState = $hasCursor; $cursorHint = if ($hasCursor) { "detected" } else { "not found" }
$codexState = $hasCodex; $codexHint = if ($hasCodex) { "detected" } else { "not found" }
$copilotState = $hasCopilot; $copilotHint = if ($hasCopilot) { "detected" } else { "not found" }
$geminiState = $hasGemini; $geminiHint = if ($hasGemini) { "detected" } else { "not found" }
$antigravityState = $hasAntigravity; $antigravityHint = if ($hasAntigravity) { "detected" } else { "not found" }
$windsurfState = $hasWindsurf; $windsurfHint = if ($hasWindsurf) { "detected" } else { "not found" }

# If nothing detected, default to claude
if (-not $hasClaude -and -not $hasCursor -and -not $hasCodex -and -not $hasCopilot -and -not $hasGemini -and -not $hasAntigravity) {
if (-not $hasClaude -and -not $hasCursor -and -not $hasCodex -and -not $hasCopilot -and -not $hasGemini -and -not $hasAntigravity -and -not $hasWindsurf) {
$claudeState = $true
$claudeHint = "default"
}
Expand All @@ -595,6 +598,7 @@ function Invoke-DetectTools {
@{ Label = "OpenAI Codex"; Value = "codex"; State = $codexState; Hint = $codexHint }
@{ Label = "Gemini CLI"; Value = "gemini"; State = $geminiState; Hint = $geminiHint }
@{ Label = "Antigravity"; Value = "antigravity"; State = $antigravityState; Hint = $antigravityHint }
@{ Label = "Windsurf"; Value = "windsurf"; State = $windsurfState; Hint = $windsurfHint }
)

$result = Select-Checkbox -Items $items
Expand Down Expand Up @@ -1164,6 +1168,13 @@ function Install-Skills {
$dirs += Join-Path $BaseDir ".agents\skills"
}
}
"windsurf" {
if ($script:Scope -eq "global") {
$dirs += Join-Path $env:USERPROFILE ".codeium\windsurf\skills"
} else {
$dirs += Join-Path $BaseDir ".windsurf\skills"
}
}
}
}
$dirs = $dirs | Select-Object -Unique
Expand Down Expand Up @@ -1589,6 +1600,14 @@ function Write-McpConfigs {
Write-GeminiMcpJson (Join-Path $env:USERPROFILE ".gemini\antigravity\mcp_config.json")
Write-Ok "Antigravity MCP config"
}
"windsurf" {
if ($script:Scope -eq "project") {
Write-Warn "Windsurf only supports global MCP configuration."
Write-Msg " Config written to ~/.codeium/windsurf/mcp_config.json"
}
Write-McpJson (Join-Path $env:USERPROFILE ".codeium\windsurf\mcp_config.json")
Write-Ok "Windsurf MCP config"
}
}
}
}
Expand Down Expand Up @@ -1644,6 +1663,10 @@ function Show-Summary {
Write-Msg "$step. Open your project in Antigravity to use Databricks skills and MCP tools"
$step++
}
if ($script:Tools -match 'windsurf') {
Write-Msg "$step. Restart Windsurf to pick up the databricks MCP server (Windsurf -> Settings -> Windsurf Settings -> MCP)"
$step++
}
Write-Msg "$step. Open your project in your tool of choice"
$step++
Write-Msg "$step. Try: `"List my SQL warehouses`""
Expand Down
34 changes: 29 additions & 5 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#
# Databricks AI Dev Kit - Unified Installer
#
# Installs skills, MCP server, and configuration for Claude Code, Cursor, OpenAI Codex, GitHub Copilot, Gemini CLI, and Antigravity.
# Installs skills, MCP server, and configuration for Claude Code, Cursor, OpenAI Codex, GitHub Copilot, Gemini CLI, Antigravity, and Windsurf.
#
# Usage: bash <(curl -sL https://github.com/ghraw/databricks-solutions/ai-dev-kit/main/install.sh) [OPTIONS]
#
Expand Down Expand Up @@ -149,7 +149,7 @@ while [ $# -gt 0 ]; do
echo " --mcp-only Skip skills installation"
echo " --mcp-path PATH Path to MCP server installation (default: ~/.ai-dev-kit)"
echo " --silent Silent mode (no output except errors)"
echo " --tools LIST Comma-separated: claude,cursor,copilot,codex,gemini,antigravity"
echo " --tools LIST Comma-separated: claude,cursor,copilot,codex,gemini,antigravity,windsurf"
echo " --skills-profile LIST Comma-separated profiles: all,data-engineer,analyst,ai-ml-engineer,app-developer"
echo " --skills LIST Comma-separated skill names to install (overrides profile)"
echo " --list-skills List available skills and profiles, then exit"
Expand Down Expand Up @@ -503,26 +503,29 @@ detect_tools() {
local has_copilot=false
local has_gemini=false
local has_antigravity=false
local has_windsurf=false

command -v claude >/dev/null 2>&1 && has_claude=true
{ [ -d "/Applications/Cursor.app" ] || command -v cursor >/dev/null 2>&1; } && has_cursor=true
command -v codex >/dev/null 2>&1 && has_codex=true
{ [ -d "/Applications/Visual Studio Code.app" ] || command -v code >/dev/null 2>&1; } && has_copilot=true
{ command -v gemini >/dev/null 2>&1 || [ -f "$HOME/.gemini/local/gemini" ]; } && has_gemini=true
{ [ -d "/Applications/Antigravity.app" ] || command -v antigravity >/dev/null 2>&1; } && has_antigravity=true
{ [ -d "/Applications/Windsurf.app" ] || command -v windsurf >/dev/null 2>&1; } && has_windsurf=true

# Build checkbox items: "Label|value|on_or_off|hint"
local claude_state="off" cursor_state="off" codex_state="off" copilot_state="off" gemini_state="off" antigravity_state="off"
local claude_hint="not found" cursor_hint="not found" codex_hint="not found" copilot_hint="not found" gemini_hint="not found" antigravity_hint="not found"
local claude_state="off" cursor_state="off" codex_state="off" copilot_state="off" gemini_state="off" antigravity_state="off" windsurf_state="off"
local claude_hint="not found" cursor_hint="not found" codex_hint="not found" copilot_hint="not found" gemini_hint="not found" antigravity_hint="not found" windsurf_hint="not found"
[ "$has_claude" = true ] && claude_state="on" && claude_hint="detected"
[ "$has_cursor" = true ] && cursor_state="on" && cursor_hint="detected"
[ "$has_codex" = true ] && codex_state="on" && codex_hint="detected"
[ "$has_copilot" = true ] && copilot_state="on" && copilot_hint="detected"
[ "$has_gemini" = true ] && gemini_state="on" && gemini_hint="detected"
[ "$has_antigravity" = true ] && antigravity_state="on" && antigravity_hint="detected"
[ "$has_windsurf" = true ] && windsurf_state="on" && windsurf_hint="detected"

# If nothing detected, pre-select claude as default
if [ "$has_claude" = false ] && [ "$has_cursor" = false ] && [ "$has_codex" = false ] && [ "$has_copilot" = false ] && [ "$has_gemini" = false ] && [ "$has_antigravity" = false ]; then
if [ "$has_claude" = false ] && [ "$has_cursor" = false ] && [ "$has_codex" = false ] && [ "$has_copilot" = false ] && [ "$has_gemini" = false ] && [ "$has_antigravity" = false ] && [ "$has_windsurf" = false ]; then
claude_state="on"
claude_hint="default"
fi
Expand All @@ -539,6 +542,7 @@ detect_tools() {
"OpenAI Codex|codex|${codex_state}|${codex_hint}" \
"Gemini CLI|gemini|${gemini_state}|${gemini_hint}" \
"Antigravity|antigravity|${antigravity_state}|${antigravity_hint}" \
"Windsurf|windsurf|${windsurf_state}|${windsurf_hint}" \
)
else
# Silent: use detected defaults
Expand All @@ -549,6 +553,7 @@ detect_tools() {
[ "$has_codex" = true ] && tools="${tools:+$tools }codex"
[ "$has_gemini" = true ] && tools="${tools:+$tools }gemini"
[ "$has_antigravity" = true ] && tools="${tools:+$tools }antigravity"
[ "$has_windsurf" = true ] && tools="${tools:+$tools }windsurf"
[ -z "$tools" ] && tools="claude"
TOOLS="$tools"
fi
Expand Down Expand Up @@ -1096,6 +1101,13 @@ install_skills() {
dirs+=("$base_dir/.agents/skills")
fi
;;
windsurf)
if [ "$SCOPE" = "global" ]; then
dirs+=("$HOME/.codeium/windsurf/skills")
else
dirs+=("$base_dir/.windsurf/skills")
fi
;;
esac
done

Expand Down Expand Up @@ -1486,6 +1498,14 @@ write_mcp_configs() {
write_gemini_mcp_json "$HOME/.gemini/antigravity/mcp_config.json"
ok "Antigravity MCP config"
;;
windsurf)
if [ "$SCOPE" = "project" ]; then
warn "Windsurf only supports global MCP configuration."
msg " Config written to ${B}~/.codeium/windsurf/mcp_config.json${N}"
fi
write_mcp_json "$HOME/.codeium/windsurf/mcp_config.json"
ok "Windsurf MCP config"
;;
esac
done
}
Expand Down Expand Up @@ -1533,6 +1553,10 @@ summary() {
msg "${step}. Open your project in Antigravity to use Databricks skills and MCP tools"
step=$((step + 1))
fi
if echo "$TOOLS" | grep -q windsurf; then
msg "${step}. Restart Windsurf to pick up the ${B}databricks${N} MCP server (Windsurf → Settings → Windsurf Settings → MCP)"
step=$((step + 1))
fi
msg "${step}. Open your project in your tool of choice"
step=$((step + 1))
msg "${step}. Try: \"List my SQL warehouses\""
Expand Down