惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
罗磊的独立博客
Martin Fowler
Martin Fowler
博客园_首页
Stack Overflow Blog
Stack Overflow Blog
Last Week in AI
Last Week in AI
The GitHub Blog
The GitHub Blog
B
Blog
C
Check Point Blog
WordPress大学
WordPress大学
G
Google Developers Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
量子位
月光博客
月光博客
U
Unit 42
Engineering at Meta
Engineering at Meta
有赞技术团队
有赞技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Vercel News
Vercel News
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Jina AI
Jina AI
S
Secure Thoughts
aimingoo的专栏
aimingoo的专栏
D
Darknet – Hacking Tools, Hacker News & Cyber Security
I
Intezer
Latest news
Latest news
V
Vulnerabilities – Threatpost
D
Docker
Attack and Defense Labs
Attack and Defense Labs
Help Net Security
Help Net Security
S
Security @ Cisco Blogs
Forbes - Security
Forbes - Security
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
L
LINUX DO - 热门话题
P
Palo Alto Networks Blog
Cloudbric
Cloudbric
Spread Privacy
Spread Privacy

Hacker News: Show HN

PurrrrrFocus: Pomodoro Timer App - App Store Workflow Engine — Multi-Step Orchestration for Bun RapidPhoto: Pro Photo Editor App - App Store GitHub - DheerG/swarms: Achieve extraordinary results with claude code across a variety of tasks SPICE simulation → oscilloscope → verification with Claude Code — Lucas Gerads Show HN: VCoding – A 5 MB native Windows IDE with no dynamic dependencies Show HN: LLMs don't hallucinate because they're bad at math, it's the format GitHub - Agent-FM/agentfm-core: AgentFM is a peer-to-peer network that turns everyday computers into a decentralized AI supercomputer. AgentFM lets you run massive AI workloads directly across a global mesh of idle CPUs and GPUs. Show HN: Tracking Top US Science Olympiad Alumni over Last 25 Years GitHub - Potarix/agent-hub: One place to talk to all your agents Show HN: Runtime security for AI agents(injection,tool abuse, data exfiltration) GitHub - dubeyKartikay/lazyspotify: Terminal Spotify client for macOS and Linux GitHub - the-banana-tool/king-louie: Easy to use GUI Personal AI Assistant. Win/Linux/Mac. Show HN I made my vacation rental bookable by AI agents–no Airbnb, 0% commission GitHub - basteez/jsf-autoreload: maven plugin to enable hot reload on jsf projects uvm32/hosts/host-gdbstub at main · ringtailsoftware/uvm32 GitHub - labsai/EDDI: Config-driven engine that turns JSON into production-grade AI agents. Multi-agent orchestration, 12+ LLM providers, MCP/A2A protocols, RAG, persistent memory, and enterprise compliance (EU AI Act, GDPR, HIPAA). Built on Quarkus. GitHub - glitchnsec/fortyone-oss: AI Executive Assistant Platform Quickstart | Alien GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. GitHub - ocrbase-hq/ocrbase: 📄 PDF/IMG ->.MD/JSON Document OCR API for PaddleOCR and GLMOCR. Self-hostable. GitHub - impactjo/home-memory: MCP server that lets your AI assistant remember everything about your home. GitHub - Sets88/dbcls: DbCls is a powerful terminal database client that supports various databases GitHub - neptun2000/heor-agent-mcp GitHub - SeanFDZ/macmind: Single-layer transformer in HyperTalk for the classic Macintosh RollQuation: Math Puzzles - Apps on Google Play GitHub - dropbox/witchcraft Show HN: Agent-cache – Multi-tier LLM/tool/session caching for Valkey and Redis GitHub - opentalon/opentalon: OpenTalon is an open-source platform built from the ground up in Go as a robust alternative to OpenClaw LinkedIn™ 职位抓取工具 - Chrome 应用商店 GitHub - EdoardoBambini/Agent-Armor-Iaga: AI agents are getting tool access — shell, file system, databases, APIs, secrets. But **nobody is governing what they actually do with it**. Frameworks like LangChain, CrewAI, AutoGen, and Claude Code give agents the power to execute. Agent Armor gives you the power to control, audit, and approve every single action before it happens. HN Vibes — Week 15, Apr 7–13 2026 GitHub - chojs23/ec: Easy terminal-native 3-way git mergetool vim-like workflow GitHub - SethPyle376/hiraeth: Local AWS emulator focused on fast integration testing, with SQS support, SQLite-backed state, and a debug-friendly web UI. GitHub - JakOb-dotcom/cloud-sandbox-security-analysis: Technical analysis and Proof of Concept (PoC) regarding environment variable exfiltration in containerized cloud sandboxes via side-channel data leaks. Springboards - Flint Alpha Show HN: A simpler coding agent harness GitHub - audiodude/sudomake-friends GitHub - 256thFission/mini-mythos: OSS clone of Anthropic’s Mythos harness to locate C/C++ memory vulnerabilities Show HN: OpenParallax: OS-level privilege separation for AI agent execution Hacker News Sorted - Chrome 应用商店 Show HN: How to Install Docker on Ubuntu 24.04 LTS: Complete 2026 Guide GitHub - himanshudongre/smriti GitHub - sverrirsig/claude-control: macOS desktop dashboard for monitoring and managing multiple Claude Code sessions GitHub - ory/dockertest: Write better integration tests! Dockertest helps you boot up ephermal docker images for your Go tests with minimal work. Chiral - Chrome 应用商店 Show HN: Two Claudes collaborating through shared memory on a $100 mini-PC GitHub - pmichaillat/latex-cv: Minimalist LaTeX template for academic CVs GitHub - oguzbilgic/posse: A web UI for Anthropic Managed Agents. GitHub - sshiraz/depsly: Dependency risk analysis tool for npm packages ABI Add safari/agent-harness — Safari browser automation via safari-mcp by achiya-automation · Pull Request #212 · HKUDS/CLI-Anything GitHub - Halfblood-Prince/trustcheck: Verify PyPI package attestations and improve Python supply-chain security GitHub - oguzbilgic/kern-ai: Agents that do the work and show it. GitHub - bruits/satteri: High-performance Markdown and MDX processing for the JavaScript ecosystem GitHub - tylergibbs1/feedstock: High-performance web crawler and scraper for TypeScript, powered by Bun and Playwright GitHub - Grimm67123/grimmbot: The self-improving sandboxed and open-source AI agent. With persistent memory and scheduling. GitHub - whitevanillaskies/whitebloom: Local whiteboard that blooms. GitHub - hwdsl2/docker-whisper: Docker image for a self-hosted Whisper speech-to-text server with speaker diarization and OpenAI-compatible transcription and translation APIs. Powered by faster-whisper. Supports all Whisper models, NVIDIA GPU (CUDA) acceleration, JSON/SRT/VTT output, SSE streaming, offline mode, and multi-arch (amd64, arm64). GitHub - yisding/reviewwiggum GitHub - MarwanAlsoltany/serrors: Structured errors for Go: sentinel hierarchies, typed data, custom formatting, and slog integration. GitHub - soatok/age-php GitHub - Luthiraa/markitme GitHub - stagas/rtdiff: realtime git diff gui and AI-assisted commits GitHub - tombedor/excalicharts GitHub - wh1le/excalidraw-edit: Open and edit .excalidraw files from the terminal. Offline, auto-saves to disk. MalExt Sentry - Malicious Extension Scanner - Chrome 应用商店 GitHub - syi0808/asciianimesvg: Generate animated ASCII art SVGs from text. CLI, Rust library, WASM, and web editor. GitHub - zaina-ml/ml_forge: A visual-based graph node editor for training computer vision models. GitHub - anakin87/llm-rl-environments-lil-course: 🌱 A little course on Reinforcement Learning Environments for evaluating and training Language Models GitHub - takaakit/superpowers-uml: Superpowers-UML modifies Superpowers to ensure a software development workflow in which AI agents design through UML modeling. AdriByte Studio - Sviluppo Web e Soluzioni Digitali GitHub - chouligi/angel-copilot: Your personalized Angel Investment Advisor Show HN: MoodSense AI (ML and FastAPI and Gradio, Deployed on Hugging Face) Moodsense Ai - a Hugging Face Space by aman179102 GitHub - agenteractai/lodmem: Level Of Detail Context Management for Agents GitHub - ostefani/subnetlens: A fast, concurrent network scanner with a TUI and plain-text CLI, built in Go. It discovers live hosts on your network, scans their open ports, resolves hostnames, and fingerprints operating systems—delivered. Cyber Pulse: Agentic Intel - Apps on Google Play Whisper API: Self-Hostable Speech to Text Transcription The Agent-Web Protocol Stack: A Research Thesis GitHub - msmarkgu/RelayFreeLLM: A restful API designed to route user prompts to various AI model providers. Show HN: Provepy – A Python decorator that proves your code using Lean and LLMs Show HN: Pardonned.com – A searchable database of US Pardons GitHub - patrickdappollonio/dux: Dux is a terminal UI that lets you run multiple AI coding agents side by side, each in its own git worktree, with full companion terminals, macros, commit generation, and a command palette that knows more tricks than you do. kMC Crystal Simulator Show HN: HyperFlow – A self-improving agent framework built on LangGraph GitHub - stef41/vibescore: 🎵 Grade your vibe-coded project. One command, instant letter grade across security, quality, dependencies, and testing. GitHub - stef41/lmscan: 🔍 Detect AI-generated text and fingerprint which LLM wrote it. Open-source GPTZero alternative. Zero dependencies, works offline. imgur.com GitHub - visionscaper/collabmem: Enabling long-term collaboration with Agentic AI - building up episodic and world model memory over time with in-context awareness 在 Steam 上购买 FriedrichAI: Offline AI 立省 10% GitHub - atripati/ark: AI Runtime Kernel — a context operating system for AI agents. Eliminates tool bloat, loads only what’s needed, and gives LLMs their reasoning space back. GitHub - nowork-studio/toprank: Open-source Claude Code skills for SEO, SEM, Google Ads GitHub - tacomanator/sash: Lightweight macOS menu bar app for reliably cycling through windows of the current application. Appents | Social Media Management for Product-First Teams GitHub - pnhoang/youtube-spam-blocker: Automatically detects and hides spam messages in YouTube Live chat. Set rate limits, keyword filters, and block repeat offenders. GitHub - decisionnode/DecisionNode: CLI + Local MCP - A shared structured memory store across Claude Code, Cursor, Windsurf, Antigravity, and every MCP client. Semantically queryable. GitHub - AvaCodeSolutions/django-email-learning: An open source Django app for creating email-based learning platforms with IMAP integration and React frontend components. The $100K Gap in Kubernetes Security Tooling Function Calling Harness: From 6.75% to 100%
GitHub - igoropaniuk/stonks-cli: A terminal investment portfolio tracker with live prices, P&L, stock financials, candlestick charts, news feed and AI chat bot
friedchocola · 2026-04-22 · via Hacker News: Show HN

