alphacouncil-agent 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.claude/agents/alphacouncil-bear_researcher.md +39 -0
  2. package/.claude/agents/alphacouncil-bull_researcher.md +40 -0
  3. package/.claude/agents/alphacouncil-earnings_deep_dive.md +49 -0
  4. package/.claude/agents/alphacouncil-forward_expectations.md +48 -0
  5. package/.claude/agents/alphacouncil-ib_event_analysis.md +40 -0
  6. package/.claude/agents/alphacouncil-insider_sec.md +39 -0
  7. package/.claude/agents/alphacouncil-macro_regime.md +31 -0
  8. package/.claude/agents/alphacouncil-market_data.md +37 -0
  9. package/.claude/agents/alphacouncil-market_narrative.md +45 -0
  10. package/.claude/agents/alphacouncil-news_industry_management.md +49 -0
  11. package/.claude/agents/alphacouncil-portfolio_manager.md +22 -0
  12. package/.claude/agents/alphacouncil-quant_factor.md +38 -0
  13. package/.claude/agents/alphacouncil-social_pulse.md +49 -0
  14. package/.claude/agents/alphacouncil-valuation_long_short.md +45 -0
  15. package/.claude-plugin/marketplace.json +30 -0
  16. package/.claude-plugin/plugin.json +28 -0
  17. package/.codex-plugin/plugin.json +32 -0
  18. package/.grok/agents/alphacouncil-bear_researcher.md +41 -0
  19. package/.grok/agents/alphacouncil-bull_researcher.md +42 -0
  20. package/.grok/agents/alphacouncil-earnings_deep_dive.md +50 -0
  21. package/.grok/agents/alphacouncil-forward_expectations.md +49 -0
  22. package/.grok/agents/alphacouncil-ib_event_analysis.md +41 -0
  23. package/.grok/agents/alphacouncil-insider_sec.md +40 -0
  24. package/.grok/agents/alphacouncil-macro_regime.md +32 -0
  25. package/.grok/agents/alphacouncil-market_data.md +38 -0
  26. package/.grok/agents/alphacouncil-market_narrative.md +46 -0
  27. package/.grok/agents/alphacouncil-news_industry_management.md +50 -0
  28. package/.grok/agents/alphacouncil-portfolio_manager.md +24 -0
  29. package/.grok/agents/alphacouncil-quant_factor.md +39 -0
  30. package/.grok/agents/alphacouncil-social_pulse.md +50 -0
  31. package/.grok/agents/alphacouncil-valuation_long_short.md +46 -0
  32. package/.grok/config.toml +4 -0
  33. package/.mcp.json +11 -0
  34. package/.opencode/agent/alphacouncil-bear_researcher.md +45 -0
  35. package/.opencode/agent/alphacouncil-bull_researcher.md +46 -0
  36. package/.opencode/agent/alphacouncil-earnings_deep_dive.md +54 -0
  37. package/.opencode/agent/alphacouncil-forward_expectations.md +53 -0
  38. package/.opencode/agent/alphacouncil-ib_event_analysis.md +45 -0
  39. package/.opencode/agent/alphacouncil-insider_sec.md +44 -0
  40. package/.opencode/agent/alphacouncil-macro_regime.md +36 -0
  41. package/.opencode/agent/alphacouncil-market_data.md +42 -0
  42. package/.opencode/agent/alphacouncil-market_narrative.md +50 -0
  43. package/.opencode/agent/alphacouncil-news_industry_management.md +54 -0
  44. package/.opencode/agent/alphacouncil-portfolio_manager.md +28 -0
  45. package/.opencode/agent/alphacouncil-quant_factor.md +43 -0
  46. package/.opencode/agent/alphacouncil-social_pulse.md +54 -0
  47. package/.opencode/agent/alphacouncil-valuation_long_short.md +50 -0
  48. package/AGENTS.md +96 -0
  49. package/CHANGELOG.md +112 -0
  50. package/CLAUDE.md +144 -0
  51. package/LICENSE +21 -0
  52. package/README.ja.md +282 -0
  53. package/README.md +361 -0
  54. package/README.zh-CN.md +282 -0
  55. package/data/industry-map.json +74 -0
  56. package/docs/attribution.md +99 -0
  57. package/docs/personas.md +59 -0
  58. package/docs/report-contract.md +110 -0
  59. package/mcp/lib/codex.mjs +152 -0
  60. package/mcp/lib/constants.mjs +139 -0
  61. package/mcp/lib/council-options.mjs +111 -0
  62. package/mcp/lib/errors.mjs +46 -0
  63. package/mcp/lib/feeds.mjs +140 -0
  64. package/mcp/lib/fsutil.mjs +69 -0
  65. package/mcp/lib/gates.mjs +208 -0
  66. package/mcp/lib/grounding.mjs +252 -0
  67. package/mcp/lib/headings.mjs +65 -0
  68. package/mcp/lib/industry.mjs +208 -0
  69. package/mcp/lib/lang.mjs +24 -0
  70. package/mcp/lib/macro.mjs +167 -0
  71. package/mcp/lib/markdown.mjs +337 -0
  72. package/mcp/lib/markets-kr-jp.mjs +180 -0
  73. package/mcp/lib/markets.mjs +261 -0
  74. package/mcp/lib/narrative.mjs +235 -0
  75. package/mcp/lib/options.mjs +216 -0
  76. package/mcp/lib/orchestrator.mjs +541 -0
  77. package/mcp/lib/output-modes.mjs +144 -0
  78. package/mcp/lib/packets.mjs +256 -0
  79. package/mcp/lib/personas/frontmatter.mjs +80 -0
  80. package/mcp/lib/personas/registry.mjs +215 -0
  81. package/mcp/lib/preflight.mjs +174 -0
  82. package/mcp/lib/prompts.mjs +151 -0
  83. package/mcp/lib/quotes.mjs +108 -0
  84. package/mcp/lib/rpc.mjs +737 -0
  85. package/mcp/lib/run-store.mjs +140 -0
  86. package/mcp/lib/screen.mjs +283 -0
  87. package/mcp/lib/sec.mjs +131 -0
  88. package/mcp/lib/social.mjs +261 -0
  89. package/mcp/lib/tables.mjs +150 -0
  90. package/mcp/lib/text.mjs +27 -0
  91. package/mcp/lib/weights.mjs +150 -0
  92. package/mcp/server.mjs +92 -0
  93. package/opencode.json +20 -0
  94. package/package.json +61 -0
  95. package/personas/_shared/_debate_base.md +46 -0
  96. package/personas/_shared/_evidence_base.md +56 -0
  97. package/personas/_shared/_master_base.md +77 -0
  98. package/personas/analysts/earnings_deep_dive.md +118 -0
  99. package/personas/analysts/forward_expectations.md +115 -0
  100. package/personas/analysts/ib_event_analysis.md +100 -0
  101. package/personas/analysts/insider_sec.md +98 -0
  102. package/personas/analysts/macro_regime.md +66 -0
  103. package/personas/analysts/market_data.md +94 -0
  104. package/personas/analysts/market_narrative.md +94 -0
  105. package/personas/analysts/news_industry_management.md +117 -0
  106. package/personas/analysts/quant_factor.md +97 -0
  107. package/personas/analysts/social_pulse.md +102 -0
  108. package/personas/analysts/valuation_long_short.md +109 -0
  109. package/personas/debate/bear_researcher.md +96 -0
  110. package/personas/debate/bull_researcher.md +98 -0
  111. package/personas/debate/portfolio_manager.md +64 -0
  112. package/personas/masters/masters-adversarial/burry.md +137 -0
  113. package/personas/masters/masters-adversarial/dalio.md +139 -0
  114. package/personas/masters/masters-adversarial/druckenmiller.md +144 -0
  115. package/personas/masters/masters-adversarial/short_seller.md +145 -0
  116. package/personas/masters/masters-adversarial/soros.md +137 -0
  117. package/personas/masters/masters-modern/aschenbrenner.md +147 -0
  118. package/personas/masters/masters-options/natenberg.md +168 -0
  119. package/personas/masters/masters-options/sinclair.md +166 -0
  120. package/personas/masters/masters-options/taleb.md +163 -0
  121. package/personas/masters/masters-quant/asness.md +142 -0
  122. package/personas/masters/masters-quant/simons.md +143 -0
  123. package/personas/masters/masters-quant/thorp.md +143 -0
  124. package/personas/masters/masters-value/buffett.md +123 -0
  125. package/personas/masters/masters-value/duan_yongping.md +142 -0
  126. package/personas/masters/masters-value/li_lu.md +146 -0
  127. package/personas/masters/masters-value/munger.md +117 -0
  128. package/personas/masters/masters-value-classic/fisher.md +140 -0
  129. package/personas/masters/masters-value-classic/graham.md +137 -0
  130. package/personas/masters/masters-value-classic/klarman.md +138 -0
  131. package/personas/masters/masters-value-classic/lynch.md +133 -0
  132. package/personas/masters/masters-value-classic/marks.md +145 -0
  133. package/personas/verifiers/rederivation.md +97 -0
  134. package/personas/verifiers/refuter.md +99 -0
  135. package/personas/verifiers/source_fidelity.md +91 -0
  136. package/skills/agent-skills-governance/SKILL.md +42 -0
  137. package/skills/alphacouncil-agent/SKILL.md +259 -0
  138. package/skills/investment-banking/SKILL.md +70 -0
  139. package/skills/public-equity-investing/SKILL.md +74 -0
