Agentic Workflow

Agentic Portfolio Analyst

Platform

GPT-5 (V1) | Opus 4.8 (V2)

ROLE

Virtual Investment Analyst

EXPERTISE

Fintech Automation

YEAR

V1 2025 | V2 2026

Project Description

Project Description

Project Description

An automated portfolio intelligence engine designed to eliminate emotional bias from capital allocation decisions.

Originally built on GPT-5 (V1), the engine was refactored onto Claude Opus 4.8 for V2. The rebuild traded V1's OCR pipeline for native multimodal parsing and switched its market signals from stubbed to live. Since V2 runs inside the Claude subscription surface rather than a metered API, it added that live data at no per-call cost.

Utilizing Opus 4.8's native vision, the workflow reads portfolio screenshots directly, no OCR step, and maps current holdings against a proprietary 'Q-Score' algorithm.

The system autonomously calculates drift, identifies rebalancing opportunities, and generates buy directives based on strict quantitative logic rather than sentiment.

This agentic workflow, represented by the command "Workflow(StockAdvisor$AMOUNT)", ingests your latest holdings from screenshots (or the prior baseline), builds a baseline, and tags each position into buckets (e.g. Tech, Innovation, Index, Energy, Real Assets, Crypto).

It expands a curated stock/ETF candidate universe, applies hard eligibility screens, and scores picks with a live QScore (Quality 40%, Valuation 30%, Momentum 20%, Risk 10%), tagging every input as sourced, estimated, or unavailable so nothing is fabricated.

Using targets determined by the user (e.g., Tech 58%, Innovation 8%, Index 18%, Energy 5%, Real Assets 6%, Crypto 5%), it prioritizes under-target buckets and allocates exactly the amount written in the command (e.g., $500) across top names (min ticket size; no adds to over-target buckets unless signals justify).

It outputs an orders CSV, a deck (Sector Bar, Allocation by Bucket + ticker legend, 30-year projection, and This Week's Orders with a plain-English "Why This Pick" rationale), and a summary PDF, every artifact stamped with the run date and run number.

Canonical runs log their baseline and orders, then ask whether you executed them, folding new shares into the next baseline.

A0 · Screenshot Ingest Agent

V2 reads holdings screenshots natively. The OCR pipeline is gone.

It derives per-share price from position value ÷ shares, then reconciles the position total against the account balance, flagging any gap (e.g. unsettled cash or a closed position) before proceeding.

Falls back to the prior baseline when no screenshots are attached.

A1 · Baseline Builder

Calculates the Pre-Execution Baseline (excludes cash) and tags each holding into its bucket.



A2 · Universe & Eligibility Agent

Starts from current holdings + a curated universe (Tech, Innovation, Energy, Precious Metals/Real Assets, Index, Crypto proxy).

Applies hard filters (price ≥ $5, liquidity, quality sanity) and honors permanent exclusions from picks (e.g., VOO/IJH/IJR/IXUS; MMFs).



A3 · Signals Agent (Live in V2)

In V1 the allocator didn't depend on live momentum to function, to avoid potential API costs, but the slide/rationale reflected signal availability and was designed to plug into live data later.

The headline V2 upgrade: momentum is live. For under-target candidates the engine pulls 6-12 months of prices and computes trailing returns, moving-average position, and RSI, at no metered cost, since it runs on the Claude subscription surface.



A4 · QScore & Ranking Agent

Computes a composite QScore (0–100) per candidate:

Quality (40%, ROIC/margins),

Valuation (30%, EV/Sales recomputed from the live price),

Momentum (20%, live from A3)

Risk (10% leverage/ND/EBITDA).

Fundamentals are read from a self-refreshing cache that re-fetches a name only once a quarter has elapsed. Every candidate carries per-input provenance, sourced, estimated, or unavailable and a confidence label, so nothing is presented as fact that wasn't sourced.

A5 · Targeting & Allocation Engine

Uses portfolio targets (e.g. Tech 58%, Innovation 8%, Index 18%, Energy 5%, Real Assets 6%, Crypto 5%), computes gaps from the baseline, and prioritizes under-target buckets.

Allocates the exact $AMOUNT with a minimum ticket size (prevents dust buys), no adds to over-target buckets unless signals justify, and the last line auto-absorbing rounding.

Picks top QScore name within each under-target bucket and sizes orders to hit the exact dollar total.



A6 · Orders Builder & Rationale Agent

Outputs a clean orders table (Ticker, Bucket, Price, Shares, Cost, QScore) and a "Why This Pick" rationale per order: a quant line (ROIC, margins, EV/Sales, QScore).

Additionally, A6 provides a plain-English line on the pick's role in the portfolio, macro read, and main risk.

A7 · Visualization & Deck Agent

Generates charts (Sector/Theme Exposure; Allocation by Bucket with ticker legend; 30-year projection) and a slide deck whose "This Week's Orders" slide now carries the "Why This Pick" rationale, alongside a summary PDF and orders CSV.

Every artifact is named with the run date and run number (e.g. deck-6-15-2026-Run1).



A8 · Persistence & Post-Run Update Agent

Canonical runs log their metadata and update the baseline, then ask whether you executed the orders, folding new shares into the next run.

Test runs, invoked with "testWorkflow(StockAdvisor$AMOUNT)", produce the full analysis and artifacts, but write nothing to the baseline and don't advance the run counter.