PyPI version Python versions Install Downloads CI Coverage License CLI

Track your investment portfolio directly from the terminal.

demo

Quick start:

pip install stonks-cli
stonks demo # create demo portfolio

Features:

  • Terminal dashboard (TUI) -- live prices with auto-refresh
  • Extended-hours quotes -- PRE / AH / CLS session labels for US equities
  • Candlestick chart screen -- zoomable OHLC chart
  • News feed panel -- per-symbol headlines
  • Stock detail screen -- charts, earnings, analyst insights, key statistics
  • Backtesting -- simulate historical portfolio performance vs. a benchmark
  • AI chat assistant -- ask questions about your portfolio
  • Watchlist -- track symbols without a position; dimmed in the dashboard
  • Cryptocurrency -- BTC-USD-style symbols priced via CoinGecko
  • Multi-portfolio -- side-by-side YAML files with multiple -p flags
  • Multi-currency -- totals converted to a base currency using forex rates

Table of Contents


Installation

Requirements: Python 3.11+

Homebrew (macOS / Linux)

brew tap igoropaniuk/tap
brew install stonks-cli

pip

pip install stonks-cli

pipx (recommended -- keeps the tool isolated)

pipx install stonks-cli

uv

uv tool install stonks-cli

Portfolio configuration

stonks-cli stores your portfolio in a YAML file. By default the file is read from ~/.config/stonks/portfolio.yaml; you can override this with the -p / --portfolio option (see Usage).

