$npx -y skills add mphinance/alpha-skills --skill value-complexAvantis value-factor tracker — small-cap (AVUV) and large-cap (AVLV) value in one read, straight from TickerTrace's per-fund holdings. Groups by fund tier and by position lifecycle (new/exited, conviction tilt, up-streaks), ranked by weight, and surfaces the sector themes both fu
| 1 | # Value Complex — Avantis small + large value, by weight |
| 2 | |
| 3 | This skill reads Avantis's two flagship value ETFs straight from TickerTrace's |
| 4 | **per-fund** endpoint (`/fund/<TICKER>`) and lays out what changed under the hood, |
| 5 | grouped the way the value factor actually moves: |
| 6 | |
| 7 | - **AVUV** — small-cap value ($12.5B, ~794 holdings) — the flagship. |
| 8 | - **AVLV** — large-cap value ($3.2B, ~272 holdings). |
| 9 | |
| 10 | > This is the per-fund holdings view that the daily **stock-recap** skill does |
| 11 | > *not* pull. stock-recap only hits TickerTrace's cross-fund aggregates |
| 12 | > (`/briefing`, `/institutional`, `/divergences`). This skill is the deep, |
| 13 | > by-weight, per-fund value read. |
| 14 | |
| 15 | ## What it groups, and why |
| 16 | |
| 17 | For **each fund** (small tier → large tier), three lifecycle buckets: |
| 18 | |
| 19 | 1. **🆕 New / Exited** — positions TickerTrace flags `type=NEW` or `REMOVED`. |
| 20 | Passive Avantis funds rarely open or close a name day-to-day, so when they do |
| 21 | it's meaningful. This is the literal "new adds." |
| 22 | 2. **📈 Conviction tilt** — active over/under-weighting, **inflow-stripped.** |
| 23 | Every name in an inflow day shows a positive `sharesDelta` (new money buys the |
| 24 | whole book pro-rata), so raw adds are noise. We compute each name's share growth |
| 25 | `sharesDelta/previousShares`, take the **fund-wide median as the inflow tide,** |
| 26 | and rank by the *excess* over that tide. Positive excess = the fund is genuinely |
| 27 | leaning *into* the name beyond mechanical inflow; negative = leaning out. |
| 28 | 3. **🔥 Up-streaks** — names on multi-day winning runs (TickerTrace `streaks`). |
| 29 | This is the cleanest momentum signal — independent of fund mechanics entirely. |
| 30 | |
| 31 | Then the payoff, **🔗 cross-tier synthesis:** |
| 32 | - **Sector convergence** — sectors that are streaking *and/or* tilting up in |
| 33 | **both** the small and large fund. (Exact-ticker overlap is rare because the |
| 34 | funds hold different cap tiers, so convergence is read at the sector/theme |
| 35 | level — e.g. "transports leading in both.") |
| 36 | - **Flow tell** — all-buys with zero trims = **inflows into value** (creations, |
| 37 | risk-on); a genuine mix of adds and trims = active rebalancing. |
| 38 | |
| 39 | ## How to run it |
| 40 | |
| 41 | ```bash |
| 42 | node "$HOME/.claude/skills/value-complex/scripts/gather.mjs" |
| 43 | ``` |
| 44 | |
| 45 | - Writes `runs/<date_time>/report.md` + `raw/fund_AVUV.json`, `raw/fund_AVLV.json`. |
| 46 | - Prints the report to stdout and a final JSON line with `{reportPath, rawDir}`. |
| 47 | - No key needed — `/fund/<TICKER>` is public on TickerTrace. Presents a browser |
| 48 | User-Agent (the edge WAF 403s a bare Node UA). ~5–10s. |
| 49 | - Override the base with `TICKERTRACE_API_URL`; funds with `VC_FUNDS=AVUV,AVLV,AVMV`. |
| 50 | |
| 51 | ## Present it to Mike |
| 52 | |
| 53 | Read the generated `report.md` and give a tight read, in this order: |
| 54 | |
| 55 | 1. **The flow tell first** — are both funds taking inflows (value getting bought) |
| 56 | or net trimming? That frames everything. |
| 57 | 2. **New / Exited** names per fund — rare, so always call them out by name. |
| 58 | 3. **Conviction tilt** — the inflow-stripped over-weights. These are the names the |
| 59 | fund is actually leaning into, not just buying with the tide. Name the top 3–4 |
| 60 | per tier and what sector they're in. |
| 61 | 4. **Streaks** — the momentum leaders, longest runs first. |
| 62 | 5. **The cross-tier theme** — the one or two sectors strong in *both* small and |
| 63 | large value. This is the headline ("the whole value complex is leaning into X"). |
| 64 | Tie it to the tape: what's it rotating *out of* (usually mega-cap growth). |
| 65 | |
| 66 | ## Notes / gotchas |
| 67 | |
| 68 | - **`weightDelta` is not a clean signal on its own** — it blends price drift with |
| 69 | share-count change. The report leads with the **inflow-stripped excess** instead; |
| 70 | it shows weightDelta as secondary context only. Don't present weightDelta as |
| 71 | "conviction" without the excess check. |
| 72 | - **Data is daily and can lag** — the report prints TickerTrace's `asOfDate`; |
| 73 | surface it so Mike knows how fresh it is. |
| 74 | - **Cross-tier convergence is sector-level, not ticker-level** — small and large |
| 75 | funds rarely share a ticker; agreement shows up as a shared *theme*. |
| 76 | - Each run is a point-in-time snapshot under `runs/`; nothing is overwritten and |
| 77 | old folders are safe to delete (gitignored under `.claude/`). |