diff --git a/apps/maple-research/frontend/src/components/agent/AgentWorkAnnouncement.tsx b/apps/maple-research/frontend/src/components/agent/AgentWorkAnnouncement.tsx
new file mode 100644
index 000000000..a53687e23
--- /dev/null
+++ b/apps/maple-research/frontend/src/components/agent/AgentWorkAnnouncement.tsx
@@ -0,0 +1,166 @@
+import { useEffect, useState } from "react";
+import { arch, type } from "@tauri-apps/plugin-os";
+import { ArrowRight, Download, ExternalLink, Gift, Sparkles } from "lucide-react";
+
+import { Button } from "@/components/ui/button";
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+ DialogTrigger
+} from "@/components/ui/dialog";
+import { marketingUrl } from "@/config/domains";
+import { FEATURE_FLAGS, flagsClient } from "@/services/flags";
+import { openExternalUrl } from "@/utils/openUrl";
+
+function workDownload() {
+ // These are the architectures currently published by Maple Work. Read the
+ // native OS plugin rather than guessing from the webview's user agent.
+ try {
+ const os = type();
+ const architecture = arch();
+ if (os === "macos" && architecture === "aarch64") {
+ return {
+ label: "Download for macOS",
+ detail: "For Apple silicon Macs",
+ url: "https://updates.maple.ai/download/agent/stable/macos"
+ };
+ }
+ if (os === "linux" && architecture === "x86_64") {
+ return {
+ label: "Download for Linux",
+ detail: "For x86-64 Linux · Extract the archive and run install.sh",
+ url: "https://updates.maple.ai/download/agent/stable/linux"
+ };
+ }
+ } catch {
+ // Unknown devices can still learn about Work without a mismatched installer.
+ }
+ return null;
+}
+
+export function AgentWorkAnnouncement({ userId }: { userId: string }) {
+ const [flag, setFlag] = useState<{ userId: string; enabled: boolean } | null>(null);
+ const enabled =
+ flag?.userId === userId
+ ? flag.enabled
+ : flagsClient.peekIsEnabled(userId, FEATURE_FLAGS.AGENT_MODE);
+
+ useEffect(() => {
+ let disposed = false;
+ void flagsClient.isEnabled(userId, FEATURE_FLAGS.AGENT_MODE).then(
+ (enabled) => {
+ if (!disposed) setFlag({ userId, enabled });
+ },
+ () => {
+ if (!disposed) setFlag({ userId, enabled: false });
+ }
+ );
+ return () => {
+ disposed = true;
+ };
+ }, [userId]);
+
+ if (enabled !== true) return null;
+
+ const download = workDownload();
+
+ return (
+
+
+
+ );
+}