Try it first: run stonks demo to explore the dashboard with a sample portfolio created in the system temporary directory. Your own portfolio at ~/.config/stonks/portfolio.yaml is never touched.

File structure

portfolio:
  positions:
    - symbol: AAPL
      quantity: 10
      avg_cost: 150.00
      currency: USD

    - symbol: ASML.AS
      quantity: 5
      avg_cost: 680.00
      currency: EUR

    - symbol: 7203.T
      quantity: 100
      avg_cost: 1850.00
      currency: JPY

    - symbol: BTC-USD
      quantity: 0.5
      avg_cost: 60000.00
      currency: USD
      asset_type: crypto
      external_id: bitcoin

  cash:
    - currency: USD
      amount: 4250.00

    - currency: EUR
      amount: 2100.00

  watchlist:
    - symbol: TSLA
    - symbol: NVDA
    - symbol: LINK-USD
      asset_type: crypto
      external_id: chainlink

Positions fields:

Field Type Required Description
symbol string yes Yahoo Finance ticker (case-insensitive); use BASE-USD for crypto
quantity int | float yes Units held; fractional values supported for crypto
avg_cost float yes Average cost per unit (positive)
currency string no ISO 4217 code; defaults to USD
asset_type string no Asset class: equity, crypto, etf, bond, commodity, forex
external_id string no Provider-specific ID used for price lookup

