Deliver a complete investment research package for a given Shenwan industry/Eastmoney sector:Top N gainers → announcement window search → market sentiment assessment → Agent Team adversarial verification → comprehensive report。
Iron Rules (must be followed on every execution, highest cost of violation)
- Better to label uncertainty than to give a wrong answer(user's exact words, highest discipline). Facts without full confidence must be written as "uncertain/unverified"; do not fabricate, guess, or omit sources. Inferences and observations must be stated separately.
- Evidence-based, data-based. Every conclusion must trace to a first-hand data source (API return / CSV written to disk / official announcement); when reporting values, copy verbatim from tool output; transcription from memory is forbidden.
- Evidence grading L1–L3: L1 first-hand market data (real-time values from exchange/market data interface); L2 timestamped media/announcement reports; L3 unverified headlines or rumors. When judging sentiment, only L1/L2 are allowed to bear weight; L3 can only be listed as "leads pending verification."
- Zero-announcement bidirectional read: 0 announcements in a monthly window ≠ truly no announcements. Must widen the window (90 days) + cross-check with a second data source, proving "truly none" or discovering a parameter error, before drawing a conclusion.
- Dual-source cross-check: Announcement search must compare Cninfo + Eastmoney sources; an "important announcement" found by a single data source must also be confirmed to exist in the other source, and any inconsistency must be truthfully labeled.
- Flag intraday snapshot drift: Market data values taken intraday are instantaneous snapshots that drift; any citation must carry the snapshot timestamp, and the report must note "intraday snapshot."
- Copy values verbatim to CSV on disk: Intermediate values must be written to disk (script output CSV / agent disk files); when the report cites them, copy the CSV values verbatim, not from conversation memory.
- Agent Team orchestration discipline: see references/agent-orchestration.md——sub-agents explicitly
model:'sonnet'; SendMessage delivery protocol; each finding carries a falsifiable anchor; verification uses a fresh-context adversarial agent; spawning duplicate agents is forbidden.
Workflow (five phases)
Phase 0 数据能力侦察 → 必要时 pivot 公开源
Phase 1 并行三 agent:Top N 名单 / 涨跌幅分桶分布 / 情绪证据清单
Phase 2 公告检索:Top N 全标的 × 周窗口 + 月窗口,双源交叉
Phase 3 对抗验证:fresh-context agent 复核假设(用户原话:「看哪些假设是错的」)
Phase 4 综合报告:名单 + 公告 + 情绪分级 + 显式不确定标注
Phase 0 — Data capability reconnaissance (Gangtise pivot decision)
If the user names Gangtise (or its official skill), first reconnoiter availability before deciding on data sources:
- Controlled experiment to judge "quota": Some endpoints are available with the same credentials (e.g.,
quote.py、stockpool.py、get_industries.py) while all content-search endpoints reportPOINT_NOT_ENOUGH→ this is a holistic explanation of insufficient credits; the same credentials working on one and failing on another already rules out "network/configuration issues"; if different endpoints behave inconsistently, do not rush to conclude "quota exhausted"—run controlled experiments (switch endpoint/switch parameters/minimal request). - Pivot decision table: Content search unavailable → for Top N switch to Eastmoney constituent stocks + Sina snapshots; for announcements switch to cninfo + Eastmoney; for sentiment switch to public market data + media. Reconnaissance conclusions and pivot decisionsmust be disclosed to the user; do not silently switch data sources.
- Complete reconnaissance matrix (measured behavior of each endpoint, credit error reports, controlled experiments) → references/gangtise-scout.md
Phase 1 — Three parallel agents
Dispatch 3 parallel agents (explicitly sonnet), each prompt with falsifiable-anchor requirements:
| Agent | Deliverable | Data chain |
|---|---|---|
| Top N list | top{N}_{board}_{日期}.csv |
scripts/top_n_pipeline.py(Eastmoney constituent stocks → Sina snapshots → ranking by gain) |
| Up/down bucketed distribution | distribution_{board}_{日期}.csv + Market breadth conclusion |
Full-sector snapshot bucketed by 6 buckets (>5%/2-5%/0-2%/0%/-2-0%/<-2%) + up/down/flat summary; the sum of the six bucket counts must equal total |
| Sentiment evidence list | Layered evidence table (separate columns for L1/L2/L3) | First-hand market data + media search |
Market data and sector interface details → references/market-data.md; sentiment evidence methodology and sources → references/sentiment-evidence.md。
Phase 2 — Announcement search
For all Top N tickers, search announcements, with weekly window (last 7 days) and monthly window (last 31 days) in mutually exclusive buckets:
# 脚本路径按本 skill 安装目录(SKILL.md 同级目录下的 scripts/)执行,示例用相对路径仅指 skill 包内
cd <本 skill 安装目录>
env -u http_proxy -u https_proxy -u all_proxy -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY \
python3 scripts/ann_query.py --codes 002219,600613,920946 \
--end 2026-08-13 --out-dir /path/out \
--universe-csv /path/top10_xxx.csv
Built into the script: CNINFO orgId is always resolved via topSearch (do not assemble it yourself by market — Shenzhen's dual forms/Shanghai's leading zeros/STAR Market's gfbj all empirically produce false negatives when assembled incorrectly), B-shares (starting with 900/200) are automatically converted to the corresponding A-share code for search, dual-source cross-check and type backfill, pagination for both sources, automatic widening-window criterion when the monthly window has 0 records (latest date of the widened window vs. the monthly window start), and URL spot checks. orgId pitfalls and interface forms → references/cninfo-announcements.md。
Bucketing rules: announcement dates falling within the weekly window are marked 1周, otherwise (still within the monthly window) marked 1月, mutually exclusive with no duplicates. Output headers:股票代码,股票名称,公告标题,公告日期,公告类型(如有),公告URL,时间窗口(1周|1月)。
Mandatory verification: ① Dual-source cross-check (CNINFO vs East Money) counts match; ② confirm "truly none" for 0-record tickers by widening the window; ③ the two sources' coverage is not entirely consistent (some investor-relations announcements are only on East Money, some are also indexed by CNINFO); East Money-exclusive entries are added to the union and their source is labeled by URL domain.
Phase 3 — Adversarial verification (user's own words: "see which assumptions are wrong")
Dispatch 2 fresh-context adversarial agents (no fork, no sharing of this session's context), each with its own verification axis:
- Verification axis 1 · Methodology and values: Top N list recomputation (independently re-run the data chain), bucket statistics recomputation (sum of the six bucket counts = total), snapshot timestamp verification
- Verification axis 2 · Announcement completeness and sentiment evidence strength: spot-check whether the announcement monthly window missed any, check item by item whether sentiment conclusions are load-bearing on L1/L2, and whether there is any unlabeled inference
Each agent's finding must carry a falsifiable anchor (specific value/URL/command output); the prompt explicitly mandates "better to mark uncertain than to fabricate." Verification results form a separate section in the synthesis report:which assumptions were overturned, which were confirmed, which cannot be verified. Orchestration details → references/agent-orchestration.md。
Phase 4 — Synthesis report
Delivery structure:
- Data sources and pivot disclosure: which sources were used, which were unavailable, and why the pivot
- Top N list: table (rank/code/name/gain/price/turnover) + snapshot timestamp
- Announcement list: weekly/monthly buckets, aggregated by ticker, with source and cross-verification results labeled
- Sentiment judgment: presented in L1–L3 layers, with conclusions clearly labeled by evidence level; dimensions with insufficient evidence should state "Uncertain: no L1/L2 evidence"
- Verification results: adversarial verification findings, list of overturned assumptions
- Uncertainty list: explicitly list all items that did not reach "full confidence"
All report values must be copied verbatim from the persisted CSV; transcription from memory is prohibited.
Environment constraints
- Domestic sites (East Money/Sina/CNINFO) curl/scripts must bypass the proxy:
env -u http_proxy -u https_proxy -u all_proxy -u HTTP_PROXY -u HTTPS_PROXY -u ALL_PROXY - For Python use
uv run --no-projector system python3 (script stdlib only) - Sina snapshot returns GBK encoding, requires Referer
https://finance.sina.com.cn; Eastmoney announcement API can work without Referer (tested); Beijing Stock Exchange announcements do not go through bse.cn separately (official website API fails in three ways, use the Cninfo gfbj channel) - If the push2 domain resolves into 198.18.0.0/15 (proxy TUN fake-IP), disabling the proxy will not work; you must fix the proxy routing or use
curl --resolveto directly connect to the real IP (see references/market-data.md)