Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
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.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.