Inside QM: 私たちはY Combinatorの会社全体のエージェントランタイムを読み解いた
QMは各従業員と共有ルームに耐久性のあるコンピュータ、メモリ、認証情報、バックグラウンドジョブを割り当て、4種類のコーディングエージェント用ハーネスを1つのポリシーコア経由でルーティングする。オープンリリースは野心的で、分かりやすく、セキュリティモデルが破綻する箇所について異例に率直だ。
By Ryan Merket · Published
Primary source: GitHub
Why it matters
QM turns YC's experience operating more than 50 internal agents into a self-hostable control plane, making permissions, persistent workspaces and fleet administration the core infrastructure problem.

Code reviewed: yc-software/qm at commit 7f2c916, the source revision recorded in npm package @yc-software/qm@0.1.4
Two days after Y Combinator published QM, the project had already drawn 6,600 GitHub stars, 700 forks, 68 pull requests and 14 open issues. That attention makes sense. QM is one of the first open-source attempts by a prominent organization to turn the local coding-agent pattern into shared company infrastructure.
The short description—“a multiplayer agent harness for work”—undersells the amount of machinery involved. QM is a durable, scoped operating layer for agents. A model loop is one replaceable component. Around it sits identity resolution, a permission graph, file and memory boundaries, credential brokering, command policy, human approvals, content screening, background scheduling, app publishing, audit logs and cloud-specific sandbox lifecycle management.
This is our follow-up to RuntimeWire’s launch report. We downloaded the public repository and npm package, pinned both to the same revision, read the runtime and deployment code, generated a fresh deployment directory and ran the package’s CLI test suite. The result is a source-level map of what QM does, where its strongest ideas live and which security promises should still be treated as experiments.
The short version
- “Multiplayer” means people and rooms get isolated scopes. A direct message resolves to a personal scope; a channel or group message resolves to shared state. Context from a previous turn is retained only when every member of the current audience is entitled to see it.
- The durable computer is the central product idea. Each scope gets files, installed software and long-lived processes inside a sandbox. The model can change while the workspace survives.
- QM supports Pi, OpenCode, Codex and Claude Code. They implement one harness interface, though their capabilities differ. Codex, Claude and OpenCode expose native child-agent roles; Pi, the recommended default, runs the scoped turn loop without that native subagent layer.
- The npm package is a deployment CLI. It contains no QM runtime. It generates a deployment repository and pins six prebuilt container images by SHA-256 digest.
- Memory is plain text with model-assisted maintenance. Durable facts live as bullets in
memory/MEMORY.md; recall uses case-insensitive substring matching, capped context and optional model consolidation. There is no vector database in the default path. - Security is a control plane, not a hardened isolation claim. Command rules, approvals, credential grants, audience floors and screening add useful friction. YC’s own threat model says command policy is bypassable, credential material is visible in sandboxes, screening is incomplete and the system is intended for a single trusted organization.
- One security warning is already stale.
SECURITY.mdsays published apps can be reached through bearer capability links. The pinned implementation deletes those query tokens, refuses to mint the associated cookie and tests that the link “grants nothing.” Built-in subdomain ingress now requires a portal session plus ACL membership, with a separate short-lived owner link for management.
What we actually inspected
The public repository’s history begins on July 29 with a commit called “Fresh repo history.” The latest package at reporting time was 0.1.4, published July 31 at 18:03 UTC. Its npm metadata points to commit 7f2c916360f1797a8ff2a77ce2ce40c5fabab087. That is the revision used throughout this piece.
| Check | Result |
|---|---|
| npm artifact | @yc-software/qm@0.1.4, 126 files, 256,580-byte tarball, 1,211,641 bytes unpacked |
| Tarball SHA-256 | 51593f853eade42ed04f10e96e1c8ddffca876c5be0ee98d753636018ee5e473 |
| Source correspondence | 125 of 126 package files matched the pinned cli/ checkout byte for byte; the expected exception was manifest.json, which the release job rewrites with production image digests |
| Package metadata | MIT license, no runtime dependencies, npm signature and SLSA provenance record |
| CLI smoke test | qm --version, qm --help and qm init succeeded under Node 24.14.0 |
| Generated project | Docker target with OpenAI and SMTP settings; config, secret templates, runbook, deployment skill, image manifest and sample sandbox extension were produced |
| CLI verification | Typecheck passed; 503 CLI unit tests passed, zero failed |
| Source size | 74,814 lines across TypeScript files under src/; 1,264 files in the checkout; 514 test/spec files in the full tree |
The 74,814-line figure describes the TypeScript runtime under src, not the whole repository and not hand-authored logical lines. It is a reproducible filesystem count, useful mainly as a measure of surface area. The largest files include the 2,841-line orchestrator, the 2,483-line common tool layer and the 2,047-line Pi adapter.
We did not deploy QM into Fly.io or AWS, connect a live Slack workspace, supply real model credentials or execute the full Postgres-backed root suite. The repository’s own CI is broader: five root-test shards, Postgres durability tests, typechecking, four plugin builds, image smoke tests, several linters, dead-code checks, packaged-artifact tests and deployment-contract tests. Our independent execution covered the published CLI path.
Why YC built it
YC’s release note gives a compact history. The organization began with a simple Ruby agent loop and a few internal-data tools, added crons and webhook triggers, then provisioned more than 50 Hermes agents as personal assistants. The individual agents were useful; administering the fleet became the problem. YC wanted the flexibility of that setup, the simplicity of the earlier loop and infrastructure it could host itself.
The name is short for quartermaster: the person coordinating work below decks. That metaphor fits the code. QM spends much more effort deciding whose computer, memory and authority a turn receives than it spends defining model prompts.
The public history tells us less about how the system evolved than a normal open-source repository would. SECURITY.md says public source releases intentionally start with fresh history and that private-history hashes are unsupported. The 40 visible commits cover July 29 through July 31. They show release preparation and rapid fixes; they cannot support a forensic account of the earlier internal system.
What ships when you install QM
The first surprise is that the npm package is not the runtime. cli/README.md says this directly: the package is a release and deployment CLI. It validates config, renders infrastructure, pushes secrets, coordinates upgrades and shells out to tools such as Docker, Fly, AWS, Terraform and Git. It has no JavaScript runtime dependencies of its own.
Running qm init creates an organization-owned deployment directory. In our Docker-target test it produced:
qm.config.jsonc, a package file pinned to0.1.4, lockfile inputs and digest-pinned image manifests;.env.examplecontaining secret names, plus an empty, ignored.envrather than credential values;- operator documentation and an
AGENTS.mdfile; - a deployment skill for Codex, with runbooks for setup, checking, deployment and verification;
- sample directories for organization-specific skills and sandbox tools.
The release process builds six images—core, web UI, admin, portal, auth and sandbox base—then signs each exact digest with Sigstore. The npm publishing workflow replaces placeholder image references with those six digests and invokes npm publish --provenance. The package we downloaded contained the same digests produced by that release. This design gives an operator immutable first-party artifacts while keeping organization-specific deployment state in a separate repository.
It also creates an important review boundary. Reading the npm tarball alone tells you how deployments are generated. The runtime behavior lives in the container source at the linked Git revision. A security review needs both.
The useful mental model: one scope, one durable computer
QM’s top-level architecture has three durable pieces:
- Postgres holds sessions, messages, memory revisions, jobs, grants, audit records and other control-plane state.
- The core API resolves identity and scope, applies policy, schedules work, invokes the selected harness and records the result.
- A per-scope sandbox supplies files, commands, processes and installed software.
Slack はオプションのインプロセスプラグインとして動作します。Web UI、管理インターフェイス、認証サービス、ポータルは、ヘッドレスコアの周りにあるオプションの HTTP サービスです。ランタイムは Node 上で直接実行される TypeScript;Fastify が API を提供し、Slack Bolt が Slack を扱い、ブラウザクライアントは Vite と Lit で構築されています。リポジトリの README は YC 自身の簡潔な図を提供しています。
通常のターンは概ね次のように進行します:
- Slack または Web のサーフェスが送信者を認証し、現在のオーディエンスを記述する。
- 解決が会話をスコープにマップし、マウントされたスコープ、指示、ACL の付与、コマンドポリシー、セキュリティ姿勢、およびエグレスの下限を計算する。
- QM はフルオーディエンスが参照できる履歴とメモリのみを読み込む。
- 選択されたハーネスは共通のターンオブジェクトと固定セットの QM ツールを受け取る。
- ツール呼び出しはポリシーラッパーを通して実行される。コマンドはスコープのサンドボックス内で実行され;資格情報の使用はキーチェーンとブローカーのルールを通過する。
- 結果と出所はモデルコンテキストに再投入される前に検閲され得る。
- 返信が配信され、ターンが永続化され、メモリ抽出が非同期で実行される。
この順序は重要です。QM は各モデルベンダーに会社隔離を実装させるのではなく、モデルを呼び出す前に会社コンテキストを計算し、その後でモデルの周りにツールサーフェスをラップします。
「Multiplayer」は承認グラフである
パブリックな記述では、すべての従業員とプロジェクトがエージェントを得るとされています。コード上では、エージェントは解決済みのスコープと永続状態として理解する方が適切です。src/types.ts は五つのスコープ種類を定義しています:
| Scope | Typical meaning | Default write boundary |
|---|---|---|
personal |
One employee, usually a direct message | That person’s memory, files and settings |
channel |
A Slack channel or comparable room | Shared room state |
group |
A group conversation | Shared group state |
team |
A durable organizational team | Team layer, often mounted read-only into member contexts |
org |
Company-wide policy and knowledge | Administrator-controlled global layer |
resolution service は DM をアクターの personal スコープに、ルームを共有の channel または group 状態に変換します。現在のスコープは読み書きでマウントされます。組織および関連チームのレイヤーは読み取り専用でマウントされ得ます。組織の指示は下位スコープの指示の上に位置し、ローカルのカスタマイズは組織のセキュリティや承認の下限を緩めることはできません。
実装上で最も鋭い点はオーディエンスフィルタです。context-filter.ts は、現在のオーディエンスの全員がその項目に対する権利を持っている場合にのみ履歴の項目を保持します。プライベートなやり取りが共有のものになった場合、モデルは自動的にプライベートなトランスクリプトを継承しません。エグレス規則も同様に保守的な形を取ります:許可されたホストはオーディエンス間で交差され、拒否されたホストは和集合されます。
共有は ACL グラフによって裏付けられています。マネージャはアクセスを付与または取り消し、受信者はポリシーが別途許す場合を除き遡及的に再共有することはできません。オーディエンス所有のファイルハンドルの場合、チェックは所有者と権利を持つ受領者の両方を考慮します。これは、モデルに「注意しろ」と促すプロンプトではなく、実際の認可ロジックです。
YC の脅威モデルはまだギャップを記録しています:出所ラベルはまだすべてのソースパスをカバーしておらず、周辺の Slack ジャッジは完全な内部オーディエンスチェックを実行していません。オーディエンスの下限は QM の最も強力なアイデアの一つです。ただしそれ自体のメンテナはこれを完全な情報フロー制御として提示してはいません。
Memory: ノートブック、抽出器、清掃係
QM のデフォルトのメモリシステムは検査しやすく好感が持てます。各書き込み可能なスコープには memory/MEMORY.md ファイルがあり、最大 300 件の箇条書き事実を含みます。想起はおおよそ 6,000 文字に制限されています。memory-service.ts は正確な事実を重複排除し、ノートブックが満杯になると最も古いものを削除し、メモリクエリには小文字の AND 部分文字列マッチングで応答します。
デフォルト実装にはセマンティックインデックスや埋め込みストアはありません。モデルがプレーンテキストの台帳の周りのインテリジェンスを提供します。
アクティビティのバースト後—デフォルトでは、最大 10 ターンで、間に 3 分以上の静寂がない—各ターン戦略はモデルに永続的な嗜好、識別子、プロジェクト事実を抽出するよう依頼します。そのプロンプトはシークレットとシステムの仕組みを除外します。チャンネルやグループで発言された事実は「#channel で発言」などの出所情報とともに発話者の personal ノートブックにコピーされ得ます;DM の事実はそのコピー経路から除外されます。
十件の新しい事実の後、統合パスは ADD、UPDATE、DELETE 操作を通じてノートブックを書き換えることができます。プロンプトは明示的な「remember this」命令を弱めたり削除してはならないと述べ、出所情報は保持されるべきだと指示します。データベースはリビジョンを保持するので、メモリは復元可能です。抽出と統合は回答の後に発生するため、新しいメモリは最終的に一貫性を持って反映されるが、直前に完了したばかりのターン内に必ず出現するわけではありません。
二つの代替戦略が存在します。agent-only はメンテナンスを明示的なエージェント操作に委ねます。scratch-promote は日付付きのスクラッチログを書き、デフォルトで過去二日間を想起し、定期的にモデルに耐久的な項目をノートブックに昇格するよう求めます。戦略はインターフェイスの背後で選択可能であり、per-turn がデフォルトです。
このアプローチは監査と編集が容易です。またモデルを保持ポリシーの一部にします。誤った抽出は誤った事実を記録し得るし、耐久的な素材はユーザーまたは管理者が削除しない限り無期限に残存する可能性があります。QM はそのリスクを認めています。
サンドボックス実装は実質的に異なる
サンドボックスインターフェイスはプロセス実行、永続ディスク、スクラッチ環境、一時停止、復元、および任意のエグレス機能をカバーします。利用可能なバックエンドは同一の隔離を提供しません。
| Backend | Durable state | Lifecycle | Network posture in code |
|---|---|---|---|
| Local Docker | Per-scope container and named volume | Container can stop and later reuse its volume | Reports no native egress control |
| Fly Sprites | Whole-disk persistence, 100 GB default image profile | Auto-sleeps and resumes | Domain egress only when the proxy is configured; otherwise reports none |
| AWS MicroVM | Home directory archived to S3 | Hydrates on launch; rotates before the session limit | Reports no native egress control |
AWS のデフォルトは 4 個の vCPU、8 GB の RAM、8 GB のディスク、および最大セッション 8 時間で、ローテーションは 7.5 時間で行われます。一時停止またはローテーションの前に、スコープのホームディレクトリはパックされて S3 に書き込まれ;次の VM がそれを復元します。これが「installed tools stay installed(インストールされたツールがインストールされたままである)」が短命なコンピュート基盤をまたいで維持される仕組みです。
QM はまた狭いタスク向けのスクラッチサンドボックスを作成します。スクラッチ環境は資格情報を持たず、組織グローバルなコンテキストのみをマウントし、ターン後に破棄されます。そのため、信頼できない素材をより小さな被害範囲で処理するのに有用です。
「durable computer」という語句は、普遍的なネットワークサンドボックスとして読んではなりません。デプロイ記述子はエグレス構成を受け入れますが、docs/deploy-directory.md はバージョン 1 がその記述子を検証することを示しているだけで、ランタイムでの強制を主張していません。セキュリティ文書は条件付きエグレスがバックエンド依存であると述べています。Local Docker と AWS はこのインターフェイスを通じてネイティブなエグレスサポートはないと明示しています。
四つのハーネス、一つのコア—そして能力の不均衡
このリビジョンで QM は四つのモデル—エージェント統合を固定しています:
| Harness | Pinned dependency | Integration style | Native child agents in QM |
|---|---|---|---|
| Pi | @mariozechner/pi-ai 0.82.0 plus YC’s packaged coding-agent fork |
In-process | No native QM child-agent layer |
| OpenCode | 1.17.18 | HTTP/plugin | Research, code and consult roles |
| Codex | 0.144.5 | JSON-RPC app server | Spawned tasks with a constrained child tool set |
| Claude Code | Agent SDK 0.3.211 | SDK with in-process MCP | Research, code and consult roles |
四つとも HarnessAdapter 契約を実装しています。これにより、同じスコープ解決、ポリシー、永続化、ツール台帳が異なるエージェントループを囲むことができます。モデルとハーネスはグローバルに選択可能で、オペレータの制限内でスコープごとにオーバーライドできます。
共通のツール表面は小さい: execute、read、write、publish、memory、history、background で、制御プレーンが許可する場合に cron、sharing、guidance、turn-ending ツールが追加される。読み取り専用モードでは、memory の呼び出し、history、サイレントなターン終了のみが残る。Strict な姿勢では、効果を持つすべてのツール呼び出しを人間の承認でラップする。
Codex、Claude、OpenCode はそれぞれ独自の制約された子タスク機構を公開する。Claude のフックは子エージェントが人と連絡すること、スケジューリング、永続的設定の変更、親の応答を抑制することを防ぐ。Codex はアプリサーバのタスクイベントを QM の run にマップし、子ツールを制限する。これらは真のサブエージェントであり、YC のより広い「fleet」とは区別される。fleet は主に永続的な人とルームのスコープの集合であり、子エージェントはあるハーネス内での一時的な作業者である。
Pi の依存は注記に値する。YC はその yc-software/pi リポジトリから qm-pi-coding-agent-0.82.0-security.2 を公開している。そのタグを upstream Pi 0.82.0 と比較すると、7 ファイルに変更があり、brace-expansion のオーバーライドが lock/package メタデータで 5.0.7 から 5.0.8 に移動し、パッケージに MIT ライセンスが追加されていた。我々はその差分に挙動的なエージェントループのフォークを見つけなかった。カスタムタグは狭いパッケージングとサプライチェーンのパッチである。
Credentials: strong brokerage until materialization
QM のキーチェーンは暗号化された資格情報レコードを格納する。実装は HKDF で派生した鍵を使った AES-256-GCM を使用する。Grant は資格情報をスコープ、人物、モードに紐付ける;それらは一度限りまたは常設であり、期限切れにできる。人物は自分の個人スコープから資格情報を付与できる。常設の付与やより広範な共有はオペレータのルールの対象のままである。
サポートされる HTTP 利用に対しては、credential broker が最良の経路である。コアは呼び出し元ヘッダと権限を検証し、HTTPS を要求し、宛先ホスト名とオプションのサブドメインルールに一致させ、メソッドとパスプレフィックスを制限し、シークレットをコア内部に注入し、リクエストとレスポンスのサイズを上限する。sandbox コマンドは基になるトークンではなく broker エンドポイントを見る。
その保護は、CLI や broker を使用できない他のツール向けに資格情報がサンドボックスにマテリアライズ(具現化)されると終わる。SECURITY.md は、マテリアルはプレーンテキストでありそのサンドボックス内のソフトウェアが読み取れると述べている。grant の purpose フィールドは記録されモデルに表示される;マテリアライズ後の強制的な認可ではない。一度限り(one-time)は原子的な一回のマテリアライズを意味し、下流の API 操作が一回だけという意味ではない。
この区別は本質的に重要である。QM には真剣な資格情報コントロールプレーンがあるが、ログイン済みの任意のコマンドラインクライアントに対して、その同じコンピュータを制御するエージェントからトークンを秘密に保たせることはできない。
Three security postures, plus an always-on command floor
オペレータは組織の姿勢を選択する;より狭いスコープはそれを強化できる:
| Posture | External-content screening | Human approval |
|---|---|---|
dangerous |
無効 | ツールごとの一時停止なし |
auto (default) |
分類器がラベル付き外部コンテンツとツール結果をスクリーニングする | ツールごとの一時停止なし |
strict |
スクリーニングは無効化され、承認を優先する | 効果を伴うすべてのハーネスツール呼び出しごとに承認 |
3 つすべてがコマンドポリシーの下限を保持する。デフォルトルールは再帰的削除、force push、破壊的な SQL、シェルでのパイプによるダウンロードに対して承認を要求し、ファイルシステムのフォーマットやフォークボムを拒否する。スキャナはネストされたシェルペイロードを再帰的に展開し深さ 8 を上限とする。
これは事故や明白な攻撃に対する有用な保護である。シェルのセキュリティ境界ではない。メンテナは、ペイロードをエンコードするかスクリプトを書いて実行することでルールを回避できると言っている。モデルとサンドボックスは明示的に信頼されないものとして扱われ、オペレータ、コアホスト、データベースが特権を保持する。
自動スクリーニング層にも同様に限界がある。それは生成元ラベル付きの外部コンテンツを収集し、分類器に送る量を上限し、分類器が strict 判定を返した場合にコンテンツを検疫できる。利用不可またはサポートされていないスクリーニング経路の一部は、警告マーカーと監査イベントを伴ってフェイルオープンする。ambient Slack judge と OpenCode サイドカーはすべてが同じモデルゲートウェイを通るわけではない経路を持つ。ブラウザアクションはコマンド/HITL ポリシーの外にあり、ブラウザプロバイダのネットワークアクセスが必ずしもサンドボックスのエグレスに従うとは限らない。
YC のセキュリティ文書は、想定環境について率直である:信頼されたオペレータを伴う内部の単一組織デプロイメントである。これは堅牢な公開マルチテナンシー、認証、収容の証明として提示されているわけではない。管理者は特権的なコンテンツ読取者であり、モデルとブラウザ提供者は送られたデータを受け取り、耐久的なセッション、監査記録、ファイル、メモリは無期限に残る可能性がある。
The app-link documentation drift
我々の最も重要なコード対ドキュメントの発見は公開されたアプリに関するものだ。
脅威モデルはオーナーがベアラ能力リンクを配布でき、それを持つ誰でもアプリに到達できると言っている。これは以前の設計では明らかに真であったようだ。固定されたリリースでは、組み込みサブドメインのイングレスは異なる振る舞いをする。
deployments.ts は URL から ?access= を削除し、古い capability cookie を削除し、代替をミントすることを拒否する。通常のアプリアクセスは有効な portal セッションと ACL チェックを要求する。オーナーは 5 分間の有効期限の署名付き管理リンクを別途要求できる。対応するtest は “a capability link grants nothing — reach is the ACL alone” という名前で、古いクエリと cookie の資格情報が失敗することを主張している。
正確な結論は狭義である:ベアラのビジターリンクは 0.1.4 の組み込みサブドメインゲートウェイで無効化されている;SECURITY.md はまだ追いついていない。カスタムプラグインや外部に公開されたアプリエンドポイントは独自のレビューが必要である。
Launch-week bug reports
パブリックのイシュートラッカーは速いペースで動いている。報告時点で 14 件の issue がオープンだった。いくつかは機能要求ではなく、詳細でコード参照のある報告である。それらには、新しい Fly デプロイが SPRITES_TOKEN をリクエストしてプッシュすることに失敗する件 (#130)、固定された GitHub CLI RPM が AWS MicroVM ビルドで入手できなくなっている件 (#122)、実行中の中間操作で添付ファイルのみの Slack メッセージが失われる件 (#48)、および Slack への返信が正常に投稿される前に配信確認が発生する件 (#44) が含まれる。
我々はこれら4つの運用経路を再現しなかった。これらは未解決の報告として読むべきで、確認済みの脆弱性ではない。とはいえその具体性は成熟度に関する有用な証拠である:0.1.4 はローンチ週のリリースであり、クラウドや配信のエッジケースが公開の場で発見されている。
Background work: crons, watches and a webhook-shaped gap
QM のバックグラウンドシステムには二つの明確なメカニズムがある。
Crons は cron 式、タイムゾーン、間隔スケジュール、最初の発火時刻、実行者アイデンティティ、送信先をサポートする。各発火はタスク定義、ワークスペース、fire log が持続する間に新しいスレッドを作成する。Postgres バックエンドのジョブは pg-boss を使う;シングルトン識別子とリースが重複作業を制限する。リカバリ用のスケジューラスイープが利用可能である。デフォルトの cron 発火並行度は 4 である。
background ツールはまたサンドボックス内にプロセスを残してその出力、終了、マッチするテキストや他の条件に対して watch を登録できる。モニタポーラはデフォルトで 3 分のハートビートを使用し、最小間隔を強制し、保存されるイベントを上限し、セキュリティスクリーニングされたターン経路を通して元の会話を起こす。watch は期限切れとなり、プロセスセッションにはハードな TTL ルールがある;イベントのファンアウトは上限される。
YC のリリースノートは、歴史的な Ruby エージェントが webhook トリガを取得したと述べている。オープンランタイムには provenance/session-origin タイプとして webhook が含まれ、デプロイ文書はプロキシ可能な webhook 形状のエンドポイントを示している。我々はこの改訂で通常のターンを作成する汎用の組み込み webhook 受信機を見つけられなかった。その機能は組織プラグインか外部統合から期待されるかもしれない。cron とプロセスウォッチが公開コア内で完全かつ直接追跡可能なバックグラウンド経路である。
Internal app publishing
publish ツールはスコープ所有のコードをバージョン付きの内部アプリに変える。デプロイメントレコードはアプリをオーナーとスコープに紐付け、バージョンを保持し、アップデートとロールバックをサポートし、view/manage grant を添付する。アプリは ACL を通じて共有されるまでオーナーのみのアクセスである。Git アクセスは署名付き、期限付き、プリンシパルに紐付いた認可を使用し、取り消しをチェックする。
QMはアプリコードを別の信頼境界として扱う。コアは生成されたアプリケーションコードを安全性のためにレビューしない。アプリに渡される資格情報や環境値は明示的であり、ambientな作成者資格情報はアプリ実行時から除外される。前述の通り、組み込みのゲートウェイはポータルのアイデンティティとACLチェックを追加する。
この機能によりQMはチャットアシスタントより広範になる。会話は小さな運用サーフェスを生成し、それをチームに公開してバックグラウンドでデータを更新し続けることができる。同時にアプリケーションセキュリティの作業負荷を拡大する:生成されたすべてのアプリは、オペレータが監視し、パッチを当て、最終的に廃止するソフトウェアとなる。
デプロイとロールバック
サポートされるターゲットはローカルDocker、Fly.io、およびAWSである。FlyはアプリケーションをSprites/Machinesと組み合わせる。AWSはECS Fargateサービス、RDS、S3、およびMicroVMサンドボックスレイヤーをレンダリングする。Slackはcore内でSocket Modeを使用する;ポータルが意図されたパブリックなエントリポイントである。
生成されるディレクトリは組織とCLIの間の契約である。設定とシークレット名はそこに存在し、シークレット値はオペレータ環境とプロバイダのシークレットストアに留まる。組織はcoreを変更せずにツール、スキル、カスタムサンドボックスイメージ、およびプラグインを追加できる。リリースイメージはダイジェストで固定され続ける。
ロールバックはターゲットごとに意味が異なる。Flyの経路は前のサンドボックスのピンを復元する。Dockerのテアダウンは purge が要求されたとき破壊的になり得る。AWSはミューテーティングなデプロイ前にRDSスナップショットを取得する;コードと設定のロールバック自体はデータベースの内容を復元しないため、CLIはオペレータの操作用に復元ポイントを出力する。
デフォルトのプロジェクトにはライブの本番デプロイワークフローは含まれていない。Terraformやクラウドアクションはオペレータが実行するままである。それによりCIに広範なインフラ権限を黙って付与することを避けられるが、再現可能な変更管理が導入者の責任になることも意味する。
coreとプライベートなカスタマイズを1つのリポジトリにまとめたい組織には、GitHubのフォークではなくスタンドアロンのプライベートクローンを作成するように指示される。GitHubのフォークはオブジェクトネットワークを共有し、パブリックなフォークはプライベートにできない;そのネットワークにプッシュされたコミットはハッシュで取得可能なままであり得る。QMはプライベートな素材を deploy/layers/<org>/ の下に配置し、アップストリームをマージしてスクラブされたアップストリームパッチを準備するためのスキルを提供する。coreはパブリックなQMとバイト単位で同一であることが期待されている。
エージェントによって構築され、散文で統治されるコードベース
QMのコントリビューションポリシーはランタイムと同様に興味深い。CONTRIBUTING.md は、コーディングを行うエージェントが基盤となるコードの大部分を書くと述べている。外部のコントリビュータには adrs/ の下に非公式な人間が書いたテキスト提案を提出するよう求められる;メンテナはその後、自身のエージェントとコンテキストを使って受理されたアイデアを実装する。レビューされたリビジョン時点でパブリックディレクトリはプレースホルダを除いて空だった。
内部のAGENTS.mdは厳格である:コメントやdocblockを避け、自己レビューを行わず、独立したエージェントをレビューに使い、影響を受けるテストを実行し、関連する場合はライブのSlack QAを行い、可視的な変更のスクリーンショットをキャプチャし、プライベート/パブリックリポジトリの境界を維持する。
これはコードの形状を説明するのに役立つ。インターフェイスは明示的で、テストは豊富であり、コメントが推奨されないため名前により説明的な重みが載る。また珍しいガバナンスモデルを生み出す:コントリビュータは意図を提案し、メンテナは推論予算を費やし、エージェントが独立したレビューを行う。そのレビューの質はプロンプト、コンテキスト、およびGitに部分的にしか見えない実行上の規律に依存する。
QMがうまくやっている点
スコープはベンダー固有の会話ではなく、耐久的な単位であるという点だ。その決定によりQMは複数の難題に一貫した答えを提供する:共有作業、個人カスタマイズ、永続的なコンピュータ、モデル切替、および権限認識のコンテキスト。
オーディエンス全体向けのコンテキストフィルタは特に強力である。多くの職場向けエージェントは取得にアクセス制御を付け加え、その後会話履歴をambientなコンテキストとして残す。QMは現在のオーディエンス全体に対して履歴を再評価する。エグレスのための交差/和ルールは同じ考えをアクションに適用する。
デプロイの分割も規律がある。小さなプロビナンスを持つCLIが組織リポジトリを作成し署名付きイメージをピン留めする。組織の詳細はパブリックなソースツリーの外に留められる。再現性とプライバシーはREADMEの約束に依存するのではなく具体的なメカニズムを持つ。
最後に、脅威モデルは有用である。なぜならそれがオペレータが誤解しやすい失敗を名付けているからだ。制御されたコンピュータ内の平文資格情報、回避可能なシェルパターンルール、不完全なプロビナンス、ブラウザのサイドチャネル、および特権管理者が内部エージェントシステムの実際の断層線である。
抽象を通してモデルがまだ漏れる箇所
ハーネスインターフェイスはベンダーをコントロールプレーンレベルで代替可能にする。しかし彼らは挙動的に等価ではない。ステアリング、プロバイダ管理のセッション、思考モード、イメージ処理、および子エージェントのサポートはアダプタによって異なる。ハーネスを切り替える会社は、権限が安定していてもタスク品質、レイテンシ、コスト、および失敗モードが異なることを想定すべきである。
メモリ統合とコンテンツスクリーニングはどちらも判断をモデルに委ねている。周囲のコードは入力を制限し結果を記録するが、正しい分類を保証することはできない。デフォルトのメモリクエリは字義的すぎるため、現在の語句が保存された箇条書きと重ならない限り有用な事実が見逃される可能性がある。
エグレスはインフラ制御の中で最も均一でない。いくつかのバックエンドはドメインルーティングをプロキシ経由に強制できる;他はQMを通じたネイティブな実施を露出しない。ブラウザプロバイダとアプリランタイムは別個のネットワーク境界を追加する。オペレータは「エグレスポリシー」を普遍的な保証として扱う前にデプロイ固有のデータフローダイアグラムを必要とする。
運用成熟度が最終的な制約である。ソースは実質的なテストプログラムと注意深いリリース機構を含む。パッケージは公開から日が浅く、パブリックな履歴は意図的に浅く、ローンチ週のクラウドバグがオープンである。これらの事実は共存し得る。
評決
QMは企業全体のエージェントに対する妥当な参照アーキテクチャである。定義的貢献はスコープされた権限と耐久的コンピュータの組み合わせである:各人物や部屋は永続的な作業環境を受け取り、コアは各オーディエンスとアクションごとにコンテキストと権限を再計算する。モデルループはPi、OpenCode、Codex、あるいはClaudeでも組織的真実の源にならずに動作し得る。
このプロジェクトは、経験あるオペレータを擁する信頼された組織内で研究、プロトタイプ作成、適応する準備ができている。プロダクション採用には、選択されたサンドボックス、アイデンティティプロバイダ、コネクタ、モデルベンダー、および保持義務に結びついた脅威モデルが必要である。厳格な姿勢はアクションを停止させ得る;人間が承認した後の安全でない生成コマンドを修復することはできない。自動スクリーニングは露出を減らせる;それがプロンプトインジェクションが封じられていることを証明することはできない。耐久的なワークスペースは能力と保持リスクを同時に高める。
パブリックリリースは重要である。なぜならそれが難しい部分を露呈するからだ。QMの最も価値あるコードはエージェントの周辺にある:オーディエンスフィルタ、解決サービス、ACLストア、資格情報ブローカー、ランレジャー、スケジューラ、およびサンドボックスライフサイクル。これは職場向けエージェントの議論でしばしば省略されてきたレイヤーである。YCは現在真剣な実装をテーブルに出し、カテゴリがどれほど未完成であるかを示す十分な注意点も示した。
再現ノート
# Pin the reviewed source
git clone https://github.com/yc-software/qm.git
git -C qm checkout 7f2c916360f1797a8ff2a77ce2ce40c5fabab087
# Download the reviewed package
npm pack @yc-software/qm@0.1.4
sha256sum yc-software-qm-0.1.4.tgz
# Inspect package metadata and provenance pointer
npm view @yc-software/qm@0.1.4 version time dist --json
# Generate a local deployment directory without putting secrets in config
npm exec --yes --package=@yc-software/qm@0.1.4 -- \
qm init ./qm-deploy --org example --target docker
RuntimeWire’s tarball SHA-256 was 51593f853eade42ed04f10e96e1c8ddffca876c5be0ee98d753636018ee5e473. Readers should expect npm’s published integrity field to remain stable for the same immutable version.
Primary source index
- YCのQMリリースノート
- QMリポジトリ と レビュー済みコミット
- READMEとシステムアーキテクチャ
- 脅威モデルと既知の制限事項
- CLIとデプロイ契約
- スコープ解決 と オーディエンスフィルタリング
- メモリサービス と メモリ戦略
- Sandboxインターフェイス、ローカルDocker、Sprites と AWS
- Harnessインターフェイスとアダプター
- セキュリティ姿勢、コマンドポリシー と keychain
- 公開アプリのingress と capability-linkテスト
- CIワークフロー、署名済みイメージワークフロー と npmプロビナンスワークフロー
- 貢献ポリシー と エージェント向け手順
開示: RuntimeWireは静的ソースおよびパッケージのレビューに加え、ローカルでのCLIテストを実施しました。これは侵入テストや本番デプロイ監査ではありません。リポジトリおよびイシューの件数は2026年8月2日時点のスナップショットです。