alphacouncil-agent 1.0.4 → 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 (79) 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 +282 -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-selection.mjs +79 -1
  60. package/mcp/lib/gates.mjs +42 -0
  61. package/mcp/lib/grounding.mjs +27 -1
  62. package/mcp/lib/industry.mjs +9 -1
  63. package/mcp/lib/markdown.mjs +25 -1
  64. package/mcp/lib/orchestrator.mjs +187 -24
  65. package/mcp/lib/personas/engine.mjs +57 -12
  66. package/mcp/lib/personas-v3/runtime.mjs +28 -0
  67. package/mcp/lib/prompts.mjs +72 -3
  68. package/mcp/lib/rpc.mjs +93 -7
  69. package/mcp/lib/run-store.mjs +3 -0
  70. package/mcp/lib/screen.mjs +46 -46
  71. package/mcp/lib/sec.mjs +25 -10
  72. package/mcp/lib/voice-from-decision.mjs +13 -5
  73. package/mcp/lib/weights.mjs +9 -2
  74. package/mcp/lib/xbrl-series.mjs +21 -2
  75. package/package.json +2 -1
  76. package/personas/analysts/insider_sec.md +38 -0
  77. package/scripts/lib/persona-v3-solo-test-packs.mjs +14 -8
  78. package/scripts/review-persona-v3-solo-formulas.mjs +5 -3
  79. package/skills/alphacouncil-agent/SKILL.md +80 -19
@@ -28,6 +28,25 @@ Key items: 1.01 material agreement, 2.02 results, 4.01 auditor change, 4.02 prio
28
28
  4. **Dilution**
29
29
  Shares outstanding across several years. Persistent dilution discounts every per-share growth figure, and that is routinely ignored in growth discussions.
30
30
 
31
+ ## How to actually retrieve the filings (EDGAR throttles; this section decides whether this seat has primary evidence at all)
32
+
33
+ EDGAR answers **HTTP 429** to a client without a descriptive User-Agent, and `www.sec.gov` is throttled harder than `data.sec.gov`. **Rapidly trying different URLs makes the throttling worse, not better** -- on one real run eight different URLs were tried in a row, all returned 429, and not a single filing was read.
34
+
35
+ Retrieve in this order and stop as soon as you have what you need:
36
+
37
+ 1. `https://data.sec.gov/submissions/CIK##########.json` (CIK zero-padded to ten digits) -- the filing index. The most tolerant endpoint, and one call returns every form type, accession number and filed date.
38
+ 2. `https://data.sec.gov/api/xbrl/companyfacts/CIK##########.json` -- XBRL numbers such as share count and stockholders' equity.
39
+ 3. `https://www.sec.gov/Archives/edgar/data/<CIK without leading zeros>/<accession without dashes>/<primary document>` -- the specific Form 4 or 8-K text.
40
+ 4. EDGAR full-text search and `cgi-bin/browse-edgar` **last**: they are throttled the hardest and tell you nothing the first three cannot.
41
+
42
+ On a 429: **wait a few seconds and retry the same URL** rather than immediately switching to a different one. Retry one document at most three times; if all three are limited, record the retrieval as failed and follow the degradation rule below.
43
+
44
+ **Degradation rule (mandatory, and not to be softened)** -- when no filing was read directly:
45
+ - the first sentence of `summary` must state that no EDGAR original was read and that everything was cross-checked through secondary sources instead;
46
+ - `confidence` is capped at `low`;
47
+ - `open_questions` lists each failed URL with its status code;
48
+ - every item taken from a mirror or aggregator is labelled second-hand. **Never write mirror content as "verified against the filing".**
49
+
31
50
  ## Hard rules
32
51
 
33
52
  - **Every item carries the filing link and the filed date** -- the filed date, not the period end.
@@ -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
@@ -6,14 +6,14 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "AlphaCouncil plugins for public-equity research.",
9
- "version": "1.0.4"
9
+ "version": "1.0.13"
10
10
  },
