Skip to main content
For the full guide, see Mobs.
There are two different mob surfaces:
  • Host APIs: typed mob/* methods over JSON-RPC and the SDK-backed Mob classes
  • Agent-side tools: mob_* tools exposed inside a running agent session
This page focuses on the host control plane. It does not treat agent-side mob_* tools as if they were the public RPC/SDK API.

Create a mob

Spawn members

The CLI exposes helper, callable-run, and run-resource commands such as spawn-helper, fork-helper, run, runs, status, logs, attach, run-flow, member-status, respawn, and wait-kickoff. It does not expose the raw host-side mob/spawn lifecycle directly.

Place a member on a bound host

Run the member-host daemon in its own restart-stable realm. Keep this process running:
Bind its mode-0600 descriptor to the mob from the controlling host, then use the reported host id as placement:
Read host reachability, route convergence, and the member’s owning-host history through the controller:
REST and public MCP expose those three observations but not host binding, grants, member live control, or hard cancel. Python and TypeScript SDKs wrap the full JSON-RPC family. Trusted in-process MobHandle callers also expose hard cancel. Browser mobs stay single-host.
Do not use a placed member’s session id with the controller’s generic session/* methods. The session belongs to the member host’s realm. Use identity-routed mob operations and mob/member_history; remote transcript revision and edit methods are not bridged in v1.
The placed profile must also be portable. Remote admission rejects Rust bundles, external tool dispatchers, WorkGraph tools, host-only MCP allow-lists, inherited tool filters, in-process compaction curators, and secret-bearing shell or MCP environment/header values. Placement cannot be combined with an explicit backend or runtime binding. Admission also rejects a member whose required capabilities are absent on the bound host.

Resume a durable member under a new role

Role migration is a trusted Rust-host operation. It preserves the exact mob, member identity, session, and transcript while declaring the exact predecessor role for one cold Resume request:
Use a SpawnMemberCustomizer with ctx.spawn_source == SpawnSource::Resume and spec.declare_resume_from_role("domain")? when cold restore reconstructs the spec after a process restart. The runtime rejects a missing or incorrect predecessor declaration and refuses migration while the exact session is live, even if that actor is idle.
Do not add resume_from_role to JSON-RPC, REST, MCP, SDK, CLI, Web, or agent-tool spawn payloads. It exists only on trusted in-process specs and the private member-host materialization wire.

Wire and unwire peers

Send work to a member

Use the host control plane when an application needs to deliver content directly to a member session.

Submit tracked work

Use the work lane when you need a cancellable work reference rather than plain content delivery. The work lane uses the opaque member_ref returned by spawn, member list, or member send responses.

Run a flow

Helper-oriented CLI flows

The current CLI is strongest for helper-style workflows on an existing mob:

Events and subscriptions

See also