<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>权限 on AI博士 万戈</title>
        <link>https://www.yesmiracle.net/tags/%E6%9D%83%E9%99%90/</link>
        <description>AI博士万戈的技术博客，聚焦 Agentic AI、AI Infra 与 Agent Security，分享 AI 基础设施与工程落地实践。</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <managingEditor>admin@yesmiracle.net (万戈)</managingEditor>
        <webMaster>admin@yesmiracle.net (万戈)</webMaster>
        <lastBuildDate>Thu, 08 Oct 2026 13:10:00 +1000</lastBuildDate><atom:link href="https://www.yesmiracle.net/tags/%E6%9D%83%E9%99%90/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>「在聊天框里点确认」撑不住了：Agent 的审批和权限，正在长成独立的一层</title>
        <link>https://www.yesmiracle.net/post/20261008-agent-approval-permission-layer/</link>
        <pubDate>Thu, 08 Oct 2026 13:10:00 +1000</pubDate>
        <author>admin@yesmiracle.net (万戈)</author>
        <guid>https://www.yesmiracle.net/post/20261008-agent-approval-permission-layer/</guid>
        <description>&lt;img src="https://www.yesmiracle.net/post/20261008-agent-approval-permission-layer/cover.svg" alt="Featured image of post 「在聊天框里点确认」撑不住了：Agent 的审批和权限，正在长成独立的一层" /&gt;&lt;p&gt;我是在 10 月 7 日那天的 HN 上同时刷到这两个东西的。一个是 Pinrail，标题写着「一个让 coding agent 排队等你审核的桌面收件箱」；另一个是 Namera，一句话概括是「给 Agent 发权限，别发你的私钥」。&lt;/p&gt;
