Ledgerly

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.

Every action ends one of three waysReal money
  1. 1
    Allowed

    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.

    Allowed
  2. 2
    Held

    Above the approval line. It waits for you, and it is checked against the caps again when you approve.

    Held
  3. 3
    Denied

    Over a cap, or paid to an address that was never registered as a payee. Nothing is sent.

    Denied

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.

  1. 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.

  2. 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.

  3. 03

    Payroll

    Pay freelancers per milestone in USDG, only to addresses you registered first.

  4. 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.

SERV Reasoning

Sizes DCA buys and writes the plain-English reason for each action. It advises; it does not approve.

  1. 1 · Request

    A job asks to act

    DCA, rebalance, payroll or a bill proposes a buy, a sell or a payment.

  2. 2 · Guardrails

    Plain code decides

    Spend caps, the payee allowlist and the approval threshold. The result is allow, hold for you, or deny.

  3. 3 · Execute

    Onchain

    Uniswap v3 swaps and USDG payments on Robinhood Chain mainnet, real funds only.

  4. 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