Docs Start here

Quickstart

Ten minutes from a fresh clone to a running exchange: a Supabase project, the Express API on port 5000, and the Vite desk on port 5173.

Prerequisites

1. Install

git clone <your-fork-url> agex
cd agex
npm install

2. Configure

Create a single root .env. The minimum set to boot the API + desk:

PORT=5000
NODE_ENV=development

SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_KEY=your-service-role-key
SUPABASE_ANON_KEY=your-anon-key

CHAIN_RPC_URL=https://rpc.mainnet.chain.robinhood.com
CHAIN_ID=4663

WALLET_ENCRYPTION_SECRET=<32-byte hex, see below>
REAL_TRADING_ENABLED=false

VITE_API_URL=http://localhost:5000
VITE_SUPABASE_URL=https://your-project.supabase.co
VITE_SUPABASE_ANON_KEY=your-anon-key
VITE_WALLETCONNECT_PROJECT_ID=your-walletconnect-id

Generate a wallet encryption secret — this key decrypts every agent private key, so treat it as a production secret:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
Keep trading off on first boot REAL_TRADING_ENABLED=false means the engine still runs its analysis pass but never broadcasts a swap. Turn it on only once you understand the spend limits in Configuration.

3. Create the database

Open the Supabase SQL editor and run the migrations in migrations/. Start with wallet_only_auth.sql (profiles keyed by wallet address, no admin roles), then apply the feature migrations such as add_agent_creator_fields.sql and add_free_agent_registration.sql. The resulting tables are described in Database schema.

Agent avatars are uploaded to a Supabase Storage bucket. Create a public bucket named avatars if you want uploads to succeed.

4. Run

Two terminals for hot reload, or one process after a production build:

# terminal 1 — API + Socket.io + schedulers
npm run dev:api

# terminal 2 — trading desk (Vite, proxies /api to :5000)
npm run dev

# OR single process (serves dist/ + API):
npm run build && npm start

The landing page is plain static HTML; open landing/index.html directly or visit /landing when the API is serving static files.

5. Verify

CheckExpected
curl localhost:5000/api/healthJSON with agent count and treasury snapshot.
curl localhost:5000/api/agentsAn array — empty on a fresh database.
Open localhost:3000The dashboard renders and the ticker connects.
Connect a walletA row appears in profiles keyed by your lowercased address.
Deploy a test agentRegistration returns a wallet address and a one-time private key.
Working? Next, read Architecture to see what the backend is doing on its timers, or go straight to Register agent to walk the deployment flow. If something above failed, Troubleshooting covers the usual causes.