【标签】学习工作
【标题】 【学习工作赛道】ScreenShield —— 屏幕隐私守护者
0. 先和大家打个招呼吧 ![]()
-
你是谁:一名独立开发者,白天写 iOS / macOS 谋生,晚上折腾自己想做的产品。
你是怎么用 TRAE 把 Demo 做出来的:
老实说,做 ScreenShield 之前,我脑子里这个想法已经躺了快一年了。每次录视频教程差点把 API Key 录进去、同事开会共享屏幕弹出家庭聊天,我都在想「要是有个本地的小工具能盯着屏幕就好了」。但一想到要从零搭屏幕采集、OCR、正则、VLM、菜单栏 App 一整套,就反复搁置——不是不会写,是一个人写太累了,光是 VLM 那块 C++ 桥接就够我熬几个周末。
直到我打开 TRAE。
第一步,我没让它直接写代码,而是先把脑子里那本「PRD」交给Trace:产品是给谁用的、解决什么场景、不要做什么、隐私底线在哪里、分几个版本迭代。它听完直接帮我生成了一份 5 阶段开发方案,连模块依赖图、任务清单、验收标准都列好了。那一刻我意识到——原来「想清楚」这件事,可以靠对话把它逼出来。
第二步是真正让我「原来这么简单」的瞬间:V0.1 阶段我让它用 subagent 并行推进 Models 数据结构、正则规则单元测试、ScreenCaptureKit 采集链路三件事。三路同时跑,我在主对话里只管 review 和决策。一个人干出了三个人协作的节奏。
最让我意外的是 MiniCPM-V 4.6 那道坎。我自己写 Swift 调 llama.cpp 的 C++ API,光是想桥接方案就要翻半天 Stack Overflow。跟 TRAE 说「参考 MiniCPM-V-Apps 集成一下」之后,它直接给出了
VLMBridge.mm(Objective-C++ 桥接层)+VLMManager.swift(Swift 调用层)的完整结构,还顺手处理了模型不可用时回退到 Vision 框架的逻辑。我以为要熬两个周末的事,一个下午就跑通了。最后一个坎是 NSPopover。App 跑起来发现菜单栏面板一点就消失,我自己 debug 了一晚上没头绪。把现象告诉 TRAE 后,它直接定位到 LSUIElement 应用里
NSPanel.hidesOnDeactivate=true的问题,换成了 macOS 菜单栏 App 的标准模式 NSPopover——这个坑现在已经写进项目 memory,下次再写同类应用不会再踩。整个 ScreenShield 从空白工程到 136 个测试全通过、构建零警告,全是在 TRAE 里完成的。它没替我「想」产品,但它替我「扛」下了所有重复劳动和踩坑查资料的苦活。独立开发者最缺的不是想法,是把想法落地的耐心——TRAE 把这份耐心还给了我。
每个屏幕背后都藏着一个不想被看见的瞬间。希望 ScreenShield 能让那些瞬间,少一点尴尬,多一点从容

