Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
AI-agent investment research pipeline → privacy-safe portfolio dashboard (Claude Code, Python, SEC EDGAR, Chart.js)
Translation pending
FinanceHTMLGitHub @WiseP10OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Portfolio Dashboard — an AI-agent research pipeline, end to end
This dashboard is the last step of a personal investment-research system I designed and run myself. The system works like a small analyst team made of AI agents. They collect raw financial data, keep a structured knowledge base up to date, argue about each stock from two different angles, and turn the decision into a monthly plan. A reporting agent then renders this dashboard.Read the full README ↗Live page → https://wisep10.github.io/portfolio-dashboard/
This dashboard is the last step of a personal investment-research system I designed and run myself. The system works like a small analyst team made of AI agents. They collect raw financial data, keep a structured knowledge base up to date, argue about each stock from two different angles, and turn the decision into a monthly plan. A reporting agent then renders this dashboard.
The page you see is the public, privacy-safe build. Every dollar amount and share count has been taken out. Only percentages, portfolio weights and per-share prices are left.
Built with Claude Code (Anthropic's agentic coding tool) as the orchestrator, plus Python, the SEC EDGAR / Yahoo Finance data sources, and Chart.js. I own the system design, the rules and the data-integrity checks. The LLM agents do the reading, filing and drafting.
flowchart LR
subgraph S[1 · Sources]
A1[SEC EDGAR<br/>10-K / 10-Q / 8-K]
A2[Yahoo Finance<br/>prices · news · dividends]
A3[Broker confirmations<br/>PDF statements]
A4[Articles & notes]
end
subgraph K[2 · Knowledge base]
W[(Markdown wiki<br/>companies · sectors · themes<br/>watchlist · portfolio · analyses)]
L[Position Ledger<br/>cost basis]
O[Orders Register<br/>buy/sell levels]
end
subgraph AN[3 · Analyst agents]
B[buffet<br/>value lens]
G[growthgap<br/>growth lens]
F[finalthink<br/>synthesis → monthly plan]
end
subgraph R[4 · Reporting]
P[Python analytics<br/>performance vs indices]
WR[webreport agent<br/>HTML/CSS + Chart.js]
D[Private dashboard]
PB[Privacy build<br/>scale + mask + leak check]
GH[GitHub Pages<br/>this site]
end
A1 & A2 & A3 & A4 --> W
W --> B & G --> F --> O
L & O & W --> P --> WR --> D --> PB --> GH
All sources go into a raw/ folder that is never edited. Every later step can always be traced back to an original document.
| Source | How it is collected |
|---|---|
| SEC filings (10-K, 10-Q, 8-K + press-release exhibits) | secfetch agent → fetch_filing.py (edgartools): ticker → CIK → latest filings → saved as the original document plus a clean text version |
| News | news agent → fetch_news.py (yfinance) + web search. It filters out noise and off-topic headlines and keeps at most 3 relevant items per ticker |
| Live prices | Yahoo Finance quotes through an MCP server. They are fetched when an analysis runs and never typed in by hand |
| Dividends | fetch_dividends.py finds payments whose pay date has passed and estimates them, then asks the user for the real broker figure |
| Broker statements | Password-protected PDFs are unlocked locally. The password is entered in a pop-up and never stored |
An LLM-maintained Obsidian-style Markdown wiki follows a written schema. Every page has YAML frontmatter, a fixed section layout per page type and cross-links ([[TICKER]], [[Theme]]). Slash-commands do the routine work:
/ingest reads a source and updates every affected page. For filings it reads five fixed sections: business, risk factors, use of proceeds, related-party transactions and MD&A./research runs the full single-ticker pipeline. /compare, /screen and /query handle the questions./trade records buys and sells. /update-port refreshes prices and runs the dividend check./lint runs a wiki health check: orphan pages, stale data, contradicting claims.Current size: about 18 company pages, 12 watchlist names, 47 dated analyses and an append-only activity log with 200+ entries since June 2026.
Three specialised sub-agents each have their own written instructions:
buffet (value investing) scores the business on a 15-category fundamental checklist: moat, balance sheet, cash flow, management, valuation, margin of safety and more.growthgap (growth investing) looks for the gap between what the market expects and what the company could realistically deliver in 1–3 years. It then tests that story against hard numbers (revenue/EPS growth, ROIC, cash flow) to screen out hype.finalthink (chief strategist) reconciles the two views, settles disagreements and produces a monthly DCA (dollar-cost averaging) plan. The plan says how much to put into each stock, whether to add to an existing position or open a new one, and the entry levels.Decision rules learned the hard way are written into the system. One example is a 5-point check before buying more of a stock that is below its average cost. Another is a set of "earnings-window" rules for what to do around quarterly results.
This is the part I care about most. Every rule here exists because something actually went wrong:
| Problem that actually happened | Rule / tool that now prevents it |
|---|---|
| A cancelled buy level survived in 8 different files and was reported as "ready to fire" | Single source of truth. All live levels sit in one Orders Register. check_consistency.py flags any old level that is still repeated elsewhere |
| Prices copied into many pages went out of date | Store facts, fetch prices. The ledger stores only cost basis. Anything that depends on price is calculated from a live quote at analysis time |
| 11 dividend payments went unrecorded for 5 months, because no event ever reports them | Dividend check on every refresh. Each amount is validated: amount ÷ shares ÷ 0.85 (after 15% US withholding tax) must equal the declared rate per share |
| A "trim to 12%" rule could not be carried out, because the broker only sells whole shares | Before writing any sell rule, check that the broker can actually execute it |
| Doubt about whether total P/L was correct | Two independent methods are reconciled: P/L summed position by position vs. the account rebuilt from cash flows. They agree to within cents |
real_vs_index.py rebuilds the real account value week by week from every buy, sell, dividend and deposit. It then simulates putting the same deposits on the same dates into SPY, QQQ, US Treasuries (IEF) and the Thai SET50. SET50 uses TDEX converted to USD, because Yahoo has no history for the SET index itself. This is the fair, money-weighted way to answer "did my stock picking beat just buying the index?"perf_compare.py builds a separate "basket" view: today's holdings held unchanged over 1M to inception, compared with SPY and QQQ.A webreport agent writes wiki/overview.md and the analytics JSON into one self-contained HTML file:
Each render runs self-checks: JS syntax, sums that must reconcile, and a headless-browser screenshot.
The private dashboard contains real account figures, so the public version comes from a separate build script:
$ figure left in the text is masked.| Layer | Tools |
|---|---|
| Agent orchestration | Claude Code: custom sub-agents, slash-commands, project rules in CLAUDE.md, MCP tools |
| Data | SEC EDGAR (edgartools), Yahoo Finance (yfinance + MCP quote server), broker PDFs (Poppler / pypdf) |
| Analytics | Python 3 + pandas: weekly time-series rebuild, FX conversion, benchmark simulation |
| Knowledge base | Markdown + YAML frontmatter, Obsidian wiki-links |
| Front-end | HTML / CSS (custom design tokens, light/dark), vanilla JS, Chart.js |
| Delivery | Git, GitHub CLI, GitHub Pages |
Dashboard นี้คือปลายทางของระบบวิจัยการลงทุนส่วนตัวที่ใช้ AI agent หลายตัวทำงานร่วมกัน ขั้นตอนมีดังนี้:
Personal project for education and portfolio purposes only. Not investment advice.