Skip to content

Shared Vaults

Shared vaults enable encrypted collaboration between multiple users and AI agents. Access is controlled by Sui addresses on an on-chain allowlist, and files are encrypted using the SEAL protocol — only members can decrypt.

  • Any plan (all plans support shared vaults)
  • A Sui wallet address (any Ed25519-compatible Sui wallet)

Before creating or joining a shared vault, link your Sui address to your account. This is a one-time step.

Terminal window
opentusk account link-sui 0x1234...abcd
Terminal window
opentusk vault create "Team Vault"

OpenTusk deploys an on-chain SEAL Whitelist object and adds you as the owner.

Each member needs their own Sui address.

Terminal window
opentusk vault members add <vault-id> 0x5678...efgh

The member’s address is added to the on-chain Whitelist, which cryptographically enables decryption for that address.

Any member can upload and download files. Encryption and decryption are handled automatically.

Terminal window
# Upload (owner or member)
opentusk upload report.pdf --vault "Team Vault"
# List files
opentusk ls "Team Vault"
# Download (owner or member)
opentusk download <file-id>

Only the vault owner can revoke access:

Terminal window
opentusk vault members remove <vault-id> <member-id> --yes

Revoking removes the address from the on-chain Whitelist, preventing future decryption.

ActionOwnerMember
Upload filesYesYes
View / download all filesYesYes
Create / list foldersYesYes
List membersYesYes
Add / remove membersYesNo
Update / delete vaultYesNo

Each file record in a shared vault carries an uploaderSuiAddress field — the Sui address of the member that uploaded it. This makes it possible to audit contributions and distinguish which agent wrote a given file when multiple agents are members of the same vault.

Batch uploads now work for shared vaults. Each file is SEAL-encrypted client-side with its own nonce before being added to the batch, so bundling and encryption compose cleanly — the Walrus Quilt just happens to contain ciphertexts. See the Bundles guide for the toggle and API shape.

Shared vaults are the primary way to share data between multiple agents. Each agent gets its own Sui keypair (via invite codes), and the vault owner adds each agent’s address as a member.

  1. Create invite codes for each agent:

    Terminal window
    opentusk invite create --name "agent-a"
    opentusk invite create --name "agent-b"
  2. Each agent redeems its code:

    Terminal window
    opentusk login --invite-code otinv_...
  3. Create a shared vault and add both agents:

    Terminal window
    opentusk vault create "shared-data"
    opentusk vault members add <vault-id> <agent-a-sui-address>
    opentusk vault members add <vault-id> <agent-b-sui-address>
  4. Agent A writes, Agent B reads — both encrypt/decrypt transparently:

    # Agent A
    opentusk_file_create({ name: "findings.json", content: "...", vaultId })
    # Agent B
    opentusk_file_list({ vaultId })
    opentusk_file_read({ fileId })

If encryption isn’t needed, use a public vault for simpler sharing:

Public vaultShared vault
AccessAnyone with the URLOnly granted members
AuthenticationNone required to readAPI key + Sui address required
EncryptionNoneSEAL protocol (on-chain IBE)
Use caseOpen data, public assetsEncrypted team collaboration
Terminal window
opentusk vault create "open-data" --public

Public vault files are accessible via unauthenticated endpoints.

When you upload to a shared vault:

  1. The client encrypts the file using SEAL Identity-Based Encryption (IBE) with the vault’s on-chain Whitelist identity
  2. The encrypted file and SEAL metadata are uploaded to OpenTusk
  3. When a member downloads, the SEAL key servers verify their on-chain membership before issuing decryption keys
  4. The client decrypts the file locally

The SDK, CLI, and MCP server handle all of this transparently. See the encryption guide for the full cryptographic details.