qm README

The project's README from github.com/yc-software/qm. As one markdown file: README.md.

qm

A multiplayer agent harness for work. In Slack and on the web.

The QM web UI: two concurrent sessions, a sidebar of personal files, crons, keychain, deploys, memory, and skills

Setup

Tell your coding agent of choice Let's deploy https://github.com/yc-software/qm. From here, it should follow the deployment guide in this repo.

You can also try out a 3rd-party hosted version of QM here.

If you're an infra provider interested in offering a hosted version of QM, feel free to reach out.

What is QM?

Most agents are designed like personal assistants. You can make one work for a whole company, but it quickly gets complex. QM is designed for startups. Employees each get their own isolated workspace and work independently without affecting each other, and they can also collaborate with the agent in channels, group messages, and projects.

Each person and each room has its own scoped memory, files, keychain view, permissions, crons, web apps, and durable sandbox.

It's built with open source in mind. Pick your own harness and model and switch between them — Pi, OpenCode, Codex, and Claude Code all drive the same core, so a deployment isn't tied to any single vendor.

Features

What you can do with it

Architecture

flowchart LR
  DB[("Postgres<br/>sessions · memory · queue")]

  subgraph CORE["Headless core"]
    API["API · identity · policy · scheduler"]
    LOOP["Agent loop<br/>(Pi, OpenCode, Claude Code)"]
    API <--> LOOP
  end

  SBX["Per-scope sandbox<br/>files · tools · logged-in services"]

  DB <--> API
  LOOP <--> SBX

For durability, set DATABASE_URL and SESSION_STORE=postgres — without it, sessions live in process memory and vanish on restart. To exercise a branch end to end — core, Slack, web, admin, portal, against a real model and real Postgres — run npm run dev-instance.

Architecture

Every turn runs through a central core, which can use a variety of models and harnesses to generate the response. A Postgres persistence layer holds user data, session history, and other durable state. The agent has a small, fixed tool surface; one of those tools is execute, which runs commands in the scope's own isolated sandbox — its durable computer, where installed tools stay installed. The web UI, the admin panel, and the public portal are optional plugins over the core's HTTP API; Slack is an optional in-process plugin that core starts and supervises through a direct service client.

The core runs TypeScript directly on Node and uses Fastify for HTTP. The Slack plugin uses Bolt; the web UI builds with Vite and renders with Lit.

The core itself is generic. Everything specific to one company — org config, custom tools and skills, sandbox image, infrastructure — lives in a deployment directory that the qm CLI validates and deploys. Every substrate (harness, session store, sandbox, memory) sits behind an interface. Memory can also be routed by scope to external providers while retaining the built-in notebook.

Security and secrets

QM's approach follows local coding agents like OpenCode, Codex, and Claude Code: the agent acts as the person it's working for, with their credentials and permissions, and everything it does is audited. An org picks one security posture, which narrower scopes can only tighten:

The predeclared command policy — approval rules and hard denials for things like recursive deletes or destructive SQL — applies in every posture, Dangerous included.

SECURITY.md has the threat model, the operator assumptions, and the known limitations.

Deploy it for your org

Create an organization-owned deployment repository that depends on @yc-software/qm:

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

Initialization materializes a deployment skill for an agent and walks through infrastructure, web sign-in, connector credentials, optional Slack access, deployment, and live verification — no source checkout required. Each deployment runs in the operator's own cloud account; initialization does not generate or enable deployment CI, and this repository has no production deployment workflow. See deployment.md for the details.

Contributing

We take contributions as human-written text, not code — see CONTRIBUTING.md. Describe the change you'd like informally in a .txt or .md file in adrs/, and if we're aligned we'll handle the implementation. Report vulnerabilities privately — see SECURITY.md, not a public issue.

Customize your instance

The deployment repository above carries config and a sandbox layer, and never needs a source checkout. Some organizations want the opposite trade: the whole codebase in one place, so engineers and coding agents read core and customizations together, while the customizations themselves stay private. For that, keep a private fork: a standalone private repository whose history begins as a clone of qm and whose core stays identical to upstream.

Populate it once, then clone it to work in:

gh repo create <org>/qm-private --private

git clone --bare [email protected]:yc-software/qm qm-seed.git
git -C qm-seed.git push --mirror [email protected]:<org>/qm-private
rm -rf qm-seed.git

git clone [email protected]:<org>/qm-private
git -C qm-private remote add upstream [email protected]:yc-software/qm