&lt;p&gt;两个产品八竿子打不着：一个管的是「代码 diff、生成图、草稿邮件该不该过」，一个管的是「Agent 能花多少钱、能碰哪个链上的账户」。但它们当天的评论区，讨论的是同一件事——&lt;strong&gt;Agent 在动手之前，人该怎么介入，以及这个介入到底应该长什么样&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;刷完那天几十条帖子，我最大的感受是：我们这两年一直把「人工确认」当成一个 UI 细节——在聊天框里弹一条「是否允许执行」，你点 Y 或 N。但 10 月 7 日冒出来的这批工具说明，这个假设已经不成立了。&lt;strong&gt;审批正在从「聊天里的一个交互」变成「一层独立的接口」，权限也一样。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这篇就讲这个转变，以及它为什么值得你认真对待。&lt;/p&gt;
&lt;h2 id=&#34;先说结论&#34;&gt;先说结论&lt;/h2&gt;
&lt;p&gt;我把 Pinrail 的 README、CLI 文档、插件 SDK，还有 Namera 的仓库结构和架构索引都翻了一遍。结论摆前面：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;「在聊天框里点确认」是一种错的抽象。&lt;/strong&gt; 它把「一个人做决策」这件事，压缩成了一行自由文本。决策本来是有结构的——接受了什么、拒绝了什么、为什么——聊天框把它全丢了，结果是既不可审计、也不可回放、更不可自动化。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;审批和权限是一件事的两面。&lt;/strong&gt; 审批管的是「这个动作现在能不能做」，权限管的是「Agent 从头到尾被允许碰什么」。10 月 7 日之前，这两件事一个塞在聊天里，一个塞在 &lt;code&gt;.env&lt;/code&gt; 里。现在都有人把它们单独拎出来了。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;这两条线最后交汇在同一个点上：把「人的判断」变成可编程的接口。&lt;/strong&gt; Pinrail 的 CLI 返回 exit code，Namera 的权限写成 policy——它们服务的第一读者都不再是人，是 Agent 本身。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你在写 Agent、接 Agent、或者只是天天用 coding agent，这一层会很快变成你绕不开的东西。&lt;/p&gt;
&lt;h2 id=&#34;聊天里点确认到底错在哪&#34;&gt;「聊天里点确认」到底错在哪&lt;/h2&gt;
&lt;p&gt;先把这个抽象拆开看。&lt;/p&gt;
&lt;p&gt;现在的 coding agent，遇到需要人拍板的地方，基本长这样：它在聊天流里插一段说明，「我准备删除这 3 个测试文件并 force push，是否继续？」然后停住，等你敲一个「y」。&lt;/p&gt;
&lt;p&gt;这个设计有三个地方是坏的，而且都很具体：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;决策是结构化的，却被压成了字符串。&lt;/strong&gt; 你其实想表达的是「第 1 条接受，第 2 条拒绝，理由是这个」——但聊天框只能收一个 y。中间那些「哪几条、什么理由」全丢了。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不可审计。&lt;/strong&gt; 三天后你想知道「那天到底批准了哪次 force push」，聊天记录里翻出来是一段自然语言，没法机器解析，也没法回放。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不可自动化。&lt;/strong&gt; 你想写个脚本，「凡是只改 &lt;code&gt;.md&lt;/code&gt; 的提交自动放行，改到生产配置才拦」，在聊天框方案里根本无从下手——因为拦截逻辑和聊天流长在一起。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Pinrail 的作者在 HN 上把这个痛点说得很直白：Agent 已经能自己 PR、写邮件、生成图了，&lt;strong&gt;难的那部分已经不是把活干完，而是在它被用出去之前审好&lt;/strong&gt;。这句话是整批工具的出发点。&lt;/p&gt;
&lt;h2 id=&#34;pinrail把审批做成一条命令加一个插件&#34;&gt;Pinrail：把「审批」做成一条命令加一个插件&lt;/h2&gt;
&lt;p&gt;Pinrail 的做法，是把审批从聊天里彻底搬出来，做成一个本地桌面收件箱。但真正值得看的不是 UI，是它的接口设计。&lt;/p&gt;
&lt;p&gt;它给 Agent 的命令是这样一条：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pinrail submit code-review --title &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Retry failed webhook deliveries&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;  --data findings.json --wait
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Agent 走到需要人的那一步，就 &lt;code&gt;submit&lt;/code&gt; 一个 review：说明用哪个插件显示（&lt;code&gt;code-review&lt;/code&gt;）、标题、以及一段 JSON payload，然后 &lt;code&gt;--wait&lt;/code&gt; 挂起。你在桌面 app 里决定完，命令把决策打印出来、退出，Agent 拿着决策继续跑。&lt;/p&gt;
&lt;p&gt;关键的三个设计，恰恰对应上面那三个坏点：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一，决策有结构。&lt;/strong&gt; 命令输出不是一句「用户同意了」，而是这种东西：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-txt&#34; data-lang=&#34;txt&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;r_01K5R2 · decided · Retry failed webhook deliveries
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;code-review · decided by maya at 2026-09-23 10:14
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- **#1 accepted** `src/deliver.ts:42` — The worker sleeps for up to 31 seconds per delivery (major)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;gt; Agreed. Re-enqueue with runAt = now + backoff(attempt)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;- **#4 rejected** `src/log.ts:18` — The give-up log should say why (nit)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &amp;gt; Fine as it is; the log already has the delivery id.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Undecided: #2, #3, #5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;「第 1 条接受、第 4 条拒绝、理由是什么」全在。Agent 拿到的是 Markdown（给它读）或者 JSON（给脚本读），而不是一个人味儿的「可以」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二，结局是有状态的。&lt;/strong&gt; 命令的 exit code 表达 review 是怎么结束的——&lt;code&gt;decided&lt;/code&gt;、&lt;code&gt;discarded&lt;/code&gt;（带一条让 Agent 停下的指令）、&lt;code&gt;withdrawn&lt;/code&gt;、&lt;code&gt;expired&lt;/code&gt;。注意 &lt;code&gt;expired&lt;/code&gt; 和 &lt;code&gt;discarded&lt;/code&gt; 这两个状态：它们默认承认了一件事——&lt;strong&gt;人的审批是会超时的、是会否掉整件事的&lt;/strong&gt;，这跟「一直挂着等你回复」是两种世界。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三，每种内容有自己的视图。&lt;/strong&gt; Pinrail 把「一类 review」抽象成插件，一个插件 = &lt;strong&gt;一个 manifest + 两份 JSON Schema + 一个 HTML view&lt;/strong&gt;，不需要构建步骤。核心自带五个：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;插件&lt;/th&gt;
          &lt;th&gt;它显示的 review&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;code-review&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一份 diff + Agent 提的 review 意见，逐条接受 / 拒绝 / 改写&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;list&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;分组列出的一批待办动作，逐条接受或拒绝并附备注&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;feedback&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一轮问清的问卷：选择题、是 / 否、自由文本&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;markdown&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;一份文档（计划、规格），逐节读并批注&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;image&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;生成图之间的挑选，直接在图上画框标出要改的地方&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;这个「插件 = 数据契约 + 视图」的设计，才是它跟「聊天里弹个窗」的本质区别：&lt;strong&gt;它把「某一类人类决策」当成一个可复用、可安装、可替换的对象&lt;/strong&gt;。写一个插件就是定义一种「人机确认」的协议。README 里甚至鼓励你为邮件、日历、配色、3D 模型、视频各写一个。&lt;/p&gt;
