<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>无尘阁日记</title><link>https://jiangtian.top/</link><description>无尘阁，红尘炼心。君子性非异也，善假于物也。</description><item><title>两台 mac 电脑直接互传文本</title><link>https://jiangtian.top/?id=16356</link><description>&lt;p&gt;你这个界面&lt;strong&gt;不能直接粘贴文本发送&lt;/strong&gt;。Finder 里的“隔空投送”主要是用来&lt;strong&gt;发现设备、拖文件发送&lt;/strong&gt;的，不是聊天框。&lt;/p&gt;&lt;h2&gt;方法一：把文本变成 txt 文件再发&lt;/h2&gt;&lt;p&gt;最稳。&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;打开 &lt;strong&gt;文本编辑&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;粘贴你的文本&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;保存成一个文件，比如：&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre&gt;临时文本.txt&lt;/pre&gt;&lt;ol start=&quot;4&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;回到你这个“隔空投送”窗口&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;把这个 txt 文件拖到对方 Mac 头像上&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;或者右键文件：&lt;/p&gt;&lt;pre&gt;共享&amp;nbsp;→&amp;nbsp;隔空投送&amp;nbsp;→&amp;nbsp;选择另一台&amp;nbsp;Mac&lt;/pre&gt;&lt;h2&gt;方法二：从某些 App 里直接共享文本&lt;/h2&gt;&lt;p&gt;比如你在 Safari、备忘录、文本编辑里选中一段文字：&lt;/p&gt;&lt;pre&gt;选中文字&amp;nbsp;→&amp;nbsp;右键&amp;nbsp;→&amp;nbsp;共享&amp;nbsp;→&amp;nbsp;隔空投送&lt;/pre&gt;&lt;p&gt;但这个不一定每个 App 都支持，所以不如 txt 文件稳定。&lt;/p&gt;&lt;h2&gt;方法三：装 LocalSend，专门传文本&lt;/h2&gt;&lt;p&gt;如果你经常两台 Mac 互发文字，建议用 &lt;strong&gt;LocalSend&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;它可以直接发：&lt;/p&gt;&lt;pre&gt;文字
文件
文件夹
图片&lt;/pre&gt;&lt;p&gt;不需要登录账号，不走云端，同一个 Wi-Fi 下就行。&lt;/p&gt;&lt;h2&gt;你现在最快的做法&lt;/h2&gt;&lt;p&gt;直接这样：&lt;/p&gt;&lt;pre&gt;文本编辑&amp;nbsp;→&amp;nbsp;粘贴内容&amp;nbsp;→&amp;nbsp;保存成&amp;nbsp;txt&amp;nbsp;→&amp;nbsp;拖到隔空投送里发&lt;/pre&gt;&lt;p&gt;一句话：&lt;strong&gt;AirDrop 不是微信聊天框，想发文本片段，最好先保存成 txt 文件再投送。&lt;/strong&gt;&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 14:49:07 +0800</pubDate></item><item><title>Windows 安装 DeepSeek-TUI 踩坑：不是 PATH 问题，是它改名了</title><link>https://jiangtian.top/?id=16355</link><description>&lt;p&gt;
    这次踩的坑，表面看是 Windows 找不到命令，实际根因是：&lt;strong&gt;DeepSeek-TUI 已经改名为 CodeWhale 了。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    我一开始按老教程安装：
&lt;/p&gt;
&lt;pre&gt;npm install -g deepseek-tui --registry=https://registry.npmmirror.com&lt;/pre&gt;
&lt;p&gt;
    终端提示安装成功：
&lt;/p&gt;
&lt;pre&gt;changed 1 package&lt;/pre&gt;
&lt;p&gt;
    看起来没问题。
&lt;/p&gt;
&lt;p&gt;
    但执行：
&lt;/p&gt;
&lt;pre&gt;deepseek&lt;/pre&gt;
&lt;p&gt;
    却提示：
&lt;/p&gt;
&lt;pre&gt;deepseek 不是内部或外部命令，也不是可运行的程序&lt;/pre&gt;
&lt;p&gt;
    于是第一反应就是：环境变量没配好。
&lt;/p&gt;
&lt;h2&gt;
    一、第一层误判：以为是 PATH 没加
&lt;/h2&gt;
&lt;p&gt;
    Windows 下 npm 全局命令一般会安装到这个目录：
&lt;/p&gt;
&lt;pre&gt;C:\Users\Administrator\AppData\Roaming\npm&lt;/pre&gt;
&lt;p&gt;
    所以我先把这个路径加进系统环境变量。
&lt;/p&gt;
&lt;p&gt;
    PowerShell 临时加 PATH 的写法是：
&lt;/p&gt;
&lt;pre&gt;$env:Path += &amp;quot;;C:\Users\Administrator\AppData\Roaming\npm&amp;quot;&lt;/pre&gt;
&lt;p&gt;
    注意，这里不能写成：
&lt;/p&gt;
&lt;pre&gt;set PATH=%PATH%;%APPDATA%\npm&lt;/pre&gt;
&lt;p&gt;
    这个是 CMD 写法，不是 PowerShell 写法。
&lt;/p&gt;
&lt;p&gt;
    如果你在 PowerShell 里执行 CMD 的写法，就会报类似这样的错误：
&lt;/p&gt;
&lt;pre&gt;无法加载模块 %APPDATA%\npm&lt;/pre&gt;
&lt;p&gt;
    所以这里第一个坑是：
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;PowerShell 用 &lt;code inline=&quot;&quot;&gt;$env:变量名&lt;/code&gt;，CMD 才用 &lt;code inline=&quot;&quot;&gt;%变量名%&lt;/code&gt;。&lt;/strong&gt;
&lt;/p&gt;
&lt;h2&gt;
    二、第二层排查：PATH 加好了，还是找不到
&lt;/h2&gt;
&lt;p&gt;
    后来我专门写了一个脚本，把 npm 全局路径永久加入系统 Path。
&lt;/p&gt;
&lt;p&gt;
    脚本执行后显示：
&lt;/p&gt;
&lt;pre&gt;已成功加入系统环境变量 Path:
C:\Users\Administrator\AppData\Roaming\npm&lt;/pre&gt;
&lt;p&gt;
    说明环境变量已经加成功了。
&lt;/p&gt;
&lt;p&gt;
    但是继续检测：
&lt;/p&gt;
&lt;pre&gt;Get-Command deepseek
Get-Command deepseek-tui
Get-Command codewhale&lt;/pre&gt;
&lt;p&gt;
    结果还是：
&lt;/p&gt;
&lt;pre&gt;未找到命令：deepseek
未找到命令：deepseek-tui
未找到命令：codewhale&lt;/pre&gt;
&lt;p&gt;
    这时候就可以判断了：
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;这已经不是 PATH 的问题了。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    如果 PATH 有问题，脚本不会显示加入成功。
&lt;/p&gt;
&lt;p&gt;
    如果 PATH 已经成功，但命令还是找不到，那就说明 npm 安装的包本身没有生成对应的命令入口。
&lt;/p&gt;
&lt;p&gt;
    也就是说：
&lt;/p&gt;
&lt;pre&gt;npm install -g deepseek-tui&lt;/pre&gt;
&lt;p&gt;
    虽然执行成功，但它未必还会生成 &lt;code inline=&quot;&quot;&gt;deepseek&lt;/code&gt; 这个命令。
&lt;/p&gt;
&lt;h2&gt;
    三、真正原因：DeepSeek-TUI 改名成 CodeWhale
&lt;/h2&gt;
&lt;p&gt;
    真正原因是：&lt;strong&gt;DeepSeek-TUI 项目已经改名为 CodeWhale。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    以前老教程里写的是：
&lt;/p&gt;
&lt;pre&gt;npm install -g deepseek-tui
deepseek&lt;/pre&gt;
&lt;p&gt;
    现在应该改成：
&lt;/p&gt;
&lt;pre&gt;npm install -g codewhale
codewhale&lt;/pre&gt;
&lt;p&gt;
    旧的 &lt;code inline=&quot;&quot;&gt;deepseek-tui&lt;/code&gt; 包已经不适合作为新安装方式了。
&lt;/p&gt;
&lt;p&gt;
    所以这次的坑，不是 Node 没装好，不是 npm 镜像问题，也不是 Windows 环境变量一定没配好，而是教程过期了。
&lt;/p&gt;
&lt;p&gt;
    一句话：
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;老名字叫 deepseek-tui，新名字叫 codewhale。以后别再用 deepseek 启动，直接用 codewhale。&lt;/strong&gt;
&lt;/p&gt;
&lt;h2&gt;
    四、正确解决方式
&lt;/h2&gt;
&lt;p&gt;
    直接执行：
&lt;/p&gt;
&lt;pre&gt;npm uninstall -g deepseek-tui
npm install -g codewhale --registry=https://registry.npmmirror.com&lt;/pre&gt;
&lt;p&gt;
    安装完成后检查：
&lt;/p&gt;
&lt;pre&gt;Get-Command codewhale
Get-Command codewhale-tui&lt;/pre&gt;
&lt;p&gt;
    再查看版本：
&lt;/p&gt;
&lt;pre&gt;codewhale --version&lt;/pre&gt;
&lt;p&gt;
    最后启动：
&lt;/p&gt;
&lt;pre&gt;codewhale&lt;/pre&gt;
&lt;p&gt;
    如果你想看 npm 到底把命令装到哪里，可以执行：
&lt;/p&gt;
&lt;pre&gt;npm config get prefix&lt;/pre&gt;
&lt;p&gt;
    正常情况下会返回类似：
&lt;/p&gt;
&lt;pre&gt;C:\Users\Administrator\AppData\Roaming\npm&lt;/pre&gt;
&lt;p&gt;
    然后看这个目录里有没有生成命令：
&lt;/p&gt;
&lt;pre&gt;dir &amp;quot;C:\Users\Administrator\AppData\Roaming\npm&amp;quot; | findstr /i &amp;quot;codewhale deepseek&amp;quot;&lt;/pre&gt;
&lt;p&gt;
    如果这里能看到 &lt;code inline=&quot;&quot;&gt;codewhale.cmd&lt;/code&gt;，说明命令入口已经生成。
&lt;/p&gt;
&lt;h2&gt;
    五、Windows 桌面执行脚本的小坑
&lt;/h2&gt;
&lt;p&gt;
    如果脚本放在桌面，推荐这样进入桌面目录：
&lt;/p&gt;
&lt;pre&gt;cd ([Environment]::GetFolderPath(&amp;quot;Desktop&amp;quot;))&lt;/pre&gt;
&lt;p&gt;
    这个比手写路径更稳。
&lt;/p&gt;
&lt;p&gt;
    因为有些电脑的桌面可能不是：
&lt;/p&gt;
&lt;pre&gt;C:\Users\Administrator\Desktop&lt;/pre&gt;
&lt;p&gt;
    而是 OneDrive 或其他目录。
&lt;/p&gt;
&lt;p&gt;
    进入桌面后执行：
&lt;/p&gt;
&lt;pre&gt;Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
.\fix-npm-path.ps1&lt;/pre&gt;
&lt;p&gt;
    这里的：
&lt;/p&gt;
&lt;pre&gt;Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass&lt;/pre&gt;
&lt;p&gt;
    只是让当前 PowerShell 窗口临时允许执行脚本，不是永久关闭安全策略。
&lt;/p&gt;
&lt;h2&gt;
    六、最终判断逻辑
&lt;/h2&gt;
&lt;p&gt;
    遇到这种“安装成功，但命令找不到”的问题，不要一上来就反复重装。
&lt;/p&gt;
&lt;p&gt;
    按这个顺序排查：
&lt;/p&gt;
&lt;h3&gt;
    1. 先看命令是否存在
&lt;/h3&gt;
&lt;pre&gt;Get-Command deepseek
Get-Command deepseek-tui
Get-Command codewhale&lt;/pre&gt;
&lt;h3&gt;
    2. 再看 npm 全局目录
&lt;/h3&gt;
&lt;pre&gt;npm config get prefix&lt;/pre&gt;
&lt;h3&gt;
    3. 再看目录里有没有命令文件
&lt;/h3&gt;
&lt;pre&gt;dir &amp;quot;C:\Users\Administrator\AppData\Roaming\npm&amp;quot; | findstr /i &amp;quot;codewhale deepseek&amp;quot;&lt;/pre&gt;
&lt;h3&gt;
    4. 如果 PATH 没问题，但命令不存在
&lt;/h3&gt;
&lt;p&gt;
    那就不是环境变量问题，而是包没有生成这个命令。
&lt;/p&gt;
&lt;p&gt;
    这次就是这个情况。
&lt;/p&gt;
&lt;h2&gt;
    七、最终命令合集
&lt;/h2&gt;
&lt;p&gt;
    最推荐直接用这一套：
&lt;/p&gt;
&lt;pre&gt;npm uninstall -g deepseek-tui
npm install -g codewhale --registry=https://registry.npmmirror.com
Get-Command codewhale
codewhale --version
codewhale&lt;/pre&gt;
&lt;p&gt;
    如果仍然找不到，再检查：
&lt;/p&gt;
&lt;pre&gt;npm config get prefix
dir &amp;quot;C:\Users\Administrator\AppData\Roaming\npm&amp;quot; | findstr /i &amp;quot;codewhale deepseek&amp;quot;&lt;/pre&gt;
&lt;h2&gt;
    八、这次踩坑的核心结论
&lt;/h2&gt;
&lt;p&gt;
    这次问题不是：
&lt;/p&gt;
&lt;pre&gt;npm 没安装成功&lt;/pre&gt;
&lt;p&gt;
    也不完全是：
&lt;/p&gt;
&lt;pre&gt;Windows PATH 没配好&lt;/pre&gt;
&lt;p&gt;
    而是：
&lt;/p&gt;
&lt;pre&gt;DeepSeek-TUI 改名为 CodeWhale，旧命令 deepseek 已经过时&lt;/pre&gt;
&lt;p&gt;
    所以以后安装不要再按老教程写：
&lt;/p&gt;
&lt;pre&gt;npm install -g deepseek-tui
deepseek&lt;/pre&gt;
&lt;p&gt;
    而是直接写：
&lt;/p&gt;
&lt;pre&gt;npm install -g codewhale
codewhale&lt;/pre&gt;
&lt;p&gt;
    技术工具更新太快，很多时候最坑人的不是报错本身，而是教程已经过期了。
&lt;/p&gt;
&lt;p&gt;
    这次就是典型案例：&lt;br/&gt;&lt;strong&gt;命令没错，环境也快配好了，结果项目名字变了。&lt;/strong&gt;
&lt;/p&gt;</description><pubDate>Thu, 04 Jun 2026 14:44:00 +0800</pubDate></item><item><title>什么是FDE工程师？</title><link>https://jiangtian.top/?id=16354</link><description>&lt;h2&gt;FDE 工程师是什么？&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;FDE = Forward Deployed Engineer&lt;/strong&gt;，直译是：&lt;strong&gt;前线部署工程师 / 客户现场工程师&lt;/strong&gt;。&lt;/p&gt;&lt;p&gt;更通俗地说：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;不是坐在办公室只写产品代码的工程师，而是冲到客户真实业务现场，把 AI / 软件系统真正落地跑起来的人。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;OpenAI 对 FDE 的描述是：负责和战略客户一起完成复杂的端到端模型部署，覆盖需求发现、技术范围定义、系统设计、构建和生产上线。(&lt;a href=&quot;https://openai.com/careers/forward-deployed-engineer-%28fde%29-sf-san-francisco/?utm_source=chatgpt.com&quot; title=&quot;Forward Deployed Engineer (FDE) - SF&quot;&gt;OpenAI&lt;/a&gt;)&lt;/p&gt;&lt;h2&gt;它和普通工程师的区别&lt;/h2&gt;&lt;p&gt;普通软件工程师更像是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;我负责把产品功能写好。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;FDE 更像是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;我负责让客户的问题真的被解决，必要时我自己写代码、接系统、改流程、做上线、培训团队。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;所以 FDE 其实是一个混合岗位：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;角色&lt;/th&gt;&lt;th&gt;FDE 身上对应的能力&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;软件工程师&lt;/td&gt;&lt;td&gt;写代码、做集成、搭系统&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;解决方案架构师&lt;/td&gt;&lt;td&gt;设计技术方案&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;顾问&lt;/td&gt;&lt;td&gt;理解客户业务和痛点&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;项目经理&lt;/td&gt;&lt;td&gt;推动上线交付&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;产品经理&lt;/td&gt;&lt;td&gt;把客户反馈带回产品团队&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h2&gt;为什么 AI 时代突然火了？&lt;/h2&gt;&lt;p&gt;因为大模型不是装上就能用。&lt;/p&gt;&lt;p&gt;企业真正落地 AI，会遇到很多现实问题：&lt;/p&gt;&lt;p&gt;比如数据在哪、权限怎么控、怎么接 ERP/CRM/OA、怎么保证安全、怎么评估效果、怎么让业务团队真的用起来。&lt;/p&gt;&lt;p&gt;这时候光卖 API 不够，光讲方案也不够，需要一个既懂技术、又懂业务、还敢下场交付的人。&lt;/p&gt;&lt;p&gt;这就是 FDE。&lt;/p&gt;&lt;p&gt;Reuters 报道也把 FDE 称为当前 AI 领域非常热门的岗位之一，原因是它能把 AI 模型嵌入真实企业系统，解决“从试点到生产”的落地难题。(&lt;a href=&quot;https://www.reuters.com/technology/artificial-intelligence/artificial-intelligencer-hottest-job-ai-right-now-2026-02-26/?utm_source=chatgpt.com&quot; title=&quot;What&amp;#39;s the hottest job in AI right now?&quot;&gt;Reuters&lt;/a&gt;)&lt;/p&gt;&lt;h2&gt;一句话理解&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;FDE 工程师 = 企业 AI 落地的“特种兵”。&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;不是纯程序员。&lt;/p&gt;&lt;p&gt;不是纯售前。&lt;/p&gt;&lt;p&gt;不是纯顾问。&lt;/p&gt;&lt;p&gt;而是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;带着技术武器，进入客户战场，直接把业务问题打穿的人。&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;适合什么人？&lt;/h2&gt;&lt;p&gt;适合这类人：&lt;/p&gt;&lt;p&gt;懂代码，但不想只关在 IDE 里。&lt;/p&gt;&lt;p&gt;能和老板、业务负责人、技术团队都聊得明白。&lt;/p&gt;&lt;p&gt;喜欢解决真实复杂问题。&lt;/p&gt;&lt;p&gt;能接受不确定性、出差、客户现场、快速交付。&lt;/p&gt;&lt;p&gt;对 AI 应用、企业数字化、业务流程优化有兴趣。&lt;/p&gt;&lt;h2&gt;对你最有价值的理解&lt;/h2&gt;&lt;p&gt;你以后做企业 AI 智能体、AI 操作系统、AI 落地方案，其实最需要培养的就是 &lt;strong&gt;FDE 思维&lt;/strong&gt;：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;不只是“我会调模型”，而是“我能把模型接进企业业务流程，并让它产生可衡量的业务结果”。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这也是未来 AI 课程、AI 咨询、AI 交付里非常值钱的一类能力。&lt;/p&gt;</description><pubDate>Sun, 31 May 2026 19:50:42 +0800</pubDate></item><item><title>macOS 上 v2rayN 的 TUN 模式没生效，怎么排查和修复？</title><link>https://jiangtian.top/?id=16353</link><description>&lt;p&gt;
    很多人以为：
&lt;/p&gt;
&lt;p&gt;
    只要 v2rayN 节点能连上，TUN 模式就一定生效。
