RateSlayer is an onchain gaming agent for Base where the human stays in control.
The core idea is simple:
- a user pastes a verified game contract address
- the agent reads the ABI and surfaces the game functions it can see
- the human decides what actions the agent is allowed to use
- the human sets hard spending and cadence limits
- the agent starts operating within those limits
- every decision and transaction is visible and auditable
This project is built around the idea of agents that pay, but with human-defined boundaries.
Instead of giving an agent an open wallet and hoping it behaves, the operator defines:
- maximum ETH the agent can spend per day
- how many times it can act per day
- how often it is allowed to act
- which onchain game actions it is allowed to use
The result is an agent that can play autonomously, while the human still controls risk.
- Open the dashboard
- Paste a verified Base game contract address
- The agent inspects the ABI and shows the contract functions
- Select the actions you want the agent to use
- Set daily ETH spend and action frequency limits
- Launch the agent
- Watch the live activity feed and transaction history
For the main demo, the reference game is Beat Powell V2 on Base.
The dashboard is designed around operator control, not blind autonomy.
The human can define:
ETH per dayfree actions per daypaid actions per dayminimum minutes between actions
These limits are enforced by the runtime, not just suggested to the model.
Once configured, the agent:
- reads verified ABI data from the explorer
- reasons about the current game state
- decides whether to act or skip
- respects the configured spend and timing limits
- records decisions and onchain activity
The dashboard shows:
- detected game functions
- selected action set
- current game state
- last decision and reason
- recent activity feed
- recent transaction linkouts to BaseScan
agent/runs the autonomous runtimedashboard/is the React terminal-style operator UI- PostgreSQL stores games, decisions, transactions, and daily state
- Express exposes the API used by the dashboard
- Groq is used for contract summarization and runtime decisioning
- policy enforcement is done deterministically in code
rate-slayer-agent/
|- agent/
| |- src/
| | |- api.js
| | |- brain.js
| | |- db.js
| | |- executor.js
| | |- guard.js
| | \- setup.js
| |- index.js
| |- package.json
| \- .env.example
|- dashboard/
| |- public/
| |- src/
| | |- App.jsx
| | |- dashboard-lib.js
| | |- main.jsx
| | \- styles.css
| |- index.html
| |- package.json
| \- vite.config.js
|- package.json
\- README.md
npm installRun the agent:
npm run agentRun the dashboard:
npm run dashboardRun both:
npm run devFrom agent/ you can also run:
npm run once
npm run statusDATABASE_URLAGENT_PRIVATE_KEYSAGENT_NAMESBASE_RPC_URL_READBASE_RPC_URL_WRITEETHERSCAN_API_KEYETHERSCAN_API_URLBASE_CHAIN_IDGROQ_API_KEYGROQ_MAX_DAILY_ETH_SPENDAGENT_POLL_CRONAGENT_API_URL
Useful for demos:
DEMO_AGENT_ADDRESSLimits runtime activity to one visible demo wallet
Root .env remains the default source for both workspace packages.
Paste a game contract.
Let the agent inspect the ABI.
Tell it how much it may spend and how often it may act.
Then let it play onchain, with the human still in control.