Cash fields:

Field Type Required Description
currency string yes ISO 4217 code (e.g. USD, EUR)
amount float yes Cash held (positive)

Watchlist fields:

Field Type Required Description
symbol string yes Yahoo Finance ticker (case-insensitive); use BASE-USD for crypto
asset_type string no Same values as positions; set to crypto for CoinGecko routing
external_id string no CoinGecko coin ID (or other provider ID) for unambiguous lookup

Watchlist items are displayed in the dashboard with a dimmed style and only show the live price and daily change -- they have no quantity, cost, or market value and are not included in the portfolio total. Press Enter on a watchlist row to open the detail screen.

The file is created and updated automatically when you use the add, remove, add-cash, and remove-cash commands, so you only need to create it manually if you prefer to seed your data by hand.

Ticker symbols and exchange suffixes

Yahoo Finance uses a dot-suffix convention to identify non-US exchanges. Append the appropriate suffix to the base ticker symbol.

Americas

Suffix Exchange Country
(none) NYSE / NASDAQ / AMEX USA
.SA B3 (São Paulo) Brazil
.BA Buenos Aires Stock Exchange Argentina
.MX Bolsa Mexicana de Valores Mexico
.SN Santiago Stock Exchange Chile
.LIM Lima Stock Exchange Peru

Canada

Suffix Exchange Country
.TO Toronto Stock Exchange Canada
.V TSX Venture Exchange Canada

Europe

