Skip to content

AgentMotus/RootAgent

 
 

Repository files navigation

root-agent-sdk

Pay. Verify. Create your agent. Access the onchain economy.

The missing SDK between real humans and the Celo agentic economy.

What it does

root-agent-sdk gives any Celo project 3 core functions to onboard verified humans and create AI agents with economic agency:

  • createUser() — Auto wallet + fiat ramp (WaaP + Transak)
  • verifyUser() — Human verification with Self Agent ID (ZK credentials)
  • createAgent() — ERC-8004 agent wallet with inherited ZK credentials

Plus optional:

  • createEscrow() — Conditional payments with configurable split fees (PsyEscrow)

Install

npm install root-agent-sdk

Quick Start

import { RootAgent } from 'root-agent-sdk'

const root = new RootAgent({
  celoNetwork: 'mainnet',
  transakApiKey: 'your-key',
  selfConfig: { appId: 'your-app', scope: ['humanity'] }
})

// 1. Onboard a real human
const user = await root.createUser({ method: 'email', email: 'user@example.com' })

// 2. Fund their wallet (returns Transak URL)
const fundUrl = await user.fundWallet()

// 3. Verify their identity (ZK, no data exposed)
const verified = await root.verifyUser({
  user,
  method: 'self',
  scope: ['humanity', 'sanctions']
})

// 4. Create their agent with inherited credentials
const agent = await root.createAgent({
  owner: user.wallet,
  name: 'myAgent',
  selfCredentials: verified.zkCredentials,
  permissions: ['transfer', 'escrow']
})

// Agent can now transact on Celo with verifiable human identity
await agent.execute({ to: '0x...', value: '1000000' })

How PsyChat Uses root-agent-sdk

PsyChat is a mental health platform where psychologists offer therapy sessions to patients on Celo. The root-agent-sdk powers the full flow:

  1. Patient onboardingcreateUser() gives each patient a Celo wallet and lets them buy cUSD via Transak
  2. Identity verificationverifyUser() confirms the patient is a real human via Self Protocol (ZK proof of humanity), without exposing personal data
  3. Payment agentcreateAgent() creates an AI agent that manages session payments. The agent inherits the patient's ZK credentials, proving it acts on behalf of a verified human
  4. Session escrowcreateEscrow() deploys a PsyEscrow contract that holds cUSD until the session completes:
    • Patient deposits before the session
    • If they cancel 48h+ in advance → full refund
    • After session completes → 85% to psychologist, 10% to platform, 5% gas reserve
    • No-show after 1h grace → same split (anti-dropout)
    • Emergency timeout at 7 days → auto-release
const escrow = await root.createEscrow({
  agent: agent.wallet,
  splits: {
    provider: { address: psychologist.wallet, share: 8500 },
    platform: { address: '0xPlatform...', share: 1000 },
    gasReserve: { share: 500 }
  },
  cancelWindow: 48 * 3600,
  timeout: 7 * 86400
})

// Patient deposits for a session
await escrow.instance.deposit('session-001', psychologist.wallet, '25.00', scheduledTime)

// After session completes, agent releases payment
await escrow.instance.release('session-001')

API Reference

new RootAgent(config)

Creates a new SDK instance.

interface RootAgentConfig {
  celoNetwork: 'mainnet' | 'alfajores'  // Required
  transakApiKey?: string                  // For fiat on-ramp
  selfConfig?: {                          // For identity verification
    appId: string
    scope: SelfScope[]  // 'age' | 'nationality' | 'sanctions' | 'humanity'
  }
  waapConfig?: {                          // For managed wallets (Human.tech)
    appId: string
    apiKey: string
  }
  gasSponsorship?: boolean                // Enable gas sponsorship
}

root.createUser(options)

Creates a new user with an auto-generated Celo wallet.

const user = await root.createUser({
  method: 'email',        // 'email' | 'social' | 'phone'
  email: 'user@test.com'  // required if method is 'email'
  // socialProvider: 'google' | 'apple' | 'twitter'  — if method is 'social'
  // phone: '+1234567890'                             — if method is 'phone'
})

Returns: RootUser

Field Type Description
wallet string Celo wallet address
method string Auth method used
identifier string Email, phone, or social ID
fundWallet() () => Promise<string> Returns Transak URL for buying cUSD
verified boolean Whether identity is verified
selfId string? Self Agent ID (after verification)

root.verifyUser(options)

Verifies a user's identity using Self Protocol with ZK proofs.

