1. 为什么你的 Codex 可能正在“看”你的屏幕
如果你在 macOS 上用 Codex 桌面端,并且开过 Personalization 里的 Memories 和 Chronicle,那它大概率已经在后台周期性抓屏了。原理不复杂:后台 agent 定时截屏,把图像送去做 OCR 和视觉分析,生成一段段 Markdown 摘要,再回传到本地目录,下次打开 Codex 时作为上下文塞进窗口。原始截图本地留六小时,但摘要文件是明文、未加密、长期保存的。
这意味着什么?你开会时共享的财报、随手打开的私聊窗口、浏览器里没关的工单页面,都可能被“炼”成记忆。OpenAI 自己的建议也很直白:开会前、看敏感内容前,记得暂停 Chronicle。但把“记得暂停”交给用户,本身就是个隐患——人总会忘。
所以这篇不讲怎么开,讲怎么关、怎么审计、怎么确认关干净了。同时给一份可复制的settings.json骨架,把 TaoToken 的统一 Key 和 API 通道接进去,让 Codex 的模型调用走一个可控入口,而不是散落在各处。适合谁:macOS 上跑 Codex、对会议隐私和屏幕内容敏感、又不想放弃 AI 编码效率的开发者。
核心检索词先摆出来:Codex 截屏权限怎么关、Chronicle 关闭方法、macOS 屏幕录制权限审计、settings.json 配置骨架、TaoToken 接入。下面按“先关权限、再配通道、最后验证”的顺序走,每一步都能跟做。
2. 前置:TaoToken 统一 Key 与 API 通道准备
在动settings.json之前,先把模型调用的入口统一掉。Codex 这类工具默认可能走官方直连,但如果你同时用多个模型、多个项目,Key 散落各处很难审计。TaoToken 在这里的角色是提供一个统一的 API 通道和 Key 管理位,让你在配置文件里只写一个入口,后续换模型、加项目都不用改代码。
你需要先拿到一个 Key。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台里创建 API Key。控制台地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,Key 管理页在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 。创建时建议按项目命名,比如codex-mac-privacy,方便后面审计哪个 Key 在跑。
API 基础地址是 https://taotoken.net/api ,注意这个地址不带 UTM 参数,直接写进配置即可。如果你用的是兼容 OpenAI 协议的客户端,Base URL 填这个,Key 填刚创建的。想先验证模型通不通,可以用模型对话页 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 发一条测试消息,确认返回正常再往下走。
这一步的目的不是“注册教程”,而是让你后面在settings.json里有一个明确的接入位。Codex 的截屏权限和模型调用是两件事,但都写在同一个配置体系里,分开管才不会互相干扰。Key 拿到后先放好,下一节直接进配置文件。
3. 可复制配置:settings.json 骨架与截屏关闭位
Codex 桌面端的配置目录在 macOS 上通常是~/.codex/,主配置文件是settings.json。如果你没建过,先创建目录:
mkdir -p ~/.codex touch ~/.codex/settings.json下面是一份骨架,包含三块:模型通道接入位、Chronicle/截屏相关开关、以及本地记忆目录的审计路径。注意:不同 Codex 版本字段名可能有差异,以你本地codex --version对应的文档为准,但结构可以参考。
{ "model_provider": { "name": "taotoken", "base_url": "https://taotoken.net/api", "api_key_env": "TAOTOKEN_API_KEY", "default_model": "gpt-4o" }, "personalization": { "memories": false, "chronicle": { "enabled": false, "screen_capture": false, "accessibility": false, "retention_hours": 0, "summary_dir": "~/.codex/chronicle/summaries" } }, "privacy": { "telemetry": false, "local_only": true } }几个关键点解释一下。model_provider里的base_url填 TaoToken 的 API 地址,api_key_env指向环境变量,不要把 Key 明文写进 JSON。然后在 shell 里导出:
export TAOTOKEN_API_KEY="你的Key"想让它持久化,写进~/.zshrc或~/.bash_profile。personalization.chronicle.enabled设为false是总开关,screen_capture和accessibility分别对应 macOS 的屏幕录制和辅助功能权限,都关掉。retention_hours设 0 表示不保留摘要,summary_dir留着是为了审计——即使关了,也去看看里面有没有历史残留。
如果你之前开过 Chronicle,摘要目录里可能已经有明文 Markdown。先别删,后面验证环节要检查。配置改完后,Codex 需要重启才生效。重启前建议先备份原配置:
cp ~/.codex/settings.json ~/.codex/settings.json.bak这样万一字段名不对导致启动失败,可以快速回滚。配置骨架给到这里,下一节讲怎么验证它真的生效了。
4. 三步验证:权限开关、截屏触发、日志残留
配置写完不等于生效,得动手验。三步走:查系统权限、复现截屏触发、确认日志无残留。
4.1 检查 macOS 权限开关
打开“系统设置 → 隐私与安全性 → 屏幕录制”,看列表里有没有 Codex。如果有,把开关关掉。同样在“辅助功能”里检查一遍。命令行也可以辅助确认:
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \ "SELECT client, auth_value FROM access WHERE service='kTCCServiceScreenCapture';"这条命令会列出所有申请过屏幕录制权限的应用,auth_value为 2 表示允许,0 表示拒绝。如果 Codex 还在列表里且为 2,说明系统层还没关干净。注意:直接改 TCC.db 可能被 SIP 拦截,建议走系统设置界面操作,命令行只用来审计。
4.2 复现截屏触发,观察是否还被抓
关掉权限后,重启 Codex,然后做一个“诱饵”操作:打开一个带明显文字的窗口,比如一个写着PRIVACY_TEST_2026的文本文件,停留几分钟。然后去 Chronicle 的摘要目录看有没有新文件生成:
ls -lt ~/.codex/chronicle/summaries/ | head -20如果目录里出现了包含PRIVACY_TEST_2026的新 Markdown,说明截屏还在跑,配置没生效。正常情况下,关了screen_capture后不应该有新摘要。你也可以用fswatch监控目录变化:
fswatch -o ~/.codex/chronicle/summaries/ | xargs -n1 -I{} echo "目录有变动: {}"跑着这个监控,再去操作 Codex,如果一直没输出,说明没有新摘要写入。
4.3 确认日志无残留
最后检查历史残留。摘要目录里的旧文件是明文,可能包含之前的屏幕内容。列出所有文件并检查内容:
grep -rl "PRIVACY_TEST" ~/.codex/chronicle/summaries/ 2>/dev/null如果找到旧摘要,确认是否包含敏感信息。确认不需要后,可以清理:
rm -rf ~/.codex/chronicle/summaries/*同时检查 Codex 的运行日志里有没有截屏相关的记录:
grep -i "chronicle\|screen_capture\|screenshot" ~/.codex/logs/*.log 2>/dev/null | tail -50如果日志里还在打印截屏任务,说明后台进程没停干净,需要完全退出 Codex 再重启。三步做完,基本能确认截屏权限已关、无新摘要、无残留日志。
5. 本篇常见错排查
报错一:settings.json解析失败,Codex 启动报 JSON 语法错误。最常见的原因是尾逗号或引号不匹配。用python -m json.tool ~/.codex/settings.json校验一下,它会指出具体行号。另外注意~在 JSON 里不会自动展开,summary_dir最好写绝对路径,比如/Users/你的用户名/.codex/chronicle/summaries。
报错二:改了配置但截屏还在跑。先确认 Codex 是否完全退出。macOS 上点关闭按钮可能只是最小化到菜单栏,后台 agent 还在。用ps aux | grep -i codex找到进程,kill掉再重启。另外检查是否有多个配置文件,比如项目级.codex/settings.json覆盖了全局配置。
报错三:TaoToken 通道返回 401 或 403。先确认环境变量TAOTOKEN_API_KEY在当前 shell 里能echo出来。如果是 GUI 启动的 Codex,可能读不到 shell 的环境变量,需要在配置里改用api_key字段直接写,或者用 launchd 配置环境变量。另外确认 Base URL 是https://taotoken.net/api,不要多加斜杠或路径。
报错四:摘要目录删了又自动生成。说明chronicle.enabled还是true,或者有别的进程在写。检查配置里enabled和screen_capture是否都为false,然后确认没有其他 Codex 实例在跑。如果用的是研究预览版,某些版本可能强制开启,需要升级或降级到可控版本。
报错五:系统设置里找不到 Codex 的屏幕录制开关。如果之前从没授权过,列表里可能不显示。这时可以手动触发一次授权请求(比如打开 Chronicle 开关再关掉),让系统弹出权限对话框,然后再去设置里关。或者用tccutil reset ScreenCapture重置该应用的权限记录,再重新检查。
6. 把通道和权限分开管,才是长期做法
截屏权限和模型调用通道,本质是两套东西。截屏是本地隐私边界,模型通道是数据出境边界。把settings.json里的personalization和model_provider分开配置,好处是你可以独立审计:关截屏不影响模型调用,换模型通道也不用动隐私开关。
TaoToken 在这里的价值是让模型通道有一个统一入口。你可以在 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 按项目建 Key,在控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 看调用量,接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 。如果后面要跑长期编码任务或 Agent,可以看 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,把额度规划好,避免截屏类后台任务偷偷烧配额。
最后留一个实用习惯:每次升级 Codex 后,重新跑一遍第 4 节的三步验证。新版本可能重置权限或改字段名,花两分钟检查,比事后发现摘要目录里躺着一堆会议记录要划算得多。