&lt;/p&gt;
&lt;p&gt;
    其实不是。
&lt;/p&gt;
&lt;p&gt;
    节点能用，只代表代理核心本身通了。
&lt;/p&gt;
&lt;p&gt;
    TUN 能用，代表系统流量真的被接管了。
&lt;/p&gt;
&lt;p&gt;
    这两个不是一回事。
&lt;/p&gt;
&lt;p&gt;
    这次遇到的问题就是典型案例：
&lt;/p&gt;
&lt;p&gt;
    手动走 SOCKS5 代理可以访问 Google。
&lt;/p&gt;
&lt;p&gt;
    但是浏览器、终端、系统直连还是访问不了。
&lt;/p&gt;
&lt;p&gt;
    这说明什么？
&lt;/p&gt;
&lt;p&gt;
    说明代理链路本身是好的，但系统流量没有真正走进 TUN。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    一、先看现象
&lt;/h1&gt;
&lt;p&gt;
    诊断结果里有三个关键现象。
&lt;/p&gt;
&lt;p&gt;
    第一个：
&lt;/p&gt;
&lt;pre&gt;127.0.0.1:10808 正在监听&lt;/pre&gt;
&lt;p&gt;
    说明本机 SOCKS5 代理端口已经起来了。
&lt;/p&gt;
&lt;p&gt;
    第二个：
&lt;/p&gt;
&lt;pre&gt;curl --socks5-hostname 127.0.0.1:10808 https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    可以返回：
&lt;/p&gt;
&lt;pre&gt;HTTP/2 200&lt;/pre&gt;
&lt;p&gt;
    说明节点、代理核心、远程链路都是正常的。
&lt;/p&gt;
&lt;p&gt;
    第三个：
&lt;/p&gt;
&lt;pre&gt;curl -I https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    直接访问超时。
&lt;/p&gt;
&lt;p&gt;
    同时：
&lt;/p&gt;
&lt;pre&gt;127.0.0.1:10809 Connection refused&lt;/pre&gt;
&lt;p&gt;
    说明 HTTP 代理端口没有起来。
&lt;/p&gt;
&lt;p&gt;
    这几个现象合起来，结论就很清楚：
&lt;/p&gt;
&lt;p&gt;
    代理核心没坏。
&lt;/p&gt;
&lt;p&gt;
    节点没坏。
&lt;/p&gt;
&lt;p&gt;
    真正的问题是：
&lt;/p&gt;
&lt;p&gt;
    系统流量没有被 TUN 接管。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    二、什么是 TUN 模式？
&lt;/h1&gt;
&lt;p&gt;
    普通代理模式，一般是这样的：
&lt;/p&gt;
&lt;p&gt;
    软件自己设置代理。
&lt;/p&gt;
&lt;p&gt;
    浏览器自己设置代理。
&lt;/p&gt;
&lt;p&gt;
    终端自己设置代理。
&lt;/p&gt;
&lt;p&gt;
    哪个软件设置了，哪个软件才走代理。
&lt;/p&gt;
&lt;p&gt;
    而 TUN 模式不一样。
&lt;/p&gt;
&lt;p&gt;
    TUN 模式会在系统里创建一个虚拟网卡，然后把系统流量导进这个虚拟网卡，再交给代理核心处理。
&lt;/p&gt;
&lt;p&gt;
    简单说：
&lt;/p&gt;
&lt;p&gt;
    普通代理是“软件自己走代理”。
&lt;/p&gt;
&lt;p&gt;
    TUN 模式是“系统帮所有流量走代理”。
&lt;/p&gt;
&lt;p&gt;
    所以 TUN 模式生效后，理论上你不用单独给浏览器、终端、npm、OpenClaw 配代理，它们也应该能自动走代理。
&lt;/p&gt;
&lt;p&gt;
    但前提是：
&lt;/p&gt;
&lt;p&gt;
    TUN 真的启动成功了。
&lt;/p&gt;
&lt;p&gt;
    路由真的被改了。
&lt;/p&gt;
&lt;p&gt;
    DNS 真的被接管了。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    三、TUN 没生效的典型表现
&lt;/h1&gt;
&lt;p&gt;
    如果你遇到下面这些情况，基本就可以怀疑 TUN 没生效。
&lt;/p&gt;
&lt;h2&gt;
    1. SOCKS5 手动访问成功
&lt;/h2&gt;
&lt;p&gt;
    比如：
&lt;/p&gt;
&lt;pre&gt;curl -I --socks5-hostname 127.0.0.1:10808 https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    能成功。
&lt;/p&gt;
&lt;p&gt;
    这说明节点本身没问题。
&lt;/p&gt;
&lt;h2&gt;
    2. 直接访问失败
&lt;/h2&gt;
&lt;p&gt;
    比如：
&lt;/p&gt;
&lt;pre&gt;curl -I https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    失败、超时、无法连接。
&lt;/p&gt;
&lt;p&gt;
    这说明系统流量没被接管。
&lt;/p&gt;
&lt;h2&gt;
    3. 浏览器不设置代理就访问不了
&lt;/h2&gt;
&lt;p&gt;
    如果浏览器只有在手动设置 SOCKS5 代理后才能访问，关掉代理就不行，也说明 TUN 没真正接管系统流量。
&lt;/p&gt;
&lt;h2&gt;
    4. 没有新的 utun 网卡
&lt;/h2&gt;
&lt;p&gt;
    macOS 上 TUN 通常会创建 &lt;code inline=&quot;&quot;&gt;utun&lt;/code&gt; 相关虚拟网卡。
&lt;/p&gt;
&lt;p&gt;
    可以用这个命令看：
&lt;/p&gt;
&lt;pre&gt;ifconfig | grep -Ei &amp;quot;utun|sing|tun&amp;quot; -A 8&lt;/pre&gt;
&lt;p&gt;
    如果开了 TUN 之后完全看不到相关变化，大概率 TUN 根本没起来。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    四、这次问题的根因判断
&lt;/h1&gt;
&lt;p&gt;
    这次日志里，最关键的是：
&lt;/p&gt;
&lt;pre&gt;SOCKS5 10808 成功
HTTP 10809 refused
直连 Google timeout&lt;/pre&gt;
&lt;p&gt;
    这说明：
&lt;/p&gt;
&lt;p&gt;
    v2rayN / xray / sing-box 代理核心至少有一部分是正常的。
&lt;/p&gt;
&lt;p&gt;
    因为 SOCKS5 已经能访问外网。
&lt;/p&gt;
&lt;p&gt;
    但系统流量没有自动走代理。
&lt;/p&gt;
&lt;p&gt;
    也就是说：
&lt;/p&gt;
&lt;p&gt;
    TUN 模式没有真正生效。
&lt;/p&gt;
&lt;p&gt;
    进一步看，还有一个问题：
&lt;/p&gt;
&lt;p&gt;
    HTTP 代理端口 10809 没有监听。
&lt;/p&gt;
&lt;p&gt;
    所以如果某些软件配置的是：
&lt;/p&gt;
&lt;pre&gt;http://127.0.0.1:10809&lt;/pre&gt;
&lt;p&gt;
    也会直接失败。
&lt;/p&gt;
&lt;p&gt;
    这类失败不是节点失败，而是本机端口没开。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    五、第一步：确认核心类型，优先用 sing-box
&lt;/h1&gt;
&lt;p&gt;
    macOS 上使用 TUN，建议优先使用 sing-box core。
&lt;/p&gt;
&lt;p&gt;
    因为 TUN、路由接管、DNS 劫持这些能力，sing-box 更适合。
&lt;/p&gt;
&lt;p&gt;
    在 v2rayN 里检查：
&lt;/p&gt;
&lt;pre&gt;设置
核心类型
切换为 sing-box&lt;/pre&gt;
&lt;p&gt;
    切换之后，重新选择节点。
&lt;/p&gt;
&lt;p&gt;
    然后重新开启 TUN。
&lt;/p&gt;
&lt;p&gt;
    不要一边用 xray，一边指望 TUN 一定能稳定接管所有系统流量。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    六、第二步：彻底重启 v2rayN 和代理核心
&lt;/h1&gt;
&lt;p&gt;
    有时候 TUN 开关点了，但核心没有正确重载。
&lt;/p&gt;
&lt;p&gt;
    这时候不要只点界面按钮。
&lt;/p&gt;
&lt;p&gt;
    直接把相关进程杀掉：
&lt;/p&gt;
&lt;pre&gt;pkill -f v2rayN
pkill -f sing-box
pkill -f xray&lt;/pre&gt;
&lt;p&gt;
    然后重新打开 v2rayN。
&lt;/p&gt;
&lt;p&gt;
    重新选择节点。
&lt;/p&gt;
&lt;p&gt;
    重新开启 TUN。
&lt;/p&gt;
&lt;p&gt;
    如果 macOS 弹出管理员密码授权，一定要允许。
&lt;/p&gt;
&lt;p&gt;
    因为 TUN 需要创建虚拟网卡、修改系统路由，这不是普通权限能完成的。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    七、第三步：确认 TUN 网卡是否创建成功
&lt;/h1&gt;
&lt;p&gt;
    开启 TUN 后，执行：
&lt;/p&gt;
&lt;pre&gt;ifconfig | grep -Ei &amp;quot;utun|sing|tun&amp;quot; -A 8&lt;/pre&gt;
&lt;p&gt;
    如果看到新的 &lt;code inline=&quot;&quot;&gt;utun&lt;/code&gt; 相关接口，说明 TUN 至少创建了虚拟网卡。
&lt;/p&gt;
&lt;p&gt;
    如果完全没有变化，说明 TUN 没创建成功。
&lt;/p&gt;
&lt;p&gt;
    这时候重点查：
&lt;/p&gt;
&lt;p&gt;
    v2rayN 是否有管理员权限。
&lt;/p&gt;
&lt;p&gt;
    sing-box 是否正常启动。
&lt;/p&gt;
&lt;p&gt;
    TUN 配置是否开启。
&lt;/p&gt;
&lt;p&gt;
    macOS 是否阻止了相关网络权限。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    八、第四步：确认系统路由是否被接管
&lt;/h1&gt;
&lt;p&gt;
    TUN 模式不是创建虚拟网卡就结束了。
&lt;/p&gt;
&lt;p&gt;
    还要把流量导过去。
&lt;/p&gt;
&lt;p&gt;
    继续执行：
&lt;/p&gt;
&lt;pre&gt;netstat -rn -f inet | head -n 40&lt;/pre&gt;
&lt;p&gt;
    如果 TUN 生效，路由表里通常会出现和 &lt;code inline=&quot;&quot;&gt;utun&lt;/code&gt; 有关的路由。
&lt;/p&gt;
&lt;p&gt;
    如果没有任何路由变化，说明：
&lt;/p&gt;
&lt;p&gt;
    TUN 网卡可能起来了，但系统流量没走进去。
&lt;/p&gt;
&lt;p&gt;
    这时候重点查 v2rayN 的 TUN 配置。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    九、第五步：检查 TUN 的关键配置
&lt;/h1&gt;
&lt;p&gt;
    在 v2rayN 的 TUN 设置里，重点看这些选项：
&lt;/p&gt;
&lt;pre&gt;Enable TUN：开启
Stack：mixed / system / gvisor，优先 mixed
Auto Route：开启
Strict Route：开启
Sniff：开启
DNS Hijack：开启&lt;/pre&gt;
&lt;p&gt;
    其中最关键的是：
&lt;/p&gt;
&lt;pre&gt;Auto Route
DNS Hijack&lt;/pre&gt;
&lt;p&gt;
    Auto Route 负责让系统流量走 TUN。
&lt;/p&gt;
&lt;p&gt;
    DNS Hijack 负责把 DNS 查询也接管过来。
&lt;/p&gt;
&lt;p&gt;
    如果只开了 TUN，但没开 Auto Route，可能出现：
&lt;/p&gt;
&lt;p&gt;
    TUN 网卡存在，但流量没进去。
&lt;/p&gt;
&lt;p&gt;
    如果 DNS 没接管，可能出现：
&lt;/p&gt;
&lt;p&gt;
    IP 流量走了代理，但域名解析还是污染或失败。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    十、第六步：检查 10808 和 10809 端口
&lt;/h1&gt;
&lt;p&gt;
    执行：
&lt;/p&gt;
&lt;pre&gt;lsof -nP -iTCP:10808 -sTCP:LISTEN || true
lsof -nP -iTCP:10809 -sTCP:LISTEN || true&lt;/pre&gt;
&lt;p&gt;
    正常情况下：
&lt;/p&gt;
&lt;pre&gt;10808：SOCKS5 代理
10809：HTTP 代理&lt;/pre&gt;
&lt;p&gt;
    但不同客户端配置不一样。
&lt;/p&gt;
&lt;p&gt;
    如果只看到 10808，没有 10809，说明 HTTP 代理没有开。
&lt;/p&gt;
&lt;p&gt;
    这时候如果某些软件使用的是：
&lt;/p&gt;
&lt;pre&gt;http://127.0.0.1:10809&lt;/pre&gt;
&lt;p&gt;
    就会失败。
&lt;/p&gt;
&lt;p&gt;
    可以临时改成 SOCKS5：
&lt;/p&gt;
&lt;pre&gt;socks5h://127.0.0.1:10808&lt;/pre&gt;
&lt;hr/&gt;
&lt;h1&gt;
    十一、第七步：用三条命令判断问题在哪
&lt;/h1&gt;
&lt;h2&gt;
    1. 测试直连
&lt;/h2&gt;
&lt;pre&gt;curl -I --connect-timeout 8 https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    如果失败，说明当前系统默认链路不通。
&lt;/p&gt;
&lt;h2&gt;
    2. 测试 SOCKS5
&lt;/h2&gt;
&lt;pre&gt;curl -I --socks5-hostname 127.0.0.1:10808 --connect-timeout 8 https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    如果成功，说明节点和 SOCKS5 代理正常。
&lt;/p&gt;
&lt;h2&gt;
    3. 测试 HTTP 代理
&lt;/h2&gt;
&lt;pre&gt;curl -I -x http://127.0.0.1:10809 --connect-timeout 8 https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    如果失败并提示：
&lt;/p&gt;
&lt;pre&gt;Connection refused&lt;/pre&gt;
&lt;p&gt;
    说明 10809 端口没有监听。
&lt;/p&gt;
&lt;p&gt;
    这时候不要怀疑节点。
&lt;/p&gt;
&lt;p&gt;
    应该去检查 HTTP 入站配置。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    十二、完整排查脚本
&lt;/h1&gt;
&lt;p&gt;
    可以直接复制执行：
&lt;/p&gt;
&lt;pre&gt;echo &amp;quot;=== core process ===&amp;quot;
ps aux | grep -Ei &amp;quot;v2ray|v2rayn|xray|sing-box&amp;quot; | grep -v grep

echo &amp;quot;=== ports ===&amp;quot;
lsof -nP -iTCP:10808 -sTCP:LISTEN || true
lsof -nP -iTCP:10809 -sTCP:LISTEN || true

echo &amp;quot;=== tun interfaces ===&amp;quot;
ifconfig | grep -Ei &amp;quot;utun|sing|tun&amp;quot; -A 8

echo &amp;quot;=== route ===&amp;quot;
netstat -rn -f inet | head -n 40

echo &amp;quot;=== direct test ===&amp;quot;
curl -I --connect-timeout 8 https://www.google.com

echo &amp;quot;=== socks test ===&amp;quot;
curl -I --socks5-hostname 127.0.0.1:10808 --connect-timeout 8 https://www.google.com

echo &amp;quot;=== http proxy test ===&amp;quot;
curl -I -x http://127.0.0.1:10809 --connect-timeout 8 https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    判断方法：
&lt;/p&gt;
&lt;pre&gt;SOCKS 成功，直连失败，没有 utun：
TUN 没创建成功。

SOCKS 成功，直连失败，有 utun：
TUN 创建了，但路由或 DNS 没接管。

SOCKS 成功，HTTP 代理失败：
10809 没开，软件不要配置 http://127.0.0.1:10809。

SOCKS 失败：
节点、订阅、核心、远程链路有问题。

直连成功：
系统网络本身可以访问，不一定说明 TUN 生效。&lt;/pre&gt;
&lt;hr/&gt;
&lt;h1&gt;
    十三、临时解决方案：先用 SOCKS5 接管系统代理
&lt;/h1&gt;
&lt;p&gt;
    如果 TUN 一时修不好，可以先用系统代理顶上。
&lt;/p&gt;
&lt;p&gt;
    先确认网络服务名：
&lt;/p&gt;
&lt;pre&gt;networksetup -listallnetworkservices&lt;/pre&gt;
&lt;p&gt;
    一般是：
&lt;/p&gt;
&lt;pre&gt;Wi-Fi&lt;/pre&gt;
&lt;p&gt;
    然后执行：
&lt;/p&gt;
&lt;pre&gt;networksetup -setwebproxystate &amp;quot;Wi-Fi&amp;quot; off
networksetup -setsecurewebproxystate &amp;quot;Wi-Fi&amp;quot; off
networksetup -setsocksfirewallproxy &amp;quot;Wi-Fi&amp;quot; 127.0.0.1 10808
networksetup -setsocksfirewallproxystate &amp;quot;Wi-Fi&amp;quot; on&lt;/pre&gt;
&lt;p&gt;
    然后测试：
&lt;/p&gt;
&lt;pre&gt;curl -I https://www.google.com&lt;/pre&gt;
&lt;p&gt;
    如果能通，说明系统代理已经把流量导到 SOCKS5 了。
&lt;/p&gt;
&lt;p&gt;
    这不是 TUN，但可以先解决访问问题。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    十四、恢复系统代理
&lt;/h1&gt;
&lt;p&gt;
    如果后面不想走系统代理了，执行：
&lt;/p&gt;
&lt;pre&gt;networksetup -setsocksfirewallproxystate &amp;quot;Wi-Fi&amp;quot; off
networksetup -setwebproxystate &amp;quot;Wi-Fi&amp;quot; off
networksetup -setsecurewebproxystate &amp;quot;Wi-Fi&amp;quot; off&lt;/pre&gt;
&lt;p&gt;
    然后再测试网络。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h1&gt;
    十五、最终修复路线
&lt;/h1&gt;
&lt;p&gt;
    这类问题不要乱猜。
&lt;/p&gt;
&lt;p&gt;
    按这个顺序来：
&lt;/p&gt;
&lt;pre&gt;1. 确认 SOCKS5 10808 是否可用。
2. 如果 SOCKS5 可用，说明节点没坏。
3. 检查 TUN 是否创建 utun 网卡。
4. 检查路由是否走 utun。
5. 检查 Auto Route 是否开启。
6. 检查 DNS Hijack 是否开启。
7. 检查 10809 HTTP 代理是否真的监听。
8. TUN 修不好时，先用 SOCKS5 系统代理临时解决。&lt;/pre&gt;
&lt;p&gt;
    这次问题最核心的一句话是：
&lt;/p&gt;
&lt;p&gt;
    节点没坏，v2rayN 也不是完全不能用。
&lt;/p&gt;
&lt;p&gt;
    真正的问题是：
&lt;/p&gt;
&lt;p&gt;
    TUN 没有把系统流量接管过来。
&lt;/p&gt;
&lt;p&gt;
    所以，不要一上来就重装。
&lt;/p&gt;
&lt;p&gt;
    先看端口。
&lt;/p&gt;
&lt;p&gt;
    再看 utun。
&lt;/p&gt;
&lt;p&gt;
    再看路由。
&lt;/p&gt;
&lt;p&gt;
    再看 DNS。
&lt;/p&gt;
&lt;p&gt;
    这样排查，才不会越修越乱。
