What you need
- One language runtime: Node.js 18+ or Python 3.10+. Every code widget in the academy has a tab for both.
- A terminal you’re comfortable running commands in.
- Git for cloning the agents-starter repo in Module 09.
- An external wallet (MetaMask, Rabby, Coinbase Wallet, or similar). Limitless authenticates individual traders with an external wallet plus HMAC-signed API key, no email-only flow. Connect it at limitless.exchange; full handshake at docs.limitless.exchange/developers/authentication.
- A small USDC + ETH balance on Base in that wallet. USDC funds your agent’s trades; ETH covers gas. A few dollars of each is plenty for the academy.
- An LLM provider key from Anthropic (preferred) or OpenAI, every agent module makes tool-calling requests.
- A code editor, VS Code, Cursor, Neovim, whatever you already use.
Section 01
Install your language runtime.
Pick one language. TypeScript uses Node.js; Python uses CPython 3.10+. Agents Academy does not have a Go tab because the agent ecosystem, Claude tool use, OpenAI function calling, LangChain, agent frameworks, is overwhelmingly TS and Python.
# ───────────────────────────────────────────
# macOS (Homebrew)
# ───────────────────────────────────────────
brew install node
# ───────────────────────────────────────────
# Ubuntu / Debian
# ───────────────────────────────────────────
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# ───────────────────────────────────────────
# Windows (winget, PowerShell or cmd)
# ───────────────────────────────────────────
winget install OpenJS.NodeJS.LTS
# ───────────────────────────────────────────
# Verify: same on every OS
# ───────────────────────────────────────────
node --version # v20.x or newer
npm --version # 10.x or newer
# ───────────────────────────────────────────
# macOS (Homebrew)
# ───────────────────────────────────────────
brew install python@3.12
# ───────────────────────────────────────────
# Ubuntu / Debian
# ───────────────────────────────────────────
sudo apt update
sudo apt install -y python3 python3-pip python3-venv
# ───────────────────────────────────────────
# Windows (winget, PowerShell or cmd)
# ───────────────────────────────────────────
winget install Python.Python.3.12
# ───────────────────────────────────────────
# Verify: same on every OS
# ───────────────────────────────────────────
python3 --version # 3.10 or newer (macOS/Linux)
python --version # 3.10 or newer (Windows)
pip3 --version # 23.x or newer
Windows + Python: python --version says “Python was not found”
Common on Windows even after a successful winget install Python.Python.3.12. The Microsoft Store hijacks the python alias and Windows doesn’t pick up new PATH entries until your terminal restarts. Try in this order:
- Use the launcher: py --version. The Python launcher is installed alongside Python on Windows and works even when the python alias doesn’t.
- Disable the Microsoft Store aliases: Settings → Apps → Advanced app settings → App execution aliases. Turn off the toggles for python.exe and python3.exe so they stop redirecting to the Store.
- Verify Python is on your PATH: open Environment Variables (Start menu → “Environment Variables” → Edit the system environment variables), edit your user or system Path, and confirm both of these are present, adding them if not:
C:\Users\<you>\AppData\Local\Programs\Python\Python312\ C:\Users\<you>\AppData\Local\Programs\Python\Python312\Scripts\ - Close and reopen every terminal (Command Prompt, PowerShell, Windows Terminal, your editor’s integrated terminal). PATH changes don’t apply to already-open shells, this is the fix more often than people expect.
Still stuck? Run the full path directly to confirm the install itself is fine: C:\Users\<you>\AppData\Local\Programs\Python\Python312\python.exe --version. If that works, the issue is the alias / PATH; loop back to step 2 or 3.
Section 02
Set up an external wallet.
The wallet comes before the API key. Limitless authenticates individual traders with HMAC requests signed by an external wallet, so the key you mint in the next section is bound to whichever wallet you connect now. Use a dedicated burner, not your main wallet, fund it with a few dollars of USDC for trades and a little ETH for gas, all on Base, and never commit the private key to a repo, an LLM prompt, or a chat log.
Pick a wallet, then burner-account
Any EVM browser wallet works. Inside it, create a fresh account just for the academy, never point an agent at your daily-driver wallet. LLMs make mistakes, prompt injection exists, and you want a blast radius of pocket change.
- MetaMask, Rabby, or Coinbase Wallet. Use whichever you already trust.
- In that wallet, “Create new account” (do not reuse your main one).
- Export the private key → paste into PRIVATE_KEY in your .env (Section 05).
Fund it on Base
Limitless settles on the Base network. Your burner needs two assets there:
- USDC on Base, what your agent’s trades are denominated in. A few dollars covers the academy.
- A small amount of ETH on Base, pays gas for orders and approvals. A dollar or two of ETH lasts a long time on Base.
Bridge from another chain via Base’s official bridge, or buy USDC + ETH on Base directly through your wallet’s on-ramp.
Generating a key in code (advanced)
If you’re comfortable with ethers / eth_account, generate a throwaway key locally. You’ll still need to fund the resulting address on Base before HMAC auth is useful.
# Node / TypeScript
node -e "console.log(require('ethers').Wallet.createRandom().privateKey)"
# Python
python3 -c "from eth_account import Account; print(Account.create().key.hex())"
The private key unlocks everything in that wallet.
Keep PRIVATE_KEY in .env (gitignored) or a secrets manager, never inside a prompt the LLM can see. Module 14 (Risk & Kill Switches) covers programmatic guardrails that contain the damage even if the key leaks.
Section 03
Mint your HMAC API key.
Limitless authenticates individual traders with an HMAC-signed key tied to your external wallet, not a static bearer token. Your agent will read markets, check positions, and place orders by signing each request with the secret you mint here. The full handshake (request signing, headers, replay protection) is documented at docs.limitless.exchange/developers/authentication.
Where to create it
- Go to limitless.exchange and connect the external wallet you set up in Section 02. Wallet connect is the auth handshake; HMAC keys are scoped to that address.
- Open your profile → API keys.
- Create a key named “agent-dev” or similar, sign the wallet prompt, and submit.
- Copy the secret immediately, shown once. This is the secret half of the HMAC pair.
Where to store it
- A local .env file (Section 05).
- A shell config or a secrets manager.
- Never pass it directly into an LLM prompt, keep it server-side.
Agents are prompt-injection surfaces.
Never put LIMITLESS_API_KEY (or any other secret) inside a prompt the LLM can see. Secrets live in your code; the tools your agent calls use them without revealing them. Module 15 (Prompt Injection) goes deep on this. Canonical signing reference: docs.limitless.exchange/developers/authentication.
Section 04
Get an LLM API key.
Every module from 02 onwards calls an LLM. Anthropic’s Claude is the default across the academy because its tool-use API is the cleanest fit for trading agents, but OpenAI works too, and Module 09’s starter repo is agnostic.
Anthropic (Claude)
- Sign in at console.anthropic.com.
- Billing → add a card; give yourself $5–$20 of credit to start.
- API Keys → Create Key, name it “agents-academy”.
- Copy it into ANTHROPIC_API_KEY.
Default model across the academy: claude-sonnet-4-5. Opus 4.8 if you want the deepest reasoning; Haiku 4.5 if you’re cost-sensitive.
OpenAI (optional)
- Sign in at platform.openai.com.
- Billing → add a card + credit.
- API Keys → Create new secret key.
- Copy it into OPENAI_API_KEY.
Use gpt-4o-mini for cheap iteration, gpt-4o for tool-use reliability.
Set a spend cap.
Both providers let you cap monthly spend in billing settings. A loop bug in an agent can burn through credits fast, set $20–$50 for dev, raise it later if you need to.
Section 05
The .env pattern.
Every script in this academy reads credentials from environment variables, never hardcoded, never visible to the LLM. A single .env file in your project root covers the whole stack.
Example .env
# LLM provider (pick one)
ANTHROPIC_API_KEY=sk-ant-xxx
OPENAI_API_KEY=sk-xxx
# Limitless API token, required from Module 03 (Crash Course).
# apiKey = token id, public, goes in lmts-api-key header.
# secret = base64 HMAC secret, shown once, used to sign each request per
# docs.limitless.exchange/developers/authentication.
LIMITLESS_API_KEY=token_id_replace_me
LIMITLESS_API_SECRET=base64_secret_replace_me
# Wallet private key, signs on-chain orders (EIP-712) from Module 11 (Deployment) onwards.
# Separate from the API token; both come from the same external wallet.
PRIVATE_KEY=0xabc123...
# Optional
BASE_URL=https://api.limitless.exchange
LOG_LEVEL=info
Save as plain text in your project root. No quotes around values.
.gitignore it
# In your project's .gitignore
.env
.env.local
.env.*.local
*.pem
private_key.txt
# Agent-specific
conversations/ # chat transcripts
traces/ # LLM call logs
Also ignore conversation logs, they can leak sensitive tool responses. Commit a .env.example with dummy values instead.
New to editing text files?
You don’t need a heavy IDE to edit a .env. Right-click the file, choose “Open with”, and pick a plain-text editor: Notepad++ on Windows (free download), BBEdit or TextEdit (Format → Make Plain Text) on macOS, gedit or nano on Linux. Do not use Word or Google Docs, they insert formatting that breaks the file.
Loading the .env file at runtime
- TypeScriptUse node --env-file=.env script.ts (Node 20.6+), or npm install dotenv and import 'dotenv/config' at the top of each entry point.
- Pythonpip install python-dotenv, then from dotenv import load_dotenv; load_dotenv() before reading os.environ.
Section 06
Editor & extensions.
Four options, from “I just need to paste a key” to “I pair with Claude inline as I code.” Pick whichever matches where you are, agent work benefits from editors that can chat with an LLM, but you can absolutely start simple.
Plain text
For quick .env / config edits with zero setup. Perfect if you’re new to writing code.
- WinNotepad++ (free)
- MacBBEdit, TextEdit
- Lingedit, Kate, nano
VS Code
Free and universal. Works with Claude Code, GitHub Copilot, or Continue.dev for inline AI.
- ESLint + Prettier
- Python + Pylance
- DotENV, GitLens
Cursor
VS Code fork with LLM chat built in. Natural fit for agent work, pair with Claude while building tools.
- Cmd/Ctrl+K to edit in place
- Cmd/Ctrl+L to chat
Claude Code (CLI)
Anthropic’s own CLI agent. Runs in your terminal, edits files, explains choices. Learn agent patterns by using one.
Install: npm i -g @anthropic-ai/claude-code
Setup complete
You’re ready to build agents.
Runtime installed, external wallet funded with USDC + ETH on Base, HMAC API key minted, LLM key in hand, .env in place, editor chosen. Every module from here on assumes this floor.