Create the private fork with a plain clone, as shown above, and never with GitHub's fork feature. The word "fork" here names the concept — a downstream copy that diverges deliberately and merges from upstream — not GitHub's Fork button. A GitHub fork inherits the visibility of the repository it came from, so a fork of a public repository cannot be made private. A GitHub fork also shares one object network with the repository it came from, so commits pushed to the fork stay fetchable by SHA from the public side. Many organizations disallow forking private repositories as well. A plain clone has none of these problems, and it costs one thing: the clone is an ordinary repository, so upstream's CI workflows run live in your own account. Expect to supply the secrets those workflows need, or disable the ones you do not want running.

Everything specific to your organization goes in deploy/layers/<org>/ — config, sandbox tools and skills, plugin images, infrastructure — in the same shape qm init produces. See deploy/layers/README.md. Core stays byte-identical to upstream, which is what keeps merges small.

Two skills maintain the boundary in both directions. update-qm merges upstream qm into the private fork and opens the sync PR; upstream-pr sends an organization-agnostic fix back to qm, cutting the branch from upstream/main and checking the outgoing diff, commit messages, and screenshots for organization identifiers before it pushes. Nothing under deploy/layers/ ever travels upstream.

Going deeper

License

Except where otherwise noted, QM is available under the MIT License.

qm (yc-software/qm)

Searching Database…

15.4K ·GitHub
Что это такое?Опенсорсный мультиплеерный агентский харнесс для работы: один AI-агент, которым пользуется вся компания, доступный из Slack и через веб-приложение. Он создан для команд людей, которые работают с агентом вместе, а не для одного человека.
Мы запускаем его сами, или есть хостинговая версия?Вы хостите его сами: ваша организация создаёт репозиторий для деплоя, который зависит от пакета @yc-software/qm, и каждый деплой работает в вашем собственном облачном аккаунте. Есть и сторонняя хостинговая версия — её удобно использовать, чтобы попробовать.
Как нам его задеплоить?Скажите любому удобному кодинг-агенту 'Let's deploy', и он проследует по гайду по деплою. Инициализация проведёт вас через инфраструктуру, вход через веб, креды коннекторов, опциональный доступ через Slack и живую проверку — чекаут исходников не нужен.
Мы привязаны к одной AI-модели или кодинг-агенту?Нет — вы выбираете свой харнесс и модель и можете переключаться между ними. Pi, OpenCode, Codex и Claude Code работают с одним и тем же ядром, так что деплой не завязан на какого-то одного вендора.
Что нас подставит, если пропустить шаг настройки?Без DATABASEURL и SESSIONSTORE=postgres сессии живут в памяти процесса и пропадают при перезапуске, так что задайте эти переменные, чтобы всё сохранялось. Ядро также работает напрямую на Node, версия которой должна быть 24.15 или новее.
Это личный ассистент одного человека или им пользуется целая команда?Он рассчитан на стартапы: каждый сотрудник получает своё изолированное рабочее пространство и работает независимо, а люди могут ещё и взаимодействовать с агентом вместе — в Slack-каналах, групповых сообщениях и проектах.
Агент и наши данные компании остаются на нашей собственной инфраструктуре?Да — каждый деплой работает в собственном облачном аккаунте оператора, где пользовательские данные, история сессий и другое постоянное состояние хранятся в слое персистентности на Postgres. При желании память можно дополнительно маршрутизировать по скоупам во внешние провайдеры.
Что агент реально может делать для команды изо дня в день?Он может искать по внутренним заметкам, почте, документам, базам данных и вебу одновременно; собирать и публиковать внутренние веб-приложения; разбирать ваш входящие по расписанию с ярлыками и черновиками ответов; работать в существующем репозитории — запускать тесты, открывать PR, следить за CI, проверять логи — и вести проект в общем канале.
Что за песочница, в которой работает агент?У каждого человека и каждой комнаты есть своя изолированная и персистентная песочница — собственный компьютер агента. Тул execute агента выполняет там команды, и установленные инструменты остаются установленными между сессиями.
Агент действует с нашими кредами — что помешает ему выполнить что-то разрушительное?Ваша организация выбирает один режим безопасности: Strict приостанавливает каждый вызов инструмента харнесса для подтверждения человеком, Auto (по умолчанию) проверяет внешний контент классификатором, прежде чем тот дойдёт до модели, а Dangerous отключает проверку. Жёсткие запреты на вещи вроде рекурсивного удаления и разрушительного SQL действуют в любом режиме.
Может ли он продолжать работать, когда никто не онлайн?Да — кроны, watches и входящие вебхуки выполняют фоновую работу, пока никто не смотрит, например разбор входящих по расписанию с расстановкой ярлыков и черновиками ответов.
What are similar projects?moyai, deer-flow, Choruz, trueforge, Raven, open-swe, agor, brigade
Size
90.1 MB
Stars
15.4K
Age
2mo
Commits · 90 Days