What does my portfolio actually look like right now? Reads local portfolio snapshots (Tradeville + IBKR) and provides unified analysis. Use when (1) user asks about portfolio, (2) before making investment decisions, (3) when macro indicators change significantly, (4) cross-referencing positions with cui-bono/stonk or macro-monitor analysis.
Read and analyze local portfolio snapshots from Tradeville (Romanian broker) and IBKR (Interactive Brokers). Provides a unified view across both accounts.
All portfolio data is local-only (gitignored):
.claude/local/portfolio/snapshots/
├── tradeville-YYYY-MM-DD-HHMM.json # Tradeville positions
├── tradeville-YYYY-MM-DD-HHMM.png # Tradeville screenshot
├── ibkr-positions-YYYY-MM-DD-HHMM.json # IBKR positions (from API)
├── ibkr-summary-YYYY-MM-DD-HHMM.json # IBKR account summary (NAV, cash)
├── ibkr-web-YYYY-MM-DD-HHMM.png # IBKR screenshot (visual verification)
ls -t .claude/local/portfolio/snapshots/*.json 2>/dev/null | head -5
Or use glob to find the most recent by timestamp pattern:
tradeville-*.json (positions array)ibkr-positions-*.json (positions with market values)ibkr-summary-*.json (NAV, cash, margin, buying power)Tradeville JSON contains a positions array with:
IBKR positions JSON contains:
IBKR summary JSON contains:
Read .png files for visual verification. Useful when JSON extraction
may have missed data or when the user wants visual confirmation.
Combine Tradeville + IBKR data into one view:
Group positions by sector/geography:
Compare snapshots across dates:
# Find snapshots from different dates
ls .claude/local/portfolio/snapshots/tradeville-*.json
Run macro-monitor's crisis check for context:
python3 projects/ex-cog-dev/research-toolkit/skills/macro-monitor/scripts/fred_fetcher.py crisis
Before making investment decisions, use the stonk agent (or cui-bono directly) for:
For in-depth analysis of specific holdings or sectors:
Portfolio data is now collected via the portfolio-mcp MCP server
(projects/ex-cog-dev/research-toolkit/mcp-servers/portfolio-mcp/).
tradeville_login — Instructions to run login script in a terminal (MCP stdin is reserved for JSON-RPC; login must happen outside MCP).tradeville_discover — Opens browser with CDP port for Claude to navigate. Claude calls tradeville_save_sub_account for each sub-account found, then calls tradeville_finish_discover to close the browser.tradeville_set_active_account — Set which sub-account to use for routine snapshots.tradeville_snapshot — Auto-approvable. Navigates to portfolio page; if the sub-account URL uses the click: prefix (e.g. click:Subcont PERSONAL), clicks through the dropdown to switch sub-accounts. Saves screenshot + JSON.ibkr_login — Opens visible browser for Client Portal Gateway auth (requires gateway at localhost:5000).ibkr_snapshot — Auto-approvable. Calls REST API, saves positions + NAV to JSON.portfolio_status — shows auth state, discovered URL, recent snapshots
Data dir: ~/.claude/local/portfolio/ (or $PORTFOLIO_DATA_DIR).
| Trigger | Action |
|---|---|
| User asks "what's in my portfolio?" | Read latest snapshots, present unified view |
| Before investment decision (task #36, #39) | Read current positions to avoid duplication/overconcentration |
| Macro indicator changes significantly | Cross-reference positions with macro-monitor data |
| User asks about specific position | Find it across both brokers, show details |
| User asks about allocation/exposure | Calculate sector/geography breakdown |
A vasana is a pattern that persists across unrelated contexts. If during
this task you notice such a pattern emerging, it may be worth capturing.
This skill works best alongside the vasana skill and vasana hook
from the Vasana System plugin.
Modify freely. Keep this section intact.