&lt;/p&gt;</description><pubDate>Sat, 30 May 2026 21:08:32 +0800</pubDate></item><item><title>用 chatgpt 的 session 代充值</title><link>https://jiangtian.top/?id=16352</link><description>&lt;p&gt;问：&lt;/p&gt;&lt;p&gt;plus 充值，请先浏览器登录 https://chatgpt.com，之后打开 &lt;a href=&quot;https://chatgpt.com/api/auth/session，点进去，把里面的内容全选复制给我即可这个的充值原理是啥？&quot; _src=&quot;https://chatgpt.com/api/auth/session，点进去，把里面的内容全选复制给我即可这个的充值原理是啥？&quot;&gt;https://chatgpt.com/api/auth/session，点进去，把里面的内容全选复制给我即可这个的充值原理是啥？&lt;/a&gt; &lt;/p&gt;&lt;p&gt;答：&lt;/p&gt;&lt;p data-path-to-node=&quot;0&quot;&gt;这种充值方式的原理，简单来说就是提取你账号的临时「通行证」（Access Token），让代充商家可以在不获取你账号密码的情况下，直接以你的身份进入系统完成支付。&lt;/p&gt;&lt;h3 data-path-to-node=&quot;1&quot;&gt;核心原理拆解&lt;/h3&gt;&lt;ul data-path-to-node=&quot;2&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;2,0,0&quot;&gt;获取会话凭证：你打开的那个链接，返回的是你当前登录状态的底层数据。在这堆数据中，最关键的一项叫做「accessToken」。这相当于你账号当前的一把临时钥匙。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;2,1,0&quot;&gt;规避风控拦截：ChatGPT 对支付环境的风控极其严格。如果商家直接用你的账号密码在他们的电脑（异地 IP）上登录，极大概率会触发 OpenAI 的安全警报，导致无法调出支付页面甚至直接封号。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;2,2,0&quot;&gt;伪造本人操作：商家拿到你复制的「accessToken」后，可以通过修改浏览器请求头等技术手段，把这把钥匙挂在他们自己的网络请求上。服务器一看到这把合法的钥匙，就会误以为是你在自己的设备上进行操作。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;2,3,0&quot;&gt;完成绑卡扣款：绕过风控后，商家就能顺利进入账单系统，绑定他们自己的虚拟信用卡完成扣款，从而让你的账号升级为 Plus。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 data-path-to-node=&quot;3&quot;&gt;潜在的安全与隐私风险&lt;/h3&gt;&lt;ul data-path-to-node=&quot;4&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;4,0,0&quot;&gt;隐私完全暴露：这把临时钥匙的权限非常高。在它失效之前，商家不仅能帮你充值，理论上也可以读取、浏览甚至导出你的所有历史对话记录。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p data-path-to-node=&quot;4,1,0&quot;&gt;信用卡连带封号：第三方代充通常使用的是批量生成的虚拟信用卡。如果这张卡存在风险（比如拒付、灰产来源），OpenAI 的支付网关在后续清算时一旦发现异常，会直接封禁使用了该卡的账号。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p data-path-to-node=&quot;5&quot;&gt;如果你已经通过这种方式完成了充值，建议立刻前往 ChatGPT 的设置（Settings）中，找到安全相关选项并点击「Log out of all devices」（登出所有设备）。这个操作可以强制让你之前提取的「accessToken」立即失效，从而阻断商家继续访问你账号的可能。&lt;/p&gt;</description><pubDate>Sat, 30 May 2026 19:38:45 +0800</pubDate></item><item><title>Mac M1 上 v2rayN 提示“中国大陆证书问题访问不了”：一次真实排障复盘</title><link>https://jiangtian.top/?id=16351</link><description>&lt;h2&gt;一、问题背景&lt;/h2&gt;&lt;p&gt;在 Mac M1 / Apple Silicon 设备上安装 v2rayN 后，用户反馈访问部分网站失败，v2rayN 提示类似：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;中国大陆有证书问题，访问不了。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;很多人第一反应会认为是“证书坏了”“系统证书不对”“网站证书异常”。但从实际排查过程看，这类问题不一定真是证书问题。&lt;/p&gt;&lt;p&gt;这次案例的真实原因是：&lt;/p&gt;&lt;pre&gt;v2rayN&amp;nbsp;主程序启动了
xray&amp;nbsp;/&amp;nbsp;sing-box&amp;nbsp;核心也启动了
但&amp;nbsp;macOS&amp;nbsp;系统代理没有启用
而且实际代理端口不是默认的&amp;nbsp;10809&amp;nbsp;/&amp;nbsp;10808
同时&amp;nbsp;DNS&amp;nbsp;解析也存在异常&lt;/pre&gt;&lt;p&gt;所以最终表现出来像是 TLS / SSL / 证书问题，但底层真正的问题是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;系统流量没有进入 v2rayN 代理，而是在直连；直连时 DNS 又解析异常，导致 TLS 握手超时。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;二、先看现象：为什么看起来像“证书问题”？&lt;/h2&gt;&lt;p&gt;执行检测脚本时，直连访问 &lt;code inline=&quot;&quot;&gt;https://www.google.com&lt;/code&gt; 出现了：&lt;/p&gt;&lt;pre&gt;SSL&amp;nbsp;connection&amp;nbsp;timeout
curl:&amp;nbsp;(28)&amp;nbsp;SSL&amp;nbsp;connection&amp;nbsp;timeout&lt;/pre&gt;&lt;p&gt;这句话非常关键。&lt;/p&gt;&lt;p&gt;它不是：&lt;/p&gt;&lt;pre&gt;SSL&amp;nbsp;certificate&amp;nbsp;problem
certificate&amp;nbsp;verify&amp;nbsp;failed
unable&amp;nbsp;to&amp;nbsp;get&amp;nbsp;local&amp;nbsp;issuer&amp;nbsp;certificate&lt;/pre&gt;&lt;p&gt;如果是上面这类报错，才更像是系统证书链、根证书、目标证书或者中间人证书问题。&lt;/p&gt;&lt;p&gt;但本次是：&lt;/p&gt;&lt;pre&gt;SSL&amp;nbsp;connection&amp;nbsp;timeout&lt;/pre&gt;&lt;p&gt;这说明连接已经到了 TLS 握手阶段，但握手一直没有完成，最后超时。&lt;/p&gt;&lt;p&gt;通俗说就是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;不是证书校验失败，而是连到一个不正常的目标之后，TLS 握手卡住了。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;三、第一处异常：DNS 解析不正常&lt;/h2&gt;&lt;p&gt;检测结果里，&lt;code inline=&quot;&quot;&gt;www.google.com&lt;/code&gt; 被解析成了：&lt;/p&gt;&lt;pre&gt;157.240.7.20&lt;/pre&gt;&lt;p&gt;这个结果明显不正常。&lt;/p&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;157.240.x.x&lt;/code&gt; 更像 Meta / Facebook 相关 IP 段，不应该是 Google 常规解析结果。&lt;/p&gt;&lt;p&gt;同时 curl 里还出现了：&lt;/p&gt;&lt;pre&gt;IPv6:&amp;nbsp;2001::1
IPv4:&amp;nbsp;157.240.7.20&lt;/pre&gt;&lt;p&gt;这说明当前网络环境下 DNS 解析有较大概率存在以下情况之一：&lt;/p&gt;&lt;pre&gt;1.&amp;nbsp;DNS&amp;nbsp;污染
2.&amp;nbsp;路由器&amp;nbsp;/&amp;nbsp;热点&amp;nbsp;DNS&amp;nbsp;异常
3.&amp;nbsp;上游&amp;nbsp;DNS&amp;nbsp;不可靠
4.&amp;nbsp;网络链路对特定域名做了错误解析&lt;/pre&gt;&lt;p&gt;DNS 解析错了之后，浏览器或者 curl 就会连到错误的 IP。连到错误 IP 后，TLS 握手自然容易失败、卡住、超时。&lt;/p&gt;&lt;p&gt;所以这里的第一条判断是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;直连链路不可靠，DNS 已经异常。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;四、第二处异常：v2rayN 默认代理端口没有监听&lt;/h2&gt;&lt;p&gt;检测脚本默认测试了两个常见端口：&lt;/p&gt;&lt;pre&gt;HTTP&amp;nbsp;代理端口：10809
SOCKS5&amp;nbsp;代理端口：10808&lt;/pre&gt;&lt;p&gt;但是检测结果显示：&lt;/p&gt;&lt;pre&gt;127.0.0.1:10809&amp;nbsp;没有监听
127.0.0.1:10808&amp;nbsp;没有监听&lt;/pre&gt;&lt;p&gt;随后通过 curl 测试代理访问：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-Iv&amp;nbsp;-x&amp;nbsp;http://127.0.0.1:10809&amp;nbsp;https://www.google.com&lt;/pre&gt;&lt;p&gt;返回：&lt;/p&gt;&lt;pre&gt;Connection&amp;nbsp;refused
Failed&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;127.0.0.1&amp;nbsp;port&amp;nbsp;10809&lt;/pre&gt;&lt;p&gt;再测 SOCKS5：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-Iv&amp;nbsp;--socks5-hostname&amp;nbsp;127.0.0.1:10808&amp;nbsp;https://www.google.com&lt;/pre&gt;&lt;p&gt;同样返回：&lt;/p&gt;&lt;pre&gt;Connection&amp;nbsp;refused
Failed&amp;nbsp;to&amp;nbsp;connect&amp;nbsp;to&amp;nbsp;127.0.0.1&amp;nbsp;port&amp;nbsp;10808&lt;/pre&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;Connection refused&lt;/code&gt; 的含义非常直接：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;这个端口上没有程序在接收连接。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;也就是说，不是节点不通，也不是远端服务器拒绝，而是本机 &lt;code inline=&quot;&quot;&gt;127.0.0.1:10809&lt;/code&gt; / &lt;code inline=&quot;&quot;&gt;127.0.0.1:10808&lt;/code&gt; 这两个代理端口根本没开。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;五、第三处异常：v2rayN 核心其实启动了，但监听的是另一个端口&lt;/h2&gt;&lt;p&gt;继续检查进程：&lt;/p&gt;&lt;pre&gt;ps&amp;nbsp;aux&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-Ei&amp;nbsp;&amp;quot;v2ray|v2rayn|xray|sing-box|mihomo|clash&amp;quot;&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-v&amp;nbsp;grep&lt;/pre&gt;&lt;p&gt;可以看到：&lt;/p&gt;&lt;pre&gt;v2rayN&amp;nbsp;主程序已启动
sing-box&amp;nbsp;已启动
xray&amp;nbsp;已启动&lt;/pre&gt;&lt;p&gt;这说明 v2rayN 不是完全没运行。&lt;/p&gt;&lt;p&gt;再看监听端口：&lt;/p&gt;&lt;pre&gt;lsof&amp;nbsp;-nP&amp;nbsp;-iTCP&amp;nbsp;-sTCP:LISTEN&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-Ei&amp;nbsp;&amp;quot;108|789|2017|2080|9090|v2ray|xray|sing|clash|mihomo&amp;quot;&lt;/pre&gt;&lt;p&gt;发现实际监听的是：&lt;/p&gt;&lt;pre&gt;xray&amp;nbsp;TCP&amp;nbsp;127.0.0.1:59022&amp;nbsp;(LISTEN)&lt;/pre&gt;&lt;p&gt;这一步直接把问题定位清楚了：&lt;/p&gt;&lt;pre&gt;你以为代理端口是&amp;nbsp;10809&amp;nbsp;/&amp;nbsp;10808
但真实监听端口是&amp;nbsp;59022&lt;/pre&gt;&lt;p&gt;所以之前拿 &lt;code inline=&quot;&quot;&gt;10809 / 10808&lt;/code&gt; 测代理，当然会失败。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;六、第四处异常：macOS 系统代理没有启用&lt;/h2&gt;&lt;p&gt;继续检查 macOS 系统代理：&lt;/p&gt;&lt;pre&gt;networksetup&amp;nbsp;-getwebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsecurewebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsocksfirewallproxy&amp;nbsp;Wi-Fi&lt;/pre&gt;&lt;p&gt;结果显示：&lt;/p&gt;&lt;pre&gt;Enabled:&amp;nbsp;No
Server:&amp;nbsp;127.0.0.1
Port:&amp;nbsp;15236

Enabled:&amp;nbsp;No
Server:&amp;nbsp;127.0.0.1
Port:&amp;nbsp;15236

Enabled:&amp;nbsp;No
Server:&amp;nbsp;127.0.0.1
Port:&amp;nbsp;15235&lt;/pre&gt;&lt;p&gt;这里有两个关键信息。&lt;/p&gt;&lt;p&gt;第一，&lt;code inline=&quot;&quot;&gt;Enabled: No&lt;/code&gt;：&lt;/p&gt;&lt;pre&gt;系统代理没有启用&lt;/pre&gt;&lt;p&gt;第二，系统记录的旧端口是：&lt;/p&gt;&lt;pre&gt;15235&amp;nbsp;/&amp;nbsp;15236&lt;/pre&gt;&lt;p&gt;但实际 xray 监听的是：&lt;/p&gt;&lt;pre&gt;59022&lt;/pre&gt;&lt;p&gt;这说明系统代理配置和 v2rayN 当前实际监听端口完全错位。&lt;/p&gt;&lt;p&gt;最终状态就是：&lt;/p&gt;&lt;pre&gt;v2rayN&amp;nbsp;核心在跑
但&amp;nbsp;macOS&amp;nbsp;系统流量没有走它
浏览器&amp;nbsp;/&amp;nbsp;curl&amp;nbsp;/&amp;nbsp;系统请求仍然在直连
直连&amp;nbsp;DNS&amp;nbsp;又异常
于是表现为&amp;nbsp;SSL&amp;nbsp;/&amp;nbsp;TLS&amp;nbsp;/&amp;nbsp;证书类错误&lt;/pre&gt;&lt;p&gt;一句话概括：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;代理核心在旁边跑着，但系统流量没有进代理通道。&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;七、正确排查命令清单&lt;/h2&gt;&lt;h3&gt;1. 查看 v2rayN / xray / sing-box 是否运行&lt;/h3&gt;&lt;pre&gt;ps&amp;nbsp;aux&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-Ei&amp;nbsp;&amp;quot;v2ray|v2rayn|xray|sing-box|mihomo|clash&amp;quot;&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-v&amp;nbsp;grep&lt;/pre&gt;&lt;p&gt;如果没有任何输出，说明 v2rayN 或核心没起来。&lt;/p&gt;&lt;p&gt;如果能看到：&lt;/p&gt;&lt;pre&gt;v2rayN
xray
sing-box&lt;/pre&gt;&lt;p&gt;说明主程序和核心至少已经启动。&lt;/p&gt;&lt;hr/&gt;&lt;h3&gt;2. 查看本机实际监听端口&lt;/h3&gt;&lt;pre&gt;lsof&amp;nbsp;-nP&amp;nbsp;-iTCP&amp;nbsp;-sTCP:LISTEN&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-Ei&amp;nbsp;&amp;quot;108|789|2017|2080|9090|v2ray|xray|sing|clash|mihomo&amp;quot;&lt;/pre&gt;&lt;p&gt;重点看类似：&lt;/p&gt;&lt;pre&gt;127.0.0.1:59022&amp;nbsp;(LISTEN)&lt;/pre&gt;&lt;p&gt;这个端口才是当前真实代理端口。&lt;/p&gt;&lt;p&gt;不要死盯 &lt;code inline=&quot;&quot;&gt;10809 / 10808&lt;/code&gt;，因为 v2rayN 可能会动态生成或使用其他端口。&lt;/p&gt;&lt;hr/&gt;&lt;h3&gt;3. 测试这个端口是 HTTP 代理还是 SOCKS5 代理&lt;/h3&gt;&lt;p&gt;假设实际监听端口是 &lt;code inline=&quot;&quot;&gt;59022&lt;/code&gt;，先测 HTTP：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-Iv&amp;nbsp;-x&amp;nbsp;http://127.0.0.1:59022&amp;nbsp;--connect-timeout&amp;nbsp;10&amp;nbsp;--max-time&amp;nbsp;20&amp;nbsp;https://www.google.com&amp;nbsp;-o&amp;nbsp;/dev/null&lt;/pre&gt;&lt;p&gt;再测 SOCKS5：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-Iv&amp;nbsp;--socks5-hostname&amp;nbsp;127.0.0.1:59022&amp;nbsp;--connect-timeout&amp;nbsp;10&amp;nbsp;--max-time&amp;nbsp;20&amp;nbsp;https://www.google.com&amp;nbsp;-o&amp;nbsp;/dev/null&lt;/pre&gt;&lt;p&gt;判断规则：&lt;/p&gt;&lt;pre&gt;HTTP&amp;nbsp;那条成功：59022&amp;nbsp;是&amp;nbsp;HTTP&amp;nbsp;代理端口
SOCKS5&amp;nbsp;那条成功：59022&amp;nbsp;是&amp;nbsp;SOCKS5&amp;nbsp;代理端口
两条都失败：核心配置、节点、端口类型或入站配置可能有问题&lt;/pre&gt;&lt;hr/&gt;&lt;h3&gt;4. 查看 macOS 系统代理状态&lt;/h3&gt;&lt;pre&gt;networksetup&amp;nbsp;-getwebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsecurewebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsocksfirewallproxy&amp;nbsp;Wi-Fi&lt;/pre&gt;&lt;p&gt;如果你不是用 Wi-Fi，可以先查看网络服务名称：&lt;/p&gt;&lt;pre&gt;networksetup&amp;nbsp;-listallnetworkservices&lt;/pre&gt;&lt;p&gt;常见结果：&lt;/p&gt;&lt;pre&gt;USB&amp;nbsp;10/100/1000&amp;nbsp;LAN
Wi-Fi
iPhone&amp;nbsp;USB
Thunderbolt&amp;nbsp;Bridge&lt;/pre&gt;&lt;p&gt;如果当前网络是 Wi-Fi，就继续用 &lt;code inline=&quot;&quot;&gt;Wi-Fi&lt;/code&gt;。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;八、修复方法一：在 v2rayN 里开启系统代理&lt;/h2&gt;&lt;p&gt;最推荐先用图形界面操作。&lt;/p&gt;&lt;p&gt;打开 v2rayN，找到类似选项：&lt;/p&gt;&lt;pre&gt;设置系统代理
自动配置系统代理
开启系统代理
Set&amp;nbsp;system&amp;nbsp;proxy
System&amp;nbsp;Proxy&lt;/pre&gt;&lt;p&gt;开启后，再执行：&lt;/p&gt;&lt;pre&gt;networksetup&amp;nbsp;-getwebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsecurewebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsocksfirewallproxy&amp;nbsp;Wi-Fi&lt;/pre&gt;&lt;p&gt;看到：&lt;/p&gt;&lt;pre&gt;Enabled:&amp;nbsp;Yes&lt;/pre&gt;&lt;p&gt;才说明系统代理真的打开了。&lt;/p&gt;&lt;p&gt;如果仍然是：&lt;/p&gt;&lt;pre&gt;Enabled:&amp;nbsp;No&lt;/pre&gt;&lt;p&gt;那说明 v2rayN 没有成功写入 macOS 系统代理配置。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;九、修复方法二：手动设置 macOS 系统代理&lt;/h2&gt;&lt;p&gt;如果确认 &lt;code inline=&quot;&quot;&gt;59022&lt;/code&gt; 是 SOCKS5 代理端口，可以执行：&lt;/p&gt;&lt;pre&gt;sudo&amp;nbsp;networksetup&amp;nbsp;-setsocksfirewallproxy&amp;nbsp;Wi-Fi&amp;nbsp;127.0.0.1&amp;nbsp;59022
sudo&amp;nbsp;networksetup&amp;nbsp;-setsocksfirewallproxystate&amp;nbsp;Wi-Fi&amp;nbsp;on&lt;/pre&gt;&lt;p&gt;验证：&lt;/p&gt;&lt;pre&gt;networksetup&amp;nbsp;-getsocksfirewallproxy&amp;nbsp;Wi-Fi&lt;/pre&gt;&lt;p&gt;正常应该显示：&lt;/p&gt;&lt;pre&gt;Enabled:&amp;nbsp;Yes
Server:&amp;nbsp;127.0.0.1
Port:&amp;nbsp;59022&lt;/pre&gt;&lt;p&gt;如果确认 &lt;code inline=&quot;&quot;&gt;59022&lt;/code&gt; 是 HTTP 代理端口，可以执行：&lt;/p&gt;&lt;pre&gt;sudo&amp;nbsp;networksetup&amp;nbsp;-setwebproxy&amp;nbsp;Wi-Fi&amp;nbsp;127.0.0.1&amp;nbsp;59022
sudo&amp;nbsp;networksetup&amp;nbsp;-setsecurewebproxy&amp;nbsp;Wi-Fi&amp;nbsp;127.0.0.1&amp;nbsp;59022

