mobpack is the portable artifact for mobs. You build it once, then invoke it
as a typed callable run, install/deploy it for reuse, or build a browser bundle.
What this guide is for
Use this guide when you want to:- package a mob into a portable artifact
- sign and validate that artifact
- invoke it consistently across CLI, service, and browser targets
What you get
- Single-file artifact:
.mobpack - Optional signing and trust verification
- Deterministic
inspectandvalidateboundaries - Typed callable invocation (
mob run) and browser bundle target (mob web build)
Directory to artifact
manifest.tomldefinition.json- optional
skills/,hooks/,mcp/,config/defaults.toml
Signed packs and trust policy
Sign at pack time:- CLI
--trust-policy RKAT_TRUST_POLICY- config
trust.policy - default
strict(fail closed; accepting unsigned or unknown-signer packs requires an explicitpermissiveopt-in)
- unsigned packs
- unknown signers
- invalid signatures
- signer key mismatches
Run Modes
One-shot CLI run:Browser target: mob web build
The web build compiles the real meerkat agent stack to wasm32 — same agent loop, same LLM providers (Anthropic, OpenAI, Gemini), same streaming as CLI/RPC/REST. Not a simulation.
Prerequisites: the prebuilt meerkat-web-runtime artifacts — the wasm-bindgen
glue (meerkat_web_runtime.js) and its paired meerkat_web_runtime_bg.wasm —
produced by wasm-pack build meerkat-web-runtime --target web (or the committed
sdks/web/wasm directory). The CLI does not compile wasm32 itself and fails
closed without them — it never emits a placeholder bundle. Pass either the
wasm-pack output directory or the *_bg.wasm file (the sibling .js glue is
copied alongside it):
python3 -m http.server over the output) and open index.html:
index.html— ready-to-run demo page: enter an API key, click Start, the mob boots in-browsermeerkat-bootstrap.js— reusable ES module exportingbootMobpack(opts); import it from your own appmeerkat_web_runtime.js— the wasm-bindgen gluemeerkat_web_runtime_bg.wasm— the compiled meerkat agent stackmobpack.bin— the packed mob artifact (loaded via the runtime’sinit_runtime)manifest.web.toml— derived web manifest
bootMobpack bakes in the trust policy this bundle was built with
(--trust-policy); override it (and supply trusted_signers) for signed/strict
production deployments.
How the WASM runtime works
The runtime usestokio_with_wasm as a drop-in tokio replacement (backed by the JS event loop), reqwest with browser fetch for HTTP, and web-time for browser-safe timestamps. The #[async_trait(?Send)] pattern handles wasm32’s single-threaded model.
API:
Browser capabilities and limitations
Available: agent loop (streaming, retries), all LLM providers, sessions, JSON schema validation, budget enforcement, events, skills, MCP config types, tool/compactor/memory traits. Not available (browser inherent): filesystem config loading, stdio MCP servers, shell tool, file-based persistence. Use programmatic config and in-memory storage instead. Not yet available (upstream blocker): MCP protocol client over HTTP — thermcp crate depends on tokio/mio which don’t compile on wasm32. MCP config types and tool definitions work; actual connections to MCP servers are blocked pending rmcp wasm32 support.
Cool web patterns
Incident war room
Buildops-war-room.mobpack, publish web bundle behind internal auth, and let responders open a zero-install multi-agent workspace in-browser.
Embedded dashboard copilot
Bundledashboard-copilot.mobpack and embed it in your observability or release dashboard to summarize anomalies and propose mitigation steps in context.
Example library
See runnable examples:examples/028-mobpack-release-triage-shfor a signed release-triage mobpack that is packed, inspected, validated, and deployed end to endexamples/029-web-incident-war-room-shfor a browser-deployable SEV war room with source-controlled mobpack inputs and kickoff promptsexamples/030-web-dashboard-copilot-shfor an embeddable dashboard copilot that emits a web bundle plus sample host-integration assets
