Blog

For years my “portfolio management” was opening Portfolio Performance once in a while, staring at green and red numbers, feeling something, and closing it again. That isn’t a process — it’s a mood. What I actually wanted was a routine: a repeatable check-in where I screen for new ideas, review what I already hold, and write down why I did what I did.

Three pieces make that routine work for me today: a small CLI that liberates my portfolio data, Obsidian as the place where every decision lives, and Claude Code agents that do the heavy lifting on a schedule. Here’s how they fit together.

I covered this in detail in pp-cli: Giving AI Agents Access to Your Personal Portfolio, so just the short version here.

Portfolio Performance is a fantastic open-source desktop app for tracking investments — but all that rich data is locked behind a GUI. pp-cli is a small Go tool I wrote that reads the same .xml file from the terminal and emits structured JSON:

# Current holdings as JSON — the format that makes automation possible
pp -f portfolio.xml -o json portfolios holdings "Main"

# Account cash balances
pp -f portfolio.xml -o json accounts list

# Everything at a glance
pp -f portfolio.xml -o json info

The important property: the data never leaves my machine. No brokerage OAuth, no third-party aggregator, no subscription. Just a local file and a binary. That local-first guarantee is exactly what makes me comfortable pointing AI agents at it — which is where the rest of this routine begins.

I do everything in Obsidian. Notes, tasks, journaling — and, increasingly, my investing.

That sounds like overkill until you’ve felt the alternative. Investment decisions made inside a broker’s web UI are context-free. Six months later you have a position and no memory of why. Was it a dividend play? A momentum bet? A thesis you wanted to revisit after the next earnings call? The broker doesn’t know, and neither do you.

In Obsidian, every position can be a note. Every screening result is a markdown file. Every check-in is a dated entry I can link to my daily journal. The benefits are the same ones that make Obsidian great for knowledge work in general:

  • Plain text, future-proof. My investment reasoning is in markdown, not trapped in some fintech app that might shut down next year.
  • Linking. A position note links to the analysis that justified it, to the journal entry where I bought it, and to the next review where I’ll re-check the thesis.
  • One inbox for thinking. I’m already in Obsidian all day. Putting portfolio work here means it actually gets looked at, instead of living in a tab I never open.
  • Tasks where the context is. “Re-evaluate NVDA after Q3 earnings” becomes a real task, linked to the note explaining why I want to re-evaluate it.

So the goal of the whole routine is simple: end every session with a markdown artifact in the vault. Not a feeling. A note.

Here’s the corner of my vault where the whole routine lives — a single Portfolio/ folder:

Portfolio/
├── Portfolio.md            # master note: goal, target allocation, portfolio structure
├── CLAUDE.md               # orchestrator prompt — tells the agents how to run the routine
├── Task List.md            # the sequential playbook: manual steps + agent steps, in order
├── Stock Screener/         # raw candidates the stock-explorer agent drops in
├── Shortlist/              # survivors of full analysis — one note per ticker
│   ├── ARM.md
│   ├── MU.md
│   ├── RHM.md
│   ├── ROK.md
│   └── SNOW.md
└── Reports/                # one dated portfolio check-in per review, written by the agent
    ├── portfolio_analysis_2026-05-15.md
    ├── portfolio_analysis_2026-05-22.md
    └── portfolio_analysis_2026-05-29.md

The folder is laid out as a pipeline, and Task List.md is what makes it one. It’s not a to-do list of chores — it’s the orchestration script that interleaves the manual steps only I can do with the steps the agents run:

> Run Tasks sequentially. It is NOT allowed to skip one step.

- [x] (0) (PRE-FLIGHT MANUAL STEP) Check Portfolio Performance and save.
- [x] (1) Explore stocks via agent `stock-explorer`
- [x] (2) Per stock in `./Stock Screener`, run `quick-stock-analysis`
- [x] (3) (MANUAL USER STEP) decide which stocks to proceed with
- [x] (4) Per remaining stock, run `full-stock-analysis`, save to `./Shortlist`
- [ ] (5) (MANUAL USER STEP) decide which stocks to shortlist
- [ ] (6) Run skill `portfolio-management`; consider equities in `./Shortlist`
         as allocation options; write the report to `./Reports`

