diff --git a/loop/webui/src/web-components/sketch-app-shell.ts b/loop/webui/src/web-components/sketch-app-shell.ts
index a0dd5aa..3350cac 100644
--- a/loop/webui/src/web-components/sketch-app-shell.ts
+++ b/loop/webui/src/web-components/sketch-app-shell.ts
@@ -323,24 +323,10 @@
     const { comment } = event.detail;
     if (!comment) return;
 
-    // Find the chat input textarea
-    const chatInput = this.shadowRoot?.querySelector("sketch-chat-input");
-    if (chatInput) {
-      // Update the chat input content using property
-      const currentContent = chatInput.getAttribute("content") || "";
-      const newContent = currentContent
-        ? `${currentContent}\n\n${comment}`
-        : comment;
-      chatInput.setAttribute("content", newContent);
-
-      // Dispatch an event to update the textarea value in the chat input component
-      const updateEvent = new CustomEvent("update-content", {
-        detail: { content: newContent },
-        bubbles: true,
-        composed: true,
-      });
-      chatInput.dispatchEvent(updateEvent);
+    if (this.chatMessageText.length > 0) {
+      this.chatMessageText += "\n\n";
     }
+    this.chatMessageText += comment;
   }
 
   /**
diff --git a/loop/webui/src/web-components/sketch-chat-input.test.ts b/loop/webui/src/web-components/sketch-chat-input.test.ts
index bcd9f8e..6dd946a 100644
--- a/loop/webui/src/web-components/sketch-chat-input.test.ts
+++ b/loop/webui/src/web-components/sketch-chat-input.test.ts
@@ -56,7 +56,7 @@
         (event) => {
           resolve((event as CustomEvent).detail);
         },
-        { once: true },
+        { once: true }
       );
     });
   });
@@ -67,10 +67,6 @@
   // Wait for the event and check its details
   const detail: any = await eventPromise;
   expect(detail.message).toBe(testContent);
-
-  // Check that content was cleared
-  const content = await component.evaluate((el: SketchChatInput) => el.content);
-  expect(content).toBe("");
 });
 
 test.skip("sends message when pressing Enter (without shift)", async ({
@@ -91,7 +87,7 @@
         (event) => {
           resolve((event as CustomEvent).detail);
         },
-        { once: true },
+        { once: true }
       );
     });
   });
@@ -148,7 +144,7 @@
     },
   });
   const origHeight = await component.evaluate(
-    (el: SketchChatInput) => el.chatInput.style.height,
+    (el: SketchChatInput) => el.chatInput.style.height
   );
 
   // Enter very tall text in the textarea
@@ -159,32 +155,9 @@
 
   // Check that textarea resized
   const newHeight = await component.evaluate(
-    (el: SketchChatInput) => el.chatInput.style.height,
+    (el: SketchChatInput) => el.chatInput.style.height
   );
   expect(Number.parseInt(newHeight)).toBeGreaterThan(
-    Number.parseInt(origHeight),
+    Number.parseInt(origHeight)
   );
 });
-
-test("updates content when receiving update-content event", async ({
-  mount,
-}) => {
-  const component = await mount(SketchChatInput, {});
-  const newContent = "Updated content";
-
-  // Dispatch the update-content event
-  await component.evaluate((el, newContent) => {
-    const updateEvent = new CustomEvent("update-content", {
-      detail: { content: newContent },
-      bubbles: true,
-    });
-    el.dispatchEvent(updateEvent);
-  }, newContent);
-
-  // Wait for the component to update and check values
-  await expect(component.locator("#chatInput")).toHaveValue(newContent);
-
-  // Check the content property
-  const content = await component.evaluate((el: SketchChatInput) => el.content);
-  expect(content).toBe(newContent);
-});
diff --git a/loop/webui/src/web-components/sketch-chat-input.ts b/loop/webui/src/web-components/sketch-chat-input.ts
index 817190e..74570cc 100644
--- a/loop/webui/src/web-components/sketch-chat-input.ts
+++ b/loop/webui/src/web-components/sketch-chat-input.ts
@@ -66,51 +66,15 @@
 
   constructor() {
     super();
-
-    // Binding methods
-    this._handleUpdateContent = this._handleUpdateContent.bind(this);
   }
 
-  /**
-   * Handle update-content event
-   */
-  private _handleUpdateContent(event: CustomEvent) {
-    const { content } = event.detail;
-    if (content !== undefined) {
-      this.content = content;
-
-      // Update the textarea value directly, otherwise it won't update until next render
-      const textarea = this.shadowRoot?.querySelector(
-        "#chatInput"
-      ) as HTMLTextAreaElement;
-      if (textarea) {
-        textarea.value = content;
-        // Adjust height after content is updated programmatically
-        requestAnimationFrame(() => this.adjustChatSpacing());
-      }
-    }
-  }
-
-  // See https://lit.dev/docs/components/lifecycle/
   connectedCallback() {
     super.connectedCallback();
-
-    // Listen for update-content events
-    this.addEventListener(
-      "update-content",
-      this._handleUpdateContent as EventListener
-    );
   }
 
   // See https://lit.dev/docs/components/lifecycle/
   disconnectedCallback() {
     super.disconnectedCallback();
-
-    // Remove event listeners
-    this.removeEventListener(
-      "update-content",
-      this._handleUpdateContent as EventListener
-    );
   }
 
   sendChatMessage() {
@@ -120,9 +84,6 @@
       composed: true,
     });
     this.dispatchEvent(event);
-    // Clear the input after sending
-    this.content = "";
-    this.setAttribute("content", "");
   }
 
   adjustChatSpacing() {
