Origin
Competitive analysis of yc-software/qm (2026-08-01).
Concept
qm exposes a single core primitive publish({dir, entrypoint, name}) that turns a directory in the agent's workspace into a running internal web app:
- Every publish is an immutable version; a stable link serves the current one;
rollbackTo: N is a pointer flip
- Durable app state only under
$DATA_DIR (SQLite at a fixed path, replicated where the backend supports it)
- Sharing per scope grant (
read = use, write = redeploy/rollback); apps are served from a dedicated apps domain, never from the admin/portal origin
- An edit widget is injected into published apps: a bubble that opens the authoring UI in an iframe and polls a version endpoint to prompt "App updated — reload"
- Provider abstraction with Docker and AWS implementations; deploy history reconciled via git bundles
- The seed skill teaches the agent to verify the app actually runs (
curl it) before calling it done, and explicitly forbids passing off a file as a running app
Why adopt
"Agent builds an internal tool and publishes it to the right people" is a killer demo and a genuine daily-work feature. omadia's canvas covers ephemeral/composed UI; publish covers the complementary case of durable, shareable micro-apps. The immutable-versions + pointer-rollback + edit-widget loop is simple and safe enough to adopt wholesale.
Reference (qm source)
src/tools/primitives.ts (publish), src/deploy/deploy-provider.ts, docker-deploy-provider.ts, aws-deploy-provider.ts, deploy-git-store.ts, edit-widget.ts
skills-seed/publish/SKILL.md
Origin
Competitive analysis of yc-software/qm (2026-08-01).
Concept
qm exposes a single core primitive
publish({dir, entrypoint, name})that turns a directory in the agent's workspace into a running internal web app:rollbackTo: Nis a pointer flip$DATA_DIR(SQLite at a fixed path, replicated where the backend supports it)read= use,write= redeploy/rollback); apps are served from a dedicated apps domain, never from the admin/portal origincurlit) before calling it done, and explicitly forbids passing off a file as a running appWhy adopt
"Agent builds an internal tool and publishes it to the right people" is a killer demo and a genuine daily-work feature. omadia's canvas covers ephemeral/composed UI;
publishcovers the complementary case of durable, shareable micro-apps. The immutable-versions + pointer-rollback + edit-widget loop is simple and safe enough to adopt wholesale.Reference (qm source)
src/tools/primitives.ts(publish),src/deploy/deploy-provider.ts,docker-deploy-provider.ts,aws-deploy-provider.ts,deploy-git-store.ts,edit-widget.tsskills-seed/publish/SKILL.md