yc-software/qm

Multiplayer agent harness for work.

QM – a multi‑user AI‑agent platform

What it is – QM (pronounced “queue‑em”) is an open‑source framework that lets a company run its own AI‑powered “agent” for every employee and for shared Slack/web channels. Each user (or “room”) gets an isolated workspace with its own memory, files, credentials, scheduled jobs and sandboxed compute, while the same agent can be invited to collaborate across those scopes.

Why it matters – Most LLM‑based assistants are built as personal bots. QM adds the missing layer of organization‑wide tenancy: per‑person isolation, fine‑grained permission control, and the ability to run the same model‑agnostic core on any cloud you control, using any LLM provider (Pi, OpenCode, Claude Code, etc.). This lets startups keep data, keys and compliance in‑house while still getting the productivity boost of an AI co‑pilot.


Core concepts

Concept What it gives you
Personal & shared scopes Each employee has a private sandbox; channels/projects can share a sandbox when invited.
Model‑agnostic harness The core talks to any supported LLM via a plug‑in, so you can swap providers without redeploying.
Slack + web UI The same identity and configuration work in Slack (via Bolt) and a Vite/Lit web app.
Admin control Org‑level policies decide which models/harnesses are available, security posture, and sharing rules.
Skills & skill packs Reusable tool definitions (e.g., “search internal docs”) are scoped, grant‑able, and can be promoted org‑wide.
Background work Cron jobs, file watches, and inbound webhooks run in the sandbox even when no user is active.

How it works (high‑level flow)

  1. API core – a Fastify‑based HTTP service holds identity, policy, session state and a scheduler. It talks to a Loop that invokes the selected LLM harness (Pi, OpenCode, Claude Code, …).
  2. Per‑scope sandbox – an isolated container (or image) that stores files, installed tools, and logged‑in service credentials. The core can issue an execute tool call that runs a command inside this sandbox.
  3. Persistence – PostgreSQL stores sessions, memory, and a durable queue. With DATABASE_URL and SESSION_STORE=postgres the state survives restarts.
  4. Plugins – Slack (Bolt) and the web UI are thin services that forward user turns to the core via its HTTP API. They share the same identity model, so a user’s preferences and permissions are consistent across surfaces.
  5. Deployment directory – All org‑specific configuration (allowed models, custom tools, sandbox images, secrets) lives in a separate repo that the qm CLI validates and deploys. The core code itself is versioned as the npm package @yc-software/qm.

Security model

  • Postures – Strict (human approval for every tool call), Auto (default, blocks private‑network access), and Dangerous (no approval, only audit). The org picks a default; individual scopes can tighten it.
  • Content screening – Optional classifier (off/observe/enforce) that can quarantine flagged LLM output.
  • Command policy – Pre‑declared allow/deny rules for dangerous operations (e.g., recursive deletes, destructive SQL) apply in all postures.
  • Isolation vs. Open sharing – By default scopes are isolated; an “Open” posture lets a live human turn read opted‑in personal assets from a shared room.
  • All actions are logged for audit, and the agent runs with the user’s own credentials, not a shared service account.

Typical use cases

  • Unified search – Query internal notes, emails, docs, databases and the web in a single turn.
  • Internal app building – Spin up custom web tools that only the right people can access, with data kept in the sandbox.
  • Email triage – Learn a user’s writing style, auto‑label incoming mail, and draft replies on a schedule.
  • Developer workflow assistant – Run tests, open PRs, monitor CI, and inspect logs from within the agent.
  • Project tracking – Use a shared Slack channel to get automated status updates and follow‑ups.

Getting started / deployment

# Initialise a deployment repo for your org (Fly, AWS, etc.)
npm exec --yes --package=@yc-software/qm@latest -- \
  qm init . --org <slug> --target <fly-or-aws>
npm install
  • The CLI walks you through configuring identity, connectors (Slack, email, DB), sandbox images, and CI.
  • Run locally for development:
    • npm run dev-instance:web – web UI + admin panel
    • npm run dev-instance:slack – Slack plugin only
    • npm run dev-instance:both – both surfaces together
  • Production deployments use the same CLI (plan, up, check) and rely on the PostgreSQL store for durability.

Customisation & contribution

  • Config‑only customisation – Keep a private deployment repo that pins the @yc-software/qm package and adds your own tools, skills, and sandbox images.
  • Source‑level changes – Fork the repo, modify core, plugins, CLI, or docs, then publish a private npm package and custom images.
  • Contributions are handled as design proposals (plain .md/.txt ADR files) rather than direct code patches; the maintainers implement approved changes.

Documentation & resources

  • Getting started – docs/getting-started.md
  • CLI reference – cli/README.md
  • Deployment directory contract – docs/deploy-directory.md
  • Model gateway – docs/model-gateway.md
  • Sandbox & sandbox image guide – docs/superserve.md
  • Full list of plugins (Slack, web UI, admin, portal) – plugins/

License

MIT (with occasional third‑party notices).


Bottom line – QM gives startups a turnkey way to run a multi‑tenant, self‑hosted AI assistant that respects data ownership, supports any LLM, and integrates tightly with Slack and internal web tools.

Related

  • Project
  • Project
  • Project
  • Project
  • Project