sudo&amp;nbsp;networksetup&amp;nbsp;-setwebproxystate&amp;nbsp;Wi-Fi&amp;nbsp;on
sudo&amp;nbsp;networksetup&amp;nbsp;-setsecurewebproxystate&amp;nbsp;Wi-Fi&amp;nbsp;on&lt;/pre&gt;&lt;p&gt;验证：&lt;/p&gt;&lt;pre&gt;networksetup&amp;nbsp;-getwebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsecurewebproxy&amp;nbsp;Wi-Fi&lt;/pre&gt;&lt;p&gt;正常应该显示：&lt;/p&gt;&lt;pre&gt;Enabled:&amp;nbsp;Yes
Server:&amp;nbsp;127.0.0.1
Port:&amp;nbsp;59022&lt;/pre&gt;&lt;hr/&gt;&lt;h2&gt;十、修复方法三：处理 DNS 异常&lt;/h2&gt;&lt;p&gt;本次日志里 DNS 也明显不正常，所以建议把 DNS 改成更稳定的公共 DNS。&lt;/p&gt;&lt;p&gt;执行：&lt;/p&gt;&lt;pre&gt;sudo&amp;nbsp;networksetup&amp;nbsp;-setdnsservers&amp;nbsp;Wi-Fi&amp;nbsp;1.1.1.1&amp;nbsp;8.8.8.8&lt;/pre&gt;&lt;p&gt;然后清理 DNS 缓存：&lt;/p&gt;&lt;pre&gt;sudo&amp;nbsp;dscacheutil&amp;nbsp;-flushcache
sudo&amp;nbsp;killall&amp;nbsp;-HUP&amp;nbsp;mDNSResponder&lt;/pre&gt;&lt;p&gt;重新测试：&lt;/p&gt;&lt;pre&gt;dig&amp;nbsp;www.google.com&lt;/pre&gt;&lt;p&gt;如果 DNS 结果仍然异常，说明当前网络链路本身可能存在 DNS 污染或拦截。这时候更要先保证系统代理真正生效。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;十一、如何判断已经修好？&lt;/h2&gt;&lt;h3&gt;1. 系统代理启用&lt;/h3&gt;&lt;pre&gt;networksetup&amp;nbsp;-getwebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsecurewebproxy&amp;nbsp;Wi-Fi
networksetup&amp;nbsp;-getsocksfirewallproxy&amp;nbsp;Wi-Fi&lt;/pre&gt;&lt;p&gt;至少对应协议要看到：&lt;/p&gt;&lt;pre&gt;Enabled:&amp;nbsp;Yes
Server:&amp;nbsp;127.0.0.1
Port:&amp;nbsp;正确端口&lt;/pre&gt;&lt;hr/&gt;&lt;h3&gt;2. 代理端口有监听&lt;/h3&gt;&lt;pre&gt;lsof&amp;nbsp;-nP&amp;nbsp;-iTCP&amp;nbsp;-sTCP:LISTEN&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;-Ei&amp;nbsp;&amp;quot;v2ray|xray|sing|59022|108|789&amp;quot;&lt;/pre&gt;&lt;p&gt;要看到类似：&lt;/p&gt;&lt;pre&gt;127.0.0.1:59022&amp;nbsp;(LISTEN)&lt;/pre&gt;&lt;hr/&gt;&lt;h3&gt;3. 通过代理访问成功&lt;/h3&gt;&lt;p&gt;HTTP 代理测试：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-Iv&amp;nbsp;-x&amp;nbsp;http://127.0.0.1:59022&amp;nbsp;https://www.google.com&amp;nbsp;-o&amp;nbsp;/dev/null&lt;/pre&gt;&lt;p&gt;或者 SOCKS5 测试：&lt;/p&gt;&lt;pre&gt;curl&amp;nbsp;-Iv&amp;nbsp;--socks5-hostname&amp;nbsp;127.0.0.1:59022&amp;nbsp;https://www.google.com&amp;nbsp;-o&amp;nbsp;/dev/null&lt;/pre&gt;&lt;p&gt;如果看到：&lt;/p&gt;&lt;pre&gt;HTTP/2&amp;nbsp;200
HTTP/1.1&amp;nbsp;200&lt;/pre&gt;&lt;p&gt;或者没有 TLS 超时报错，说明代理链路基本正常。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;十二、这类问题的排查模型&lt;/h2&gt;&lt;p&gt;以后遇到 v2rayN、Clash、sing-box、xray 类似问题，不要一上来就重装。&lt;/p&gt;&lt;p&gt;按这个顺序排：&lt;/p&gt;&lt;pre&gt;第一步：程序是否启动
第二步：核心是否启动
第三步：本地端口是否监听
第四步：系统代理是否开启
第五步：系统代理端口是否和实际监听端口一致
第六步：DNS&amp;nbsp;是否异常
第七步：通过代理&amp;nbsp;curl&amp;nbsp;是否成功
第八步：再考虑证书问题&lt;/pre&gt;&lt;p&gt;很多所谓“证书问题”，本质并不是证书坏了，而是：&lt;/p&gt;&lt;pre&gt;DNS&amp;nbsp;解析错了
系统代理没开
端口配错了
代理核心没监听
系统流量没走代理&lt;/pre&gt;&lt;hr/&gt;&lt;h2&gt;十三、本次案例最终结论&lt;/h2&gt;&lt;p&gt;本次问题不是典型证书问题。&lt;/p&gt;&lt;p&gt;真实原因是：&lt;/p&gt;&lt;pre&gt;1.&amp;nbsp;v2rayN&amp;nbsp;主程序已启动；
2.&amp;nbsp;xray&amp;nbsp;/&amp;nbsp;sing-box&amp;nbsp;核心也已启动；
3.&amp;nbsp;但默认检测端口&amp;nbsp;10809&amp;nbsp;/&amp;nbsp;10808&amp;nbsp;没有监听；
4.&amp;nbsp;实际监听端口是&amp;nbsp;127.0.0.1:59022；
5.&amp;nbsp;macOS&amp;nbsp;系统代理处于&amp;nbsp;Disabled；
6.&amp;nbsp;系统代理记录的端口还是旧的&amp;nbsp;15235&amp;nbsp;/&amp;nbsp;15236；
7.&amp;nbsp;当前&amp;nbsp;DNS&amp;nbsp;解析也异常；
8.&amp;nbsp;所以浏览器和&amp;nbsp;curl&amp;nbsp;仍然直连，导致&amp;nbsp;TLS&amp;nbsp;握手超时；
9.&amp;nbsp;最终表现成类似“证书问题”。&lt;/pre&gt;&lt;p&gt;一句话总结：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;v2rayN 不是没运行，而是系统流量没有接入它；修复重点不是重装证书，而是确认本地监听端口、开启系统代理，并修正 DNS。&lt;/p&gt;&lt;/blockquote&gt;</description><pubDate>Sat, 30 May 2026 19:27:23 +0800</pubDate></item><item><title>OpenClaw 报错：Managed Codex app-server binary was not found 的根因与修复方法</title><link>https://jiangtian.top/?id=16350</link><description>&lt;h1 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;OpenClaw 报错：Managed Codex app-server binary was not found 的根因与修复方法&lt;/h1&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;一、问题现象&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;在 OpenClaw 使用 Codex 嵌入式代理时，出现如下报错：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Embedded&amp;nbsp;agent&amp;nbsp;failed&amp;nbsp;before&amp;nbsp;reply:
Managed&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary&amp;nbsp;was&amp;nbsp;not&amp;nbsp;found&amp;nbsp;for&amp;nbsp;@openai/codex.
Reinstall&amp;nbsp;or&amp;nbsp;update&amp;nbsp;OpenClaw,&amp;nbsp;or&amp;nbsp;run&amp;nbsp;pnpm&amp;nbsp;install&amp;nbsp;in&amp;nbsp;a&amp;nbsp;source&amp;nbsp;checkout.
Set&amp;nbsp;plugins.entries.codex.config.appServer.command&amp;nbsp;or&amp;nbsp;OPENCLAW_CODEX_APP_SERVER_BIN&amp;nbsp;to&amp;nbsp;use&amp;nbsp;a&amp;nbsp;custom&amp;nbsp;Codex&amp;nbsp;binary.&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这个错误的直观表现是：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;OpenClaw 已经收到了任务，也已经尝试启动 Codex 嵌入式代理，但在真正回复之前，Codex app-server 启动失败了。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;换句话说，这不是模型回答质量问题，也不是 prompt 问题，而是 OpenClaw 在调用 Codex 本地服务时，找不到应该启动的 Codex app-server 可执行文件。&lt;/p&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;二、第一层理解：这个错误到底是什么意思？&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这句话的核心是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Managed&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary&amp;nbsp;was&amp;nbsp;not&amp;nbsp;found&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;意思是：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;OpenClaw 的 Codex 插件默认会尝试使用它自己管理的 Codex app-server binary，也就是所谓的 managed binary。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;但当前环境里，这个 managed binary 没找到。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;所以 OpenClaw 给了三个方向：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Reinstall&amp;nbsp;or&amp;nbsp;update&amp;nbsp;OpenClaw&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;重新安装或更新 OpenClaw。&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;run&amp;nbsp;pnpm&amp;nbsp;install&amp;nbsp;in&amp;nbsp;a&amp;nbsp;source&amp;nbsp;checkout&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果你是源码安装 OpenClaw，那么进入源码目录执行&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;pnpm install&lt;/code&gt;。&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Set&amp;nbsp;plugins.entries.codex.config.appServer.command&amp;nbsp;or&amp;nbsp;OPENCLAW_CODEX_APP_SERVER_BIN&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;手动指定 Codex app-server 的启动文件。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;前两个办法适合普通安装缺失、源码依赖缺失的问题；但如果你反复重装仍然不行，就说明真正的问题不在 OpenClaw 主程序本身，而在 OpenClaw 找 Codex app-server 的路径逻辑上。&lt;/p&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;三、为什么重装 OpenClaw 也没用？&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这类问题最容易误判成“OpenClaw 没装好”。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;但实际排查下来，重装很多次仍然报错，通常说明：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;OpenClaw 主程序是好的，Codex 也可能已经安装成功了。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;真正坏的是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;OpenClaw&amp;nbsp;没有找到正确的&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary。&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;尤其在 Windows 环境里，经常会出现这种情况：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;你已经通过 npm 安装了&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;@openai/codex&lt;/code&gt;，系统里也有&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;codex.cmd&lt;/code&gt;，但是 OpenClaw 的 Codex 插件默认并不会直接使用你 PATH 里的&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;codex.cmd&lt;/code&gt;。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;它可能仍然去找自己插件目录里的 managed binary。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;一旦这个 managed binary 没生成、没下载、没缓存成功、路径解析失败，或者 OpenClaw 当前版本在 Windows 上没有正确找到它，就会一直报：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Managed&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary&amp;nbsp;was&amp;nbsp;not&amp;nbsp;found&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;所以继续重装 OpenClaw 很可能只是重复覆盖主程序，而没有解决 Codex app-server binary 的真实路径问题。&lt;/p&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;四、错误排查过程&lt;/h2&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;1. 第一反应：更新 OpenClaw&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;最先尝试的是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;update
openclaw&amp;nbsp;doctor&amp;nbsp;--non-interactive&amp;nbsp;--fix
openclaw&amp;nbsp;gateway&amp;nbsp;restart&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这个方向是合理的，因为如果只是 OpenClaw 安装不完整，更新和 doctor 修复可能解决。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;但如果重装、更新、doctor 都无效，就要换思路。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;2. 第二步：检查旧配置是否覆盖&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;然后排查&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;openclaw.json&lt;/code&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;里是否有旧的 Codex 配置，尤其是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;&amp;quot;appServer&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;quot;command&amp;quot;:&amp;nbsp;&amp;quot;...&amp;quot;
}&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果这里写错路径，OpenClaw 会按错误路径启动 Codex。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;所以之前尝试过删除：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;plugins.entries.codex.config.appServer&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;并清理环境变量：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;$null,&amp;nbsp;&amp;quot;User&amp;quot;)
[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_ARGS&amp;quot;,&amp;nbsp;$null,&amp;nbsp;&amp;quot;User&amp;quot;)
[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_MODE&amp;quot;,&amp;nbsp;$null,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这个方向也没错，因为旧配置确实可能覆盖默认行为。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;但你的场景里，这一步仍然没有解决。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这就说明问题不是“旧配置乱指”，而是 OpenClaw 默认 managed binary 本身找不到。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;3. 第三步：确认 Codex CLI 是否独立可用&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;最终切入点是：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;不要再让 OpenClaw 自己猜 Codex 在哪里，而是先确认系统里的 Codex CLI 是否能独立运行。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;执行：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;codex.cmd&amp;nbsp;app-server&amp;nbsp;--help&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果这条命令可以正常输出帮助信息，说明&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;@openai/codex&lt;/code&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;本身没坏。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;也就是说：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Codex&amp;nbsp;能跑，OpenClaw&amp;nbsp;找不到它。&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这个判断非常关键。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;它把问题从“Codex 没装好”改成了“OpenClaw 没有找到正确的 Codex 启动文件”。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;4. 第四步：找到 codex.cmd 的真实路径&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;执行：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;(Get-Command&amp;nbsp;codex.cmd).Source&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;一般会输出类似：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;C:\Users\你的用户名\AppData\Roaming\npm\codex.cmd&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这个路径才是 Windows 下 npm 全局安装生成的 Codex 命令入口。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;只要&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;codex.cmd app-server --help&lt;/code&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;能跑，这个路径就可以作为 OpenClaw 的 Codex app-server 启动入口。&lt;/p&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;五、最终解决办法：显式指定 OPENCLAW_CODEX_APP_SERVER_BIN&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;最终解决命令是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;(Get-Command&amp;nbsp;codex.cmd).Source,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这条命令的意思是：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;把系统里的&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;codex.cmd&lt;/code&gt;&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;路径写入用户级环境变量：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;OPENCLAW_CODEX_APP_SERVER_BIN&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;OpenClaw 启动 Codex app-server 时，不再只依赖 managed binary，而是直接使用这个明确指定的 Codex 可执行文件。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;然后确认一下：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::GetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果能看到类似：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;C:\Users\你的用户名\AppData\Roaming\npm\codex.cmd&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;说明环境变量写入成功。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;接着关闭当前 PowerShell，重新打开一个新的 PowerShell。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;注意：这一步非常重要。&lt;br/&gt;环境变量写入之后，旧 PowerShell 窗口不一定立刻生效。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;然后重启 OpenClaw gateway：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;stop&lt;/pre&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;start&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;或者：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;restart&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;最后检查状态：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;status&lt;/pre&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;六、完整修复命令汇总&lt;/h2&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;1. 安装或重装 Codex CLI&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;npm&amp;nbsp;install&amp;nbsp;-g&amp;nbsp;@openai/codex&lt;/pre&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;2. 测试 Codex app-server 是否能独立运行&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;codex.cmd&amp;nbsp;app-server&amp;nbsp;--help&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果能输出帮助信息，说明 Codex 本身可用。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;3. 查看 codex.cmd 路径&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;(Get-Command&amp;nbsp;codex.cmd).Source&lt;/pre&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;4. 写入 OpenClaw Codex app-server 路径&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;(Get-Command&amp;nbsp;codex.cmd).Source,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;5. 检查环境变量是否写入成功&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::GetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;6. 关闭 PowerShell，重新打开&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这一步不要省略。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;7. 重启 OpenClaw gateway&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;stop&lt;/pre&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;start&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;或者：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;restart&lt;/pre&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;8. 查看状态&lt;/h3&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw&amp;nbsp;gateway&amp;nbsp;status&lt;/pre&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;七、为什么这个办法有效？&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;因为这个错误的本质不是 OpenClaw 没装好，而是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;OpenClaw&amp;nbsp;的&amp;nbsp;Codex&amp;nbsp;插件默认要找&amp;nbsp;managed&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary，但它没有找到。&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;而我们通过：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;OPENCLAW_CODEX_APP_SERVER_BIN&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;直接告诉 OpenClaw：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;不要猜了，就用这个&amp;nbsp;codex.cmd&amp;nbsp;来启动&amp;nbsp;app-server。&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这相当于绕过了 OpenClaw 默认的 managed binary 查找逻辑，直接指定了一个已经验证可用的 Codex 启动入口。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这也是为什么前面重装 OpenClaw、清理配置、删除 appServer 配置都不一定有效，而最后这一步能解决。&lt;/p&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;八、这类问题的标准判断流程&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;以后再遇到类似报错，可以按这个顺序判断：&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;第一层：看错误关键词&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果看到：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Managed&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary&amp;nbsp;was&amp;nbsp;not&amp;nbsp;found&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;先判断为：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;OpenClaw&amp;nbsp;找不到&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;binary。&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;不要先怀疑 prompt，也不要先怀疑模型。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;第二层：确认 Codex 是否独立可用&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;执行：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;codex.cmd&amp;nbsp;app-server&amp;nbsp;--help&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果这条命令失败，说明 Codex CLI 本身没装好。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果这条命令成功，说明 Codex 没坏，是 OpenClaw 找不到它。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;第三层：显式指定 Codex 路径&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;执行：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;(Get-Command&amp;nbsp;codex.cmd).Source,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;然后重启 PowerShell 和 gateway。&lt;/p&gt;&lt;h3 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;第四层：检查 OpenClaw 配置&lt;/h3&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果仍然失败，再检查：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;openclaw.json&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;重点看有没有：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;&amp;quot;appServer&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;quot;command&amp;quot;:&amp;nbsp;&amp;quot;...&amp;quot;
}&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果有错误路径，删除或者修正。&lt;/p&gt;&lt;h2 style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;九、经验总结&lt;/h2&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;这次问题最大的坑在于：&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;错误提示里第一句就说：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;Reinstall&amp;nbsp;or&amp;nbsp;update&amp;nbsp;OpenClaw&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;所以人很容易陷入“反复重装”的循环。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;但实际上，重装只能解决 OpenClaw 主程序或托管 binary 安装不完整的问题。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;如果问题是 Windows 下 Codex binary 路径解析失败，或者 OpenClaw 没有使用 npm 全局安装的&lt;span class=&quot;Apple-converted-space&quot;&gt; &lt;/span&gt;&lt;code inline=&quot;&quot;&gt;codex.cmd&lt;/code&gt;，那么重装多少遍都可能没用。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;真正有效的判断是：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;codex.cmd&amp;nbsp;app-server&amp;nbsp;--help&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;只要这条命令能跑，就说明 Codex 在系统里是好的。&lt;/p&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;接下来要做的不是重装，而是把它的路径明确告诉 OpenClaw：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;[Environment]::SetEnvironmentVariable(&amp;quot;OPENCLAW_CODEX_APP_SERVER_BIN&amp;quot;,&amp;nbsp;(Get-Command&amp;nbsp;codex.cmd).Source,&amp;nbsp;&amp;quot;User&amp;quot;)&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;最终一句话：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;这个问题不是&amp;nbsp;Codex&amp;nbsp;不存在，而是&amp;nbsp;OpenClaw&amp;nbsp;没找到正确的&amp;nbsp;Codex&amp;nbsp;app-server&amp;nbsp;启动入口。&lt;/pre&gt;&lt;p style=&quot;caret-color: rgb(0, 0, 0); white-space: normal;&quot;&gt;解决方法也很简单：&lt;/p&gt;&lt;pre style=&quot;caret-color: rgb(0, 0, 0);&quot;&gt;先确认&amp;nbsp;codex.cmd&amp;nbsp;能跑，再用&amp;nbsp;OPENCLAW_CODEX_APP_SERVER_BIN&amp;nbsp;显式指定它。&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Thu, 28 May 2026 20:56:57 +0800</pubDate></item><item><title>华为甩出&amp;amp;quot;韬定律&amp;amp;quot;,最先疼的为什么是 ASML,而不是台积电?</title><link>https://jiangtian.top/?id=16349</link><description>&lt;h1&gt;
    华为甩出&amp;quot;韬定律&amp;quot;,最先疼的为什么是 ASML,而不是台积电?
