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.
- package/.claude/agents/alphacouncil-bear_researcher.md +39 -0
- package/.claude/agents/alphacouncil-bull_researcher.md +40 -0
- package/.claude/agents/alphacouncil-earnings_deep_dive.md +49 -0
- package/.claude/agents/alphacouncil-forward_expectations.md +48 -0
- package/.claude/agents/alphacouncil-ib_event_analysis.md +40 -0
- package/.claude/agents/alphacouncil-insider_sec.md +39 -0
- package/.claude/agents/alphacouncil-macro_regime.md +31 -0
- package/.claude/agents/alphacouncil-market_data.md +37 -0
- package/.claude/agents/alphacouncil-market_narrative.md +45 -0
- package/.claude/agents/alphacouncil-news_industry_management.md +49 -0
- package/.claude/agents/alphacouncil-portfolio_manager.md +22 -0
- package/.claude/agents/alphacouncil-quant_factor.md +38 -0
- package/.claude/agents/alphacouncil-social_pulse.md +49 -0
- package/.claude/agents/alphacouncil-valuation_long_short.md +45 -0
- package/.claude-plugin/marketplace.json +30 -0
- package/.claude-plugin/plugin.json +28 -0
- package/.codex-plugin/plugin.json +32 -0
- package/.grok/agents/alphacouncil-bear_researcher.md +41 -0
- package/.grok/agents/alphacouncil-bull_researcher.md +42 -0
- package/.grok/agents/alphacouncil-earnings_deep_dive.md +50 -0
- package/.grok/agents/alphacouncil-forward_expectations.md +49 -0
- package/.grok/agents/alphacouncil-ib_event_analysis.md +41 -0
- package/.grok/agents/alphacouncil-insider_sec.md +40 -0
- package/.grok/agents/alphacouncil-macro_regime.md +32 -0
- package/.grok/agents/alphacouncil-market_data.md +38 -0
- package/.grok/agents/alphacouncil-market_narrative.md +46 -0
- package/.grok/agents/alphacouncil-news_industry_management.md +50 -0
- package/.grok/agents/alphacouncil-portfolio_manager.md +24 -0
- package/.grok/agents/alphacouncil-quant_factor.md +39 -0
- package/.grok/agents/alphacouncil-social_pulse.md +50 -0
- package/.grok/agents/alphacouncil-valuation_long_short.md +46 -0
- package/.grok/config.toml +4 -0
- package/.mcp.json +11 -0
- package/.opencode/agent/alphacouncil-bear_researcher.md +45 -0
- package/.opencode/agent/alphacouncil-bull_researcher.md +46 -0
- package/.opencode/agent/alphacouncil-earnings_deep_dive.md +54 -0
- package/.opencode/agent/alphacouncil-forward_expectations.md +53 -0
- package/.opencode/agent/alphacouncil-ib_event_analysis.md +45 -0
- package/.opencode/agent/alphacouncil-insider_sec.md +44 -0
- package/.opencode/agent/alphacouncil-macro_regime.md +36 -0
- package/.opencode/agent/alphacouncil-market_data.md +42 -0
- package/.opencode/agent/alphacouncil-market_narrative.md +50 -0
- package/.opencode/agent/alphacouncil-news_industry_management.md +54 -0
- package/.opencode/agent/alphacouncil-portfolio_manager.md +28 -0
- package/.opencode/agent/alphacouncil-quant_factor.md +43 -0
- package/.opencode/agent/alphacouncil-social_pulse.md +54 -0
- package/.opencode/agent/alphacouncil-valuation_long_short.md +50 -0
- package/AGENTS.md +96 -0
- package/CHANGELOG.md +112 -0
- package/CLAUDE.md +144 -0
- package/LICENSE +21 -0
- package/README.ja.md +282 -0
- package/README.md +361 -0
- package/README.zh-CN.md +282 -0
- package/data/industry-map.json +74 -0
- package/docs/attribution.md +99 -0
- package/docs/personas.md +59 -0
- package/docs/report-contract.md +110 -0
- package/mcp/lib/codex.mjs +152 -0
- package/mcp/lib/constants.mjs +139 -0
- package/mcp/lib/council-options.mjs +111 -0
- package/mcp/lib/errors.mjs +46 -0
- package/mcp/lib/feeds.mjs +140 -0
- package/mcp/lib/fsutil.mjs +69 -0
- package/mcp/lib/gates.mjs +208 -0
- package/mcp/lib/grounding.mjs +252 -0
- package/mcp/lib/headings.mjs +65 -0
- package/mcp/lib/industry.mjs +208 -0
- package/mcp/lib/lang.mjs +24 -0
- package/mcp/lib/macro.mjs +167 -0
- package/mcp/lib/markdown.mjs +337 -0
- package/mcp/lib/markets-kr-jp.mjs +180 -0
- package/mcp/lib/markets.mjs +261 -0
- package/mcp/lib/narrative.mjs +235 -0
- package/mcp/lib/options.mjs +216 -0
- package/mcp/lib/orchestrator.mjs +541 -0
- package/mcp/lib/output-modes.mjs +144 -0
- package/mcp/lib/packets.mjs +256 -0
- package/mcp/lib/personas/frontmatter.mjs +80 -0
- package/mcp/lib/personas/registry.mjs +215 -0
- package/mcp/lib/preflight.mjs +174 -0
- package/mcp/lib/prompts.mjs +151 -0
- package/mcp/lib/quotes.mjs +108 -0
- package/mcp/lib/rpc.mjs +737 -0
- package/mcp/lib/run-store.mjs +140 -0
- package/mcp/lib/screen.mjs +283 -0
- package/mcp/lib/sec.mjs +131 -0
- package/mcp/lib/social.mjs +261 -0
- package/mcp/lib/tables.mjs +150 -0
- package/mcp/lib/text.mjs +27 -0
- package/mcp/lib/weights.mjs +150 -0
- package/mcp/server.mjs +92 -0
- package/opencode.json +20 -0
- package/package.json +61 -0
- package/personas/_shared/_debate_base.md +46 -0
- package/personas/_shared/_evidence_base.md +56 -0
- package/personas/_shared/_master_base.md +77 -0
- package/personas/analysts/earnings_deep_dive.md +118 -0
- package/personas/analysts/forward_expectations.md +115 -0
- package/personas/analysts/ib_event_analysis.md +100 -0
- package/personas/analysts/insider_sec.md +98 -0
- package/personas/analysts/macro_regime.md +66 -0
- package/personas/analysts/market_data.md +94 -0
- package/personas/analysts/market_narrative.md +94 -0
- package/personas/analysts/news_industry_management.md +117 -0
- package/personas/analysts/quant_factor.md +97 -0
- package/personas/analysts/social_pulse.md +102 -0
- package/personas/analysts/valuation_long_short.md +109 -0
- package/personas/debate/bear_researcher.md +96 -0
- package/personas/debate/bull_researcher.md +98 -0
- package/personas/debate/portfolio_manager.md +64 -0
- package/personas/masters/masters-adversarial/burry.md +137 -0
- package/personas/masters/masters-adversarial/dalio.md +139 -0
- package/personas/masters/masters-adversarial/druckenmiller.md +144 -0
- package/personas/masters/masters-adversarial/short_seller.md +145 -0
- package/personas/masters/masters-adversarial/soros.md +137 -0
- package/personas/masters/masters-modern/aschenbrenner.md +147 -0
- package/personas/masters/masters-options/natenberg.md +168 -0
- package/personas/masters/masters-options/sinclair.md +166 -0
- package/personas/masters/masters-options/taleb.md +163 -0
- package/personas/masters/masters-quant/asness.md +142 -0
- package/personas/masters/masters-quant/simons.md +143 -0
- package/personas/masters/masters-quant/thorp.md +143 -0
- package/personas/masters/masters-value/buffett.md +123 -0
- package/personas/masters/masters-value/duan_yongping.md +142 -0
- package/personas/masters/masters-value/li_lu.md +146 -0
- package/personas/masters/masters-value/munger.md +117 -0
- package/personas/masters/masters-value-classic/fisher.md +140 -0
- package/personas/masters/masters-value-classic/graham.md +137 -0
- package/personas/masters/masters-value-classic/klarman.md +138 -0
- package/personas/masters/masters-value-classic/lynch.md +133 -0
- package/personas/masters/masters-value-classic/marks.md +145 -0
- package/personas/verifiers/rederivation.md +97 -0
- package/personas/verifiers/refuter.md +99 -0
- package/personas/verifiers/source_fidelity.md +91 -0
- package/skills/agent-skills-governance/SKILL.md +42 -0
- package/skills/alphacouncil-agent/SKILL.md +259 -0
- package/skills/investment-banking/SKILL.md +70 -0
- 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.
|