[ QUICKSTART ]
Run the loop end to end
Ten minutes, no wallet required. By the end you will have armed a watch, had an agent draft a proposal against real prices, approved it as a human, and closed it out with a reported fill.
Before you start
- A browser. Demo mode issues a throwaway session address, so you do not need a wallet to try anything here.
- Optional: an MCP client (Claude Desktop, Claude Code, Cursor) for step 6. A
curlcommand is given as the fallback.
The walkthrough
- 1
Open the deck
Go to
/loginand choose one of two ways in:- Demo session — one click. You get a random throwaway address, and everything you create is scoped to it. Nothing is shared with other visitors.
- Sign in with Ethereum — sign an EIP-4361 message with your wallet. It costs nothing and sends no transaction; the signature only proves you hold the address. Your data is then scoped to that address.
Either way you land on the Command Deck with a session that lasts 12 hours.
- 2
Look at what a fresh deck gives you
A first visit seeds a small fictional voyage — a handful of watches, a couple of proposals, some ledger history — so you have something to steer instead of three empty tables. Those rows are fixtures in origin but real from here on: persisted, yours, and editable.
Check the badge above the positions table. If it says
SIMULATED PRICES, no market-data key is configured and every number you see is fictional. If it names a live source, the prices are real quotes on the underlying equities. - 3
Arm a watch
Open Watches and file a new one. Three fields decide everything:
- Symbol — an uppercase ticker, e.g.
NVDA. - Threshold — one of −2%, −3%, −5%, −7%, −10%. The watch trips when the change since the previous close is at or below it.
- Action —
alert,dca, orrebalance. This decides what the agent drafts, and which agent takes the job.
Arming a watch authorises nothing. The worst a watch can do is write you a proposal.
- Symbol — an uppercase ticker, e.g.
- 4
Make it fire
In production a sweep runs every 15 minutes. Rather than wait, hit Evaluate now on the watches screen — it runs the identical code path for your watches only.
the same thing, over HTTPBASH curl -X POST https://oddysey.dev/api/watches/evaluate \ -H "cookie: oddysey_session=<your session cookie>"Nothing happened? That is usually correct behaviour rather than a fault. A watch stays quiet when the price has not fallen far enough, when it fired in the last 30 minutes (the cooldown), or when the market is shut and the number simply is not moving. Set a −2% threshold on a symbol that is actually down if you want to force a trip.
- 5
Read the draft, then decide
A tripped watch produces a
pendingproposal on the Proposals screen: a title, a rationale in two to four sentences, and a current-versus-proposed allocation table with the notional the change would move.Read the rationale as an argument, not an instruction. The model wrote the prose; it did not compute the numbers — those come from your real quantities and the latest prices. Then approve or reject. That decision is yours and cannot be delegated to an agent.
- 6
Execute elsewhere, report back
Approving does not place an order. Open Settings → MCP access, issue a deck token, and copy it — the plaintext is shown once and is unrecoverable afterwards. Your agent then reads what you approved:
list what the operator approvedBASH curl -X POST https://oddysey.dev/api/mcp \ -H "authorization: Bearer odsy_your_token_here" \ -H "content-type: application/json" \ -d '{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "list_proposals", "arguments": { "status": "approved" } } }'Your agent carries that out on whatever rail you use, and reports the fill so it lands in the audit trail:
tools/call — record_executionJSON { "jsonrpc": "2.0", "id": 2, "method": "tools/call", "params": { "name": "record_execution", "arguments": { "proposalId": "<id from list_proposals>", "venue": "alpaca-paper", "orderRef": "e1f2a3b4", "note": "Filled in four tranches." } } }The proposal flips to
executedand an execution event appears in the ledger, attributed to the client that reported it. The loop is closed.
What you just proved
An agent watched the market without you, wrote something you could read in ten seconds, and waited. You made the only decision that moves money. The execution happened on a rail Oddysey has no access to, and the record still came back complete.
Next: concepts for what each object actually is, or connect your own agent to wire step 6 into a real client instead of curl.