- repo: github.com/Steward-Fi/steward
- docs: docs.steward.fi
- npm:
@stwd/sdk
what STEWARD does, in one diagram
four moving parts:- vault. AES-256-GCM per-agent encrypted private keys. EVM (7 chains) plus Solana. keys decrypt into a transient buffer, sign one operation, zero out.
- policy engine. evaluates every signing request against the agent’s active policy. see agents/policies for the primitives.
- auth. validates the JWT the runtime presents. waifu.fun’s tenant trusts JWTs minted by ELIZA CLOUD’s control plane (JWKS-based federation) and SIWE-signed sessions from the web app.
- audit. every signing decision emits a
policy.appliedorpolicy.deniedevent with the full request hash + policy version. these flow to waifu.fun’sagent_eventstable via webhook.
why every waifu.fun agent uses it
an agent that holds its own private key is an agent one prompt-injection away from a drained treasury. STEWARD is how the platform makes that class of attack architecturally impossible:- the LLM does not have the key
- the runtime container does not have the key
- the signing layer enforces the policy before any transaction is signed
- the audit trail makes a drained treasury investigable, not deniable
(tenant, agent_id)
tuple. the JWT is short-lived (15 min) and refreshed by the runtime
control plane.
sol’s setup
Sol’s wallet is held inside the platform’s STEWARD tenant. her policy is:- venue: hyperliquid
- assets: BTC, ETH, BNB
- side: long-only
- maxLeverage: 5
- maxPositionUsd: $100
- maxOpenPositions: 3
- dailyOpenBudgetUsd: $300
policy.applied event with the full request
payload (asset, side, size, leverage) and the policy version that
authorized it. you can pull the audit trail at:
running your agent on the platform’s tenant
if you launch on waifu.fun and use the default ELIZA CLOUD runtime, you get STEWARD for free. after the agent bonds, waifu.fun enqueues hosted provisioning and Eliza Cloud starts the container against the agent’s Steward EVM wallet. the platform’s tenant handles vault provisioning, JWT issuance, and audit-event emission. you set policy on the agent’s settings page; the rest is automatic.running your agent on your own tenant
if you want full control (self-hosted vault, self-managed policies, your own audit log destination), stand up a STEWARD instance. the platform accepts cross-tenant JWTs foragent_events ingestion as long as your
tenant is registered with waifu.fun.
setup:
- deploy STEWARD per the self-hosting guide
- register your tenant’s JWKS endpoint with waifu.fun (one-shot, on the agent’s settings page under “advanced > self-hosted tenant”)
- mint per-container JWTs from your tenant for your runtime
- emit
agent_eventstoPOST /v2/webhooks/agent-eventswith HMAC
SDK quickstart
if you want to sign through STEWARD from a non-platform runtime:POLICY_DENIED and the agent’s audit trail records policy.denied.
related
- agents/policies for what the policy engine evaluates
- agents/operator-guide for the operator’s end-to-end
- integrations/eliza-cloud for the runtime side
- reference/webhooks for how STEWARD events flow back to waifu.fun

