AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Parallax Thematic Screen

skill-bencharoenwong-parallax-workflows-parallax-thematic-screen · by bencharoenwong

Thematic stock screen and idea analysis: build a stock universe from a theme, score top picks, layer optional macro context and regime signals, compare peers, and check financials via Parallax MCP tools. Triggers: 'screen for [theme]', 'trade ideas around X', 'thematic ideas for Y', 'stocks in Z theme', 'new ideas in [sector]'. NOT for single stock analysis (use /parallax-should-i-buy), not for p…

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add skill-bencharoenwong-parallax-workflows-parallax-thematic-screen

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-bencharoenwong-parallax-workflows-parallax-thematic-screen)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
yesterday

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Parallax Thematic Screen? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Thematic Screen

When not to use

  • Single stock analysis → use /parallax-should-i-buy
  • Portfolio review → use /parallax-client-review
  • Peer comparison of known stock → use /parallax-peer-comparison

Gotchas

  • JIT-load _parallax/parallax-conventions.md for RIC resolution, parallel execution, and fallback patterns
  • JIT-load _parallax/house-view/loader.md FIRST. Rules 3 (ground-truth check) and 4 (divergence assertion) in §5 apply UNIVERSALLY (view or no view — data-integrity requirements). Rules 1-2 and 5 apply when a view is active. Multi-sector theme queries can collapse to a single sector — divergence assertion must fire regardless of view. The user-supplied theme is sovereign per §4 — render conflict banner if theme contradicts view tilts.
  • When active view is present, use the view-aware disclaimer per loader.md §5 rule 5; otherwise use the standard disclaimer
  • buildstockuniverse searches ~65K company descriptions by semantic similarity
  • Default top_n is 5 — adjust for broader or narrower screens
  • getpeersnapshot called once per top pick (N calls) — fire in parallel
  • get_financials called for top 3 only
  • macroanalyst depends on listmacro_countries — fire as Phase A step 3 batch per conventions (3a → 3b). Cap at 3 markets per screen. Skip step 3 if invoked with --no-macro or if no covered markets are relevant to the theme.
  • get_telemetry may return "Admin org not configured" or fail — graceful skip per parallax-conventions.md. If unavailable, omit the Regime Signal sub-line in the Macro Context section (do NOT abort the screen). No --no-telemetry flag is exposed: failure is already safe (telemetry-None → no Regime Signal sub-line) and the single-call latency does not justify a separate flag surface.
  • Macro context renders as SOFT annotation. When house view is active, view tilts remain sovereign per loader.md §4 — macro_analyst output supplements but never silently re-ranks. When no view is active, macro context may drive country/sector emphasis in the Output Format only; ranking is still composite-driven.
  • If the user-supplied theme is itself a macro-condition phrase, macro overlay may read as self-confirming. Render a banner suggesting /parallax-macro-outlook for macro-first analysis, then proceed. Trigger criterion (deterministic, case-insensitive): theme string contains any of rates, inflation, recession, tariff, tariffs, yield curve, currency, USD, dollar, credit spread, GDP, monetary policy, fiscal, Fed, central bank, regime, cycle, AND does not also contain a sector/industry word (tech, energy, healthcare, financials, industrials, materials, utilities, staples, discretionary, REIT, biotech, software, etc.). List is a starting heuristic; extend per deployment context.
  • Telemetry semantics: get_telemetry returns BASKET-LEVEL regime signals (regime_tag, divergences[] with basket-level z-scores, commentary.headline) — NOT per-ticker confidence. The schema does not expose per-name signal. Render only: (a) regime_tag, (b) top 1-3 divergence basket names with sign, (c) commentary.headline — in the Macro Context section. Do NOT tag individual Top Picks rows with a "Confidence" annotation derived from telemetry; any per-name tag would be hallucinated from basket-level data. Do NOT propagate raw proprietary framework-component names or factor-decomposition values from telemetry even if exposed.
  • JIT-load _parallax/white-label/integration-pattern.md before the Pre-Render step. Loader call is load_visual_branding() (7-key visual subset; voice structurally excluded — branding["voice"] raises KeyError). Apply §5 (Branding Header) and §7 (About This Report) in Output Format.
  • Optional audience= argument: client_safe | internal_analyst; precedence follows parallax-conventions.md §13.1.

Discover investment opportunities by theme using Parallax's semantic universe builder.

Usage

/parallax-thematic-screen "AI infrastructure companies"
/parallax-thematic-screen "trade ideas around energy transition"
/parallax-thematic-screen "thematic ideas for onshoring beneficiaries" top_n=10
/parallax-thematic-screen "clean energy utilities" --no-macro
/parallax-thematic-screen "gene therapy pure plays"
/parallax-thematic-screen "AI infrastructure companies" audience=client_safe

Workflow

Call ToolSearch with query "+Parallax" to load the deferred MCP tool schemas before the first mcp__claude_ai_Parallax__* call. Execute using mcp__claude_ai_Parallax__* tools. JIT-load _parallax/parallax-conventions.md for execution mode and fallback patterns. JIT-load _parallax/house-view/loader.md for active-view validation and conflict resolution.

