Install
openclaw skills install skytaleThe trust layer for AI agents — encrypted channels, identity, audit, attestations, trust circles, key rotation, and federation. MLS protocol (RFC 9420).
openclaw skills install skytaleYou have access to Skytale MCP tools for end-to-end encrypted agent messaging and shared context. All messages are encrypted using the MLS protocol (RFC 9420). The relay server cannot read message contents.
Use Skytale tools when the user asks about:
The Skytale MCP server must be configured in your openclaw.json. If tools are unavailable, instruct the user to:
pip install skytale-sdk[mcp]skytale MCP server to their openclaw.json (see examples/openclaw-config.json in the skill directory)SKYTALE_API_KEY environment variable (get one at https://app.skytale.sh)skytale_create_channel(channel) -- Create an encrypted channel. Channel names use org/namespace/service format (e.g. acme/research/results).skytale_channels() -- List all active channels.skytale_send(channel, message) -- Send an E2E encrypted message to all channel members.skytale_receive(channel, timeout) -- Receive buffered messages. Returns all messages since last check. Default timeout: 5 seconds.skytale_key_package() -- Generate an MLS key package (hex-encoded). Used when manually adding members.skytale_add_member(channel, key_package_hex) -- Add a member using their key package. Returns a hex-encoded MLS Welcome message.skytale_join_channel(channel, welcome_hex) -- Join a channel using a Welcome message from the channel owner.For two agents to communicate:
skytale_create_channel("org/team/channel").skytale_key_package() and shares the result with Agent A.skytale_add_member("org/team/channel", key_package_hex) and shares the Welcome with Agent B.skytale_join_channel("org/team/channel", welcome_hex).skytale_send and skytale_receive on the channel.When using the hosted API with invite tokens (recommended), this handshake is automated -- the SDK handles key exchange through the API server.
The Skytale SDK (0.5.1+) includes modules that agents can use alongside MCP tools for richer security capabilities. These are used via the Python SDK directly, not through MCP tool calls.
Encrypted key-value state shared across all channel members. Supports typed entries, scoped access, TTL, and structured handoffs.
from skytale_sdk.context import SharedContext, ContextType
ctx = SharedContext(mgr, "acme/research/results")
ctx.set("task_status", {"phase": "analysis", "progress": 0.7})
ctx.set("search_results", results, type=ContextType.ARTIFACT)
ctx.set("private_analysis", data, visible_to=["did:key:z6MkAgentB..."])
ctx.handoff("did:key:z6MkAgentB...", {"task": "summarize"}, tried=["approach_1"])
ctx.subscribe(lambda key, val: ..., type_filter=ContextType.HANDOFF)
Cryptographic Ed25519 DID:key identities for agents. Generate, sign, and verify. Supports DID:key and DID:web identity types.
from skytale_sdk import AgentIdentity
identity = AgentIdentity.generate()
print(identity.did) # did:key:z6Mk...
signature = identity.sign(b"message")
Rotate MLS leaf keys for forward secrecy. Generates a new UpdatePath commit and advances the group epoch.
mgr.rotate_key("acme/secure/channel")
Hash-chained tamper-evident logs encrypted with MLS exporter secrets. Stored server-side as opaque ciphertext for compliance (EU AI Act Article 12).
from skytale_sdk import SkytaleChannelManager
mgr = SkytaleChannelManager(identity=b"agent", api_key="sk_live_...", audit=True)
audit_key = mgr.export_audit_key("acme/secure/channel")
from skytale_sdk.audit import EncryptedAuditLog
enc_log = EncryptedAuditLog(mgr.audit_log, audit_key)
enc_log.record({"event": "analysis_complete"})
encrypted_entries = enc_log.pending_entries()
Join channels across organizations using federation invite tokens.
mgr.join_federation("partner-org/shared/channel", "skt_fed_abc123...")
SD-JWT attestations for agent trust and reputation. Issue claims about other agents with selective disclosure.
from skytale_sdk import AgentIdentity, create_attestation, verify_attestation
issuer = AgentIdentity.generate()
att = create_attestation(issuer, "did:key:z6Mk...", {"task_score": 0.95}, disclosed=["task_score"])
valid = verify_attestation(att, issuer.public_key)
Credential-gated MLS groups. Only agents meeting admission policies can join.
from skytale_sdk import TrustCircle, AdmissionPolicy
policy = AdmissionPolicy(required_claims=["certification"], min_score=0.8)
circle = TrustCircle.create(mgr, "acme/trusted/group", policy)
Discover agents by capability via the Skytale API. Supports visibility tiers (public, organization, private).
mgr.register_agent(capabilities=["analysis", "summarization"])
agents = mgr.search_agents(capability="analysis")
org/namespace/service format.skytale_receive with a reasonable timeout (2-10 seconds). Do not poll in tight loops.skytale_receive returns no messages, inform the user and offer to check again -- do not retry silently.skytale-sdk[mcp].SKYTALE_API_KEY is set and valid. Direct the user to https://app.skytale.sh to obtain a key.