diff --git a/loop/agent.go b/loop/agent.go
index f5c6e07..fd01f33 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -66,6 +66,9 @@
 	// Loop begins the agent loop returns only when ctx is cancelled.
 	Loop(ctx context.Context)
 
+	// BranchPrefix returns the configured branch prefix
+	BranchPrefix() string
+
 	CancelTurn(cause error)
 
 	CancelToolUse(toolUseID string, cause error) error
@@ -935,11 +938,18 @@
 	GitRemoteAddr string
 	// Commit to checkout from Outtie
 	Commit string
+	// Prefix for git branches created by sketch
+	BranchPrefix string
 }
 
 // NewAgent creates a new Agent.
 // It is not usable until Init() is called.
 func NewAgent(config AgentConfig) *Agent {
+	// Set default branch prefix if not specified
+	if config.BranchPrefix == "" {
+		config.BranchPrefix = "sketch/"
+	}
+
 	agent := &Agent{
 		config:         config,
 		ready:          make(chan struct{}),
@@ -1312,13 +1322,13 @@
 			if params.BranchName != cleanBranchName(params.BranchName) {
 				return nil, fmt.Errorf("branch_name parameter must be alphanumeric hyphenated slug")
 			}
-			branchName := "sketch/" + params.BranchName
+			branchName := a.config.BranchPrefix + params.BranchName
 			if branchExists(a.workingDir, branchName) {
 				return nil, fmt.Errorf("branch %q already exists; please choose a different branch name", branchName)
 			}
 
 			a.SetBranch(branchName)
-			response := fmt.Sprintf("switched to branch sketch/%q - DO NOT change branches unless explicitly requested", branchName)
+			response := fmt.Sprintf("switched to branch %q - DO NOT change branches unless explicitly requested", branchName)
 
 			styleHint, err := claudetool.CommitMessageStyleHint(ctx, a.repoRoot)
 			if err != nil {
@@ -1338,6 +1348,11 @@
 	return a.ready
 }
 
+// BranchPrefix returns the configured branch prefix
+func (a *Agent) BranchPrefix() string {
+	return a.config.BranchPrefix
+}
+
 func (a *Agent) UserMessage(ctx context.Context, msg string) {
 	a.pushToOutbox(ctx, AgentMessage{Type: UserMessageType, Content: msg})
 	a.inbox <- msg
@@ -1815,7 +1830,7 @@
 }
 
 func (a *Agent) handleGitCommits(ctx context.Context) ([]*GitCommit, error) {
-	msgs, commits, error := a.gitState.handleGitCommits(ctx, a.SessionID(), a.repoRoot, a.SketchGitBaseRef())
+	msgs, commits, error := a.gitState.handleGitCommits(ctx, a.SessionID(), a.repoRoot, a.SketchGitBaseRef(), a.config.BranchPrefix)
 	for _, msg := range msgs {
 		a.pushToOutbox(ctx, msg)
 	}
@@ -1824,7 +1839,7 @@
 
 // handleGitCommits() highlights new commits to the user. When running
 // under docker, new HEADs are pushed to a branch according to the title.
-func (ags *AgentGitState) handleGitCommits(ctx context.Context, sessionID string, repoRoot string, baseRef string) ([]AgentMessage, []*GitCommit, error) {
+func (ags *AgentGitState) handleGitCommits(ctx context.Context, sessionID string, repoRoot string, baseRef string, branchPrefix string) ([]AgentMessage, []*GitCommit, error) {
 	ags.mu.Lock()
 	defer ags.mu.Unlock()
 
@@ -1892,7 +1907,7 @@
 			commits = append(commits, headCommit)
 		}
 
-		originalBranch := cmp.Or(ags.branchName, "sketch/"+sessionID)
+		originalBranch := cmp.Or(ags.branchName, branchPrefix+sessionID)
 		branch := originalBranch
 
 		// TODO: I don't love the force push here. We could see if the push is a fast-forward, and,
diff --git a/loop/server/loophttp.go b/loop/server/loophttp.go
index 0819459..94d1037 100644
--- a/loop/server/loophttp.go
+++ b/loop/server/loophttp.go
@@ -76,6 +76,7 @@
 	InitialCommit        string                        `json:"initial_commit"`
 	Title                string                        `json:"title"`
 	BranchName           string                        `json:"branch_name,omitempty"`
+	BranchPrefix         string                        `json:"branch_prefix,omitempty"`
 	Hostname             string                        `json:"hostname"`    // deprecated
 	WorkingDir           string                        `json:"working_dir"` // deprecated
 	OS                   string                        `json:"os"`          // deprecated
@@ -1267,6 +1268,7 @@
 		InitialCommit:        s.agent.SketchGitBase(),
 		Title:                s.agent.Title(),
 		BranchName:           s.agent.BranchName(),
+		BranchPrefix:         s.agent.BranchPrefix(),
 		OS:                   s.agent.OS(),
 		OutsideHostname:      s.agent.OutsideHostname(),
 		InsideHostname:       s.hostname,
diff --git a/loop/server/loophttp_test.go b/loop/server/loophttp_test.go
index 8575253..59c5ac9 100644
--- a/loop/server/loophttp_test.go
+++ b/loop/server/loophttp_test.go
@@ -28,6 +28,7 @@
 	initialCommit            string
 	title                    string
 	branchName               string
+	branchPrefix             string
 	workingDir               string
 	sessionID                string
 }
@@ -232,6 +233,7 @@
 func (m *mockAgent) Diff(commit *string) (string, error)         { return "", nil }
 func (m *mockAgent) OS() string                                  { return "linux" }
 func (m *mockAgent) SessionID() string                           { return m.sessionID }
+func (m *mockAgent) BranchPrefix() string                        { return m.branchPrefix }
 func (m *mockAgent) CurrentTodoContent() string                  { return "" } // Mock returns empty for simplicity
 func (m *mockAgent) OutstandingLLMCallCount() int                { return 0 }
 func (m *mockAgent) OutstandingToolCalls() []string              { return nil }
@@ -262,6 +264,7 @@
 		initialCommit:            "abcd1234",
 		title:                    "Test Title",
 		branchName:               "sketch/test-branch",
+		branchPrefix:             "sketch/",
 	}
 
 	// Add the initial messages before creating the server
@@ -395,7 +398,8 @@
 func TestGitRawDiffHandler(t *testing.T) {
 	// Create a mock agent
 	mockAgent := &mockAgent{
-		workingDir: t.TempDir(), // Use a temp directory
+		workingDir:   t.TempDir(), // Use a temp directory
+		branchPrefix: "sketch/",
 	}
 
 	// Create the server with the mock agent
@@ -441,7 +445,8 @@
 func TestGitShowHandler(t *testing.T) {
 	// Create a mock agent
 	mockAgent := &mockAgent{
-		workingDir: t.TempDir(), // Use a temp directory
+		workingDir:   t.TempDir(), // Use a temp directory
+		branchPrefix: "sketch/",
 	}
 
 	// Create the server with the mock agent
@@ -480,6 +485,7 @@
 		messages:     []loop.AgentMessage{},
 		messageCount: 0,
 		sessionID:    "test-session",
+		branchPrefix: "sketch/",
 	}
 
 	ctx := context.Background()
@@ -495,7 +501,9 @@
 // TestPortEventsEndpoint tests the /port-events HTTP endpoint
 func TestPortEventsEndpoint(t *testing.T) {
 	// Create a mock agent that implements the CodingAgent interface
-	agent := &mockAgent{}
+	agent := &mockAgent{
+		branchPrefix: "sketch/",
+	}
 
 	// Create a server with the mock agent
 	server, err := server.New(agent, nil)
@@ -537,7 +545,9 @@
 
 // TestPortEventsEndpointMethodNotAllowed tests that non-GET requests are rejected
 func TestPortEventsEndpointMethodNotAllowed(t *testing.T) {
-	agent := &mockAgent{}
+	agent := &mockAgent{
+		branchPrefix: "sketch/",
+	}
 	server, err := server.New(agent, nil)
 	if err != nil {
 		t.Fatalf("Failed to create server: %v", err)
