diff --git a/dockerimg/githttp.go b/dockerimg/githttp.go
index e052304..b7203c0 100644
--- a/dockerimg/githttp.go
+++ b/dockerimg/githttp.go
@@ -83,7 +83,7 @@
 	}
 
 	// Check if this is a .git/info/refs request for git-upload-pack service (which happens during git fetch)
-	// Use `GIT_CURL_VERBOSE=1 git fetch sketch-host` to inspect what's going on under the covers for git.
+	// Use `GIT_CURL_VERBOSE=1 git fetch origin` to inspect what's going on under the covers for git.
 	if r.Method == http.MethodGet && strings.Contains(r.URL.Path, ".git/info/refs") && r.URL.Query().Get("service") == "git-upload-pack" {
 		slog.InfoContext(r.Context(), "detected git info/refs request, running git fetch origin")
 
diff --git a/loop/agent.go b/loop/agent.go
index a09c405..c369603 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -1005,24 +1005,25 @@
 	ctx := a.config.Context
 	slog.InfoContext(ctx, "agent initializing")
 
-	// If a remote git addr was specified, we configure the remote
+	// If a remote git addr was specified, we configure the origin remote
 	if a.gitState.gitRemoteAddr != "" {
 		slog.InfoContext(ctx, "Configuring git remote", slog.String("remote", a.gitState.gitRemoteAddr))
-		cmd := exec.CommandContext(ctx, "git", "remote", "add", "sketch-host", a.gitState.gitRemoteAddr)
+
+		// Remove existing origin remote if it exists
+		cmd := exec.CommandContext(ctx, "git", "remote", "remove", "origin")
 		cmd.Dir = a.workingDir
 		if out, err := cmd.CombinedOutput(); err != nil {
-			return fmt.Errorf("git remote add: %s: %v", out, err)
+			// Ignore error if origin doesn't exist
+			slog.DebugContext(ctx, "git remote remove origin (ignoring if not exists)", slog.String("output", string(out)))
 		}
-		// sketch-host is a git repo hosted by "outtie sketch". When it notices a 'git fetch',
-		// it runs "git fetch" underneath the covers to get its latest commits. By configuring
-		// an additional remote.sketch-host.fetch, we make "origin/main" on innie sketch look like
-		// origin/main on outtie sketch, which should make it easier to rebase.
-		cmd = exec.CommandContext(ctx, "git", "config", "--add", "remote.sketch-host.fetch",
-			"+refs/heads/feature/*:refs/remotes/origin/feature/*")
+
+		// Add the new remote as origin
+		cmd = exec.CommandContext(ctx, "git", "remote", "add", "origin", a.gitState.gitRemoteAddr)
 		cmd.Dir = a.workingDir
 		if out, err := cmd.CombinedOutput(); err != nil {
-			return fmt.Errorf("git config --add: %s: %v", out, err)
+			return fmt.Errorf("git remote add origin: %s: %v", out, err)
 		}
+
 	}
 
 	// If a commit was specified, we fetch and reset to it.
@@ -1034,7 +1035,7 @@
 		if out, err := cmd.CombinedOutput(); err != nil {
 			return fmt.Errorf("git stash: %s: %v", out, err)
 		}
-		cmd = exec.CommandContext(ctx, "git", "fetch", "--prune", "sketch-host")
+		cmd = exec.CommandContext(ctx, "git", "fetch", "--prune", "origin")
 		cmd.Dir = a.workingDir
 		if out, err := cmd.CombinedOutput(); err != nil {
 			return fmt.Errorf("git fetch: %s: %w", out, err)
@@ -1247,7 +1248,6 @@
 	refs := []string{
 		"refs/heads/",
 		"refs/remotes/origin/",
-		"refs/remotes/sketch-host/",
 	}
 	for _, ref := range refs {
 		cmd := exec.Command("git", "show-ref", "--verify", "--quiet", ref+branchName)
