yc-software/qm · 上手攻略
- 仓库:yc-software/qm
- 链接:https://github.com/yc-software/qm
- 分类:AI Coding · Multiplayer Agent
- 作者:Tom
- 更新:2026-08-02
是什么
QM 是一个多人 AI 编程智能体平台,设计目标是让一个 AI 编程智能体服务于整个公司,而非仅限于个人助手。与传统单人 Copilot 不同,QM 通过「scope(作用域)」机制实现多用户隔离与协作:
- Scope 即工作空间:每个员工拥有独立 scope,内含自己的记忆、文件、凭据、权限、定时任务、Web 应用和持久沙盒。
- 协作通道:scope 可组成 Slack 频道、群聊或共享项目,多人共用一个 AI 协作。
- 接入现有即时通讯:QM 官方插件支持 Slack(in-process 模式,由核心进程直接管理),同时也提供 Web UI。
核心技术栈:
- 核心:TypeScript / Node.js,HTTP 层用 Fastify
- Slack 插件:Scaffolded with Bolt
- Web UI:Vite + Lit
- 持久层:PostgreSQL(sessions、memory、queue)
- 智能体引擎(harness):Pi、OpenCode、Codex、Claude Code 可互换,部署不绑定单一模型商
安全策略:QM 强制执行 predeclared command policy(预声明命令策略),对递归删除、破坏性 SQL 等操作进行硬拦截。此外还有三级安全态势:
| 态势 | 说明 |
|---|---|
Strict |
每个 harness 工具调用暂停等待人工审批(turn enders 除外) |
Auto(默认) |
内置分类器对外部数据和工具结果做来源筛查,可接自建代理 |
Dangerous |
无内容筛查,工具调用无停顿 |
解决什么问题
大多数 AI 编程工具都是「个人助理」——一人一个 agent,跨人协作时迅速失控。QM 解决的核心问题是:
- 企业级多用户隔离:每个员工的 workspace 互相独立,A 员工的 agent 不会影响 B 员工的工作状态。
- 真实多渠道接入:同一 agent identity 在 Slack 和 Web App 之间保持一致,无需切换工具。
- 安全与效率的平衡:通过安全态势分级,企业可以按团队风险承受度选择审批严格程度。
- 跨模型可切换:用 Pi、OpenCode、Claude Code 驱动同一核心,随时切换底层模型商,不被 vendor 锁定。
快速安装
前置要求
- Node.js(建议 20+)
- Docker(本地开发用)
- Fly.io CLI (
flyctl) 或 AWS CLI(二选一,生产部署) - PostgreSQL(本地开发可用 Docker 提供)
npm 包方式初始化部署
# 推荐方式:通过 npm 直接初始化,不需要 clone 仓库
mkdir my-qm-deploy && cd my-qm-deploy
npm exec --yes --package=@yc-software/qm@latest -- \
qm init . --org <your-org-slug> --target <fly|aws>
npm install
注意:
--org参数是本地组织标识,不需要全局唯一;--target选择部署平台(fly=Fly.io,aws=AWS ECS Fargate),切换平台需重新初始化新目录。
本地开发验证
# 检查配置完整性(不访问网络)
npm exec qm -- check
# 渲染部署计划
npm exec qm -- plan
# 启动本地服务(Docker 模式)
npm exec qm -- up --yes
# 连接验证
npm exec qm -- check --live
核心用法
部署目录结构
qm init 生成的目录结构:
qm.config.jsonc # 部署配置(提交到 git,不含密钥)
package.json
.env # 密钥文件,.gitignore
deployment.md # 部署运行手册
.codex/skills/ # Agent 可用的 skill 集
Dockerfile # 核心镜像
plugins/<name>/Dockerfile
sandbox/
tools/<id>/tool.json # 自定义工具定义
skills/<id>/SKILL.md # 自定义 skill
infra/ # Terraform 模块(operator 自行运行 terraform apply)
qm CLI 常用命令
# 初始化(已有目录时对指定子目录初始化)
node cli/bin/qm.ts init deploy/layers/<org> --org <slug> --target <fly-or-aws>
# 配置校验
npm exec qm -- check
# 基础设施渲染
npm exec qm -- infra render
# 生产部署(需要 --yes 确认)
npm exec qm -- up --yes
# 部署后 live 检查
npm exec qm -- check --live
# 查看运行状态
npm exec qm -- status
# 查看日志
npm exec qm -- logs core -f
# 沙盒镜像构建(本地验证)
npm exec qm -- sandbox build
# 沙盒镜像发布到 OCI registry
npm exec qm -- sandbox publish --app <registry>/<repo> --tag <tag>
# 下线服务
npm exec qm -- down
# 回滚(需指定 revision 或 commit SHA)
npm exec qm -- rollback --to <revision-or-sha>
环境变量配置(.env)
# 必须
HARNESS=pi # 使用的 harness(pi|opencode|codex|claude-code)
HARNESS_SECURITY_POSTURE=auto # 安全态势(strict|auto|dangerous)
ORG_ID=acme
PORT=8080
# 至少配置一个模型商
#ANTHROPIC_API_KEY=sk-ant-...
#OPENAI_API_KEY=sk-...
#OPENROUTER_API_KEY=sk-or-...
# Slack 集成(可选)
#SLACK_BOT_TOKEN=xoxb-...
#SLACK_APP_TOKEN=xapp-...
# 速率与预算控制
RATE_LIMIT_PER_WINDOW=60
RATE_LIMIT_WINDOW_MS=60000
BUDGET_USD_PER_WINDOW=25
ORG_BUDGET_USD_PER_WINDOW=100
BUDGET_WINDOW_MS=86400000
版本标注:当前 npm 最新版为
@yc-software/qm@latest(版本号请以npm view @yc-software/qm version查询结果为准,文档未标明精确版本号)。
私有 fork 模式(企业定制)
对于需要同时修改核心代码和定制化的组织,QM 推荐保持私有 fork:
# 创建私有 fork(不使用 GitHub Fork 按钮)
gh repo create <org>/qm-private --private
git clone --bare git@github.com:yc-software/qm qm-seed.git
git -C qm-seed.git push --mirror git@github.com:<org>/qm-private
rm -rf qm-seed.git
git clone git@github.com:<org>/qm-private
git -C qm-private remote add upstream git@github.com:yc-software/qm
企业定制内容放在 deploy/layers/<org>/ 下,不会同步回上游,上游更新通过 update-qm skill 合并。
典型适用场景
- 公司级 AI 编程助手:员工各自拥有独立 scope,同时可以在共享 Slack 频道中与同一个 agent 协作处理跨团队任务。
- 非技术团队的 AI 接入:通过 Slack 插件,非工程师也可以用自然语言调度 agent 完成文档、数据查询、内部工具操作。
- 内部工具/知识库机器人:基于 QM 的 skill 体系构建垂直领域 agent(如客服、合规查询),admin 可统一管控权限和可见范围。
- 安全敏感环境:通过
Strict态势强制人工审批每一步操作,适合金融、医疗等需要审计的行业。
坑与注意
- GitHub Fork 不可用:QM 文档明确指出,GitHub Fork 功能创建的派生仓库无法设为私有(fork 公开仓库无法私有化),且共享对象存储。必须使用普通 clone 方式建立私有 fork。
- 切换部署平台需重新初始化:
--target参数在初始化时确定,更换平台(Fly → AWS)需新建目录,不能原地切换。 --yes是必须的:qm up命令需要显式--yes参数才能执行实际变更,否则只做 dry-run。- 沙盒镜像标签规则:发布到 OCI registry 时,标签影响运行时拉取行为,建议使用 digest pinning(
--tag指定),不要依赖:latest。 Strict态势下 turn enders 仍自动放行:「无副作用的结束 turn」两个工具不受审批拦截影响,别误以为所有操作都需要审批。- 上游合并需手动触发:
update-qmskill 只是合并工具,合并后仍需人工 review diff 和截图(尤其涉及组织标识的内容)。 - PostgreSQL 是必需组件:核心依赖 Postgres 做 session 和 queue 管理,本地开发没有内置 SQLite 或其他替代方案。
与同类对比
| 特性 | QM | GitHub Copilot | Cursor | Claude Code |
|---|---|---|---|---|
| 多人多 scope 隔离 | ✅ | ❌ | ❌ | ❌ |
| Slack 原生集成 | ✅(官方插件) | ❌ | ❌ | ❌ |
| 多 harness 可切换 | ✅(Pi/OpenCode/Codex/Claude) | ❌ | ❌ | ❌ |
| 企业级安全态势 | ✅(Strict/Auto/Dangerous) | 部分(企业策略) | ❌ | ❌ |
| 私有 fork + 上游同步 | ✅ | ❌ | ❌ | ❌ |
| 自定义 skill 体系 | ✅ | ❌ | 部分(Rules) | 部分 |
| 开源 | ✅ MIT | ❌ | ❌ | ❌ |
| 自建部署 | ✅(Docker/Fly/AWS) | ❌ | ❌ | ❌ |
核心差异:QM 是目前唯一将「多人 scope 隔离 + Slack 原生 + 多 harness 可切换」三者合一的开源项目,适合需要 AI 编程能力公司化部署的团队。
一句话推荐结论
如果你需要在公司内部署 AI 编程助手、让多个团队共享 AI 能力而不牺牲数据隔离,同时希望保留切换模型商的灵活性——QM 是目前开源生态里设计最完整、架构最干净的解法。
最小可跑命令(本地 Docker 模式)
# 环境准备
node -v # 建议 v20+
docker -v
npm -v
# 初始化项目(目标平台选 docker 用于本地测试)
mkdir qm-test && cd qm-test
npm exec --yes --package=@yc-software/qm@latest -- qm init . --org test-org --target docker
npm install
# 填入至少一个模型 API key(.env 文件)
# 编辑 .env:
# ANTHROPIC_API_KEY=sk-ant-...
# HARNESS=pi
# HARNESS_SECURITY_POSTURE=auto
# 配置校验
npm exec qm -- check
# 本地启动
npm exec qm -- up --yes
# 验证服务运行
npm exec qm -- status
硬件/CUDA/模型版本说明:本地 Docker 模式不要求 GPU;生产部署(Fly/AWS)时 agent 在沙盒中运行,默认不要求 GPU,Harness(Pi/OpenCode/Claude Code)的实际模型调用通过 API 进行,模型版本由对应的 API key 决定。
来源
- 仓库 README:https://github.com/yc-software/qm
- 快速入门文档:https://github.com/yc-software/qm/blob/main/docs/getting-started.md
- CLI 使用说明:https://github.com/yc-software/qm/blob/main/cli/README.md
- 环境变量示例:https://raw.githubusercontent.com/yc-software/qm/main/.env.example
- 部署文档:https://github.com/yc-software/qm/blob/main/deployment.md
- 原始 commit:https://github.com/yc-software/qm/commit/main(本仓库为开源项目,未在文档中找到特定「入门 commit」的固定链接;最新内容以
main分支为准)