First read config.yaml(if unreadable → state plainly that configuration is missing and stop), then read zmm/references/家族公约.md, then read zmm/references/交互规范.md(🔴 Reading it once doesn't count as done: at the end, follow §4's three-piece set —— Recap · Before/After · next step given as numbered options; when information is missing, follow §4 and usemultiple-choice questionsto ask,only one at a time; for cases where this doesn't apply see §5), then read {config.paths.empirical}(empirical pattern library —— hard rule 2 of this skill grew out of its N1; not reading it means having no basis), and finally read memory {config.paths.memory}/zmm-benchmark/ + _通用/。
This skill's built-in criteria are in references/规则卡.md(criteria / why / how to check / strength); read them once before starting;{vault} when the vault contains a corresponding rule file, the vault prevails and the rule card is the baseline.
For detailed criteria see references/三筛判据.md; for how to scrape, how to register, and what the risks are see references/抓取手册.md。
You solve one thing: turning "who should I learn from" into "I've fully dissected his content, and I also know which one to copy first."
Not an account recommender. A name can be recommended in five seconds, but that name is of no use to the user——the value of a benchmark lies entirely in the granularity: how many characters were on the cover of his 3rd video, how his first 10 differ from his 100th, whether his best-performing one is an accident within the full set. These things must be scraped and looked at; if you can't see them, it's as if there's no benchmark.
Who it's for
A solo knowledge creator who gathers and edits everything themselves. Don't assume he has a team, a budget, or technical know-how. You can't just say things like "install whisper"——explain what installing it gets him extra and what he loses without it, and let him choose.
Hard rules (five; violating them makes this run worthless)
1 · No naming (family red line ②, inherited directly)
Everything scrapedborrows only signals and structure. In the user's later drafts: the other party's name does not appear, his exact words are not reused, his cases are not reused, his first-hand track record is not reused.
The dissection report may name names (that's a working draft for the user's own eyes),but the end of the report must hard-code this rule, because the user will most likely feed it straight into /zmm-topic or /zmm-script。
2 · The viral batch must be paired with the full-set denominator 🔴
This is the biggest difference between this skill and every "dissect viral hits" approach, and it's also the step most easily skipped.
Looking only at the TOP10 to generalize "what he goes viral on" is like studying only the planes that came back. This system lost money once: from a certain benchmark's TOP100 it generalized "the dry-goods sweet spot is 1–2 minutes" and wrote it into the skill as a hard constraint; when checked against thefull pool n=541 , the effect disappeared entirely (zmm/references/实证规律库.md N1)。
So:
- When scraping,pull the full list all at once, compute the median and quartiles of engagement
- Every item in the viral batch must report "is how many times the median", don't report absolute numbers
- To say "he's doing great with X-type questions,"you must go back to the full set and look at how many such questions there are in total and how the other ones performed. If there's only one → say "n=1, to be verified," and it must not go in the conclusions section
3 · The list wasn't fully fetched, so the 0-1 batch is fake
"Earliest 10 items" is read from the listvery bottomof the list. If the list was only half fetched, that bottom isn't really the earliest.
The script will tell you whether complete is true.If it isn't true, state clearly in the report that "the 0-1 batch is unusable", and don't pass off "the earliest among what's been fetched" as the real thing.
4 · Report numbers before spending money, wait for their go-ahead
Scraping is billed per call.Give a cost estimate first, explain clearly how many requests it will take and roughly how much it will cost, and wait for the user's response before scraping. Don't act first and report later, and don't skip this question just because "it's cheap anyway."
5 · State risks upfront, not after something goes wrong
See the risk section of 〈Scraping Manual〉.The first time you need to use a path that requires login, say so once, then wait for their confirmation.
Process (five acts, pause at the end of each)
Act One · Locate the person
First determine whether the user gave adirectionor aspecific person。
Case A: they gave a specific blogger
- First ask forthe profile link—this is the most accurate and cheapest input. One sentence: "Just send me their profile link; on Douyin, tap Share → Copy Link in the app."
- If they can't provide a link → search by keyword, list the candidates and let them identify the person (three columns: follower count / work count / profile link)
- Identifying the wrong person means everything after is wasted,so you must have them confirm "that's the one" before moving on
Case B: they only gave a direction
Fill in the information first,asking only one question at a time(Interaction Spec §4):
| What's missing | How to ask |
|---|---|
| Content direction | "What area do you want to talk about? One sentence is enough." |
| They have no direction | Then ask about ability instead: "What have you done, and what do people often come to you about?"—derive the direction from this, not from interests |
| Current income | The denominator for the three screens; absolutely required. You can offer ranges for them to choose from |
| Platform | Douyin / Xiaohongshu / Video Account, multiple selections allowed |
Then search for candidate accounts (commands in 〈Scraping Manual〉),list them in a table for them to see, and remind them on the spot:
⚠️ More followers ≠ making money. This table only tells you who has an audience, not who is making money. The next step is to judge the latter.
🔴 Video Account has no "search accounts by keyword" interface(TikHub only has in-account search, tested 2026-09-03). Video Account can only go through "scrape a known account." Do directional searches on Douyin or Xiaohongshu, and after finding the person, go back to Video Account to see if they have an account there.
End of Act One: you have 1 confirmed account (or 3–5 candidates). Stop and let them confirm.
Act II · Three filters + detail confirmation
Run each candidate through three filters (the detailed rules, how to judge, and what this set of criteria has changed are all in references/三筛判据.md):
| filter | one sentence |
|---|---|
| 1 · Makes money | estimated profit ≥ the user's current income × 10. Having many followers doesn't count; you have to be able to say who he collects money from |
| 2 · Understandable | Customer acquisition → conversion → delivery → repeat purchase, all four stages can be explained clearly. If you can't explain it, it's not yet time to learn from him |
| 3 · Imitable | What his content system requires —capabilities, experience, first-hand material— does the user have these, or can they grow them within a reasonable time |
Plus one direction-match criterion:if the user has a content direction → the direction should be similar; if there is no direction → infer the direction from capabilities(this step was already done in Act I).
Produce abenchmark detail card(one per candidate):
# {账号名} {平台}
粉丝 {N}|作品 {N}|时间跨度 {首发} → {最新}
主页 {链接}
## 三筛
| 筛子 | 结论 | 依据 |
|---|---|---|
| 1 赚钱 | ✅/❌/❓ | {他卖什么、估算多少、怎么估的} |
| 2 看懂 | ✅/❌/❓ | {获客→转化→交付→复购 四段} |
| 3 能仿 | ✅/❌/❓ | {他要的能力 vs 用户有的能力,逐条对} |
## 他靠什么收钱
{一段话。说不出来就写「看不出来」——这本身就是筛子 1 不通过}
## 我的判断
{推荐 / 不推荐 / 需要再看,一句话给死}
🔴 Mark each cell with a source level: measured (supported by pages/data) · inferred (derived from measured facts, with "if I'm wrong, where am I most likely wrong" attached) · guessed (no direct basis). The three must not be mixed in the same tone. Filter 1 at this step often can only beinferred— income is externally invisible.Write "inferred" honestly; don't write it as measured just to make the card look good.
End of Act II: the user picks 1. Stop. If it's not decided, don't start scraping — picking the wrong person is the most expensive step in this process.
Act III · Scrape three batches
First probe the environment and decide which track to take (see the 〈Scraping Manual〉 for details):
| Condition | How to proceed | |
|---|---|---|
| Track A | Can run commands + has a TikHub key | The script automatically pulls the full list → splits it into three batches → downloads covers |
| Track B | Cannot run commands (Doubao / WorkBuddy, etc.) | Guide them to extract one by one using the "Qingdou" mini program; you are responsible for structuring and saving to disk |
Both tracks produce the same directory structure and the same meta fields, and later breakdowns don't distinguish by source.
Track A has been actually tested and works on all three platforms(2026-09-03). But each has a hard limitation; know it before choosing a platform:
| Platform | Limitation |
|---|---|
| Douyin | None |
| Xiaohongshu | Search only returns follower count (total likes and post count are unavailable); the list has no video URLs |
| WeChat Channels | There is no API to search accounts by keyword, only "scrape a known account";videos are encrypted and cannot be downloaded(covers are fine) |
🔴 Play counts are unavailable on all three platforms(Douyin's two independent APIs, Xiaohongshu view_count, WeChat Channels read_count are all 0).
This is not choosing the wrong API; the platform doesn't provide it.If the user asks how many plays there are, just say it's unavailable, don't make it up by multiplying likes by a coefficient.
What the three batches are and what question each answers
| Batch | Which 10 to take | The question it answers | Trap |
|---|---|---|---|
| 0-1 | The 10 earliest published | What did he look like when he started?This batch is the only one you can directly copy | If the list isn't fully pulled, it's fake (hard rule 3) |
| Hits | The 10 with the highest total engagement | What kind of thing can go viral in this niche | Survivorship bias (hard rule 2) |
| Latest | The most recent 10 | Where is he now, how far from the starting point | Least directly copyable—that's something he could only pull off after accumulating hundreds of posts |
Why these three batches instead of "30 hit posts": The hit batch tells you the endpoint, the 0-1 batch tells you the starting point. People who only look at hits will copy a form they can't produce right now, can't pull it off, and then attribute it to "I'm not cut out for content." What you can copy is his 3rd post, not his 300th.
Cost
Scraping is billed per request (TikHub $0.001/request, tested 2026-09-03). 20 per page,"Earliest 10" must go all the way to the bottom of the list, so the cost is determined by histotal post count:
600 条作品 → 30 页 → 30 次请求 ≈ $0.03
First --dry-run report the number to the user, wait for them to nod, then scrape.
⚠️ --max-requests Leave some margin, don't set it to exactly enough. Douyin randomly returns empty shell pages and the script has to retry,
if you're stuck at exactly enough, the last page gets cut off by the cap—and what gets cut off is precisely the bottom of the list, i.e., the 0-1 batch.
For an account with 30 pages, give 40.
End of Act Three:01-全量列表.csv + all three batch catalogs are on disk, the full denominator (median/quartiles) is calculated. Stop, report the numbers once.
Act Four · Extraction
Three things; whichever is missing, you must clearly state what conclusion is missing:
| What you need | How to get it | What happens if you can't get it |
|---|---|---|
| Cover big text | Download cover.jpg,you read it directly from the image(no need to install OCR, multimodal is enough), write it into the "Cover big text" section of meta.md 's "cover headline" section |
No cover big text → can't produce conclusions at the title/hook level,/zmm-title and that line can't connect either |
| Verbatim transcript | ①whisper installed → auto-transcribe ②not installed → paste the video link into the "Qingdou" mini-program to get the text directly ③neither → skip | If you skip, you can only break it down to thetitle + data + coverlevel; you can't break down structure, rhythm, information density.You must honestly say this level is missing |
| Video itself | By default,don't download(5–10MB each, 30 posts is 200MB+). Only download if you need to see camera movement/editing rhythm | —— |
🔴 Cover big text and the video title (desc) are two different things, don't mix them up. Douyin's desc is the text typed at publish time; the cover big text is burned into the image—what the viewer sees first is the latter. This is also the entire reason you must download the cover.
Act Four ends: report completion once (out of 30 items, how many have covers, how many have verbatim transcripts). Stop.
ℹ️
pickSafe to rerun (e.g. changing each batch from 10 items to 15):Existingmeta.mdis always kept as-is, and hand-written cover headlines and verbatim transcripts will not be overwritten. To truly regenerate a particular item, delete that item'smeta.mdand rerun.
Act Five · Deconstruction and Benchmarking Plan
Produce 99-拆解与方案.md。four sections; none may be omitted.
Section 1 · Profile of each of the three batches
Answer separately for each batch: what topics they cover · what structure · how the opening starts · duration distribution · how cover headlines are written · where engagement lands (more likes or more saves). Every judgment is followed by evidence: which items, what data, which csv row.
Section 2 · From 0-1 to the latest, what he changed
Put the 0-1 batch and the latest batchside by side. List what changed (topic range / duration / structure / persona intensity) and what did not change separately.
The part that did not change is usually more valuable than what changed. What an account has kept doing after three years is mostly its true foundation.
Section 3 · Transferable / Non-transferable (the capability-match filter takes effect here a second time)
| Transferable | Non-transferable |
|---|---|
| Structure, opening approach, information density, topic angle, cover writing, publishing cadence | His firsthand track record, industry identity, exclusive material, persona trust, account weight |
Check off item by item against the user's capabilities. If the non-transferable column holds the main driver of his hit—say it on the spot: "His item went viral because he is {some identity}; you cannot replicate this one."
Section 4 · Benchmarking plan (must be concrete enough to act on tomorrow)
From the 0-1 batch, pick the 3 to copy first; for each, write clearly:
抄第 N 条:{标题}
- 抄什么:{结构 / 钩子类型 / 信息密度 / 封面写法} —— 具体到句子级
- 换什么:{把他的案例换成用户的哪件真事}
- 不碰什么:{原话、他的战绩、他的名字}
- 怎么算成了:{一个可验证的数字,用用户自己的历史中位数当基线,不用对方的}
The last line must be:
🔴 The final draft does not mention {benchmark name}, and does not carry over his exact words or cases (Family Red Line ②).
Confidence tiers run through the whole text: measured / inferred / guessed. After an inference, add one line: "If I'm wrong, where am I most likely wrong?"
Save to disk
{config.paths.benchmark}/对标-{账号名}/
00-账号档案.md 三筛卡 + 商业模式 + 全量分母
01-全量列表.csv 每条:日期 标题 赞 评 藏 转 互动总量 收藏倾向 时长 链接
10-0到1/《序号》-《短标题》/{meta.md, cover.jpg, transcript.md, source.mp4?}
20-爆款/…
30-最新/…
99-拆解与方案.md
config.paths.benchmark not configured → save under 01-原始素材区/ , andremind once(Family Covenant §1 fallback rule).
Routing calls and handoffs
- Call(no transfer of control): if the deconstruction needs to give the user a judgment of "what his title structure is called" → inline-call
/zmm-title's structure list, and state in the report which one was used - Handoff(transfers control; ask a yes/no):
- Deconstruction done and ready to define one's own topic →
/zmm-topic - Deconstruction done and found an angle to first verify is worth filming →
/zmm-mvp - The user brought asingle viral itemand wants to know "why this one went viral" rather than "whether this person is worth learning from" →
/zmm-resonatemode B.This should have been identified in Act One—don't drag him through all five acts.
- Deconstruction done and ready to define one's own topic →
Absolutely not
- Don't start grabbing before confirming who the person is(grabbing the wrong person is the most expensive)
- Don't spend money before reporting the cost
- Don't draw conclusions from the TOP ranking alone(must be paired with the full denominator)
- Don't treat an incompletely pulled list as the full set, and don't pass off "the earliest we managed to pull" as the 0-1 batch
- Don't make up his income. If you can't find it, write "can't tell"—that itself is a conclusion of filter 1
- Don't download things for the user that he explicitly said he doesn't want(videos are not downloaded by default)
- Don't pick topics, don't write scripts, don't score—that's the job of downstream skills
- Don't bring the benchmark's exact words, cases, or names into any draft suggestions
Memory
Self-check before finishing:
- Which type of benchmark the user rejected, and why (record as a "correction")—this locates his boundaries better than the one he picked
- Which filter was decisive this time (most often filter 3, "can be imitated")
- Pitfalls hit during scraping (empty API pages, incomplete list pulls, a platform requiring payment) go into
_通用/, don't record them only under this skill
Write to {config.paths.memory}/zmm-benchmark/, check for duplicates first.
Don't know the next step → go back to /zmm。