Suffix Exchange Country
.L London Stock Exchange UK
.PA Euronext Paris France
.AS Euronext Amsterdam Netherlands
.BR Euronext Brussels Belgium
.LS Euronext Lisbon Portugal
.MI Borsa Italiana Italy
.DE XETRA Germany
.F Frankfurt Stock Exchange Germany
.SW SIX Swiss Exchange Switzerland
.ST Nasdaq Stockholm Sweden
.HE Nasdaq Helsinki Finland
.CO Nasdaq Copenhagen Denmark
.OL Oslo Børs Norway
.WA Warsaw Stock Exchange Poland
.AT Athens Stock Exchange Greece

Asia-Pacific

Suffix Exchange Country
.AX Australian Securities Exchange Australia
.NZ New Zealand Exchange New Zealand
.HK Hong Kong Stock Exchange Hong Kong
.T Tokyo Stock Exchange Japan
.KS Korea Exchange (KOSPI) South Korea
.KQ KOSDAQ South Korea
.TW Taiwan Stock Exchange Taiwan
.TWO Taiwan OTC Taiwan
.SS Shanghai Stock Exchange China
.SZ Shenzhen Stock Exchange China
.NS National Stock Exchange India
.BO Bombay Stock Exchange India
.JK Indonesia Stock Exchange Indonesia
.SI Singapore Exchange Singapore
.KL Bursa Malaysia Malaysia
.BK Stock Exchange of Thailand Thailand
.VN Ho Chi Minh Stock Exchange Vietnam

Cryptocurrency

Crypto symbols follow Yahoo Finance's BASE-QUOTE convention (e.g. BTC-USD). Prices are fetched from the CoinGecko public API instead of Yahoo Finance. No API key is required; set COINGECKO_DEMO_API_KEY in your environment to use a Demo key for higher rate limits.

Set asset_type: crypto and provide an external_id (the CoinGecko coin ID) for each crypto position or watchlist item. The external_id disambiguates symbols that map to multiple coins and avoids a runtime search API call.

Name Yahoo Finance symbol CoinGecko external_id
Bitcoin BTC-USD bitcoin
Ethereum ETH-USD ethereum
Solana SOL-USD solana
Cardano ADA-USD cardano
Dogecoin DOGE-USD dogecoin
Polygon MATIC-USD matic-network
Chainlink LINK-USD chainlink
Uniswap UNI-USD uniswap

If external_id is omitted, stonks-cli resolves the coin automatically using a bundled symbol map (11 000+ entries) and falls back to the CoinGecko /search endpoint for ambiguous symbols, ranked by market cap.

Examples

Symbol Instrument
AAPL Apple (NASDAQ)
ASML.AS ASML (Euronext Amsterdam)
7203.T Toyota (Tokyo SE)
HSBA.L HSBC (London SE)
005930.KS Samsung (KOSPI)
BTC-USD Bitcoin / USD
ETH-USD Ethereum / USD

Usage

stonks [OPTIONS] COMMAND [ARGS]...

Options:
  -p, --portfolio PATH                    Portfolio YAML file or name
                                          (repeatable; default:
                                          ~/.config/stonks/portfolio.yaml)
  --log-level [DEBUG|INFO|WARNING|ERROR]  Log verbosity written to the log
                                          file  [default: WARNING]
  -V, --version                           Show the version and exit.
  --help                                  Show this message and exit.

Commands:
  add         Add QUANTITY shares of SYMBOL at PRICE to the portfolio.
  remove      Remove QUANTITY shares of SYMBOL from the portfolio.
  add-cash    Add AMOUNT of CURRENCY cash to the portfolio.
  remove-cash Remove AMOUNT of CURRENCY cash from the portfolio.
  show        Print a snapshot of portfolio positions with current prices to stdout.
  dashboard   Display the current portfolio with live prices and P&L.
  list        List all portfolios in ~/.config/stonks/.
  demo        Launch the TUI with a sample portfolio (your portfolio is untouched).
  feed        Print the latest news headlines for a symbol to stdout.
  detail      Print a financial summary for a symbol to stdout.
  doctor      Run environment health checks.
  import      Import positions from a broker export (subcommands: ibkr).

