The operating model
Option A — Systematised Thematic (decided 16 Aug 2026). An active
thematic portfolio run against a written policy (Investing/Policy.json):
ten sleeves with min–max bands, hard guardrails, monthly monitoring — and trades
only on a band breach or at the semi-annual windows. Defensive posture is a
triggered regime (drawdown ≥ 15% from peak, or declared), never the default.
- Claude analyses and flags; Kirill executes every trade himself.
Positions.csvon Drive is the master; this dashboard is derived; Notion is a mirror.- No margin, options, futures, crypto. No going to cash on forecasts. No selling Rolls-Royce purely because the gain is large.
- The 60% currency line is a quote/settlement-currency proxy, not economic FX look-through. US situs is an issuer/wrapper screen excluding cash, not tax advice.
New investment ideas in every review
Standing preference from 9 Sep 2026: every review considers sustainable dividend income and capital-growth ideas, including crypto, tokenised assets and private-market funds, with dated evidence, a clear yield basis, payout and debt risks, tax and FX effects, portfolio overlap, entry valuation, size and thesis failure criteria. Alternatives also require checks of investor rights, custody, redemption, eligibility and token supply. If nothing qualifies, say so. Watchlist ideas follow the existing mandate; allocation repairs retain priority. This review preference does not create automatic alerts.
Where the data comes from
- IBKR — live via the Interactive Brokers connector.
- Standard Chartered — no API. The Monthly Statement of Securities Account (issued the 1st, downloaded from the SC app) + settlement-balance screenshots. Prices and broker-record dates are shown separately.
Public-market refresh without a broker reconciliation
Public closes and reference FX can revalue the recorded holdings while quantities,
costs and cash stay at their last confirmed values. The page labels this an
estimated valuation, identifies source dates and keeps it out of the
verified account-history chart. DataStatus.json sets
brokerReconciled: false until a broker/statement reconciliation clears it.
The 29 October refresh uses 28 October Stock Analysis closes and ECB FX, with Cboe VIX dated 27 October. RR. is converted from pence to pounds; IBE1 uses the Madrid IBE ordinary-share close. London SEMI history is now in GBP, available from 19 August; BTC retains its 28 September quote. Every macro/watch quote carries its own date. The current chart week is included at its latest observation date. The saved IBKR performance extract and the full holdings-thesis screen retain their older dates.
Monthly (~1st–4th, alongside the finance run)
Investing/Statements/ (plus a settlement-balance screenshot if
cash moved).Positions.csv + FX.csv, and runs
build_portfolio.py — this page updates, and a reconciled snapshot lands in
Snapshots/. Contributions and withdrawals go into
CashFlows.csv so drawdown remains flow-adjusted.Reviews.csv — ok / watch / review, shown on the portfolio) and refreshes the
Watchlist.csv — assets outside the portfolio only — plus the news list. All read-only — no orders, alerts or
watchlist edits. Two more agents pull costs: IBKR commissions + actual time-weighted returns from the API, and SC fees, dividends and withholding from the statement. The build then draws the performance, risk, sector, market and
watchlist charts. Performance is a back-cast: today's book held constant.Trades.csv, each tagged with its basis (planned · trigger · unplanned · auto) and the plan it executes — the
dashboard's discipline scorecard reads it. A completed rebalance adds its date to
Policy.json. Rebuild, push, log the run.The band rule is the only monthly sleeve trigger: a sleeve more than 0.5 percentage points outside its policy band. A 0–0.5pp overrun is watch-only and is checked next month; hard guardrails have no tolerance. A position trade needs a named trigger, completed thesis/stop review, or approved weight-neutral wrapper migration — intended position sizes are not yet encoded.
Quarterly (3rd week of May & November)
Monthly steps plus: earnings recap per held name; conviction re-score per sleeve
(flag a thesis weak two quarters running); watchlist review for new
technology — entry only with a pre-written thesis + kill-criteria, starter ≤ 2%, funded
from a satellite sleeve; cycle watch; event-trigger review; FOMC SEP
read-through for duration. Trades still require a band/guardrail, except a staged plan
explicitly listed in Policy.json → approved_programs; the guarded Nov-2026
JPY tranche is the first such exception.
Cycle watch (inside every quarterly check)
Deep-cyclical sectors get systematically cheap at cycle troughs; the review catches the bottom deliberately instead of by headline. Watched sectors and their trough markers: shipping (orderbook-to-fleet at lows, rates below cash breakeven, P/NAV < 1, scrapping up), semiconductors (memory-price declines decelerating, inventory correction late, book-to-bill trough), energy & oilfield services (rig-count trough, service pricing below reinvestment), chemicals & fertilizers (below-mid-cycle margins, capacity closures), metals & mining (price into the cost curve, mine closures).
A sector flags entry-watch when ≥ 2 trough markers are present and sentiment is still bearish — Claude then sends a cycle signal memo with the evidence and 2–3 candidate vehicles (LSE UCITS preferred). A signal is a flag, not a trade: entries still need a pre-written thesis with kill-criteria, starter ≤ 2%, satellite funding; one signal per sector per cycle. Shipping memos carry a standing caveat — Kirill's income is already shipping-correlated, so a shipping entry concentrates household exposure beyond what the portfolio shows.
Semi-annual rebalance (3rd week of February & August)
The deep pass, timed for ~90% of earnings reported: full thesis scorecard (what the
mandate believed vs what happened), macro regime assessment, crypto market
watch, a trade-proposal list with broker routing (new core/metals buys via LSE
UCITS to walk US-situs exposure toward the US$60k estate-tax line). Kirill executes over
the window; Policy.json is amended — dated — if the mandate itself changes.
Crypto market watch (inside every semi-annual rebalance)
The mandate prohibits crypto — this is a monitoring brief, not a position. It exists so that "should we own any?" is an evidence question settled at a scheduled window, not a headline question asked at a random moment. Markers scored each window: drawdown from cycle high, halving clock (next ~Apr 2028), ETF/ETP net flows (the marginal buyer since 2024), stablecoin aggregate supply, perp funding & open interest, price vs realized price, regulatory/policy.
≥ 3 markers in trough territory with sentiment still bearish → Claude writes a
crypto signal memo. A signal is not a trade and not even a trade
permission: it puts a mandate amendment on the window's agenda. One signal per
cycle. Standing caveat — no cash flow, no valuation anchor, and no metals substitute: gold
is the ballast, bitcoin has fallen with equities in every recent stress, so it
would sit in the satellite risk budget, never the defensive one. The pre-agreed shape if
the answer ever becomes yes (non-US-situs LSE bitcoin ETP, a 0–3% digital_assets
satellite, 2% starter, bitcoin only, stop-review exempted) is written up in
Investing/Runbook.md.
Events & the defensive regime
- Pre-committed triggers live in
Policy.json(currently: Hormuz reopening → STNG review; BE weight/valuation; Oklo NRC milestone; FOMC hawkish shift). When one fires, Claude writes an event memo with the pre-committed action. Everything else obeys the 72-hour rule: no trades on headlines. - Defensive regime — enters on drawdown ≥ 15% from the validated, external-flow-adjusted snapshot peak or by declaration: pause equity adds, new cash to bonds/cash, satellites trimmed toward band minimums, core downside breaches become buy signals (rebalance into the drawdown, never sell into it). Exits under 10% drawdown. The Regime tile above tracks it.
Status
Slice 1 (this dashboard + runbooks) shipped 16 Aug 2026. Open: Slice 2 — scheduled
monthly run + statement ingest; Slice 3 — IBKR price alerts wired to the event playbook.
Canonical copy of this runbook: Investing/Runbook.md.