Portfolio

Holdings, average cost basis, and unrealized P&L are derived automatically from your transaction history. There is no separate holdings table to maintain.

"How's my portfolio?"Positions, P&L, concentration, and the one thing to watch in a single answer
"Is TSLA too big a chunk?"Concentration risk + scenario impact stitched together automatically
"I just bought 10 NVDA at $875"Log a trade through plain conversation. Claude calls add_txn for you
Claude composes show_portfolio, show_concentration, and show_macro automatically. The CLI section below is for when you want the same data in the terminal directly.
Displays every current position with quantity, average cost per share, current market price, and unrealized P&L. Run firma sync first if you want fresh prices.
$firma show portfolio
TICKERQTYAVGPRICEYIELDP&L
MSFT18$421.32$424.620.88%+$59.40 (+0.78%)
TSLA400$249.91$376.30+$50,556.43 (+50.57%)
AAPL43$196.29$271.060.38%+$3,215.11 (+38.09%)
NVDA156$128.05$208.270.02%+$12,514.80 (+62.65%)
Value$202,308.86
Cost$135,963.12
P&L+$66,345.74 +48.80%
Synced0m ago
AVG is the weighted average cost across all buy and deposit transactions. YIELD is the annual dividend yield from Finnhub. Blank for non-dividend tickers.
Below the holdings table, firma show portfolio also shows sector and country allocation bars, plus a net worth snapshot based on your latest balance entry.
Sector Allocation
Automobiles           ━━━━━━━━━━━━━━━─────  74.4%
Semiconductors        ━━━─────────────────  16.1%
Technology            ━━──────────────────   9.5%

Country Allocation
US                    ━━━━━━━━━━━━━━━━━━━━  100.0%

Net Worth Breakdown
Investments     ━━━━━━━━━━━━━───────  $273,641  64.0%
Other Assets    ━━━━━───────────────  $109,935  25.7%
Cash            ━━──────────────────   $44,188  10.3%

Net Worth                               $426,691  2026-03
Portfolio MV                            $202,308.86
Net Worth Breakdown uses the most recent balance entry. Run firma add balance monthly to keep it current.
Fetches current market prices for every ticker in your portfolio from Finnhub and caches them locally. This requires a Finnhub API key, which you can set once with firma config set finnhub-key <key>.
$firma sync
TSLA $376.30
NVDA $208.27
MSFT $412.50
AAPL $209.80
Synced 4 tickers at 8:35 AM
Prices are cached locally. Firma never calls Finnhub unless you run firma sync or ask Claude to sync_prices. Free Finnhub keys support up to 60 API calls/minute.
MIT License