Wall Street-grade portfolio intelligence for self-directed investors.
60+ CLI commands. AI-powered daily magazine. Tax-aware analysis. Zero SaaS fees.
Quick Start · Commands · Magazine · Architecture · Contributing
Portfolio Pulse is two things:
1. A CLI toolkit with 60+ commands that connect to your Schwab brokerage account, pull data from SEC EDGAR, FRED, Finnhub, and more — giving you institutional-grade analysis from your terminal.
2. A daily magazine generated by Claude Opus that produces beautiful editorial-style HTML reports with tax-aware recommendations, deployed to Vercel with PIN auth and delivered to your phone via push notification.
"Your portfolio is healthy at $322K with a +0.14% day, but six of eight positions are running RSI above 76 — the broad market is in a greed-driven melt-up and your job right now is to do nothing stupid. The 237-day short-term tax clock on your December 2025 positions is the single biggest variable in every decision you make."
— Claude Opus, Portfolio Pulse Daily Report
- Python 3.10+ and pip
- macOS (for iMessage notifications) or any OS (for Pushover/email)
- Claude Code (recommended for interactive portfolio management)
git clone https://github.com/Benja-Pauls/portfolio-pulse.git
cd portfolio-pulse
# Set up the CLI toolkit
python3 -m venv .venv
source .venv/bin/activate
pip install yfinance finnhub-python fredapi fear-and-greed numpy pandas \
scikit-learn pmdarima statsmodels vaderSentiment pdfplumber \
schwab-py click rich python-dotenv anthropic requests| Service | What it powers | Get key at |
|---|---|---|
| Schwab | Live positions, balances, trading | developer.schwab.com |
| Finnhub | News, analyst ratings, insider trades, earnings | finnhub.io |
| FRED | Fed funds rate, CPI, unemployment, yields | fred.stlouisfed.org |
| Anthropic | Claude Opus AI analysis in magazine | console.anthropic.com |
cp .env.example .env
# Edit .env with your API keyspython schwab_cli.py auth
# Opens browser for OAuth login — one-time setuppython schwab_cli.py briefing --quick # Signal snapshot
python schwab_cli.py positions # Live portfolio
python schwab_cli.py recession-check # 10-indicator recession dashboard
python schwab_cli.py detect-bottoms # Find bottoming opportunitiespython generate_issue.py
open issues/$(date +%Y-%m-%d).htmlnpm i -g vercel
vercel login
vercel deploy --prod
vercel env add PORTFOLIO_PIN production # Set your access PINchmod +x setup_cron.sh
./setup_cron.sh
# Claude Code runs 3x/day → generates magazine → deploys → notifies youAll commands: python schwab_cli.py <command>
| Command | Description |
|---|---|
auth |
Test/refresh Schwab OAuth |
positions |
All holdings with gain/loss |
balances |
Cash, money market, buying power |
quote AAPL MSFT |
Real-time quotes |
trade buy MSFT 67 --limit 374 |
Place a limit buy order |
trade sell OEF 163 --limit 320 |
Place a limit sell order |
trade orders |
Recent order status |
| Command | Description |
|---|---|
briefing --quick |
Full signal scan — start here |
news IVV --sentiment positive |
News with VADER sentiment |
insider AAPL --open-market |
SEC EDGAR Form 4 (buy/sell/price) |
analyst AAPL --targets --earnings |
Ratings, price targets, EPS |
congress --politician pelosi --detail |
House STOCK Act disclosures |
sentiment AAPL --bullish-only |
StockTwits social sentiment |
whales --fund berkshire |
Buffett's 13F holdings from SEC |
whales AAPL |
Which billionaire funds hold a stock |
| Command | Description |
|---|---|
technicals IVV --signals-only |
RSI, SMA, MACD, Bollinger signals |
risk |
Sharpe, beta, drawdown per holding |
exposure --by sector |
True concentration across ETFs |
correlation |
Correlation matrix with warnings |
compare IVV VOO VTI SCHD |
Side-by-side comparison |
price-context MSFT ISRG |
52-week range analysis |
| Command | Description |
|---|---|
detect-bottoms |
Early detection — catches bottoming signals before the bounce |
opportunities --top 20 |
Score 60+ tickers on pullback + fundamentals |
scan-pullbacks --max-range 30 |
Find deep pullbacks recovering |
pre-buy MSFT |
Mandatory due diligence before any buy |
| Command | Description |
|---|---|
monte-carlo IVV --days 90 |
Price projections with probabilities |
predict IVV --horizon 5 |
ML direction prediction |
portfolio-forecast --days 252 |
Correlated Monte Carlo for full portfolio |
momentum |
Dual momentum rankings |
| Command | Description |
|---|---|
recession-check |
10 weighted indicators → recession probability |
macro |
Yields, indices, FRED rates/CPI/employment |
fear-greed |
CNN Fear & Greed Index + VIX |
fed-watch |
Fed funds rate, yield curve, next FOMC |
sector-pulse all |
Sector rotation signals |
earnings-guidance |
Are bellwether companies beating estimates? |
| Command | Description |
|---|---|
tax-profile |
Your tax rates (configurable by state) |
tax-impact |
Cost of selling each position now vs. later |
what-if --sell OEF:all --buy VTI:52000 |
Model trades with tax impact |
tax-harvest |
Harvestable losses + swap suggestions |
size-position MSFT |
Kelly, volatility, risk-parity sizing |
| Command | Description |
|---|---|
watchlist show/add/remove |
Persistent ticker watchlist |
journal log/show/review |
Trade journal with verdicts |
alerts add --symbol IVV --below 600 |
Price alerts |
income |
Projected annual dividend income |
dividends IVV --shares 87 |
Yield, history, projection |
View all 60+ commands
python schwab_cli.py --help
The magazine is a self-contained HTML page generated by Claude Opus with:
- Portfolio Snapshot — total value, day change, all-time P&L
- Allocation Donut Chart — visual breakdown of where your money is
- Position Cards — each holding with sparkline, RSI, 52-week range bar
- Market Pulse — S&P 500, Nasdaq, VIX, Oil, Gold, Fear & Greed radial gauge
- Macro Health — yield curve, Treasury rates, recession signals
- Editor's Desk — Claude Opus editorial analysis with source citations:
- Tax-aware recommendations ("selling IVV now costs $4,185 vs $2,679 in December")
- References to CLI tools used ("per RSI technical indicator", "per FRED yield curve data")
- Investment principle citations ("Buffett: be greedy when others are fearful")
- Stocks Worth Watching — opportunities with BUY/WATCH/AVOID verdicts
- Action Plan — every holding gets a specific recommendation with urgency level
generate_issue.py
├── Gather market data (yfinance, fear-and-greed)
├── Call Claude Opus API with full portfolio context
│ ├── CLAUDE.md (CLI tools + workflow)
│ ├── PRINCIPLES.md (investment framework)
│ └── Tax profile (state-specific rates)
├── Parse Opus response into analysis cards, opportunities, action plan
├── Render editorial HTML (Fraunces + Inter typography, dark theme)
└── Deploy to Vercel + send Pushover notification
| Method | Setup | Works when |
|---|---|---|
| Pushover | $5 app, free API | Always (push notification) |
| iMessage | macOS Messages app | Mac is awake |
| Cron automation | ./setup_cron.sh |
3x/day weekdays |
portfolio-pulse/ # This repo — magazine generator
├── generate_issue.py # Data gathering + Opus analysis + HTML rendering
├── api/login.js # Vercel serverless PIN auth
├── vercel.json # Vercel config
├── setup_cron.sh # Install cron schedule
├── teardown_cron.sh # Remove cron schedule
├── issues/ # Generated HTML (local, gitignored)
└── public/ # Vercel deploy (gitignored)
Stock_Portfolio/ # CLI toolkit (sibling directory)
├── schwab_cli.py # Main CLI + Schwab API + trading
├── intel.py # News, sentiment, insider, congress, macro
├── analysis.py # Technicals, risk, exposure, correlation
├── planning.py # What-if, screener, watchlist, journal
├── forecast.py # Monte Carlo, ARIMA, ML predict
├── whales.py # 13F institutional tracking (SEC EDGAR)
├── recession.py # 10-indicator recession dashboard
├── research.py # Briefing, sector-pulse, fed-watch
├── opportunity.py # Opportunity scanner, pullback finder
├── earlydetect.py # Bottoming signal detection
├── prebuy.py # Mandatory pre-buy due diligence
├── tax.py # State-specific tax calculations
├── PRINCIPLES.md # Investment framework (Buffett, Munger, Dalio)
└── data/ # Persistent storage (watchlist, journal)
| Source | Auth | Rate Limit | Used For |
|---|---|---|---|
| Schwab API | OAuth2 | — | Live positions, balances, trading |
| SEC EDGAR | None (User-Agent) | 10 req/sec | 13F whales, Form 4 insider, congress |
| Finnhub | Free API key | 60 req/min | News, analyst, insider, earnings |
| FRED | Free API key | Unlimited | Macro data (rates, CPI, employment) |
| yfinance | None | Unofficial | Prices, ETF holdings, dividends |
| Claude Opus | API key | Per token | Magazine AI analysis |
We welcome contributions! See CONTRIBUTING.md for guidelines.
High-impact areas:
- Additional data sources (options flow, short interest, bond spreads)
- More forecasting models (Kronos integration, transformer-based)
- International market support (non-US brokerages)
- Web dashboard (React/Next.js frontend for the CLI)
- Mobile app (React Native wrapper for push notifications)
MIT — use it, fork it, make money with it.
Built with Claude Code.

0 comments
log in to comment.