sf-portfolio
The dashboard. One command, four data sources merged:
GET /exchanges— what's connectedGET /exchanges/balances— USDT cached balances (10-min cache)GET /bots— every bot with normalized status (ACTIVE/PAUSED/DRAFT/DISABLED)GET /positions— live open positions per exchange
When to use
- "Show my portfolio"
- "What bots are running where?"
- "Balance across all exchanges"
- "Open positions snapshot"
How to run
python sf-portfolio/portfolio.py [--json]
Output
Three blocks: exchanges + balances, bots grouped by exchange, open
positions grouped by exchange. Balances mark cached and checkedAt;
positions are always live (not cached server-side).
Notes
- Balances are cached 10 minutes server-side; force-refresh by calling
POST /exchanges/balances/cache/clear(use--clear-cache). - This view never returns API keys, secrets, or passphrases.