# Parallax Peer Comparison

> Research analyst peer comparison: peer snapshot, exported data, score trend analysis, and relative price performance via Parallax MCP tools. Symbol in RIC format. NOT for single stock analysis (use /parallax-deep-dive), not for portfolio analysis (use /parallax-morning-brief).

- **Type:** Skill
- **Install:** `agentstack add skill-bencharoenwong-parallax-workflows-parallax-peer-comparison`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [bencharoenwong](https://agentstack.voostack.com/s/bencharoenwong)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [bencharoenwong](https://github.com/bencharoenwong)
- **Source:** https://github.com/bencharoenwong/parallax-workflows/tree/main/plugin/skills/parallax-peer-comparison

## Install

```sh
agentstack add skill-bencharoenwong-parallax-workflows-parallax-peer-comparison
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Peer Comparison

## When not to use

- Single stock deep dive → use /parallax-deep-dive
- Portfolio analysis → use /parallax-morning-brief
- Full due diligence → use /parallax-due-diligence

## Gotchas

- JIT-load _parallax/parallax-conventions.md for RIC resolution, parallel execution, and fallback patterns
- Identifies top 2 peers automatically from get_peer_snapshot
- Peer symbols from get_peer_snapshot may lack RIC suffixes. Before passing to Batch B tools, resolve each peer symbol to RIC format using the exchange suffix table in parallax-conventions.md (e.g., GM → GM.N, F → F.N). Single-letter symbols will fail without the suffix.
- Makes 3 calls each for score trends and price series (primary + 2 peers)
- export_peer_comparison and export_price_series return structured JSON
- JIT-load `_parallax/house-view/loader.md` if an active CIO view is present. Peer-comparison is single-stock per `loader.md` §7 (read-only consumers): tilts are NOT applied to factor scoring or peer ranking. Render the FULL §7 surface: (a) §7.3 Score-vs-View Tension Banner inline between the Factor Comparison Matrix and Score Trajectory when primary stock total ≥ 7 AND its sector tilt ≤ -1; (b) §7.2 Peer-suggest conflict token under the Factor Comparison Matrix for any peer in a view-UW sector (tilt ≤ -1) or on the excludes list — flag, do not filter; the peer stays in the matrix; (c) §7.1 House View Note after Score Trajectory via `render_view_conflict(kind="blanket", ...)`; (d) §6 audit log entry per loader.md §6.1.
- When rendering §7.1/§7.2/§7.3 tokens, JIT-load `_parallax/house-view/render_helpers.md` and route every token through `render_view_conflict()`.
- When active view is present, use the view-aware disclaimer per loader.md §5 rule 5; otherwise use the standard disclaimer.
- 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.

Structured peer comparison analysis for research analysts.

## Usage

```
/parallax-peer-comparison AAPL.O
/parallax-peer-comparison AAPL.O weeks=26
```

## Workflow

Execute using `mcp__claude_ai_Parallax__*` tools. JIT-load `_parallax/parallax-conventions.md` for execution mode, RIC resolution, and fallback patterns.

### Pre-Workflow — Load Active House View

Per `_parallax/house-view/loader.md` §1 and §2: load and validate any active house view BEFORE running the workflow. If view present, capture the load preamble for rendering at the top of Output Format per §5.1, and capture the sector tilt vector + excludes — these feed §7.2 + §7.3 + §7.1 surfacing during Output Format composition. Tilts are NOT applied to scores or peer ranking; the §7 surface is read-only conflict signals. If no active view (or validation failure): run the workflow normally with the standard disclaimer.

### Batch 0 — Tool Loading

Call `ToolSearch` with query `"+Parallax"` to load the deferred MCP tool schemas before the first `mcp__claude_ai_Parallax__*` call.

### Batch A — Peer identification

1. Call `get_peer_snapshot`. Identify the peer group and top 2 most relevant peers.
2. Call `export_peer_comparison` with `format="json"`.

### RIC Resolution — Resolve peer symbols before Batch B

Peer symbols from `get_peer_snapshot` may lack exchange suffixes (e.g., `GM` instead of `GM.N`). Before proceeding, resolve each peer symbol to RIC format using the exchange suffix table in `parallax-conventions.md`. Single-letter tickers like `F` will trigger "Symbol too short" errors without the suffix.

### Batch B — Trends + price series (parallel, after Batch A identifies peers)

#### B.0 — Asset-class pre-classification (parallel, MANDATORY for price legs)

`export_price_series` is the **equity-only** price endpoint; sector/country ETFs (which `get_peer_snapshot` can occasionally surface as peers) silently return empty from it and would otherwise be dropped from the relative-price-performance comparison. Before Batch B, classify each leg (primary + top 2 peers):

- For each of the 3 legs, call `etf_profile()` in parallel.
- `{"error": "No profile data found", ...}` → equity, route through `export_price_series`.
- Non-error response → ETF, route through `etf_daily_price`.

This adds 3 calls at 1 token each (per `_parallax/token-costs.md`).

#### B.1 — Trends + price series (parallel)

Fire all 6 calls simultaneously:
- `get_score_analysis` for primary + top 2 peers (3 calls). If the user supplied `weeks=N` in the invocation, pass it as `weeks` as int N (non-default — see conventions §0.2); otherwise rely on the server default of 52.
- For each leg classified as **equity** in B.0 → `export_price_series(symbol=, days=, format="json")`. Default `days=100`.
- For each leg classified as **ETF** in B.0 → `etf_daily_price(symbol=, start_date=, end_date=)`.

**Halt-and-surface rule:** if a leg returns empty from BOTH endpoints, exclude it from the price-performance section and render an explicit note: "⚠ Could not retrieve price history for ``; relative price chart shows the remaining legs only." Never silently drop a leg without disclosure.

### Post-Workflow — House View consumer obligations

If a view was loaded in Pre-Workflow:

1. **§7.3 tension check** (primary stock): if `primary.total >= 7.0 AND view.tilts.sectors[primary.sector] ** peer comparison`. 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.
- **Peer Group** (who the peers are and why they're comparable)
- **Factor Comparison Matrix** (table: all peers x all factors)
  - *If view active*: render §7.2 Peer-suggest conflict tokens immediately under the matrix per Post-Workflow step 2. One token per conflicting peer; multiple stack vertically.
- **Score-vs-View Tension Banner** (only if view active AND primary total ≥ 7 AND sector tilt ≤ -1) — render between the Factor Comparison Matrix and Score Trajectory per Post-Workflow step 1, via `render_view_conflict(kind="score_tension", ...)`.
- **Score Trajectory** (which stock is improving/deteriorating fastest per factor)
- **House View Note** (only if view active) — render after Score Trajectory per loader.md §7.1 rendering order, via `render_view_conflict(kind="blanket", ...)`.
- **Relative Price Performance** (comparative returns)
- **Differentiation** (strengths and weaknesses vs peers)
- **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 view state):** Render `parallax-conventions.md §9.2` immediately above the disclaimer below.

If active view: use the view-aware disclaimer per loader.md §5 rule 5. Otherwise: render the standard disclaimer verbatim from `parallax-conventions.md` §9.1.

## Source & license

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

- **Author:** [bencharoenwong](https://github.com/bencharoenwong)
- **Source:** [bencharoenwong/parallax-workflows](https://github.com/bencharoenwong/parallax-workflows)
- **License:** MIT

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

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-bencharoenwong-parallax-workflows-parallax-peer-comparison
- Seller: https://agentstack.voostack.com/s/bencharoenwong
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
