代码是 AI 写的了,品味住在哪里

Where Engineering Taste Lives When AI Writes the Code

上个月面试一个候选人。他带了一个 GitHub 项目,说「大部分代码是 AI 写的」。

我说没关系,打开看看。

代码确实漂亮。命名规范,类型标注完整,docstring 齐全,错误处理滴水不漏。如果这是三年前,我会觉得这是一个高级工程师的作品。但现在我知道,这些是任何一个会用 Cursor 的人都能产出的。AI 的默认输出就是 80 分——格式正确、风格一致、看起来专业。

我真正想看的东西,不在代码里。

品味住在哪里

[Read More]

AI 操作你的电脑,最大的对手不是防火墙

The Real Adversary of Computer Use Agents Is Not Detection, But Behavioral Biometrics and Cost

上周帮一个朋友调他的 AI Agent。需求很简单:自动登录一个美国政府网站,填三张表,提交。

他选了 VNC 路线——Agent 通过远程桌面连上一台真实 Mac,操作真实的 Chrome 浏览器。逻辑很对:真实浏览器没有 navigator.webdriver 标记,没有 CDP 连接痕迹,TLS 指纹是真的,Canvas 指纹是真的。从浏览器的视角看,就是一个正常用户坐在键盘前。

他很有信心。然后 Agent 在第二步就被拦住了。

不是被防火墙拦的,不是被反爬拦的。是 Cloudflare Turnstile 弹了一个无感验证,Agent 的鼠标 瞬移 到了按钮上, 零毫秒 完成点击。没有移动轨迹,没有加速度变化,没有人类手指的微颤。

一个人类不可能这样操作。而 Cloudflare 知道。

AI 操作电脑的四层对抗

[Read More]

用 Vision + macOS 自动化消灭 Browser MCP 的最后一个手动断点

Eliminating the Last Manual Breakpoint in Browser MCP with Vision-Driven Automation

凌晨两点,我的 Agent 又停了。

不是模型挂了,不是网络断了,不是 Token 用完了。是 Browser MCP 的 WebSocket 连接断了,而那个该死的 Chrome 扩展弹窗里,「Connect」按钮正安静地等着有人去点一下。

我在跑 --watch 模式——Agent 监控一个内部系统,页面一变就自动抓取数据、做分析、写报告。整条链路全自动,唯独 Browser MCP 的连接需要手动点。每次断连,我就得从床上爬起来,点开 Chrome 工具栏那个小图标,点一下 Connect。

Agent 操作浏览器的九条路线 里,我把 Browser MCP 归到「真实浏览器 + 扩展 + CDP + MCP」那一类,给了它四颗星的企业推荐度。但那篇文章没写的是: 它有一个致命的手动断点,而这个断点在自动化场景下足以毁掉整条链路。

这篇文章记录我怎么用 Vision 大模型 + macOS 原生自动化,把这个断点彻底消灭。不是 Demo,是从 v1.0 迭代到 v1.4.2、踩了六个坑之后的生产方案。

值得一提的是:整个项目的所有代码——从第一行 screencapture 调用到最后的 LaunchAgent plist——都是 Opus 4.8 写的。我做的事情是描述需求、测试、报错、再描述。这个过程本身就是一个有趣的发现:当你把「我需要一个能自动点击 Chrome 扩展按钮的脚本」这种模糊需求扔给一个足够强的模型,它给出的第一版方案往往方向正确但细节全错——而每一处「错」的背后,都藏着一个 macOS 平台特有的坑。

Vision + macOS 自动化消灭 Browser MCP 手动断点

[Read More]

Agent 时代的权限:从 RBAC 到五层信任架构

Five Layers of Trust for Agent-Era Access Control

一个人类员工一天审批 20 单、发 50 封邮件、访问 10 个系统。如果权限有漏洞,损害上限是 20 单。

一个 Agent 一秒调 100 次 API。一分钟 6000 次,十分钟 60000 次。如果权限有漏洞,你甚至来不及发现,损害就已经是 **指数级 **的。

这不是量变,是质变。传统权限模型(RBAC / ABAC)有一个隐含假设: 操作者是人,操作速度是人的速度。 这个假设在 Agent 时代彻底失效了。

再加上三个新问题:委托链(人委托 Agent A,A 调用 Agent B,B 访问系统 C)、上下文依赖(同一个 Agent 在不同群里有不同权限)、可被操纵(Agent 可能被 prompt injection 劫持)——传统权限模型不是「需要升级」,而是 需要重新设计

[Read More]

Agent 是一等公民:下一代协同办公的三个重设计

Three Redesigns for Agent-Native Collaboration

晚上 10 点,纽约的产品经理在 Linear 上建了一个竞品分析的 ticket,在群里 @ 了东京的工程师,又发了一封邮件给伦敦的设计师。三个渠道,三种状态,没有一个地方能看到全貌。

第二天早上,产品经理问:「进度怎么样了?」东京说:「刚看到群消息,还没开始。」伦敦说:「邮件?我昨天没在线。」Linear 上的 ticket 状态还是 To Do——因为没人记得去更新它。

