diff --git a/apps/web/components/settings/account.tsx b/apps/web/components/settings/account.tsx
index ffea566c..57d356fc 100644
--- a/apps/web/components/settings/account.tsx
+++ b/apps/web/components/settings/account.tsx
@@ -41,6 +41,7 @@ import { toast } from "sonner"
import { useContainerTags } from "@/hooks/use-container-tags"
import { useHasCompanyBrain } from "@/hooks/use-company-brain"
import { PopoverAnchor } from "@ui/components/popover"
+import { OrgContext } from "@/components/settings/org-context"
import { WorkspacePersona } from "@/components/settings/workspace-persona"
import { OrgPlanBadge } from "@/components/org-plan-badge"
import { useTokenUsage } from "@/hooks/use-token-usage"
@@ -616,6 +617,8 @@ export default function Account() {
+ {canManageTeam && }
+
{canManageTeam && isCompanyBrain && }
diff --git a/apps/web/components/settings/org-context.tsx b/apps/web/components/settings/org-context.tsx
new file mode 100644
index 00000000..0aeb7c9f
--- /dev/null
+++ b/apps/web/components/settings/org-context.tsx
@@ -0,0 +1,127 @@
+"use client"
+
+import { useEffect, useState } from "react"
+import { LoaderIcon } from "lucide-react"
+import { dmSans125ClassName, dmSansClassName } from "@/lib/fonts"
+import { useOrgSettings, useUpdateOrgSettings } from "@/hooks/use-org-settings"
+import { cn } from "@lib/utils"
+
+function SectionTitle({ children }: { children: React.ReactNode }) {
+ return (
+
+ {children}
+
+ )
+}
+
+export function OrgContext() {
+ const { data: settings, isLoading, isError } = useOrgSettings()
+ const updateSettings = useUpdateOrgSettings()
+ const [prompt, setPrompt] = useState("")
+
+ const enabled = settings?.shouldLLMFilter ?? false
+ const savedPrompt = settings?.filterPrompt ?? ""
+ const dirty = prompt.trim() !== savedPrompt.trim()
+ const settingsReady = !isLoading && !isError
+
+ useEffect(() => {
+ setPrompt(settings?.filterPrompt ?? "")
+ }, [settings?.filterPrompt])
+
+ const handleToggle = (next: boolean) => {
+ updateSettings.mutate({ shouldLLMFilter: next })
+ }
+
+ const handleSave = () => {
+ updateSettings.mutate({
+ shouldLLMFilter: true,
+ filterPrompt: prompt.trim() ? prompt.trim() : null,
+ })
+ }
+
+ return (
+
+
+
+
Organization Context
+
+ Guide how Supermemory processes and remembers your content.
+
+
+
+
+
+ {enabled && (
+
+ )}
+
+ )
+}
diff --git a/apps/web/hooks/use-org-settings.ts b/apps/web/hooks/use-org-settings.ts
index 56ee6f75..374090fe 100644
--- a/apps/web/hooks/use-org-settings.ts
+++ b/apps/web/hooks/use-org-settings.ts
@@ -60,11 +60,15 @@ export function useUpdateOrgSettings() {
}
return response.data
},
- onSuccess: (_data, settings) => {
- queryClient.setQueryData(
- ["settings", "org", orgId],
- (current) => (current ? { ...current, ...settings } : current),
- )
+ onSuccess: async (data) => {
+ const queryKey = ["settings", "org", orgId] as const
+ const canonicalSettings = data?.settings
+ if (canonicalSettings) {
+ queryClient.setQueryData(queryKey, (current) =>
+ current ? { ...current, ...canonicalSettings } : current,
+ )
+ }
+ await queryClient.invalidateQueries({ queryKey, exact: true })
toast.success("Settings saved")
},
onError: (error) => {