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

Parallax Load House View

skill-bencharoenwong-parallax-workflows-parallax-load-house-view · by bencharoenwong

Ingest a CIO house view (PDF / text / URL / wizard) into the Parallax workflow system. Extracts structured tilts and excludes, presents a confirmation gate, then saves the view to ~/.parallax/active-house-view/ where every portfolio skill auto-loads it. Use to set, update, re-pair, extend, or clear the active house view. NOT for portfolio construction (use /parallax-portfolio-builder), not for on…

No reviews yet
0 installs
0 views
view→install

Install

$ agentstack add skill-bencharoenwong-parallax-workflows-parallax-load-house-view

✓ 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 Used
  • Shell / process execution No
  • Environment & secrets Used
  • 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-load-house-view)

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 Load House View? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

Load House View

When not to use

  • Building a portfolio → use /parallax-portfolio-builder
  • One-off scenario / what-if → describe inline to the portfolio skill, don't load as a view
  • Single-stock evaluation → use /parallax-should-i-buy

Gotchas

  • JIT-load _parallax/house-view/schema.yaml before extraction — it is the single source of truth for the YAML shape
  • JIT-load _parallax/house-view/loader.md to see what consumer skills will validate (helps you produce a valid view first time). Note: loader.md §3 (Multiplier mapping) is a normative replay dependency per reasoning chain spec — changes to multiplier values, factor ordering, or composite formula MUST coincide with a skill_version bump and break replay byte-identity for chains pinned to prior versions.
  • PDF input — use the Read tool with pages parameter for >10 pages; do NOT defuddle PDFs (we want figure context)
  • PDF extraction is not deterministic, especially on large chunked PDFs — see the determinism note in Step 1.
  • URL input — use the defuddle skill if Bash is available, else WebFetch
  • Confirmation gate is REQUIRED — the uploader must explicitly confirm extracted YAML before save (uploader_confirmed=true). Saving without confirmation breaks downstream loaders.
  • Always compute viewhash from the canonical tilts body per schema.yaml §"viewhash computation" — sorted keys, no comments, no empty fields
  • Ask uploaderrole and basisstatement via AskUserQuestion — these are required-at-institutional fields and need explicit human input
  • Auto-applied macro_regime → factor tilts (loader.md §3) MUST be surfaced to the uploader at the gate, not silently applied
  • Confirmation gate persists a pre-edit snapshot (Step 3a) when uploader chooses 'Edit specific fields' — writes extractor's pristine draft to .archive//pre_edit.yaml alongside the superseded view. No-edit confirmations skip this.
  • Every extraction attempt (Step 3b) logs an extraction_attempt audit entry to audit.jsonl — whether or not it becomes a save. Capture disposition (confirmed/edited/reextracted/rejected) + draftyaml_hash per loader.md §6.2. Append it with audit_chain.append_entry, never with the Write tool (Step 3b names the call).
  • Save (Step 4 step 10) computes a version_diff block vs parent_version_id and stashes it on the save audit entry. Only when this save supersedes a prior version.
  • Calibration manifest: Invoke manifest_cache.load_manifest() during Step 4 (Write Phase) to resolve active calibration. Handle DeadStateNoFallback or signature errors by logging a warning and falling back to the bundled-values default.
  • Reasoning Chains: Every save MUST invoke chain_emit.emit_chain() (or emit_phase_0_chain()) to produce a compliance artifact at ~/.parallax/reasoning-chains/.
  • Compliance Export: Use --export to generate a regulator-grade bundle. Validates hash-chain integrity before packaging.
  • --why is on-demand. Reads provenance.yaml first when present; the latest derivation entry for the leaf controls the answer. If type is macro_regime_rule, cite rule_ref + trigger. If type is prose_extraction or no provenance.yaml exists (legacy view), fall back to the prose.md targeted re-read. The saved house view never carries Parallax-derived overlays — augmentation happens just-in-time at consumer-skill use, with provenance recorded on the consuming portfolio/screen artifact, not on the view itself.
  • Operator verification: see [examples/testing-posture.md](../../examples/testing-posture.md)

Ingest a CIO house view (PDF / text / URL / wizard) into the Parallax workflow system.

Usage

/parallax-load-house-view 
/parallax-load-house-view 
/parallax-load-house-view 
/parallax-load-house-view                          # wizard mode — guided manual entry
/parallax-load-house-view --status                 # show active view summary
/parallax-load-house-view --clear                  # remove active view
/parallax-load-house-view --extend 2026-09-30      # push valid_through forward
/parallax-load-house-view --re-pair                # re-pair after manual prose edit (drift)
/parallax-load-house-view --edit                   # open YAML in editor; re-confirm on save
/parallax-load-house-view --export         # export regulator-grade compliance bundle
/parallax-load-house-view --why tilts.factors.momentum             # on-demand: why is this tilt set to what it is?
/parallax-load-house-view --why tilts.sectors.information_technology
/parallax-load-house-view --why factors.momentum                   # bare form — `tilts.` prefix auto-prepended
/parallax-load-house-view --version-history        # show parent chain + per-version diffs from audit.jsonl

