alphacouncil-agent 1.0.3 → 1.0.13

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 (81) hide show
  1. package/.claude/agents/alphacouncil-insider_sec.md +19 -0
  2. package/.claude/commands/alpha.md +48 -19
  3. package/.claude-plugin/marketplace.json +2 -2
  4. package/.claude-plugin/plugin.json +1 -1
  5. package/.codex-plugin/plugin.json +1 -1
  6. package/.grok/agents/alphacouncil-insider_sec.md +19 -0
  7. package/.grok/commands/alpha.md +48 -19
  8. package/.opencode/agent/alphacouncil-insider_sec.md +19 -0
  9. package/.opencode/command/alpha.md +48 -19
  10. package/CHANGELOG.md +307 -0
  11. package/CLAUDE.md +55 -13
  12. package/README.ja.md +42 -16
  13. package/README.md +70 -27
  14. package/README.zh-CN.md +53 -20
  15. package/SECURITY.md +11 -1
  16. package/commands/alpha.md +48 -19
  17. package/data/build-profile.v1.json +1 -1
  18. package/docs/INSTALL.md +9 -6
  19. package/docs/examples/final_report.SOX.zh.md +442 -0
  20. package/docs/report-contract.md +27 -3
  21. package/knowledge/ai-assisted-solo/experiments/runs/a.json +4 -4
  22. package/knowledge/ai-assisted-solo/experiments/runs/b.json +2 -2
  23. package/knowledge/ai-assisted-solo/experiments/runs/c.json +2 -2
  24. package/knowledge/ai-assisted-solo/experiments/runs/d13.json +16 -16
  25. package/knowledge/ai-assisted-solo/experiments/runs/d26.json +30 -30
  26. package/knowledge/ai-assisted-solo/experiments/runs/e-d13.json +19 -19
  27. package/knowledge/ai-assisted-solo/experiments/runs/e-d26.json +33 -33
  28. package/knowledge/ai-assisted-solo/experiments/runs/h_ai_reference.json +34 -34
  29. package/knowledge/ai-assisted-solo/experiments/simulation-input.json +84 -84
  30. package/knowledge/ai-assisted-solo/experiments/simulation-manifest.json +19 -19
  31. package/knowledge/solo-test/masters/master_ackman/manifest.json +8 -8
  32. package/knowledge/solo-test/masters/master_aschenbrenner/manifest.json +8 -8
  33. package/knowledge/solo-test/masters/master_asness/manifest.json +8 -8
  34. package/knowledge/solo-test/masters/master_bogle/manifest.json +8 -8
  35. package/knowledge/solo-test/masters/master_buffett/manifest.json +8 -8
  36. package/knowledge/solo-test/masters/master_burry/manifest.json +8 -8
  37. package/knowledge/solo-test/masters/master_cathie_wood/manifest.json +8 -8
  38. package/knowledge/solo-test/masters/master_dalio/manifest.json +8 -8
  39. package/knowledge/solo-test/masters/master_damodaran/manifest.json +8 -8
  40. package/knowledge/solo-test/masters/master_druckenmiller/manifest.json +8 -8
  41. package/knowledge/solo-test/masters/master_duan_yongping/manifest.json +8 -8
  42. package/knowledge/solo-test/masters/master_fisher/manifest.json +8 -8
  43. package/knowledge/solo-test/masters/master_forensic_short/manifest.json +8 -8
  44. package/knowledge/solo-test/masters/master_graham/manifest.json +8 -8
  45. package/knowledge/solo-test/masters/master_jhunjhunwala/manifest.json +8 -8
  46. package/knowledge/solo-test/masters/master_klarman/manifest.json +8 -8
  47. package/knowledge/solo-test/masters/master_li_lu/manifest.json +8 -8
  48. package/knowledge/solo-test/masters/master_lynch/manifest.json +8 -8
  49. package/knowledge/solo-test/masters/master_marks/manifest.json +8 -8
  50. package/knowledge/solo-test/masters/master_munger/manifest.json +8 -8
  51. package/knowledge/solo-test/masters/master_natenberg/manifest.json +8 -8
  52. package/knowledge/solo-test/masters/master_pabrai/manifest.json +8 -8
  53. package/knowledge/solo-test/masters/master_simons/manifest.json +8 -8
  54. package/knowledge/solo-test/masters/master_sinclair/manifest.json +8 -8
  55. package/knowledge/solo-test/masters/master_soros/manifest.json +8 -8
  56. package/knowledge/solo-test/masters/master_taleb/manifest.json +8 -8
  57. package/knowledge/solo-test/masters/master_thorp/manifest.json +8 -8
  58. package/mcp/lib/constants.mjs +82 -4
  59. package/mcp/lib/council-options.mjs +8 -4
  60. package/mcp/lib/council-selection.mjs +79 -1
  61. package/mcp/lib/fundamentals.mjs +50 -10
  62. package/mcp/lib/gates.mjs +42 -0
  63. package/mcp/lib/grounding.mjs +27 -1
  64. package/mcp/lib/industry.mjs +9 -1
  65. package/mcp/lib/markdown.mjs +25 -1
  66. package/mcp/lib/orchestrator.mjs +187 -24
  67. package/mcp/lib/personas/engine.mjs +57 -12
  68. package/mcp/lib/personas-v3/runtime.mjs +28 -0
  69. package/mcp/lib/prompts.mjs +72 -3
  70. package/mcp/lib/rpc.mjs +93 -7
  71. package/mcp/lib/run-store.mjs +3 -0
  72. package/mcp/lib/screen.mjs +46 -46
  73. package/mcp/lib/sec.mjs +25 -10
  74. package/mcp/lib/voice-from-decision.mjs +13 -5
  75. package/mcp/lib/weights.mjs +9 -2
  76. package/mcp/lib/xbrl-series.mjs +31 -5
  77. package/package.json +2 -1
  78. package/personas/analysts/insider_sec.md +38 -0
  79. package/scripts/lib/persona-v3-solo-test-packs.mjs +14 -8
  80. package/scripts/review-persona-v3-solo-formulas.mjs +5 -3
  81. package/skills/alphacouncil-agent/SKILL.md +80 -19
