diff --git a/loop/anthropic.go b/loop/anthropic.go
index 8ff5d6b..e711d47 100644
--- a/loop/anthropic.go
+++ b/loop/anthropic.go
@@ -13,6 +13,7 @@
 )
 
 type AnthropicAgent struct {
+	pr     PromptReader
 	reg    tools.Registry
 	client anthropic.Client
 }
@@ -35,13 +36,12 @@
 	for i, toolParam := range toolParams {
 		tools[i] = anthropic.ToolUnionParam{OfTool: &toolParam}
 	}
-	k, err := json.MarshalIndent(todo, "", "\t")
-	if err != nil {
-		return err
-	}
 	for {
+		todo.Lock()
 		items := findActionableItems(todo, "assistant")
 		if len(items) == 0 {
+			fmt.Println("## AGENT NO ITEMS")
+			todo.Unlock()
 			time.Sleep(30 * time.Second)
 			continue
 		}
@@ -50,7 +50,14 @@
 		for _, i := range items {
 			itemIds = append(itemIds, i.ID)
 		}
-		messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(string(k))))
+		fmt.Println(todo.String())
+		fmt.Printf("-- AGENT START WORKING %s\n", strings.Join(itemIds, ", "))
+		b, err := json.MarshalIndent(todo, "", "\t")
+		if err != nil {
+			todo.Unlock()
+			break
+		}
+		messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(string(b))))
 		messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(
 			fmt.Sprintf("Work on TODO item: %s", strings.Join(itemIds, ", ")))))
 		for {
@@ -64,6 +71,7 @@
 				Tools:    tools,
 			})
 			if err != nil {
+				todo.Unlock()
 				return err
 			}
 			fmt.Printf("--- STOP_REASON: %s\n", resp.StopReason)
@@ -75,12 +83,25 @@
 				case anthropic.TextBlock:
 					fmt.Printf("AI: %s\n", v.Text)
 				case anthropic.ToolUseBlock:
+					args := v.JSON.Input.Raw()
+					if v.Name == "bash_command" {
+						fmt.Printf("!!!!! %s: ", args)
+						p, err := a.pr.Read()
+						if err != nil {
+							todo.Unlock()
+							return err
+						}
+						if p != "OK" {
+							toolResults = append(toolResults, anthropic.NewToolResultBlock(v.ID, p, true))
+							continue
+						}
+					}
 					t := a.reg.Get(v.Name)
 					if t == nil {
 						toolResults = append(toolResults, anthropic.NewToolResultBlock(v.ID, fmt.Sprintf("unknown tool %q", v.Name), true))
 						continue
 					}
-					args := v.JSON.Input.Raw()
+
 					fmt.Printf("CALLING TOOL: %s %s\n", v.Name, args)
 					out, err := t.Call(string(args))
 					if err != nil {
@@ -99,5 +120,7 @@
 		for _, i := range items {
 			i.AssignedTo = "user"
 		}
+		todo.Unlock()
 	}
+	return nil
 }
