alphacouncil-agent 0.5.3 → 0.5.5

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.
@@ -22,24 +22,32 @@ Request: **$ARGUMENTS**
22
22
  When `$ARGUMENTS` is empty, print exactly this and stop:
23
23
 
24
24
  ```
25
- /alpha MU full council — asks which preset first
26
- /alpha MU quick 4 analysts + debate, no bench, no verification
27
- /alpha MU screen mechanical filings screen only (no model spend)
28
- /alpha MU options IV term structure, skew, positioning (no model spend)
29
- /alpha MU news dated filings and headlines (no model spend)
30
- /alpha market AI what the market is talking about (no model spend)
25
+ /alpha <TICKER> full council — asks which preset first
26
+ /alpha <TICKER> quick 4 analysts + debate, no bench, no verification
27
+ /alpha <TICKER> screen mechanical filings screen only (no model spend)
28
+ /alpha <TICKER> options IV term structure, skew, positioning (no model spend)
29
+ /alpha <TICKER> news dated filings and headlines (no model spend)
30
+ /alpha market <theme> what the market is talking about (no model spend)
31
+
32
+ examples
33
+ /alpha AAPL /alpha 0700.HK quick /alpha 7203.T news
34
+ /alpha NVDA screen /alpha market rates /alpha "is TSM cheap?"
31
35
  ```
32
36
 
37
+ Any listed equity. Filings-based modes need a US filer; for other markets say which market it
38
+ is and use `market_coverage`, rather than returning nothing.
39
+
33
40
  Say plainly that the four marked modes call keyless data tools and spawn no subagents, so
34
41
  they cost nothing beyond this turn. The council modes spawn one subagent per seat, and that
35
42
  is where the spend is.
36
43
 
37
44
  ## Full council
38
45
 
39
- 1. **Ask which preset first.** Call `list_council_options` and present the three with their
40
- seat counts. A council is 7 to 44 seats and that range is the user's time and money.
41
- **Skip the question when the request already answered it** a named roster, "everything",
42
- "be quick". A confirmation nobody needed is an interruption.
46
+ 1. **Ask which masters, once, then run.** Call `list_council_options` and ask only about the
47
+ master bench the six schools by name with their members, plus "all" and "none". Analysts
48
+ default to the eight-seat fan-out; do not ask about them. After the answer, start
49
+ immediately: no preset question, no confirmation. **Skip the question entirely** when the
50
+ request already said (a named school, "everything", "no masters", "be quick").
43
51
  2. Follow `skills/alphacouncil-agent/SKILL.md` from Stage 0. Do not improvise a shorter
44
52
  workflow: a report that looks finished and skipped the bench is worse than an obviously
45
53
  partial one.
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "AlphaCouncil plugins for public-equity research.",
9
- "version": "0.5.3"
9
+ "version": "0.5.5"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "alphacouncil-agent",
14
14
  "source": "./",
15
15
  "description": "Multi-agent equity research: evidence packets, bull/bear debate, portfolio-manager decision.",