Quick snapshot (stdout)

Print the current portfolio state with live prices to stdout and exit:

# One-shot table output (no TUI)
stonks show

# With a specific portfolio
stonks -p work show

The output includes the same columns as the dashboard (Instrument, Exchange, Qty, Avg Cost, Last Price, Daily Chg, Daily Chg %, Mkt Value, Unrealized P&L) plus a Total line. Session badges (PRE/AH/CLS) are appended to the last price when applicable. If a price cannot be fetched, N/A is shown instead.

Interactive dashboard (TUI)

Running stonks without a subcommand launches the dashboard automatically. Prices refresh every 60 seconds by default.

# Launch the TUI (dashboard is the default command)
stonks

# Equivalent -- explicit subcommand
stonks dashboard

# Refresh prices every 30 seconds instead
stonks dashboard --refresh 30

# Open two portfolios side by side
stonks -p personal -p work

Add a position

# Add 10 shares of Apple at $150.00
stonks add AAPL 10 150.00

# Add a non-US stock (ASML on Euronext Amsterdam)
stonks add ASML.AS 5 680.00

# Add crypto (symbol is resolved automatically via the bundled coin map)
stonks add BTC-USD 0.5 60000.00

# For precise control, set external_id directly in the YAML:
#   external_id: bitcoin

# Use a named portfolio (resolves to ~/.config/stonks/work.yaml)
stonks -p work add NVDA 2 800.00

When a symbol is added a second time, the quantity is increased and the average cost is recalculated as a weighted average automatically.

Remove a position

# Remove 5 shares (partial close)
stonks remove AAPL 5

# Remove all shares (position deleted)
stonks remove AAPL 10

Manage cash

# Deposit cash
stonks add-cash USD 5000.00
stonks add-cash EUR 2000.00

# Withdraw cash (partial)
stonks remove-cash USD 500.00

# Withdraw all remaining cash of a currency (position deleted)
stonks remove-cash EUR 2000.00

Cash is displayed in the dashboard below the stock positions and is included in the total portfolio value converted to the base currency.

List portfolios

stonks list

Lists all .yaml files found in ~/.config/stonks/.

Importing positions

Positions can be bulk-imported from broker exports instead of being added one by one.

Broker Command Guide
Interactive Brokers stonks import ibkr positions.csv docs/import/interactive-brokers.md

Health checks (doctor)

Run stonks doctor to verify that the environment is configured correctly before opening the TUI:

stonks doctor

# Check a specific portfolio
stonks -p work doctor

# Check multiple portfolios at once
stonks -p personal -p work doctor

Each check prints a coloured OK, WARN, or FAIL line. The command exits with code 0 when everything passes and code 1 if any hard check fails.

Check What it verifies
Python version Interpreter is 3.11 or newer
stonks-cli version Installed version vs. latest PyPI release
exchange-calendars NYSE calendar loads and today's session is readable
Portfolio file File exists and parses without errors; reports position/cash/watchlist counts
yfinance Fetches AAPL fast_info as a live connectivity probe
CoinGecko Hits /ping; warns if COINGECKO_DEMO_API_KEY is unset
Forex rates Fetches a live EUR/USD rate via yfinance
Symbol validation Probes each ticker in the portfolio; equity in parallel, crypto via CoinGecko batch
AI Chat (advisory) Reports whether OPENAI_API_KEY is set; never causes a failure

Symbol validation is skipped for equity symbols when yfinance is unreachable, and for crypto symbols when CoinGecko is unreachable, to avoid a flood of redundant errors.


Dashboard

Columns

Column Description
Instrument Ticker symbol
Exchange Exchange name derived from ticker suffix (e.g. NYSE/NASDAQ, Crypto)
Qty Number of shares held
Avg Cost Average purchase price per share
Last Price Most recent price; tagged PRE, AH, or CLS for non-regular sessions
Daily Chg Absolute price change vs. the previous close (green / red)
Daily Chg % Percentage change vs. the previous close (green / red)
Mkt Value Current market value (Qty * Last Price)
Unrealized P&L Profit/loss vs. average cost (bold green / bold red)