Candidates flow left to right: Stock Screener/ holds whatever the explorer turns up, the survivors of full analysis land in Shortlist/, and the final portfolio review — which weighs those shortlisted names against my actual holdings — gets written to Reports/ as a dated note. The CLAUDE.md alongside it is the orchestrator instruction the agents read: load the task list, run it in order, never skip a step, and check each box as it completes. The two MANUAL USER STEP gates are deliberate — the judgment calls stay mine; the agents do everything around them.

The Reports/ folder is the heartbeat: a new portfolio_analysis_<date>.md every cycle, sitting right next to the last one, so I can see how both my thinking and my positions changed over time.

The missing piece used to be effort. Screening a watchlist properly and reviewing a portfolio is real work, and doing it weekly by hand is exactly the kind of chore that quietly gets dropped.

So I built a small Claude Code plugin — finance-skills — that turns the routine into something I can trigger with a sentence. It’s a collection of agents and skills that screen, analyze, and review, then write the result straight into my vault.

A more detailed write-up of these finance skills is coming in a follow-up post — consider this the overview.

Stock Explorer is the idea machine. It runs on a fast model and its only job is to surface companies worth a closer look — businesses that crushed an earnings announcement, shipped a product people are excited about, or pivoted into a new market. It pulls from broad internet research and from a manually curated reading list I keep (articles I’ve bookmarked but not yet processed). Output: a shortlist of tickers.

Stock Analyzer is the expert. Hand it a ticker and it does the deep work — financials, valuation, business quality, technical picture — and produces a structured report.

The agents lean on a few focused skills:

  • quick-stock-analysis — a fast, opinionated 5-gate screen that answers exactly one question: is this worth deeper analysis? It walks a decision tree (revenue growth, P/E, PEG, ROE, quick ratio) and stops at the first failure with a specific reason. A passing verdict means “worth a closer look,” nothing more.
  • full-stock-analysis — the comprehensive fundamental + technical analysis behind a real report, complete with bull/bear thesis and a recommendation.
  • portfolio-management — reads my actual holdings via pp-cli and analyzes allocation, diversification, risk metrics, and rebalancing opportunities.
  • pp-usage — the reference that teaches the other skills the exact pp-cli command syntax.

The data comes from a mix of market APIs (Yahoo Finance, FMP) and, crucially, my own portfolio through pp-cli. That last part is what makes the analysis personal rather than generic — the portfolio-management skill isn’t reasoning about some hypothetical portfolio, it’s reasoning about mine.

A typical weekend check-in is two prompts:

  1. Screen. “Find me a few interesting companies this week, then quick-screen them.” Stock Explorer surfaces candidates, quick-stock-analysis runs each through the 5 gates, and anything that survives gets a full-stock-analysis report. Each report is written to my vault as a dated markdown note.

  2. Check in. “Review my portfolio.” The portfolio-management skill calls pp-cli for current holdings, enriches them with market data, and produces a review — allocation vs. target, concentration risk, winners and losers, and concrete HOLD/ADD/TRIM/SELL suggestions. Again: written into Obsidian.

Because every skill’s deliverable is a markdown file, the output drops naturally into the vault. I link the screening notes and the portfolio review into my daily journal, turn the action items into tasks, and I’m done. Next week the new review sits right next to the last one, and I can see how my thinking — and my positions — changed over time.

Put together, the pieces form a tight little loop:

  1. pp-cli exposes my real holdings as structured, local data.
  2. Claude Code agents screen for new ideas and review existing positions, on demand.
  3. Obsidian captures every result as a linked, dated, plain-text note.

Each part is replaceable and each part is mine. The data stays local, the tooling is open, and the reasoning is written down where I’ll actually see it again. That last point matters most: the goal was never a fancier dashboard. It was to stop making investment decisions I couldn’t remember a month later — and to turn “managing my portfolio” from a vague intention into an actual, repeatable routine.

None of this is financial advice, and none of these agents make trades. They screen, analyze, and document — the decisions stay with me. That’s deliberate. The agents remove the effort that made me skip the routine, not the judgment that should stay human.