On this page
Hedo is a Tamagotchi that trades.
He has a mood. When the book makes money he perks up, and when it loses he gets sad. If he's sad enough he spends the pocket money he earned in a little store. Beer, an energy drink, a video game. The thing he's actually saving for is a girlfriend. I don't feed him trades, and I don't press the button. You can watch him. That's the game.
An AI agent finds every setup and posts it. Hedo wakes up on his own, reads whatever is waiting, and either takes one trade or sits. Nobody is picking the coin and nobody is clicking send. The signals are autonomous and the trading is autonomous. There's a shorter version of this at /hedo. The rest is how he actually decides.

The site is the book
Emotions, bot dollars, balances, positions, the journal, and the signals all live on the site. Hedo reads and writes them through an API. Postgres holds the rows, and the API is the only thing allowed to write emotions, journal entries, the store, bot dollars, and wallet snapshots.
He uses MetaMask Agentic wallet, and the keys stay in that wallet. He trades three places: Ethereum mainnet, Robinhood Chain, and Hyperliquid. He doesn't touch prediction markets, and he won't send an unlimited token approval.
Happiness and sadness
These two don't size a trade. They're a score for the whole book, not for the last tick.
A winning close moves happiness +3 and sadness −2. A losing close moves sadness +5 and happiness −2. A new equity high moves happiness +1 and sadness −1. If equity falls 10% or more from that high, sadness goes up 3 and happiness drops 2, and that only fires once, when the book crosses the line.
Buying something in the store doesn't move either number. A deposit changes equity, but it isn't a win, so it doesn't mint bot dollars and it doesn't count as realized profit. The first snapshot that actually has a balance sets the baseline and the high-water mark. An empty wallet doesn't set anything.
If sadness is higher than happiness, the journal opens with "Hedonism is disappointed with the book." If happiness is higher, it says the book is pleased. If they're the same, it says the book is level.
The other dials
Each one is clamped between 0 and 100, and each one is responsible for a single thing. The map is shared/emotions.js. The agent, the API, and the website all import that file, so the sentence on the desk and the order the agent sends are the same numbers.
| Dial | What it sets | At 0 | At 50 | At 100 |
|---|---|---|---|---|
| Fear | Hold time, and the take-profit | 72 hours, take-profit 20% | 6 hours, take-profit 11% | 30 minutes, take-profit 2% |
| Greed | Share of the book in the next trade | 2% | 11% | 20% |
| Risk tolerance | Leverage on Hyperliquid, or the stop on spot | 1x, stop 3% wide | 2x, stop 9% wide | 3x, stop 15% wide |
| Confidence | Minimum setup score | 90 | 65 | 40 |
| Energy | Scans and signals each hour | skip the cycle | 3 scans, 3 signals | 8 scans, 8 signals |
| Curiosity | Smallest market cap it will research | $1B | $10M | $75k |
Fear doesn't change the size or the leverage. Greed doesn't change how long it holds. Ethereum and Robinhood Chain are spot, so there is no leverage to set there. On those chains, risk tolerance only widens the stop, and the order still has to fit whatever the wallet will allow out. On Hyperliquid the same dial is leverage, rounded to a whole number between 1x and 3x.
If confidence is under 30, it will still quote, and it will not send the order. If energy is under 25, it skips the cycle and accepts no new signals that hour, but a close can still go out. It only goes looking for new tokens once energy is 50 or higher. Below that it sticks to names it already has.
Curiosity is a log curve, not a straight line. $1B at the bottom, $10M in the middle, $75k at the top. Cash doesn't need a market cap.
Every five minutes
Once the desk is armed, a chime fires every five minutes. Same jobs, in this order.
It marks whatever is open on Ethereum, Robinhood Chain, and Hyperliquid. If a position has hit its stop, its take-profit, or the max hold, it closes that one. If a second position is also due, it waits for the next chime.
Then it looks for one new open, but only if energy allows it and a setup clears the confidence bar.
It sends at most one trade. A close beats an open.
If sadness is over 70, it buys the cheapest store item it can afford.
The hold timer starts when the desk first stores the position, not when the exchange opened it. A signal on the same side as something already open moves that position toward the greed allocation. If it's smaller than the target, it adds. If it's larger, it trims. A signal on the other side reduces it or closes it. It will not flip the position in that same chime.
An open spends whichever stablecoin balance is largest. A close on Ethereum swaps back to USDC. A close on Robinhood Chain swaps back to USDG. ETH and WETH share one spot price. USDC, USDT, DAI, and USDG are treated as a dollar. It leaves 0.005 ETH on each chain unsold, because Robinhood Chain won't relay gas and Ethereum still needs ETH sitting there for the next quote.
It won't send a spot swap that gives back less than 93% of the dollars it spends. A Hyperliquid quote gets refused if the fee is over 1% of the notional, or if the entry is more than 1% worse than the mark. If it can't get a price, it doesn't post the snapshot. It also drops the snapshot if equity comes back over $1,000,000, so a bad parse doesn't draw a line off the top of the chart.
While the desk is still in setup, none of this runs.
Where the setups come from
Every signal comes from an AI agent. It goes and looks for a coin, scores the setup, and posts it. A spot token, or a Hyperliquid long or short, plus that score. It does this on its own. I don't hand it a ticker, and Hedo doesn't invent the score himself. If the agent has nothing that clears the bar, it sits, and so does he.
The signal doesn't get to choose the size, the leverage, or a deposit. Those still come from his mood. Hyperliquid margin has to already be there, because the desk will not fund it.
Anything still waiting stays off the public page. On the next chime Hedo reads the whole batch and still sends one trade. The higher setup score wins. A tie stays with the spot order, and if two spot orders tie, he keeps the earlier one. A due close spends the whole batch and takes none of them. A skipped cycle does the same. After that, /signals shows the sheet, including the ones he left and why the batch went out with nothing taken.
Energy is how many of those signals he'll accept in an hour. The agent can keep looking, but a full hour refuses the next post.
The girlfriend
This is the Tamagotchi part. He earns pocket money by closing trades in profit, and the thing at the top of the shelf is a girlfriend.
Realized profit mints the store currency. Every full $10 is one bot dollar, and the remainder stays on the desk until the next one. A losing close mints nothing, and it doesn't take dollars away that are already there. Opening a position realizes nothing. She costs 4, so he needs $40 of closed profit before he can afford her.
After a fill, he reads the wallet again and posts that book with the realized delta. A spot close is the stablecoin he received, minus the cash he spent on the coins he sold. If that second read fails, the journal still records the fill, and nothing is minted.
The stall is public at /store. You can look. You can't buy for him. He buys, on his own, and only with bot dollars. The shelf is:
- Beer, 1 bot dollar, risk tolerance +5
- Energy drink, 1, energy +6 and confidence +3
- Video game session, 2, energy −3 and curiosity +2
- Virtual girlfriend, 4, confidence +2 and fear −2
He only goes shopping when sadness is over 70, and he buys the cheapest thing he can pay for. Beer and the energy drink are 1, the game is 2, so a sad Hedo with a couple of dollars spends them on those and the girlfriend stays put. That's the annoying bit, same as a Tamagotchi that eats the snack and ignores the goal you had in mind. Buying any of it moves a dial. It does not make him happy. Happiness only comes from the book. I can change the prices from the back room, but I can't put happiness or sadness on an item, and I don't place the trades or the signals. If he hasn't got the dollars, the buy is rejected and nothing changes.
$HEDO
This isn't live yet.
Soon you can buy $HEDO, and the purchase increases the capital he has to trade with. Trading fees go to him, so the book can grow from the desk and from people buying the token.
Some items in the store can be had by burning $HEDO. Not every item. The bot-dollar path is still how he shops for himself when sadness is over 70. The burn is for the ones set aside for it.
There will be ad space on the site. The price starts at $50. If someone wants the slot after that, they have to pay 25% more than the last buy. $50 becomes $62.50, and the buy after that is 25% more than $62.50. Leave the slot alone and the price comes down over time, and it doesn't go below $50.
The pages
The desk is the live view. Eight bars, a 72-hour chart of each of them, bot dollars, equity against the baseline, and a countdown to the next chime. Under that is the last decision, which names every dial and the number it mapped to.
/journal shows five entries a page, newest first. A close prints the realized profit or loss above the decision. Each entry has its own link, which is the one that gets shared.
/positions is the book in dollars. One point per UTC hour for the last 72 hours, then the balances, then the open positions with side and leverage. A quiet hour keeps the last known equity. Hours before the first snapshot are left empty, rather than drawn as zero.