Pre-flight: house-view drift check

JIT-load _parallax/house-view/auto-on-load-judge-pattern.md and follow its protocol. If the protocol surfaces a banner, render it before proceeding to this skill's main workflow.

Skip this pre-flight if invoked with --skip-drift-check or if no active house view exists.

Phase A — Setup (parallel, universe 5 + list 1 + telemetry 1 + macro 5×markets (0-3) tokens)

Fire steps 1, 2, and 4 in parallel (independent). Step 3 is a dependent two-step sub-batch: step 3a (list_macro_countries) starts in parallel with steps 1/2/4, and step 3b (macro_analyst per market) fires only after step 3a returns.

  1. Load Active House View — Per loader.md §1-§2. If view present, capture tilt vector + excludes. Resolve user theme vs view per §4: theme is sovereign, but conflicts surface as banners (e.g., theme="AI infrastructure" + view says tech: -2 → screen runs as requested with "House view is UW tech; screen run per your explicit theme" banner).
  2. Build Universe — Resolve user theme vs. view per loader.md §4. If view present AND PARALLAX_LOADER_V2=1, follow loader.md §3 "Application (V2)": decompose tilts into parallel per-sector calls, merge, and dedupe. If V1, prepend tilt context to the query and call build_stock_universe once. Filter results against tilts.excludes.
  • Fallback on timeout: If build_stock_universe times out (exceeds 30s), retry once with a narrower query (e.g., single primary sector from theme, or drop secondary modifiers). If second attempt still times out or returns empty, set universe = [] and universe_status = "unavailable", continue to Phase B with the empty candidate list, and flag the unavailable state in Output Format under "Universe Built". Do NOT call check_portfolio_redundancy as a placeholder — it requires portfolio input and will fail or return nonsense. Do not abort the screen.
  1. Macro Context (skip if --no-macro flag set). Two-step batch (per parallax-conventions.md "Dependent calls"):
  • Step 3a: Call list_macro_countries to enumerate covered markets (returns canonical names like "United States", "Japan").
  • Step 3b: Infer up to 3 relevant markets from the theme (e.g., "onshoring beneficiaries" → US + Japan; "China consumer recovery" → China; geo-agnostic themes like "AI infrastructure" → US plus one other major covered market relevant to the theme). Cross-reference inferred markets against the step 3a result; only use names that match verbatim in the covered list (e.g., "United States" not "US")macro_analyst requires exact-string match per parallax-conventions.md §0.2 and fails with parameter validation error otherwise. Drop unmatched inferences silently. If no markets remain after matching, set macro_context = None. Call macro_analyst(market=, component="tactical") for each matched market in parallel. If all return unavailable, set macro_context = None and continue. Cap strictly at 3 markets per parallax-conventions.md.
  1. Telemetry — Call get_telemetry for BASKET-LEVEL regime signal context (regime_tag, divergences[], commentary.headline — see gotchas for the schema). Per parallax-conventions.md graceful fallback: if it returns "Admin org not configured" or otherwise fails, set telemetry = None and continue. Do NOT abort the screen. Telemetry does NOT expose per-name confidence — it's basket-level only, used to enrich the Macro Context section in Output Format, never to tag individual Top Picks rows.

After Phase A: Proceed to Phase B with completed universe (or placeholder if unavailable). Carry forward macro_context and telemetry for Phase C scoring annotation and Output Format rendering.

Phase B — Inline Validation (no new tool calls)

  1. Divergence assertion (per loader.md §5 rule 4 — required universally, view or no view) — REQUIRED for V1 paths. If the query named N≥2 sectors/themes, compute max_sector_share / total in returned candidates. If > 0.6, emit fail-loud warning: "universe collapsed to single sector despite multi-sector request." If PARALLAX_LOADER_V2=1, the divergence assertion is used to verify the merge quality but is less likely to trigger a hard failure.
  2. Apply freeform excludes — if view active and tilts.excludes_freeform non-empty (per loader.md §3 "Free-form excludes handling"), drop candidates matching any pattern against get_company_info name/description/sector.

After Phase B: Proceed to Phase C with validated universe.

Phase C — Scoring & Analytics (sequential coordination, ~2×top_n + 4 tokens)

