diff --git a/keyserver/src/fetchers/thread-fetchers.js b/keyserver/src/fetchers/thread-fetchers.js
--- a/keyserver/src/fetchers/thread-fetchers.js
+++ b/keyserver/src/fetchers/thread-fetchers.js
@@ -279,6 +279,7 @@
   serverResult: FetchServerThreadInfosResult,
 ): FetchThreadInfosResult {
   const viewerID = viewer.id;
+  const addKnowOfPermission = viewer.isScriptViewer;
   const codeVersionBelow209 = !hasMinCodeVersion(viewer.platformDetails, {
     native: 209,
   });
@@ -345,6 +346,7 @@
           manageFarcasterChannelTagsPermissionUnsupported,
         stripMemberPermissions: stripMemberPermissions,
         canDisplayFarcasterThreadAvatars,
+        addKnowOfPermission,
       },
     );
     if (threadInfo) {
diff --git a/lib/shared/thread-utils.js b/lib/shared/thread-utils.js
--- a/lib/shared/thread-utils.js
+++ b/lib/shared/thread-utils.js
@@ -762,6 +762,7 @@
   +filterManageFarcasterChannelTagsPermission?: boolean,
   +stripMemberPermissions?: boolean,
   +canDisplayFarcasterThreadAvatars?: boolean,
+  +addKnowOfPermission?: boolean,
 };
 
 function rawThreadInfoFromServerThreadInfo(
@@ -786,6 +787,7 @@
   const stripMemberPermissions = options?.stripMemberPermissions;
   const canDisplayFarcasterThreadAvatars =
     options?.canDisplayFarcasterThreadAvatars;
+  const addKnowOfPermission = options?.addKnowOfPermission;
 
   const filterThreadPermissions = (
     innerThreadPermissions: ThreadPermissionsInfo,
@@ -803,6 +805,15 @@
         },
       };
     }
+    if (addKnowOfPermission) {
+      innerThreadPermissions = {
+        ...innerThreadPermissions,
+        [threadPermissions.KNOW_OF]: {
+          value: true,
+          source: serverThreadInfo.id,
+        },
+      };
+    }
     return _omitBy(
       (v, k) =>
         (filterThreadEditAvatarPermission &&