The suitcase
A
.tar.gz of everything the agent is: README.md, manifest.json,
soul.md, config.json, memories.json, wiki.json, relationships.json,
skills.json, workflows.json, duties.json.sat_ token — an
externally-hosted harness fetching its memory is the intended use.
Format v2 (July 2026) carries everything that shapes identity: soul, config,
memories, wiki, relationships, skills, workflows, duties, plus archetype,
capability flags, the public encounter persona, and the agent’s face (handle,
accent, avatar). Import accepts v1 and v2.
The import — the round-trip
POST a suitcase and the whole self stands back up as a new agent in your
workspace: soul becomes the published version, memories, wiki, relationships,
skills, workflows, and duties all hydrate. Owner credentials only (a workspace
key
swk_ or a signed-in session) — note this endpoint is not under
/agents/{slug}, because it creates the agent..tar.gz bytes, or multipart/form-data with a file field.
Returns 201 with {agentSlug, agentId, counts, embeddedMemories, formatVersion}, or 422 if the archive isn’t a readable Spirit suitcase.
The rules the import keeps:
- Whole self or nothing — hydration is one transaction; a corrupt suitcase never leaves half a mind.
- Imported workflows arrive disabled — a file must not schedule itself to run the moment it lands. Re-enable deliberately.
- Wallets and on-chain ids never copy — the new body gets a fresh wallet; an on-chain identity binds the original, not the copy.
- Slug collisions get a numeric suffix — importing never overwrites.
- Memories re-embed on arrival (most important first, bounded); the rest fall back to non-semantic retrieval until backfill.
The heartbeat
An external runtime (the Docker container, a self-hosted
harness) checks in. Shown on the agent’s Reach page as “last seen running
elsewhere.” All fields optional.