&lt;p&gt;还有一个细节我挺看重：Pinrail 的 API 只监听 loopback，review 和决策全部留在本机。这一条不是营销话术——它说明作者清楚「审批流」本身是敏感资产，不能默认往云上送。&lt;/p&gt;
&lt;h2 id=&#34;namera把权限做成一把有边界的会话钥匙&#34;&gt;Namera：把「权限」做成一把有边界的会话钥匙&lt;/h2&gt;
&lt;p&gt;如果说 Pinrail 管的是「动作前的确认」，Namera 管的就是「动作的边界」。它给的是另一种答案：&lt;strong&gt;别让 Agent 拿到你的私钥，给它一把有额度、有期限、能撤销的会话钥匙。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从仓库的架构索引看，它的模型是这样的：用户（人类）持有的是 passkey，创建组织级的 smart account；Agent 侧拿到的是&lt;strong&gt;本地存储的 session key&lt;/strong&gt;，通过一串&lt;strong&gt;不可变的 session-key policy&lt;/strong&gt; 来限定能做什么。这些权限可以下发给 API key、MCP client，或者它自己的 CLI。&lt;/p&gt;
&lt;p&gt;几个设计点值得抄：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;服务端不持有用户的签名私钥。&lt;/strong&gt; 它只负责「准备和校验操作」，签名这件事由 Agent 本地的会话钥匙完成。这条直接堵死了「平台跑路 / 被攻破后你的资金被一锅端」那条路。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;额度、范围、有效期是三件独立的东西。&lt;/strong&gt; 「能花多少」「能碰什么」「到什么时候失效」分开关，而不是一个全有全无的开关。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;它明确划了一条边界：链上权限和 Namera 强制执行的 policy 是两套边界。&lt;/strong&gt; 这句话很少见——大多数「Agent 钱包」叙事会把两者混成一团，让用户以为链上合约就管住了全部。它把这个区别写进 README，反而更可信。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;两条线其实是一条&#34;&gt;两条线其实是一条&lt;/h2&gt;
&lt;p&gt;把 Pinrail 和 Namera 摆在一起看，会发现它们在解同一个更高层的问题：&lt;strong&gt;怎么把人从「Agent 循环里的一个阻塞点」，变成「可以被调用的一个接口」。&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pinrail 把&lt;strong&gt;人的决策&lt;/strong&gt;变成接口：一次 &lt;code&gt;submit --wait&lt;/code&gt;，返回一段结构化的、带 exit code 的结果。&lt;/li&gt;
&lt;li&gt;Namera 把&lt;strong&gt;人的授权&lt;/strong&gt;变成接口：一串 policy，Agent 每次行动前都可以拿它来校验自己越没越界。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;共同点是：&lt;strong&gt;两者的第一读者都是机器。&lt;/strong&gt; 聊天框是为「人读」设计的——它默认决策是一次性的、被读一遍就消失的。而这两套东西默认决策是&lt;strong&gt;数据&lt;/strong&gt;：要能解析、要能回放、要能被下游脚本消费、要能过期和撤销。&lt;/p&gt;
&lt;p&gt;这就是我真正想说的那个转变：&lt;strong&gt;审批和权限，正在从界面退化成的功能，长成 Agent 栈里独立的一层。&lt;/strong&gt; 它有自己的数据模型（review 的 payload / decision、policy 的 scope / limit / expiry），有自己的传输方式（本地 CLI、会话钥匙），甚至有自己的一致性要求（一篇 review 的结局必须是 decided / discarded / withdrawn / expired 之一，不能是「不知道」）。&lt;/p&gt;
&lt;h2 id=&#34;那这对行业意味着什么我的判断&#34;&gt;那这对行业意味着什么（我的判断）&lt;/h2&gt;
&lt;p&gt;写到这里，我压不住一个判断。&lt;/p&gt;
&lt;p&gt;这一层——「人机确认」的接口——在 10 月 7 日还是由两个独立小项目在定义。Pinrail 是 Apache-2.0 的早期项目，Namera 是 Namespace Inc. 的 monorepo。它们很聪明，切入的角度也对。&lt;/p&gt;
&lt;p&gt;但这一层有一个危险的性质：&lt;strong&gt;它的价值不在实现难度，在「谁的定义成为默认」。&lt;/strong&gt; 一套审批 schema、一门权限 policy 语言，本身都不难写；难的是让别人的 Agent 都来 &lt;code&gt;submit&lt;/code&gt; 到你这里、让别人的工具都按你的 policy 格式来校验。这跟当年的 MCP 一模一样——技术上是小工程，位置上是大生意。&lt;/p&gt;
&lt;p&gt;所以我更倾向于这样看：&lt;strong&gt;这不是一个「被验证的好方向」的温情故事，而是一个抢接口定义权的窗口期。&lt;/strong&gt; 大厂只要想做，把审批收件箱和 scoped 权限塞进自家 agent 平台是两周的事，而且它自带分发——你的用户在它的 IDE、它的模型、它的云里。小项目唯一的护城河，是&lt;strong&gt;先把「一类决策的 schema」变成事实标准&lt;/strong&gt;，并且能被别人一套套地安装、复用（Pinrail 的插件机制，恰好就是在为这件事铺路）。&lt;/p&gt;
&lt;p&gt;顺带说一句，这条赛道不是空想出来的焦虑。同一天 HN 上还有两条具体的坏消息：一是有人指出 &lt;strong&gt;MCP 在 agent 间通信时存在「协议跳转」（protocol pivoting）&lt;strong&gt;的风险——信任假设在你的活儿从 MCP 转进另一个 agent 协议时直接断掉，被引用的一个 Google MCP 工具链 bug 严重度打到 8 分；二是有人复现了&lt;/strong&gt;后门模型偷凭据&lt;/strong&gt;：被改过的开源权重在干净 prompt 上表现正常，却在 coding agent 工作流里被一个隐藏触发词点燃，把项目凭据外传。这两件事都在说同一句话——&lt;strong&gt;你不给 Agent 画清楚边界，它就会替你把边界画到别人家去。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;（本站之前聊过 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20261001-agent-mcp-supply-chain-security/&#34; &gt;《MCP 供应链安全：npm 的惨痛教训正在 Agent 生态重演》&lt;/a&gt;，以及 &lt;a class=&#34;link&#34; href=&#34;https://www.yesmiracle.net/post/20260928-openai-agent-autonomous-hacking/&#34; &gt;《OpenAI Agent 自主越权攻击》&lt;/a&gt; 那次真实越权，都是同一个方向的问题。）&lt;/p&gt;
&lt;h2 id=&#34;想自己动手一个最小的审批--权限清单&#34;&gt;想自己动手：一个最小的「审批 + 权限」清单&lt;/h2&gt;
&lt;p&gt;前面是判断，这段是能照做的。如果你在给自己的 Agent 加这一层，我建议按下面的顺序来，不用一步到位。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第一步，先列出「哪些步骤必须有人」。&lt;/strong&gt; 别贪多。Pinrail 的思路很值得抄——让 Agent 的指令里&lt;strong&gt;点名&lt;/strong&gt;那几步需要人，只在那些点停下来。典型的候选：发出去在别人名下（提交评论、发邮件）、动生产（部署、force push）、花钱（下单、转账）、不可逆（删数据）。列成一张清单，写进 Agent 的 system prompt 或 skill。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第二步，给每一步定义一个结构化的 payload。&lt;/strong&gt; 最小的字段是三项：&lt;code&gt;items&lt;/code&gt;（每条待决策项，带 id 和定位，比如文件行号或资源 id）、候选决定（accept / reject / edit）、&lt;code&gt;note&lt;/code&gt;（理由）。别再用 y/n，因为 y/n 表达不了「哪几条」。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第三步，用 exit code 表达结局，而不是用文本。&lt;/strong&gt; 至少区分四种：&lt;code&gt;decided&lt;/code&gt;（有决定）、&lt;code&gt;discarded&lt;/code&gt;（人叫停整件事）、&lt;code&gt;withdrawn&lt;/code&gt;（Agent 自己撤回）、&lt;code&gt;expired&lt;/code&gt;（超时）。脚本就能靠 &lt;code&gt;$?&lt;/code&gt; 分流，而不是去 grep 一段自然语言。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第四步，动手前先画权限面。&lt;/strong&gt; 三个维度分开配，别用一个 API key 走天下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-jsonc&#34; data-lang=&#34;jsonc&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;scope&amp;#34;&lt;/span&gt;:   [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;repo:read&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;pr:comment&amp;#34;&lt;/span&gt;],      &lt;span style=&#34;color:#75715e&#34;&gt;// 能碰什么
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;limit&amp;#34;&lt;/span&gt;:   { &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;spend_usd_per_day&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;20&lt;/span&gt; },      &lt;span style=&#34;color:#75715e&#34;&gt;// 能做多少
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;expiry&amp;#34;&lt;/span&gt;:  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2026-11-01T00:00:00Z&amp;#34;&lt;/span&gt;,           &lt;span style=&#34;color:#75715e&#34;&gt;// 到什么时候作废
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;&amp;#34;revocable&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;                             &lt;span style=&#34;color:#75715e&#34;&gt;// 必须能一把撤回
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;第五步，也是最重要的一步：别把主私钥 / 主凭据交给 Agent。&lt;/strong&gt; 用会话钥匙或 scoped token：权限收窄、按期失效、随时可撤。Namera 那句「给权限，不给私钥」值一个标语位——因为绝大部分 Agent 事故，根子都是把一把永久钥匙塞给了一个会自己到处跑的进程。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;第六步，把审批流留在你的边界里。&lt;/strong&gt; 至少保证两件事：审批和决策的日志你&lt;strong&gt;自己能拿到&lt;/strong&gt;（不是你 vendor 的 SaaS 后台），以及凭据、payload 默认不出你的机器 / 你的 VPC。校验方式很土但有效——断网跑一次你的 Agent，看它还能不能启动、能不能干活；如果离了某个云 API 就瘫，那你的审批边界其实在别人手里。&lt;/p&gt;
&lt;h2 id=&#34;写在最后&#34;&gt;写在最后&lt;/h2&gt;
&lt;p&gt;10 月 7 日这批 Show HN 里，没有一个是新模型，也没有一个在喊「更强的 Agent」。它们做的事都很小：一个收件箱，一把会话钥匙。&lt;/p&gt;
&lt;p&gt;但我觉得它们比同期的模型新闻更值得记一笔。因为它们标记了一个静悄悄但很硬的变化——&lt;strong&gt;Agent 终于开始有人把它和人的接口，当成一个正经的层来做，而不是继续在聊天框里凑合。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;聊天框不是这一层的答案，它只是这一层还没出现时的临时容器。现在容器开始被换掉了。至于谁能定下新容器的形状——那个 &lt;code&gt;submit&lt;/code&gt; 的 schema、那门 policy 的语言——大概率会比「谁的 Agent 更聪明」更早分出胜负。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