package/README.md CHANGED
@@ -31,7 +31,7 @@
31
31
  <p>
32
32
  <a href="docs/INSTALL.md"><b>Install</b></a> ·
33
33
  <a href="#-usage"><b>Usage</b></a> ·
34
- <a href="#-tools--27-all-keyless"><b>Tools</b></a> ·
34
+ <a href="#-tools--31-all-keyless"><b>Tools</b></a> ·
35
35
  <a href="#-the-bench--27-investor-method-lenses"><b>The bench</b></a> ·
36
36
  <a href="#-architecture"><b>Architecture</b></a> ·
37
37
  <a href="CHANGELOG.md"><b>Changelog</b></a> ·
@@ -44,9 +44,9 @@
44
44
 
45
45
  <div align="center">
46
46
 
47
- <img src="assets/run-example.png" alt="A real AlphaCouncil run: six master lenses reaching the same call for different reasons" width="100%" />
47
+ <img src="assets/demo.gif" alt="AlphaCouncil live: a council of analyst agents researching a ticker and debating to a verdict" width="100%" />
48
48
 
49
- <sub><i>A real run. Six lenses, none constructive and the disagreement is in the reasons, not the call.</i></sub>
49
+ <sub><i>A real run, in real time. Want the still version? <a href="assets/run-example.png">Six lenses reaching the same call for different reasons</a> · <a href="docs/examples/final_report.SOX.zh.md">a complete real report</a> (SOX, full council, zh)</i></sub>
50
50
 
51
51
  </div>
52
52
 
@@ -63,7 +63,7 @@ AlphaCouncil Agent is a Codex and Claude Code plugin for public-equity research
63
63
  | 🌏 **What else you are betting on** | Correlation to the broad market, to KOSPI, to KOSDAQ and to the semiconductor cycle, plus dispersion across the eleven sector SPDRs. Sessions pair by date, because Korea and the United States keep different holidays. |
64
64
  | 💵 **Fund flow that refuses to be faked** | Creations minus redemptions, priced. Only a filed share count or the issuer's own assets-over-NAV identity may price a flow; a count reconstructed from positions is refused, because a difference cancels the number and keeps the error. |
65
65
  | 🐂🐻 **Adversarial by design** | Full runs a three-round bull/bear cross-exam and the visible/deep path can add three adversarial verifiers. Quick runs one parallel bull/bear statement round and a short PM; it checks scoped source IDs but explicitly does not claim adversarial verification. |
66
- | ⏱️ **Bounded full headless run** | Plugin-managed full starts all eight analysts together, runs Bull/Bear together inside each round, and persists a terminal run within 30 minutes. Provider failures produce an explicit `incomplete` result, never silently missing seats. |
66
+ | ⏱️ **You pick the depth: 15, 30 or 60 minutes** | The run asks before it starts and shows the expected time beside the hard ceiling for each tier — you never type a speed. All three are the same full contract: eight analysts, three debate rounds, the PM. What changes is how long each seat may think, and a tier shapes the output too, because a shorter fuse on the same prompt buys unfinished work rather than faster work. Plugin-managed full starts all eight analysts together, runs Bull/Bear together inside each round, and persists a terminal run inside the chosen tier. Provider failures produce an explicit `incomplete` result, never silently missing seats. |
67
67
  | 🔍 **Auditable, never hallucinated** | Every claim maps to a source ID. A screen rule with missing inputs is `skipped`, never a pass. An undated headline is excluded, not shown as recent. Gaps are a section, not an omission. |
68
68
  | 🧭 **Company, ETF and index routing** | The symbol is classified before research. Companies use issuer financials; ETFs use dated holdings look-through; indices use aggregate methodology. QQQ/SPY are never treated as companies with their own revenue or EPS. |
69
69
  | 💰 **Entry price bands, not one number** | Three conditional bands with what each depends on. "The cycle position is undetermined" changes what the bands are conditional on; it does not excuse leaving them out. |
@@ -86,11 +86,14 @@ somewhere across a mixed set of symbols, with no contract failures. A basket tha
86
86
  path at all** — `SOX` was in neither registry — now produces 40-plus typed facts, and the seats
87
87
  that read them are running the same methods they run on a company.
88
88
 
89
- Seats carry the `operator_lens` admission level. Their formulas and thresholds are
90
- AI-authored and trace to named published work, but have not been through human review, and the
91
- live four-host end-to-end run has not been executed — so the corpus reports **0** validated
92
- `method_model` seats and **0** approval signatures, and the production assembly path stays
93
- fail-closed until that work is done. `npm run check` prints exactly where that stands.
89
+ Honesty note: seat formulas are AI-authored reconstructions of named published methods,
90
+ pending human review the governance status and what remains open are tracked in
91
+ [the v1.0.0 release contract](docs/releases/v1.0.0.md), and `npm run check` prints
92
+ exactly where that stands.
93
+
94
+ Trust posture: zero runtime dependencies, no install scripts, no telemetry, every data
95
+ source keyless and public; analyst workers run in a read-only sandbox
96
+ (`codex exec -s read-only -a never --ephemeral`). Details in [SECURITY.md](SECURITY.md).
94
97
 
95
98
  See [the v1.0.0 release contract](docs/releases/v1.0.0.md) for the exact ETF/index and full/quick
96
99
  boundary and [the report contract](docs/report-contract.md) for `quick_v1` versus `full_v2`.
@@ -123,6 +126,19 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
123
126
  /reload-plugins
