Own your investment data.Then put it to work.
Pyx pulls everything you hold into one encrypted database on your machine, then hands you the tools to actually use it: a real chart workspace, tags, markdown notes, transaction analysis, honest returns, and any AI you choose. All of it reads your database. None of it reads anyone else's.
Free. No account, no cloud, and no card until you connect a broker. Brokerage sync is $7 a month or $70 a year. In beta on macOS, Windows, and Linux.
At a glance, then as deep as you like.
Pyx opens to the numbers that matter and keeps the research a keystroke away: a decade of financials on any company, peers against your own tags, charts, notes, transactions, honest returns. All of it on your machine, all of it yours to use directly.
Optional. Pyx ships no model and no chatbot. If you already use an agent, it can work from the same database and the same research store, with eight built-in skills it can run as prompts.
What were my biggest movers this month?
One portfolio. Every angle on it.
Pyx opens to the whole picture and keeps every other view one keystroke away. The sidebar is the map: pinned tickers and charts, the companies you researched last, Holdings, Allocation, Performance, Notes, saved charts, and your tags, with a full research page behind every ticker. One database underneath, many ways to read it.
A dashboard you arrange.
One headline number over a grid of widgets: performance, allocation, holdings, tags, a market snapshot, income with upcoming earnings, and recent activity. ⌘E lets you drag, resize, or remove any card. The gear on each one picks its symbols, ranking, or breakdown. Start from the Default, Focus, or Research preset, and the layout is still there tomorrow.
Connect Fidelity, Schwab, Vanguard, Robinhood, Interactive Brokers, or any of the forty institutions SnapTrade supports, or import OFX, QFX, and CSV statements with no third party at all. Hold in dollars, euros, pounds, yen, or any of 36 currencies. Pick one base currency and every total converts at that day's FX rate, while prices and trades keep their own. Every value is computed locally from your own database.
The data never leaves.
Every other portfolio tool asks you to surrender the portfolio in order to see it. Pyx inverts that. A complete accounting of where your data can go:
On your machine
Everything. Holdings, transactions, history, and settings live in one database file on your disk, encrypted at rest by default. The key lives in the OS keychain, brokerage and license secrets sit in a second encrypted file under that same key, and both are zeroized in memory after use.
On our servers
Nothing. There is no Pyx cloud, no account, no login. We could not read your portfolio if we wanted to.
To third parties
Nine hosts, allowlisted in source: Yahoo Finance for market data and FX rates, SnapTrade for brokerage sync, SEC EDGAR for filings and fundamentals, the Pyx license check, and the update path. Any other outbound request is blocked and logged.
The allowlist is a single file in the source code. No telemetry host exists in it, so even a bug could not phone home. The complete host list is published in the Privacy Policy.
Press ⌘⇧M and every amount disappears.
One keystroke masks every amount across the app, in any currency, for over-the-shoulder moments. Percentages stay visible, so the shape of the day survives. Persisted between sessions, also reachable from the command palette.
Any company, to the depth of the filing.
Type a ticker and the security page assembles a decade of fundamentals from SEC EDGAR and Yahoo: statements, growth, margins, multiples against their own history, peers, estimates, ownership, and the filing index. Held or not. Every number carries its source.
Returns against your benchmark, then the position you hold.
YTD, one, three, and five year returns sit beside SPY or whichever benchmark you set. If you own the name, shares, average cost, gain, and weight appear before the first module. The control row above pins as you scroll and sets the window, frequency, and peer set for every module at once.
The same analysis, three places
Peer Comparison, the scatter, and the CSV export also live on every tag page, run against the tag's members. The Holdings table takes the valuation columns, and the holdings drawer carries the multiples and eight quarters of financials.
Every number has a source
SEC EDGAR and Yahoo, merged per period and cached locally. Hover a cell for the formula and its inputs. Right-click to copy the value, the row, the table, or the formula. Any EDGAR row opens the filing.
Your layout, pinned controls
Eleven modules, each collapsible, hideable, and reorderable, saved per user. One control row sets the window, the frequency, and the peer set for all of them, and stays pinned as you scroll.
Your notes live here too
Every note linked to the security, directly or through a tag, stacks in the Notes card, newest first. Generate brief writes a company brief from the data Pyx has cached, and if an agent wrote a note the caption says which one and when.
⌘K, a ticker, Enter. The page opens from any holding, tag member, peer row, or chart legend too, and Esc walks the breadcrumb back.
A chart workspace, not a chart widget.
A multi-pane workspace with 8 chart types, 12 composable indicators, drawings that persist, and ranges from one day to max with custom calendar windows.
Honest comparison
Percent-normalized mode rebases any set of series to a common start. Chart holdings, whole accounts, or any symbol together.
Multi-pane layouts
Up to 2×2. Each pane carries its own series, indicators, and drawings.
8 drawing tools
Anchored to bars and prices, not pixels, so they survive zoom, pan, and restarts. Full undo and redo.
Workspaces are files
⌘S saves the whole layout as a TOML file you own. ⌘O opens it later. The workspace is text, not a cloud object.
Your target-date fund is not one holding.
Regroup the whole portfolio by asset class, sector, region, or account type in one click. Lookthrough decomposes every fund into the regions and sectors inside it, using a dataset that ships with the app. The analysis never touches the network.
Five schemes
Sector, asset class, region, account type, and custom groupings you define in classifications.toml, hot-reloaded on edit.
Three views
Donut, treemap, and full-width bars, with drill-down and breadcrumbs at every level.
Targets and drift
Set target weights per category and see exactly where you sit over or under them.
Deposits are not gains.
Pyx computes time-weighted returns with proper external cash flow handling, the way an institution would. A deposit moves your balance; it never inflates your return.
Events on the curve
Every buy, sell, and dividend is plotted where it happened. Hover a marker and the exact trades behind it appear, down to the share count and fill price.
Benchmark anything
Overlay any ticker as the benchmark. SPY by default, yours by setting.
Per-account focus
Multi-select accounts to compare them side by side or aggregate any subset, across the same ranges as the chart workspace.
Every transaction, on the record. And yours to take.
The full history in a virtualized table: filter by account, kind, date range, or free text, grouped or flat, sorted any way. Multi-year histories scroll without a stutter.
CSV of exactly what you see
Filter the table by account, kind, date range, or free text, then export. The CSV contains the filtered view, nothing more, nothing less. Or skip the spreadsheet and ask your agent: dividends by year, interest by account, every buy of one ticker.
The database is a file
Your entire history lives in one SQLite file on your disk. Nothing is locked behind an account you could lose access to.
One ledger, every kind
Buys, sells, dividends, interest, and cash movements share one ledger, so the record is complete, not just the trades.
An audit log you can read
Every sync, import, delete, and export is recorded in an append-only local log. You can always see what the app did to your data.
Write down why you bought it.
Markdown notes that link to securities, accounts, tags, or the whole portfolio, and pin to your charts on the day you wrote them. Give one an end date and it becomes a range on the timeline. Every note is a plain markdown file in a folder you choose, so Obsidian, grep, and any editor can read it.
A page, not a text box
Each note opens as a document: a borderless title, then a body with live markdown preview in the Obsidian style. Markers hide on every line except the one you are editing, lists nest with Tab, and the saved note stays plain markdown.
Linked to what it is about
One note can reference several tickers, an account, a tag, or the whole portfolio. Any symbol works, held or not. The note then surfaces everywhere the linked thing does, including the tag's own page.
A flag on the chart
Every note pins to its date on the charts of the securities it links, beside your trades and dividends. Write the thesis, then watch what the market did with it, on one timeline.
Findable, and writable by your agent
Filter the Notes list by any linked ticker, tag, or account. Attachments stay on your disk. And with the notes switch on, the AI you connect can write dated notes too: an outlook per holding, a prep note before earnings, a policy timeline on the chart.
Right-click a holding, a chart legend row, or a tag and choose Add note. The draft opens already linked to what you were looking at.
Any AI. Your data. Your call.
Pyx ships an MCP server, not a chatbot. Bring whichever AI you already trust, Claude Code, Claude Desktop, Codex, a local model behind any MCP client, and put it to work on your actual portfolio and the research store behind it. It reads the database, runs the same financials and peer comparisons the app shows, writes research notes and tags when you allow it, and none of the conversation leaves your machine.
$ claude mcp add pyx -- /Applications/Pyx.app/Contents/MacOS/pyx-mcpOne command connects Claude Code. Every other MCP client points at the same bundled bridge, copyable from Settings. Requires an active license, and works only while Pyx is running.
Eight research workflows, shipped with the app.
Each skill is a tested, versioned workflow over the tools above: which calls to make, in what order, and how to write the result back as a research note linked to the company or tag, then put it on screen. Connected agents see them as prompts. Export writes them as Agent Skills folders for clients that keep skills on disk.
Every skill ends by saving a research document and opening it in the app. The portfolio checkup recommends and never changes a tag or a note unless you ask in that session.
A socket, not a service
Agents talk to Pyx over a local Unix socket, through a small bridge that ships inside the app. Nothing listens on the network, no relay sits in the middle, and the network allowlist gains zero hosts.
Five switches, twenty-one tools
Access is opt-in per capability: portfolio read, market research, notes, tags, and app control. Twenty-one tools cover the portfolio, performance, quotes, company profiles, a decade of financials, peer comparison, the filing index, notes, tags, and the view on screen. Each tool takes selectors, so a new metric is a new value, not a new tool.
Research from the same store the app reads
get_financials and list_filings read the fundamentals and filings Pyx already synced from SEC EDGAR and Yahoo, so they work offline and skip the research rate budget. compare_companies runs the four comp templates from the Peer Comparison module against an explicit list, one of your tags, or the related tickers.
Read-only where it counts
No tool can create, change, or delete holdings, transactions, or accounts. The connection agents reach is opened read-only at the SQLite layer, so that is physics, not policy. Agents write notes and tags, reorder your widgets, and can put a view on screen without touching what is stored.
On the record
Account numbers cross the boundary masked. Every call lands in a visible activity feed, and every change an agent makes lands in the same audit log as every other change. A research note an agent wrote says which client wrote it, derived from the log, not from the note.
Bounded by construction
Four sessions at most. Network research calls are rate limited, navigation is limited to one move every two seconds, responses are capped in size, and every tool body times out. The whole surface is documented and snapshot tested.
Built like a developer tool, because it is one.
Keyboard first, configured in text files, engineered for the people who notice.
Rust, drawn on the GPU
Native Rust with a wgpu renderer on Metal. Every frame, charts included, is rasterized on the GPU, and trackpad scroll and zoom redraw as you move.
First frame, fast
The window opens before the data loads, then everything streams in. A test in CI fails the build if the cold-start path passes 750 ms. On an M1 MacBook Pro, 16 GB, a release build reaches first frame in 593 ms, median of 5 runs.
⌘K for everything
One palette reaches every view, action, and symbol, served by a local full-text index. Live search covers tickers you don't own yet.
Rebind everything
About 70 commands take any key, multi-key sequences included, with conflict detection. Default and Vim keymaps ship now.
Config is text
Three-layer TOML configuration with hot reload. Fifteen themes built in, and custom themes are TOML files too.
Saved views
Any filter, sort, and layout saves as a named pill. Your Roth-only view is one keystroke away.
Per-lot cost basis
FIFO, LIFO, and specific identification, with unrealized gain and loss tracked per lot.
Tags that think
Tag any security and the tag becomes a view: fundamentals, upcoming earnings, and a compare chart against your benchmark.
The broker you already use.
Linking runs through SnapTrade and is read only: you log in at your broker, Pyx never sees the credentials, and no order can be placed from here. 40 institutions across six markets, and a file importer for everything else.
These link, but Pyx has no crypto asset class and does not price exchange balances.
Coverage belongs to SnapTrade and shifts over time, so the connection portal always shows the current list. If your broker is not on it, CSV, OFX, and QFX statement files import with no third party involved at all. Details in connect your brokerage.
Narrow on purpose.
Pyx is for people who know what they own and want to see it clearly. Everything it leaves out, it leaves out deliberately:
A tool that tries to be everything ends up being a feed.
A minute from now, it's yours.
The download is free and asks for nothing. Subscribe from inside Pyx when you want your brokerage synced, and the key lands by email in about a minute.
For macOS (Apple Silicon), Windows, and Linux. Every build is on the download page.