Where the view lives

~/.parallax/active-house-view/

  • view.yaml — canonical YAML per _parallax/house-view/schema.yaml
  • prose.md — verbatim CIO narrative with paired_yaml_hash frontmatter
  • provenance.yaml — per-tilt derivation records (prose extraction / macro-regime rule / manual edit)
  • audit.jsonl — append-only hash-chained log (consumers append; this skill initializes)
  • .archive/-/ — superseded versions (kept for parent_version_id traceability)

If ~/.parallax/active-house-view/ does not exist, create it on first save. Files are written 0600, the directory is 0700.

Workflow

Call ToolSearch with query "+Parallax" to load the deferred MCP tool schemas before the first mcp__claude_ai_Parallax__* call. JIT-load _parallax/house-view/schema.yaml (canonical structure) and _parallax/house-view/loader.md (consumer expectations) before extraction.

Step 1 — Detect mode and load source

If a path or URL was given: read the source via the appropriate tool. For PDFs:

  • ≤10 pages: use Read with pages parameter in one call; proceed to Step 2.
  • >10 pages: use streaming extraction — read in 5-page chunks via Read with pages: "N-(N+4)", parse YAML incrementally, merge results. Track extraction_confidence per chunk (if a chunk fails to parse, flag ≤ 0.5 for that chunk and continue). Merged result proceeds to Step 2 with average confidence score across chunks.

Determinism note. Chunked extraction on a large PDF is the least deterministic path in this skill — re-running the same document can produce different draft values. Do not present it to the uploader as a precise read of the source. Surface a lower confidence when the source is long or dense, and rely on the Step 3 confirmation gate, not on repeated extraction attempts, to reach a value the uploader trusts.

For URLs: use defuddle or WebFetch. Skip the wizard and proceed to Step 2.

If no source was given (wizard mode): walk the uploader through the schema interactively in the order below, using one AskUserQuestion invocation per numbered group (not eight separate prompts). Skip any dimension the uploader leaves neutral.

  1. Identity: view name, uploader role (CIO / PM / Investment Committee / Strategist / Other), basis statement, effective date, valid_through (or auto_expire_days).
  2. Macro regime: growth (slowing / steady / accelerating / null), inflation (disinflation / benign / sticky / accelerating / null), rates (cutting / holding / hiking / null), riskappetite (riskon / neutral / risk_off / null).
  3. Components: econometrics_phase (macro backdrop), valuation_state (valuation), market_entropy (market state), psychological_wavelength (sentiment) — each on -2 / -1 / 0 / +1 / +2.
  4. Factors: value, profitability, momentum, lowvolatility, tradingsignals — each on -2 / -1 / 0 / +1 / +2.
  5. Sectors: present GICS sector keys; uploader picks the ones with a view, then sets each on the same -2 to +2 scale.
  6. Regions: present broad keys (developedmarkets, emergingmarkets, etc.); offer per-country drill-down only if the uploader names specific countries.
  7. Styles & themes: offer a free-text follow-up for any thematic conviction.
  8. Excludes: free-text list; for each exclude, ask for a one-sentence reason.

Default to multi-select where the schema allows. Capture extraction_confidence as 1.0 for wizard-supplied values (the uploader is the source).

Step 2 — Extract structured tilts

Produce a draft YAML conforming to _parallax/house-view/schema.yaml. For each field, also produce a extraction_confidence score (0.0-1.0) representing your confidence in the extraction.

Component extraction. Before extracting sector/region/factor tilts, read the source for component-level conviction and populate tilts.pillars (field identifier preserved for data-contract stability):

| Component | Look for | Map to | |---|---|---| | econometrics_phase | Macro backdrop framing — "constructive on growth", "recessionary", "stagflation", "soft landing" | +2 very constructive → -2 recessionary/stress | | valuation_state | Valuation commentary — "stretched multiples", "cheap vs history", "PE reasonable", "dispersion" | +2 very undervalued → -2 highly overvalued | | market_entropy | Technicals/vol/flows — "orderly rotation", "elevated VIX", "breadth deteriorating", "heavy issuance" | +2 low/ordered → -2 high/disordered | | psychological_wavelength | Sentiment/RORO — "risk-on backdrop", "frothy retail", "capitulation", "fear index elevated" | +2 very positive → -2 very negative |

Components are usually coarse — a prose view rarely articulates sub-factor level. If the source is silent on a component, leave at 0 and flag pillars extraction_confidence ≤ 0.6. Component scores are encoding-only (per loader.md §3): they are stored but do NOT auto-translate into factor multipliers.

Hedged or split-sector language is a known failure mode. When the source uses phrases like:

  • "constructive on tech but selective in semis"
  • "modestly underweight financials"
  • "barbell of growth and value"
  • "tactical opportunity"

…do not collapse to a single integer without recording uncertainty. Set the confidence to ≤ 0.7 and note the ambiguity in extraction.extraction_notes.

Factor canonical names. Use profitability (not quality) and low_volatility (not defensive) when extracting fresh. The synonyms remain valid for backward compatibility but new extractions should use the canonical set: value, profitability, momentum, low_volatility, trading_signals.

