Skip to content

v0.2.0 · 直接 CLI Skill 与 Agent Spaces

Choose a tag to compare

@github-actions github-actions released this 04 Nov 17:25
· 19 commits to main since this release

新增

  • Agent Spaces:每个外部 Agent 对话独立的 Agent Space,子 principal external:<clientId>:<spaceId> 严格隔离标签 ACL。
  • pilion space new/list/close 命令;所有浏览器命令支持 --space 参数(回落 $PILION_SPACE)。
  • 空间切换器「Agent」分组:查看 / 停止 / 接管 / 删除。
  • 60 分钟空闲自动结束;启动时 active Space 标记为 restart;已结束超过 8 个时自动淘汰最旧的。
  • 集成客户端不带 --space 发工具帧时收到 SPACE_REQUIRED 错误及纠正指引。
  • 新增「安装到 Agent」:一键把 pilion 命令装到 ~/.local/bin、把 pilion-browser skill 装进 Claude Code / Codex / Gemini CLI / Trae 等的 skills 目录,并签发专用凭证;可一键移除。
  • pilion 命令新增 skill(给 Agent 的版本化用法指南)、status、version、info、select、check、press;type 支持 --replace。
  • 仓库内新增 skills/pilion-browser,支持 npx skills add echoVic/pilion-browser。
  • pilion 的 --json 输出统一为单行紧凑 JSON(pilion status --json 输出一行 {"ok","checks"},失败只靠非零退出码表达);外部通道 hello 握手应答现在带上 App 版本 {"version"},只认 {} 的旧客户端照常可用。
  • 外部 Skill 直接调用 pilion CLI,通过本机认证通道操作浏览器,无需连接 Pilion 内置 ACP Agent;审批、审计和每个任务的 Space 隔离照常生效。
  • CLI 支持 --text-file、--ref-file 和 observe 分页;原生输入框、下拉框和勾选状态可读回,超长文本明确标记截断,失败返回受限的结构化诊断。
  • 空间、固定标签与跨空间常用标签:创建空间、改名、选颜色和移动标签;用户切空间不改变 Agent 的工作标签或权限。旧工作区自动迁入默认空间。
  • 普通标签默认闲置 24 小时后自动归档,设置可调整或关闭;归档页支持恢复,当前页、加载、播放音频、录制、回放及 Agent 工作页受保护。
  • ⌘/Ctrl+T 命令栏查找标签、书签、历史和浏览器动作,支持方向键、回车、Esc 及中文输入法;⌘/Ctrl+Shift+C 复制当前网址并提示。
  • 打开历史对话时自动切换到当时用的 Agent:有 agentId 但无存活连接时异步自动重连并恢复 session,不打断其他正在运行的会话。Agent 配置已删除或禁用时显示「原 Agent 不可用」并提供「选用其他 Agent」入口。
  • 多个对话可以各自连一个 Agent 同时在后台跑(同一时刻最多 4 个)。每个对话有独立的浏览器权限、租约、审批队列、蒙层与「AI 操作中」标签标识;停止、接管、沉默检测只作用于当前对话,不会影响其它正在运行的对话。一个对话的 Agent 碰不到另一个对话的标签:标签权限表按会话身份隔离,越权直接拒绝并记审计。对话列表里正在后台运行的会话会显示一个呼吸的小点,切换对话不会打断后台任务。
  • Agent 自己新开的标签默认留在后台,不再抢你正在看的那一页。它需要在后台标签上点击、输入、按键、观察或截图时,Pilion 会把它临时挂到你正在看的这一页「后面」真实渲染(按视口摆好、关掉后台节流,再把你当前标签与蒙层抬到它之上),因此截图拿到的是真实内容而不是空白;最后一次操作静置 30 秒、或你切走时摘回后台。全程不调 webContents.focus()/窗口焦点;对后台页开启固定 CDP Emulation.setFocusEmulationEnabled,让 contenteditable、CodeMirror、Monaco 这类依赖焦点事件的自绘编辑器输入稳定,不新增任意 JS 通道。后台标签总数上限 12 个,超出会提示先结束一些任务。
  • 后台以编程方式新建对话并运行 prompt 的主进程入口已抽出,供后续「定时 prompt」功能复用;这类对话会带 origin: scheduled 标记。
  • 对外提供 CLI 和 MCP:在「设置 › 通用 › 对外控制」打开开关后,Pilion 会在用户数据目录下监听一个仅本机当前用户可访问的 Unix socket(目录 0700、socket 0600、token 配置文件 0600),外部 Agent(Claude Desktop / Cursor 等)或命令行可以驱动这个浏览器。设置页可一键复制粘进 mcpServers 的 MCP 配置,也能看到并断开活动连接。默认关闭,开启前会提示风险。
  • CLI 子命令:tabs / new <url> / activate / close / navigate / read / observe / click / type / screenshot -o file,支持 --json。
  • Agent 还在跑的时候可以接着打字:运行中按回车会把消息排进输入框上方的队列,回合结束后自动合并成一条发出去。队列里每条可以「撤回」(回到输入框接着改)或「删除」。即使当前回合以报错或被取消收场,排队消息也不会丢——它们作为下一条任务照常发出。队列状态按会话隔离,刷新页面后清空(与草稿一致)。
  • 输入框里按 ⌘/Ctrl+Enter:先打断当前回合(走原有的 session/cancel 取消路径),等回合收尾后立即把当前输入和队列合并发出。与中文输入法组合输入不冲突(组合期间不触发),也不占用既有快捷键表。
  • 输入框支持图片附件:粘贴、拖放、文件选择三种方式,最多 5 张、单张不超过 5MB,仅 png/jpeg/webp/gif。输入框里显示缩略图,可单张删除。图片以 ACP image content block 发给 Agent,主进程用 Zod 再校一遍类型/大小/数量。是否真的支持图片取决于 Agent 在 initialize 时公布的 promptCapabilities.image:不支持时附件按钮被禁用并明确提示,图片不会被静默丢弃。持久化的对话消息只记录图片元数据(名字/类型/大小),不存 base64 本体,避免工作区 JSON 膨胀。
  • 输入框打 / 唤起技能选择器:列出已提炼的录制技能,上下键选择、回车插入一段让 Agent 用 browser.skills.play 运行该技能的提示,Esc 关闭。
  • Agent 在普通聊天回合里如果顺手写出 ```json pilion-skill 技能块,Pilion 会把它收作「技能修改提案」而不是直接落盘:人在输入框上方选定一份已提炼技能并点「采用为修改」后才写入,且写入前仍走与手工编辑同一道「编辑分权」校验(不能新增录制里没有的动作、不能重复动作)。没有录制证据的提案不能凭空生成可回放技能。可随时「丢弃」。
  • 「设置 › 定时任务」可以让 Pilion 在指定时间或按间隔在后台自动给绑定的 Agent 发一条 Prompt。支持四种规则:每 N 分钟/小时(最小 10 分钟)、每天定点、指定星期几、五段 cron(分 时 日 月 周,不支持秒和年)。到点后会在后台另开一条 origin:'scheduled' 对话(标题为「任务名 · 时间」)并用它绑定的 Agent 开独立连接运行,不切换你正在看的对话、不断开你正在跑的连接;只有撞上会话并发上限(4)时才记 skipped: capacity。跑完或失败后发系统通知。应用关闭或睡眠期间错过的任务,启动或唤醒后会补跑一次,然后跳到下一次。最多 20 条,任务存在 schedules.json(权限 0600)。
  • Agent 也可以通过 browser.schedule.create / list / delete 让你审批后创建定时任务。无论权限模式都要你确认,审批里会展示 Prompt 全文、规则和接下来三次触发时间;由定时任务自己启动的对话不能再创建或删除定时任务,防止自繁殖;外部 MCP 通道不暴露 schedule 工具。
  • 每条定时任务可以单独选运行权限(默认「操作前确认」)。选「完全访问」会明确提示无人在场时会自动执行浏览器操作;操作前确认 模式下无人审批的请求 60 秒超时自动拒绝,完成通知会注明有操作被拒。Agent 经 MCP 创建任务时一律只能用「操作前确认」,不能申请「完全访问」;旧任务自动迁移为「操作前确认」。
  • 侧边栏收起后保留图标窄条,鼠标悬停时以浮层展开;窄窗口也能直接访问导航和标签,不必一直占着整块侧栏。
  • 下载中断或取消后可在下载列表里「重新下载」;中断记录保留已下载大小,下载中、暂停、完成、中断和取消使用不同图标与状态色。

变更

  • 权限模式从全局开关改为会话级:每条对话记自己的「完全访问 / 操作前确认」,缺省继承原全局设置(旧工作区自动迁移)。输入框里切换只影响当前对话,正在运行中的会话不能切它自己的模式,但可以切别的会话;页面审批与 ACP 权限自动放行都按工具调用所属会话的模式判断。

  • 定时任务的 cron/定点规则按 Vixie cron 语义处理夏令时:春令时跳变里不存在的时刻(如 2:30 在 2 点消失的那天)顺延到跳变后而不是跳过整天;秋令时重复的小时只触发一次。关机/睡眠错过的周期仍按设计只补跑一次,然后直接跳到下一个未来时刻。

  • 录制改为标签级互斥:你在录某一页时,Agent 在别的标签上照常干活,只有「目标正好是正在录制的那一页」的操作会被拒绝;不再一录制就全局挡住所有浏览器工具。

  • Agent 身份按会话区分(同一 Agent 配置在两个对话里会用不同的身份),断开或接管时只撤自己这个身份的标签权限,不再把整张标签权限表重写一遍。

  • 每个对话持有自己的 ACP 连接(transport、MCP 主机、浏览器权限、租约、审批),transport 事件按连接路由回本会话;切换对话只切界面焦点,不会断开或重连后台正在运行的会话。

  • 会话状态彻底按会话存储:promptActive、promptCancelled、toolExecutions、agentTabId、attachmentLease、taskId 等不再有模块级"活跃会话投影",全部存在各会话的 Connection 上;跨会话判断用 anyPromptActive()/anyToolExecuting() 遍历,会话级操作用 activeConn()?.promptActive。

  • 状态广播节流:多会话流式输出时每 100ms 合并一次(首帧立即发、尾帧保证发出),审批出现与任务终态立即 flush,避免 UI 卡顿。

  • 对话列表按会话显示待审批角标:第二个会话产生审批时,侧栏对应对话条目出现橙色数字角标。

  • ACP prompt 从纯文字改为 content block 序列(文字在前、图片块在后);transport.prompt / runPrompt 相应改为接收 content block,既有文字调用点已同步。

  • 对话面板按设计稿重写:7 层结构(会话标签行 → 状态条 → 消息流 → 审批坞 → 任务控制条 → 输入区),强调色统一为 Teal(--chat-* token),审批/人工状态用琥珀色。思考过程和工具行独立渲染,不再与文本回复混在同一个消息气泡里。任务控制条与底部浏览器浮层并存:running 态控制条只显示「接管」,停止由输入区发送钮承担;manual 态显示「继续任务」和「停止」。三态 Agent 恢复横幅只读主进程 conversationAgents 快照(connecting/unavailable/failed/capacity),重试和换 Agent 均走 IPC(agents:retry-conversation / agents:use-agent-for-conversation),前端不自行推断 Agent。

  • 后续视觉调整让对话面板沿用浏览器的墨黑中性色与翡翠绿强调色,统一圆角、按钮、输入框和列表的交互反馈;悬停过渡统一为 0.15 秒,后台运行点、工作状态和下载进度动效补齐系统「减弱动态效果」适配。

  • 提高深浅主题下辅助文字、链接、错误提示、审批徽标和选中态的辨识度,补齐地址栏、消息气泡、工具卡、设置卡片及弹层边界;统一键盘焦点环并修复被容器裁切或与背景混在一起的问题。

  • 复选框、开关、下拉选择和命令栏对话框改用统一的 Radix 控件,整理键盘操作与弹层焦点管理;下拉选中项增加对勾,空间切换器提交或删除后将焦点还给入口。

  • 跨空间常用标签改为紧凑的行式布局,与普通标签保持一致的菜单入口和 Agent 工作标识;书签、历史、技能等资料库列表统一行尾操作按钮的尺寸与悬停反馈。

  • 精修消息作者行、时间戳、Markdown 标题、列表、引用和代码块排版,补齐代码复制反馈;重新整理「对话 / 活动」切换控件、状态横幅和审批操作区,减少重复入口与多余边框。

  • 命令栏按标签、书签、历史和浏览器动作区分结果图标,只为真正打开页面或搜索的结果显示跳转箭头;命令栏和 / 技能选择器统一用键帽展示快捷键。

  • 补齐新标签页、历史对话、活动、资料库与技能选择器的空态引导;技能选择器分别提示「还没有技能」和「没有匹配项」,技能不可回放原因及定时任务规则摘要改用更清楚的中文。

  • Agent 设置区分已连接、检测中和缺少运行环境的状态,保存后定位并短暂突出对应连接;自定义命令、参数、环境变量、SSH 主机与目录校验标明出错字段,Node 路径错误同步显示输入框错误态。定时任务「完全访问」提示改为明确的警告卡。

修复

  • 修复 Agent Space 接线、停止待审批操作、重启恢复权限、接管持久所有权和删除归档;跨 Space 操作、已停止任务及无效引用均正确拒绝。
  • 修复后台网页截图返回旧画面的问题,勾选与取消后的截图反映当前状态,保持用户前台标签和焦点。
  • 修复 macOS 原生输入框重复替换和清空、勾选状态读回及大量候选元素分页;历史标签恢复按首次使用登记后台资源,超限时保留原有数据。
  • Skill 指南补全启动检查、Space 创建与恢复、精确多行输入、串行操作与结果确认、拒绝和未知结果处理、任务清理及能力边界。
  • goal 模式下点「停止/接管」后面板一直转圈:goal 回合首个 prompt 返回后 executeAgentTask 的 finally 把状态留在 running,但此时 promptActive 已为 false,interruptAgent 只在 promptActive 时改 stopping,cancel/clearGoal 返回后也不回写状态。现在停止/接管后无论 prompt 是否还在跑、是否只剩工具调用在飞,该会话状态都收敛到 ready(先 stopping 再 ready),且按会话解析连接、不只改活跃投影;沉默检测扩展到「goal running 但长时间无任何消息」(只对该会话生效)。
  • 主进程在 E2E/测试模式(NODE_ENV=test 或 PILION_E2E_NO_FOCUS=1)下,如果 userData 不在 os.tmpdir() 下,启动即拒绝并退出,防止直接 electron ./pnpm start 把 agents.json、host.sqlite 写进用户真实 profile。
  • 面板在 failed/capacity 状态下提供「重试」按钮,unavailable 状态下提供「选用其他 Agent」下拉(明确提示不会带上之前上下文)。
  • 为对话选用新 Agent 后重连,若目标是活跃对话会刷新 UI 焦点投影到新连接(否则任务落到已断开的旧连接,报「Agent 尚未附加到浏览器会话」);retryConversation 同样刷新。换 Agent 后的「新会话无上下文」提示在用户发第一条任务时才清除,而不是连接成功就立刻消失。
  • 新建对话时若当前 Agent 已被禁用,不再把「Agent 配置不存在或已禁用」抛到渲染层,而是静默开一条无连接的对话。
  • Agent 省略目标标签时,只落它本会话正在操作的标签,不再随你切页漂移;任务开始时把你当前选中的标签记为本会话的初始工作标签(这是「附加在当前页干活」的明确授权,不是隐式回退)。若本会话确实还没有工作标签(例如把自己唯一的标签关了)再省略 tabId,会直接报 TAB_NOT_FOUND 并提示先 browser.tabs.list/browser.tabs.open 传入 tabId,而不是偷偷操作你眼前那一页。蒙层与可见指针只在「Agent 正在操作用户当前选中标签」时才出现:后台标签上干活时你这一页不挡、不浮光标(CDP 鼠标派发与悬停照常),你切过去时蒙层才升起。
  • contenteditable(含 CodeMirror/Monaco 这类自绘编辑器)现在会被 observe 选中并映射为 textbox 角色:此前选择器与角色推断都不认它,导致 Agent 既观察不到、也无法把它当输入框派发键盘事件。
  • 审批按会话归属:A 的挂起审批不会串到 B 的对话面板;发送任务前的「请等待当前任务结束」判断改为按本会话是否在跑,而不是全局投影,避免后台会话挡住前台会话发任务。
  • 修复任务运行中「接管」按钮一直禁用的问题:仅在接管请求处理中暂时禁用,Agent 正在运行时仍可点击。
  • 修复流式回复持续增长时向上滚动卡在离顶部一段距离的问题,滚轮按当前消息布局结算,切换对话或活动视图后仍可手动浏览。
  • 840px 及以下窗口中,对话面板改为可开关的右侧浮层,避免把地址栏挤到无法输入;480px 及以下隐藏地址栏的 Cookie 导入和书签按钮。修复 Cookie 导入条、技能库和提示浮层在窄窗口中的挤压与横向溢出。
  • 会话标签、空间名、书签与历史标题、下拉选中值、状态栏长地址及 Agent 操作标签补齐省略或换行,避免长文本撑坏布局;会话标签右缘以渐隐提示还有内容。
  • 审批卡长工具名不再被压缩裁切,展开详情不再出现嵌套双滚动,详情可用键盘聚焦和滚动。
  • 恢复图片拖放时的输入区反馈及技能浮层定位,纯图片排队消息不再重复显示张数;技能修改提案的错误按提案分别显示,并去掉面向用户的错误文案中的 IPC 包装。
  • 全局错误横幅可手动关闭,后续新错误仍会显示,长错误可用键盘滚动;用户导航错误、更新检查失败和 Agent 运行环境错误补齐中文提示与错误状态色。
  • 修复复制网址的提示被原生网页遮挡的问题,并限制提示宽度、允许长内容断行;去掉助手消息悬停时重复出现的时间戳及工具行泄露的内部状态文本。

安全

  • 外部连接改为按客户端签发独立 token:设置页「新增客户端」生成随机 32 字节 token,只在创建时展示一次;服务端 clients.json(0600)只存每客户端的 scrypt 哈希 + 独立 salt,不落明文。身份由 token 决定,principal = external:<clientId>,hello 帧只带 token、自报 client 字段被忽略;不同客户端 Tab ACL 互相隔离,取消了旧版「同名即同身份」。
  • 可单独吊销/删除客户端:立即断开其活动连接、摘掉它自己的 ACL entry、写审计;被吊销 token 再连直接被拒。旧版单共享 token 的 external-mcp.json 启动时自动删除并写 external.legacy_config.removed 迁移审计(旧 token 作废,需在设置页重配客户端)。CLI 不再自动读 userData 共享 token,改由 PILION_EXTERNAL_SOCKET / PILION_EXTERNAL_TOKEN(或 PILION_EXTERNAL_TOKEN_FILE)注入。
  • 每一次连接固化一个独立 session + attachment + lease;连接的建立 / 认证失败 / 拒绝 / 断开 / 客户端创建 / 吊销 / 删除都写进 host.sqlite 审计。
  • 外部 principal 默认对任何标签没有权限,只能操作它自己 tabs.open 打开的标签(用户同时是 owner)或用户显式授予的标签;不能操作 Agent 会话或录制中的标签,省略 tabId 时直接报错、不回退到用户正在看的标签。断开或租约过期时只摘掉它自己的 ACL entry,不重写整表。
  • ask 审批模式下外部效果操作照常进全局审批队列,审批摘要标注「来源:外部调用(external:…)」。
  • 刻意不对外暴露 browser.request_human(会把浏览器交还给人、打断正在进行的任务)与 browser.skills.play(录制技能回放,耦合在 Agent 任务 / 审批链路上);不提供任意 JS 执行。审批、执行凭证、fencing、页面引用校验、私网拦截全部保留。
  • 外部通道安全加固:服务端在 socket 入口强制工具白名单(不再只靠客户端注册裁剪),被裁工具直接写 external.request.tool_denied 审计并拒绝;外部请求帧过 ToolRequestSchema 校验;socket error 也完成收尾(修了 attachment 泄漏);含 token 的 MCP 配置不再随主窗口 state 广播,改为设置窗口按需 IPC;启动失败不进入僵尸态、启动前清理残留 socket、start/stop 不竞态;CLI screenshot -o 只写 .png、拒绝已存在文件与符号链接;加连接数与每连接在途请求上限;Windows 上禁用该功能。
  • 本次新增的排队、图片、技能提案都不改变既有安全模型:审批、执行凭证、fencing、页面引用校验、私网拦截、审计照旧;没有新增任意 JS 执行通道。技能提案刻意不能绕过「录制轨迹 → 四条对账 → 编辑分权」直接写入可回放步骤。
  • 后续加固将外部效果操作固定为「操作前确认」,不随当前对话的「完全访问」模式变化;审批在独立来源区域展示服务端登记的客户端名称,标签激活和关闭先核对标签权限。
  • 审批取消、租约到期、打断、恢复和技能预授权绑定原会话、连接与任务,异步完成不借用当前选中对话的身份;私有标签的弹窗、保存、启动恢复、归档、复制和最近关闭恢复保留原归属,不恢复旧租约或执行凭证。

验证与适用范围

  • 完整单元 1,421 项通过;GitHub CI 的 Electron E2E 83 项通过、1 项既有跳过。macOS arm64 候选完成原生安装包检查和公开网页上 60 条真实 CLI 命令验证。
  • 正式 macOS arm64 / x64 安装包各通过 10 条真实 CLI 命令的安装、页面读取、截图、后台标签和访问撤销验证(x64 在 Rosetta 环境);已核对签名、Gatekeeper、公证票据和打包 Skill;15 个发行资产的大小、SHA-256 及三份自动更新清单的 SHA-512 已核对。
  • 外部 CLI / MCP 与「安装到 Agent」支持 macOS / Linux;Windows 的外部控制尚未启用。Windows / Linux 原生 GUI 未在本轮实测。
  • 内置 ACP 的真实 Claude / Codex 完整并行任务、图片任务、排队打断与定时任务仍缺少完整模型验收;已验证的协议握手和自动化 fixture 不能替代这些检查。外部 Skill 的直接 CLI 通路已完成真实网页验证,不依赖内置 ACP。
  • 页面引用主要覆盖主文档;iframe、canvas 和组合修饰键操作需要人工接管。截图及响应大小、文本截断等限制详见安装后的 pilion skill。