Both daily change columns show -- for closed-session tickers (CLS).

A Total line at the bottom converts all positions and cash to the portfolio's base currency using live forex rates.

Watchlist rows are dimmed and only show Instrument, Exchange, Last Price, and Daily Chg columns -- all other columns display --.

Column widths are distributed proportionally and reflow automatically when the terminal is resized.

Session labels

US equities on exchanges that support extended hours show a session tag next to the price:

Tag Session
PRE Pre-market
AH After-hours / post-market
CLS Market closed
(none) Regular trading hours

Non-US equities and crypto show no tag during regular hours and CLS when the market is closed (using holiday-aware calendar data).

Keyboard shortcuts

Key Action
a Add a new position (equity, crypto, ETF, cash)
e Edit the currently selected position
r Remove the currently selected position
Enter Open the detail screen for the selected row
f Open the detail screen for the selected row
g Open the candlestick chart for the selected row
Tab Switch focus between portfolio tables
c Open the AI chat assistant
b Run a portfolio backtest
n Toggle the news feed panel
l Open the log viewer
q Quit

Column headers are clickable -- click once to sort ascending, again to sort descending.


News feed

Press n from the dashboard to toggle the news feed panel. It shows the most recent headlines across all your portfolio symbols and watchlist items, sourced from Yahoo Finance. Articles older than 3 days are filtered out automatically.

Each row shows the publication time, symbol, headline, and source. Click a headline to open it in your browser.


Candlestick chart

Press g on any equity or watchlist row to open an interactive OHLC candlestick chart directly in the terminal. Press Escape or Q to return to the dashboard.

Time ranges

Label Period Interval
1D 1m 1 day 1 minute
1D 2m 1 day 2 minutes
5D 5m 5 days 5 minutes
1M 15m 1 month 15 minutes
3M 1h 3 months 1 hour
6M 1d 6 months 1 day
1Y 1d 1 year 1 day
5Y 1wk 5 years 1 week

The default view opens at 5D 5m.

Keyboard shortcuts

Key Action
Left Move cursor to the previous candle
Right Move cursor to the next candle
Home Jump to the first (oldest) candle
End Jump to the last (newest) candle
+ / = Zoom in (narrower interval)
- / _ Zoom out (wider interval)
Up Expand Y-axis range
Down Narrow Y-axis range
Escape / Q Close and return to the dashboard

When you reach the leftmost or rightmost candle, the chart automatically prefetches older or newer data so you can scroll continuously through history. Zooming recentres on the candle under the cursor.


Stock detail screen

Press Enter on any equity or watchlist row to open a full-screen detail view. Press Escape or Q to return to the dashboard.

The detail screen displays:

  • Performance -- trailing returns (YTD, 1Y, 3Y, 5Y) compared side-by-side with the S&P 500
  • Price charts -- interactive terminal charts for 1 Day, 1 Month, 1 Year, and 5 Years
  • Financial summary -- previous close, open, bid/ask, day range, 52-week range, volume, market cap, P/E, EPS, earnings date, dividend yield
  • Earnings trends -- quarterly EPS actual vs. estimate bar chart; revenue vs. net income chart
  • Analyst insights -- price targets (low / mean / high), consensus rating, and a monthly recommendations breakdown (Strong Buy to Strong Sell)
  • Statistics -- valuation measures and financial highlights

AI Chat

Press c from the dashboard to open the AI chat assistant. The assistant has access to your live portfolio snapshot, current prices, forex rates, and recent news headlines, so it can answer questions grounded in your actual data.

Requirements

Set the OPENAI_API_KEY environment variable before starting stonks:

export OPENAI_API_KEY=sk-...
stonks

