diff --git a/loop/agent.go b/loop/agent.go
index 4a27ab0..a09c405 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -12,6 +12,7 @@
 	"os"
 	"os/exec"
 	"path/filepath"
+	"regexp"
 	"runtime/debug"
 	"slices"
 	"strconv"
@@ -1921,13 +1922,16 @@
 		// if it's not, we could make a backup with a unique name (perhaps append a timestamp) and
 		// then use push with lease to replace.
 
+		// Parse the original branch name to extract base name and starting number
+		baseBranch, startNum := parseBranchNameAndNumber(originalBranch)
+
 		// Try up to 10 times with different branch names if the branch is checked out on the remote
 		var out []byte
 		var err error
 		for retries := range 10 {
 			if retries > 0 {
-				// Add a numeric suffix to the branch name
-				branch = fmt.Sprintf("%s%d", originalBranch, retries)
+				// Increment from the starting number (foo1->foo2, foo2->foo3, etc.)
+				branch = fmt.Sprintf("%s%d", baseBranch, startNum+retries)
 			}
 
 			cmd = exec.Command("git", "push", "--force", ags.gitRemoteAddr, "HEAD:refs/heads/"+branch)
@@ -1958,6 +1962,12 @@
 			// Update the agent's branch name if we ended up using a different one
 			if branch != originalBranch {
 				ags.branchName = branch
+				// Notify user why the branch name was changed
+				msgs = append(msgs, AgentMessage{
+					Type:      AutoMessageType,
+					Timestamp: time.Now(),
+					Content:   fmt.Sprintf("Branch renamed from %s to %s because the original branch is currently checked out on the remote.", originalBranch, branch),
+				})
 			}
 		}
 	}
@@ -1992,6 +2002,27 @@
 	}, s)
 }
 
+// parseBranchNameAndNumber extracts the base branch name and starting number.
+// For "sketch/foo1" returns ("sketch/foo", 1)
+// For "sketch/foo" returns ("sketch/foo", 0)
+func parseBranchNameAndNumber(branchName string) (baseBranch string, startNum int) {
+	re := regexp.MustCompile(`^(.+?)(\d+)$`)
+	matches := re.FindStringSubmatch(branchName)
+
+	if len(matches) != 3 {
+		// No trailing digits found
+		return branchName, 0
+	}
+
+	num, err := strconv.Atoi(matches[2])
+	if err != nil {
+		// If parsing fails, treat as no number
+		return branchName, 0
+	}
+
+	return matches[1], num
+}
+
 // parseGitLog parses the output of git log with format '%H%x00%s%x00%b%x00'
 // and returns an array of GitCommit structs.
 func parseGitLog(output string) []GitCommit {
diff --git a/loop/agent_test.go b/loop/agent_test.go
index da8a444..8e6a75d 100644
--- a/loop/agent_test.go
+++ b/loop/agent_test.go
@@ -807,3 +807,94 @@
 		t.Errorf("Expected Content to be %q, got %q", expected, received.Content)
 	}
 }
+
+func TestBranchNamingIncrement(t *testing.T) {
+	testCases := []struct {
+		name             string
+		originalBranch   string
+		expectedBranches []string
+	}{
+		{
+			name:           "base branch without number",
+			originalBranch: "sketch/test-branch",
+			expectedBranches: []string{
+				"sketch/test-branch",  // retries = 0
+				"sketch/test-branch1", // retries = 1
+				"sketch/test-branch2", // retries = 2
+				"sketch/test-branch3", // retries = 3
+			},
+		},
+		{
+			name:           "branch already has number",
+			originalBranch: "sketch/test-branch1",
+			expectedBranches: []string{
+				"sketch/test-branch1", // retries = 0
+				"sketch/test-branch2", // retries = 1
+				"sketch/test-branch3", // retries = 2
+				"sketch/test-branch4", // retries = 3
+			},
+		},
+		{
+			name:           "branch with larger number",
+			originalBranch: "sketch/test-branch42",
+			expectedBranches: []string{
+				"sketch/test-branch42", // retries = 0
+				"sketch/test-branch43", // retries = 1
+				"sketch/test-branch44", // retries = 2
+				"sketch/test-branch45", // retries = 3
+			},
+		},
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.name, func(t *testing.T) {
+			// Parse the original branch name to extract base name and starting number
+			baseBranch, startNum := parseBranchNameAndNumber(tc.originalBranch)
+
+			// Simulate the retry logic
+			for retries := range len(tc.expectedBranches) {
+				var branch string
+				if retries > 0 {
+					// This is the same logic used in the actual code
+					branch = fmt.Sprintf("%s%d", baseBranch, startNum+retries)
+				} else {
+					branch = tc.originalBranch
+				}
+
+				if branch != tc.expectedBranches[retries] {
+					t.Errorf("Retry %d: expected %s, got %s", retries, tc.expectedBranches[retries], branch)
+				}
+			}
+		})
+	}
+}
+
+func TestParseBranchNameAndNumber(t *testing.T) {
+	testCases := []struct {
+		branchName     string
+		expectedBase   string
+		expectedNumber int
+	}{
+		{"sketch/test-branch", "sketch/test-branch", 0},
+		{"sketch/test-branch1", "sketch/test-branch", 1},
+		{"sketch/test-branch42", "sketch/test-branch", 42},
+		{"sketch/test-branch-foo", "sketch/test-branch-foo", 0},
+		{"sketch/test-branch-foo123", "sketch/test-branch-foo", 123},
+		{"main", "main", 0},
+		{"main2", "main", 2},
+		{"feature/abc123def", "feature/abc123def", 0},      // number in middle, not at end
+		{"feature/abc123def456", "feature/abc123def", 456}, // number at end
+	}
+
+	for _, tc := range testCases {
+		t.Run(tc.branchName, func(t *testing.T) {
+			base, num := parseBranchNameAndNumber(tc.branchName)
+			if base != tc.expectedBase {
+				t.Errorf("Base: expected %s, got %s", tc.expectedBase, base)
+			}
+			if num != tc.expectedNumber {
+				t.Errorf("Number: expected %d, got %d", tc.expectedNumber, num)
+			}
+		})
+	}
+}
