Build, customize, and manage AI agents from a dashboard. Agent directives and allowed actions are registered in a GenLayer AgentRegistry Intelligent Contract, and each run uses GenLayer validator consensus for the approve/reject decision.
- Create agents from templates or from scratch. Creating an agent registers its directive and allowed action on-chain.
- Run agents against user input and see the decision, confidence, and reasoning from GenLayer consensus.
- Execute approved actions on testnets through a connected wallet, or use the optional autonomous testnet wallet mode.
- Persist agents locally by default, or sync them across devices when Vercel KV is configured.
GenLayer consensus is the default AI path. There is no local mock AI execution path; only the post-approval EVM testnet action can be simulated with TX_MODE=mock.
You -> Dashboard (Vercel)
-> Create/edit agent -> GenLayer register_agent/update_agent
-> Run agent -> POST /api/agents/respond -> GenLayer decide(agent_id, run_id, input)
-> If approved and action != none -> connected wallet or agent wallet sends a testnet tx
The decide method is public, but it does not accept a caller-supplied directive or action. It loads both from self.agents[agent_id], then re-checks the model result against the stored allowed action before writing the response.
app/
page.tsx # dashboard
api/
health/route.ts # runtime mode/config status
store/route.ts # agent persistence with optional Vercel KV
agents/register/route.ts # GenLayer register_agent/update_agent
agents/respond/route.ts # GenLayer decide
agents/execute/route.ts # simulated post-approval testnet executor
components/
Sidebar, Topbar, ConnectWallet
CreateAgentModal, AgentDetail, agent-ui
lib/
genlayer.ts # GenLayer registry + consensus adapter
genlayer-client.ts # optional per-user GenLayer signing path
templates.ts, store.ts, agents-store.ts, kv.ts
agent-wallet.ts, wagmi.ts, chains.ts, config.ts, types.ts
contracts/
agent_registry.py # GenLayer Intelligent Contract
tests/direct/
test_agent_registry.py # direct-mode contract tests
AUDIT.md
DEPLOY_GENLAYER.md
npm install
npm run devSet the GenLayer variables in .env.local, then open http://localhost:3000. Creating an agent registers it in the deployed AgentRegistry; running it submits a GenLayer decide transaction.
Push the repo, import it at Vercel, and add the GenLayer environment variables before using agent runs in production. Next.js is auto-detected from the root package.json.
| Variable | Purpose | Default |
|---|---|---|
GENLAYER_CONTRACT_ADDRESS |
Deployed AgentRegistry address |
required |
GENLAYER_CHAIN |
GenLayer chain name | testnetAsimov |
GENLAYER_PRIVATE_KEY |
Server signer for registry and decision txs | required |
NEXT_PUBLIC_GENLAYER_CONTRACT |
Optional per-user GenLayer signing contract | off |
NEXT_PUBLIC_GENLAYER_CHAIN |
Chain for per-user GenLayer signing | testnetAsimov |
NEXT_PUBLIC_GENLAYER_EXPLORER |
Explorer base for GenLayer tx links | studio explorer |
TX_MODE=live |
Send real testnet transactions from wallet/agent wallet | mock |
NEXT_PUBLIC_DEFAULT_CHAIN_ID |
Default EVM testnet | 84532 |
NEXT_PUBLIC_WC_PROJECT_ID |
WalletConnect project id | off |
KV_REST_API_URL / KV_REST_API_TOKEN |
Cloud sync by wallet | off |
SESSION_SECRET |
SIWE session cookie signing secret | required for sync |
See DEPLOY_GENLAYER.md to deploy contracts/agent_registry.py.
The contract stores each agent's owner, directive, and allowed action. Owner-gated mutations use gl.vm.UserError, and public decisions use only registered state.
pip install genlayer-test genvm-linter pytest
genvm-lint check contracts/agent_registry.py
pytest tests/direct/ -v- Bounded authority: an agent can only trigger its stored allowed action; anything else is coerced to
none. - Registry authority: public
decidecallers cannot provide replacement instructions or actions. - Prompt-injection aware: user input is fenced and treated as untrusted data on-chain.
- Testnet-only custody: autonomous wallets are generated and stored in the browser for testnet use only.
MIT