@@ -81,7 +81,7 @@ func runInteractiveConfig() {
8181
8282 providerPrompt := & survey.Select {
8383 Message : "Choose a provider:" ,
84- Options : []string {"openai" , "copilot" , "anthropic" , "gemini" },
84+ Options : []string {"opencode" , " openai" , "copilot" , "anthropic" , "gemini" },
8585 Default : currentProvider ,
8686 }
8787 var selectedProvider string
@@ -152,8 +152,8 @@ func runInteractiveConfig() {
152152 fmt .Printf ("Language set to: %s\n " , langValue )
153153 }
154154
155- // API key configuration - skip for copilot, anthropic and gemini
156- if selectedProvider != "copilot" && selectedProvider != "anthropic" && selectedProvider != "gemini" {
155+ // API key configuration - skip for CLI-backed providers and copilot token exchange.
156+ if selectedProvider != "copilot" && selectedProvider != "anthropic" && selectedProvider != "gemini" && selectedProvider != "opencode" {
157157 apiKeyPrompt := & survey.Input {
158158 Message : fmt .Sprintf ("Enter API Key for %s:" , selectedProvider ),
159159 }
@@ -175,13 +175,16 @@ func runInteractiveConfig() {
175175 fmt .Println ("Anthropic provider uses Claude Code CLI - no API key needed." )
176176 } else if selectedProvider == "gemini" {
177177 fmt .Println ("Gemini provider uses Gemini CLI - no API key needed." )
178+ } else if selectedProvider == "opencode" {
179+ fmt .Println ("opencode provider uses opencode CLI - no API key needed." )
178180 }
179181
180182 availableModels := map [string ][]string {
181183 "openai" : {},
182184 "copilot" : {},
183185 "anthropic" : {},
184186 "gemini" : {},
187+ "opencode" : {},
185188 }
186189
187190 modelDisplayToID := map [string ]string {}
@@ -222,6 +225,12 @@ func runInteractiveConfig() {
222225 availableModels ["gemini" ] = append (availableModels ["gemini" ], display )
223226 modelDisplayToID [display ] = m .APIModel
224227 }
228+ case "opencode" :
229+ for _ , m := range models .OpencodeModels {
230+ display := fmt .Sprintf ("%s (%s)" , m .Name , m .APIModel )
231+ availableModels ["opencode" ] = append (availableModels ["opencode" ], display )
232+ modelDisplayToID [display ] = m .APIModel
233+ }
225234 }
226235
227236 modelPrompt := & survey.Select {
@@ -232,7 +241,7 @@ func runInteractiveConfig() {
232241 // Try to set the default to the current model if possible
233242 isValidDefault := false
234243 currentDisplay := ""
235- if selectedProvider == "openai" || selectedProvider == "anthropic" || selectedProvider == "copilot" || selectedProvider == "gemini" {
244+ if selectedProvider == "openai" || selectedProvider == "anthropic" || selectedProvider == "copilot" || selectedProvider == "gemini" || selectedProvider == "opencode" {
236245 for display , id := range modelDisplayToID {
237246 if id == currentModel || display == currentModel {
238247 isValidDefault = true
@@ -261,7 +270,7 @@ func runInteractiveConfig() {
261270 }
262271
263272 selectedModel := selectedDisplay
264- if selectedProvider == "openai" || selectedProvider == "anthropic" || selectedProvider == "copilot" || selectedProvider == "gemini" {
273+ if selectedProvider == "openai" || selectedProvider == "anthropic" || selectedProvider == "copilot" || selectedProvider == "gemini" || selectedProvider == "opencode" {
265274 selectedModel = modelDisplayToID [selectedDisplay ]
266275 }
267276
@@ -274,8 +283,8 @@ func runInteractiveConfig() {
274283 fmt .Printf ("Model set to: %s\n " , selectedModel )
275284 }
276285
277- // Number of suggestions configuration for anthropic and gemini
278- if selectedProvider == "anthropic" || selectedProvider == "gemini" {
286+ // Number of suggestions configuration for CLI-backed providers.
287+ if selectedProvider == "anthropic" || selectedProvider == "gemini" || selectedProvider == "opencode" {
279288 numSuggestionsPrompt := & survey.Input {
280289 Message : "Number of commit message suggestions (default: 10):" ,
281290 Default : "10" ,
@@ -299,8 +308,8 @@ func runInteractiveConfig() {
299308 // Get current endpoint
300309 currentEndpoint , _ := config .GetEndpoint ()
301310
302- // Endpoint configuration prompt - skip for anthropic and gemini since they use CLI
303- if selectedProvider != "anthropic" && selectedProvider != "gemini" {
311+ // Endpoint configuration prompt - skip CLI-backed providers.
312+ if selectedProvider != "anthropic" && selectedProvider != "gemini" && selectedProvider != "opencode" {
304313 endpointPrompt := & survey.Input {
305314 Message : "Enter custom endpoint URL (leave empty for default):" ,
306315 Default : currentEndpoint ,
0 commit comments