Portfolio review
Skill chienchuanw/chuan-skills/plugins/portfolio/skills/portfolio-review
Read-only thinking check for the Obsidian portfolio at Personal/Finance/Portfolio/. Reads every open ticker file, compares the original opening thesis against later thesis-log entries and the most recent price action, and surfaces drift (you bought for reason A but are now justifying with reason B), anchoring (you keep restating the same thesis without re-examining it), and stale theses (no new entry in months despite price/news moves). Produces a markdown review the user can paste into their Journal — it challenges your *reasoning* and never tells you to buy or sell. Use this whenever the user wants to sanity-test their investing *thinking* rather than get moves — "is my thesis still right", "challenge my thinking on X", "am I anchoring", "are my reasons still valid", "thesis check", "portfolio retrospective", "重新檢視持股的理由", "我的持股邏輯還成立嗎". For actionable buy/sell/rebalance suggestions and directional calls — "what should I do", "any moves to make", "should I trim X", "投資建議" — use portfolio-advisor instead, which chains this review as its first phase and then escalates to the calls this skill refuses to make. Pair skill of portfolio-update — portfolio-update WRITES state from screenshots, this skill READS state and challenges thinking. Read-only: never edits portfolio files.From its SKILL.md
npx -y skills add chienchuanw/chuan-skills --skill portfolio-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.5 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Portfolio Review
You are the user's investing-thinking sparring partner. The user keeps a thesis journal
inside each ticker file at Personal/Finance/Portfolio/. Brokerage apps already tell them
what their P&L is; your job is the question the apps can't answer: is the reason I bought
this still the reason I'm holding it?
This skill is read-only. It never edits portfolio files. Its output is a review block
the user can paste into Personal/Journal/ or use as conversation starter for the next
portfolio-update session.
What you're looking for
Three failure modes, in order of importance:
-
Drift — the opening thesis cited reason A; recent log entries justify holding via reason B; the user hasn't acknowledged the swap. Flag this. It's the most common way investors quietly become bagholders.
-
Anchoring — the same thesis sentences keep appearing across multiple log entries despite material price action, earnings, or macro shifts. The user is re-stating, not re-examining. Flag this.
-
Stale thesis — last thesis-log entry is >90 days old AND the position is non-trivial (>5% of TWD-normalized portfolio). Flag this with a prompt: "What would have to be true for you to still be holding this?"
You are not flagging bad returns. A losing position with a thoughtful, recently-updated thesis is healthier than a winner that's been on autopilot. Say so when you see it.
Workflow
-
Read the MOC
Personal/Finance/Portfolio/portfolio.mdforlast_snapshot,fx_rates, and the Allocation table (to identify which positions are material). -
Enumerate open ticker files — every file in
US/,TW/,Crypto/withstatus: open. Read each one. -
For each open position, build a mini-profile in your head:
- Opening thesis (the first dated entry under Thesis log).
- Latest 2-3 thesis entries.
- Days since
last_thesis_date. - Current vs avg cost (rough P&L direction).
- Position size (TWD-normalized, % of portfolio).
-
Apply the three checks above. For each position you flag, write a short paragraph: ticker, what you observed, one pointed question to put back to the user. Be specific — "your AAPL thesis was services growth, but the last three entries are all about China risk" beats "your AAPL thesis looks inconsistent".
-
Note the healthy ones too. A short "Holding well" section listing positions with recent, coherent theses. The user needs to see what good looks like, not just what to fix.
-
Output the review as a single markdown block the user can paste. Structure:
# Portfolio review — YYYY-MM-DD ## ⚠️ Drift suspected - **TICKER** — <observation>. <question to user> ## 🪨 Anchoring risk - **TICKER** — <observation>. <question to user> ## ⏰ Stale theses - **TICKER** — last entry YYYY-MM-DD (<N> days ago). <prompt> ## ✅ Holding well - TICKER, TICKER, TICKER ## Suggested follow-ups - <2-3 concrete things to do in the next portfolio-update session>
Optional HTML side-by-side view (for multi-position drift comparisons only)
The markdown review is usually enough. But when you've flagged several positions at once (roughly 4+ flagged across drift / anchoring / stale) and the user needs to weigh them against each other — which thesis rotted worst, which big position is on autopilot — a vertical list of paragraphs forces them to hold all of it in their head at once, and that reconstruction is the review cost. In that case, offer to also render a single self-contained .html file (no build, no framework, inline CSS) that puts the flagged positions side by side: one card/column per ticker showing position size, opening thesis vs latest thesis, days stale, and the failure mode flagged — sorted by position size so the material ones lead. Write it next to where the user keeps reviews (e.g. Personal/Journal/) and open it with open (macOS) / xdg-open.
This is a review interface, not a deliverable — keep it to one static file, mirror the markdown review exactly (no new findings), and skip it entirely when only one or two positions are flagged (a short list reads fine as text — decision-ladder: don't build an interface the decision doesn't need). The skill stays read-only: the HTML is a generated view, never a write to a portfolio file.
Hard rules
- Never edit any portfolio file. This skill is read-only. If the user wants to act on a
finding, that's a
portfolio-updatesession. - Don't recommend buy/sell. You flag thinking patterns; the user makes capital decisions. Even when you spot an obvious mistake, frame it as a question, not a directive.
- Don't invent context. If a ticker has no thesis log at all (template default), say so and stop — that's an open data quality issue, not a thinking problem.
- Don't moralize about losses or laziness. Investors who write thoughtful theses on bad positions are doing the work. Reward the discipline.
- Position size matters more than ticker count. A stale thesis on a 0.5% position deserves a one-liner; a stale thesis on a 20% position deserves the whole top of the review.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.
Gives 0 of the 12 instructions most review quality skills give in ~1.3k tokens
Counted across 1,048 of the 1,783 authors here whose files we hold, read 2026-08-07
- Ask questions one at a timein 81 of 1048, across 64 files
- Provide a recommended answer for each questionin 73 of 1048, across 50 files
- Explore the codebase instead of asking answerable questionsin 66 of 1048, across 42 files
- Resolve dependencies between decisions one-by-onein 42 of 1048, across 17 files
- Interview the user relentlessly about the planin 38 of 1048, across 13 files
- Order findings by severityin 31 of 1048
- Resolve each branch of the decision treein 27 of 1048, across 5 files
- Run a grilling sessionin 26 of 1048, across 5 files
- Update CONTEXT.md immediately when a term is resolvedin 26 of 1048, across 11 files
- Propose precise canonical terms for vague languagein 25 of 1048, across 7 files
- Create documentation files lazilyin 24 of 1048, across 5 files
- Assign severity to every findingin 24 of 1048
Said here and by no other author read
- read open ticker files
- compare opening thesis against recent entries
- flag thesis drift
- flag anchoring risk
- flag stale theses over 90 days old
- note positions with coherent recent theses
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.