SERV Hackathon · Robinhood Mainnet & MCP
The model proposes.
Code decides.
Ledgerly is a treasury agent on Robinhood Chain. One set of rules — spend caps, an allowlist, a human approval line — governs every way it moves money: buying, rebalancing, paying a freelancer, paying a bill. The model explains the decision. It never makes it.
-
1
AllowedAllowed
Inside the per-transaction cap, the daily cap and the approval line. It is sent to Robinhood Chain and the ledger keeps the transaction hash.
-
2
HeldHeld
Above the approval line. It waits for you, and it is checked against the caps again when you approve.
-
3
DeniedDenied
Over a cap, or paid to an address that was never registered as a payee. Nothing is sent.
What it does
Four jobs, one guarded path
Four different reasons to move money. Every one of them is just a request that has to clear the same gate below: the same caps, the same allowlist, the same approval line.
-
01
Dollar-cost averaging
Recurring buys of Robinhood stock tokens. SERV Reasoning reads the day's price range and decides whether to buy, skip, or scale the amount between half and one and a half times.
-
02
Rebalancing
Set target weights. Ledgerly sells what has grown too large and buys what has fallen behind, once an asset drifts past your threshold. The sizing is arithmetic, not a model's guess.
-
03
Payroll
Pay freelancers per milestone in USDG, only to addresses you registered first.
-
04
Bills
Pay recurring invoices the same way. Nothing goes out to a payee that is not on your list.
Terminal isn't a fifth job. It only reads — quotes, whether a pool exists, SERV's summary — so it never touches the gate below. Nothing there can move money.
How it decides
The model never touches the money
SERV Reasoning helps size and explain. The gate in the middle is ordinary code with fixed rules, so a confused or manipulated model still cannot overspend.
Sizes DCA buys and writes the plain-English reason for each action. It advises; it does not approve.
-
1 · Request
A job asks to act
DCA, rebalance, payroll or a bill proposes a buy, a sell or a payment.
-
2 · Guardrails
Plain code decides
Spend caps, the payee allowlist and the approval threshold. The result is allow, hold for you, or deny.
-
3 · Execute
Onchain
Uniswap v3 swaps and USDG payments on Robinhood Chain mainnet, real funds only.
-
4 · Ledger
Written down
Every decision is kept with its reasoning, whether it ran, was held, or was refused.
Rules
What the model cannot argue with
Defaults shown here are set in one file and can be tightened for a first live run.
- Per-transaction cap
- $50
- Daily cap
- $200
- Human approval above
- $25
- Approvals expire after
- 24 h
- Payees
- Allowlist only
- Network
- Robinhood Chain mainnet
Trading only switches on with two separate settings (mainnet and an explicit yes), so a typo cannot start spending. When either is missing Ledgerly refuses to trade instead of pretending. Approved actions are checked against the caps again at the moment of approval.
Held actions can be approved two ways: the agent's own wallet sends them within your limits, or you connect a browser wallet and sign them yourself. The server checks that what your wallet sent matches what was prepared before it records anything.
Built on SERV Reasoning
Where it does real work
Multipath
Keeps the model's reply in the strict format the DCA logic parses, so a sizing decision is never a paragraph of prose.
Prompt Guard
Payee names and memos are typed by people and end up in prompts. Prompt Guard screens them first.
Shadow Agent
Validates each DCA decision and regenerates weak replies. If reasoning is unavailable, a run falls back to a plain scheduled buy, still behind the guardrails.
Live
Running on Robinhood Chain mainnet
Onchain
- Swaps go through Uniswap v3 on Robinhood Chain (chain 4663), quoted onchain before every trade
- Payments and cash are USDG, and tokenized stocks are bought and held in your own wallet
- Every transaction links to the block explorer from the ledger
- Connected wallets sign for themselves, and the server checks that what was sent matches what was prepared before it records anything
Reasoning
- SERV Reasoning with Multipath, Prompt Guard and Shadow Agent decides each DCA run and explains every action
- Plain code enforces spend caps, the payee allowlist and human approval, so the model can never move money on its own
- Robinhood MCP is read-only
Run it
Run your own
Host your own copy on Robinhood Chain mainnet. Start with a small amount.
git clone https://github.com/firmino0/Ledgerly
cd Ledgerly
npm install
cp .env.example .env # add your SERV_API_KEY, then LIVE_MAINNET=yes
npm run dashboard # then open http://localhost:3000/app