const verification = await root.verifyUser({
  user: user,                                    // RootUser from createUser()
  method: 'self',                                // Verification provider
  scope: ['age', 'nationality', 'sanctions']     // Credentials to verify
})

Returns: UserVerification

Field Type Description
selfId string Self Agent ID
soulboundNFT string? Soulbound NFT reference
zkCredentials ZKCredential[] Array of verified ZK credentials
verified boolean All requested scopes verified

root.createAgent(options)

Creates an ERC-8004 AI agent with its own wallet.

const agent = await root.createAgent({
  owner: user.wallet,
  name: 'myAgent',
  selfCredentials: verification.zkCredentials,  // Optional: inherit human's ZK creds
  permissions: ['transfer', 'escrow']           // 'transfer' | 'escrow' | 'swap' | 'delegate'
})

Returns: RootAgentInstance

Field Type Description
wallet string Agent's Celo wallet
owner string Owner's wallet address
name string Agent name
selfId string? Agent's Self ID
zkCredentials ZKCredential[]? Inherited ZK credentials
permissions AgentPermission[] Allowed operations
execute(tx) Function Execute a transaction
id string? Agentscan registration ID

agent.execute(tx)

const result = await agent.execute({
  to: '0xRecipient...',
  value: '1000000',     // Amount in wei (for cUSD transfers)
  data: '0x...'         // Optional: raw calldata for contract calls
})
// Returns: { hash, status: 'success' | 'failed', blockNumber }

root.createEscrow(config)

Deploys or connects to a PsyEscrow smart contract.

const escrow = await root.createEscrow({
  agent: agent.wallet,
  splits: {
    provider: { address: '0xPsychologist...', share: 8500 },
    platform: { address: '0xPlatform...', share: 1000 },
    gasReserve: { share: 500 }
  },
  cancelWindow: 48 * 3600,   // 48 hours in seconds
  timeout: 7 * 86400         // 7 days in seconds
})

Escrow methods

// Deposit cUSD for a session
await escrow.instance.deposit('session-id', psychologistAddress, '25.00', scheduledTimestamp)

// Release funds after session completes (split fee applied)
await escrow.instance.release('session-id')

// Cancel session (full refund if before cancel window)
await escrow.instance.cancel('session-id')

// Claim no-show (after grace window)
await escrow.instance.claimNoShow('session-id')

// Read session state
const session = await escrow.instance.getSession('session-id')

root.registerAgent(agent)

Registers an agent on agentscan.info.

const agentId = await root.registerAgent(agent)

Architecture

┌─────────────────────────────────────────────────────────┐
│                     Your App / DApp                      │
├─────────────────────────────────────────────────────────┤
│                    root-agent-sdk                        │
│                                                          │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐  ┌─────────┐ │
│  │createUser│  │verifyUser│  │createAgent│  │ escrow  │ │
│  │          │  │          │  │          │  │         │ │
│  │ WaaP /   │  │  Self    │  │ ERC-8004 │  │PsyEscrow│ │
│  │ ethers   │  │ Protocol │  │  wallet  │  │contract │ │
│  │ Transak  │  │ ZK proofs│  │agentscan │  │ splits  │ │
│  └────┬─────┘  └────┬─────┘  └────┬─────┘  └────┬────┘ │
│       │              │              │              │      │
├───────┴──────────────┴──────────────┴──────────────┴─────┤
│                    Celo Network                          │
│              (mainnet / alfajores)                        │
│                                                          │
│  cUSD (ERC-20)  ·  Soulbound NFTs  ·  PsyEscrow.sol    │
└─────────────────────────────────────────────────────────┘

Utility Exports

For advanced usage, the SDK also exports:

import {
  getCeloProvider,   // Get ethers JsonRpcProvider for Celo
  getCUSDBalance,    // Get cUSD balance for any wallet
  sendCUSD,          // Send cUSD ERC-20 transfer
  estimateGas,       // Estimate gas for a transaction
  buildTransakUrl,   // Build Transak on-ramp URL
  SelfAdapter,       // Identity adapter (pluggable)
  PSYESCROW_ABI,     // PsyEscrow contract ABI
} from 'root-agent-sdk'

Networks

Network Chain ID RPC
Mainnet 42220 https://forno.celo.org
Alfajores 44787 https://alfajores-forno.celo-testnet.org

License

MIT

About

Onboard real humans, let bots automize the flow.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 70.0%
  • JavaScript 19.6%
  • Solidity 10.4%