@@ -0,0 +1,54 @@
1
+ ---
2
+ description: "Retail Sentiment and Crowding Analyst for AlphaCouncil equity research. sentiment, crowding, social"
3
+ mode: subagent
4
+ model: anthropic/claude-haiku-4-5-20251001
5
+ temperature: 0.1
6
+ permission:
7
+ edit: deny
8
+ bash: deny
9
+ webfetch: deny
10
+ websearch: allow
11
+ ---
12
+
13
+ <!-- GENERATED by scripts/sync-personas.mjs from personas/. Do not edit. -->
14
+
15
+ You cover a dimension no other seat does: **how crowded this trade is, and where the circulating story differs from the filed facts.**
16
+
17
+ ## Accept this seat's boundary first, or your output does harm
18
+
19
+ Call `get_social_pulse`. You get Reddit (searched inside the equity subreddits, not site-wide), Hacker News, and whichever Bluesky handles the user configured.
20
+
21
+ **X / Twitter is not in there, and that is not a configuration problem.** As of 2026-07 there is no free discovery channel for X: Nitter search is dead on every surviving instance, the X API bills per post retrieved, xAI's x_search bills per call, StockTwits sits behind Cloudflare, and Bluesky's search requires authentication.
22
+
23
+ That means **professional FinTwit is not covered**, and that layer is precisely where the most valuable equity discussion happens. **Reddit is not a substitute for it.** State this blind spot in open_questions plainly -- do not soften it, and never imply you have seen the whole social picture.
24
+
25
+ ## What you produce
26
+
27
+ 1. **Crowding, not a sentiment score**
28
+ Do not score sentiment. Averaging a pile of retail posts yields the average of the noise. Produce instead:
29
+ - The **change in mention frequency** against an earlier window. A jump in frequency is itself a signal, independent of direction.
30
+ - The **shape of the consensus**: is the discussion one-sided or contested? One-sided optimism is crowding, and so is one-sided pessimism -- opposite directions, both risks.
31
+ - Cross-reference the put/call open-interest ratio from `get_options_chain`. Options positioning is far more reliable than post sentiment.
32
+
33
+ 2. **The gap between the story and the facts -- this seat's most valuable output**
34
+ Take each circulating claim and hold it against the filed facts in the evidence chain:
35
+ - Is there a widely believed claim the filings do not support? **This is the most valuable finding**, because it gives you the direction of the crowding and the path to falsify it at the same time.
36
+ - Is there a fact stated plainly in the filings that nobody in the discussion mentions? An ignored fact is often an unpriced one.
37
+
38
+ 3. **What Hacker News is specifically for**
39
+ HN is nearly useless on financials and occasionally very strong on **whether a technical claim is real** -- the comments routinely contain people who build the thing being discussed, correcting the article. Where the thesis depends on a technical judgment (process node, yield, architecture, performance), the comment thread is worth reading on its own.
40
+
41
+ 4. **A quoted X post must be verified**
42
+ If a news item or search result quotes an X post, confirm it with `verify_x_post`. **A decoded timestamp proves nothing** -- any invented nineteen-digit id decodes to a plausible date. Existence has to be checked separately.
43
+
44
+ ## Hard rules
45
+
46
+ - **Nothing from this layer may enter the conclusion on its own.** It can only be a lead to verify or a counter-argument, and it enters the factual basis only once a filing or a dated source confirms it. There is no exception to this.
47
+ - **Mention volume measures attention, not correctness**, and the most-engaged posts are the most emotional ones. Do not rank by engagement and read the top as representative.
48
+ - **Reddit search matches post bodies too**, so a result whose title lacks the term is normal. Each result carries `matched_in`; open the link before citing anything marked as matching in the body.
49
+ - **Where an engagement count is unavailable, write unknown. Never estimate it.**
50
+ - Search adversarially: having read the bullish discussion, run a bearish pass. You find what you search for, and that is an echo chamber rather than evidence.
51
+
52
+ ## Output
53
+
54
+ An evidence_packet. `claims` in three kinds: (1) crowding observations -- frequency, shape of consensus, options cross-reference; (2) the gap between story and filed fact; (3) community scrutiny of a technical claim, where applicable. `open_questions` **must** include the X / FinTwit blind spot.
@@ -0,0 +1,50 @@
1
+ ---
2
+ description: "Valuation & Long/Short Analyst for AlphaCouncil equity research. valuation, thesis, position-sizing"
3
+ mode: subagent
4
+ model: anthropic/claude-sonnet-4-5
5
+ temperature: 0.1
6
+ permission:
7
+ edit: deny
8
+ bash: deny
9
+ webfetch: allow
10
+ websearch: allow
11
+ ---
12
+
13
+ <!-- GENERATED by scripts/sync-personas.mjs from personas/. Do not edit. -->
14
+
15
+ Your job is to translate the business into a price range and say which assumptions that range depends on.
16
+
17
+ ## What you produce
18
+
19
+ 1. **Choose the right method first; the wrong one invalidates everything after**
20
+ - Stable, predictable earnings: DCF or an owner-earnings multiple.
21
+ - Cyclical: **use mid-cycle earnings**, never the current print. A low multiple on peak earnings is a trap.
22
+ - High growth, unprofitable: unit economics plus an endgame share, with the endgame assumption written out.
23
+ - Asset-heavy or distressed: liquidation value and replacement cost.
24
+ State which you chose and why.
25
+
26
+ 2. **Three scenarios, each with explicit assumptions**
27
+
28
+ | Scenario | Key assumptions (growth / margin / terminal multiple) | Value per share | Implied return |
29
+
30
+ - The scenarios must differ **in their assumptions**, not by flexing a midpoint 20% either way. The latter is fake scenario analysis.
31
+ - Label each assumption's origin: from a filing, from guidance, or derived by you. Derived ones must show the derivation.
32
+
33
+ 3. **Back out what the market currently assumes**
34
+ Worth more than the forward valuation: **what growth rate and margin does the current price imply?** Compute it, then say whether that implied set is aggressive, reasonable or conservative.
35
+
36
+ The disagreement always lives here -- not in what your model outputs, but in where your view of the same assumptions differs from the market's.
37
+
38
+ 4. **Comparable multiples**
39
+ List comparables where they exist, and say **why they are comparable**: same business model? same point in the cycle? same capital structure? If comparability cannot be argued, omit them -- a wrong comp set is worse than none.
40
+
41
+ ## Hard rules
42
+
43
+ - **Every assumption must be falsifiable**, written as "if X reaches Z by Y".
44
+ - **Never output a point estimate.** A single target price implies precision that does not exist. Give a range and the basis for its width.
45
+ - **State which assumption the valuation is most sensitive to**: a 10% move in which variable moves value by how much.
46
+ - Where the data cannot support a valuation, write "no defensible range can be built" and name what is missing. **Do not assemble a number out of comparable multiples to fill the gap.**
47
+
48
+ ## Your most common error
49
+
50
+ **Reaching the conclusion before building the model.** A valuation model has enough degrees of freedom to justify any target. There is one defence: **fix the assumptions and their sources first, then compute**, never the reverse.
package/AGENTS.md ADDED
@@ -0,0 +1,96 @@
1
+ # Agent Instructions
2
+
3
+ Read `CLAUDE.md` first. It defines the workflow, analyst roles, final-report requirements, evidence contract and repository boundaries.
4
+
5
+ For report-generation behavior, also follow `docs/report-contract.md`. The chat handoff may be concise, but the saved report and artifact files must preserve the full evidence chain.
6
+
7
+ For anti-laziness governance, also follow `skills/agent-skills-governance/SKILL.md`. It is bundled with the plugin so installed agents inherit the same gates without separately installing `addyosmani/agent-skills`.
8
+
9
+ Run `npm run check` after any code or prompt change.
10
+
11
+ ## Hosts
12
+
13
+ The MCP server is the load-bearing integration on every host: it reads `personas/` directly,
14
+ so a host that ignores the generated agent files still gets correct prompts.
15
+
16
+ | Host | Config | Agents | Skills |
17
+ |---|---|---|---|
18
+ | Claude Code | `.claude-plugin/plugin.json`, `.mcp.json` | `.claude/agents/alphacouncil-*.md` | `skills/` via the plugin manifest |
19
+ | Codex | `.codex-plugin/plugin.json`, `.mcp.json` | — | `skills/` via the plugin manifest |
20
+ | OpenCode | `opencode.json` | `.opencode/agent/alphacouncil-*.md` | see the caveat below |
21
+ | Grok Build | `.grok/config.toml` | `.grok/agents/alphacouncil-*.md` | `AGENTS.md` (this file) |
22
+
23
+ ### OpenCode
24
+
25
+ Verified against a real opencode 1.18.4 install rather than from documentation:
26
+
27
+ - `opencode mcp list` shows `alphacouncil-agent connected`. The MCP entry must use
28
+ OpenCode's shape — `{"type":"local","command":["node","./mcp/server.mjs"]}` — a single
29
+ argv array. Copying Claude Code's `{command, args}` produces a server that never starts,
30
+ and the env key is `environment`, not `env`.
31
+ - `opencode debug agent alphacouncil-<role>` parses the generated agent files, resolves
32
+ `anthropic/claude-…` into a provider and model, and applies their permissions.
33
+ OpenCode does **not** read `.claude/agents/`, `.mcp.json` or `.claude/settings.json`.
34
+ - `opencode.json` deliberately declares **no** global `permission` block. A global block is
35
+ merged into every agent and overrides the per-agent one, which silently hands the debate
36
+ roles the network access they are specifically denied. Verified both ways: with the block,
37
+ `bull_researcher` resolved to `websearch: allow`; without it, `deny`.
38
+ - Per-agent permissions come from each persona's `tools_hint`, so only the roles that
39
+ actually gather evidence get the network, and no role can edit files or run shell commands.
40
+
41
+ **Skills:** opencode 1.18.4 serves `debug skill` from a static catalogue -- a skill added
42
+ at runtime never appears, in any location, including `~/.claude/skills` and with a clean
43
+ `OPENCODE_CONFIG_DIR`. Tested both with and without third-party plugins. So the workflow
44
+ does not ship as skills on OpenCode; it ships through `instructions`, which IS resolved:
45
+ `opencode debug config` shows all four workflow files loaded alongside `AGENTS.md`. The
46
+ MCP tools and `.opencode/agent/*.md` carry the rest.
47
+
48
+ `websearch` is gated in OpenCode — it needs the OpenCode provider or `OPENCODE_ENABLE_EXA=1`.
49
+ Run `preflight_permissions` before a fan-out; it reads OpenCode's permission syntax too.
50
+
51
+ ### Grok Build
52
+
53
+ Verified against a real install (grok 0.2.101) rather than from documentation:
54
+
55
+ - MCP lives in `.grok/config.toml` as TOML, not JSON:
56
+ `[mcp_servers.alphacouncil-agent]` with `command`, `args` and `enabled`. Generate it with
57
+ `grok mcp add alphacouncil-agent -s project -t stdio node -- ./mcp/server.mjs` rather than
58
+ hand-writing it. Grok also lists `.mcp.json` among its config sources, so the Claude Code
59
+ file is read too.
60
+ - **A repo-local server will not start until the folder is trusted.** `grok mcp doctor`
61
+ reports `folder untrusted (repo-local (project-scoped) server not started)`. That is a
62
+ security prompt, not a misconfiguration: trust the folder on first launch.
63
+ - `AGENTS.md` is the project system prompt, which is why the generated agents set
64
+ `agents_md: true` and inherit it.
65
+ - Agent definitions are `.md` with `name` / `description` frontmatter in `.grok/agents/`.
66
+ Every generated seat uses `permission_mode: plan`, matching the bundled read-only
67
+ `explore` agent: the council gathers and reasons, it never edits the repo.
68
+ - Skills resolve from `.grok/skills/` and `.claude/skills/`. This repo ships neither, so on
69
+ Grok Build the workflow arrives through `AGENTS.md` plus the MCP tools, the same shape
70
+ that works on OpenCode.
71
+
72
+ ## Market data coverage
73
+
74
+ Structured financials come from each market's own regulator, and the pipeline degrades in
75
+ a stated order rather than quietly becoming US-only.
76
+
77
+ | Market | Regulator | Key needed | What you get |
78
+ |---|---|---|---|
79
+ | US | SEC EDGAR | none | Full XBRL history with filing dates |
80
+ | Taiwan | TWSE OpenAPI | none | Quarterly income-statement summary |
81
+ | Korea | DART | `ALPHACOUNCIL_DART_KEY` | Full statements |
82
+ | Japan | EDINET v2 | `ALPHACOUNCIL_EDINET_KEY` | Filing index; documents are XBRL in a ZIP |
83
+ | Hong Kong, China A | HKEXnews, cninfo | n/a | No machine-readable API; PDFs only |
84
+
85
+ Both keys are free. Register at <https://opendart.fss.or.kr> and at the EDINET portal,
86
+ then export them. Nothing breaks without them: `market_coverage` reports which symbols
87
+ have no feed, and the grounding block tells analysts that any financial figure for those
88
+ names must come from a primary document they actually read and be cited as such.
89
+
90
+ Korea indexes by DART's 8-digit `corp_code`, which is not the ticker -- Samsung
91
+ Electronics is `00126380`, SK hynix `00164779`. Japan uses a 5-digit `secCode`, so
92
+ `285A.T` becomes `285A0`.
93
+
94
+ Call `market_coverage` before building a report across markets. Without it a memory-industry
95
+ report quietly becomes a Micron report, because Micron is the participant whose numbers
96
+ were easy to fetch.
package/CHANGELOG.md ADDED
@@ -0,0 +1,112 @@
1
+ # Changelog
2
+
3
+ Notable changes per release. Dates are UTC.
4
+
5
+ ## [0.5.0] — 2026-07-26
6
+
7
+ Everything below is keyless: no API key, no account, no config file.
8
+
9
+ ### Added
10
+
11
+ - **Options chain** (`get_options_chain`) from CBOE delayed quotes — ATM implied-volatility
12
+ term structure, 25-delta skew, put/call ratios on open interest and volume, the strikes
13
+ holding the most open interest, and the ATM spread as a share of mid.
14
+ - **News layer** (`get_news`) over Yahoo Finance RSS, Google News RSS and SEC EDGAR Atom,
15
+ with a recency gate that excludes undated and out-of-window items rather than showing
16
+ them as recent.
17
+ - **Market narrative** (`get_market_narrative`) — what the market is currently talking
18
+ about, ranked by share of coverage, with each theme paired against the market series that
19
+ would corroborate it. A theme leading coverage while its series has not moved is the
20
+ finding, not the headline count.
21
+ - **Social layer** (`get_social_pulse`, `verify_x_post`) over Reddit, Hacker News and
22
+ Bluesky, plus single-post verification against an X post id.
23
+ - **Options bench**: Taleb, Natenberg and Sinclair, and **Michael Burry** on the
24
+ adversarial roster. The bench is now 21 lenses across six rosters.
25
+ - **Price bands are a mandatory report section.** Every seat contributes the price question
26
+ its own method implies — Graham's calculable floor, Marks' do-not-touch level, Thorp's
27
+ price at which expected value turns positive, the short seller's cover level and carry.
28
+ - `market_narrative` and `social_pulse` analyst seats, on the `full` roster. The default
29
+ fan-out stays at eight.
30
+
31
+ ### Changed
32
+
33
+ - **Masters now receive the established facts directly**, not only the analysts' packets,
34
+ with the packets relabelled as other seats' readings. Previously all 21 lenses saw the
35
+ world through one selection of what mattered, so a weak packet biased every seat
36
+ identically.
37
+ - All 21 masters state how they think, what they notice first, their characteristic
38
+ challenge, and their own failure mode.
39
+ - The ten stub personas — `bull_researcher` was 79 characters — are rewritten around what
40
+ each seat is for and how it characteristically fails.
41
+ - Verifiers gained a claim-selection rule (verification runs on a budget), their own failure
42
+ modes, and knowledge of which claims this system cannot settle at all.
43
+ - `screen_ticker` accepts a `ticker` and resolves the CIK itself; `cik` is no longer required.
44
+ - **The master bench and the verifier pass now run on every host.** They were described only
45
+ in the Claude Code section of `SKILL.md`, so on Codex and OpenCode the twenty-one lenses
46
+ and three verifiers never executed at all — the same plugin was a materially different
47
+ product depending on where it ran.
48
+ - **`list_council_options` and a mandatory Stage 0.** A council is 7 to 44 seats, which is
49
+ the user's time and money, so the host asks which one to run instead of choosing silently
50
+ — and is told when not to ask, because a confirmation nobody needed is an interruption.
51
+ - **Grok Build support**, verified against grok 0.2.101: `.grok/config.toml` (TOML, not
52
+ JSON), 14 generated `.grok/agents` definitions, and `AGENTS.md` as the project prompt. A
53
+ repo-local server stays unstarted until the folder is trusted, which is a security prompt
54
+ rather than a misconfiguration.
55
+ - `plan_visible_run` gathers the established facts itself. It previously accepted them only
56
+ if the caller passed them and nothing told the caller to, so on the visible path — the one
57
+ Claude Code uses — every analyst and every master ran with no filings, no quote and no
58
+ macro, and nothing in the output said so.
59
+ - A run that selects a master bench and records no opinions is now `incomplete`, and the
60
+ banner names the seats that never reported.
61
+
62
+ ### Fixed
63
+
64
+ - **The npm package shipped no host agent files.** `.claude/agents/`, `.opencode/agent/` and
65
+ `.grok/agents/` were all outside `files`, so an install gave you the server and no
66
+ subagent definitions for three of the four hosts.
67
+ - **`CLAUDE.md` listed three roles that no longer exist** — `sell_side_revisions`,
68
+ `earnings_call_transcript` and `management_industry_voices` — and it is loaded as an
69
+ instruction file, so an agent reading it would dispatch seats that had been merged away.
70
+ - Bilingual `{en, zh}` labels rendered as `[object Object]` next to real numbers, which reads
71
+ as a broken field rather than a missing one. A contract test now renders every surface in
72
+ both languages against object-label fixtures.
73
+ - `SKILL.md` named none of the data tools, including `screen_ticker`. It is the runtime
74
+ instruction Codex, OpenCode and Grok Build load, so a tool it never names is a tool those
75
+ hosts never call. Nothing failed; the capability was invisible.
76
+
77
+ - `screen_ticker` offered a `ticker` property in its schema and threw on anything without a
78
+ `cik`, so a caller passing the documented argument got an error.
79
+ - `get_options_chain` read its headline IV and skew from the nearest expiry, which can be
80
+ one day out. A 1-DTE ATM prices pin risk rather than volatility: on a live chain it
81
+ printed 69.6% between neighbours at 98.7% and 105.2%. Both now read from the first expiry
82
+ at least a week out.
83
+ - Contracts reporting `iv = 0` are excluded from the term structure. CBOE returns zero for
84
+ expired and deep-in-the-money contracts, and a zero entering an IV mean does not look like
85
+ a gap — it looks like a calm stock.
86
+ - A site-wide Reddit search for a ticker name returned unrelated posts; search is now
87
+ restricted to the equity subreddits.
88
+ - Hacker News search matched "Micron" against "microkernels" and "Microsoft" through
89
+ Algolia's typo tolerance, which is now disabled with the phrase quoted.
90
+ - Restoring the analyst bodies dropped content from three merged roles (earnings call,
91
+ sell-side revisions, industry voices). All three are restored, and the test that guards
92
+ the merge now requires each absorbing seat to both declare what it absorbed and carry the
93
+ topic, rather than matching one literal phrase.
94
+
95
+ ## [0.4.0] — 2026-06-23
96
+
97
+ Keyless real market data (`get_quote`).
98
+
99
+ ## [0.3.2] — 2026-06-22
100
+ ## [0.3.1] — 2026-06-22
101
+
102
+ Bundles `agent-skills-governance`, an anti-laziness skill with explicit stop gates.
103
+
104
+ ## [0.3.0] — 2026-06-22
105
+
106
+ The shared server runs the three-round debate, enforces the missing-source, full-run and
107
+ report-quality gates, writes concise and full report artifacts, and supports native Windows
108
+ Codex CLI launching.
109
+
110
+ ## [0.2.0] — 2026-06-22
111
+
112
+ Full-council enforcement, three-round debate, verification gate.
package/CLAUDE.md ADDED
@@ -0,0 +1,144 @@
1
+ # Claude Instructions For This Repository
2
+
3
+ You are working on `alphacouncil-agent`, a Codex plugin for public-equity research.
4
+
5
+ ## Purpose
6
+
7
+ The plugin turns `@alphacouncil-agent <ticker/request>` into a full equity-research workflow:
8
+
9
+ 1. Spawn or plan specialized analyst workers.
10
+ 2. Produce JSON evidence packets with sourced claims.
11
+ 3. Merge packets into a shared evidence base.
12
+ 4. Run bull and bear researchers.
13
+ 5. Run a portfolio manager to decide Buy / Overweight / Hold / Underweight / Sell.
14
+ 6. Write a complete final report directly in chat and to `~/.alphacouncil-agent/runs/<run_id>/final_report.md`.
15
+
16
+ Default behavior is full workflow. Do not downgrade to lite, smoke-test, or debug output unless the user explicitly asks for it.
17
+
18
+ ## Agent-Skills Governance
19
+
20
+ Also follow `skills/agent-skills-governance/SKILL.md`. It is bundled with this plugin and applies the `addyosmani/agent-skills` style of explicit gates, anti-rationalizations, and exit criteria to AlphaCouncil runs. Do not treat it as an optional local setup step.
21
+
22
+ ## Analyst Roles
23
+
24
+ Default evidence roles (the eight-seat default fan-out):
25
+
26
+ - `market_data`
27
+ - `earnings_deep_dive` — absorbed the former standalone earnings-call role
28
+ - `forward_expectations` — absorbed the former standalone sell-side-revisions role
29
+ - `quant_factor`
30
+ - `valuation_long_short`
31
+ - `news_industry_management` — absorbed the former standalone industry-voices role
32
+ - `insider_sec`
33
+ - `ib_event_analysis`
34
+
35
+ Optional analysts, on the `full` roster rather than the default:
36
+
37
+ - `macro_regime`
38
+ - `market_narrative`
39
+ - `social_pulse`
40
+
41
+ Master bench: 21 lenses across six rosters, run between evidence and debate on **every**
42
+ host. Verifiers: `source_fidelity`, `rederivation`, `refuter`. See `skills/alphacouncil-agent/SKILL.md`
43
+ for the workflow and `docs/personas.md` for the full roster.
44
+
45
+ Debate roles:
46
+
47
+ - `bull_researcher`
48
+ - `bear_researcher`
49
+ - `portfolio_manager`
50
+
51
+ ## Hard Output Rules
52
+
53
+ Also follow `docs/report-contract.md`.
54
+
55
+ Final reports must include:
56
+
57
+ - conclusion and final rating
58
+ - analyst work log summarizing every evidence agent
59
+ - bull/bear debate record
60
+ - long thesis
61
+ - short thesis
62
+ - market expectations and implied thresholds
63
+ - analyst rating and target-price revisions
64
+ - earnings-call management signals
65
+ - quant factor / technical risk view
66
+ - news and management/industry voice signals
67
+ - short interest / borrow / options information when available
68
+ - strategic transaction or banking-event analysis when relevant
69
+ - valuation range
70
+ - catalysts
71
+ - risks
72
+ - position recommendation
73
+ - short-term 1-4 week view
74
+ - medium-term 3-6 month view
75
+ - long-term 12 month view
76
+ - data gaps / unavailable data
77
+ - invalidation conditions
78
+ - confidence
79
+ - source table
80
+
81
+ The final chat handoff may be concise, but it must not replace the saved report. Completed runs must write `final_report.md`, `user_response.md`, `artifact_index.md`, `report_quality.json`, one Markdown file per evidence analyst, and Markdown files for bull, bear, and portfolio manager. Tell the user where those files are.
82
+
83
+ Never hide missing data. If a source is unavailable, say so in `open_questions` and in the final report's data-gap section. If no critical data is missing, explicitly state that no critical data gaps were found.
84
+
85
+ Do not put execution labels like "visible version", "lite", "smoke test", "debug", or "did not use PDF/Data Analytics" in the user-facing investment report.
86
+
87
+ ## Evidence Rules
88
+
89
+ Every material claim should map to a source ID. Source IDs must be globally scoped as:
90
+
91
+ ```text
92
+ <task>:<local_source_id>
93
+ ```
94
+
95
+ Example:
96
+
97
+ ```text
98
+ market_data:S1
99
+ earnings_deep_dive:S3
100
+ quant_factor:S2
101
+ ```
102
+
103
+ Do not cite bare `S1` after packets are merged.
104
+
105
+ ## Runtime Files
106
+
107
+ Generated files live under:
108
+
109
+ ```text
110
+ ~/.alphacouncil-agent/runs/<run_id>/
111
+ ```
112
+
113
+ Typical outputs:
114
+
115
+ - `status.json`
116
+ - `events.jsonl`
117
+ - `evidence.json`
118
+ - `<task>.json`
119
+ - `source_manifest.json`
120
+ - `bull_researcher.json`
121
+ - `bear_researcher.json`
122
+ - `manager_synthesis.json`
123
+ - `decision.json`
124
+ - `final_report.md`
125
+ - `all_agents.md`
126
+
127
+ Do not commit generated run artifacts.
128
+
129
+ ## Development Rules
130
+
131
+ - Keep the implementation small.
132
+ - Do not add dependencies unless there is no simple Node.js standard-library path.
133
+ - Preserve the JSON packet contracts in `mcp/server.mjs`.
134
+ - After changes, run:
135
+
136
+ ```bash
137
+ npm run check
138
+ ```
139
+
140
+ ## Important Boundaries
141
+
142
+ This repository is an independent Codex plugin implementation. It can be inspired by multi-agent investment-committee workflows, but do not copy external project source code into this repository.
143
+
144
+ Public Equity Investing and Investment Banking are Codex skills or remote workflows, not importable JavaScript libraries. Treat them as agent instructions, not as packages to `import`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Zhao73
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.