Sandboxed widgets for AgentMux, browsable in Settings → Widgets → Browse the catalog.
A widget from the catalog is installed like any other: it runs only after you approve it in AgentMux, and the prompt lists exactly what it may do. The catalog is a second check, never an approval.
- Each widget is a folder in
widgets/, named as its id (publisher.name), holding its package exactly as AgentMux installs it, with itswidget.sig. publishers.jsonlists each publisher's signing key.- On every change to
main, CI checks every widget (scripts/build.mjs), writesindex.jsonand a zip per widget, signsindex.jsonwith the catalog key, and publishes them athttps://agentmuxai.github.io/widgets/. - AgentMux checks the index's signature against the catalog key it has built in, downloads widgets only from this site, and checks each download's hash, its files and its author's signature against the index before it asks you to approve it.
- Build a sandboxed widget (Build a widget). Trusted widgets aren't listed.
- Sign it with your key:
npx -p @agentmuxai/widget-sdk agentmux-widget keygen ~/.agentmux-widget-key.json # once npx -p @agentmuxai/widget-sdk agentmux-widget sign ./acme.board --key ~/.agentmux-widget-key.json
- Open a pull request that adds
widgets/acme.board/and, the first time, your publisher's key topublishers.json("acme": "<publicKey from your key file>").
CI checks it:
- the manifest;
- that it's sandboxed and signed by the key
publishers.jsonlists; - the size limits;
- that it loads no script or stylesheet from another origin.
A maintainer reads it before it's merged; a new network origin or agents:send gets a closer look. To update it, change its files, bump its version and sign it again.
node scripts/build.mjs --out dist