124
127
  ```
125
128
 
129
+ **First run, 30 seconds, zero model spend** — before committing to a full council,
130
+ verify the data layer works:
131
+
132
+ ```text
133
+ /alpha AAPL news
134
+ ```
135
+
136
+ That calls only keyless data tools and spawns no subagents. When it returns dated
137
+ headlines and filings, the install is good; then try a full council with `/alpha AAPL`.
138
+ Note the headless full/quick paths additionally need an authenticated **Codex CLI**
139
+ (each analyst worker runs as `codex exec`) — Claude Code without Codex uses the
140
+ visible host-subagent path instead, see [docs/INSTALL.md](docs/INSTALL.md).
141
+
126
142
  ## 🚀 Usage
127
143
 
128
144
  Just talk to it. Mention the agent and a ticker or a question:
@@ -164,7 +180,7 @@ rather than four in a menu of a hundred.
164
180
 
165
181
  | Invocation | What runs | Model spend |
166
182
  |---|---|---|
167
- | `/alpha <ticker>` | Shows every master, confirms `1..N`/ranges/`all`, then full; plugin-managed headless is ≤30m | deterministic stance + one isolated voice worker per selected v3 seat |
183
+ | `/alpha <ticker>` | Asks the depth tier with its expected time, shows every master, confirms `1..N`/ranges/`all`, then full; headless is bounded by the chosen tier (15/30/60m) | deterministic stance + one isolated voice worker per v3 seat that reached a stance; a frozen abstention is published without one |
168
184
  | `/alpha <ticker> quick` | Shows all 27, confirms 1-4 (no `all`), then plugin-managed `quick_v1` (≤10m) | varies with selection |
169
185
  | `/alpha <ticker> screen` | Mechanical filings screen only | **none** |
170
186
  | `/alpha <ticker> options` | IV term structure, skew, positioning | **none** |
@@ -182,19 +198,46 @@ show the catalog and confirm a fresh, one-use, mode-bound receipt before researc
182
198
  Any listed equity: `/alpha AAPL` · `/alpha 0700.HK quick` · `/alpha 7203.T news` · `/alpha market rates`.
183
199
  Filings-based modes need a US filer; other markets are reported through `market_coverage` rather than silently returning nothing.
184
200
 
185
- ### Full v2 — 30-minute plugin-managed bound
186
-
187
- Plugin-managed headless `analyze_symbol(council_mode="full")` uses one global maximum of
188
- **1800000 ms** from durable queueing through terminal artifact persistence. All eight
189
- mandatory evidence workers start in one parallel wave. After the evidence barrier, each
190
- selected physical v3 method freezes its deterministic stance and gets one isolated voice
191
- worker that can explain, but cannot change, that result. Bull and Bear run in parallel within
192
- each of the three rounds, with a barrier between rounds, followed by the PM.
193
-
194
- At expiry the server persists `incomplete` with every timed-out, failed and skipped role.
195
- Thirty minutes is a terminal-persistence guarantee, not a promise that search, model
196
- transport or data providers will let every seat succeed. A visible-host `plan_visible_run`
197
- is scheduled outside the plugin and cannot be force-stopped, so it has no 30-minute claim.
201
+ ### Full v2 — three depth tiers, chosen at the gate
202
+
203
+ The run asks how deep to go before it asks which methods to seat. You never type a speed:
204
+ `begin_council_selection` returns the menu, with the expected time and the hard ceiling for each
205
+ tier side by side.
206
+
207
+ | tier | expected | ceiling | evidence / seat | debate / round / side |
208
+ | --- | --- | --- | --- | --- |
209
+ | `fast` | ~12 min | 15 min | 3.5 min | 90 s |
210
+ | `normal` (default) | ~20 min | 30 min | 6 min | 150 s |
211
+ | `slow` | ~44 min | 60 min | 12 min | 6 min |
212
+
213
+ **All three are the same `full_v2` contract** eight evidence seats, every selected method,
214
+ three debate rounds, the PM. A tier changes how long each seat may think, never which seats run.
215
+ Both numbers are published because a ceiling shown alone reads as the estimate, and then every
216
+ fast run looks like it takes fifteen minutes.
217
+
218
+ A tier moves every per-stage cap together with the total, and it also shapes what each worker is
219
+ asked to produce. That second half matters: a cap on its own is a timeout, and the same prompt
220
+ with a shorter fuse buys a packet the worker could not finish rather than a faster good one.
221
+ Since an LLM call's wall clock is dominated by the tokens it generates, `fast` asks for the same
222
+ information in less prose — claims, figures, scoped source IDs, required report sections and the
223
+ decision are never what gets cut; restatement is. `slow` buys room to write a derivation out
224
+ step by step.
225
+
226
+ The chosen tier binds into the one-use `selection_receipt`, so an execution call may repeat it
227
+ but never change it: a run approved as fifteen minutes cannot become an hour, and `status.json`
228
+ records which tier produced it. Quick has no tier — it is a smaller contract, not a slower one.
229
+
230
+ All eight mandatory evidence workers start in one parallel wave. After the evidence barrier,
231
+ each selected physical v3 method freezes its deterministic stance; a method that reached a
232
+ stance gets one isolated voice worker that can explain, but cannot change, that result, while a
233
+ frozen abstention is published from its deterministic record without spending a worker. Bull and
234
+ Bear run in parallel within each of the three rounds, with a barrier between rounds, followed by
235
+ the PM.
236
+
237
+ At expiry the server persists `incomplete` with every timed-out, failed and skipped role. The
238
+ tier's ceiling is a terminal-persistence guarantee, not a promise that search, model transport or
239
+ data providers will let every seat succeed. A visible-host `plan_visible_run` is scheduled
240
+ outside the plugin and cannot be force-stopped, so it carries no time claim at all.
198
241
 
199
242
  The resulting full handoff names every selected stable master ID and all eight analysts, and
200
243
  includes a system-owned price snapshot or explicit unavailable-data record. Method-seat
@@ -298,11 +341,11 @@ failure mode** — a seat that cannot name how it goes wrong will not flag it wh
298
341
  | Quant | Simons · Asness · Thorp |
299
342
  | Options | Taleb · Natenberg · Sinclair |
300
343
  | Modern | Aschenbrenner |
301
- | v3 expansion | Damodaran · Ackman · Cathie Wood · Pabrai · Jhunjhunwala |
344
+ | v3 expansion | Damodaran · Ackman · Cathie Wood · Pabrai · Bogle · Jhunjhunwala |
302
345
 
303
346
  The `solo_test` catalog has 27 selectable physical v3 packs, but **27 physical packs is
304
347
  not 27 approved method models**. Every seat is a provisional `operator_lens` backed by
305
- project-derived proxy material; the 52 tools are executable test proxies, not human-approved
348
+ project-derived proxy material; the 54 tools are executable test proxies, not human-approved
306
349
  formula attribution. Operational and `method_model` counts are both zero, and production GA
307
350
  remains fail-closed.
308
351
 
@@ -346,7 +389,7 @@ flowchart TD
346
389
  PM --> R[["final_report.md<br/>verdict + entry price bands"]]
347
390
  ```