&lt;/h1&gt;
&lt;p&gt;
    2026年5月25日,上海。何庭波在 IEEE 国际电路与系统研讨会上,正式抛出了&amp;quot;韬(τ)定律&amp;quot;。
&lt;/p&gt;
&lt;p&gt;
    新闻标题写得很燃:中国第一次在半导体领域提出产业级指导原则,剑指1.4纳米,麒麟2026今秋首发。
&lt;/p&gt;
&lt;p&gt;
    但燃归燃,有一个问题被淹没在欢呼声里没人认真答:&lt;strong&gt;这套东西真正砸中的,到底是谁?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    很多人下意识觉得是台积电——你看,华为绕开了先进制程,这不就是打台积电的脸吗?
&lt;/p&gt;
&lt;p&gt;
    恰恰相反。我把账算了一遍,结论是:&lt;strong&gt;短期里真正被这根刺扎到的是 ASML,而台积电反而和华为撞了同一个方向。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    要把这话说清楚,得先花三分钟,把&amp;quot;韬定律&amp;quot;翻译成人话。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;
    一、先别管 τ 长什么样,它就干了一件事:换了个考核指标
&lt;/h2&gt;
&lt;p&gt;
    过去六十年,芯片行业进步只靠一招——把晶体管做小。
&lt;/p&gt;
&lt;p&gt;
    这就是摩尔定律的本质:同样的钱,晶体管数量每一两年翻一倍。能翻倍,是因为做小之后又快又便宜。
&lt;/p&gt;
&lt;p&gt;
    问题是,7纳米以后,这招不灵了。
&lt;/p&gt;
&lt;p&gt;
    物理上,晶体管小到一定程度,再小已经快不起来了,反而是晶体管之间那些&amp;quot;连线&amp;quot;的电阻电容拖了后腿。经济上,一颗最先进芯片光设计费就过10亿美元,做小一颗晶体管的成本不降反升。
&lt;/p&gt;
&lt;p&gt;
    华为的处境比别人更早撞墙,因为它根本买不到最先进的光刻机。逼到墙角,反而逼出一个更根本的问题:&lt;strong&gt;我们到底该缩小什么?&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    韬定律给的答案是:别盯着&amp;quot;把晶体管做多小&amp;quot;了,改盯&amp;quot;信号跑完一段路要花多少时间&amp;quot;。
&lt;/p&gt;
&lt;p&gt;
    这个时间,就是 τ。
&lt;/p&gt;
&lt;p&gt;
    听着玄,其实道理特别朴素:&lt;strong&gt;做小晶体管,无非也是为了让信号跑得更快、跑的路更短。既然最终图的是&amp;quot;快&amp;quot;,那就直接把&amp;quot;快&amp;quot;当成考核指标,而不是把&amp;quot;小&amp;quot;当指标。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    这一步换得很聪明。因为&amp;quot;做小&amp;quot;这条路被光刻机卡死了,但&amp;quot;让信号跑得快&amp;quot;还有别的办法。
&lt;/p&gt;
&lt;p&gt;
    最关键的办法,叫&lt;strong&gt;逻辑折叠(LogicFolding)&lt;/strong&gt;。
&lt;/p&gt;
&lt;p&gt;
    一句话:**以前芯片是平房,所有电路摊在一个平面上,连线越拉越长;现在把它改成盖楼,把电路竖着叠成两层、未来更多层,楼上楼下用极细的&amp;quot;管线&amp;quot;连起来。**连线一下子短了一大截,信号跑得快了,同样的工艺、不用更先进的光刻,频率和密度都能往上提。
&lt;/p&gt;
&lt;p&gt;
    麒麟2026实测:晶体管密度从155一步跳到238(单位 MTr/mm²),频率重回3.1GHz,能效提升41%。这个密度跳幅,过去得靠三年的工艺微缩才能做到。
&lt;/p&gt;
&lt;p&gt;
    这就是全部故事的技术内核。听懂了这个,下面才好谈冲击。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;
    二、ASML:营收没掉一分钱,但被扎中了最敏感的那根神经
&lt;/h2&gt;
&lt;p&gt;
    先说结论:&lt;strong&gt;这事对 ASML 今年的财报,影响几乎是零;但对它赖以估值的那套&amp;quot;信仰&amp;quot;,是一根扎进去拔不出来的刺。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    ASML 是干嘛的?全世界唯一能造 EUV 光刻机的公司,7纳米以下没有任何替代品。一台普通 EUV 卖约1.8亿欧元,新一代 High-NA 一台3.8亿欧元起,客户还得排队抢。
&lt;/p&gt;
&lt;p&gt;
    它整个商业模式建立在一句话上:&lt;strong&gt;只要行业还想往更先进的制程走,就必须找我买更贵的机器。&lt;/strong&gt; 2026年它的营收指引是340亿到390亿欧元,EUV 是绝对主力,在手订单几百亿,这是一台还在加速的印钞机。
&lt;/p&gt;
&lt;p&gt;
    那韬定律威胁到这台印钞机了吗?
&lt;/p&gt;
&lt;p&gt;
    直接威胁——&lt;strong&gt;没有&lt;/strong&gt;。
&lt;/p&gt;
&lt;p&gt;
    第一,华为本来就买不到 ASML 最先进的机器,它的营收盘子里早就没算华为这块。事实上今年一季度,中国占 ASML 系统销售的比例已经从去年四季度的36%掉到约19%,而且掉的主要是利润较低的旧机型。华为这条路走不走,ASML 的现金流都照样滚。
&lt;/p&gt;
&lt;p&gt;
    第二,逻辑折叠靠的是&amp;quot;叠楼层&amp;quot;,叠楼层要用的是键合、刻蚀、对准这些设备,&lt;strong&gt;反而不太吃最先进的光刻&lt;/strong&gt;。所以从设备账面看,这甚至是把蛋糕从光刻挪向了别的环节。
&lt;/p&gt;
&lt;p&gt;
    那刺在哪?
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;刺在叙事上。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    ASML 之所以能享受高估值(它的市销率是行业平均的两倍多),靠的不只是订单,而是一个深入人心的信念:&lt;strong&gt;想要更强的芯片,就只有华山一条路——买我的光刻机往更先进的制程走。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    韬定律第一次由一家有量产规模的公司,系统性地、还带着381颗芯片数据,公开喊出另一句话:&lt;strong&gt;&amp;quot;先进性能,不必永远待在光刻的最前沿。封装、堆叠、互连,现在也能拿到过去只有先进制程才有的战略分量。&amp;quot;&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    这句话本身比麒麟那点密度数据,杀伤力大得多。
&lt;/p&gt;
&lt;p&gt;
    它不会让 ASML 今年少卖一台机器,但它在动摇一个长期共识:光刻 ≠ 进步的唯一入口。一旦这个共识开始松动,资本市场给 ASML 那份&amp;quot;独家通路&amp;quot;的估值溢价,逻辑上就该打个折。
&lt;/p&gt;
&lt;p&gt;
    所以 ASML 的疼,是&lt;strong&gt;慢性的、估值层面的疼&lt;/strong&gt;,不是急性的、营收层面的疼。但对一家靠&amp;quot;信仰&amp;quot;撑起高估值的公司来说,信仰被人公开质疑,本身就是事件。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;
    三、台积电:看着像被打脸,其实是撞了个满怀
&lt;/h2&gt;
&lt;p&gt;
    这才是最反直觉的地方。
&lt;/p&gt;
&lt;p&gt;
    直觉上,华为&amp;quot;绕开先进制程&amp;quot;=打台积电的脸。错。
&lt;/p&gt;
&lt;p&gt;
    真相是:&lt;strong&gt;华为这次喊的方向,台积电早就在闷头干了,而且干得比谁都猛。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    不信你看台积电2026年在干什么:
&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            全年资本开支520亿到560亿美元,其中&lt;strong&gt;10%到20%专门砸在先进封装上&lt;/strong&gt;,先进封装收入占比正从2025年的约8%往10%以上爬。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            CoWoS 产能往130万片/月翻番扩张,SoIC(把芯片竖着叠成一个系统)被它自己定为&amp;quot;核心产能驱动力&amp;quot;。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            它对2026年的官方定调是:&lt;strong&gt;&amp;quot;3D硅时代&amp;quot;——竖着叠和横着拼,和用什么光刻一样重要。&lt;/strong&gt; 行业里那句话说得更直白:瓶颈已经从&amp;quot;算得快不快&amp;quot;变成&amp;quot;芯片之间说话快不快&amp;quot;。
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    把台积电这套话和华为的韬定律放一起读——&lt;strong&gt;System-as-One-Chip、把封装当系统、用垂直堆叠缩短连线、3D折叠&lt;/strong&gt;——你会发现两家说的几乎是同一件事。
&lt;/p&gt;
&lt;p&gt;
    所以华为不是在反对台积电,是和台积电&lt;strong&gt;同时押注了同一条赛道&lt;/strong&gt;。
&lt;/p&gt;
&lt;p&gt;
    那区别在哪?区别在驱动力,这点很要命:
&lt;/p&gt;
&lt;blockquote&gt;
    &lt;p&gt;
        &lt;strong&gt;台积电是&amp;quot;最先进制程 + 最先进封装&amp;quot;,双轮驱动,从容选择;&lt;/strong&gt;&lt;strong&gt;华为是&amp;quot;成熟制程 + 激进封装&amp;quot;,单轮求生,被逼上路。&lt;/strong&gt;
    &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;
    台积电是手里既有2纳米、又有 CoWoS,封装是它锦上添花的第二条增长腿;华为是先进制程这条腿被打断了,只能靠封装这条腿单脚跳。
&lt;/p&gt;
&lt;p&gt;
    这就决定了短期内华为撼不动台积电的护城河:
&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            NVIDIA 一家就锁了台积电2026年六成以上的 CoWoS 产能,AMD 抢11%,生态被钉死;
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            台积电能做5.5倍光罩尺寸、良率98%的巨型封装,这是工程积累,不是一篇论文能追上的;
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            全球最赚钱的 AI 芯片,设计、制造、封装一条龙都在它这里。
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    &lt;strong&gt;但是,长期看,台积电该警惕的恰恰是它自己证明的那个趋势。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    如果&amp;quot;系统和封装&amp;quot;的权重持续上升、&amp;quot;纯制程&amp;quot;的权重持续下降——而这正是台积电自己在反复强调的方向——那么台积电过去靠&amp;quot;我有全世界最先进制程&amp;quot;收取的那份超额溢价,就会被稀释。当成熟制程加上聪明的封装也能打到够用的性能时,愿意为最尖端那一两个纳米付天价的客户,会变少。
&lt;/p&gt;
&lt;p&gt;
    护城河不会消失,但护城河的&lt;strong&gt;形状&lt;/strong&gt;会变:从&amp;quot;我有最小的晶体管&amp;quot;,变成&amp;quot;我有最强的系统集成能力&amp;quot;。这对台积电不是灭顶之灾,却是一次需要主动转身的提醒。而华为,正是在帮全行业把这个转身的时刻往前提。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;
    四、泼盆冷水:哪些是真功夫,哪些是话术
&lt;/h2&gt;
&lt;p&gt;
    文章写到这,得把吹的和实的分开,不然就成了通稿。评论区有句话很扎眼——&amp;quot;等效1.4nm是虚的,新定律是营销的&amp;quot;。这话刻薄,但不全错。
&lt;/p&gt;
&lt;p&gt;
    把账摊开说:
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;第一,&amp;quot;等效1.4纳米&amp;quot;是密度等效,不是制程等效。&lt;/strong&gt; 华为是用&amp;quot;叠楼层&amp;quot;把单位面积的晶体管数量堆到了1.4纳米工艺的水平,不等于它造出了1.4纳米的晶体管。这两件事差着十万八千里,前者靠封装,后者靠光刻。混着说,就容易让人以为制裁被破解了——并没有。
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;第二,韬定律更像是&amp;quot;给已有实践起了个名字&amp;quot;。&lt;/strong&gt; Chiplet、先进封装、超节点、系统级协同,这些东西业界做了好几年了,台积电、英特尔都在做。华为的贡献是把它们用&amp;quot;时间常数 τ&amp;quot;这根线串成了一套统一叙事,并第一个把它升格成&amp;quot;定律&amp;quot;。这里面有真的方法论价值,但&lt;strong&gt;升格成&amp;quot;定律&amp;quot;这个动作,本身就是一次话语权的抢夺&lt;/strong&gt;,营销成分不必讳言。
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;第三,真正难的坑,华为自己也承认还没填上:&lt;/strong&gt; 多层晶圆键合在一起,不同批次的工艺误差会被放大;EDA 设计工具还没有真正能处理三维堆叠的;良率、能耗都是硬骨头。论文里这些都老老实实写了——这是它专业的一面,也说明这是张十年的路线图,不是已经兑现的战报。
&lt;/p&gt;
&lt;p&gt;
    &lt;strong&gt;第四,也是最该承认的:这是被制裁逼出来的换赛道,不是从容的战略选择。&lt;/strong&gt; 但被逼出来的路,不一定是坏路。当年正是因为做小晶体管这条路对华为关死了,它才被迫去想&amp;quot;除了做小,还能缩小什么&amp;quot;。约束有时候反而能逼出真正的原创。
&lt;/p&gt;
&lt;hr/&gt;
&lt;h2&gt;
    五、那这事到底重要在哪
&lt;/h2&gt;
&lt;p&gt;
    剥掉营销,剥掉民族情绪,这件事最硬的内核只有一个词:&lt;strong&gt;定义权。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    过去六十年,芯片行业的游戏规则是别人定的——摩尔定律、登纳德缩放,优化什么、朝哪缩,标准在西方手里,ASML 和台积电是这套规则下最大的两个受益者:一个垄断了通往规则前沿的唯一入口,一个垄断了在规则前沿的最佳制造。
&lt;/p&gt;
&lt;p&gt;
    韬定律真正的动作,不是技术上掀桌子,而是&lt;strong&gt;第一次有一家中国公司站出来说:这个游戏,也可以按另一套指标来打,而且我有381颗芯片证明它能打。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
    所以,给三方各留一句话:
&lt;/p&gt;
&lt;ul class=&quot; list-paddingleft-2&quot;&gt;
    &lt;li&gt;
        &lt;p&gt;
            &lt;strong&gt;对 ASML:&lt;/strong&gt; 你今年的钱一分不少,但有人开始公开质疑&amp;quot;你是唯一的路&amp;quot;了。慢性的、估值层面的隐忧,从今天开始计时。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            &lt;strong&gt;对台积电:&lt;/strong&gt; 别紧张,他和你押的是同一个方向;但也别松懈,他在帮全行业把&amp;quot;制程不再是唯一&amp;quot;这件事提前坐实,而你过去最值钱的恰恰是制程领先。
        &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;
        &lt;p&gt;
            &lt;strong&gt;对华为自己:&lt;/strong&gt; 把&amp;quot;密度等效&amp;quot;老老实实说成密度等效,把十年路线图老老实实当十年走。这套东西真正的价值,不在今秋那颗麒麟,而在它有没有本事,真的把一套中国人定义的标准,变成全行业愿意跟的标准。
        &lt;/p&gt;
    &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
    几何时代的句号还没真正画上,但有人已经开始在旁边,另起了一行。
&lt;/p&gt;
&lt;hr/&gt;
&lt;p&gt;
    &lt;em&gt;数据来源:华为官网(huawei.com)韬定律发布稿、ISCAS 2026 演讲及 ChinaXiv 预印本;ASML 2026 Q1 财报及全年指引;台积电 2026 资本开支与先进封装路线图(TSMC Tech Symposium 2026、TrendForce、SemiEngineering 等公开报道)。本文为独立分析,技术数据以华为官方口径为准。&lt;/em&gt;