C1. Ground-truth check + Score Top Picks (per loader.md §5 rule 3 — required universally) — For the top N results, call get_peer_snapshot AND get_company_info per candidate in parallel. Record returned_name (snapshot target_company) and expected_name (info name). Treat any row where returned_name ≠ expected_name after normalizing both per conventions §2 step 2 as UNTRUSTED (do not rank, flag ⚠ MISMATCH). If view active, re-rank trusted rows by composite × multiplier(holding's sector) per loader.md §3.

After C1 completes, fire C1.5, C2, and C3 in parallel (C1.5 does NOT gate C2 or C3 — rank is established by C1 and is composite-driven, so the highest-scored trusted row for C2 and the top-3 for C3 are known the moment C1 completes):

C1.5. Annotation (no re-rank, concurrent with C2/C3): Reference implementation of the Concurrent Annotation Pattern documented in _parallax/parallax-conventions.md §3.1. Tags computed in this step annotate the Output Format only. They MUST NOT change rank order, alter Top Picks membership, or override the composite score from C1. Rank is composite-driven (per loader.md §3) to preserve auditability — Macro Tag is a read-only annotation on the rank C1 produced.

  • If macro_context is present from Phase A.3, tag each trusted row with macro_tag ∈ {with-regime, against-regime, orthogonal} derived from the trusted row's primary market exposure and the corresponding macro_analyst tactical output. Primary market exposure source (deterministic): read get_company_info.country (already fetched in C1) and normalize to the canonical macro-market name returned by list_macro_countries (e.g., "US"/"USA" → "United States"). If country is missing, empty, or does not normalize to any market in macro_context, set macro_tag = orthogonal and continue — never infer market from sector or LLM judgement.

Skill authors copying this pattern: do not introduce a sort or filter step driven by macro_tag. Re-ranking by annotation breaks auditability and is the documented anti-pattern this phase exists to prevent. Downstream consumers (chained skills, exporters, dashboards) MUST also preserve all annotated rows in the Top Picks output — Macro Tag is a read-only annotation, NEVER a filter predicate. Row-preservation is a contract that applies to annotated tables; the output consumption contract below governs section-header parsing.

C2. Compare Peers — For the highest-scored TRUSTED stock (determined from C1 results, not C1.5), call export_peer_comparison with format "json".

C3. Quick Financials — For the top 3 trusted picks (determined from C1 results, not C1.5), call get_financials with statement "summary".

After C1.5, C2, and C3 complete: Append audit log entry per loader.md §6.

Output consumption contract: downstream consumers (Codex matcher, chained skills, exporters) MUST parse Output Format by section header name, not by positional order. The addition of Macro Context between Theme and Universe Built is non-breaking for any header-name-based parser.

Pre-Render — Load white-label branding

Load _parallax/white-label/integration-pattern.md §2 and compute white_label_active + client_name per that section. Apply §5 (Branding Header) and §7 (About This Report) when composing the Output Format. The loader returns exactly seven keys; any other access (e.g. branding["voice"]) raises KeyError — structurally enforced by loader.py.

Output Format

  • House View Preamble (only if view active) — render per loader.md §5 rule 1 (preamble). Per loader.md §5.1 the preamble goes at the very top — it precedes the Branding Header.
  • Branding Header (only if white_label_active AND client_name != "") — single line immediately below the House View Preamble (or at the very top if no view): **** thematic screen. Logo handling per integration-pattern.md §5: empty path → text only; URL → embed; absolute local (/ or ~) → skip embed and append Logo on file: to About This Report.
  • Theme: [theme] (brief investment thesis; note view conflict inline if applicable; if theme string is itself a macro-condition phrase, render the macro-self-confirming banner per gotchas and suggest /parallax-macro-outlook)
  • Macro Context (rendered if macro_context OR telemetry is present from Phase A) — one line per covered market (max 3) from macro_analyst: : . State explicitly whether this is supplementary (house view active, view is sovereign) or primary (no view active). If telemetry is present, append a "Regime Signal" sub-line: | top divergence baskets: | . Do NOT extend beyond what the tools returned — no LLM-confabulated narrative bridging the macro view to the theme.
  • Plain-Language Summary (under audience=client_safe only): 2-3 sentences describing the theme read and top-pick rationale for a non-specialist reader; factor names carry the §13.3 gloss, no cutoff arithmetic, framed per §12 as informational with no directives.
  • Universe Built (how many stocks found, key sectors; note any exclusions applied; surface divergence-assertion result per loader.md §5 rule 4)
  • Top Picks (table: input_ticker, returned_name (from scoring tool), expected_name (from getcompanyinfo), sector, overall score, key factor strengths; under audience=client_safe, factor-strength cells carry the §13.3 gloss; if view active, add "Tilt Effect" column; if macro_context present, add "Macro Tag" column showing with-regime / against-regime / orthogonal. Flag any row where returned_name ≠ expected_name after normalizing both per conventions §2 step 2 with ⚠ MISMATCH and exclude its scores from ranking — per loader.md §5 rule 3. Rank is composite-driven regardless of Macro Tag — that column annotates, not sorts. Do NOT add a per-name Confidence column — telemetry is basket-level only and any per-row confidence would be hallucinated.)
  • Comparison Matrix (peer comparison for lead candidate)
  • Financial Snapshot (revenue, margins, growth for top 3 trusted picks)
  • Implementation Notes (liquidity considerations, concentration/threshold arithmetic per conventions §12 — no position-sizing instructions; concentration/threshold arithmetic renders in internal_analyst mode only per §13.2)
  • About This Report (always present): one line stating branding state per integration-pattern.md §7 markdown column (render per table; do not collapse). If a logo was skipped per the Branding Header rule, append Logo on file: as a second About This Report line.

**AI-interaction disclosure (required regardless of

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.