# Manager Profile

> Profile a fund manager across all managed products and full career — track record by tenure, style, capacity, turnover of mandates. Triggers on "基金经理", "manager profile", "XX的管理业绩", "这个经理靠谱吗", "经理画像", "筛选基金经理".

- Skill: `zai-org/manager-profile` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zai-org/manager-profile`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zai-org/manager-profile/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zai-org (https://skillmd.com/u/zai-org)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zai-org/manager-profile

---


# Fund Manager Profile

The unit of analysis is the manager, not any single fund. Records are stitched across products, strictly by tenure dates.

> Engine field 口径 traps that change conclusions — 「近N年年化」 is not
> geometric, 「规模」 is merged across share classes — are documented in
> `../fund-screen/references/fund-return-traps.md`. Recompute rather than
> quoting the field.

## Workflow

### Step 1: Identify and enumerate mandates

- Resolve the manager (disambiguate same-name managers by fund company).
- Enumerate managed products with **tenure dates**: `wind-fund.get_fund_info` per product, asking for 历任基金经理姓名和任职时间. **It returns a roster with closed date ranges — 离任日期 included.** Verified on a long-running 偏股混合型 product: the field came back as one composite string shaped `经理甲(20180102-20200615) 经理乙(20180102-20201130) 经理丙(20201201-20230228) 经理丁(20230301至今)` — several closed tenures and one open. An earlier note here claimed the field held 现任 managers and start dates only; that was wrong, and building every interval as `起始日 — 至今` on the strength of it would attribute a departed manager's fund performance to them for years after they left. Read the range as given: `至今` means current, an end date means it closed.
  - Ask for the roster explicitly. A bare `<fund> 基金经理` query returns only 证券代码/证券简称 — the roster arrives when the query names `历任基金经理`, and a query stuffed with extra field names (`任职日期 离任日期`) returned `查询结果为空`.
  - Where the roster is missing or a range is open when a departure is known, fall back to the 基金经理变更公告 (`wind-docs.get_company_announcements`), or record `检索范围内未发现` and say the interval is open-ended in our data. **Do not close one manager's interval with the next manager's start date** — the 公告 distinguishes 离任 from 增聘, and a product that went from solo to co-managed has no handover at all.
- Build the mandate table first: 产品 / 类型 / 任职起止 / 任职回报 / 同期基准. Everything else hangs off it.

### Step 2: Track record, tenure-true

- Per mandate: return over the exact tenure window vs the fund's benchmark over the same window.
- Career aggregate: report per-mandate records side by side. Do NOT blend returns across products into a single career number unless the user asks — and then label the blending method.
- Distinguish solo vs co-managed mandates (co-managed records are shared credit, label them).

**Corroborate every handover against the 公告.** 万得 `wind-fund.get_fund_info` 的 `历任基金经理姓名和任职时间` composite gives the 任职起止 dates (parse the composite string; a fund whose managers never changed returns only `至今` entries — that is not a missing 离任日期); `wind-docs.get_company_announcements` gives the **基金经理变更公告** itself — the date *and* the reason (离任/增聘/共同管理). Query per product over the tenure window.

- A handover date that the 历任 roster and the 公告 disagree on is reported as a discrepancy with both values, not silently reconciled to one.
- The 公告 distinguishes 离任 from 增聘 — a product that went from solo to co-managed is not a handover, and attributing the whole record to one manager afterwards is wrong. The 历任 date range alone cannot tell you which happened.
- 公告 found → `[披露]` + `[n]` citing it. Not found → `检索范围内未发现`, and the tenure rests on 万得 `历任基金经理姓名和任职时间` alone; say so.
- A departure reported only in media stays `[媒体]` until the 公告 appears.

### Step 3: Style and capacity

- Current flagship holdings (`hexin-fund.get_fund_portfolio`, with report date): sector tilts, concentration, cap size preference.
- Style consistency across time: compare holdings snapshots at 2-3 report dates; drift is a finding, not a judgment.
- Capacity: total AUM across mandates and its growth; performance before vs after major AUM jumps (state dates, avoid causal claims).

### Step 4: Assemble

Short-form by default: Markdown in-session, per the house formatting policy. If the user asked for a document, the profile goes to PDF via the `report-render` skill — never hand-rolled with weasyprint, wkhtmltopdf, pandoc, or a bare reportlab script, because those do not emit `[n]` as PDF link annotations and the citations arrive unclickable. The mandate roster on its own goes to `.xlsx` via `xlsx-author`. Word is the answer only when the user asks for it or the reader will edit the file — `report-render`'s `DocxReport` builds it with the same calls; unspecified long-form stays PDF (the house formatting policy). **要出 Word 就先载入 `report-render` 技能，再动手建。** `DocxReport` 与 `Report` 同一套调用；手搓 python-docx / docx-js 会丢掉标签配色、`[n]` 跳转与封面页，机制与实测记录在那个技能里，不在这里重述。

```
# 基金经理画像: [姓名]([基金公司])
检索于: [date] · 从业: [起] · 在管规模: [X 亿元, 共 N 只]

## 管理产品一览(任职口径)
| 产品 | 类型 | 任职期间 | 任职回报 | 同期基准 | 超额 | 是否共管 |

## 投资风格(基于 [报告期] 持仓)
## 容量与规模变化
## 关注点(经理更替史、风格漂移、共管归因模糊等)

## 覆盖范围与局限
检索于: [date] · 报告期: [持仓所属报告期]

| 检查项 | 结论 | 源 | 检索于 |
|---|---|---|---|
| 在管产品枚举 | 有记录 / 检索范围内未发现 / 源不可用 | [系统] | [date] |
| 历史(已离任)产品 | ... | [系统] | [date] |
| 任职起止日期 | ... | [系统] | [date] |
| 各产品同期基准 | ... | [系统] | [date] |
| 旗舰持仓(多报告期) | ... | [系统] | [date] |

本次未能覆盖: [枚举不全的产品类别、无法取得的历史任职段,及失败的源]
数据滞后性: 持仓披露滞后 [X] 天(报告期 [date] ≠ 检索于 [date]);已离任产品的历史区间可能不完整。

## 来源
[n] 〔一手|二手〕发布主体 · 文档或系统名 · 日期(发布日; 检索于) · URL
```

### Guardrails

- Tenure dates are the law: no return credited outside them.
- 同名经理 must be disambiguated before any data is presented.
- Style described from holdings evidence, not from fund names or marketing labels.
- No predictive language about future performance.
- Provenance: 任职起止、产品清单、规模、持仓 as disclosed are `[披露]`; 任职回报、超额、
  career aggregates and any AUM-growth arithmetic are `[测算]` (state the blending method);
  a style-drift or capacity judgement is `[推断]`; an unconfirmed departure or 老鼠仓 report
  is `[媒体]`. Those last three are never omitted.
- Sources entries: 定期报告、基金经理变更公告 and 同花顺 fields sourced from those are
  `一手` (name the system and `检索于`). A media article is `二手` and names what it relays.
  Distinct `[n]` markers must equal the entry count.