348
391
 
349
- The masters branch off the facts, not off the packets. Feeding 26 lenses one analyst's
392
+ The masters branch off the facts, not off the packets. Feeding 27 lenses one analyst's
350
393
  selection of what mattered would give them all the same blind spot — a large and perfectly
351
394
  correlated error — and would remove the reason for having a bench at all.
352
395
 
@@ -365,7 +408,7 @@ For full council, both editions share the same workflow, JSON packet contract, a
365
408
 
366
409
  | | Codex edition | Claude Code edition |
367
410
  |---|---|---|
368
- | Council execution | plugin-managed `codex exec` workers; full headless ≤30m | Host-owned `Task` subagents; no plugin-enforced deadline |
411
+ | Council execution | plugin-managed `codex exec` workers; full headless ≤15/30/60m by chosen tier | Host-owned `Task` subagents; no plugin-enforced deadline at all |
369
412
  | Quick `quick_v1` | Plugin-managed headless `analyze_symbol` | Same plugin-managed headless `analyze_symbol` |
370
413
  | Per-analyst context | Separate process | Separate subagent, full isolated context window |
371
414
  | Evidence | `codex exec --search` | `WebSearch` + `WebFetch` in each analyst's own context |
package/README.zh-CN.md CHANGED
@@ -35,9 +35,9 @@
35
35
 
36
36
  <div align="center">
37
37
 
38
- <img src="assets/run-example.png" alt="A real AlphaCouncil run: six master lenses reaching the same call for different reasons" width="100%" />
38
+ <img src="assets/demo-zh.gif" alt="AlphaCouncil 实时运行:分析师委员会取证、辩论并给出裁决" width="100%" />
39
39
 
40
- <sub><i>一次真实运行。六位大师无一支持买入 —— 而分歧不在结论,在理由。</i></sub>
40
+ <sub><i>一次真实运行的实录。静态版:<a href="assets/run-example.png">六位大师殊途同归</a> · <a href="docs/examples/final_report.SOX.zh.md">一份完整真实报告</a>(SOX,full council)</i></sub>
41
41
 
42
42
  </div>
43
43
 
@@ -49,10 +49,10 @@ AlphaCouncil Agent 是一个面向**上市股票研究**的 Codex / Claude Code
49
49
  |---|---|
50
50
  | 🏛️ **是委员会,不是一家之言** | 完整模式默认 8 个证据席、最多 11 个;quick 固定 4 个并行证据席。两者都在研究前完整展示 27 个方法席。 |
51
51
  | 🐂🐻 **天生对抗式** | 完整模式跑三轮多空交叉质询;quick 只跑一轮并行 Bull/Bear 陈述和短 PM,且明确不声称完成对抗 verifier。 |
52
- | ⏱️ **完整 headless 有硬时限** | 插件托管 full 8 个分析师同波启动、每轮 Bull/Bear 同时启动,并在 30 分钟内保存终态;外部服务故障会明确 `incomplete`,不会静默漏席。 |
52
+ | ⏱️ **完整 headless 有硬时限,且有三档深度** | 开场问答里选 fast / normal / slow(预计 ~12 / ~20 / ~44 分钟,上限 15 / 30 / 60),三档都是同一个完整契约,只改每席能想多久。8 个分析师同波启动、每轮 Bull/Bear 同时启动、在所选档位内保存终态;外部服务故障会明确 `incomplete`,不会静默漏席。 |
53
53
  | 🔍 **可审计,不瞎编** | 每条结论都映射到 source ID;缺失数据写进「数据缺口」章节,绝不隐藏。 |
54
54
  | ⏱️ **多周期结论** | 买入/持有/卖出,外加独立的 1-4 周、3-6 月、12 月判断。 |
55
- | 🔑 **不依赖金融 API,无需任何密钥** | 不需要金融数据 API、行情源或券商账号。分析师通过代理自带的联网搜索实时取证(**Codex 网页搜索** / **Claude Code 的 WebSearch + WebFetch**),只消耗你已有的 Codex / Claude Code 订阅额度。MIT 开源。 |
55
+ | 🔑 **31 个工具,零 API 密钥,零依赖** | 数据全部来自免密钥公开源(SEC EDGAR、CBOE、Yahoo/Stooq、21 组宏观序列),不需要付费行情或券商账号;分析师另通过代理自带的联网搜索实时取证(**Codex 网页搜索** / **Claude Code 的 WebSearch + WebFetch**),只消耗你已有的 Codex / Claude Code 订阅额度。MIT 开源。 |
56
56
  | 📚 **内置研究方法论** | 股票研究与投行事件分析的方法论以**本地 skill** 形式打包(`skills/public-equity-investing`、`skills/investment-banking`)——不依赖 Codex 专属远程工作流,Claude Code 也能获得同等研究深度。 |
57
57
  | 📈 **真实行情兜底,免 key** | 内置 `get_quote` 通过 Yahoo + Stooq 拉延迟(~15分钟)的指数 / 股指期货(含夜盘)/ 汇率 / 利率 / 波动率 / 商品 / 个股点位——不用 API key,分析师引用真实数字而非猜测。 |
58
58
  | 🧭 **公司、ETF 与指数正确分流** | 先识别资产再研究:公司走发行人财务,ETF 走带时点持仓穿透,指数走聚合方法;QQQ/SPY 不会再被当成有自身营收和 EPS 的公司。 |
@@ -100,6 +100,17 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
100
100
  /reload-plugins
