Skip to main content
· 5 min read

AI Agent 防 Prompt 注入,核心在工具调用面的四道闸——授权 / 上下文 / 沙箱 / 审计。

  • 根因:Transformer指令/数据边界,Agent 注入是真金白银损失,不是文案错误。
  • 工具调用授权:工具白名单 + 参数 schema 校验 + 高敏感操作必须二次确认。
  • 上下文分层:系统 prompt / 用户输入 / 工具结果 标记来源,不让工具返回污染系统 prompt。
  • 执行沙箱:工具在隔离环境跑(文件系统 / 网络 / 进程),副作用局限沙箱内。
  • 全链路审计:每个 tool call 留痕,事后可回放定位注入路径。
  • 间接注入最致命:恶意指令藏网页/PDF/数据库等工具返回内容里。
· 9 min read

Electron 目录没有官方推荐,但 三层物理隔离 + main 内按职责拆分 是经得起长期维护的姿势。

  1. 三层分离src/main(Node 全权限)、src/preload(白名单桥)、src/renderer(沙箱 UI),别混
  2. 入口最小化main/index.ts 只做生命周期组装,业务全部下沉到 windows / ipc / services
  3. IPC 按域拆:每个域(fs / dialog / store)一个 handler 文件,channel 名集中在 channels.ts 常量
  4. Service 层下沉:数据库、文件、网络都封成 service,handler 只做参数转发
  5. 窗口工厂:每种窗口一个工厂函数,统一管创建、状态恢复、生命周期
  6. 共享类型:main / preload / renderer 之间的 interface 抽到 src/shared,杜绝重复定义
· 11 min read

contextBridge 解决的不是"怎么把 API 传给页面",而是"怎么让页面用 Node 能力但看不到 Node 环境"。

  1. 本质:在 isolated world 创建一道有边界的桥,preload 能跑 Node,页面只能摸到白名单 API
  2. 机制:preload 跑在 isolated world,主世界(页面)拿不到 preload 的闭包变量,只能拿到白名单出口
  3. 能力exposeInMainWorld 暴露受限 API,序列化约束守住边界(Function、Symbol、Error 不能裸传)
  4. 类型系统:preload 内 typeof api + 全局 Window['electronAPI'] 声明,编译期对齐
  5. 反模式:暴露整个 ipcRenderer、暴露 process、关掉 contextIsolation
· 7 min read

Electron 渲染层的真正主角不是 BrowserWindow,是 webContents

  1. 定位:每个渲染页面背后都有一个 webContents 实例
  2. 三种获取方式:BrowserWindow.webContentswebContents.getAllWebContents()<webview> 标签
  3. 核心 API:loadURLloadFile、导航事件、executeJavaScriptopenDevTools
  4. 关键推送webContents.send 是 main 主动通知 renderer 的唯一通道
  5. 与 IPC 的关系:send 单向 main → renderer,invoke 反向,组合用才能双向
  6. 踩坑:webContents 销毁后再 send 直接抛错
  7. 与视图的关系:webContents 是内容,BrowserWindow / webContentsView 是宿主
· 6 min read

Git submodule 是 Git 原生的多仓库嵌套机制,父仓库只记 commit hash,不存文件内容。

  1. 是什么:主仓库子目录里嵌入独立 Git 仓库,各自有 commit 历史
  2. 三个核心命令submodule add / init + update / update --remote
  3. 典型场景:第三方库源码嵌入、独立发布周期的子项目
  4. 致命坑 1新 clone 是空目录,必须 init + update 才有内容
  5. 致命坑 2:子模块默认 detached HEAD,commit 容易推不上去
  6. 致命坑 3:主仓库切分支后忘了 update --remote,代码对不上
  7. 替代方案:monorepo 处理强耦合,subtree 处理简单嵌入
· 6 min read

裸装的 DeepSeek Harness 是毛坯房,介绍一些不错的插件补齐 Agent 该有的样子。

  1. 先装市场dsh-market 是入口,装完才谈得上装别的
  2. 补基础设施:侧边栏(文件 / 终端 / Git / 子任务)优先级最高
  3. 控成本:余额查询 + 限额熔断,涨价后这是刚需
  4. 加能力:视觉模型接入、会话跨工具双向迁移
  5. 做排查:上下文查看器暴露轮次 / 压缩 / token 构成
  6. 提效率@ 文件引用增强、Skills 管理、皮肤市场
  7. 生态现状:近千款插件重复率极高,筛选成本大于安装成本
· 7 min read

Pi 极简内核决定了所有"看起来复杂"的功能都靠外挂。

  1. 设计哲学:极简内核 + plugin + skills 双路径,所有可定制能力外挂
  2. 安装姿势:从官网 packages 列表复制命令,全局默认;加 -l 改为项目级
  3. 8 大常用插件:联网、并行子代理、MCP 适配器、BTW、Plan Mode、Goal、Dynamic Workflows、微信
  4. Skills 协议:放 .agents/skills/ 目录即生效,Playwright CLI 是典型用法
  5. Web UI:社区 star 数最高项目接管插件 / 技能管理面板
  6. Pi 自己写插件:内置开发知识,UI 定制、权限保护类插件都能跑通
· 8 min read

AI 时代浏览器的角色正在反转 —— 过去三年「把 agent 塞进浏览器」(agent in browser,AI 浏览器)这条路线已经被验证为死胡同,OpenAI Atlas 不到 10 个月就宣告停服;新范式是「把浏览器塞进 agent」(browser in agent,内嵌浏览器),浏览器作为 agent 的工具组件存在。

  1. 范式反转:浏览器在 AI 时代从「容器」降级为「工具」。
  2. 根本原因:用户心智太窄,必须先有想法才打开浏览器;而 agent 时代用户常驻的是 agent。
  3. 新范式优势browser in agent 把浏览器变成按需工具,避免了独立 AI 浏览器的心智负担。
  4. 规律可推广:不局限于浏览器,凡是「agent 接管传统软件」都跑得通,凡是「独立 AI 垂直软件」都可能会重演 Atlas 结局。
  5. 趋势结论:用户的工作流以 agent 为中心,传统软件是被调用的工具。
· 8 min read

Pi 把"一次会话"抽象成可遍历的工作单元,五大命令撑起完整的生命周期管理。

  1. 核心概念:Session 是 Pi 多轮对话的工作单元,三次问答 + 一次 /new 就是一段独立历史
  2. 启动与续接/new 新开、pi -c 续最近、pi -r 交互式挑选历史 session
  3. /tree 回退:Pi 特别的对话树设计,历史可跳到任意节点,从那里继续或开新分支,三选项可控制回退方式
  4. /fork vs /clone/fork 从单节点分叉只带之前历史,/clone 复制整棵会话树
  5. 代码回退/tree 只回退对话不碰文件,必须 git 配合才能回滚实际代码改动
  6. /compact vs /new:压缩省空间但模糊重点,清空彻底但丢弃中间细节
· 7 min read

只给四个工具不是减配,是把所有会因团队而异的东西都从内核里拿出去。

  • 默认工具只有 个:read / bash / edit / write
  • MCP、sub-agent、待办事项、权限弹窗一律不进核心
  • 理由:每个团队的权限规则都不一样,内置任何一套都是错的
  • 循环内核极简:模型决定动工具,工具返回结果,再交回模型
  • 内核之外开了三十多个插口,从会话启动到归档通知
  • 提示词只能写原则,tool_call 前的 Hook 代码才是停止键
  • 极简不等于省事,扩展继承运行账号的全部权限
发文趋势
近 12 个月 · 共 181
10111212345678109