&lt;/p&gt;</description><pubDate>Mon, 25 May 2026 18:15:34 +0800</pubDate></item><item><title>OpenClaw browser --browser-profile 深度解析：这不是“打开浏览器”，而是给 AI 配一套可控的网页操作工作台</title><link>https://jiangtian.top/?id=16348</link><description>&lt;h1&gt;OpenClaw &lt;code inline=&quot;&quot;&gt;browser --browser-profile&lt;/code&gt; 深度解析：这不是“打开浏览器”，而是给 AI 配一套可控的网页操作工作台&lt;/h1&gt;&lt;h2&gt;一、先给结论&lt;/h2&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;openclaw browser --browser-profile&lt;/code&gt; 解决的不是“能不能打开网页”的问题，而是解决：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;AI 用哪个浏览器身份、哪个登录环境、哪个隔离空间、哪个远程浏览器、哪个任务现场去干活。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;一句话说清楚：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;code inline=&quot;&quot;&gt;--browser-profile&lt;/code&gt; 就是给 OpenClaw 的浏览器工具指定一个“浏览器工作身份”。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这个身份可以是：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;profile&lt;/th&gt;&lt;th&gt;含义&lt;/th&gt;&lt;th&gt;适合场景&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt;&lt;/td&gt;&lt;td&gt;OpenClaw 自己管理的独立浏览器环境&lt;/td&gt;&lt;td&gt;最推荐，安全、隔离、不污染个人浏览器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;&lt;/td&gt;&lt;td&gt;接管你当前真实 Chrome 登录环境&lt;/td&gt;&lt;td&gt;需要用你已登录账号时，比如 X、Google Docs、后台系统&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自定义 profile，如 &lt;code inline=&quot;&quot;&gt;work&lt;/code&gt;&lt;/td&gt;&lt;td&gt;单独创建一个工作浏览器环境&lt;/td&gt;&lt;td&gt;多任务、多账号、多客户隔离&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;remote&lt;/code&gt;&lt;/td&gt;&lt;td&gt;连接远程 CDP 浏览器&lt;/td&gt;&lt;td&gt;服务器、容器、远程浏览器自动化&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;官方文档里说得很明确：OpenClaw 可以运行一个专门的 Chrome / Brave / Edge / Chromium profile，由 agent 控制，并且这个 profile 与个人浏览器隔离；默认的 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; profile 不会碰你的个人浏览器。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;所以，这个功能的价值非常大。&lt;/p&gt;&lt;p&gt;它让 OpenClaw 从“会聊天的龙虾”，变成“能看网页、点网页、填表、截图、导出 PDF、验证结果的业务执行助手”。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;二、&lt;code inline=&quot;&quot;&gt;openclaw browser&lt;/code&gt; 本质上是什么？&lt;/h1&gt;&lt;h2&gt;1. 它是 OpenClaw 给 AI 准备的“浏览器控制面”&lt;/h2&gt;&lt;p&gt;官方 CLI 文档对 &lt;code inline=&quot;&quot;&gt;openclaw browser&lt;/code&gt; 的定义是：管理 OpenClaw 的浏览器控制面，并执行浏览器动作，包括生命周期、profiles、tabs、快照、截图、导航、输入、状态模拟和调试等。(&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;通俗说，它不是普通浏览器命令，而是一套让 AI 可以操作浏览器的控制系统。&lt;/p&gt;&lt;p&gt;它能做这些事情：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;能力&lt;/th&gt;&lt;th&gt;作用&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;start&lt;/td&gt;&lt;td&gt;启动浏览器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;stop&lt;/td&gt;&lt;td&gt;停止浏览器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;status&lt;/td&gt;&lt;td&gt;查看状态&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;doctor&lt;/td&gt;&lt;td&gt;检查浏览器控制是否正常&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;open&lt;/td&gt;&lt;td&gt;打开网页&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;tabs&lt;/td&gt;&lt;td&gt;查看标签页&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;snapshot&lt;/td&gt;&lt;td&gt;读取页面结构&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;screenshot&lt;/td&gt;&lt;td&gt;截图&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;pdf&lt;/td&gt;&lt;td&gt;导出页面 PDF&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;click/type/select/drag&lt;/td&gt;&lt;td&gt;模拟点击、输入、选择、拖拽&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;官方文档里也列出 OpenClaw browser 能提供确定性的 tab 控制、agent 点击/输入/拖拽/选择、页面快照、截图和 PDF 等能力。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;2. 它解决的是 AI 的“眼睛”和“手”的问题&lt;/h2&gt;&lt;p&gt;普通聊天模型只能靠你发文字。&lt;/p&gt;&lt;p&gt;但 OpenClaw browser 让 agent 可以：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;自己打开网页；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己看页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己点按钮；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己填输入框；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己切 tab；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己导出 PDF；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自己验证网页变化。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;这就相当于给 AI 装上了：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;眼睛：看网页内容。&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;手：操作网页界面。&lt;/strong&gt;&lt;br/&gt;&lt;strong&gt;记忆现场：保留登录状态、cookie、tab、历史访问环境。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这也是 OpenClaw 和普通对话机器人的关键分界线。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;三、&lt;code inline=&quot;&quot;&gt;--browser-profile&lt;/code&gt; 到底是什么？&lt;/h1&gt;&lt;h2&gt;1. 它不是“浏览器标签页”，而是“浏览器身份”&lt;/h2&gt;&lt;p&gt;很多人会误解：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;我新开一个 tab，是不是就是新 profile？&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;不是。&lt;/p&gt;&lt;p&gt;tab 只是同一个浏览器环境里的一个页面。&lt;/p&gt;&lt;p&gt;profile 是更大的概念，它包括：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;cookie；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;登录状态；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;本地缓存；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;浏览器数据目录；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;页面权限；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自动化连接方式；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;CDP 控制端口；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;是否 headless；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;是否接管已有浏览器；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;是否连接远程浏览器。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;官方 CLI 文档把 profiles 定义为“named browser routing configs”，也就是命名的浏览器路由配置。实际使用中，&lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; 会启动或连接到 OpenClaw 管理的独立 Chrome 实例；&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 会通过 Chrome DevTools MCP 控制用户已有的登录 Chrome；自定义 CDP profile 可以指向本地或远程 CDP endpoint。(&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;所以：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;open&amp;nbsp;https://example.com&lt;/pre&gt;&lt;p&gt;意思不是“随便打开一个网页”。&lt;/p&gt;&lt;p&gt;它的完整含义是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;让 OpenClaw 使用名为 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; 的浏览器工作环境，打开这个网页。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;2. &lt;code inline=&quot;&quot;&gt;--browser-profile&lt;/code&gt; 的价值是“明确指定任务现场”&lt;/h2&gt;&lt;p&gt;比如你有三个任务：&lt;/p&gt;&lt;pre&gt;任务&amp;nbsp;A：用学生咨询系统后台整理记录
任务&amp;nbsp;B：用企业微信后台查客户消息
任务&amp;nbsp;C：用&amp;nbsp;Google&amp;nbsp;搜索资料做行业研究&lt;/pre&gt;&lt;p&gt;如果都混在一个浏览器里，很容易出问题：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;登录状态串了；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;tab 太多乱了；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AI 点错页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;一个任务关闭了另一个任务的页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;用错账号；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;把客户 A 的后台当成客户 B；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自动化过程中误操作你的个人浏览器。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;--browser-profile&lt;/code&gt; 就是为了解决这些问题。&lt;/p&gt;&lt;p&gt;你可以这样分：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;open&amp;nbsp;https://google.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;work&amp;nbsp;open&amp;nbsp;https://company-backend.example.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;student&amp;nbsp;open&amp;nbsp;https://student-system.example.com&lt;/pre&gt;&lt;p&gt;每个 profile 是一个相对独立的浏览器工作区。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;四、默认 profile：&lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt;&lt;/h1&gt;&lt;h2&gt;1. &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; 是最推荐的新手默认方案&lt;/h2&gt;&lt;p&gt;官方文档说，&lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; profile 是一个独立的、agent-only 的浏览器；它不触碰你的个人浏览器 profile，agent 可以在这个安全通道里打开 tab、读取页面、点击和输入。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;也就是说，默认最稳的用法就是：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;doctor
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;status
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;start
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;open&amp;nbsp;https://example.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;snapshot&lt;/pre&gt;&lt;p&gt;这个 profile 适合：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;公开网页研究；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;行业资料搜集；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;竞品页面分析；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自动截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;网页转 PDF；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;测试网页功能；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不需要你个人账号登录的任务；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;给 agent 一个干净环境干活。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;2. 它的核心好处：不污染你的个人浏览器&lt;/h2&gt;&lt;p&gt;你个人 Chrome 里可能有：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;微信网页版；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Gmail；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;飞书；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;企业后台；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;支付宝；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;ChatGPT；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;各种客户系统；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;各种自动登录 cookie。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;如果让 AI 直接在你的个人浏览器里乱点，风险很高。&lt;/p&gt;&lt;p&gt;所以 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; profile 的意义是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;先给 AI 一个隔离浏览器，让它在可控空间里工作。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这就是“安全车道”。&lt;/p&gt;&lt;p&gt;官方文档也特别提醒：这个 browser 不是你的日常主浏览器，而是 agent automation 和 verification 的安全、隔离表面。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;五、特殊 profile：&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;&lt;/h1&gt;&lt;h2&gt;1. &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 是用来接管你真实 Chrome 登录环境的&lt;/h2&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; profile 的含义是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;让 OpenClaw 连接你当前真实登录的 Chrome 会话。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;官方文档说明，内置的 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; profile 会通过 Chrome MCP 附加到你的真实已登录 Chrome session。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;它适合这种情况：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;网站必须登录；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;登录过程复杂；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;验证码很多；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;自动登录容易被风控；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;你已经在 Chrome 里登录好了；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;agent 只是需要帮你读页面、点按钮、整理内容。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;比如：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;tabs&lt;/pre&gt;&lt;p&gt;或者：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;open&amp;nbsp;https://docs.google.com&lt;/pre&gt;&lt;h2&gt;2. 什么时候用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;？&lt;/h2&gt;&lt;p&gt;典型场景：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;场景&lt;/th&gt;&lt;th&gt;为什么要用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Google Docs&lt;/td&gt;&lt;td&gt;你已经登录 Google 账号&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;X / Twitter&lt;/td&gt;&lt;td&gt;自动登录容易触发风控&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;企业后台&lt;/td&gt;&lt;td&gt;需要真实账号权限&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;飞书管理后台&lt;/td&gt;&lt;td&gt;需要企业登录状态&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;微信公众平台&lt;/td&gt;&lt;td&gt;扫码登录，不适合给模型账号密码&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;支付类后台&lt;/td&gt;&lt;td&gt;必须人工确认&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;客户系统&lt;/td&gt;&lt;td&gt;登录流程复杂，cookie 已在本机&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;官方登录文档也建议：当网站需要登录时，应该在 host browser profile 里手动登录，不要把凭据交给模型；自动化登录容易触发反机器人机制甚至锁号。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser-login&quot; title=&quot;Browser login - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;这句话非常重要。&lt;/p&gt;&lt;p&gt;AI 可以帮你操作页面，但账号密码、验证码、二次验证，最好还是你自己处理。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;六、为什么不建议一上来就用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;？&lt;/h1&gt;&lt;p&gt;因为 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 虽然方便，但风险也更高。&lt;/p&gt;&lt;h2&gt;1. 它接的是你的真实浏览器&lt;/h2&gt;&lt;p&gt;你的真实浏览器里面有大量敏感环境：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;已登录后台；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;邮箱；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;私人账号；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;企业账号；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;客户资料；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;财务系统；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;表单提交权限；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;删除权限；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;发布权限。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;如果 agent prompt 被网页里的恶意内容影响，或者你给了过宽权限，就可能出现误操作。&lt;/p&gt;&lt;p&gt;所以我的建议是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;能用 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt;，先用 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt;；必须用登录态，再用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;2. &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 也有功能限制&lt;/h2&gt;&lt;p&gt;官方故障排查文档提到，&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; / existing-session profiles 保留当前 Chrome MCP 的限制，例如 ref-driven actions、单文件上传 hooks、没有 dialog timeout overrides、没有 &lt;code inline=&quot;&quot;&gt;wait --load networkidle&lt;/code&gt;、没有 responsebody、PDF export、download interception 或 batch actions。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser-linux-troubleshooting&quot; title=&quot;Browser troubleshooting - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;通俗说：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 适合接管真实登录状态，但不是所有自动化能力都像 managed browser 那么完整。&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;所以，如果你只是做网页分析、截图、转 PDF、公开资料抓取，&lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; 更合适。&lt;/p&gt;&lt;p&gt;如果你必须依赖真实登录状态，再用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;七、自定义 profile：&lt;code inline=&quot;&quot;&gt;work&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;student&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;client-a&lt;/code&gt;&lt;/h1&gt;&lt;h2&gt;1. 自定义 profile 解决“多任务隔离”&lt;/h2&gt;&lt;p&gt;你可以创建多个 profile。&lt;/p&gt;&lt;p&gt;官方 CLI 文档给了类似命令：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;profiles
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;work&amp;nbsp;--color&amp;nbsp;&amp;quot;#FF5A36&amp;quot;
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;chrome-live&amp;nbsp;--driver&amp;nbsp;existing-session
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;remote&amp;nbsp;--cdp-url&amp;nbsp;https://browser-host.example.com
openclaw&amp;nbsp;browser&amp;nbsp;delete-profile&amp;nbsp;--name&amp;nbsp;work&lt;/pre&gt;&lt;p&gt;文档也说明，可以通过 &lt;code inline=&quot;&quot;&gt;--browser-profile work&lt;/code&gt; 使用指定 profile。(&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;这就非常适合你这种场景。&lt;/p&gt;&lt;p&gt;比如你要同时跑：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;学生咨询系统；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;微信公众号素材采集；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;行业报告资料搜集；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;客户后台经营数据查看；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AI 课程后台管理。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;你可以这样设计：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;student
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;report
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;client-a
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;client-b&lt;/pre&gt;&lt;p&gt;使用时：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;student&amp;nbsp;open&amp;nbsp;https://student-system.example.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;report&amp;nbsp;open&amp;nbsp;https://www.google.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;client-a&amp;nbsp;open&amp;nbsp;https://backend-a.example.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;client-b&amp;nbsp;open&amp;nbsp;https://backend-b.example.com&lt;/pre&gt;&lt;p&gt;这样就不会乱。&lt;/p&gt;&lt;h2&gt;2. 自定义 profile 的管理价值&lt;/h2&gt;&lt;p&gt;对你这种经常做企业 AI 落地、课程演示、客户咨询的人来说，自定义 profile 的价值不只是技术隔离，而是业务管理。&lt;/p&gt;&lt;p&gt;可以按这些方式命名：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;命名方式&lt;/th&gt;&lt;th&gt;示例&lt;/th&gt;&lt;th&gt;适合场景&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;按客户&lt;/td&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;client-jurui&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;client-zhongqiyunlian&lt;/code&gt;&lt;/td&gt;&lt;td&gt;客户后台、资料、系统隔离&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按任务&lt;/td&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;report&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;wechat-crawl&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;ppt-data&lt;/code&gt;&lt;/td&gt;&lt;td&gt;不同任务互不干扰&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按角色&lt;/td&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;teacher&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;student&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;admin&lt;/code&gt;&lt;/td&gt;&lt;td&gt;多角色系统测试&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按账号&lt;/td&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;x-main&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;x-alt&lt;/code&gt;&lt;/td&gt;&lt;td&gt;社媒多账号&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;按环境&lt;/td&gt;&lt;td&gt;&lt;code inline=&quot;&quot;&gt;dev&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;test&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;prod&lt;/code&gt;&lt;/td&gt;&lt;td&gt;系统测试/后台验证&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;这就像你给 AI 配了多个“办公桌”。&lt;/p&gt;&lt;p&gt;每张桌子上只放这一类任务需要的资料、登录状态和页面。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;八、远程 CDP profile：把浏览器放到服务器或容器里&lt;/h1&gt;&lt;h2&gt;1. 什么是 CDP？&lt;/h2&gt;&lt;p&gt;CDP 是 Chrome DevTools Protocol，简单理解就是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Chrome 提供的一套远程控制接口。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;OpenClaw 可以通过 CDP 控制本地或远程浏览器。&lt;/p&gt;&lt;p&gt;官方文档里说，自定义 CDP profile 可以指向本地或远程 CDP endpoint；远程 CDP profiles 支持 &lt;code inline=&quot;&quot;&gt;http://&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;https://&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;ws://&lt;/code&gt;、&lt;code inline=&quot;&quot;&gt;wss://&lt;/code&gt;。 (&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;比如：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;remote&amp;nbsp;--cdp-url&amp;nbsp;https://browser-host.example.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;remote&amp;nbsp;open&amp;nbsp;https://example.com&lt;/pre&gt;&lt;h2&gt;2. 远程 profile 适合什么场景？&lt;/h2&gt;&lt;p&gt;适合这些情况：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;场景&lt;/th&gt;&lt;th&gt;价值&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;Linux 服务器没图形界面&lt;/td&gt;&lt;td&gt;用 headless browser 跑&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;WSL 控制 Windows 浏览器困难&lt;/td&gt;&lt;td&gt;改为远程 CDP&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;多任务长期运行&lt;/td&gt;&lt;td&gt;不占本机浏览器&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;企业统一部署&lt;/td&gt;&lt;td&gt;每个 agent 连指定远程 browser&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;自动化采集&lt;/td&gt;&lt;td&gt;放服务器上跑，不影响本机&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;演示环境&lt;/td&gt;&lt;td&gt;提前准备一个干净远程浏览器&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;尤其是你之前折腾过 Windows、WSL、微信、GUI 自动化，这个思路很重要：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;凡是本机 GUI 控制不稳定的地方，可以考虑把浏览器自动化搬到可控的 CDP 环境。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h1&gt;九、它到底解决了哪些痛点？&lt;/h1&gt;&lt;h2&gt;痛点一：AI 操作网页容易污染个人浏览器&lt;/h2&gt;&lt;p&gt;没有 profile 时，AI 可能直接操作你的真实浏览器。&lt;/p&gt;&lt;p&gt;这很危险。&lt;/p&gt;&lt;p&gt;有了 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; profile，AI 默认在独立环境里操作，不碰你的私人浏览器。官方文档也强调，&lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; 是隔离的 agent-only browser，不是日常主浏览器。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;解决结果：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;AI 有地方干活，但不会乱动你的私人账号。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;痛点二：多个任务抢同一个浏览器现场&lt;/h2&gt;&lt;p&gt;比如一个任务在查资料，一个任务在登录后台，一个任务在测试表单。&lt;/p&gt;&lt;p&gt;如果都在同一个浏览器 profile 里，会出现：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;tab 混乱；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;页面焦点抢来抢去；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AI 点错 tab；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;登录态串台；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;下载文件混在一起；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;截图截错页面。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;用不同 profile，可以把任务现场分开。&lt;/p&gt;&lt;p&gt;解决结果：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;一个任务一个浏览器工作区，互不干扰。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;痛点三：登录网站不能把账号密码交给模型&lt;/h2&gt;&lt;p&gt;很多后台必须登录，但你不能把密码给模型。&lt;/p&gt;&lt;p&gt;官方登录文档也明确建议，登录应由用户在 host browser profile 里手动完成，不要把凭据交给模型，因为自动登录容易触发反机器人机制并锁定账号。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser-login&quot; title=&quot;Browser login - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;解决结果：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;人负责登录和授权，AI 负责登录后的页面操作。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;这就是合理分工。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;痛点四：AI 只会“搜索”，不会“验证页面结果”&lt;/h2&gt;&lt;p&gt;传统 web_search 只能拿搜索结果。&lt;/p&gt;&lt;p&gt;但真实业务里很多信息在网页交互后才出现：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;点开菜单；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;登录后台；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;切换筛选条件；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;翻页；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;下载表格；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;截图留证；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;导出 PDF；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;填写表单后验证提交结果。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;官方工具总览里也把 &lt;code inline=&quot;&quot;&gt;browser&lt;/code&gt; 归为“Operate a browser session”，也就是当 agent 需要操作浏览器会话时使用。(&lt;a href=&quot;https://docs.openclaw.ai/tools&quot; title=&quot;Overview - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;解决结果：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;OpenClaw 不只是查网页，而是能像人一样操作网页流程。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h2&gt;痛点五：演示和交付需要可复现现场&lt;/h2&gt;&lt;p&gt;你做课程、直播、企业内训的时候，最怕演示翻车：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;浏览器历史记录太乱；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;账号没登录；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;tab 太多；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;页面缓存异常；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;弹窗干扰；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AI 操作错页面。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;如果提前准备一个 &lt;code inline=&quot;&quot;&gt;demo&lt;/code&gt; profile：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;demo
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;demo&amp;nbsp;open&amp;nbsp;https://your-demo-page.example.com&lt;/pre&gt;&lt;p&gt;你就可以把演示环境固定下来。&lt;/p&gt;&lt;p&gt;解决结果：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;每次演示都从同一个干净现场开始，稳定性高很多。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h1&gt;十、哪些场景最适合用 &lt;code inline=&quot;&quot;&gt;--browser-profile&lt;/code&gt;？&lt;/h1&gt;&lt;h2&gt;场景一：行业研究和报告资料搜集&lt;/h2&gt;&lt;p&gt;比如你让 OpenClaw 帮你研究：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;新能源汽车后市场；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;女士内衣 OEM/ODM；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;假发行业；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;稀土磁材；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AI 智能体工具。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;可以用：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;report&amp;nbsp;open&amp;nbsp;https://www.google.com&lt;/pre&gt;&lt;p&gt;让它做：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;搜索关键词；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;打开报告页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;保存 PDF；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;记录来源；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;对比不同网页信息；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;把网页证据转成报告素材。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;这类任务建议用 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; 或 &lt;code inline=&quot;&quot;&gt;report&lt;/code&gt;，不建议用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;场景二：企业后台操作&lt;/h2&gt;&lt;p&gt;比如：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;飞书管理后台；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;微信公众平台；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;CRM；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;项目管理系统；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;教务系统；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;数据看板；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;客户系统。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;这类网站通常需要登录。&lt;/p&gt;&lt;p&gt;建议：&lt;/p&gt;&lt;ol class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;先用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 或专门 profile 手动登录；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;再让 agent 操作页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;高风险按钮必须人工确认。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;示例：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;tabs
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;open&amp;nbsp;https://example-admin.com&lt;/pre&gt;&lt;p&gt;但要注意，&lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 适合真实登录态，但也意味着权限更大，要设置好 agent 行为边界。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;场景三：网页自动化测试&lt;/h2&gt;&lt;p&gt;你有 Laravel / Yii / 小程序后台 / AI dashboard 之类项目时，可以让 OpenClaw 帮你做：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;打开本地页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;输入表单；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;点击提交；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;检查提示；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;回归测试；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;生成 bug 记录。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;示例：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;test&amp;nbsp;open&amp;nbsp;http://localhost:3000
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;test&amp;nbsp;snapshot&lt;/pre&gt;&lt;p&gt;这类任务建议用独立 &lt;code inline=&quot;&quot;&gt;test&lt;/code&gt; profile，避免干扰其他工作。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;场景四：多账号运营&lt;/h2&gt;&lt;p&gt;比如你有：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;一个主公众号；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;一个课程号；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;一个测试号；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;一个客户号。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;不要混在一个浏览器里。&lt;/p&gt;&lt;p&gt;可以这样：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;wechat-main
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;wechat-course
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;wechat-client-a&lt;/pre&gt;&lt;p&gt;每个 profile 登录不同账号。&lt;/p&gt;&lt;p&gt;这样 agent 执行任务时不会串号。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;场景五：课程演示 / 直播演示&lt;/h2&gt;&lt;p&gt;比如你要演示：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;“AI 如何自动打开网页、查资料、截图、整理为报告。”&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;可以专门建：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;demo
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;demo&amp;nbsp;start&lt;/pre&gt;&lt;p&gt;演示前准备好：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;干净浏览器；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;必要登录态；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;固定书签；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;固定页面；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;无关 tab 清空。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;这样直播时不容易翻车。&lt;/p&gt;&lt;hr/&gt;&lt;h2&gt;场景六：远程服务器自动化&lt;/h2&gt;&lt;p&gt;如果你希望某些任务长期跑：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;定时打开网页检查更新；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;生成网页截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;保存页面 PDF；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;检查后台状态；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;监控某个页面变化。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;可以创建远程 CDP profile：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;remote&amp;nbsp;--cdp-url&amp;nbsp;https://browser-host.example.com
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;remote&amp;nbsp;open&amp;nbsp;https://example.com&lt;/pre&gt;&lt;p&gt;这类适合更工程化的 OpenClaw 自动化。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;十一、常用命令清单&lt;/h1&gt;&lt;h2&gt;1. 查看已有 profiles&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;profiles&lt;/pre&gt;&lt;h2&gt;2. 启动默认独立浏览器&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;start&lt;/pre&gt;&lt;h2&gt;3. 查看状态&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;status&lt;/pre&gt;&lt;h2&gt;4. 做基础检查&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;doctor&lt;/pre&gt;&lt;p&gt;更深检查：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;doctor&amp;nbsp;--deep&lt;/pre&gt;&lt;p&gt;官方文档说明，&lt;code inline=&quot;&quot;&gt;doctor --deep&lt;/code&gt; 会增加 live snapshot probe，适合在基础 CDP readiness 正常后证明当前 tab 可以被检查。(&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;h2&gt;5. 打开网页&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;open&amp;nbsp;https://example.com&lt;/pre&gt;&lt;h2&gt;6. 查看 tabs&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;tabs&lt;/pre&gt;&lt;h2&gt;7. 读取页面快照&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;snapshot&lt;/pre&gt;&lt;h2&gt;8. 新建工作 profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;work&amp;nbsp;--color&amp;nbsp;&amp;quot;#FF5A36&amp;quot;&lt;/pre&gt;&lt;h2&gt;9. 使用工作 profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;work&amp;nbsp;open&amp;nbsp;https://example.com&lt;/pre&gt;&lt;h2&gt;10. 创建已有 Chrome 会话 profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;chrome-live&amp;nbsp;--driver&amp;nbsp;existing-session&lt;/pre&gt;&lt;h2&gt;11. 创建远程 CDP profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;remote&amp;nbsp;--cdp-url&amp;nbsp;https://browser-host.example.com&lt;/pre&gt;&lt;h2&gt;12. 删除 profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;delete-profile&amp;nbsp;--name&amp;nbsp;work&lt;/pre&gt;&lt;p&gt;官方文档也说明，profile 删除时，本地数据目录会被移动到垃圾桶；本地 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt; profiles 会自动分配 CDP 端口 / URL，通常只有远程 CDP 才需要手动设置。(&lt;a href=&quot;https://docs.openclaw.ai/ja-JP/tools/browser?utm_source=chatgpt.com&quot; title=&quot;ブラウザー（OpenClaw管理）&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;十二、配置层面要注意什么？&lt;/h1&gt;&lt;h2&gt;1. 如果 &lt;code inline=&quot;&quot;&gt;openclaw browser&lt;/code&gt; 命令不存在&lt;/h2&gt;&lt;p&gt;可能是 browser 插件没有启用。&lt;/p&gt;&lt;p&gt;官方文档说明，如果 &lt;code inline=&quot;&quot;&gt;openclaw browser&lt;/code&gt; 是 unknown command，要检查 &lt;code inline=&quot;&quot;&gt;~/.openclaw/openclaw.json&lt;/code&gt; 里的 &lt;code inline=&quot;&quot;&gt;plugins.allow&lt;/code&gt;；当使用限制性插件 allowlist 时，需要显式加入 &lt;code inline=&quot;&quot;&gt;browser&lt;/code&gt;，除非已经有 root &lt;code inline=&quot;&quot;&gt;browser&lt;/code&gt; 配置块。(&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;可以加：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;quot;plugins&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;allow&amp;quot;:&amp;nbsp;[&amp;quot;telegram&amp;quot;,&amp;nbsp;&amp;quot;browser&amp;quot;]
&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;如果你不是 Telegram，而是飞书、微信，就把对应 channel 换成自己的。&lt;/p&gt;&lt;p&gt;比如：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;quot;plugins&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;allow&amp;quot;:&amp;nbsp;[&amp;quot;browser&amp;quot;,&amp;nbsp;&amp;quot;feishu&amp;quot;,&amp;nbsp;&amp;quot;openclaw-weixin&amp;quot;]
&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;h2&gt;2. 如果 agent 看不到 browser 工具&lt;/h2&gt;&lt;p&gt;官方文档提醒：&lt;code inline=&quot;&quot;&gt;tools.profile: &amp;quot;coding&amp;quot;&lt;/code&gt; 包含 &lt;code inline=&quot;&quot;&gt;web_search&lt;/code&gt; 和 &lt;code inline=&quot;&quot;&gt;web_fetch&lt;/code&gt;，但不包含完整 &lt;code inline=&quot;&quot;&gt;browser&lt;/code&gt; tool；如果 agent 或 sub-agent 要用 browser automation，需要在工具策略里显式加 &lt;code inline=&quot;&quot;&gt;browser&lt;/code&gt;。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser&quot; title=&quot;Browser (OpenClaw-managed) - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;示例：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;quot;tools&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;profile&amp;quot;:&amp;nbsp;&amp;quot;coding&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;alsoAllow&amp;quot;:&amp;nbsp;[&amp;quot;browser&amp;quot;]
&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;单个 agent 可以这样：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;quot;agents&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;list&amp;quot;:&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;id&amp;quot;:&amp;nbsp;&amp;quot;main&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;tools&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;alsoAllow&amp;quot;:&amp;nbsp;[&amp;quot;browser&amp;quot;]
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]
&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;这点很关键。&lt;/p&gt;&lt;p&gt;很多人以为模型不行，其实是工具没给它。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;十三、容易踩的坑&lt;/h1&gt;&lt;h2&gt;坑一：以为新 tab 就是新 session&lt;/h2&gt;&lt;p&gt;不是。&lt;/p&gt;&lt;p&gt;新 tab 只是页面分开。&lt;/p&gt;&lt;p&gt;真正隔离至少有三层：&lt;/p&gt;&lt;table&gt;&lt;thead&gt;&lt;tr class=&quot;firstRow&quot;&gt;&lt;th&gt;隔离层&lt;/th&gt;&lt;th&gt;解决什么&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;新 tab&lt;/td&gt;&lt;td&gt;页面分开&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;新 browser profile&lt;/td&gt;&lt;td&gt;登录状态、cookie、缓存、任务现场分开&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;新 OpenClaw session&lt;/td&gt;&lt;td&gt;对话上下文、任务记忆分开&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;所以你要另跑一个任务，最稳的是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;新 OpenClaw session + 新 browser profile。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;坑二：用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt; 但 Chrome 没开 tab&lt;/h2&gt;&lt;p&gt;官方故障排查文档说，如果出现 &lt;code inline=&quot;&quot;&gt;No Chrome tabs found for profile=&amp;quot;user&amp;quot;&lt;/code&gt;，说明你在使用 existing-session / Chrome MCP profile，OpenClaw 能看到本地 Chrome，但没有可附加的 open tab。修复方式是用 managed browser，或者确保本地 Chrome 至少有一个打开的 tab，再用 &lt;code inline=&quot;&quot;&gt;--browser-profile user&lt;/code&gt;。(&lt;a href=&quot;https://docs.openclaw.ai/tools/browser-linux-troubleshooting&quot; title=&quot;Browser troubleshooting - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;命令：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;start&lt;/pre&gt;&lt;p&gt;或者先手动打开 Chrome 一个标签页，再：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;tabs&lt;/pre&gt;&lt;h2&gt;坑三：服务器环境没有图形界面&lt;/h2&gt;&lt;p&gt;官方 CLI 文档提到，在没有 &lt;code inline=&quot;&quot;&gt;DISPLAY&lt;/code&gt; 或 &lt;code inline=&quot;&quot;&gt;WAYLAND_DISPLAY&lt;/code&gt; 的 Linux host 上，本地 managed profiles 会自动 headless 运行，除非显式关闭 headless。(&lt;a href=&quot;https://docs.openclaw.ai/cli/browser&quot; title=&quot;Browser - OpenClaw&quot;&gt;OpenClaw&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;所以 Linux 服务器上看不到浏览器窗口，不一定是错误。&lt;/p&gt;&lt;p&gt;它可能是在 headless 模式运行。&lt;/p&gt;&lt;h2&gt;坑四：browser 插件没启用&lt;/h2&gt;&lt;p&gt;命令不存在、agent 说 browser unavailable，多半是插件、工具策略或配置 allowlist 问题。&lt;/p&gt;&lt;p&gt;先查：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--help&lt;/pre&gt;&lt;p&gt;再查配置：&lt;/p&gt;&lt;pre&gt;cat&amp;nbsp;~/.openclaw/openclaw.json&lt;/pre&gt;&lt;p&gt;重点看：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;quot;plugins&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;allow&amp;quot;:&amp;nbsp;[&amp;quot;browser&amp;quot;]
&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;以及：&lt;/p&gt;&lt;pre&gt;{
&amp;nbsp;&amp;nbsp;&amp;quot;tools&amp;quot;:&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;alsoAllow&amp;quot;:&amp;nbsp;[&amp;quot;browser&amp;quot;]
&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;hr/&gt;&lt;h1&gt;十四、给你的最佳实践：按任务类型设计 profile&lt;/h1&gt;&lt;h2&gt;1. 日常研究&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;research
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;research&amp;nbsp;open&amp;nbsp;https://www.google.com&lt;/pre&gt;&lt;p&gt;适合：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;行业研究；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;资料搜集；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;报告截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;页面 PDF 留证。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;2. 客户项目&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;client-jurui
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;client-zhongqi&lt;/pre&gt;&lt;p&gt;适合：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;不同客户系统隔离；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不同资料来源隔离；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不同登录态隔离。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;3. 课程演示&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;demo&lt;/pre&gt;&lt;p&gt;适合：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;直播；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;线下课；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;企业内训；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;AI 工作流演示。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;4. 后台系统测试&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;test
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;test&amp;nbsp;open&amp;nbsp;http://localhost:3000&lt;/pre&gt;&lt;p&gt;适合：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;本地开发；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;表单测试；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;页面截图；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;bug 复现。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;5. 真实登录账号&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;tabs&lt;/pre&gt;&lt;p&gt;适合：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;你已经登录的 Chrome；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;需要人工扫码/二次验证；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;不能把账号密码交给模型的系统。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;但记住：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;真实账号场景，要让 AI 少做高风险动作。发布、删除、付款、提交审批、修改权限，一律人工确认。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;hr/&gt;&lt;h1&gt;十五、最推荐的工作流&lt;/h1&gt;&lt;h2&gt;第一步：先用独立 profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;doctor
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;start
openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;openclaw&amp;nbsp;open&amp;nbsp;https://example.com&lt;/pre&gt;&lt;h2&gt;第二步：需要分任务时，新建 profile&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;report
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;demo
openclaw&amp;nbsp;browser&amp;nbsp;create-profile&amp;nbsp;--name&amp;nbsp;client-a&lt;/pre&gt;&lt;h2&gt;第三步：需要登录态时，人工登录&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;client-a&amp;nbsp;open&amp;nbsp;https://client-backend.example.com&lt;/pre&gt;&lt;p&gt;你手动登录。&lt;/p&gt;&lt;p&gt;然后再让 OpenClaw 操作。&lt;/p&gt;&lt;h2&gt;第四步：需要真实 Chrome 登录态时，再用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;user&amp;nbsp;tabs&lt;/pre&gt;&lt;h2&gt;第五步：任务结束后清理&lt;/h2&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;--browser-profile&amp;nbsp;report&amp;nbsp;stop&lt;/pre&gt;&lt;p&gt;不再需要的 profile：&lt;/p&gt;&lt;pre&gt;openclaw&amp;nbsp;browser&amp;nbsp;delete-profile&amp;nbsp;--name&amp;nbsp;old-task&lt;/pre&gt;&lt;hr/&gt;&lt;h1&gt;十六、它和 session 的关系&lt;/h1&gt;&lt;p&gt;这个地方最容易混。&lt;/p&gt;&lt;h2&gt;browser profile 管浏览器环境&lt;/h2&gt;&lt;p&gt;它管的是：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;tab；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;cookie；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;登录态；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;浏览器缓存；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;浏览器数据目录；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;CDP 连接；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;是否接管真实 Chrome；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;是否远程控制浏览器。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;OpenClaw session 管对话上下文&lt;/h2&gt;&lt;p&gt;它管的是：&lt;/p&gt;&lt;ul class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;你前面说过什么；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;agent 记住了什么；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;当前任务目标；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;任务上下文；&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;历史消息。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;所以：&lt;/p&gt;&lt;pre&gt;新&amp;nbsp;browser&amp;nbsp;profile&amp;nbsp;≠&amp;nbsp;新&amp;nbsp;OpenClaw&amp;nbsp;session
新&amp;nbsp;OpenClaw&amp;nbsp;session&amp;nbsp;≠&amp;nbsp;新&amp;nbsp;browser&amp;nbsp;profile&lt;/pre&gt;&lt;p&gt;真正不冲突的做法：&lt;/p&gt;&lt;pre&gt;一个新任务&amp;nbsp;=&amp;nbsp;一个新&amp;nbsp;OpenClaw&amp;nbsp;session&amp;nbsp;+&amp;nbsp;一个明确&amp;nbsp;browser&amp;nbsp;profile&lt;/pre&gt;&lt;p&gt;比如：&lt;/p&gt;&lt;pre&gt;session:&amp;nbsp;学生咨询建议任务
browser&amp;nbsp;profile:&amp;nbsp;student

session:&amp;nbsp;行业报告资料搜集任务
browser&amp;nbsp;profile:&amp;nbsp;report

session:&amp;nbsp;课程演示任务
browser&amp;nbsp;profile:&amp;nbsp;demo&lt;/pre&gt;&lt;p&gt;这样才稳。&lt;/p&gt;&lt;hr/&gt;&lt;h1&gt;十七、一句话讲透&lt;/h1&gt;&lt;p&gt;&lt;code inline=&quot;&quot;&gt;openclaw browser --browser-profile&lt;/code&gt; 的本质，是把浏览器从“你的私人操作界面”，变成“AI 可控、可隔离、可复现、可分工的任务现场”。&lt;/p&gt;&lt;p&gt;它解决的核心痛点是：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;AI 要操作网页，但不能乱动你的私人浏览器；AI 要使用登录态，但不能拿你的密码；AI 要同时跑多个任务，但不能互相串台；AI 要做真实业务，但必须有可控的浏览器工作区。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;所以，对你这种重度使用 OpenClaw、Codex、Claude Code、opencode、deepseek-tui、Hermes 的人来说，&lt;code inline=&quot;&quot;&gt;--browser-profile&lt;/code&gt; 不是一个小参数。&lt;/p&gt;&lt;p&gt;它是 OpenClaw 从“聊天助理”走向“业务执行智能体”的关键开关。&lt;/p&gt;&lt;p&gt;最实用的一句话：&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;公开网页用 &lt;code inline=&quot;&quot;&gt;openclaw&lt;/code&gt;，多任务用自定义 profile，必须真实登录才用 &lt;code inline=&quot;&quot;&gt;user&lt;/code&gt;，长期自动化用 remote CDP。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;</description><pubDate>Sun, 24 May 2026 18:02:59 +0800</pubDate></item><item><title>我让小龙虾帮我写一个 mac 应用，实时翻译屏幕上我选中的英文</title><link>https://jiangtian.top/?id=16347</link><description>&lt;p&gt;我问：&lt;/p&gt;&lt;p&gt;我现在要做一个在我本机运行的捕捉屏幕上英文并连接大模型的应用，这个提供配置入口即可，让我能够实时看到：“简单英语”（通常指 基本英语 (Basic English)）的发明人是英国语言学家和哲学家 查尔斯·凯·奥格登 (Charles Kay Ogden)&lt;/p&gt;&lt;p&gt;这种英语的翻译，让我秒懂。并且能够自动写入到 obsidian 中间去。如果同样的单词或者句子多次选中，那就在 obsidian 里记录下选中的时间，并显示选中次数，以此来反应我学习的进度。&lt;/p&gt;&lt;p&gt;你现规划下怎么做。&lt;/p&gt;&lt;p&gt;小龙虾答：&lt;/p&gt;&lt;h2 style=&quot;box-sizing: border-box; z-index: 1; position: relative; letter-spacing: -0.03em; border-bottom: 1px solid rgb(229, 229, 234); text-wrap: balance; margin: 1.4em 0px 0.5em; padding-bottom: 0.25em; scroll-margin-top: 80px; line-height: 1.3; font-family: &amp;quot;Iowan Old Style&amp;quot;, &amp;quot;Palatino Linotype&amp;quot;, &amp;quot;Book Antiqua&amp;quot;, Georgia, serif; color: rgb(60, 60, 67); background-color: rgb(248, 249, 250);&quot;&gt;规划：ScreenEn → 秒懂英文 + Obsidian 学习追踪&lt;/h2&gt;&lt;h3 style=&quot;box-sizing: border-box; z-index: 1; position: relative; letter-spacing: -0.01em; text-wrap: balance; margin: 1.2em 0px 0.4em; scroll-margin-top: 80px; font-size: 1.15em; line-height: 1.35; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; background-color: rgb(248, 249, 250);&quot;&gt;核心流程&lt;/h3&gt;&lt;div class=&quot;code-block-wrapper&quot; style=&quot;box-sizing: border-box; z-index: 1; position: relative; border-radius: 6px; margin-top: 0.75em; overflow: hidden; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;div class=&quot;code-block-header&quot; style=&quot;box-sizing: border-box; background: rgba(0, 0, 0, 0.08); justify-content: space-between; align-items: center; gap: 8px; padding: 4px 8px 4px 12px; font-size: 12px; line-height: 1; display: flex;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;code-block-copy&quot; data-code=&quot;选中英文 → 快捷键触发 → 剪贴板捕获 → LLM 翻译 → 浮窗秒懂展示 → 自动写入 Obsidian&quot; aria-label=&quot;复制代码&quot; style=&quot;font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: 11px; line-height: inherit; font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; color: rgb(110, 110, 115); appearance: none; cursor: pointer; border-radius: 6px; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-width: medium; border-style: none; border-color: currentcolor; padding: 2px 6px; transition: color 0.15s, background 0.15s;&quot;&gt;&lt;span class=&quot;code-block-copy__idle&quot; style=&quot;box-sizing: border-box;&quot;&gt;复制&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre style=&quot;box-sizing: border-box; margin: 0px 0px 0.95em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch; border-radius: 0px 0px 6px 6px; background: rgba(0, 0, 0, 0.04); padding: 14px 16px; overflow-x: auto;&quot;&gt;选中英文&amp;nbsp;→&amp;nbsp;快捷键触发&amp;nbsp;→&amp;nbsp;剪贴板捕获&amp;nbsp;→&amp;nbsp;LLM&amp;nbsp;翻译&amp;nbsp;→&amp;nbsp;浮窗秒懂展示&amp;nbsp;→&amp;nbsp;自动写入&amp;nbsp;Obsidian&lt;/pre&gt;&lt;/div&gt;&lt;h3 style=&quot;box-sizing: border-box; z-index: 1; position: relative; letter-spacing: -0.01em; text-wrap: balance; margin: 1.2em 0px 0.4em; scroll-margin-top: 80px; font-size: 1.15em; line-height: 1.35; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; background-color: rgb(248, 249, 250);&quot;&gt;五个模块&lt;/h3&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;1. 文本捕获（Capture）&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0.75em 0px 0.95em; padding-left: 1.6em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;全局快捷键触发（默认 &lt;code style=&quot;box-sizing: border-box; font-family: &amp;quot;JetBrains Mono&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Monaco, Consolas, monospace; background: rgba(0, 0, 0, 0.06); border-radius: 6px; padding: 0.15em 0.4em; font-size: 0.88em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch;&quot;&gt;Cmd+Shift+T&lt;/code&gt;，可配置）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;触发后模拟 &lt;code style=&quot;box-sizing: border-box; font-family: &amp;quot;JetBrains Mono&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Monaco, Consolas, monospace; background: rgba(0, 0, 0, 0.06); border-radius: 6px; padding: 0.15em 0.4em; font-size: 0.88em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch;&quot;&gt;Cmd+C&lt;/code&gt;，读取剪贴板内容&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;备选方案：macOS Accessibility API 直接读取选中文字（更优雅但跨应用兼容性差，先用剪贴板方案）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;2. LLM 翻译（Translate）&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0.75em 0px 0.95em; padding-left: 1.6em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;可配置项：API Endpoint、API Key、Model Name、自定义 Prompt&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;默认 Prompt 方向：&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;不是逐字翻译，而是用最直觉的中文让用户秒懂&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;短词→给释义+一句话场景理解&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;长句→给中文意译+关键结构拆解&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;3. 浮窗展示（Overlay）&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0.75em 0px 0.95em; padding-left: 1.6em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;macOS 原生浮动窗口，置顶显示在屏幕右下角或光标附近&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;翻译结果停留 5-8 秒自动消失（可配置），鼠标悬停可保持&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;之前的结果可通过 menubar 图标历史记录回看&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;4. Obsidian 写入（Vault Writer）&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0.75em 0px 0.95em; padding-left: 1.6em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;每个 单词/短语/句子 对应 vault 里一个 markdown 文件&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;文件名：英文原文的 slug 形式（如 &lt;code style=&quot;box-sizing: border-box; font-family: &amp;quot;JetBrains Mono&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Monaco, Consolas, monospace; background: rgba(0, 0, 0, 0.06); border-radius: 6px; padding: 0.15em 0.4em; font-size: 0.88em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch;&quot;&gt;ubiquitous.md&lt;/code&gt;）&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;首次&lt;/span&gt;：创建文件，写入释义、简单理解、选中时间&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;重复选中&lt;/span&gt;：追加时间戳，更新计数，不覆盖已有内容&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;Obsidian 文件结构示例：&lt;/p&gt;&lt;div class=&quot;code-block-wrapper&quot; style=&quot;box-sizing: border-box; z-index: 1; position: relative; border-radius: 6px; margin-top: 0.75em; overflow: hidden; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;div class=&quot;code-block-header&quot; style=&quot;box-sizing: border-box; background: rgba(0, 0, 0, 0.08); justify-content: space-between; align-items: center; gap: 8px; padding: 4px 8px 4px 12px; font-size: 12px; line-height: 1; display: flex;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;code-block-copy&quot; data-code=&quot;vault/ScreenEn/
  ubiquitous.md
  it-is-what-it-is.md
  _dashboard.md        ← 学习进度总览&quot; aria-label=&quot;复制代码&quot; style=&quot;font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: 11px; line-height: inherit; font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; color: rgb(110, 110, 115); appearance: none; cursor: pointer; border-radius: 6px; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-width: medium; border-style: none; border-color: currentcolor; padding: 2px 6px; transition: color 0.15s, background 0.15s;&quot;&gt;&lt;span class=&quot;code-block-copy__idle&quot; style=&quot;box-sizing: border-box;&quot;&gt;复制&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre style=&quot;box-sizing: border-box; margin: 0px 0px 0.95em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch; border-radius: 0px 0px 6px 6px; background: rgba(0, 0, 0, 0.04); padding: 14px 16px; overflow-x: auto;&quot;&gt;vault/ScreenEn/
&amp;nbsp;&amp;nbsp;ubiquitous.md
&amp;nbsp;&amp;nbsp;it-is-what-it-is.md
&amp;nbsp;&amp;nbsp;_dashboard.md&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;学习进度总览&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;单个文件内容：&lt;/p&gt;&lt;div class=&quot;code-block-wrapper&quot; style=&quot;box-sizing: border-box; z-index: 1; position: relative; border-radius: 6px; margin-top: 0.75em; overflow: hidden; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;div class=&quot;code-block-header&quot; style=&quot;box-sizing: border-box; background: rgba(0, 0, 0, 0.08); justify-content: space-between; align-items: center; gap: 8px; padding: 4px 8px 4px 12px; font-size: 12px; line-height: 1; display: flex;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;code-block-copy&quot; data-code=&quot;---
text: &amp;quot;ubiquitous&amp;quot;
type: word
count: 5
first_seen: 2026-05-24T10:30:00+08:00
last_seen: 2026-05-24T17:45:00+08:00
---

# ubiquitous

## 秒懂
到处都有，无处不在

## 场景理解
形容某个东西太常见了，到处都能碰到

## 学习记录
- 2026-05-24 10:30 — 第1次
- 2026-05-24 11:15 — 第2次
- 2026-05-24 17:45 — 第5次&quot; aria-label=&quot;复制代码&quot; style=&quot;font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: 11px; line-height: inherit; font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; color: rgb(110, 110, 115); appearance: none; cursor: pointer; border-radius: 6px; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-width: medium; border-style: none; border-color: currentcolor; padding: 2px 6px; transition: color 0.15s, background 0.15s;&quot;&gt;&lt;span class=&quot;code-block-copy__idle&quot; style=&quot;box-sizing: border-box;&quot;&gt;复制&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre style=&quot;box-sizing: border-box; margin: 0px 0px 0.95em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch; border-radius: 0px 0px 6px 6px; background: rgba(0, 0, 0, 0.04); padding: 14px 16px; overflow-x: auto;&quot;&gt;---
text:&amp;nbsp;&amp;quot;ubiquitous&amp;quot;
type:&amp;nbsp;word
count:&amp;nbsp;5
first_seen:&amp;nbsp;2026-05-24T10:30:00+08:00
last_seen:&amp;nbsp;2026-05-24T17:45:00+08:00
---#&amp;nbsp;ubiquitous##&amp;nbsp;秒懂到处都有，无处不在##&amp;nbsp;场景理解形容某个东西太常见了，到处都能碰到##&amp;nbsp;学习记录-&amp;nbsp;2026-05-24&amp;nbsp;10:30&amp;nbsp;—&amp;nbsp;第1次-&amp;nbsp;2026-05-24&amp;nbsp;11:15&amp;nbsp;—&amp;nbsp;第2次-&amp;nbsp;2026-05-24&amp;nbsp;17:45&amp;nbsp;—&amp;nbsp;第5次&lt;/pre&gt;&lt;/div&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;5. 配置界面（Config UI）&lt;/span&gt;&lt;/p&gt;&lt;ul style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0.75em 0px 0.95em; padding-left: 1.6em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;macOS menubar 常驻图标，点击弹出配置面板&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;配置项：&lt;/p&gt;&lt;/li&gt;&lt;ul style=&quot;list-style-type: square;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;LLM API Endpoint / Key / Model&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;翻译 Prompt 模板&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Obsidian Vault 路径&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;快捷键&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;浮窗显示时长&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;最小捕获长度（避免误触发）&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;h3 style=&quot;box-sizing: border-box; z-index: 1; position: relative; letter-spacing: -0.01em; text-wrap: balance; margin: 1.2em 0px 0.4em; scroll-margin-top: 80px; font-size: 1.15em; line-height: 1.35; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; background-color: rgb(248, 249, 250);&quot;&gt;技术选型&lt;/h3&gt;&lt;table width=&quot;361&quot;&gt;&lt;thead style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;box-sizing: border-box;&quot; class=&quot;firstRow&quot;&gt;&lt;th style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; text-align: left; vertical-align: top; padding: 8px 12px; color: rgb(110, 110, 115); background: none 0% 0% / auto repeat scroll padding-box border-box rgb(241, 243, 245); text-transform: uppercase; letter-spacing: 0.03em; font-size: 12px;&quot;&gt;层&lt;/th&gt;&lt;th style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; text-align: left; vertical-align: top; padding: 8px 12px; color: rgb(110, 110, 115); background: none 0% 0% / auto repeat scroll padding-box border-box rgb(241, 243, 245); text-transform: uppercase; letter-spacing: 0.03em; font-size: 12px;&quot;&gt;选择&lt;/th&gt;&lt;th style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; text-align: left; vertical-align: top; padding: 8px 12px; color: rgb(110, 110, 115); background: none 0% 0% / auto repeat scroll padding-box border-box rgb(241, 243, 245); text-transform: uppercase; letter-spacing: 0.03em; font-size: 12px;&quot;&gt;理由&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody style=&quot;box-sizing: border-box;&quot;&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;语言&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;Python 3&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;你 Mac 上直接跑，配置灵活，LLM 调用方便&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;Menubar + 浮窗&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;rumps + PyObjC&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;原生 macOS menubar 应用，浮窗用 NSWindow&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;全局快捷键&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;pynput&lt;/span&gt; 或 &lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;PyObjC CGEvent&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;跨应用全局监听&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;LLM 调用&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;httpx&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;支持流式，OpenAI 兼容接口&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;Obsidian 写入&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;标准文件 I/O&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;Obsidian 就读 markdown，直接写文件&lt;/td&gt;&lt;/tr&gt;&lt;tr style=&quot;box-sizing: border-box;&quot;&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;配置存储&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;YAML 文件&lt;/span&gt;&lt;/td&gt;&lt;td style=&quot;box-sizing: border-box; border-color: rgb(229, 229, 234); border-image: none 100% / 1 / 0 stretch; vertical-align: top; padding: 8px 12px;&quot;&gt;人工可读可改&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;h3 style=&quot;box-sizing: border-box; z-index: 1; position: relative; letter-spacing: -0.01em; text-wrap: balance; margin: 1.2em 0px 0.4em; scroll-margin-top: 80px; font-size: 1.15em; line-height: 1.35; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; background-color: rgb(248, 249, 250);&quot;&gt;目录结构&lt;/h3&gt;&lt;div class=&quot;code-block-wrapper&quot; style=&quot;box-sizing: border-box; z-index: 1; position: relative; border-radius: 6px; margin-top: 0.75em; overflow: hidden; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;div class=&quot;code-block-header&quot; style=&quot;box-sizing: border-box; background: rgba(0, 0, 0, 0.08); justify-content: space-between; align-items: center; gap: 8px; padding: 4px 8px 4px 12px; font-size: 12px; line-height: 1; display: flex;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;code-block-copy&quot; data-code=&quot;screenen/
  app.py              ← 入口，menubar 应用
  capture.py          ← 快捷键监听 + 剪贴板读取
  translator.py       ← LLM 调用 + Prompt 管理
  overlay.py          ← 浮窗展示
  vault.py            ← Obsidian 文件读写 + 计数追踪
  config.py           ← 配置加载/保存
  config.yaml         ← 默认配置
  requirements.txt&quot; aria-label=&quot;复制代码&quot; style=&quot;font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: 11px; line-height: inherit; font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; color: rgb(110, 110, 115); appearance: none; cursor: pointer; border-radius: 6px; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-width: medium; border-style: none; border-color: currentcolor; padding: 2px 6px; transition: color 0.15s, background 0.15s;&quot;&gt;&lt;span class=&quot;code-block-copy__idle&quot; style=&quot;box-sizing: border-box;&quot;&gt;复制&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre style=&quot;box-sizing: border-box; margin: 0px 0px 0.95em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch; border-radius: 0px 0px 6px 6px; background: rgba(0, 0, 0, 0.04); padding: 14px 16px; overflow-x: auto;&quot;&gt;screenen/
&amp;nbsp;&amp;nbsp;app.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;入口，menubar&amp;nbsp;应用
&amp;nbsp;&amp;nbsp;capture.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;快捷键监听&amp;nbsp;+&amp;nbsp;剪贴板读取
&amp;nbsp;&amp;nbsp;translator.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;LLM&amp;nbsp;调用&amp;nbsp;+&amp;nbsp;Prompt&amp;nbsp;管理
&amp;nbsp;&amp;nbsp;overlay.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;浮窗展示
&amp;nbsp;&amp;nbsp;vault.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;Obsidian&amp;nbsp;文件读写&amp;nbsp;+&amp;nbsp;计数追踪
&amp;nbsp;&amp;nbsp;config.py&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;配置加载/保存
&amp;nbsp;&amp;nbsp;config.yaml&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;←&amp;nbsp;默认配置
&amp;nbsp;&amp;nbsp;requirements.txt&lt;/pre&gt;&lt;/div&gt;&lt;h3 style=&quot;box-sizing: border-box; z-index: 1; position: relative; letter-spacing: -0.01em; text-wrap: balance; margin: 1.2em 0px 0.4em; scroll-margin-top: 80px; font-size: 1.15em; line-height: 1.35; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; background-color: rgb(248, 249, 250);&quot;&gt;启动方式&lt;/h3&gt;&lt;div class=&quot;code-block-wrapper&quot; style=&quot;box-sizing: border-box; z-index: 1; position: relative; border-radius: 6px; margin-top: 0.75em; overflow: hidden; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;div class=&quot;code-block-header&quot; style=&quot;box-sizing: border-box; background: rgba(0, 0, 0, 0.08); justify-content: space-between; align-items: center; gap: 8px; padding: 4px 8px 4px 12px; font-size: 12px; line-height: 1; display: flex;&quot;&gt;&lt;button type=&quot;button&quot; class=&quot;code-block-copy&quot; data-code=&quot;python screenen/app.py
# menubar 出现图标，后台监听快捷键，随时可用&quot; aria-label=&quot;复制代码&quot; style=&quot;font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: 11px; line-height: inherit; font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-optical-sizing: inherit; font-size-adjust: inherit; font-kerning: inherit; font-feature-settings: inherit; font-variation-settings: inherit; font-language-override: inherit; color: rgb(110, 110, 115); appearance: none; cursor: pointer; border-radius: 6px; background-image: initial; background-position: 0px 0px; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; border-width: medium; border-style: none; border-color: currentcolor; padding: 2px 6px; transition: color 0.15s, background 0.15s;&quot;&gt;&lt;span class=&quot;code-block-copy__idle&quot; style=&quot;box-sizing: border-box;&quot;&gt;复制&lt;/span&gt;&lt;/button&gt;&lt;/div&gt;&lt;pre style=&quot;box-sizing: border-box; margin: 0px 0px 0.95em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch; border-radius: 0px 0px 6px 6px; background: rgba(0, 0, 0, 0.04); padding: 14px 16px; overflow-x: auto;&quot;&gt;python&amp;nbsp;screenen/app.py#&amp;nbsp;menubar&amp;nbsp;出现图标，后台监听快捷键，随时可用&lt;/pre&gt;&lt;/div&gt;&lt;hr style=&quot;box-sizing: border-box; z-index: 1; position: relative; border-width: 1px medium medium; border-style: solid none none; border-color: rgb(229, 229, 234) currentcolor currentcolor; border-image: initial; margin: 1.5em 0px; font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;/&gt;&lt;p style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0px 0px 0.95em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot;&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;需要你确认的点：&lt;/span&gt;&lt;/p&gt;&lt;ol style=&quot;box-sizing: border-box; z-index: 1; position: relative; margin: 0.75em 0px 0.95em; padding-left: 1.6em; color: rgb(60, 60, 67); font-family: Inter, -apple-system, &amp;quot;system-ui&amp;quot;, &amp;quot;Segoe UI&amp;quot;, Roboto, sans-serif; font-size: 14.5px; letter-spacing: -0.14px; white-space: normal; background-color: rgb(248, 249, 250);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;Obsidian vault 路径&lt;/span&gt; — 你 vault 在哪个目录？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;LLM&lt;/span&gt; — 你想接哪个？OpenAI 兼容接口？还是本地模型？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;浮窗位置&lt;/span&gt; — 右下角固定，还是跟光标走？&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;box-sizing: border-box; color: #1A1A1E; font-weight: 600;&quot;&gt;要不要 dashboard&lt;/span&gt; — Obsidian 里放一个 &lt;code style=&quot;box-sizing: border-box; font-family: &amp;quot;JetBrains Mono&amp;quot;, ui-monospace, SFMono-Regular, &amp;quot;SF Mono&amp;quot;, Menlo, Monaco, Consolas, monospace; background: rgba(0, 0, 0, 0.06); border-radius: 6px; padding: 0.15em 0.4em; font-size: 0.88em; border-color: rgb(229, 229, 234); border-style: solid; border-width: 1px; border-image: none 100% / 1 / 0 stretch;&quot;&gt;_dashboard.md&lt;/code&gt; 汇总高频词、学习趋势？&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</description><pubDate>Sun, 24 May 2026 17:51:29 +0800</pubDate></item></channel></rss>