101
101
  ```
102
102
 
103
+ **装完先花 30 秒零成本验证** —— 在跑完整委员会之前,先确认数据层通了:
104
+
105
+ ```text
106
+ /alpha AAPL news
107
+ ```
108
+
109
+ 这条只调用免密钥数据工具、不派生任何子代理,返回带日期的新闻和公告即说明安装成功;
110
+ 然后再跑 `/alpha AAPL` 完整委员会。注意 headless 全量/快速路径还需要已登录的
111
+ **Codex CLI**(每个分析师 worker 都是 `codex exec`);只有 Claude Code 时走可见
112
+ 子代理路径,见 [docs/INSTALL.md](docs/INSTALL.md)。
113
+
103
114
  ## 🚀 用法
104
115
 
105
116
  直接对它说话,@ 一下代理,带上代码或问题:
@@ -138,7 +149,7 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
138
149
 
139
150
  | 输入 | 跑什么 | 额度消耗 |
140
151
  |---|---|---|
141
- | `/alpha <ticker>` | 逐人展示全部大师,确认后运行 full;插件托管 headless ≤30 分钟 | 每个所选 v3 席为确定性立场 + 一个独立 voice worker |
152
+ | `/alpha <ticker>` | 先问跑多深(三档,带预计时间),再逐人展示全部大师,确认后运行 full | 每个达成立场的 v3 席为确定性立场 + 一个独立 voice worker;弃权席直接发布 |
142
153
  | `/alpha <ticker> quick` | 展示全部 27 席,确认 1-4 席(禁用 `all`),再跑插件托管 `quick_v1`(≤10 分钟) | 随选择数量变化 |
143
154
  | `/alpha <ticker> screen` | 只跑机械筛选 | **零** |
144
155
  | `/alpha <ticker> options` | 隐含波动率期限结构、偏斜、持仓分布 | **零** |
@@ -151,17 +162,39 @@ codex plugin marketplace add Zhao73/alphacouncil-agent
151
162
  任何上市股票:`/alpha AAPL` · `/alpha 0700.HK quick` · `/alpha 7203.T news` · `/alpha market rates`。
152
163
  基于申报的模式需要美国申报主体;其他市场会通过 `market_coverage` 说明覆盖情况,而不是静默返回空结果。
153
164
 
154
- ### Full v2 —— 插件托管 30 分钟硬上限
165
+ ### Full v2 —— 三档深度,在开场问答里选
166
+
167
+ 运行会**先问你要跑多深**,再问要坐哪些方法席。你不需要输入任何速度关键词:
168
+ `begin_council_selection` 会返回菜单,每档并列给出预计耗时与硬上限。
169
+
170
+ | 档位 | 预计 | 硬上限 | 每证据席 | 每轮辩论每侧 |
171
+ | --- | --- | --- | --- | --- |
172
+ | `fast` 快速 | ~12 分钟 | 15 分钟 | 3.5 分钟 | 90 秒 |
173
+ | `normal` 标准(默认) | ~20 分钟 | 30 分钟 | 6 分钟 | 150 秒 |
174
+ | `slow` 深入 | ~44 分钟 | 60 分钟 | 12 分钟 | 6 分钟 |
175
+
176
+ **三档都是同一个 `full_v2` 契约**——同样 8 个证据席、同样跑完所有所选方法、同样三轮辩论、
177
+ 同样 PM。档位只改**每席能想多久**,不改跑哪些席。两个数字都给,是因为只给上限会被读成预估,
178
+ 于是每次 fast 都看起来要 15 分钟。
179
+
180
+ 档位同时抬升总额与**每个分段上限**,并且还会调整对 worker 的产出要求。后半句很关键:光有上限
181
+ 只是超时,同一份提示词配更短的引信买到的是**没写完的包**,不是更快的好包。LLM 单次调用的
182
+ 墙钟时间主要由它生成的 token 决定,所以 `fast` 是**用更少的散文要同样的信息**——主张、数字、
183
+ 作用域来源 ID、必需报告章节和结论本身永远不在被砍之列,被砍的是复述。`slow` 买到的则是把
184
+ 推导逐步写完的空间。
185
+
186
+ 所选档位会绑进一次性 `selection_receipt`:执行调用可以重复它,但**不能改**它——批准了 15 分钟
187
+ 的运行不会变成一小时,`status.json` 也记录是哪一档跑出来的。quick 没有档位,它是更小的契约,
188
+ 不是更慢的。
155
189
 
156
- 插件托管 headless `analyze_symbol(council_mode="full")` 从持久化 queued 状态到终态工件落盘,
157
- 全局硬上限为 **1800000 ms**。8 个必需证据席同波并行。证据门禁通过后,每个所选物理 v3
158
- 方法先运行确定性政策并冻结立场,再启动一个只属于该 stable ID 的独立 voice worker;它可以
159
- 解释立场,但不能改立场或补造 typed fact。三轮中每轮 Bull/Bear 同时启动,二者都完成后才
160
- 进入下一轮,最后才运行 PM。
190
+ 8 个必需证据席同波并行。证据门禁通过后,每个所选物理 v3 方法先运行确定性政策并冻结立场;
191
+ **达成立场**的席位会获得一个只属于该 stable ID 的独立 voice worker(可以解释立场,但不能改
192
+ 立场或补造 typed fact),而**冻结为弃权**的席位直接用其确定性记录发布,不再消耗 worker
193
+ 三轮中每轮 Bull/Bear 同时启动,二者都完成后才进入下一轮,最后才运行 PM。
161
194
 
162
- 时限到达时,系统以 `incomplete` 保存终态,并逐项列出超时、失败和跳过的席位。30 分钟保证
163
- 的是“必有可审计终态”,不是搜索、模型传输或数据源恶化时仍保证全席成功。visible-host 的
164
- `plan_visible_run` 由外部宿主调度,插件无法强制终止其子代理,因此不享有这个硬时限。
195
+ 时限到达时,系统以 `incomplete` 保存终态,并逐项列出超时、失败和跳过的席位。档位上限保证
196
+ 的是"必有可审计终态",不是搜索、模型传输或数据源恶化时仍保证全席成功。visible-host 的
197
+ `plan_visible_run` 由外部宿主调度,插件无法强制终止其子代理,因此**完全不享有任何时限承诺**。
165
198
 
166
199
  full 的交付摘要必须列出全部所选 stable master ID、全部 8 个分析师,以及系统行情快照或
167
200
  明确的不可用缺口。方法席 voice 是本次运行记录的 provisional lens 解释,**不是真人原话、
@@ -239,7 +272,7 @@ Claude Code、OpenCode、Grok Build 装完即可用。Codex 的 prompts 是用
239
272
  - **无可解析时间戳的新闻条目被剔除**,不会被展示为「最新」。
240
273
  - **报 `iv = 0` 的合约被丢弃** —— CBOE 对已过期和深度实值合约返回 0,而 0 混进均值不像缺失值,像一只很平静的股票。
241
274
 
242
- ## 🏛️ 大师议席 —— 26
275
+ ## 🏛️ 大师议席 —— 27
243
276
 
244
277
  这是对公开方法论的重构,**不是本人的任何表述**。每一位都写明自己怎么思考、最先注意什么、典型追问是什么,以及**自己的失败模式** —— 说不出自己怎么错的席位,出错时不会举手。
245
278
 
@@ -251,10 +284,10 @@ Claude Code、OpenCode、Grok Build 装完即可用。Codex 的 prompts 是用
251
284
  | 量化 | 西蒙斯 · Asness · 索普 |
252
285
  | 期权 | 塔勒布 · 纳坦伯格 · 辛克莱 |
253
286
  | 现代 | Aschenbrenner |
254
- | v3 扩展 | 达莫达兰 · 阿克曼 · 凯茜·伍德 · Pabrai · 琼琼瓦拉 |
287
+ | v3 扩展 | 达莫达兰 · 阿克曼 · 凯茜·伍德 · Pabrai · 博格 · 琼琼瓦拉 |
255
288
 
256
289
  1.0.0 `solo_test` 目录已有 27 个可选的物理 v3 包,但 **27 个物理包不等于 27 个已获批的
257
- 方法模型**。所有 27 席都只是 provisional `operator_lens`;52 个工具是可执行的
290
+ 方法模型**。所有 27 席都只是 provisional `operator_lens`;54 个工具是可执行的
258
291
  `provisional_derived_proxy` 测试代理,不是经过人工审批的公式归因。`operational` 与
259
292
  `method_model` 数量均为 0,正式生产 GA 继续 fail-closed。
260
293
 
@@ -269,7 +302,7 @@ Bull/Bear 陈述和短 PM;它不运行图中的 verifier 节点。
269
302
  flowchart TD
270
303
  U["@alphacouncil-agent"] --> G[("Established facts<br/>filings · quotes · macro · options")]
271
304
  G --> AG{{"Analyst council"}}
272
- G --> MS{{"Master bench<br/>26 lenses"}}
305
+ G --> MS{{"Master bench<br/>27 lenses"}}
273
306
  AG --> A1["Market data"]
274
307
  AG --> A2["Earnings"]
275
308
  AG --> A3["Valuation"]
@@ -294,7 +327,7 @@ flowchart TD
294
327
  PM --> R[["final_report.md"]]
295
328
  ```
