A local-only TastyTrade dashboard: live positions, payoff graphs, and AI
position analysis. Runs on 127.0.0.1:8420 so your TT credentials never leave
your machine.
- Live positions — pulls open positions (read-only), groups by underlying, streams live marks via DXLink.
- Payoff graph — server-side Black-Scholes T+0 curve using live IV plus expiration P/L, breakevens, and live P/L. Rendered in the browser with Recharts.
- AI analysis — asks an LLM to rate position health/risk/P-L and suggest actions. Supports Anthropic, OpenAI, Gemini, DeepSeek, and Kimi (Moonshot).
- History — every analysis is saved per symbol; switch between past runs from the dropdown.
- Editable prompt — the position-analysis system prompt lives in
app/prompts/position_analysis.md. A copy in your OS user-data folder can override it without rebuilding the app.
- Read-only OAuth grant — the app cannot trade.
- Credentials live only in a
.envfile inside your OS user-data folder (%LOCALAPPDATA%\Tastieron Windows,~/Library/Application Support/Tastieron macOS). Never in source control, never sent to the browser. - Server binds
127.0.0.1only. - No order/trade endpoints in the codebase.
Download a zip from Releases:
- Windows: run
Tastier.exe. - macOS: right-click
Tastier.app→ Open.
The first-run setup page asks for TT_SECRET and TT_REFRESH. See OAuth setup below. Choose paper for the sandbox or live for your real account.
pip install -r requirements.txt
# Copy the example .env to your user-data folder and edit it.
# Windows PowerShell:
$d = "$env:LOCALAPPDATA\Tastier"; New-Item -ItemType Directory -Force $d
Copy-Item .env.example "$d\.env"
# macOS / Linux:
mkdir -p ~/Library/Application\ Support/Tastier
cp .env.example ~/Library/Application\ Support/Tastier/.env
chmod 600 ~/Library/Application\ Support/Tastier/.env
make check # should print ok:true with your accounts
make run # open http://127.0.0.1:8420Get a read-only personal OAuth grant from tastytrade.
- Log in to the right portal:
- Paper: https://developer.tastytrade.com (sandbox login)
- Live: https://my.tastytrade.com
- Manage → My Profile → API → OAuth Applications.
- Create an app named
Tastier Local. Scope: read only. - Create a personal grant.
- Copy Client Secret →
TT_SECRET, Refresh Token →TT_REFRESH.
Paper and live credentials are separate. If auth fails, make sure TT_ENV
matches the portal you used.
Add one or more keys to your user-data .env:
ANTHROPIC_API_KEY=sk-ant-...
OPENAI_API_KEY=sk-...
GEMINI_API_KEY=...
DEEPSEEK_API_KEY=sk-...
# Kimi/Moonshot accepts either name:
KIMI_API_KEY=sk-...
MOONSHOT_API_KEY=sk-...
# Optional:
LLM_PROVIDER=anthropic # anthropic | openai | gemini | deepseek | kimi
LLM_MODEL=claude-sonnet-5 # override the default model
KIMI_BASE_URL=https://api.moonshot.ai/v1 # proxy/OpenRouter supportThe model dropdown is refreshed from each provider at startup. Optional
pricing overrides go in <user-data>/Tastier/pricing/models_pricing.json.
| Command | What it checks |
|---|---|
make test |
Offline: option pricing, P&L, breakevens, position grouping, mocked broker routes |
make test-e2e |
Live paper account: auth → positions → DXLink quote → analysis |
browser (React + Recharts, no build step)
│ REST: /api/positions, /api/analyze, /api/analyses
│ WS: /ws/quotes
▼
FastAPI (127.0.0.1:8420)
│ session + token refresh
├─► tastytrade REST — accounts, positions, option details
├─► DXLink websocket — Quote/Greeks, single upstream, fan-out relay
└─► LLM providers — Anthropic, OpenAI, Gemini, DeepSeek, Kimi
Key files:
app/main.py— FastAPI routes, DXLink relay, analysis endpoints.app/advisor.py— LLM provider selection, model enumeration, pricing.app/payoff.py— T+0/expiration curves and Greeks-based valuation.app/prompts/position_analysis.md— editable system prompt.run_app.py— PyInstaller entry point that locates bundled assets.
Push a version tag to build Windows and macOS binaries via GitHub Actions:
git tag v0.1.0
git push origin v0.1.0.github/workflows/release.yml attaches Tastier-Windows-x64.zip and
Tastier-macOS.zip to a GitHub release. .github/workflows/nightly.yml
builds a daily pre-release at 4 AM Pacific if the repo changed in the last 24
hours.
Build locally with:
make buildOutput: dist/Tastier.exe (Windows) or dist/Tastier.app (macOS).