# Investment Council

> Pressure-test an investment thesis, trade, position, or mispricing claim through a council of five orthogonal advisors — Bear, Bull, Base Rate Skeptic, Market Structure Analyst, Risk Manager — who analyze independently, peer-review anonymously, and return a verdict tuned to DECISION (take/size this position) vs ANALYSIS (is this asset mispriced). Trigger on "council this trade/position/thesis/inv…

- **Type:** Skill
- **Install:** `agentstack add skill-viktor-milev-claude-skills-investment-council`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [viktor-milev](https://agentstack.voostack.com/s/viktor-milev)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [viktor-milev](https://github.com/viktor-milev)
- **Source:** https://github.com/viktor-milev/claude-skills/tree/main/investment-council

## Install

```sh
agentstack add skill-viktor-milev-claude-skills-investment-council
```

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

## About

# Investment Council

Five advisors calibrated for capital-at-risk decisions. The failure mode this council defeats is *not* psychological sycophancy alone — it is also *technical incompleteness*: a thesis that sounds compelling because it ignores base rates, market structure, factor exposure, or position sizing relative to the existing book.

This council is for institutional-grade thesis stress-testing — capital-at-risk decisions on a specific security, fund, portfolio, or mispricing claim. It is not for life, strategy, or business decisions, and not for fund-manager due diligence.

---

## CHANGELOG

**v1.7** — Peer-review readability + standalone-memo pass (adversarial QC audit, 2026-06-22). The governing principle: the council memo must **stand on its own** — a reader with neither the advisor responses nor the input research dossiers in front of them must still get the full picture. Edits confined to Step 3 (peer review), one line of the Step 4 synthesis prompt, the Step 5 output spec, and one Hard Rule. Council architecture — five advisors, blind independent review, randomized mapping, chairman synthesis, verdict tiers, both output files — untouched; still a single-run chat skill. Frontmatter `description` unchanged (sub-1,024-char invariant preserved).
- **Peer review is de-anonymized at presentation.** Generation stays blind (randomized A–E mapping preserved); in the *presented* transcript and HTML, Response A–E are replaced with the actual advisor names so the reader is never forced to hold a letter-to-advisor map in their head. Presentation-only — independence at generation is untouched.
- **Peer-review form norm (standalone-readability mandate).** Each review point must restate the claim it refers to, define every acronym at first use, and — critically — explain in plain English any fact or mechanic it leans on that lives only in the input dossiers. The trigger: a review line flagged "pledged shares" as a left-tail amplifier without ever stating what pledging is or why it bites, so a reader without the dossier could not evaluate it. Self-containment now takes priority over terseness; word target raised 200–250 → 250–350.
- **CIO-to-IC synopsis closes the peer review.** After the five reviews, a mandatory plain-English paragraph — no jargon, no acronyms, not reviewer- or letter-indexed — states what the cross-examination *collectively* established: the blind spots more than one reviewer flagged, the claim multiple reviewers independently elevated, and the single question the council left unresolved, in the register a CIO would use to brief an investment committee. Scoped to what the review established — explicitly **not** the chairman's verdict (no tier, no size, no recommendation).
- **Acronym discipline extended to the peer-review and synthesis prompts.** The advisor prompt already defined acronyms at first use; the review and synthesis prompts did not, which let "PW" (probability-weighted) reach the verdict undefined. Now enforced in all three.

**v1.6** — Two precision sharpenings from a backtest of an ADR (American Depositary Receipt) thesis run against the company's home-market listing (2026-06-21). Both close "named-but-not-delivered" / "asserted-without-stamp" slippage; neither changes architecture. Edits confined to the Position Context Block (two rows), one Hard Rule, and the DECISION verdict bullet. Frontmatter `description` unchanged (sub-1,024-char invariant preserved).
- **Short interest / borrow must be *stamped* even when immaterial.** The run correctly dismissed the name's borrow ("easy and cheap, no squeeze") but asserted it bare, with no grounding stamp. Now: outside the shorted/squeeze-prone class, no web-search attempt is required, but the borrow/SI characterization must carry a **stamp** — a number, or an explicit "immaterial / general-knowledge, not verified" tag. A bare "borrow is easy" is no longer acceptable. *(Deliberately worded as a stamp, not an attempt, so it does not trigger wasteful SI searches on every mega-cap.)*
- **The cost-basis tax note must be *delivered*, not merely named, on a TRIM/EXIT.** Both prior runs named "the tax-realization note" and never produced it. Now: on a trim/exit, state the **mechanical realized P&L** the action crystallizes (≈ (price − avg basis) × shares; flag that the exact figure depends on lot selection in IBKR) and whether it is a harvestable loss or a taxable gain. **Scope guard:** this is a realized-P&L flag plus a "check against your own tax treatment" pointer — NOT tax advice, NOT jurisdiction-specific rules, NOT wash-sale / holding-period / liability computation (cross-border treatment is the principal's to determine). The forward-sizing fence is unchanged.

**v1.5** — Two surgical findings from the first live run (a new-entry candidate, 2026-06-21). Edits confined to Step 1 (framing / Position Context Block), the Risk Manager advisor's data line, and the Hard Rules. Council architecture untouched; still a single-run chat skill. Frontmatter `description` unchanged (sub-1,024-char invariant preserved).
- **Short interest / borrow is now a must-attempt at framing** (Finding #1). The live run correctly *flagged* missing short interest but never *attempted* it, leaving the single most informative datapoint for a shorted name memory-not-verified. The connector does not expose SI/borrow, so web search (Ortex / Fintel / S3 / NASDAQ settlement) is the source; "unavailable" is now permitted only after a genuine attempt, never a silent memory-deferral. Added as a dedicated Position Context Block row routed to the Market Structure Analyst, and enforced as a Hard Rule.
- **Held/not-held read now explicitly surfaces whole-book overlap for the Risk Manager** (Finding #2). The positions call already returns the book; the run used it well (a put-as-partial-hedge read on an already-held thematic name, "you already own the theme"), but the spec under-described it. Codified: the read surfaces thematically/statistically adjacent holdings (names + weights) and routes them to the Risk Manager's correlation-to-existing-book mandate. **Qualitative** book-overlap is in scope; **computed** marginal risk (portfolio beta, MCR, quantitative concentration deltas) remains out of scope — the two out-of-scope statements were tightened to draw that line cleanly.

**v1.4** — Live-data grounding pass (IBKR connector). Surgical: edits confined to Step 1 (framing), the Market Structure advisor's data line, the DECISION verdict bullet, and the Hard Rules. Council architecture — five advisors, independence, peer review, synthesis, verdict structure, both output files — untouched. Remains a single-run chat skill (no Claude Code, no scheduling, no persisted state). Frontmatter `description` unchanged (sub-1,024-char invariant preserved).
- Price/52wk verification is now **connector-first**: `get_price_snapshot` for the live quote, 52wk range, prior close and distance-from-high (+ `get_price_history` for a trend read), each figure stamped real-time vs delayed. Web search is the price fallback only when the connector cannot resolve the instrument or the entitlement is absent, and remains the primary source for all non-price facts (catalyst, filings, borrow, short interest, news).
- Added a single normalized **Position Context Block**, built once at framing from read-only calls and appended to the framed question, so all five advisors read one common pre-digested baseline (independence off a shared digest, not five raw JSON reads). Carries: price + 52wk context; live options data (IV percentile, open interest, option volume) routed to the Market Structure Analyst; and a **held/not-held flag** with weight from one `get_account_positions` call, which auto-classifies new-entry vs existing-position.
- **Cost-basis / unrealized-P&L fence:** read only when held, and usable solely for the exit/trim tax-realization note and the thesis-invalidation check — never an input to forward sizing (disposition-effect guard, consistent with the anti-narrative check).
- **Book-level marginal risk (portfolio beta, MCR, correlation to book, concentration deltas) is explicitly out of scope** — a dedicated portfolio-impact pass, not this first-read skill. Sizing here is % of NAV; risk-unit sizing is deferred.
- Graceful degradation: with no IBKR connector present, price verification falls back to web search and the held-flag is skipped and noted — the skill still runs (publishable, account-agnostic).

**v1.3** — HTML report restyled to a dark, low-glare "Slate & Ember" theme (neutral graphite base, warm off-white text, a single warm-ember hairline accent — no blue, no pure black). Spec-only change to the Step 5 HTML output description; council architecture, advisor prompts, peer-review and verdict structure, and the Markdown transcript are all untouched. Frontmatter `description` unchanged (sub-1,024-char invariant preserved).

**v1.2** — QC-pass integration (adversarial audit). Closed a silent-failure gap and trimmed redundancy; architecture unchanged (single-run confirmed independently).
- Added a degraded-run rule: if live-verification cannot retrieve (search/tools off), flag all load-bearing facts as memory-not-verified and cap conviction below FAT PITCH rather than verifying from memory.
- Recalibrated the synthesis reasoning note for Opus 4.8: reasoning *method* is installed in the prompt; reasoning *depth* is a run-time setting, not an in-skill control.
- Added a length-pressure safeguard: protect advisor depth + synthesis; let the HTML report spill to an immediate follow-up rather than truncating analysis.
- Trimmed duplicate grounding/memory-flag instructions to the canonical advisor-prompt instance plus pointers.

**v1.1** — Capability-activation pass for Opus 4.8 (single-run architecture confirmed; staging rejected on evidence).
- Added mandatory live-verification of the thesis's load-bearing facts at framing (the council's highest-value demonstrated behavior, previously un-instructed).
- Reframed council convening as *independence in a single context* rather than literal parallel sub-agent spawning; real sub-agents now optional.
- Added a conviction-tiered verdict (fat pitch / favorable / fair / pass / avoid) with the fat-pitch tier gated on named conditions.
- Activated scoped extended reasoning at the chairman synthesis; made the anti-sycophancy / anti-narrative checks mandatory in the output.
- Empirical advisors (Base Rate Skeptic, Market Structure Analyst) now expected to ground figures in retrieved data and flag memory-vs-verified.
- Softened hard word caps to depth-targets; varied the Risk Manager opening; pruned orphaned workspace conventions; converted header to YAML frontmatter.

**v1.0** — Initial release.

---

## Trigger Conditions

**Mandatory triggers:** `council this trade`, `council this position`, `council this thesis`, `council this investment`, `investment council`, `pressure-test this trade`, `war room this thesis`, `stress-test this position`.

**Strong triggers** (when the question involves capital at risk, a security, a fund, a portfolio decision, or a mispricing claim): `should I buy/sell/short X`, `is X mispriced`, `is X a good trade`, `what's wrong with this thesis`, `sanity-check this trade`, `help me size this`.

**Do NOT trigger** on macro commentary without a specific position, on portfolio construction questions, or on fund manager evaluation.

---

## Decision vs Analysis — The Framing Fork

Before convening the council, classify the question:

- **DECISION question** — "Should I take this position?" The output must end with position-sizing guidance and a fit-with-existing-book check. The Risk Manager and Market Structure Analyst lead.
- **ANALYSIS question** — "Is this asset mispriced?" The output must end with a mispricing magnitude estimate (cheap/fair/rich, ideally with a sketch of fair value vs market price) and a list of what would have to be true. The Bear, Bull, and Base Rate Skeptic lead.

Some questions are both ("I think Costco is mispriced and I'm thinking of sizing it at 4% of the book"). Run both lenses; the chairman addresses both in the verdict.

State the classification in the framed question explicitly so all advisors know which mode they're in.

---

## The Five Advisors

1. **The Bear** — full short thesis. What kills this position. What the bull case is missing. Specific catalysts that mark the thesis broken. Required to commit to at least one falsifiable bear claim.

2. **The Bull** — full long thesis. Asymmetric upside. What the market is mispricing and why. What has to be true for the position to compound. Required to commit to at least one falsifiable bull claim.

3. **The Base Rate Skeptic** — quants out the qualitative story. What does the historical distribution say? What's the prior on companies/trades/themes that look like this? What's the hit rate on similar setups? Defaults to "the market is usually right" and forces the bull and bear to clear that bar. *(Grounding/memory-flag discipline per the advisor prompt.)*

4. **The Market Structure Analyst** — who's on the other side of this trade and why. Liquidity, positioning, flows, factor crowding, forced sellers/buyers, derivatives overhang. Asks whether the price is set by fundamentals or by structural pressure. Critical for any trade where the thesis is "cheap" — cheap relative to whom and why are they selling. When the Position Context Block carries live options data (IV percentile, open interest, option volume), read it directly rather than reasoning from memory — measured positioning, IV only and no Greeks. *(Grounding/memory-flag discipline per the advisor prompt.)*

5. **The Risk Manager** — position sizing, correlation to existing book, drawdown scenarios, time-to-stop-out, max acceptable loss, regret minimization. Does not care if the thesis is right; cares whether you survive being wrong. When the Position Context Block surfaces overlapping holdings, read them directly and argue concentration / correlation against the *actual* book (does this diversify or double down?) — qualitative overlap, not a computed portfolio beta. For decision questions, this advisor's output is load-bearing. *Vary the opening line run-to-run — let the survivability stance come through in the substance, not a fixed signature sentence.*

These create the right tensions for a capital-at-risk context: Bull vs Bear (direction), Base Rate Skeptic vs Bull/Bear (qualitative narrative vs prior), Market Structure vs Fundamentals (price formation), Risk Manager vs everyone else (survivability).

---

## Session Protocol

### Step 1 — Frame the Question

Bounded context scan (≤3 reads): look for any portfolio context file, recent trade notes, position-sizing rules, the user's existing book composition, any uploaded research or screen output.

**Live-verify the thesis's load-bearing facts (mandatory).** Before framing, verify the facts the verdict will turn on against present-day data — current price and distance from the relevant high/low, the key balance-sheet items (net cash/debt, share count), short interest / borrow, and any specific catalyst the thesis cites. Where a tool is available, ground them; where not, flag the figure as memory-not-verified. Correct any stale or wrong premise explicitly in the framed question (e.g., "thesis cites an entry near the prior high; the name now trades well below it, already through the stated stop; the headline cash balance is largely offset by convertible debt, leaving little net cash"). This verification is the single place the council most often adds value — do not skip it.

**Price facts are connector-first (IBKR).** Resolve the name with `search_contracts` (apply exact-symbol discipline), then take the live quote, 52-week range, prior close, and distance-from-high from `get_price_snapshot`, and a trend read from `get_price_history` (daily bars, `include_corporate_actions=true` so a split does not fake a gap, `outside_rth=false`). **Stamp ev

…

## Source & license

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

- **Author:** [viktor-milev](https://github.com/viktor-milev)
- **Source:** [viktor-milev/claude-skills](https://github.com/viktor-milev/claude-skills)
- **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-viktor-milev-claude-skills-investment-council
- Seller: https://agentstack.voostack.com/s/viktor-milev
- 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%.