Region granularity. For prose that names specific countries (Mexico, Brazil, Indonesia, etc.), use the country-level region keys rather than collapsing into broad buckets (em_ex_china, apac_ex_japan). The full country list is in schema.yaml §regions. When the view speaks in broad terms ("EM ex-China overweight"), use the broad key. When specific ("overweight India and Mexico"), use per-country keys.

Macro regime auto-mapping (per loader.md §3): if the source implies a macro regime, populate tilts.macro_regime AND compute the factor-tilt deltas. Show the uploader the raw regime + the resulting factor deltas at the gate so they can override.

Cross-asset views are out of scope. If the source carries views on fixed income, FX, credit, commodities, or alternatives (common in full TAA workbooks), capture them in extraction.extraction_notes as "DROPPED (out of scope): " so the uploader knows what was lost. Do NOT silently discard.

Required uploader-supplied fields (cannot be extracted from source — ask via AskUserQuestion after extraction):

  • metadata.uploader_role (single-select: CIO / PM / Investment Committee / Strategist / Other)
  • metadata.basis_statement (free text — what's the basis for this view? IC meeting, strategy memo, regulatory mandate)
  • metadata.effective_date (date, default today)
  • metadata.valid_through OR metadata.auto_expire_days (date or int; default auto_expire_days = 90)

Step 3 — Confirmation gate (REQUIRED before save)

> Architectural note: the saved house view is PURE — it carries only what the source document said + what the uploader confirmed at this gate. Parallax-derived augmentation is deferred to just-in-time lookup at consumer-skill use (e.g., when /parallax-portfolio-builder detects the active view is silent on a dimension it needs for a specific portfolio decision). The augmentation provenance lives on the consuming portfolio/screen artifact, never on the saved house view. The gap_detect and gap_suggest modules in _parallax/house-view/ remain — they get JIT-loaded by consumer skills.

> Shared module. The gate display + disposition loop lives in _parallax/house-view/gate_present.py so the in-progress /parallax-make-house-view skill can reuse it. This Step describes how parallax-load-house-view uses the module; the module itself is the source of truth for display rendering and disposition vocabulary. Step 3a (pre-edit snapshot persistence) and Step 3b (extraction_attempt audit logging) remain caller-side responsibilities — the module returns the snapshot in GateResult but never writes audit rows or .archive//pre_edit.yaml. Step 3b's row is appended with audit_chain.append_entry (see §3b); it does not go through view_commit, which derives action from its --mode and has no extraction-attempt mode.

JIT-load _parallax/house-view/gate_present.py and construct a GateContext:

  • source_label: the filename / URL / "wizard" identifier from Step 1.
  • uploader_present=True (ingest framing — "Source:" prefix, extraction verb tense).
  • confidence_map: per-category confidence from extraction.extraction_confidence (keys: sectors, regions, factors, macro_regime; the maker path additionally carries pillars, which this skill omits).
  • extraction_attempt_action=True (this skill always logs the extraction_attempt row per §3b below).
  • disposition_options=["confirm", "edit", "re_extract", "reject"].

Call gate_present.run_gate_loop(draft, context, dispose_fn=..., edit_fn=...). The two callbacks bridge to AskUserQuestion:

  • dispose_fn(prompt) -> str — print prompt.display verbatim, then ask prompt.question with prompt.options via AskUserQuestion. Return the chosen disposition keyword.
  • edit_fn(current_draft, context) -> (edited_draft, edit_notes | None) — loop on AskUserQuestion per flagged field (the LOW-CONFIDENCE block from the rendered prompt is the suggested order). After all edits land, optionally ask "One line on what you changed and why? (optional)" and pass the response as edit_notes. Return the post-edit draft. The module re-renders the gate and re-invokes dispose_fn until the uploader confirms or branches to a terminal disposition.

The module returns a GateResult with disposition set to one of "confirm", "edited", "re_extracted", or "rejected". Branch as follows:

  • "confirm" — proceed to Step 4 with result.final_draft. No pre-edit snapshot to persist. Write the extraction_attempt audit row per §3b with disposition="confirmed" and draft_yaml_hash = sha256(canonical) of result.final_draft.
  • "edited" — proceed to Step 3a using result.pre_edit_snapshot (the pristine pre-edit draft, which the module captured automatically on first entry into the edit branch) and optionally result.edit_notes. Then write the extraction_attempt audit row per §3b with disposition="edited" and draft_yaml_hash = sha256(canonical) of the pre-edit snapshot — not the post-edit confirmed draft (that hash goes into view.yaml via Step 4's view_hash). The pair extraction_attempt.draft_yaml_hash + save.view_hash is the audit signature of "what the extractor produced → what the uploader shipped." Proceed to Step 4 with result.final_draft.
  • "re_extracted" — discard any holding buffer; do not write pre_edit.yaml. Write the extraction_attempt audit row per §3b with disposition="re_extracted", the rejected draft's hash, and the hint (collected via a follow-up AskUserQuestion). Re-run Step 2 with the hint added to extraction context and return to Step 3.
  • **`"reje

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.