diff --git a/.changeset/fn-9208-chat-focus-icon-only.md b/.changeset/fn-9208-chat-focus-icon-only.md
new file mode 100644
index 0000000000..96d9d112bd
--- /dev/null
+++ b/.changeset/fn-9208-chat-focus-icon-only.md
@@ -0,0 +1,7 @@
+---
+"@runfusion/fusion": patch
+---
+
+summary: Chat memory-focus button is icon-only until a topic is set.
+category: feature
+dev: ChatFocusSelector no longer renders the cleared chat.focusNone label.
diff --git a/packages/dashboard/app/components/ChatFocusSelector.css b/packages/dashboard/app/components/ChatFocusSelector.css
index 1f08d80bb7..e36e986357 100644
--- a/packages/dashboard/app/components/ChatFocusSelector.css
+++ b/packages/dashboard/app/components/ChatFocusSelector.css
@@ -8,6 +8,11 @@ scrollable box keeps its title and controls available when the chat pane clips o
The chip matches --chat-input-control-size (the composer's send/attach control height)
so it centers with the single-line textarea. Styling uses only existing design tokens.
+
+FNXC:ChatMemoryFocusSelector 2026-08-24-03:59:
+A cleared focus is an icon-only control: its aria-label and title supply the accessible
+name, while a selected topic retains its visible chip label. The modifier removes label
+padding and gap so the cleared control stays square at every breakpoint.
*/
.chat-focus-root {
@@ -45,8 +50,14 @@ so it centers with the single-line textarea. Styling uses only existing design t
border-color: var(--accent);
}
-.chat-focus-chip-topic,
-.chat-focus-chip-label {
+.chat-focus-chip--icon-only {
+ inline-size: var(--chat-input-control-size, 2.25rem);
+ padding: 0;
+ gap: 0;
+ justify-content: center;
+}
+
+.chat-focus-chip-topic {
max-inline-size: calc(var(--space-xl) * 8);
overflow: hidden;
text-overflow: ellipsis;
diff --git a/packages/dashboard/app/components/ChatFocusSelector.tsx b/packages/dashboard/app/components/ChatFocusSelector.tsx
index 5469fa2cbd..2472d95d9c 100644
--- a/packages/dashboard/app/components/ChatFocusSelector.tsx
+++ b/packages/dashboard/app/components/ChatFocusSelector.tsx
@@ -13,9 +13,14 @@ empty -> null and bumps updatedAt) so it survives reconnect. Recall is then
scoped to that topic as a WITHIN-project read filter
(searchProjectMemory -> backend.search -> Stash REST topic param) NEVER a
client-side / post-query in-memory filter, and cross-project A/B isolation is
-never weakened. A null/absent focus shows a cleared state (a "focus" chip to
-set one), never a dangling chip, and an empty value or "all"/"*" collapses to
-whole-project scope. Capture stays write-anywhere and topic-agnostic.
+never weakened. A null/absent focus shows an icon-only chip; its aria-label and title preserve an
+accessible name without consuming composer width. A set topic remains visible on the
+chip, and an empty value or "all"/"*" collapses to whole-project scope. Capture stays
+write-anywhere and topic-agnostic.
+
+FNXC:ChatMemoryFocusSelector 2026-08-24-03:59:
+The cleared state must not render the redundant "Focus" word. It uses the button's
+aria-label and title as its accessible name while a selected topic remains visible.
*/
export interface ChatFocusSelectorProps {
@@ -133,7 +138,7 @@ export function ChatFocusSelector({