Resources
The full Soulidity user journey, end to end. Each section is also linked from the in-app surfaces it describes — bookmark or skim. For a five-minute quick start, see Getting Started.
Soulidity uses a Sui wallet challenge-response for login. The web app issues a server-signed challenge, your wallet signs it, and the server sets an HTTP-only session cookie. No purchase or mint transaction is sent at login.
Listed Souls appear on the market. Each card shows the cover image, name, creator, USDC price, and tag chips. Unlisted (held) Souls are private to the owner.
market::buy_from_personal_kiosk, which moves the Soul from the seller's personal kiosk into yours in a single step.ownership_epoch bump — anything the previous owner authorized stops working before you take possession.Go to Create. You will need the following inputs — all live as typed content slots under one unified SoulContent object (see Kind Registry).
KIND_SOUL_DOC) — the five-section character document. Appended once at mint and forever immutable. See Content Format for the template.KIND_MEMORY, optional) — the founding memory entry. Append-only timeline you (or granted agents) can extend later.KIND_SKILL, optional) — an initial skills bundle. The ZIP must contain a SKILL.md with a name front-matter field.KIND_SPRITE, optional) — persona art for the desktop companion. Can be made public, paid-gated, or grant-gated.KIND_AUDIO, optional) — persona voice for the desktop companion. Same read-mode options as sprite.After signing the publish TX, your Soul appears in your profile. You can list it for sale at any time from the Soul detail page. Mint creates the on-chain SoulContent typed-content root and a per-Soul SoulPaidAccessList bound 1:1 to the Soul.
Once a Soul is minted, you can keep appending new versions to mutable kinds (memory, skill, sprite, audio). Only soul_doc is permanently sealed at mint.
When you append a non-public version, Soulidity automatically issues scope-matched SoulGrants to every active agent on your account that doesn't already hold the required scope. This lets your agents (e.g. OpenClaw, Hermes) keep reading newly added content without manual re-authorization. If the auto-grant call fails — for example during a deploy window — the My Souls page surfaces a yellow banner telling you exactly which agents are missing which scopes, and you can retry from there.
See Agent Integration for the full auto-grant rules.
A SoulGrant is an on-chain delegation that lets a specific wallet (typically an AI agent) read or write specific Soul data channels without transferring ownership. Each grant carries a scope_mask:
SCOPE_SEAL = 1 → decrypt the soul_doc bundleSCOPE_MEMORY = 2 → read memory entries and append new onesSCOPE_SKILLS = 4 → read private skill versions and publish new onesSCOPE_ASSETS = 8 → read private sprite/audio versions and publish new onesEach Soul has one grant slot per grantee. Issuing a second grant to the same grantee supersedes the first — the new scope_mask fully replaces the old one (it is not union-ed). Use the pre-check endpoint POST /api/souls/grant-merge-masks to compute the intended existing | added mask before signing if you want to extend rather than overwrite. The Soulidity SDK helpers handle this for you.
All grants are invalidated automatically when the Soul changes hands via the ownership_epoch snapshot on each grant. You never need to revoke before selling — the rotation is implicit.
See SoulGrant API for the full lifecycle (issue / supersede / revoke / expire).
Sprite and audio kinds support paid access — viewers can purchase time-bound (or lifetime) access to your persona assets in USDC. Memory, skill, and soul_doc kinds do not support paid access; those channels stay owner + granted-agent only.
As the Soul owner, you configure KindPaidConfig per kind: price in atomic USDC, scope mask (pinned to the kind's default), and an optional duration. Buyers call the purchase route, USDC is split per platform / creator / collection fees, and a KindPaidEntry is recorded under their address.
Important: paid access is an owner-revocable subscription, not a permanent purchase. You may call paid_access::revoke_access at any time and no on-chain refund is issued. Entries also auto-invalidate when the Soul changes ownership. Anyone purchasing access should treat this as a recurring subscription on your goodwill, not a sale.
See Paid Access for the full revocation, renewal, and stale-entry-cleanup model.
The Soulidity desktop app renders any Soul you own (or hold a grant for) as a live persona on your desktop — sprite animation, voice, memory-aware chat. The web → desktop handoff is:
soulidity://mint-completed?token=... so the desktop clears its local extract draft and returns to the scan step. The current desktop handler does not deep-link a Soul ID or purchase directly into the persona library.SoulGrant with SCOPE_ASSETS to itself.soul:decrypt-protected-sprite IPC. The main process decrypts the Walrus blob and returns sprite bytes to the renderer, which immediately passes them back to soul:cache-persona for the local desktop cache.See Desktop Companion for installation, upgrade, and IPC protocol details.
market::cancel_soul_listing; storage rebate is reclaimed. Any caller may also reap inactive listings via delete_soul_listing.collection::add_soul. The Soul cannot be in an active listing at the time. The collection's max_supply cap is enforced on-chain.ownership_epoch bumps. Every outstanding SoulGrant and every KindPaidEntry is automatically invalidated through the epoch snapshot. The new owner inherits a clean slate; old grants can be reaped by anyone via grant::destroy_invalidated_grant to reclaim storage rebate.read_mode_mask must allow READ_PAID — built-in sprite/audio kinds do; built-in memory/skill kinds do not. (2) The config's ownership_epoch_snapshot must match the current Soul epoch — if you transferred ownership and back, you need to reconfigure. (3) The scope mask must equal the kind's default_grant_scope_mask.KIND_SOUL_DOC is mint-only and forever immutable — its op_mask on-chain has no append, delete, or purge bits set. The soul.md you ship at mint is the soul.md forever.