1. Demo 简介
-
是什么:ScreenShield Local 是一款运行在 macOS 菜单栏的本地屏幕隐私与内容安全助手(原生 macOS App),基于 Swift / SwiftUI / ScreenCaptureKit / Vision / 本地 VLM(MiniCPM-V 4.6)构建,所有分析在本地完成,不上传任何屏幕内容。
-
面向谁:核心用户为以下四类人群
- 开发者 / 独立开发者 :录屏教程、共享屏幕调试、使用 Claude Code / Cursor / AI Agent 时,避免 API Key、Token、 .env 内容外泄;
- 老师 / 培训讲师 / 内容创作者 :Zoom / 腾讯会议共享屏幕时,防止弹出私人聊天、邮箱、学生姓名、成绩;
- 远程办公用户 :客户演示、售前演示、远程支持时自动检查屏幕,敏感内容自动模糊;
- 家长 / 青少年用户 :在孩子使用 Mac 学习、上网时,自动识别并遮挡色情、赌博、暴力血腥等不雅内容,给青少年一个干净的屏幕环境。
-
主要功能:
-
本地实时屏幕扫描 + 多模态检测
- 通过 ScreenCaptureKit 低频采样(0.2~2 FPS 可调),结合 dHash 变化检测跳过静态帧;
- 并行执行 OCR + 8 类正则规则检测(OpenAI/AWS/GitHub/Slack/Google Key、SSH 私钥、 .env 、邮箱、手机号、身份证、银行卡);
- 集成 MiniCPM-V 4.6 视觉语言模型,识别成人/色情、赌博、暴力血腥等视觉风险类别。
-
多模式保护策略 + 风险分级动作
- 支持 观察模式 / 会议保护 模式;
- 风险分级 L0~L3,按模式策略矩阵执行「日志 / 提醒 / 全屏遮罩
- 提供 ActionDebouncer 防抖(同区域 5 秒内不重复触发)和误报反馈学习。
-
青少年护屏:不雅图片视觉识别 + 自动遮挡
-
针对青少年使用电脑场景,VLM 会逐帧判断屏幕是否出现 色情 / 赌博 / 暴力血腥 三类高风险画面;
-
一旦命中,风险等级直接升级为 L3 严重 ,自动触发全屏遮罩 + 强提醒,并要求用户明确选择「显示 5 秒 / 这是误报 / 关闭当前页面」;
-
同时辅以中英文关键词正则双通道(中文: 赌场|博彩|百家乐|老虎机 ;英文: casino|gambling|poker|roulette|bet365 ),即使VLM 推理失败或模型未下载时,也能通过正则关键词兜底识别赌博类网页,做到双保险;
-
所有视觉风险判断在本地完成, 不向任何云端服务器上传屏幕画面 ,孩子的屏幕隐私同样受保护。
-
完整菜单栏 App 体验 + 隐私优先
- NSStatusItem + NSPopover 标准菜单栏应用模式,点击盾牌图标弹出 Dashboard;
- 4 步引导(欢迎 → 屏幕录制权限 → 通知权限 → 完成);
- 默认不保存原始截图、不保存 OCR 原文,事件日志仅记录结构化字段(时间、App、风险类别、动作),支持一键清除。
2. Demo 创作思路
-
灵感来源:我自己是开发者,经常需要录屏做编程教程、用 Cursor / Claude Code 这类 AI Agent 操控电脑。一次录屏时差点把 .env 里的 OPENAI_API_KEY 录进去,回看视频时惊出一身冷汗。我也见过同事在 Zoom 共享屏幕时,微信弹出家庭聊天内容,场面一度非常尴尬。
另一类灵感来自小朋友用 Mac 上网课、查资料,但有次我无意间看到他浏览器历史里跳出了赌博网站和擦边直播页。家长不可能 24 小时盯着屏幕,传统家长控制软件只能按域名拦截,而这类站点会不断换域名、用图片而非文字绕过关键词过滤。这让我意识到: 屏幕正在成为最大的隐私泄露入口,也是青少年接触不雅内容的隐秘通道 。
-
想解决的问题:现有方案都有明显不足——
- 网址拦截器 只看域名,识别不了页面内部的图片、聊天窗口、PDF、嵌入内容,更识别不了不断换域名的赌博 / 擦边站点;
- 云端截图审核 准确率虽高,但要把屏幕内容(代码、邮件、订单、孩子屏幕画面)上传到服务器,对开发者、金融、医疗场景是「二次泄露」,对青少年保护场景更是不可接受—— 孩子的屏幕不应该上传给任何第三方 ;
- 家长控制 / 专注软件 只看 App 名称和网站分类,不理解屏幕实际内容,对图片型赌博页、擦边图、直播截图完全无能为力;
- AI Agent 读取屏幕 时更是完全没保护,Agent 可能会把孩子正在看的页面截图回传给云端模型。
-
为什么做这个方向:我的判断和取舍是——
- 本地化是刚需 :开发者、讲师、远程办公用户对「不上传屏幕」的诉求极强;青少年保护场景更是天然要求本地化—— 孩子的屏幕不上云 是底线,这是云端方案无法逾越的护城河;
- 视觉级是差异化 :不是 URL 黑名单,而是真正看屏幕内容(OCR + VLM),可以处理任意 App / 网页 / PDF / 终端 / 聊天窗口 / 直播截图 / 擦边图片;
- AI Agent 时代新需求 :当 Agent 开始读屏幕、操作电脑,必须有本地脱敏层挡在前面——这是未来 2 年的增量市场;
- MVP 聚焦 :先做开发者/讲师/远程办公三类高痛人群 + 青少年护屏这一社会关切场景,不做企业合规(销售周期长、传播受限),用 5 个阶段从原型迭代到商业版本。
3. Demo 体验地址(三选一)
视频链接: 视频号
4. TRAE 实践过程
-
清晰展示用 TRAE 完成 Demo 开发的完整流程:
整个 ScreenShield 完全在 TRAE 中完成开发,遵循「PRD → 开发方案 → 分阶段实现 → 测试验证 → 修复完善」的流程:Step 1:需求与方案设计 将产品 PRD( ScreenShield.md )输入 TRAE,让其生成可执行开发方案( 开发方案.md ),包含 5 个版本阶段(V0.1 技术原型 → V0.2 MVP → V0.3 视觉检测 → V0.4 AI Agent 护栏 → V1.0 )、四层技术架构、模块代码结构、任务清单、测试策略与风险应对。青少年护屏(色情/赌博/暴力视觉检测)作为 V0.3 视觉内容检测阶段的核心目标之一被纳入计划。
Step 2:分阶段代码实现 按 V0.1 → V1.0 顺序逐阶段实现,每个阶段通过 subagent 并行处理无依赖任务(如 Models 数据结构 + RegexDetector 单元测试 + ScreenCaptureManager 采集链路同时推进),最终一次性通过 131 个单元测试,构建零错误。
Step 3:本地 VLM 集成 + 青少年护屏视觉检测 参考 MiniCPM-V-Apps 项目,让 TRAE 集成 MiniCPM-V 4.6 视觉语言模型:通过 Objective-C++ 桥接层( VLMBridge.mm )解决 Swift 调用 C++ API 问题,架构为 ProtectionCoordinator → VLMManager → VLMBridge → llama.xcframework → MiniCPM-V 4.6 模型 ,VLM 不可用时自动回退到 Vision 框架。
在这一步,我特别让 TRAE 在 VLM prompt 中明确写入**「色情/成人内容、赌博内容、暴力血腥」三类视觉风险**的识别要求,并在 VLMManager.parseAnalysisResult 中针对 色情/裸/成人/nsfw/pornograph 、 赌博/赌场/棋牌/彩票/竞猜/gambling 、 暴力/血腥/打斗/武器/violence/blood 等关键词做分类映射,命中后 DetectionEngine 直接将其归为 L3 critical 严重风险 ,触发全屏遮罩。同时 RegexDetector 内置中英文赌博关键词正则作为兜底,即使 VLM 模型未下载也能识别赌博类网页。
Step 4:功能完整性检查与修复 让 TRAE 做了一次全量功能完整性扫描,发现 18 个问题(Agent 脱敏硬编码 bundleId、ActionDebouncer 未集成、launchAtLogin 假开关、logRetentionDays 未生效、窗口标题为 nil 等),修复 15 个关键问题,最终 136 个测试全部通过。
-
附开发关键步骤截图(不少于 3 张);
- 附关键任务对话的 Session ID(不少于 3 个),用于证明作品由 TRAE 开发完成。
.2733858957307492:ef99eb4f05eeb582f7ca3220c69ca10e_6a4480a65d4f29e28760b9a3.6a44c5945d4f29e28760bfaa.6a44c593eb64915bb38c6682:Trae CN.T(7/1/2026, 3:45:24 PM)
.2733858957307492:ef99eb4f05eeb582f7ca3220c69ca10e_6a4480a65d4f29e28760b9a3.6a44c5945d4f29e28760bfaa.6a44c593eb64915bb38c6682:Trae CN.T(7/1/2026, 3:45:24 PM)
.2733858957307492:041c68cd9f145fd906e441265910461d_6a4480a65d4f29e28760b9a3.6a44cd0b5d4f29e28760c0b1.6a44cd0beb64915bb38c6683:Trae CN.T(7/1/2026, 4:17:15 PM)
5. 对应的报名审核通过的帖子链接


