diff --git a/cmd/sketch/main.go b/cmd/sketch/main.go
index f3f3139..7bfb1a6 100644
--- a/cmd/sketch/main.go
+++ b/cmd/sketch/main.go
@@ -287,14 +287,14 @@
 // with access to outside environment variables.
 func runInContainerMode(ctx context.Context, flags CLIFlags, logFile *os.File) error {
 	// Get credentials from environment
-	apiKey := os.Getenv("SKETCH_ANTHROPIC_API_KEY")
+	apiKey := os.Getenv("SKETCH_MODEL_API_KEY")
 	pubKey := os.Getenv("SKETCH_PUB_KEY")
-	antURL, err := skabandclient.LocalhostToDockerInternal(os.Getenv("SKETCH_ANT_URL"))
-	if err != nil && os.Getenv("SKETCH_ANT_URL") != "" {
+	modelURL, err := skabandclient.LocalhostToDockerInternal(os.Getenv("SKETCH_MODEL_URL"))
+	if err != nil && os.Getenv("SKETCH_MODEL_URL") != "" {
 		return err
 	}
 
-	return setupAndRunAgent(ctx, flags, antURL, apiKey, pubKey, true, logFile)
+	return setupAndRunAgent(ctx, flags, modelURL, apiKey, pubKey, true, logFile)
 }
 
 // runInUnsafeMode handles execution on the host machine without Docker.
@@ -329,7 +329,7 @@
 
 // setupAndRunAgent handles the common logic for setting up and running the agent
 // in both container and unsafe modes.
-func setupAndRunAgent(ctx context.Context, flags CLIFlags, antURL, apiKey, pubKey string, inInsideSketch bool, logFile *os.File) error {
+func setupAndRunAgent(ctx context.Context, flags CLIFlags, modelURL, apiKey, pubKey string, inInsideSketch bool, logFile *os.File) error {
 	// Configure HTTP client with optional recording
 	var client *http.Client
 	if flags.httprrFile != "" {
@@ -357,7 +357,7 @@
 		return err
 	}
 
-	llmService, err := selectLLMService(client, flags.modelName, antURL, apiKey)
+	llmService, err := selectLLMService(client, flags.modelName, modelURL, apiKey)
 	if err != nil {
 		return fmt.Errorf("failed to initialize LLM service: %w", err)
 	}
@@ -578,14 +578,14 @@
 // If modelName is "gemini", it uses the Gemini service.
 // Otherwise, it tries to use the OpenAI service with the specified model.
 // Returns an error if the model name is not recognized or if required configuration is missing.
-func selectLLMService(client *http.Client, modelName string, antURL, apiKey string) (llm.Service, error) {
+func selectLLMService(client *http.Client, modelName string, modelURL, apiKey string) (llm.Service, error) {
 	if modelName == "" || modelName == "claude" {
 		if apiKey == "" {
 			return nil, fmt.Errorf("missing ANTHROPIC_API_KEY")
 		}
 		return &ant.Service{
 			HTTPC:  client,
-			URL:    antURL,
+			URL:    modelURL,
 			APIKey: apiKey,
 		}, nil
 	}
@@ -596,6 +596,7 @@
 		}
 		return &gem.Service{
 			HTTPC:  client,
+			URL:    modelURL,
 			Model:  gem.DefaultModel,
 			APIKey: apiKey,
 		}, nil
diff --git a/dockerimg/dockerimg.go b/dockerimg/dockerimg.go
index 611901a..7aecb16 100644
--- a/dockerimg/dockerimg.go
+++ b/dockerimg/dockerimg.go
@@ -430,7 +430,7 @@
 		"-i",
 		"--name", cntrName,
 		"-p", hostPort + ":80", // forward container port 80 to a host port
-		"-e", "SKETCH_ANTHROPIC_API_KEY=" + config.ModelAPIKey,
+		"-e", "SKETCH_MODEL_API_KEY=" + config.ModelAPIKey,
 	}
 	if !config.OneShot {
 		cmdArgs = append(cmdArgs, "-t")
@@ -440,7 +440,7 @@
 		cmdArgs = append(cmdArgs, "-e", envVar)
 	}
 	if config.ModelURL != "" {
-		cmdArgs = append(cmdArgs, "-e", "SKETCH_ANT_URL="+config.ModelURL)
+		cmdArgs = append(cmdArgs, "-e", "SKETCH_MODEL_URL="+config.ModelURL)
 	}
 	if config.SketchPubKey != "" {
 		cmdArgs = append(cmdArgs, "-e", "SKETCH_PUB_KEY="+config.SketchPubKey)
@@ -675,6 +675,7 @@
 		if model == "gemini" {
 			if strings.HasSuffix(modelURL, "/gemmsgs") {
 				// Horrible hack! Switch back to anthropic for container building.
+				// We can do this because we are talking to skaband and know the address.
 				modelURL = strings.Replace(modelURL, "/gemmsgs", "/antmsgs", 1)
 			} else {
 				return "", fmt.Errorf("building docker image with gemini model is not supported yet; start with -model=anthropic first then use gemini")
diff --git a/dockerimg/dockerimg_test.go b/dockerimg/dockerimg_test.go
index 7e41742..c48e96b 100644
--- a/dockerimg/dockerimg_test.go
+++ b/dockerimg/dockerimg_test.go
@@ -89,7 +89,7 @@
 			if err != nil {
 				t.Fatal(err)
 			}
-			apiKey := cmp.Or(os.Getenv("OUTER_SKETCH_ANTHROPIC_API_KEY"), os.Getenv("ANTHROPIC_API_KEY"))
+			apiKey := cmp.Or(os.Getenv("OUTER_SKETCH_MODEL_API_KEY"), os.Getenv("ANTHROPIC_API_KEY"))
 			srv := &ant.Service{
 				APIKey: apiKey,
 				HTTPC:  rr.Client(),
diff --git a/llm/conversation/convo_test.go b/llm/conversation/convo_test.go
index 3fb1750..af8a904 100644
--- a/llm/conversation/convo_test.go
+++ b/llm/conversation/convo_test.go
@@ -23,7 +23,7 @@
 		return nil
 	})
 
-	apiKey := cmp.Or(os.Getenv("OUTER_SKETCH_ANTHROPIC_API_KEY"), os.Getenv("ANTHROPIC_API_KEY"))
+	apiKey := cmp.Or(os.Getenv("OUTER_SKETCH_MODEL_API_KEY"), os.Getenv("ANTHROPIC_API_KEY"))
 	srv := &ant.Service{
 		APIKey: apiKey,
 		HTTPC:  rr.Client(),
diff --git a/llm/gem/gem.go b/llm/gem/gem.go
index 4327123..fa9f3b6 100644
--- a/llm/gem/gem.go
+++ b/llm/gem/gem.go
@@ -25,6 +25,7 @@
 // Fields should not be altered concurrently with calling any method on Service.
 type Service struct {
 	HTTPC     *http.Client // defaults to http.DefaultClient if nil
+	URL       string       // Gemini API URL, uses the gemini package default if empty
 	APIKey    string       // must be non-empty
 	Model     string       // defaults to DefaultModel if empty
 	MaxTokens int          // defaults to DefaultMaxTokens if zero
@@ -486,9 +487,10 @@
 
 	// Create a Gemini model instance
 	model := gemini.Model{
-		Model:  "models/" + cmp.Or(s.Model, DefaultModel),
-		APIKey: s.APIKey,
-		HTTPC:  cmp.Or(s.HTTPC, http.DefaultClient),
+		Model:    "models/" + cmp.Or(s.Model, DefaultModel),
+		Endpoint: s.URL,
+		APIKey:   s.APIKey,
+		HTTPC:    cmp.Or(s.HTTPC, http.DefaultClient),
 	}
 
 	// Send the request to Gemini with retry logic
diff --git a/loop/agent_test.go b/loop/agent_test.go
index 56708e3..918088d 100644
--- a/loop/agent_test.go
+++ b/loop/agent_test.go
@@ -66,7 +66,7 @@
 		t.Fatal(err)
 	}
 
-	apiKey := cmp.Or(os.Getenv("OUTER_SKETCH_ANTHROPIC_API_KEY"), os.Getenv("ANTHROPIC_API_KEY"))
+	apiKey := cmp.Or(os.Getenv("OUTER_SKETCH_MODEL_API_KEY"), os.Getenv("ANTHROPIC_API_KEY"))
 	cfg := AgentConfig{
 		Context: ctx,
 		Service: &ant.Service{
