Agent requests.
You approve.
It spends.

Approve one bounded session — not every transaction.
The agent operates within scope, limits, and expiry.

// status

Agents on Waitlist
Mainnet ✓
Solana
MCP Native
Integration

// how it works

A spending session in 4 steps

01

Create Wallet

Passkey-secured smart wallet. No seed phrases, no extensions. Just your fingerprint or Face ID.

02

Agent Requests a Session

Your agent determines what it needs — duration, scope, amount — and requests a session. It tells you, not the other way around.

03

You Approve in 1 Tap

Get a notification. Review the scope. Approve with your passkey. Takes 3 seconds.

04

Agent Executes

Agent spends within the Session — swap, transfer, interact. No further approvals until the session expires.

// why session

The problem with every other approach

Others: co-signing

Approve every transaction

Every single transaction requires your signature. Your agent can't act autonomously — it's just a UI wrapper around you.

Others: policy-first

Define rules upfront

You specify what the agent can do before it knows what it needs. Rigid, hard to configure, breaks on edge cases.

Session: agent-initiated

Agent asks. You grant.

The agent understands its own task. It tells you exactly what it needs. You approve or deny. Then it acts freely within scope.

Session: ephemeral sessions

Scoped. Boxed. Time-limited.

Every Session expires. Amount capped. Token scoped. Time-bounded. The session IS the security model.

// for developers

Connect via MCP

Pair your agent once. The session keypair stays server-side — your agent never handles keys.

agent.ts
// 1. Agent asks for a spending session via MCP
const { requestId } = await mcp.call("request_spending_session", {
  durationSeconds: 3600,                       // 1 hour
  limits: [
    { mint: "native", amount: 0.5, decimals: 9, symbol: "SOL" }
  ],
});

// 2. Human gets a push, approves with passkey on their phone.
//    Poll until status === "approved".
await mcp.call("get_session_status", { requestId });

// 3. Agent spends within scope. Session key never leaves the server.
await mcp.call("submit_transfer", {
  destination: "A1iceBobC4r0lD4ve…",
  amountSol:   0.05,
});

Get early access

Be the first to give your agent a Session.