diff --git a/loop/loop.go b/loop/loop.go
index 6cfa111..1ae99f8 100644
--- a/loop/loop.go
+++ b/loop/loop.go
@@ -15,16 +15,6 @@
 //go:embed CONVERSATION_RULES.md
 var systemPrompt string
 
-type Message struct {
-	Author   string `json:"author"`
-	Contents string `json:"contents"`
-	Done     bool   `json:"done"`
-}
-
-type Conversation struct {
-	Messages []Message `json:"message"`
-}
-
 var todo *ToDo
 
 func Run(pr PromptReader, client *Client, tools tools.Registry) error {
@@ -40,7 +30,7 @@
 	todo.AssignedTo = "assistant"
 	agents := []Agent{
 		&UserAgent{pr},
-		&AnthropicAgent{tools, client.c},
+		&AnthropicAgent{pr, tools, client.c},
 	}
 	var wg sync.WaitGroup
 	for _, a := range agents {
@@ -56,34 +46,6 @@
 	return nil
 }
 
-// func Loop(todo *ToDo, item *ToDo, pr PromptReader, client *Client, reg tools.Registry) error {
-// 	messages := []anthropic.MessageParam{
-// 		anthropic.NewUserMessage(anthropic.NewTextBlock(string(k))),
-// 		anthropic.NewUserMessage(anthropic.NewTextBlock(fmt.Sprintf("Work on TODO item: %s", item.ID))),
-// 	}
-// 	for {
-// 		fmt.Println(todo.String())
-// 		if item.AssignedTo == "user" {
-// 			fmt.Printf("YOU %s: ", item.ID)
-// 			prompt, err := pr.Read()
-// 			if err != nil {
-// 				return err
-// 			}
-// 			item.Discussion = append(item.Discussion, Comment{
-// 				Author:  "user",
-// 				Comment: prompt,
-// 			})
-// 			item.AssignedTo = "assistant"
-// 			messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(prompt)))
-// 		} else {
-// 			if len(messages) == 0 {
-// 				messages = append(messages, anthropic.NewUserMessage(anthropic.NewTextBlock(fmt.Sprintf("Work on TODO item with id"))))
-// 			}
-// 		}
-
-// 	}
-// }
-
 func pickToDoItem(todo *ToDo) *ToDo {
 	if todo.Done {
 		return nil
@@ -108,15 +70,23 @@
 	return nil
 }
 
+type ToDoSubItem struct {
+	Title       string `json:"title" jsonschema:"title=title,description=high level title of the TODO item,required"`
+	Description string `json:"description" jsonschema:"title=description,description=detailed description what this TODO item is about"`
+	AssignedTo  string `json:"assignedTo" jsonschema:"title=assigned to,description=name of the person who shall work on this utem"`
+}
+
 type ToDoItem struct {
-	ParentID    string `json:"parentId"`
-	Title       string `json:"title"`
-	Description string `json:"description"`
-	AssignedTo  string `json:"assignedTo"`
+	ParentID    string        `json:"parentId" jsonschema:"title=parent item id,description=ID of the parent TODO item this one shall be added to as a sub-item"`
+	Title       string        `json:"title" jsonschema:"title=title,description=high level title of the TODO item,required"`
+	Description string        `json:"description" jsonschema:"title=description,description=detailed description what this TODO item is about"`
+	AssignedTo  string        `json:"assignedTo" jsonschema:"title=assigned to,description=name of the person who shall work on this utem"`
+	Items       []ToDoSubItem `json:"items" jsonschema:"title=sub items,description:array of sub-items"`
+	Parallel    bool          `json:"parallel" jsonschema:"title=parallel,description=if true sub-items may be worked on in parallel and there is no depencency between them, otherwise they shall be worked on sequentially"`
 }
 
 type ToDoAddItemArgs struct {
-	Items []ToDoItem `json:"items"`
+	Items []ToDoItem `json:"items" jsonschema:"title=items,description="items to add to the TODO list,required""`
 }
 
 func ToDoAddItem(args ToDoAddItemArgs) (string, error) {
@@ -131,13 +101,25 @@
 			Title:       td.Title,
 			Description: td.Description,
 			AssignedTo:  td.AssignedTo,
+			Parallel:    td.Parallel,
 		})
+		ti := item.Items[len(item.Items)-1]
+		for _, s := range td.Items {
+			sid := fmt.Sprintf("%s.%d", id, len(ti.Items)+1)
+			ti.Items = append(ti.Items, &ToDo{
+				ID:          sid,
+				Title:       s.Title,
+				Description: s.Description,
+				AssignedTo:  s.AssignedTo,
+			})
+		}
 	}
 	return "done", nil
 }
 
 type ToDoMarkItemDoneArgs struct {
-	ID string `json:"id"`
+	ID      string `json:"id" jsonschema:"title=id,description=id of the TODO item to mark as DONE,required"`
+	Summary string `json:"summary" jsonschem:"title=summary,description=detailed summary of current item and all of it's sub-item trees.,required"`
 }
 
 func ToDoMarkItemDone(args ToDoMarkItemDoneArgs) (string, error) {
@@ -146,13 +128,14 @@
 		return "error", fmt.Errorf("TODO item with given id not found: %s", args.ID)
 	}
 	item.Done = true
+	item.Summary = args.Summary
 	return "done", nil
 }
 
 type ToDoItemAddCommentArgs struct {
-	ID       string `json:"id"`
-	Comment  string `json:"comment"`
-	AssignTo string `json:"assignTo"`
+	ID       string `json:"id" jsonschema:"title=id,description=id of the TODO item to add comment to,required"`
+	Comment  string `json:"comment" jsonschema:"title=comment,description=actual comment text,required"`
+	AssignTo string `json:"assignTo" jsonschema:"title=assigned to,description=name of the person who shall be assigned to TODO item with given ID, if empty assignment does not chage"`
 }
 
 func ToDoItemAddComment(args ToDoItemAddCommentArgs) (string, error) {
@@ -167,7 +150,9 @@
 		Author:  "assistant",
 		Comment: args.Comment,
 	})
-	item.AssignedTo = args.AssignTo
+	if args.AssignTo != "" {
+		item.AssignedTo = args.AssignTo
+	}
 	return "done", nil
 }
 
