Welcome to Limitless Trader Lab
Day 4 of 7 · Cohort intensive · 90 minutes
Filter + first order.
Combine yesterday’s panel with the first real order placement. Filter markets to a personal watchlist (mostly your own taste in markets), pick one from the list, place a $1–$2 order via API with EIP-712 signing, then cancel it. Watch the order event land in the panel on your phone. Visceral coupling.
Today you’ll learn
You’ll learn how to filter the firehose of Limitless markets to a personal watchlist, then sign + place + cancel + confirm a real $1–$2 limit order on a market from that list, with the order event landing in the Day 3 panel on your phone. This is the click-to-code crossover combined with the panel-on-phone moment: the rest of the cohort builds on the filter you wrote and the order flow you proved.
Section 01
Why filter + order.
Two halves of one day. The first 30 minutes: filter the firehose to a personal watchlist that reflects what you actually care about. The next 60 minutes: place + cancel + confirm a real $1–$2 order on a market from that watchlist, signed, submitted, acknowledged via API. The order event lands in the panel you built yesterday, on your phone, in seconds. That’s the visceral coupling the panel-first arc was built around.
Filter (30 min)
One Claude prompt, one focus statement, one saved watchlist.py. The same script you’ll run every morning long after the cohort ends.
First order (60 min)
EIP-712 signed, $1–$2 limit, far from the book. Place + cancel + confirm. Watch the panel update on your phone before you finish the cancel script.
Section 02
Pick your category.
Before you write a line of code, write your focus statement. One or two sentences describing what you actually care about trading. Be specific, “crypto” is too broad to filter on, “BTC threshold markets resolving in the next 24 hours” is filterable. The clearer the statement, the cleaner the filter.
You are now: writing your focus statement
Open a notes file. Write 1–2 sentences describing what you want to trade.
Examples:
• EPL matches with high implied goal totals
• BTC threshold markets resolving in the next 24 hours
• US politics resolving in the next 30 days
• Any market over $20K daily volume
You are now: asking Claude for the filter script
Modify Day 1’s first_call script. Reuse beats rewrite.
If the filter narrows the universe to fewer than 5 markets, that’s fine. If it’s zero, your criteria are too tight; loosen one and rerun.
You are now: running it + picking one market
Save the script. Run it. Read the output. Pick one specific slug from the list to place your order on in section 05.
Section 03
Safety rails.
Today’s order isn’t about making money, it’s about confirming the wire is alive. Three rules keep the lesson cheap: tiny size, limit only, market you understand. Skip any of them and you’re trading on Day 4 instead of practicing on Day 4.
Pre-trade safety check
$1–$2 max. Today is for proving the call works. The amount is small enough to lose entirely without it mattering.
Limit order, never market. Limits give you a price you control and won’t fill against a thin book.
A market from your watchlist. You already understand it; if the order fills (it shouldn’t at the price we’ll use), you know what to do.
Far from the book. Place the limit at $0.05 below the current bid. The point is to leave the order resting so the cancel call has something to cancel.
Section 04
Install the Trading skill.
The bonus pack ships bonus/skills/trading/, the skill that gives Claude the four trading tools (browse_markets, get_position, place_order, cancel_order) plus a hand-tested _auth_headers HMAC helper and an internal validate_order() safety rail that place_order calls before signing. Install it once today; you’ll use it every day from here. The install location depends on which Claude surface you’re using, the bonus pack’s README.md has the canonical instructions; the cheatsheet below is enough for most cohort members.
You are now: locating the skill folder
In the unzipped bonus pack, find bonus/skills/trading/. It contains a SKILL.md file plus a scripts/ folder. Keep the whole directory together; the SKILL.md references files in scripts/ by relative path.
You are now: installing for your Claude surface
Pick the row that matches the Claude you’re using (the one you locked in on Day 1). If you’re unsure which surface you have, ask Claude: “Which Claude surface am I talking to right now (web, Desktop, or Code)?”
If your install path doesn’t look like any of the rows above, the bonus pack README.md documents edge cases (custom CLAUDE_HOME, MCP-only setups, team workspaces). Don’t paste the skill contents into a chat as a workaround, the skill’s scripts need to live on disk so Claude can execute them.
You are now: confirming the skill loaded
Restart your Claude session (close + reopen the app, or refresh the web tab, or start a new conversation in Code). Then ask:
You should see four tools listed: browse_markets, get_position, place_order, cancel_order. Claude should also confirm it can read _common.py (which holds _auth_headers and the internal validate_order() safety rail). If Claude doesn’t see the skill, the install path is wrong, re-check the row for your surface above. Don’t skip this step; sections 05 and 06 assume the skill is live.
Section 05
Place the order.
EIP-712 signing is the only mechanically new part of today, and it’s in one Claude prompt. The script Claude writes is short: read env vars (LIMITLESS_API_KEY, LIMITLESS_API_SECRET, PRIVATE_KEY, OWNER_ID), fetch market metadata, build the order body, sign with eth-account, POST /orders with HMAC-signed headers (per docs.limitless.exchange/developers/authentication), print the order ID.
You are now: confirming your secrets are wired
Four env vars. LIMITLESS_API_KEY + LIMITLESS_API_SECRET from Day 1 (the token id and the base64 HMAC secret, both required for signed requests). PRIVATE_KEY = the 0x… key for your Limitless wallet. OWNER_ID = your numeric profile ID (in any auth response).
Read bonus/SECRETS.md if you haven’t. The private key is far more dangerous than the API key/secret, leaking it = wallet drained, no recovery. The bonus pack’s SECRETS.md covers rotation, leak response, and pre-commit hooks.
You are now: asking Claude for place_order
Pick one slug from your watchlist. Decide YES or NO. Paste the prompt with the bracketed parts filled in.
You are now: saving + running the script
Save Claude’s code as place_order.py in limitless-lab/. Run it.
Copy the order ID now, you need it for the cancel in section 06.
You are now: glancing at your panel on your phone
Pull out your phone. Open the panel from yesterday. The new order event should appear in the recent-fills feed within 3 seconds (the panel polls every 3s).
If the order event doesn’t appear, your place_order.py isn’t writing to /app/data/fills.ndjson. Have Claude add the railway run "echo >>" step or a direct write via the panel’s admin endpoint.
Section 06
Cancel + confirm.
The cancel is as important as the place. Every order you place from here on, you should know how to unplace. Cancel doesn’t need EIP-712 signing, just the API key and the order ID.
You are now: asking Claude for the cancel script
You are now: running cancel + my_orders
Independent confirmation. The cancel ack from cancel_order.py is one source of truth; my_orders.py hitting the API directly is another. Trust both.
Section 07
Today’s deliverable.
Two pieces of evidence in one screenshot: the panel showing the fill, and the terminal showing what placed it. Click-to-code crossover plus panel-on-phone, in one frame.
Day 4 · Deliverable
Post in #trader-lab.
Phone screenshot of your panel showing the filled order in the recent-fills feed.
Terminal output that placed it (place_order.py printout with order ID).
Post both in #trader-lab with a [D4] tag at the start of the caption.
Caption: “[D4] Day 4 done. Filter: [your statement]. First order: [slug] at $[price]. Place + cancel + confirm green. Fill landed in panel in [N] seconds. Snags: [none / brief].”
If you got stuck on EIP-712 signing or the panel didn’t pick up the fill, post that too, lead with [help].
Day 4 complete
Order in the panel.
A real $1–$2 order placed and canceled via API on a market from your watchlist, with the fill landing in the panel you built yesterday, on your phone, in seconds. The panel-first arc just paid off.
A saved watchlist.py + place_order.py + cancel_order.py + my_orders.py trio that filters, signs EIP-712, submits to /orders, and cancels by ID.
One real order ID on Limitless that went through the full place → rest → cancel lifecycle, and a fills.ndjson line on the deployed volume that the panel renders.
A two-up screenshot in #trader-lab with a [D4] tag, phone panel + terminal output, that proves your PRIVATE_KEY + LIMITLESS_API_KEY + LIMITLESS_API_SECRET + OWNER_ID setup is ready for tomorrow’s skill install.
Tomorrow: Add the Monitor + Strategy skills from the bonus pack. Your first complete agent loop runs in dry-run, with every decision surfacing in the panel within five seconds.
Day 5 unlocks tomorrow at 9am local