Install
openclaw skills install @jackdark425/banker-memoGenerate an investment-banker-grade research memo (analysis.md + slides-outline.md + data-provenance.md) from CN raw-data/ snapshots. Use when the user asks for "银行家级分析" / "投行研报" / "banker memo" / "投行级 PPT 蓝图" on an A-share, H-share, or non-listed CN company that already has raw-data/ populated by cn-client-investigation Phase 3.5.
openclaw skills install @jackdark425/banker-memoBanker-grade research memo from raw-data/ snapshots — prompt-driven, not template-driven.
Takes a deliverable dir that already has raw-data/*.json (produced by the CN Phase 3.5 pipeline) and drives an agent through a senior sell-side analyst framework to produce:
analysis.md — 8-section banker research memo (2500-4000 words, peer-benchmarked, with explicit data flags)slides-outline.md — PPT blueprint (10-15 slides, content-driven — NOT a fixed 8-slide template)data-provenance.md — every hard number traceable to a raw-data filename stemThe 0.9.4-era build_deck.py used an 8-slide Python template that stamped the same structure onto every company. Problem: the result is a data dashboard, not banker analysis — no industry context, no peer benchmarking, no SOTP reasoning, no "4C's" credit framework, no banker opinion.
Prompt-driven flips this: the agent (which has read thousands of real sell-side reports during training) writes the narrative; the Python layer only does orchestration (dispatch + gate audit).
raw-data/ from cn-client-investigation Phase 3.5strip-profile skill insteadVerify raw-data/ has:
aigroup-market-mcp-*.json file (for listed) OR a primematrix-basic_info.json (for non-listed).Use references/banker_prompt_template.md and substitute placeholders:
{ts_code} / {name_cn} / {industry} / {raw_dir} / {out_dir}{file_list} — discovered from raw_dir{uscc} — parsed from the primematrix filename prefixA helper scripts/build_banker_prompt.py does this. See references/banker_prompt_template.md for the canonical prompt body.
Run openclaw agent --agent main --thinking high --json --timeout 600 --message "$(cat prompt.md)". Typical runtime 3-6 minutes per company with high-thinking.
Run the standard 7-gate validate-delivery.py --strict-mcp on the output dir. The banker memo obeys the same authenticity / provenance rules as Python-templated outputs — gates unchanged.
Run build_deck.py (v0.9.6+) which now reads slides-outline.md for layout cues. Slide count = whatever the agent planned (10-15 typical, not a fixed 8).
X 亿元(src: income) or Y%(src: company_performance)source_authenticity_check gate)[EST] with reasoningpp units (avoids HARD_NUMBER regex false-positives)[EST, per sector consensus] — never tied to a specific forbidden sourceBOE 000725.SZ run on 2026-04-20:
~/deliverables/bj-smoke-v2/000725_sz/raw-data/ (6 JSON files already fetched)Data Flag 1: income-derived 净利率 2.68% vs company_performance 2.09% — 0.59pp口径差异 → must verify pre-credit decisionData Flag 2: company_performance YTD 累积 ≠ Q4 单季, computed +0.74pp Q4 NPM change from diff[EST, per sector consensus]validate-delivery --strict-mcp — all applicable gates PASS| File | What it is | Audit gate |
|---|---|---|
analysis.md | 8-section banker memo | provenance_verify + source_authenticity_check |
slides-outline.md | 10-15 slide blueprint with layout + key message per slide | consumed by build_deck.py |
data-provenance.md | hard-number → raw-data stem mapping | provenance_verify --strict |
\d+(亿元|%|元|倍) in analysis.md has a provenance row[EST, per sector consensus]slides-outline.md specifies layout type per slide (card / table / chart / divider)validate-delivery.py --strict-mcp OVERALL PASS