Documentation Index
Fetch the complete documentation index at: https://sage-f6b5014e.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
| Tool | Version |
|---|---|
| Node.js | 20+ |
| pnpm | 10+ |
| Nanobot CLI | latest |
- Privy — embedded Solana wallet + auth
- Supabase — patterns, rules, events, and audit storage
- A Solana RPC URL (Helius, Triton, QuickNode, or
https://api.devnet.solana.com) - A Telegram bot token — for review notifications
- Zerion — portfolio data
Install
This is a pnpm workspace. Run from the root:Configure Environment
- Client
- Server
Create
client/.env.local:backend/.env.example for the full template. Apply the Supabase schema once before first run:
SPONSOR_SECRET_KEY is the server’s Solana keypair as a JSON byte array. It fee-pays every transaction and is added to each vault as a member with Execute permission. NEXT_PUBLIC_SPONSOR_PUBKEY on the client must be its public address.Run Locally
Verify It Works
- Visit
http://localhost:3000 - Sign in with Privy → an embedded Solana wallet is created
- A Squads multisig + vault is deployed for you (server-sponsored — no SOL needed)
- Fund the vault address, then go to Send → enter a recipient and amount
- Confirm → the transfer is sponsored, the proposal is registered with
POST /queue, and the risk engine scores it - APPROVE: the server co-signs and executes; the tx signature appears in the UI and Telegram
- REVIEW / BLOCK: check Telegram for the ✅ / ❌ / 🔎 message
Run the Tests
The Squads SDK helpers insrc/ are covered by a Mocha suite:
Troubleshooting
Vault not deploying
Vault not deploying
Confirm
SPONSOR_SECRET_KEY decodes to a valid keypair and the sponsor account holds enough SOL to pay rent. Check SOLANA_RPC_URL is reachable.Proposal stuck without a verdict
Proposal stuck without a verdict
The risk engine needs the Supabase schema applied. Check server logs for
getPatternsForSafe errors and confirm SUPABASE_SERVICE_ROLE_KEY is set.No Telegram notification
No Telegram notification
Verify
TELEGRAM_BOT_TOKEN is set, the bot has been started in your chat, and the vault has a telegram_chat_id (connect it from the app or /start the bot).Balance not showing
Balance not showing
Portfolio data requires a valid
ZERION_API_KEY in backend/.env.Agent commands not responding
Agent commands not responding
Run
nanobot skills check to confirm the Sage skill is detected and AGENT_SECRET matches the value in backend/.env.