296
329
 
297
- 大师从事实分叉,而非从分析师的证据包分叉。让 26 位大师共用一位分析师对「什么重要」的取舍,会给他们同一个盲区 —— 一个又大又完全相关的误差 —— 也就取消了设立议席的理由。
330
+ 大师从事实分叉,而非从分析师的证据包分叉。让 27 位大师共用一位分析师对「什么重要」的取舍,会给他们同一个盲区 —— 一个又大又完全相关的误差 —— 也就取消了设立议席的理由。
298
331
 
299
332
  关键文件:
300
333
 
@@ -311,7 +344,7 @@ flowchart TD
311
344
 
312
345
  | | Codex 版 | Claude Code 版 |
313
346
  |---|---|---|
314
- | 委员会执行 | 插件托管 `codex exec` worker;full headless ≤30 分钟 | 宿主调度 `Task` 子代理;插件无法强制时限 |
347
+ | 委员会执行 | 插件托管 `codex exec` worker;full headless 按所选档位 15/30/60 分钟 | 宿主调度 `Task` 子代理;插件无法强制时限 |
315
348
  | 每个分析师上下文 | 独立进程 | 独立子代理,各自完整独立上下文窗口 |
316
349
  | 取证 | `codex exec --search` | 每个分析师在自己上下文里用 `WebSearch` + `WebFetch` |
317
350
  | 证据 → 辩论 | 8 席同波并行后经过硬 barrier | 基于运行相位机的硬性 barrier 门控 |
package/SECURITY.md CHANGED
@@ -20,9 +20,19 @@ AlphaCouncil Agent runs an autonomous research workflow. Be aware that:
20
20
  captured from third-party pages. These are **not** committed (ignored by
21
21
  `.gitignore`) — mind what you share.
22
22
  - Never commit API keys, tokens, brokerage credentials, or private filings.
23
+ - `preflight_permissions` reads the host's own configuration files
24
+ (`~/.claude/settings.json`, `~/.claude/settings.local.json`, OpenCode config)
25
+ **read-only**, to detect whether background agents would silently lose web
26
+ search and degrade into unsourced reports. Nothing is written and nothing
27
+ leaves the machine.
28
+ - Worker subprocesses are launched sandboxed: `codex exec` runs with
29
+ `-s read-only -a never --ephemeral --ignore-user-config`, so an analyst
30
+ worker cannot write to disk, auto-approve actions, or recursively load the
31
+ user's own MCP configuration.
23
32
  - This software is for educational/research use only and is **not investment
24
33
  advice** (see the README disclaimer).
25
34
 
26
35
  ## Supported versions
27
36
 
28
- This project is pre-1.0. Only the latest `main` is supported.
37
+ Only the latest published release (npm `latest`) and the current `main` branch
38
+ are supported. Older versions receive no fixes.
package/commands/alpha.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  description: Equity research council — full run, quick read, mechanical screen, or market narrative
3
- argument-hint: [ticker] [quick|screen|market|options|news] · or just a question
3
+ argument-hint: [ticker] [fast|slow|quick|screen|market|options|news] · or just a question
4
4
  ---
