惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
量子位
Jina AI
Jina AI
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
L
LangChain Blog
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
博客园 - 三生石上(FineUI控件)
N
Netflix TechBlog - Medium
D
DataBreaches.Net
P
Proofpoint News Feed
小众软件
小众软件
Vercel News
Vercel News
T
The Blog of Author Tim Ferriss
WordPress大学
WordPress大学
雷峰网
雷峰网
G
Google Developers Blog

阁子

LEANN 的重算式向量索引 · 阁子 lamarck 按真实调用进化全部 skill · 阁子 FrontierAgent 的上下文压缩与重复抑制 · 阁子 magpie 本地语义搜索 · 阁子 OpenViking 的上下文组织与检索 · 阁子 munder-difflin 的多 agent 协调实现 · 阁子 ai-memory:换个 CLI 接着干的 agent 记忆层 · 阁子 TimesFM:预测之前的脏活都在模型外面 · 阁子 DarwinX:模型不动,只进化外壳 · 阁子 Final2x:一个刻意做薄的超分外壳 · 阁子 Cordis:把卸载做完备的插件框架 · 阁子 DeepSeek Harness:一切皆插件的开源 agent 运行时 · 阁子 Agency Agents:一座 AI 角色库的分发工程 · 阁子 Harvey LAB:法律 Agent 基准的架构与评测方法 · 阁子 DeepTutor:开源的 AI 私人家教工作台 · 阁子 Semantica:面向可审计 AI 的图原生基础设施 · 阁子 PromptCache:LLM 语义缓存网关的架构与实现 · 阁子 Prime Agent,只给模型一个工具的长跑 agent · 阁子 Skill Shelf: 给 agent 的 skill 仓库,兼做服务的配置中心 · 阁子 Cloudflare Computer,装在 Durable Object 里的文件系统 · 阁子 PersonaLive: 把肖像扩散模型压到能直播 · 阁子 Neon: 把本地视频点亮成系统虚拟摄像头 · 阁子 LiteReality-Agent笔记: 从一次扫描到可交互的房间 · 阁子 LiteReality-Agent笔记: 从一次扫描到可交互的房间 蝉与梦 · 阁子 小工具(三) 小工具(三) · 阁子 相机小述 相机小述 · 阁子 四元数与旋转矩阵
QM,给全公司用的 agent 平台 · 阁子
2026-08-10 · via 阁子

·笔记 ·1291 字 ·约 3 分钟

AgentInfrastructureTypeScript

市面上的 agent 几乎都按个人助理的样子设计,一个人用很顺,搬进公司就开始别扭:所有人共享一份记忆和一台沙箱,配置互相踩,权限一刀切。
QM 反过来,从第一天就按「多人」设计:每个人、每个频道各有一套隔离的工作空间,又能在同一个组织里协作。
上层目录里这份代码已经长到七万多行,值得完整写一写它的设计。

它是什么

QM 是一个面向创业公司的 multiplayer agent harness:员工在 Slack 和 Web 两个入口使用同一个 agent,身份与配置在两端完全一致。
关键抽象是 scope:每个人是一个 scope,每个频道、群组、项目也是一个 scope。memory、文件、keychain 视图、定时任务、Web 应用、durable sandbox,全部按 scope 隔离——你调教出来的 agent 是你的,频道里的 agent 是大家的,互不污染。

另一个立场是不绑供应商:Pi、OpenCode、Codex、Claude Code 四种 harness 驱动同一个 core,部署方选自己的模型和 harness,随时可换。

架构

QM 架构:入口插件、无头 core、按 scope 的沙箱与可插拔 harness

core 是无头的:API、身份、策略、调度器加一个 agent loop,TypeScript 直接跑在 Node 上,HTTP 用 Fastify。Web UI、admin 面板、公开 portal 都是 core HTTP API 之上的可选插件;Slack 是 core 进程内启动并监督的插件(Bolt 实现)。
持久层是 Postgres:会话历史、memory、队列等全部耐久状态都在这。
每个 scope 有自己的沙箱——一台「durable computer」,装过的工具一直在,agent 的 execute 工具就在这台机器里跑命令。

每回合怎么走

一条消息的旅程:入口、身份与策略、安全姿态、harness 回合、沙箱执行

每个回合都经过 core 中枢:入口插件收到消息,解析身份并落到对应 scope,策略层决定这个 scope 允许什么,然后交给所选 harness 生成回应。
工具面是刻意收小的固定集合,其中 execute 负责一切命令执行,落进该 scope 自己的沙箱。harness 层做了统一适配:pi-harness / opencode-harness / codex-harness / claude-harness 四个实现落在同一接口上,还有 mock-harness 供测试,上下文压缩(context-compaction)和录制回放(replay / tape-fold)也做在这一层,换 harness 不用动业务。

安全姿态

QM 的信任模型与本地编码 agent(OpenCode、Codex、Claude Code)同源:agent 以使用者的身份行事,用他的凭证和权限,一切留审计。组织选一个安全姿态,更窄的 scope 只能收紧不能放松:

Strict:除两个无副作用的回合终止工具外,每次 harness 工具调用都停下来等人工批准。
Auto(默认):带来源标注的外部数据与工具结果,先过一个分类器再进模型;部署方可以把分类器指向自己的筛查代理。
Dangerous:不筛内容、不暂停。

预声明命令策略是姿态之外的另一层:递归删除、破坏性 SQL 这类命令的批准规则与硬性拒绝,在任何姿态下都生效,Dangerous 也不例外。

deployment directory

core 本身是通用的,一切公司特定的东西——组织配置、自定义工具与技能、沙箱镜像、基础设施——都放在一个独立的部署目录里,由 qm CLI 校验和部署:

npm exec --yes --package=@yc-software/qm@latest -- \
  qm init . --org <slug> --target <fly-or-aws>
npm install

初始化会物化一个部署技能,带着 agent 走完基础设施、Web 登录、连接器凭证、Slack 接入、部署与线上验证,全程不需要 checkout 源码。每个部署跑在运营方自己的云账号里(Fly 或 AWS)。
想把定制和核心放在一个仓库里读的组织,走私有 fork:用裸克隆 mirror 出一个独立私有仓,而不是 GitHub 的 Fork 按钮——GitHub fork 会继承上游仓库的可见性,公共仓库的 fork 私有不了,这个坑文档里点得很清楚。

工程规范

代码之外的规矩同样能看出这个项目的性格:仓库标准是零注释,意图全靠命名、结构和测试表达;合并前必须由没看过这个 diff 的新上下文做破坏性审查,作者自审不算数,绿色的 CI 也不算审查;本地只跑受影响的测试,全量交给 CI 分片并行。贡献方式更特别——只收人写的文字(ADR),不收代码,对齐之后由维护方实现。

边界和取舍

固定小工具面意味着放弃各 harness 自带的工具生态,换来的是四种 harness 行为一致、审计一致。
agent 以人的身份行事,是把「agent 做了什么」等同于「这个人做了什么」——审计因此简单,但也要求组织真的信任姿态与命令策略这两层闸门。
多 scope 隔离的代价是运维面变宽:每个 scope 一台沙箱,状态耐久也就意味着状态要管。

回头看,这套东西像是把「本地编码 agent」的那套信任与工具哲学,抬到了组织级——个人的照样是个人的,公司的才是公司的。