这个场景每天都在全球化团队里上演。我们用了二十年时间解决「人怎么跨时区协作」——异步文档、录屏、standup 录音、follow-the-sun 排班。但本质上,所有方案都在做同一件事: 让不在场的人也能跟上进度。

如果有一种同事,它没有时区、不需要睡觉、7×24 在线、能在你下班后继续推进工作呢?

这种同事已经存在了。它叫 Agent。但我们的协同办公产品——通讯录、IM、邮件——还没有为它做好准备。

[Read More]

Agent 操作浏览器的九条路线:从 Playwright 到 Computer Use

Nine Tiers of Browser Automation for AI Agents — and the Layered Architecture That Actually Works

上个月一个团队来找我,说他们要做企业内部的 AI Agent,需要操作浏览器。

第一个问题就是:「用 Playwright 还是 Browser Use?」

我说这个问题本身就问错了。就像你问「盖楼用钢筋还是混凝土」——答案是都用,但用在不同的层。

Browser Automation 在 AI Agent 语境下,已经不是一道单选题。它是一张技术地图,九个梯队,各有适用场景。而真正在生产环境里跑通的企业 Agent,几乎都是 分层架构——API 优先,结构化浏览器控制居中,Vision 兜底。

Agent 浏览器自动化八梯队

[Read More]

Agent 进入企业,还差一个工位

What Agents Need Is Not More Intelligence, But an Onboarding Process

七月的 WAIC 展馆,人声鼎沸。

大模型展台前挤满了人,Demo 屏幕上的 Agent 行云流水——自动写代码、自动做报表、自动回客户邮件。观众鼓掌,媒体拍照,投资人交换名片。

然后你回到公司,打开内部系统,发现你的 Agent 连个工号都没有。

它没有账号登录 CRM,没有权限查数据库,没有工位接收任务,出了错不知道找谁。它站在企业大门外,能力满分,但进不来。

阿里巴巴资深技术专家谢吉宝在 WAIC 2026「从大模型到智能体:迈向自主智能新纪元」论坛上说了一句大实话: 绝大多数 Agent 还站在企业门外,瓶颈已从模型能力转向组织兼容性。

他的解法是:给 Agent 一个工位。

Agent 工位五层模型

[Read More]

模型正在吞噬 Agent 框架

Models Are Eating Agent Frameworks — Thin the Layer or Pay the Debt

昨晚十一点半,我盯着自己那个钉钉数字员工项目里的一段代码发呆。

那是 core 模块里的轮询逻辑——每隔 3 秒去 serve 端拉一次会话状态,判断任务是否完成、是否超时、是否需要 abort。旁边是 session 管理:维护一个内存里的 Map,记录每个会话的生命周期、重试计数、上下文快照。再往下是 abort 清理:当用户取消任务时,要优雅地终止正在执行的工具调用、回收资源、把中间状态写回。

加起来大概 200 行。写得挺漂亮,有状态机、有超时退避、有异常兜底。我三个月前写它的时候,serve 端还没有原生的会话生命周期管理,没有 SSE 事件流推送,没有内置的 abort 语义。这 200 行是当时唯一的选择。

但昨晚我突然意识到: 这些代码的保质期,可能只剩一年。

不是因为它们写错了,而是因为它们正在被模型和运行时从两端同时吞噬。

[Read More]

招 Agent 工程师,我第一个看的不是技术

The AI-Native Litmus Test — Leveling Agent Engineers Beyond Code

上周面试一个候选人。简历很漂亮——三年 LLM 应用开发,做过 RAG、做过 Function Calling、做过多轮对话系统。

我问他:「你平时自己写代码用什么工具?」

他说:「IntelliJ,偶尔用 Copilot 补全。」

我又问:「你上周的工作流是什么样的?从接到需求到交付。」

他想了想:「看需求文档,设计方案,写代码,联调,测试,上线。」

我说:「这个流程里,AI 在哪个环节?」

他愣了一下:「……写代码的时候用 Copilot。」

技术没问题。但他自己的工作流和五年前一模一样。

那一刻我就知道,他做不出好的 Agent 系统。 一个自己都不是 AI 驱动工作方式的人,设计不出 AI 驱动的产品。

Agent 工程师分级:从会用 AI 到 AI 原生

[Read More]

拟人化的数字员工:不是会聊天的机器人,是能胜任岗位的数字同事

Anthropomorphic Digital Employees — Competent Colleagues, Not Chatbots

我的树莓派群里有一个播报机器人,叫 pi9-bookworm。它每天定时推送 AI 新闻 Top 10,格式固定,雷打不动。

上周有人在群里丢了一条字节跳动 AI 视频的链接。pi9 没有任何反应——它的程序里没有「看到链接该做什么」这个概念。

然后 opencode 出现了。它是群里的数字员工。没人 @ 它,它自己冒出来:先把当天的 AI 新闻按「大模型 / 应用 / 硬件」分了三类,然后说「这条视频值得展开分析」。有人 @ 它说「分析一下」,30 秒后它给出了完整解读——技术路线、产品影响、对钉钉的竞争威胁。

pi9 和 opencode 在同一个群里。但一个是工具,一个是同事。

拟人化的数字员工:从聊天机器人到数字同事

[Read More]