5
5
 
6
6
  # /alpha
@@ -12,7 +12,8 @@ Request: **$ARGUMENTS**
12
12
  | `$ARGUMENTS` looks like | Do this |
13
13
  |---|---|
14
14
  | *(empty)* | Print the mode table below and stop. Do not start a run. |
15
- | a ticker alone, or a question | **Full council.** Go to "Full council" below. Plugin-managed headless has a hard 30-minute queue-to-terminal bound; visible-host execution does not. |
15
+ | a ticker alone, or a question | **Full council** at the `normal` pace. Go to "Full council" below. Plugin-managed headless is bound by the selected pace; visible-host execution has no bound at all. |
16
+ | ticker + `fast` / `slow` / `deep` | Full council with that tier **prefilled**. Still show the pace menu and take the answer, exactly as with a named master. |
16
17
  | ticker + `quick` | The plugin-managed headless `quick_v1` council: 4 fixed analysts, 1-4 selected methods, one parallel bull/bear round and a short PM inside a hard 10-minute ceiling. |
17
18
  | ticker + `screen` | `screen_ticker` only. No language-model judgment, no subagents. |
18
19
  | ticker + `options` | `get_options_chain` only. |
@@ -22,15 +23,22 @@ Request: **$ARGUMENTS**
22
23
  When `$ARGUMENTS` is empty, print exactly this and stop:
23
24
 
24
25
  ```
25
- /alpha <TICKER> full council — shows every master; headless run is bounded <=30m
26
+ /alpha <TICKER> full council — asks how deep to go, then shows every master
27
+ /alpha <TICKER> fast same, with the 15-minute tier prefilled
28
+ /alpha <TICKER> slow same, with the 60-minute tier prefilled
26
29
  /alpha <TICKER> quick quick_v1: 4 analysts incl. news + 1-4 masters + 1 parallel debate round (<=10m)
27
30
  /alpha <TICKER> screen mechanical filings screen only (no model spend)
28
31
  /alpha <TICKER> options IV term structure, skew, positioning (no model spend)
29
32
  /alpha <TICKER> news dated filings and headlines (no model spend)
30
33
  /alpha market <theme> what the market is talking about (no model spend)
31
34
 
35
+ you do not have to type a speed: the run asks, and shows the predicted time for each
36
+ tier. all three tiers are the same full_v2 contract at three depths; quick is a SMALLER
37
+ contract (4 analysts, 1 debate round) and is never full-equivalent
38
+
32
39
  examples
33
40
  /alpha AAPL /alpha 0700.HK quick /alpha 7203.T news
41
+ /alpha NVDA slow /alpha MSFT fast
34
42
  /alpha NVDA screen /alpha market rates /alpha "is TSM cheap?"
35
43
  ```
36
44
 
@@ -51,24 +59,40 @@ the same in Claude Code, Codex, OpenCode and Grok Build.
51
59
  1. Call `begin_council_selection` with the symbol, original request, language, host and the
52
60
  intended `council_mode` (`full` by default; exactly `quick` for quick mode). If
53
61
  the request explicitly names masters, also pass those stable IDs as
54
- `preselected_master_ids`; this highlights them but does not confirm them.
55
- 2. Show **every returned master individually, in the returned order and with its stable
62
+ `preselected_master_ids`; if it named a speed, pass `council_pace`. Both highlight a choice
63
+ without confirming it.
64
+ 2. **Ask how deep to go first**, from the returned `pace_options`. It is a three-option
65
+ question and the catalog is long, so it goes above the catalog. Show BOTH numbers per tier
66
+ — the expected time and the hard ceiling — because a ceiling alone reads as the estimate:
67
+
68
+ ```
69
+ 本次分析要跑多深?(默认 2)
70
+ 1. 快速 预计 ~12 分钟(上限 15) 每证据席 3.5 分钟,每轮辩论每侧 90 秒
71
+ 2. 标准 预计 ~20 分钟(上限 30) 每证据席 6 分钟,每轮辩论每侧 150 秒 ← 默认
72
+ 3. 深入 预计 ~44 分钟(上限 60) 每证据席 12 分钟,每轮辩论每侧 360 秒
73
+ 三档都是完整评议:同样 8 个证据席、同样三轮辩论、同样 PM,只是每席能想多久不同。
74
+ ```
75
+
76
+ Quick returns an empty menu and rejects the field; say so rather than offering a tier.
77
+ 3. Show **every returned master individually, in the returned order and with its stable
56
78
  number**. Each row must include `identity`, `method`, `best_for` and `maturity`; a school
57
79
  name or a count is not a substitute for the individual catalog.
58
- 3. Ask for one submission. In full mode accept one number from `1..N`, combinations,
80
+ 4. Ask for one submission covering both the tier and the seats. In full mode accept one number from `1..N`, combinations,
59
81
  ranges, stable IDs/names, or `all`. In quick mode the same complete 26-seat catalog is
60
82
  displayed, but the submission must contain **1..4 seats** and `all` / `select_all` is
61
83
  forbidden. A host-native multi-select is a convenience only. If it is unavailable or
62
84
  cannot show the full catalog, use the numbered text table and plain reply on every host.
63
- 4. If the original full-mode request already named masters or said `all`, prefill that choice but
85
+ 5. If the original full-mode request already named masters or said `all`, prefill that choice but
64
86
  **still show the full catalog and require this run's submission**. Do not silently reuse a
65
87
  prior choice. For quick, prefill at most four named methods and ask the user to reduce an
66
88
  oversized/`all` request to 1-4. The submitted choice is the confirmation; do not ask a
67
89
  second confirmation.
