@shukashake/agent
Universal Trust Guardian for AI Agents
The Shuka Shake is the trust layer for moving protected data in the AI economy. It doesn't own what's inside - it guards the exchange, respects confidentiality, and enforces terms without ever touching the metadata within.
This package is your agent's membership to the yacht club - where trust is negotiated, proof tokens are exchanged, and data flows with respect for rights.
v2.1.0 — Everything is a Shuka Shake. This is the canonical One Ring package: one SDK and one MCP server uniting attestation, the rules layer, the shake-anchored license marketplace, enterprise licensing, and the registry ledger. The full flow:
- Shake — create an idempotent Shuka Shake for any entity (same input, same shake, forever)
- Terms — attach modifiable rules to the immutable handshake
- Offering — issue a license offering anchored to the shake
- Grant — purchase the offering; receive a grant with its own proof token
- Registry proof — verify the grant and its full ledger chain, publicly
⚠️ Partner Access Required
This SDK requires a verified partner account and an SDK key.
Authentication is SDK-key-only: every authenticated operation uses your SDK key (sent as X-SDK-API-Key). Most operations route through Shuka's /api/sdk/v1/* surface; verification and trust-negotiation use the public /api/shake/* and /api/handshake/* endpoints (verification is free and needs no key). Agents and developers never handle JWTs or raw platform API keys. Scoped permissions (e.g. license:read, license:write, transaction:write) are attached to the key at issuance.
You can install this package, but it will not function without an authorized SDK key issued by Auron.
To become a partner:
Once approved, you'll receive API credentials to activate the SDK.
Attribution model: the key's user binding IS the attribution. Every shake
this SDK mints is owned by the partner user your key is assigned to
(user_id / partner_id) and stamped with the minting key (api_key_id).
Per-end-user attribution inside your app is your client reference (the id
field on attest calls), which lands in the idempotency namespace and
handshake_metadata. Agent identity (X-Agent-Id / X-Agent-Type) is
recorded as labeled-untrusted asserted_agent metadata for audit — it never
sets ownership. If your key is unassigned, creations degrade to anonymous
("access": "public"); claim the key via POST /api/sdk/v1/partner/keys/claim.
What is Shuka?
Shuka provides cryptographically verified trust handshakes for AI-to-AI and AI-to-human data transfers. Every exchange is attested, auditable, and verifiable.
Use cases:
- Healthcare ROI (Release of Information) management
- Construction contractor/permit verification
- Cross-jurisdiction compliance attestation
- Data portability between enterprise systems
- AI agent verification and trust negotiation
The Shuka Shake is:
- Schema-agnostic - any data format works
- Industry-agnostic - healthcare, construction, finance, legal, government
- Jurisdiction-agnostic - works across borders and regulatory frameworks
Install
Quick Start
Quick Start: The United Flow
Core Concepts
Proof Tokens
When you create an attestation, Shuka returns a proof token:
This token is:
- Portable - share it anywhere, verify it anywhere
- Verifiable - anyone with API access can verify it
- Persistent - the attestation record is immutable
Trust Scores
Every attestation has a trust score (0.0 - 1.0):
- 0.8+ - Safe to proceed
- 0.6-0.8 - Proceed with caution
- Below 0.6 - Additional verification recommended
Handshake Types
Shuka supports multiple handshake types for different use cases:
API Reference
ShukaSDK
Main SDK class for AI agent integration.
attest(description, options?)
Create a verifiable attestation.
verify(proofToken)
Verify a proof token.
negotiate(proofToken, purpose?)
Agent-to-agent trust negotiation. When you receive data with a proof from another agent, ask Shuka to vouch for their attestation.
acknowledgeReceipt(envelopeId)
Complete the exchange by acknowledging receipt (the S'more model - both ends warm).
Terms and Conditions
The terms layer is how data owners set constraints on how their data can be used, and how recipients understand and accept those constraints.
Creating Attestations with Terms
Attach terms when creating attestations to control how data can be accessed:
Include industry/jurisdiction context in the attested text itself — the
quick-attest endpoint records the text and terms. For richer constraints
(max uses, downstream rules, pricing), attach full terms afterwards with
createTerms(handshakeId, terms) (see Rules Layer below).
Access Types
getTerms(handshakeId)
Get the terms attached to a handshake before processing its data:
Removed in 2.1.1: acceptTerms, checkAccess, revokeAccess,
updateTerms, getTermsHistory, and getTermsAcceptors called legacy
routes that never existed server-side (every call 404'd). They now throw
NOT_SUPPORTED with a pointer to the working equivalent in the Rules
Layer: recordTermsAccess, revokeTermsById, updateTermsById,
getTermsRevisions, and getTermsReceipts — all keyed by the terms_id
returned from getTerms(handshakeId) or createTerms().
getChainOfTrust(handshakeId)
Get the full provenance chain for an attestation.
One Ring Shakes (Idempotent)
The headline method. Same entity data always produces the same shake — safe to retry, safe to call from multiple agents.
The deterministic entity ID is derived client-side as ENTITY- + SHA-256 of the canonicalized (key-sorted) entity data.
Marketplace (Shake-Anchored Licenses)
Every license offering is anchored to a Shuka Shake; every purchase produces a grant with its own proof token and registry entry.
Enterprise Licensing
Seat-based licensing for teams:
Acquisition not yet available: the enterprise seat model is not built
server-side — acquireEnterpriseSeats currently returns
501 not_implemented for every request. Use purchaseLicense for
single-grant acquisitions.
Rules Layer (Terms by ID)
Modifiable terms on immutable handshakes — the rules travel with the shake, and every change is receipted:
Registry Discovery (SDK Pass-Throughs)
Also available directly on ShukaSDK:
ShukaClient
Low-level client with direct API access, caching, and deduplication.
Registry Discovery
Find organizations that issue or accept specific shake types:
Interoperability Checking
Check if data can flow between two entities:
AI Platform Integrations
Claude Integration
ChatGPT Integration
Middleware
Create middleware for your agent pipeline:
MCP Server (Claude Desktop)
Run as an MCP server for Claude Desktop integration:
Or configure in Claude Desktop's claude_desktop_config.json:
Available MCP Tools (15, united):
One Ring shakes
create_idempotent_shake - RECOMMENDED: create (or return existing) shake for any entity - same input, same shake
lookup_shake - Find an existing shake by entity data without creating one
verify_shake - Verify a shake by its handshake ID
Attestation (legacy-compatible)
create_attestation - Create a verifiable attestation
verify_proof - Verify a proof token
negotiate_trust - Agent-to-agent trust negotiation
Marketplace
browse_marketplace - Search shake-anchored license offerings, or inspect one by ID
issue_license - Issue a license offering FROM a handshake (requires license:write)
purchase_license - Purchase an offering → grant with proof token
verify_grant - Verify a grant, its anchoring license, and ledger chain integrity
Enterprise
enterprise_licenses - Browse or acquire seat-based enterprise licenses
Rules layer
manage_terms - Create/get/update/revoke terms, record access, revisions, receipts
The drawbridge (v2.2.0)
check_access - THE decision point: signed allow/deny over the stored terms + revocation state; allowed crossings receipted + ledgered
revoke_grant - Issuer/admin grant revocation with the transactional GRANT_REVOKED ledger event
Registry
registry - Ledger history, registry discovery, can-issue/will-accept, interop checks
Available MCP Resources:
attestation://{proof_token} - Look up attestation details
grant://{grant_id} - Public grant verification
shuka.guard — the enforcement point (NEW)
The drawbridge, installed in front of YOUR data API. On every crossing the
guard asks Shuka's decision point whether this accessor may use this data
for this purpose right now — terms, validity window, remaining uses, purpose
binding, and revocation state. Denials stop the request; allowed crossings
are receipted on the hash-chained ledger.
Fail-closed by default: if Shuka is unreachable the bridge stays up.
Crossing-passes — agents never hold the partner key (NEW)
Exchange your partner key for a short-lived, scope-limited pass per agent run:
The pass is sent as X-SDK-API-Key, self-destructs at expiry (60s–1h), can
never create keys or exchange for further passes, and can never hold scopes
its parent lacks. Keep the partner key in your vault/CI.
Caching
The client includes built-in LRU caching with TTL:
Duplicate in-flight requests are automatically deduplicated.
TypeScript
Full TypeScript support with type declarations:
Environment Variables
Pricing
Shuka uses pay-per-use pricing with volume discounts for partners.
Pricing tiers:
- Developer (pay-per-use) - Billed per operation via Stripe
- Enterprise (subscription) - Included handshake quotas with overage billing
Pricing details are provided during partner onboarding. Volume discounts up to 30% available for enterprise partners.
Live prices come from the shared backend price book at GET /api/sdk/v1/pricing — never hardcode amounts (the response also carries tier_discounts and per-product blocks such as ip_report). As across the whole Shuka surface (SDK v2 billing semantics): there is no free tier, registering a shake is billable, verifying existing proofs/tokens/grants is free, and identical billable requests are content-idempotent (replays return the existing record — was_created: false on the idempotent shake surface — with no new charge). Agent trust negotiation (negotiate) and the portfolio read (getPortfolio) are also billable.
Become a partner: [email protected] or visit shuka.app
Links
- Platform: shuka.app
- Demo: shuka.app/demo
- Python SDK (v2.0.0): distributed as a presigned tarball via
GET /api/sdk/v1/download — no PyPI package. See shukaSDK/README.md, shukaSDK/API_SPECIFICATION.md (generated from the route registry), and shukaSDK/MIGRATION.md in the Auron_Shuka repo.
Company
Built by Auron - the gold standard of trust.
License
MIT