16
- "version": "0.5.3",
16
+ "version": "0.5.5",
17
17
  "author": {
18
18
  "name": "Zhao73"
19
19
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "Multi-agent public-equity research workflow for Claude Code: spawns analyst workers, gathers sourced JSON evidence packets, runs bull/bear debate, and produces a portfolio-manager Buy/Overweight/Hold/Underweight/Sell decision with a full report.",
5
5
  "author": {
6
6
  "name": "Zhao73"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "Host-visible or background public-equity research workflow with shared evidence packets.",
5
5
  "author": {
6
6
  "name": "Zhao73"
@@ -22,24 +22,32 @@ Request: **$ARGUMENTS**
22
22
  When `$ARGUMENTS` is empty, print exactly this and stop:
23
23
 
24
24
  ```
25
- /alpha MU full council — asks which preset first
26
- /alpha MU quick 4 analysts + debate, no bench, no verification
27
- /alpha MU screen mechanical filings screen only (no model spend)
28
- /alpha MU options IV term structure, skew, positioning (no model spend)
29
- /alpha MU news dated filings and headlines (no model spend)
30
- /alpha market AI what the market is talking about (no model spend)
25
+ /alpha <TICKER> full council — asks which preset first
26
+ /alpha <TICKER> quick 4 analysts + debate, no bench, no verification
27
+ /alpha <TICKER> screen mechanical filings screen only (no model spend)
28
+ /alpha <TICKER> options IV term structure, skew, positioning (no model spend)
29
+ /alpha <TICKER> news dated filings and headlines (no model spend)
30
+ /alpha market <theme> what the market is talking about (no model spend)
31
+
32
+ examples
33
+ /alpha AAPL /alpha 0700.HK quick /alpha 7203.T news
34
+ /alpha NVDA screen /alpha market rates /alpha "is TSM cheap?"
31
35
  ```
32
36
 
37
+ Any listed equity. Filings-based modes need a US filer; for other markets say which market it
38
+ is and use `market_coverage`, rather than returning nothing.
39
+
33
40
  Say plainly that the four marked modes call keyless data tools and spawn no subagents, so
34
41
  they cost nothing beyond this turn. The council modes spawn one subagent per seat, and that
35
42
  is where the spend is.
36
43
 
37
44
  ## Full council
38
45
 
39
- 1. **Ask which preset first.** Call `list_council_options` and present the three with their
40
- seat counts. A council is 7 to 44 seats and that range is the user's time and money.
41
- **Skip the question when the request already answered it** a named roster, "everything",
42
- "be quick". A confirmation nobody needed is an interruption.
46
+ 1. **Ask which masters, once, then run.** Call `list_council_options` and ask only about the
47
+ master bench the six schools by name with their members, plus "all" and "none". Analysts
48
+ default to the eight-seat fan-out; do not ask about them. After the answer, start
49
+ immediately: no preset question, no confirmation. **Skip the question entirely** when the
50
+ request already said (a named school, "everything", "no masters", "be quick").
43
51
  2. Follow `skills/alphacouncil-agent/SKILL.md` from Stage 0. Do not improvise a shorter
44
52
  workflow: a report that looks finished and skipped the bench is worse than an obviously
45
53
  partial one.
@@ -22,24 +22,32 @@ Request: **$ARGUMENTS**
22
22
  When `$ARGUMENTS` is empty, print exactly this and stop:
23
23
 
24
24
  ```
25
- /alpha MU full council — asks which preset first
26
- /alpha MU quick 4 analysts + debate, no bench, no verification
27
- /alpha MU screen mechanical filings screen only (no model spend)
28
- /alpha MU options IV term structure, skew, positioning (no model spend)
29
- /alpha MU news dated filings and headlines (no model spend)
30
- /alpha market AI what the market is talking about (no model spend)
25
+ /alpha <TICKER> full council — asks which preset first
26
+ /alpha <TICKER> quick 4 analysts + debate, no bench, no verification
27
+ /alpha <TICKER> screen mechanical filings screen only (no model spend)
28
+ /alpha <TICKER> options IV term structure, skew, positioning (no model spend)
29
+ /alpha <TICKER> news dated filings and headlines (no model spend)
30
+ /alpha market <theme> what the market is talking about (no model spend)
31
+
32
+ examples
33
+ /alpha AAPL /alpha 0700.HK quick /alpha 7203.T news
34
+ /alpha NVDA screen /alpha market rates /alpha "is TSM cheap?"
31
35
  ```
32
36
 
37
+ Any listed equity. Filings-based modes need a US filer; for other markets say which market it
38
+ is and use `market_coverage`, rather than returning nothing.
39
+
33
40
  Say plainly that the four marked modes call keyless data tools and spawn no subagents, so
34
41
  they cost nothing beyond this turn. The council modes spawn one subagent per seat, and that
35
42
  is where the spend is.
36
43
 
37
44
  ## Full council
38
45
 
39
- 1. **Ask which preset first.** Call `list_council_options` and present the three with their
40
- seat counts. A council is 7 to 44 seats and that range is the user's time and money.
41
- **Skip the question when the request already answered it** a named roster, "everything",
42
- "be quick". A confirmation nobody needed is an interruption.
46
+ 1. **Ask which masters, once, then run.** Call `list_council_options` and ask only about the
47
+ master bench the six schools by name with their members, plus "all" and "none". Analysts
48
+ default to the eight-seat fan-out; do not ask about them. After the answer, start
49
+ immediately: no preset question, no confirmation. **Skip the question entirely** when the
50
+ request already said (a named school, "everything", "no masters", "be quick").
43
51
  2. Follow `skills/alphacouncil-agent/SKILL.md` from Stage 0. Do not improvise a shorter
44
52
  workflow: a report that looks finished and skipped the bench is worse than an obviously
45
53
  partial one.
package/AGENTS.md CHANGED
@@ -76,12 +76,12 @@ rather than four in a menu of a hundred.
76
76
 
77
77
  | Invocation | What runs | Model spend |
78
78
  |---|---|---|
79
- | `/alpha MU` | Full council — asks which preset first | one subagent per seat |
80
- | `/alpha MU quick` | 4 analysts + debate, no bench, no verification | 7 seats |
81
- | `/alpha MU screen` | Mechanical filings screen only | **none** |
82
- | `/alpha MU options` | IV term structure, skew, positioning | **none** |
83
- | `/alpha MU news` | Dated filings and headlines | **none** |
84
- | `/alpha market AI` | What the market is talking about | **none** |
79
+ | `/alpha <ticker>` | Full council — asks which preset first | one subagent per seat |
80
+ | `/alpha <ticker> quick` | 4 analysts + debate, no bench, no verification | 7 seats |
81
+ | `/alpha <ticker> screen` | Mechanical filings screen only | **none** |
82
+ | `/alpha <ticker> options` | IV term structure, skew, positioning | **none** |
83
+ | `/alpha <ticker> news` | Dated filings and headlines | **none** |
84
+ | `/alpha market <theme>` | What the market is talking about | **none** |
85
85
  | `/alpha` | Lists the modes and stops | **none** |
86
86
 
87
87
  The four marked **none** call keyless data tools and spawn no subagents, so they cost
package/CHANGELOG.md CHANGED
@@ -2,6 +2,38 @@
2
2
 
3
3
  Notable changes per release. Dates are UTC.
4
4
 
5
+ ## [0.5.5] — 2026-07-26
6
+
7
+ ### Fixed
8
+
9
+ - **Five masters never ran.** Aschenbrenner, Druckenmiller, Fisher, Asness and Klarman were
10
+ not in the `masters-core` roster, which is what the standard preset selects, while the
11
+ seat estimate counted every master. The menu offered 21 lenses and the run delivered 16,
12
+ with nothing failing and nothing warning. A test now asserts the roster equals the full
13
+ set rather than merely being large.
14
+
15
+ ### Changed
16
+
17
+ - **Stage 0 asks one question, about the master bench, then runs.** It previously asked which
18
+ preset, then which analysts, then confirmed — an interview before any work. The analysts
19
+ have an obvious default; the bench is the part a user has a view on and where cost varies.
20
+ - `list_council_options` prints the **named** roster: every analyst with what it covers, and
21
+ the six master schools with their members. Presets remain as shortcuts. Naming the seats is
22
+ what made the missing five visible.
23
+ - Command help uses `<TICKER>` with examples across US, Hong Kong and Tokyo listings. One
24
+ real ticker repeated down the column read as if the tool were about that company.
25
+
26
+ ## [0.5.4] — 2026-07-26
27
+
28
+ ### Fixed
29
+
30
+ - `docs/INSTALL.md`, `SECURITY.md` and `CONTRIBUTING.md` were never in the package. The
31
+ install guide is the page an npm user reads specifically to learn how to invoke the thing,
32
+ and it was absent from every published version.
33
+ - A contract test now asserts the property rather than the entries: every tracked
34
+ consumer-facing file must be in the package. The gaps had been surfacing one release at a
35
+ time — the host agent directories in 0.5.1, the install guide in 0.5.3.
36
+
5
37
  ## [0.5.3] — 2026-07-26
6
38
 
7
39
  ### Fixed
@@ -0,0 +1,65 @@
1
+ # Contributing to AlphaCouncil Agent
2
+
3
+ Thanks for your interest in improving AlphaCouncil Agent!
4
+
5
+ ## Development setup
6
+
7
+ ```bash
8
+ git clone https://github.com/Zhao73/alphacouncil-agent.git
9
+ cd alphacouncil-agent
10
+ node --version # must be >= 18
11
+ npm run check # runs node --check + the self-check (no Codex auth needed)
12
+ ```
13
+
14
+ There are **no runtime dependencies** — the MCP server is plain Node.js standard
15
+ library. Please keep it that way unless there is no simple standard-library path.
16
+
17
+ ## Before opening a pull request
18
+
19
+ - Run `npm run check` and make sure it passes.
20
+ - Preserve the JSON packet contracts in `mcp/server.mjs` (evidence packets and
21
+ debate packets). If you change a contract, update `scripts/selfcheck.mjs` and
22
+ the README/skill docs to match.
23
+ - Keep source IDs globally scoped as `<task>:<local_source_id>`.
24
+ - Keep the implementation small and readable.
25
+
26
+ ## Scope and boundaries
27
+
28
+ - This is an **independent** plugin. Do not copy source code from other
29
+ multi-agent investment projects into this repo.
30
+ - "Public Equity Investing" and "Investment Banking" are agent instructions /
31
+ skills, not importable libraries.
32
+ - Never commit API keys, brokerage credentials, private filings, or generated
33
+ run artifacts (everything under `~/.alphacouncil-agent/` and `runs/` is
34
+ ignored by `.gitignore`).
35
+
36
+ ## Reporting bugs / requesting features
37
+
38
+ Use the issue templates. Please include your OS, Node version, and whether you
39
+ were using the Codex headless path or the visible workflow.
40
+
41
+ ## License
42
+
43
+ By contributing, you agree that your contributions are licensed under the
44
+ [MIT License](LICENSE).
45
+
46
+ ## Commit messages
47
+
48
+ Write them from a file or a quoted heredoc, never inline in a shell string:
49
+
50
+ ```bash
51
+ git commit -F /tmp/msg.txt
52
+ # or
53
+ git commit -F - <<'MSG'
54
+ ...
55
+ MSG
56
+ ```
57
+
58
+ Backticks in a commit message are command substitution to the shell, which silently deletes
59
+ the text between them before git ever sees it. It happened once here, to a sentence naming
60
+ a CLI subcommand; the words were simply gone from the published history. Quoting the
61
+ heredoc delimiter (`<<'MSG'`, not `<<MSG`) disables expansion.
62
+
63
+ If a message does go out wrong, prefer `git notes add` over `git commit --amend` once the
64
+ commit is an ancestor of a published tag. Rewriting it leaves the release pointing at an
65
+ object that no longer exists, which is a worse outcome than an imperfect message.
package/README.ja.md CHANGED
@@ -113,16 +113,20 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
113
113
 
114
114
  | 入力 | 実行内容 | モデル消費 |
115
115
  |---|---|---|
116
- | `/alpha MU` | フル委員会 —— 先にどのプリセットか確認します | 席ごとに 1 サブエージェント |
117
- | `/alpha MU quick` | アナリスト 4 名+討論。マスター陣なし、検証なし | 7 席 |
118
- | `/alpha MU screen` | 機械的スクリーニングのみ | **なし** |
119
- | `/alpha MU options` | IV ターム構造、スキュー、建玉分布 | **なし** |
120
- | `/alpha MU news` | 日付付きの提出書類とニュース | **なし** |
121
- | `/alpha market AI` | 市場が語っている物語 | **なし** |
116
+ | `/alpha <ticker>` | フル委員会 —— 先にどのプリセットか確認します | 席ごとに 1 サブエージェント |
117
+ | `/alpha <ticker> quick` | アナリスト 4 名+討論。マスター陣なし、検証なし | 7 席 |
118
+ | `/alpha <ticker> screen` | 機械的スクリーニングのみ | **なし** |
119
+ | `/alpha <ticker> options` | IV ターム構造、スキュー、建玉分布 | **なし** |
120
+ | `/alpha <ticker> news` | 日付付きの提出書類とニュース | **なし** |
121
+ | `/alpha market <theme>` | 市場が語っている物語 | **なし** |
122
122
  | `/alpha` | モード一覧を出して停止 | **なし** |
123
123
 
124
124
  **なし** と記した 4 つはキー不要のデータツールを呼ぶだけで、サブエージェントを一切起動しません。入力したそのターン以外に消費はありません。委員会モードは席ごとにサブエージェントを起動し、それがこのプラグインのコストのすべてです。
125
125
 
126
+ 上場銘柄なら何でも:`/alpha AAPL` · `/alpha 0700.HK quick` · `/alpha 7203.T news` · `/alpha market rates`。
127
+ 提出書類ベースのモードは米国登録企業が必要です。他市場は黙って空を返すのではなく `market_coverage` で対応状況を示します。
128
+
129
+
126
130
  Claude Code、OpenCode、Grok Build ではインストール後すぐ使えます。Codex の prompts はユーザースコープなので一度コピーしてください:
127
131
  `mkdir -p ~/.codex/prompts && cp commands/alpha.md ~/.codex/prompts/`
128
132
 
package/README.md CHANGED
@@ -130,18 +130,22 @@ rather than four in a menu of a hundred.
130
130
 
131
131
  | Invocation | What runs | Model spend |
132
132
  |---|---|---|
133
- | `/alpha MU` | Full council — asks which preset first | one subagent per seat |
134
- | `/alpha MU quick` | 4 analysts + debate, no bench, no verification | 7 seats |
135
- | `/alpha MU screen` | Mechanical filings screen only | **none** |
136
- | `/alpha MU options` | IV term structure, skew, positioning | **none** |
137
- | `/alpha MU news` | Dated filings and headlines | **none** |
138
- | `/alpha market AI` | What the market is talking about | **none** |
133
+ | `/alpha <ticker>` | Full council — asks which preset first | one subagent per seat |
134
+ | `/alpha <ticker> quick` | 4 analysts + debate, no bench, no verification | 7 seats |
135
+ | `/alpha <ticker> screen` | Mechanical filings screen only | **none** |
136
+ | `/alpha <ticker> options` | IV term structure, skew, positioning | **none** |
137
+ | `/alpha <ticker> news` | Dated filings and headlines | **none** |
138
+ | `/alpha market <theme>` | What the market is talking about | **none** |
139
139
  | `/alpha` | Lists the modes and stops | **none** |
140
140
 
141
141
  The four marked **none** call keyless data tools and spawn no subagents, so they cost
142
142
  nothing beyond the turn you type them in. The council modes spawn one subagent per seat, and
143
143
  that is the entire cost of running this.
144
144
 
145
+ Any listed equity: `/alpha AAPL` · `/alpha 0700.HK quick` · `/alpha 7203.T news` · `/alpha market rates`.
146
+ Filings-based modes need a US filer; other markets are reported through `market_coverage` rather than silently returning nothing.
147
+
148
+
145
149
  Available in Claude Code, OpenCode and Grok Build as soon as the plugin is installed. Codex keeps
146
150
  its prompts user-scoped, so copy it once: `mkdir -p ~/.codex/prompts && cp commands/alpha.md ~/.codex/prompts/`
147
151
 
package/README.zh-CN.md CHANGED
@@ -113,16 +113,20 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
113
113
 
114
114
  | 输入 | 跑什么 | 额度消耗 |
115
115
  |---|---|---|
116
- | `/alpha MU` | 完整议会 —— 先问你跑哪个预设 | 每席一个子代理 |
117
- | `/alpha MU quick` | 4 分析师 + 辩论,无大师、无验证 | 7 席 |
118
- | `/alpha MU screen` | 只跑机械筛选 | **零** |
119
- | `/alpha MU options` | 隐含波动率期限结构、偏斜、持仓分布 | **零** |
120
- | `/alpha MU news` | 带日期的申报与新闻 | **零** |
121
- | `/alpha market AI` | 市场在讲什么故事 | **零** |
116
+ | `/alpha <ticker>` | 完整议会 —— 先问你跑哪个预设 | 每席一个子代理 |
117
+ | `/alpha <ticker> quick` | 4 分析师 + 辩论,无大师、无验证 | 7 席 |
118
+ | `/alpha <ticker> screen` | 只跑机械筛选 | **零** |
119
+ | `/alpha <ticker> options` | 隐含波动率期限结构、偏斜、持仓分布 | **零** |
120
+ | `/alpha <ticker> news` | 带日期的申报与新闻 | **零** |
121
+ | `/alpha market <theme>` | 市场在讲什么故事 | **零** |
122
122
  | `/alpha` | 列出模式后停下 | **零** |
123
123
 
124
124
  标「零」的四个只调免 key 数据工具、**不启动任何子代理**,除了你敲的这一轮之外不消耗额度。议会模式每个席位起一个子代理,那是这个插件的全部成本所在。
125
125
 
126
+ 任何上市股票:`/alpha AAPL` · `/alpha 0700.HK quick` · `/alpha 7203.T news` · `/alpha market rates`。
127
+ 基于申报的模式需要美国申报主体;其他市场会通过 `market_coverage` 说明覆盖情况,而不是静默返回空结果。
128
+
129
+
126
130
  Claude Code、OpenCode、Grok Build 装完即可用。Codex 的 prompts 是用户级的,拷贝一次:
127
131
  `mkdir -p ~/.codex/prompts && cp commands/alpha.md ~/.codex/prompts/`
128
132
 
package/SECURITY.md ADDED
@@ -0,0 +1,28 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please **do not** open a public issue for security problems. Instead, report
6
+ privately via GitHub's **"Report a vulnerability"** button under the repository's
7
+ **Security** tab (Security advisories), or contact the maintainer directly.
8
+
9
+ We aim to acknowledge reports within a few days.
10
+
11
+ ## Scope and notes
12
+
13
+ AlphaCouncil Agent runs an autonomous research workflow. Be aware that:
14
+
15
+ - The headless path spawns `codex exec` worker processes that perform **live web
16
+ search**. Treat fetched content as untrusted; the agents are instructed not to
17
+ act on embedded instructions, but you should review outputs before relying on
18
+ them.
19
+ - Run artifacts under `~/.alphacouncil-agent/runs/<run_id>/` may contain text
20
+ captured from third-party pages. These are **not** committed (ignored by
21
+ `.gitignore`) — mind what you share.
22
+ - Never commit API keys, tokens, brokerage credentials, or private filings.
23
+ - This software is for educational/research use only and is **not investment
24
+ advice** (see the README disclaimer).
25
+
26
+ ## Supported versions
27
+
28
+ This project is pre-1.0. Only the latest `main` is supported.
package/commands/alpha.md CHANGED
@@ -22,24 +22,32 @@ Request: **$ARGUMENTS**
22
22
  When `$ARGUMENTS` is empty, print exactly this and stop:
23
23
 
24
24
  ```
25
- /alpha MU full council — asks which preset first
26
- /alpha MU quick 4 analysts + debate, no bench, no verification
27
- /alpha MU screen mechanical filings screen only (no model spend)
28
- /alpha MU options IV term structure, skew, positioning (no model spend)
29
- /alpha MU news dated filings and headlines (no model spend)
30
- /alpha market AI what the market is talking about (no model spend)
25
+ /alpha <TICKER> full council — asks which preset first
26
+ /alpha <TICKER> quick 4 analysts + debate, no bench, no verification
27
+ /alpha <TICKER> screen mechanical filings screen only (no model spend)
28
+ /alpha <TICKER> options IV term structure, skew, positioning (no model spend)
29
+ /alpha <TICKER> news dated filings and headlines (no model spend)
30
+ /alpha market <theme> what the market is talking about (no model spend)
31
+
32
+ examples
33
+ /alpha AAPL /alpha 0700.HK quick /alpha 7203.T news
34
+ /alpha NVDA screen /alpha market rates /alpha "is TSM cheap?"
31
35
  ```
32
36
 
37
+ Any listed equity. Filings-based modes need a US filer; for other markets say which market it
38
+ is and use `market_coverage`, rather than returning nothing.
39
+
33
40
  Say plainly that the four marked modes call keyless data tools and spawn no subagents, so
34
41
  they cost nothing beyond this turn. The council modes spawn one subagent per seat, and that
35
42
  is where the spend is.
36
43
 
37
44
  ## Full council
38
45
 
39
- 1. **Ask which preset first.** Call `list_council_options` and present the three with their
40
- seat counts. A council is 7 to 44 seats and that range is the user's time and money.
41
- **Skip the question when the request already answered it** a named roster, "everything",
42
- "be quick". A confirmation nobody needed is an interruption.
46
+ 1. **Ask which masters, once, then run.** Call `list_council_options` and ask only about the
47
+ master bench the six schools by name with their members, plus "all" and "none". Analysts
48
+ default to the eight-seat fan-out; do not ask about them. After the answer, start
49
+ immediately: no preset question, no confirmation. **Skip the question entirely** when the
50
+ request already said (a named school, "everything", "no masters", "be quick").
43
51
  2. Follow `skills/alphacouncil-agent/SKILL.md` from Stage 0. Do not improvise a shorter
44
52
  workflow: a report that looks finished and skipped the bench is worse than an obviously
45
53
  partial one.
@@ -0,0 +1,295 @@
1
+ # Install AlphaCouncil Agent
2
+
3
+ AlphaCouncil Agent runs in **OpenAI Codex** and **Claude Code**. It also loads as a
4
+ plain MCP server in the Claude desktop app.
5
+
6
+ > ⚠️ **Disclaimer.** Educational/research use only. **Not investment advice.**
7
+ > AI analysis can be incomplete, outdated, or wrong. Do your own research and
8
+ > consult a licensed professional before any investment decision.
9
+
10
+ ---
11
+
12
+
13
+ ## npm
14
+
15
+ ```bash
16
+ npm install -g alphacouncil-agent
17
+ ```
18
+
19
+ Then point any MCP host at the `alphacouncil-agent` binary. For Claude Code:
20
+
21
+ ```json
22
+ { "mcpServers": { "alphacouncil-agent": { "command": "alphacouncil-agent" } } }
23
+ ```
24
+
25
+ For OpenCode, `command` takes an argv array:
26
+
27
+ ```json
28
+ { "mcp": { "alphacouncil-agent": { "type": "local", "command": ["alphacouncil-agent"] } } }
29
+ ```
30
+
31
+ Or run it without installing: `npx alphacouncil-agent`.
32
+
33
+ ## Configuration: none required
34
+
35
+ There is nothing to configure. Every core data source is keyless — SEC EDGAR for US
36
+ filings, TWSE for Taiwan, Yahoo and Stooq for quotes and macro — and the package has no
37
+ dependencies, so the install is the download and nothing else.
38
+
39
+ Two optional free keys widen coverage. Without them the tools still answer; they report
40
+ which market is missing a feed and which variable would unlock it, and analysts are told
41
+ that figures for those names must come from a primary document and be cited as such.
42
+
43
+ | Variable | Unlocks | Register |
44
+ |---|---|---|
45
+ | `ALPHACOUNCIL_DART_KEY` | Korean filings (Samsung, SK hynix) | <https://opendart.fss.or.kr> |
46
+ | `ALPHACOUNCIL_EDINET_KEY` | Japanese filings (Kioxia, Tokyo Electron) | EDINET portal |
47
+ | `ALPHACOUNCIL_SEC_USER_AGENT` | Your own SEC contact, advisable at volume | n/a |
48
+
49
+ Run `node scripts/doctor.mjs` at any time to see which copy is running, whether the
50
+ persona set loads, and what the data directory holds.
51
+
52
+ ## How to invoke it once installed
53
+
54
+ One command, `/alpha`. Modes are arguments.
55
+
56
+ ```text
57
+ /alpha <ticker> full council — asks which preset first
58
+ /alpha <ticker> quick 4 analysts + debate, no bench, no verification
59
+ /alpha <ticker> screen mechanical filings screen only (no model spend)
60
+ /alpha <ticker> options IV term structure, skew, positioning (no model spend)
61
+ /alpha <ticker> news dated filings and headlines (no model spend)
62
+ /alpha market <theme> what the market is talking about (no model spend)
63
+ /alpha lists the modes and stops (no model spend)
64
+ ```
65
+
66
+ The four marked *no model spend* call keyless data tools and spawn no subagents. **Start
67
+ there** — they show real data at no cost, so you can see the shape of the thing before
68
+ committing a fan-out. The council modes spawn one subagent per seat: 7 for `quick`, 32 for
69
+ the standard preset, 44 for deep.
70
+
71
+ Codex keeps prompts user-scoped rather than in the plugin, so copy it once:
72
+
73
+ ```bash
74
+ mkdir -p ~/.codex/prompts && cp commands/alpha.md ~/.codex/prompts/
75
+ ```
76
+
77
+ `@alphacouncil-agent <question>` still works everywhere and does the same thing.
78
+
79
+ ## Prerequisites
80
+
81
+ - **Node.js ≥ 18** (the MCP server is ESM and uses modern Node APIs).
82
+ - For the **headless research path** (`analyze_symbol` / `collect_evidence`):
83
+ an installed and authenticated **Codex CLI**, because each analyst worker is
84
+ launched as `codex exec`. Without it, headless workers fail; use the
85
+ **visible workflow** instead (the host agent does the research and records
86
+ packets — no `codex` binary required).
87
+
88
+ Verify:
89
+
90
+ ```bash
91
+ node --version # >= 18
92
+ codex --version # only needed for the headless path
93
+ npm run check # runs the self-check (no Codex auth required)
94
+ ```
95
+
96
+ ---
97
+
98
+ ## Install in Codex
99
+
100
+ This repo already ships the manifests Codex expects, at the official paths:
101
+ `.agents/plugins/marketplace.json` (repo marketplace), `.codex-plugin/plugin.json`
102
+ (plugin manifest), and `.mcp.json` (MCP server) — so the one-command install below
103
+ works out of the box. (`.claude-plugin/marketplace.json` is kept for legacy compat.)
104
+
105
+ ### A. One command — recommended ✅
106
+
107
+ ```text
108
+ codex plugin marketplace add Zhao73/alphacouncil-agent
109
+ ```
110
+
111
+ Then **fully quit and restart the Codex desktop app** (plugins load at session
112
+ start — see [Troubleshooting](#troubleshooting-the-plugin-doesnt-show-up--alphacouncil-agent-isnt-found)),
113
+ open a new session, and:
114
+
115
+ ```text
116
+ /plugins # switch to the "AlphaCouncil" marketplace → Install alphacouncil-agent
117
+ /reload-plugins
118
+ ```
119
+
120
+ ### B. Local clone — advanced / offline only
121
+
122
+ ```bash
123
+ git clone https://github.com/Zhao73/alphacouncil-agent.git \
124
+ ~/.codex/plugins/alphacouncil-agent
125
+ ```
126
+
127
+ Then add an entry to `~/.agents/plugins/marketplace.json` whose `source.path` is the
128
+ **absolute** path to that clone (copy the shape from `.agents/plugins/marketplace.json`
129
+ in this repo; on Windows use `C:\\Users\\you\\.codex\\plugins\\alphacouncil-agent`, not
130
+ `./`), restart Codex, and install from `/plugins`. **Prefer A** unless you're doing
131
+ offline/local development — it avoids hand-editing paths.
132
+
133
+ **Use it:**
134
+
135
+ ```text
136
+ @alphacouncil-agent analyze AAPL as a long/short pitch
137
+ @alphacouncil-agent 帮我看看 NOK
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Install in Claude Code
143
+
144
+ This repo ships a Claude Code plugin manifest (`.claude-plugin/plugin.json`) and
145
+ acts as its own marketplace (`.claude-plugin/marketplace.json`).
146
+
147
+ ```text
148
+ /plugin marketplace add Zhao73/alphacouncil-agent
149
+ /plugin install alphacouncil-agent@alphacouncil
150
+ /reload-plugins
151
+ ```
152
+
153
+ Or wire just the MCP server, without the plugin system:
154
+
155
+ ```bash
156
+ claude mcp add alphacouncil-agent -- node /absolute/path/to/alphacouncil-agent/mcp/server.mjs
157
+ ```
158
+
159
+ **Two ways to actually run the research in Claude Code:**
160
+
161
+ 1. **With Codex CLI installed & authenticated** — the headless `analyze_symbol`
162
+ path works as-is (it shells out to `codex exec`).
163
+ 2. **Without Codex** — use the visible path: let Claude Code's own subagents act
164
+ as the analysts, then record their JSON with `record_visible_packet` /
165
+ `record_visible_decision`. The MCP tools `plan_visible_run` /
166
+ `record_visible_*` never call `codex`, so this runs fully inside Claude.
167
+
168
+ ---
169
+
170
+ ## Claude desktop app (MCP only)
171
+
172
+ Add the MCP server in the app's connector/MCP settings, pointing `command` to
173
+ `node` and `args` to the absolute path of `mcp/server.mjs`. Tools will load; the
174
+ headless path still needs Codex CLI as above.
175
+
176
+ ---
177
+
178
+ ## Troubleshooting: the plugin doesn't show up / `@alphacouncil-agent` isn't found
179
+
180
+ Codex loads its tool list **at session start**. Installing or enabling a plugin
181
+ mid-session does **not** hot-add it to the current conversation — even if the files
182
+ are installed, `config.toml` marks it enabled, and the self-check passes.
183
+
184
+ Do this in order:
185
+
186
+ 1. **Fully quit and restart the Codex desktop app** (not just a new tab) and open a **new session**.
187
+ 2. Type `/plugins` and confirm **AlphaCouncil** is listed; enable `alphacouncil-agent`.
188
+ 3. Type `/reload-plugins`.
189
+ 4. Trigger it with the **exact lowercase id**: `@alphacouncil-agent ...`. The display
190
+ name `@AlphaCouncil Agent` (spaces + capitals) may not trigger — prefer the id.
191
+
192
+ If `/plugins` **still** doesn't list it after a full restart, your Codex build didn't
193
+ pick up the local marketplace. Use the official GitHub marketplace command instead (run
194
+ in a normal terminal), then restart Codex:
195
+
196
+ ```text
197
+ codex plugin marketplace add Zhao73/alphacouncil-agent
198
+ ```
199
+
200
+ > Local-clone install (Option B): the `source.path` in your
201
+ > `~/.agents/plugins/marketplace.json` must be the **absolute** path to the clone
202
+ > (e.g. `C:\\Users\\you\\.codex\\plugins\\alphacouncil-agent`), **not** `./`. When in
203
+ > doubt, use the GitHub marketplace command above — it avoids hand-editing paths.
204
+
205
+ ## Windows
206
+
207
+ ### Prerequisites (Windows)
208
+
209
+ - **Node.js ≥ 18** — install from [nodejs.org](https://nodejs.org), or in PowerShell:
210
+ `winget install OpenJS.NodeJS.LTS`. Verify with `node --version`.
211
+ - (Headless path only) the Codex CLI installed and authenticated. v0.3.0+ supports
212
+ native Windows `codex.cmd` installs; WSL is only a fallback if your Codex CLI
213
+ itself does not work from PowerShell/CMD.
214
+
215
+ ### Install in Codex desktop (Windows)
216
+
217
+ The in-app commands are identical to macOS/Linux — they run **inside Codex**, not in your
218
+ shell, so the OS does not matter:
219
+
220
+ ```text
221
+ codex plugin marketplace add Zhao73/alphacouncil-agent
222
+ # then open Codex → /plugins → switch to the "AlphaCouncil" marketplace → Install → /reload-plugins
223
+ ```
224
+
225
+ Local / personal marketplace (Windows paths). In PowerShell:
226
+
227
+ ```powershell
228
+ git clone https://github.com/Zhao73/alphacouncil-agent.git "$env:USERPROFILE\.codex\plugins\alphacouncil-agent"
229
+ ```
230
+
231
+ Then add an entry to `%USERPROFILE%\.agents\plugins\marketplace.json` whose `source.path`
232
+ points at that folder (copy the shape from `.agents/plugins/marketplace.json` in this repo).
233
+ In JSON, escape Windows backslashes, e.g.:
234
+
235
+ ```json
236
+ { "source": { "path": "C:\\Users\\you\\.codex\\plugins\\alphacouncil-agent" } }
237
+ ```
238
+
239
+ Restart Codex and install from `/plugins`.
240
+
241
+ ### Install in Claude Code (Windows)
242
+
243
+ Identical to other platforms (the commands run inside Claude Code):
244
+
245
+ ```text
246
+ /plugin marketplace add Zhao73/alphacouncil-agent
247
+ /plugin install alphacouncil-agent@alphacouncil
248
+ /reload-plugins
249
+ ```
250
+
251
+ The Claude Code **visible path works natively on Windows** — it never spawns the `codex`
252
+ binary; your Claude Code subagents do the research and record packets via
253
+ `record_visible_*`. **This is the recommended Windows path.**
254
+
255
+ ### Runtime notes (Windows)
256
+
257
+ The **headless Codex path** (`analyze_symbol` / `collect_evidence`, which launch `codex exec`
258
+ workers) is supported on native Windows in v0.3.0+: the server launches through
259
+ `cmd.exe /d /s /c` so `codex.cmd` resolves correctly, and it sends large analyst prompts
260
+ through stdin (`codex exec -`) instead of putting Chinese/multiline prompts on the command
261
+ line. Timeout cleanup uses the normal Node process plus Windows process-tree termination.
262
+
263
+ If headless still fails, check these first:
264
+
265
+ - `node --version` is >= 18.
266
+ - `codex --version` works in PowerShell or CMD.
267
+ - Codex CLI is logged in for the same Windows user running Codex Desktop.
268
+ - If `codex` is not on PATH, set `ALPHACOUNCIL_AGENT_CODEX_CMD` to the absolute path of
269
+ `codex.cmd`.
270
+
271
+ Fallbacks:
272
+
273
+ - Use **WSL** and run Codex + the plugin inside Linux if your native Codex CLI install is broken.
274
+ - Use the **visible path** above when you do not want the MCP server to spawn `codex` at all.
275
+
276
+ Everything else is cross-platform: data lives under `%USERPROFILE%\.alphacouncil-agent\`
277
+ (via `os.homedir()`), paths use `path.join`, and the MCP wiring is plain `node`.
278
+
279
+ ---
280
+
281
+ ## 中文速览
282
+
283
+ - 前置:Node ≥ 18;headless 真跑研究需要已登录的 Codex CLI(worker 是 `codex exec`)。Windows v0.3.0+ 原生支持 `codex.cmd`;WSL 只是 fallback。
284
+ - Codex 安装:`codex plugin marketplace add Zhao73/alphacouncil-agent` → `/plugins` 安装 → `/reload-plugins`;或 clone 到 `~/.codex/plugins/` 走本地 marketplace。
285
+ - Claude Code 安装:`/plugin marketplace add Zhao73/alphacouncil-agent` → `/plugin install alphacouncil-agent@alphacouncil` → `/reload-plugins`。
286
+ - 没有 Codex CLI 时:用 visible 工作流,让 Claude 子代理产出证据并用 `record_visible_*` 录入,无需 codex。
287
+
288
+ ---
289
+
290
+ ## 日本語クイックガイド
291
+
292
+ - 前提:Node ≥ 18。headless でリサーチを実走させるには、認証済みの Codex CLI が必要(worker は `codex exec`)。Windows は v0.3.0+ で `codex.cmd` をネイティブに起動可能。WSL は fallback。
293
+ - Codex でのインストール:`codex plugin marketplace add Zhao73/alphacouncil-agent` → `/plugins` でインストール → `/reload-plugins`。または `~/.codex/plugins/` に clone してローカル marketplace 経由でも可。
294
+ - Claude Code でのインストール:`/plugin marketplace add Zhao73/alphacouncil-agent` → `/plugin install alphacouncil-agent@alphacouncil` → `/reload-plugins`。
295
+ - Codex CLI が無い場合:visible ワークフローを使用。Claude のサブエージェントに根拠を生成させ、`record_visible_*` で記録する(codex 不要)。
package/docs/personas.md CHANGED
@@ -26,16 +26,16 @@ To add a role, add one file. It appears in the tool schema automatically.
26
26
  | `bear_researcher` | debate | yes | default | deep | Bear Researcher | short-case, rebuttal | original |
27
27
  | `portfolio_manager` | debate | yes | default | deep | Portfolio Manager | verdict, rating, synthesis | original |
28
28
  | `_master_base` | master | no | - | deep | Master seat preamble | shared | original |
29
- | `master_aschenbrenner` | master | yes | masters-modern | deep | Aschenbrenner Lens | scaling, compute, power, timeline-pricing | original |
29
+ | `master_aschenbrenner` | master | yes | masters-modern, masters-core | deep | Aschenbrenner Lens | scaling, compute, power, timeline-pricing | original |
30
30
  | `master_buffett` | master | yes | masters-value, masters-core | deep | Buffett Lens | moat, owner-earnings, circle-of-competence | ai-berkshire (MIT) |
31
31
  | `master_graham` | master | yes | masters-value-classic, masters-core | deep | Graham Lens | margin-of-safety, balance-sheet, mr-market | original |
32
32
  | `master_simons` | master | yes | masters-quant, masters-core | deep | Simons Lens | signal-vs-noise, no-narrative, sample-size | original |
33
33
  | `master_soros` | master | yes | masters-adversarial, masters-core | deep | Soros Lens | reflexivity, boom-bust, test-the-thesis | original |
34
- | `master_druckenmiller` | master | yes | masters-adversarial | deep | Druckenmiller Lens | liquidity, concentration, eighteen-months-ahead | original |
35
- | `master_fisher` | master | yes | masters-value-classic | deep | Fisher Lens | scuttlebutt, growth-quality, r-and-d | original |
34
+ | `master_druckenmiller` | master | yes | masters-adversarial, masters-core | deep | Druckenmiller Lens | liquidity, concentration, eighteen-months-ahead | original |
35
+ | `master_fisher` | master | yes | masters-value-classic, masters-core | deep | Fisher Lens | scuttlebutt, growth-quality, r-and-d | original |
36
36
  | `master_munger` | master | yes | masters-value, masters-core | deep | Munger Lens | inversion, mental-models, failure-paths | ai-berkshire (MIT) |
37
37
  | `master_thorp` | master | yes | masters-quant, masters-core | deep | Thorp Lens | kelly-sizing, edge-and-odds, risk-of-ruin | original |
38
- | `master_asness` | master | yes | masters-quant | deep | Asness Factor Lens | factor-exposure, value-momentum-quality, is-it-just-beta | original |
38
+ | `master_asness` | master | yes | masters-quant, masters-core | deep | Asness Factor Lens | factor-exposure, value-momentum-quality, is-it-just-beta | original |
39
39
  | `master_dalio` | master | yes | masters-adversarial, masters-core | deep | Dalio Lens | debt-cycle, machine-view, regime | original |
40
40
  | `master_duan_yongping` | master | yes | masters-value, masters-core | deep | Duan Yongping Lens | business-model, stop-doing-list, corporate-culture | ai-berkshire (MIT) |
41
41
  | `master_lynch` | master | yes | masters-value-classic, masters-core | deep | Peter Lynch Lens | category-first, peg, story-in-two-minutes | original |
@@ -43,7 +43,7 @@ To add a role, add one file. It appears in the tool schema automatically.
43
43
  | `master_marks` | master | yes | masters-value-classic, masters-core | deep | Howard Marks Lens | second-level-thinking, cycle-position, risk-is-permanent-loss | original |
44
44
  | `master_short_seller` | master | yes | masters-adversarial, masters-core | deep | Short Seller Lens | forensic-accounting, crowding, borrow | original |
45
45
  | `master_burry` | master | yes | masters-adversarial, masters-core | deep | Michael Burry Lens | primary-documents, contrarian, structural-short | original |
46
- | `master_klarman` | master | yes | masters-value-classic | deep | Klarman Lens | absolute-return, cash-as-option, bottom-up | original |
46
+ | `master_klarman` | master | yes | masters-value-classic, masters-core | deep | Klarman Lens | absolute-return, cash-as-option, bottom-up | original |
47
47
  | `master_taleb` | master | yes | masters-options, masters-core | deep | Taleb Lens (Convexity and Tails) | tail-risk, convexity, options | original |
48
48
  | `master_natenberg` | master | yes | masters-options, masters-core | deep | Natenberg Lens (Volatility Pricing) | implied-volatility, options-pricing, market-making | original |
49
49
  | `master_sinclair` | master | yes | masters-options, masters-core | deep | Sinclair Lens (Volatility Trading and Execution) | volatility-forecasting, edge-measurement, position-sizing, options | original |
package/mcp/lib/rpc.mjs CHANGED
@@ -582,16 +582,37 @@ export async function handleToolCall(id, params) {
582
582
  }
583
583
  if (name === "list_council_options") {
584
584
  const data = councilOptions({ language: args.language || "English" });
585
- const rows = data.presets.map((p) => [
586
- p.id, p.label, `${p.seats} seats`, `~${p.rough_minutes}m`, p.good_for,
585
+ const zh = /中文|chinese|zh/i.test(String(args.language || ""));
586
+ // Named seats, not three abstractions. A user choosing what to spend on should see who
587
+ // is in the room; "standard, 32 seats" hides both the composition and the omissions --
588
+ // it hid five masters that the preset never actually ran.
589
+ const analystRows = data.analysts.map((a) => [
590
+ a.id, a.title, a.in_default ? (zh ? "默认" : "default") : (zh ? "可选" : "optional"), a.covers || "-",
591
+ ]);
592
+ const masterRows = data.master_rosters.map((r) => [
593
+ r.roster, String(r.count), r.members.map((m) => m.id.replace("master_", "")).join(", "),
587
594
  ]);
588
595
  const text = [
589
- table(["Preset", "What runs", "Seats", "Rough cost", "Good for"], rows, { title: "Choose a council" }),
596
+ table(
597
+ zh ? ["席位", "职责", "是否默认", "覆盖"] : ["Seat", "Role", "In default", "Covers"],
598
+ analystRows, { title: zh ? `分析师 — ${data.analysts.length} 位可选,默认 ${data.default_analysts.length} 位` : `Analysts — ${data.analysts.length} available, ${data.default_analysts.length} in the default fan-out`, zh },
599
+ ),
600
+ "",
601
+ table(
602
+ zh ? ["学派名册", "人数", "成员"] : ["School", "Count", "Members"],
603
+ masterRows, { title: zh ? `大师议席 — 共 ${data.all_masters_count} 位` : `Master bench — ${data.all_masters_count} lenses`, zh },
604
+ ),
590
605
  "",
591
- `Master rosters: ${data.master_rosters.map((r) => `${r.roster} (${r.count})`).join(" · ")} — ${data.all_masters_count} lenses in total.`,
592
- `Analysts: ${data.analysts.length} available, ${data.default_analysts.length} in the default fan-out.`,
606
+ table(
607
+ zh ? ["预设", "内容", "席位", "相对成本"] : ["Preset", "What runs", "Seats", "Relative cost"],
608
+ data.presets.map((p) => [p.id, p.label, `${p.seats}`, `~${p.rough_minutes}`]),
609
+ { title: zh ? "快捷预设(也可以自己点名)" : "Shortcuts — or name the seats yourself", zh },
610
+ ),
593
611
  "",
594
- "Ask the user which they want before starting. Do not ask if they already said.",
612
+ zh
613
+ ? "把上面的名单给用户看,让他们**自己勾选**:可以按学派名册选、可以点名单个席位、也可以全选。预设只是快捷方式,不是唯一选项。用户已经说清楚要什么就别问。"
614
+ : "Show the user these lists and let them **pick**: by school, by individual seat, or all of them. "
615
+ + "The presets are shortcuts, not the only way to choose. Do not ask if they already said.",
595
616
  ].join("\n");
596
617
  sendResult(id, jsonContent(text, data));
597
618
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "0.5.3",
3
+ "version": "0.5.5",
4
4
  "description": "Multi-agent public-equity research workflow plugin for Codex & Claude Code: sourced evidence packets, bull/bear debate, and a portfolio-manager Buy/Overweight/Hold/Underweight/Sell decision.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -60,6 +60,9 @@
60
60
  "commands/",
61
61
  ".claude/commands/",
62
62
  ".opencode/command/",
63
- ".grok/commands/"
63
+ ".grok/commands/",
64
+ "docs/INSTALL.md",
65
+ "SECURITY.md",
66
+ "CONTRIBUTING.md"
64
67
  ]
65
68
  }
@@ -6,7 +6,8 @@
6
6
  "order": 20,
7
7
  "enabled": true,
8
8
  "rosters": [
9
- "masters-adversarial"
9
+ "masters-adversarial",
10
+ "masters-core"
10
11
  ],
11
12
  "title": {
12
13
  "zh": "德鲁肯米勒视角",
@@ -6,7 +6,8 @@
6
6
  "order": 10,
7
7
  "enabled": true,
8
8
  "rosters": [
9
- "masters-modern"
9
+ "masters-modern",
10
+ "masters-core"
10
11
  ],
11
12
  "title": {
12
13
  "zh": "Aschenbrenner 视角",
@@ -6,7 +6,8 @@
6
6
  "order": 30,
7
7
  "enabled": true,
8
8
  "rosters": [
9
- "masters-quant"
9
+ "masters-quant",
10
+ "masters-core"
10
11
  ],
11
12
  "title": {
12
13
  "zh": "Asness 因子视角",
@@ -6,7 +6,8 @@
6
6
  "order": 20,
7
7
  "enabled": true,
8
8
  "rosters": [
9
- "masters-value-classic"
9
+ "masters-value-classic",
10
+ "masters-core"
10
11
  ],
11
12
  "title": {
12
13
  "zh": "费雪视角",
@@ -6,7 +6,8 @@
6
6
  "order": 50,
7
7
  "enabled": true,
8
8
  "rosters": [
9
- "masters-value-classic"
9
+ "masters-value-classic",
10
+ "masters-core"
10
11
  ],
11
12
  "title": {
12
13
  "zh": "克拉曼视角",
@@ -30,32 +30,36 @@ Do not ask startup option questions by default. For underspecified requests such
30
30
 
31
31
  Ask only when the user explicitly requests option selection before launch. Use the inferred language for visible main-thread preflight/progress updates, visible agent prompts, evidence packets, debate packets, and final synthesis unless the user explicitly requests another language. Always pass the original user request in `prompt`, and pass the inferred language as `language` to AlphaCouncil Agent MCP tools.
32
32
 
33
- ## Stage 0 — Ask which council to run (every host)
33
+ ## Stage 0 — Ask which masters, then run
34
34
 
35
- **Before planning a run, call `list_council_options` and let the user choose.**
35
+ **One question, about the master bench only. Then start.**
36
36
 
37
- A council is anywhere from 7 to 44 seats. That range is the user's time and money, and
38
- choosing silently is wrong in both directions: pick small and the bench they were promised
39
- never runs, pick everything and a one-line question costs a full fan-out.
37
+ The analysts have a sensible default -- the eight-seat fan-out -- and asking about them every
38
+ time is a question with an obvious answer. The bench is the part a user actually has a view
39
+ on, and it is where the cost varies most: 21 lenses or 4 is a real difference.
40
40
 
41
- Present the three presets with their seat counts and relative cost, and say that they can
42
- instead name individual analysts and a master roster. Then wait for the answer.
41
+ 1. Call `list_council_options`.
42
+ 2. Ask **once**: which master schools? Offer the six by name with their members, plus "all"
43
+ and "none".
44
+ - **Claude Code** — `AskUserQuestion` with `multiSelect: true`, one option per school,
45
+ each naming its members.
46
+ - **Codex, OpenCode, Grok Build** — print the school table and take a plain reply.
43
47
 
44
- **Do not ask when they have already told you.** A user who named a roster, said "run
45
- everything", said "just be quick", or is repeating a run with the same shape has answered;
46
- asking again is an interruption, not diligence.
48
+ Naming each host is not redundancy. Leaving it implicit is exactly how the master bench
49
+ ended up never running on Codex and OpenCode: the instruction existed, in a section only
50
+ one host read.
51
+ 3. **Then run.** Do not ask about analysts, presets, or confirmation. The answer to "which
52
+ masters" is the whole configuration decision.
47
53
 
48
- How to ask, per host:
54
+ Analysts default to the eight-seat fan-out. Use all eleven only if the user asked for
55
+ breadth, and say so in the report rather than asking first.
49
56
 
50
- - **Claude Code** use `AskUserQuestion` with the presets as options.
51
- - **Codex, OpenCode, Grok Build** ask in chat as a short numbered list and wait for a reply.
57
+ **Skip the question entirely when the request already answered it** — a named school,
58
+ "everything", "no masters", "be quick", or a repeat of a run with the same shape. A
59
+ confirmation nobody needed is an interruption.
52
60
 
53
- Two things to say plainly when you ask:
54
-
55
- - The estimates are relative magnitudes, not promises. "Roughly three times the seats" is
56
- honest; "about 33 minutes" is not.
57
- - If they choose everything, say once that it will be noticeably slower — then run it. They
58
- are allowed to spend their own time; they are not required to guess what it costs.
61
+ Say the cost once, in the same message as the question: each master is one subagent, so the
62
+ bench is the difference between roughly 11 seats and roughly 32. Do not quote minutes.
59
63
 
60
64
  ## Visible-First Workflow
61
65