// unified balance · gasless · no seed phrases · MIT License

The production
wallet for
AI agents.

No seed phrases. No required API keys.
Session keys with spending limits, multi-solver routing, and cross-chain swaps — built for AI agents and iOS apps, in three independently installable npm packages.

// install npm install @prism-ing/wallet
terminal
$ prism wallet create --name agent-1
  Wallet ready
   EVM:     0x71C7656EC7ab88b098defB751B7401B5f6d8976F
   Solana:  DRpbCBMxVnDK7maPM5tGv6MvB3v1sRMC86PZ8okm21hy
   Keys:    ~/.ows/ (AES-256-GCM, never leaves disk)

$ prism swap --from USDC:base --to USDC:arbitrum \
    --amount 5000000
  Cross-chain completed
   No ETH needed — fees settled from token balance.

$ prism balance
  Total: $2,847.12 across all chains
   USDC  Base        $1,200.00
   USDC  Arbitrum    $847.12
   WETH  Base        $800.00
   No stranded funds. No dust. One balance.
One wallet for all your chains

Funds stranded on the wrong chain. Transactions failing mid-run because there’s no gas on that chain. No way to see what the agent actually holds without querying a dozen RPCs.

=

Unified balance, no stranded funds

As your agent transacts across chains, OneBalance tracks its full position in one place. Check the agent’s total USD balance with a single call — no matter how many chains it has touched. No dust, no gaps, no surprises.

~~

Best-in-class swap quotes

A market-leading meta-DEX aggregator races multiple solvers on every quote across EVM, Solana, and cross-chain — best price wins automatically. Your wallet has instant access to the deepest liquidity in DeFi with no per-chain integration work.

//

Keys never leave the device

OWS encrypted vault on Node.js (~/.ows/), Secure Enclave on iOS. The private key is never serialized, never passed to an external service, never visible to application code. Hardware-backed on both platforms.

->

Spending policies that can’t be bypassed

Session keys enforce caps on every signing operation: per-op limit, total budget, allowed assets, time-boxed expiry, allowed recipients. ZeroDev reverts the transaction on-chain if any policy is violated — not in JavaScript.

<>

Social recovery

Lost a device? Recover via passkey (iCloud Keychain), a trusted contact, or a second device. The smart contract rotates the authorized signer without touching the funds. No seed phrase to find. No funds lost.

+

iOS & React Native ready

Secure Enclave backend for iOS — biometric-gated signing, non-exportable keys. The same PrismSigner interface runs on Node.js agents and mobile apps. One SDK, two runtimes, identical security model.

Command-line tool

Prism CLI

A fully-featured CLI for wallets, swaps, and cross-chain operations. Works with the same wallet stack and swap infrastructure as the SDK — test quotes from the terminal, script payments in bash, or inspect chain-abstracted balances interactively.

wallet create Create or load a named OWS wallet
swap Quote and execute any swap — EVM, Solana, or cross-chain
balance Show unified balance across all chains
status Poll a cross-chain swap to completion
doctor Check aggregator connectivity and wallet health
// install npm install -g @prism-ing/cli
cross-chain swap
$ prism swap \
    --from   USDC:base \
    --to     USDC:arbitrum \
    --amount 5000000

  Quote received:
   Route type:  cross-chain
   Amount in:   5000000
   Net out:     4982441

  Executing swap…
  Cross-chain submitted. Waiting…
  [5s] PENDING
  [10s] PENDING
  [22s] COMPLETED
  Cross-chain swap completed!
   Tx: 0x4d2a9f8b3c1e…
Packages
@prism-ing/wallet
Self-custodial wallet SDK. OWS encrypted keys on Node.js, Secure Enclave on iOS. Session keys with on-chain policy enforcement via ZeroDev.
  • OWS + Secure Enclave + Node software signers
  • Session keys — 6-dimension policies, agent-safe
  • Social recovery — EVM (ZeroDev) and Solana (Squads)
npm install @prism-ing/wallet
Read docs →
@prism-ing/onebalance
ERC-4337 account abstraction. Unified balance across 10+ chains — spend tokens from any chain, gaslessly. 6-point client-side quote verification before any signing.
  • Unified balance view across all chains
  • Gasless transactions — fees paid from any token
  • Blind-signing attack prevention
npm install @prism-ing/onebalance
Read docs →
@prism-ing/swap-router
HTTP client for Prism's swap infrastructure. Typed Result API, Zod-validated responses. Best-in-class quotes across EVM, Solana, and cross-chain — best price wins, every time.
  • Best-in-class quotes — EVM, Solana, cross-chain
  • ERC-20 approval flow built-in
  • Pin route with provider for testing
npm install @prism-ing/swap-router
Read docs →
Full-stack bootstrap
wallet + onebalance + swap-router
import { createProductionWallet } from '@prism-ing/wallet';
import { createOneBalanceProvider } from '@prism-ing/onebalance';
import { createSwapRouter } from '@prism-ing/swap-router';

// 1. Account abstraction — adds smart account + cross-chain balance
const provider = createOneBalanceProvider({ apiKey: process.env.ONEBALANCE_API_KEY });

// 2. Wallet — OWS persistent keys on Node.js, Secure Enclave on iOS
const walletResult = await createProductionWallet(
  { signer: { walletName: 'my-agent' } },
  { accountAbstraction: provider },
);
if (!walletResult.ok) throw new Error(walletResult.error.code);
const wallet = walletResult.value;

// 3. Swap router
const router = createSwapRouter({
  baseUrl: 'https://aggregator.prism.ing/v1',
  signer: wallet.signer,
  evmRpcUrls: { 8453: process.env.BASE_RPC_URL },
});

// 4. Quote a cross-chain swap
const quote = await router.quote({
  fromAsset: 'USDC:base',
  toAsset:   'USDT:arbitrum',
  amount:    '1000000',
  sender:    wallet.evmAddress,
  accounts:  [{ type: 'kernel-v3.1-ecdsa', accountAddress: wallet.smartAccountAddress, signerAddress: wallet.evmAddress }],
});

// 5. Execute
if (quote.ok) {
  const exec = await router.execute(quote.value);
  console.log(exec.ok ? exec.value.status : exec.error.code);
}

Used in an AI agent? Pass wallet.signer directly to any framework's signing hook — structurally compatible with anything that accepts signMessage / signTypedData.