diff --git a/Makefile b/Makefile
index 18bf327..a6ffce2 100644
--- a/Makefile
+++ b/Makefile
@@ -43,22 +43,24 @@
 manifest_dest=docker://docker.io/$(repo_name)/sketch:latest
 endif
 
-clean:
-	rm -f sketch
+# clean:
+# 	rm -f sketch
 
 build_arm64: export CGO_ENABLED=0
 build_arm64: export GO111MODULE=on
 build_arm64: export GOOS=linux
 build_arm64: export GOARCH=arm64
 build_arm64:
-	go build -o sketch_arm64 cmd/sketch/*.go
+	make
+	cp sketch sketch_arm64
 
 build_amd64: export CGO_ENABLED=0
 build_amd64: export GO111MODULE=on
 build_amd64: export GOOS=linux
 build_amd64: export GOARCH=amd64
 build_amd64:
-	go build -o sketch_amd64 cmd/sketch/*.go
+	make
+	cp sketch sketch_amd64
 
 push_arm64: clean build_arm64
 	$(podman) build --platform linux/arm64 --tag=$(repo_name)/sketch:arm64 $(docker_flags) .
diff --git a/dodo_tools/dodo.go b/dodo_tools/dodo.go
index 2d113cb..eee786c 100644
--- a/dodo_tools/dodo.go
+++ b/dodo_tools/dodo.go
@@ -37,27 +37,27 @@
 	Config string `json:"config"`
 }
 
-func (d *GetProjectConfigTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *GetProjectConfigTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	resp, err := http.Get(fmt.Sprintf("%s/api/project/%s/config", d.apiBaseAddress, d.projectId))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to get project config: %s", string(body))
+		return llm.ErrorfToolOut("failed to get project config: %s", string(body))
 	}
 	output := GetProjectConfigOutput{
 		Config: string(body),
 	}
 	jsonOutput, err := json.Marshal(output)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
-	return llm.TextContent(string(jsonOutput)), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string(jsonOutput))}
 }
 
 // Env
@@ -157,28 +157,28 @@
 	EnvVars     []EnvVar  `json:"envVars"`
 }
 
-func (d *GetProjectEnvTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *GetProjectEnvTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	resp, err := http.Get(fmt.Sprintf("%s/api/project/%s/env", d.apiBaseAddress, d.projectId))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to get project env: %s", string(body))
+		return llm.ErrorfToolOut("failed to get project env: %s", string(body))
 	}
 	var output GetProjectEnvOutput
 	if err := json.Unmarshal(body, &output); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	jsonOutput, err := json.Marshal(output)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
-	return llm.TextContent(string(jsonOutput)), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string(jsonOutput))}
 }
 
 // Validate
@@ -224,32 +224,32 @@
 	Errors  any  `json:"errors,omitempty"`
 }
 
-func (d *ValidateConfigTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *ValidateConfigTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	var input ValidateConfigInput
 	if err := json.Unmarshal(m, &input); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	resp, err := http.Post(fmt.Sprintf("%s/api/validate-config", d.apiBaseAddress), "application/json", bytes.NewBuffer([]byte(input.Config)))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to validate config: %s", string(body))
+		return llm.ErrorfToolOut("failed to validate config: %s", string(body))
 	}
 	var output ValidateConfigOutput
 	if err := json.Unmarshal(body, &output); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	jsonOutput, err := json.Marshal(output)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
-	return llm.TextContent(string(jsonOutput)), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string(jsonOutput))}
 }
 
 type DeployProjectTool struct {
@@ -276,27 +276,27 @@
 	Type string `json:"type"`
 }
 
-func (d *DeployProjectTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *DeployProjectTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	req := deployProjectReq{
 		Type: "draft",
 	}
 	jsonReq, err := json.Marshal(req)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	resp, err := http.Post(fmt.Sprintf("%s/api/project/%s/deploy", d.apiBaseAddress, d.projectId), "application/json", bytes.NewBuffer(jsonReq))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to deploy project: %s", string(body))
+		return llm.ErrorfToolOut("failed to deploy project: %s", string(body))
 	}
-	return llm.TextContent(string("Project deployed successfully")), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string("Project deployed successfully"))}
 }
 
 // Save
@@ -345,34 +345,34 @@
 	Config map[string]any `json:"config"`
 }
 
-func (d *SaveProjectTool) Run(ctx context.Context, m json.RawMessage) ([]llm.Content, error) {
+func (d *SaveProjectTool) Run(ctx context.Context, m json.RawMessage) llm.ToolOut {
 	var input SaveProjectInput
 	if err := json.Unmarshal(m, &input); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	req := saveProjectReq{
 		Type: "config",
 	}
 	if err := json.Unmarshal([]byte(input.Config), &req.Config); err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	jsonReq, err := json.Marshal(req)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	resp, err := http.Post(fmt.Sprintf("%s/api/project/%s/saved", d.apiBaseAddress, d.projectId), "application/json", bytes.NewBuffer(jsonReq))
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	defer resp.Body.Close()
 	body, err := io.ReadAll(resp.Body)
 	if err != nil {
-		return nil, err
+		return llm.ErrorToolOut(err)
 	}
 	if resp.StatusCode != http.StatusOK {
-		return nil, fmt.Errorf("failed to save project: %s", string(body))
+		return llm.ErrorfToolOut("failed to save project: %s", string(body))
 	}
-	return llm.TextContent(string("Project saved successfully")), nil
+	return llm.ToolOut{LLMContent: llm.TextContent(string("Project saved successfully"))}
 }
 
 func NewDodoTools(apiBaseAddress string, projectId string) []*llm.Tool {
diff --git a/loop/agent.go b/loop/agent.go
index decb4b0..4ce4fa3 100644
--- a/loop/agent.go
+++ b/loop/agent.go
@@ -25,10 +25,7 @@
 	"sketch.dev/claudetool/codereview"
 	"sketch.dev/claudetool/onstart"
 	"sketch.dev/dodo_tools"
-<<<<<<< variant A
 	"sketch.dev/experiment"
->>>>>>> variant B
-======= end
 	"sketch.dev/llm"
 	"sketch.dev/llm/ant"
 	"sketch.dev/llm/conversation"
@@ -2768,11 +2765,12 @@
 	MessageType string `json:"message_type"`
 	Body        any    `json:"body"`
 	TextContent string `json:"text_content"`
+}
 
 // SendInitialMessage sends an LLM-generated initial message
 func (a *Agent) SendInitialMessage(ctx context.Context) {
 	introPrompt := `Based on your role as a Sketch coding assistant and the codebase information provided, write a brief, professional introduction to the user:
-1. Greet the user and tell them your name.
+1. Greet the user and tell them your name. Your name is stored as DODO_AGENT_NAME environment variable.
 2. Retrieve and analyze current project's dodo environment.
 3. Give dodo environment summary to the user.
 4. Ask what they'd like to work on. Be concise and helpful.`