The input field is disabled with an error message if the key is missing or if live prices have not yet loaded.

Environment variables

Variable Default Description
OPENAI_API_KEY (required) Your OpenAI API key
OPENAI_MODEL gpt-5.4-mini Model to use for chat completions
OPENAI_BASE_URL (OpenAI) Override the API endpoint (proxies, local LLMs)

OPENAI_BASE_URL is useful for pointing the client at any OpenAI-compatible server -- for example Ollama, LM Studio, or a corporate proxy:

export OPENAI_BASE_URL=http://localhost:11434/v1
export OPENAI_MODEL=llama3
stonks

Usage

  • Type a question in the input field and press Enter to send.
  • The assistant streams the reply as Markdown directly in the chat log.
  • Previous messages are kept in context within the session.
  • Press Escape to close the chat and return to the dashboard.

What the assistant can help with

  • Portfolio breakdown -- positions, P&L, concentration risk
  • Market context -- connecting recent headlines to your holdings
  • App usage -- how to load portfolios, configure watchlists, use the CLI

The assistant will not invent prices, news, or ratings. If data is unavailable it will say so explicitly.


Logging

stonks-cli writes structured log messages to a platform-specific file:

Platform Path
Linux ~/.local/state/stonks/log/stonks.log
macOS ~/Library/Logs/stonks/stonks.log
Windows %LOCALAPPDATA%\stonks\Logs\stonks.log

The default verbosity is WARNING (only warnings and errors are recorded). Use --log-level to capture more detail:

# Capture all debug output
stonks --log-level DEBUG

# Capture info and above
stonks --log-level INFO dashboard --refresh 30

Log entries follow the format:

YYYY-MM-DDTHH:MM:SS  LEVEL     logger_name  message

Running with Docker

Build the image

docker build -t stonks .

Run the container

docker run --rm -it \
  -v ./config/sample_portfolio.yaml:/data/portfolio.yaml:ro \
  stonks --portfolio /data/portfolio.yaml dashboard

The -v flag bind-mounts a local YAML file into the container. Replace ./config/sample_portfolio.yaml with the path to your own portfolio file. Drop :ro if you want add / remove commands to persist changes back to the host.


Backtesting

Press b from the dashboard to open the backtest configuration form. Backtesting simulates how your portfolio's current allocation would have performed over a historical period, compared against a benchmark index.

Configuration

Field Default Description
Benchmark Symbol SPY Ticker to compare against (e.g. SPY, QQQ, VT)
Starting Amount 10000 Initial investment amount in USD
Start Year 2010 First year of the simulation
End Year current Last year of the simulation
Yearly Cashflows 0 Additional amount contributed each year
Rebalancing none none, monthly, or annual rebalancing strategy
Skip unavailable on Skip positions without historical data for the period

The portfolio's current allocation weights are held constant throughout the simulation. Historical prices are fetched from Yahoo Finance.

Results

The backtest results screen displays:

  • Portfolio Growth chart -- cumulative value of the portfolio vs. the benchmark over the full period
  • Annual Returns chart -- side-by-side grouped bar chart showing yearly returns for the portfolio and benchmark, with annotated values
  • Summary statistics -- CAGR, max drawdown, Sharpe ratio, best/worst year, and final portfolio value for both the portfolio and the benchmark

If any position symbols lack historical data for the requested start year and Skip unavailable is unchecked, an error message is shown with the earliest available date for each symbol. When the checkbox is enabled (the default), those positions are excluded automatically and their weights are redistributed among the remaining symbols. Skipped positions are listed at the top of the results screen. The benchmark symbol is always required regardless of this setting.

Press Escape or Q to return to the dashboard.


Market analysis

stonks

Looks bullish.

Contributing

Contributions are welcome! Please read CONTRIBUTING.md for development setup, coding style, commit message conventions, and the pull request workflow.

For the release process, see RELEASING.md.


License

MIT License. See LICENSE for details.