11
11
  "plugins": [
12
12
  {
13
13
  "name": "alphacouncil-agent",
14
14
  "source": "./",
15
15
  "description": "Multi-agent company, ETF and index research: evidence packets, method seats, bull/bear debate and portfolio-manager synthesis.",
16
- "version": "1.0.4",
16
+ "version": "1.0.13",
17
17
  "author": {
18
18
  "name": "Zhao73"
19
19
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "1.0.4",
3
+ "version": "1.0.13",
4
4
  "description": "Multi-agent company, ETF and market-index research for Claude Code with sourced evidence, method seats, bull/bear debate and a full portfolio-manager report.",
5
5
  "author": {
6
6
  "name": "Zhao73"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "alphacouncil-agent",
3
- "version": "1.0.4",
3
+ "version": "1.0.13",
4
4
  "description": "Host-visible or background company, ETF and index research with shared evidence packets.",
5
5
  "author": {
6
6
  "name": "Zhao73"
@@ -29,6 +29,25 @@ Key items: 1.01 material agreement, 2.02 results, 4.01 auditor change, 4.02 prio
29
29
  4. **Dilution**
30
30
  Shares outstanding across several years. Persistent dilution discounts every per-share growth figure, and that is routinely ignored in growth discussions.
31
31
 
32
+ ## How to actually retrieve the filings (EDGAR throttles; this section decides whether this seat has primary evidence at all)
33
+
34
+ EDGAR answers **HTTP 429** to a client without a descriptive User-Agent, and `www.sec.gov` is throttled harder than `data.sec.gov`. **Rapidly trying different URLs makes the throttling worse, not better** -- on one real run eight different URLs were tried in a row, all returned 429, and not a single filing was read.
35
+
36
+ Retrieve in this order and stop as soon as you have what you need:
37
+
38
+ 1. `https://data.sec.gov/submissions/CIK##########.json` (CIK zero-padded to ten digits) -- the filing index. The most tolerant endpoint, and one call returns every form type, accession number and filed date.
39
+ 2. `https://data.sec.gov/api/xbrl/companyfacts/CIK##########.json` -- XBRL numbers such as share count and stockholders' equity.
40
+ 3. `https://www.sec.gov/Archives/edgar/data/<CIK without leading zeros>/<accession without dashes>/<primary document>` -- the specific Form 4 or 8-K text.
41
+ 4. EDGAR full-text search and `cgi-bin/browse-edgar` **last**: they are throttled the hardest and tell you nothing the first three cannot.
42
+
43
+ On a 429: **wait a few seconds and retry the same URL** rather than immediately switching to a different one. Retry one document at most three times; if all three are limited, record the retrieval as failed and follow the degradation rule below.
44
+
45
+ **Degradation rule (mandatory, and not to be softened)** -- when no filing was read directly:
46
+ - the first sentence of `summary` must state that no EDGAR original was read and that everything was cross-checked through secondary sources instead;
47
+ - `confidence` is capped at `low`;
48
+ - `open_questions` lists each failed URL with its status code;
49
+ - every item taken from a mirror or aggregator is labelled second-hand. **Never write mirror content as "verified against the filing".**
50
+
32
51
  ## Hard rules
33
52
 
34
53
  - **Every item carries the filing link and the filed date** -- the filed date, not the period end.
@@ -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
@@ -33,6 +33,25 @@ Key items: 1.01 material agreement, 2.02 results, 4.01 auditor change, 4.02 prio
33
33
  4. **Dilution**
34
34
  Shares outstanding across several years. Persistent dilution discounts every per-share growth figure, and that is routinely ignored in growth discussions.
35
35
 
36
+ ## How to actually retrieve the filings (EDGAR throttles; this section decides whether this seat has primary evidence at all)
37
+
38
+ EDGAR answers **HTTP 429** to a client without a descriptive User-Agent, and `www.sec.gov` is throttled harder than `data.sec.gov`. **Rapidly trying different URLs makes the throttling worse, not better** -- on one real run eight different URLs were tried in a row, all returned 429, and not a single filing was read.
39
+
40
+ Retrieve in this order and stop as soon as you have what you need:
41
+
42
+ 1. `https://data.sec.gov/submissions/CIK##########.json` (CIK zero-padded to ten digits) -- the filing index. The most tolerant endpoint, and one call returns every form type, accession number and filed date.
43
+ 2. `https://data.sec.gov/api/xbrl/companyfacts/CIK##########.json` -- XBRL numbers such as share count and stockholders' equity.
44
+ 3. `https://www.sec.gov/Archives/edgar/data/<CIK without leading zeros>/<accession without dashes>/<primary document>` -- the specific Form 4 or 8-K text.
45
+ 4. EDGAR full-text search and `cgi-bin/browse-edgar` **last**: they are throttled the hardest and tell you nothing the first three cannot.
46
+
47
+ On a 429: **wait a few seconds and retry the same URL** rather than immediately switching to a different one. Retry one document at most three times; if all three are limited, record the retrieval as failed and follow the degradation rule below.
48
+
49
+ **Degradation rule (mandatory, and not to be softened)** -- when no filing was read directly:
50
+ - the first sentence of `summary` must state that no EDGAR original was read and that everything was cross-checked through secondary sources instead;
51
+ - `confidence` is capped at `low`;
52
+ - `open_questions` lists each failed URL with its status code;
53
+ - every item taken from a mirror or aggregator is labelled second-hand. **Never write mirror content as "verified against the filing".**
54
+
36
55
  ## Hard rules
37
56
 
38
57
  - **Every item carries the filing link and the filed date** -- the filed date, not the period end.
@@ -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