68
- 5. Call `confirm_master_selection` with the returned `selection_id`, `catalog_hash`,
69
- `display_ack: true`, and exactly one of `selected_master_ids`, `select_all: true`, or
70
- `selection`. Retain the returned one-use `selection_receipt`.
71
- 6. Only now call `plan_visible_run` (full only), `collect_evidence` (full only), or
90
+ 6. Call `confirm_master_selection` with the returned `selection_id`, `catalog_hash`,
91
+ `display_ack: true`, the answered `council_pace` (omit to accept `normal`), and exactly one
92
+ of `selected_master_ids`, `select_all: true`, or `selection`. Retain the returned
93
+ one-use `selection_receipt`. The pace binds into it: an execution call may repeat the confirmed tier
94
+ but never change it, so a user who approved 15 minutes cannot end up running an hour.
95
+ 7. Only now call `plan_visible_run` (full only), `collect_evidence` (full only), or
72
96
  `analyze_symbol`, passing that `selection_receipt` and the same symbol, prompt, language
73
97
  and `council_mode`. Quick must use `analyze_symbol`. Do not also pass `masters` or
74
98
  `masters_roster`; the receipt is authoritative and mode-bound. A full receipt cannot start
@@ -97,14 +121,19 @@ master-selection contract.
97
121
  fails after its bounded parse repair, do not spend more model calls on masters, bull/bear
98
122
  or PM. Persist an `incomplete` run naming the failed evidence and skipped downstream roles.
99
123
  7. For the hard runtime contract, call plugin-managed headless `analyze_symbol` once with
100
- `council_mode:"full"`, `wait_for_completion:false`, the full-mode receipt and optionally
101
- `total_timeout_ms` no greater than `1800000`. Poll the same durable `run_id` to terminal.
102
- All eight mandatory evidence roles start in one wave; every selected v3 method gets a
103
- frozen deterministic stance plus its own isolated voice worker; Bull/Bear run in parallel
104
- within each of three rounds with a barrier between rounds; then the PM runs. Queueing,
105
- retries and final persistence share the 30-minute clock. At expiry the saved run is
106
- `incomplete`, never silently shortened or relabeled complete. This guarantees terminal
107
- persistence, not all-seat success during search/model/data-provider degradation.
124
+ `council_mode:"full"`, `wait_for_completion:false`, the full-mode receipt, and
125
+ `council_pace` when the arguments asked for a speed: `fast` for 15 minutes, `slow` (or
126
+ `deep`) for 60, omitted for the 30-minute default. Poll the same durable `run_id` to
127
+ terminal. All eight mandatory evidence roles start in one wave; every selected v3 method
128
+ gets a frozen deterministic stance plus its own isolated voice worker; Bull/Bear run in
129
+ parallel within each of three rounds with a barrier between rounds; then the PM runs.
130
+ Queueing, retries and final persistence share the selected tier's clock. At expiry the
131
+ saved run is `incomplete`, never silently shortened or relabeled complete. This guarantees
132
+ terminal persistence, not all-seat success during search/model/data-provider degradation.
133
+ Pass `total_timeout_ms` only to LOWER the tier's budget; above it the call is rejected.
134
+ Tell the user which pace ran and what it bought: the tier raises every per-stage cap, so
135
+ `slow` gives each evidence seat 12 minutes instead of 6 and each debate round 6 minutes per
136
+ side instead of 150 seconds. All three paces are the same `full_v2` contract.
108
137
  8. `plan_visible_run` is owned by the external host. The plugin cannot force-stop its Task
109
138
  agents, so visible-host full must not be advertised as meeting the 30-minute deadline.
110
139
  9. The terminal full handoff must include the system price snapshot (or explicit unavailable
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema_version": 1,
3
3
  "channel": "solo_test",
4
- "package_version": "1.0.3",
4
+ "package_version": "1.0.13",
5
5
  "persona_pack_version": "0.9.4",
6
6
  "pack_root": "knowledge/solo-test/masters",
7
7
  "assurance_class": "provisional_derived_proxy",
package/docs/INSTALL.md CHANGED
@@ -16,11 +16,11 @@ plain MCP server in the Claude desktop app.
16
16
  npm install -g alphacouncil-agent
17
17
  ```
18
18
 
19
- That is 1.0.0. To pin the version or install straight from the tag:
19
+ That installs the current release. To pin a version or install straight from a tag:
20
20
 
21
21
  ```bash
22
- npm install -g alphacouncil-agent@1.0.0
23
- npm install -g github:Zhao73/alphacouncil-agent#v1.0.0
22
+ npm install -g alphacouncil-agent@latest
23
+ npm install -g github:Zhao73/alphacouncil-agent#main
24
24
  ```
25
25
 
26
26
  `npm view alphacouncil-agent dist-tags --json` shows what each channel currently serves.
@@ -83,8 +83,11 @@ voice is a recorded provisional method result, not the named person's words.
83
83
  ### What full headless means
84
84
 
85
85
  Full remains `full_v2`. When launched through plugin-managed headless
86
- `analyze_symbol(council_mode="full")`, it has a hard maximum of 1800000 ms from durable
87
- queueing through terminal artifact persistence:
86
+ `analyze_symbol(council_mode="full")`, it runs at one of three depth tiers selected with
87
+ `council_pace` -- `fast` 15 minutes, `normal` (default) 30, `slow` 60 -- measured from durable
88
+ queueing through terminal artifact persistence. The tier raises every per-stage cap with the
89
+ total, which is where the depth difference lives; all three are the same eight-seat,
90
+ three-round `full_v2` contract:
88
91
 
89
92
  - all eight mandatory evidence workers start in one parallel wave;
90
93
  - after the fail-closed evidence barrier, each selected physical v3 method freezes its
@@ -112,7 +115,7 @@ runs full. It is managed by the plugin's headless `analyze_symbol` path so the M
112
115
  enforce a wall-clock deadline. `plan_visible_run` rejects `council_mode=quick` rather than
113
116
  pretending an external host Task can be force-stopped by the plugin.
114
117
 
115
- - Stage 0 still displays the complete 26-seat catalog, but quick accepts exactly 1-4 selected
118
+ - Stage 0 still displays the complete 27-seat catalog, but quick accepts exactly 1-4 selected
116
119
  methods and forbids `all` / `select_all`.
117
120
  - The receipt is bound to symbol, prompt, language and `council_mode`; it cannot be reused
118
121
  across quick and full.