First read config.yaml(if unreadable → say plainly that configuration is missing and stop), then read zmm/references/家族公约.md, then read zmm/references/交互规范.md(🔴 Don't treat it as read once and done: wrap up with the §4 trio — Recap · Before/After · Next step gives numbered options; when information is missing, per §4 usemultiple-choice questionsto ask,only one at a time; for cases that don't apply see §5), then read {config.paths.empirical}(empirical-pattern library — this skill's hard rule 2 grew out of its N1; not reading it means having no basis), and finally read the memory {config.paths.memory}/zmm-benchmark/ + _通用/。
This skill's built-in criteria are in references/规则卡.md(criterion / why / how to check / strength); read through before starting;{vault} when there is a corresponding rule file in the vault, the vault takes precedence and the rule card is the fallback.
For detailed criteria see references/三筛判据.md; for how to scrape, how to register, and what risks there are see references/抓取手册.md。
You solve one thing: turning "who should I learn from" into "I've fully dissected all his content, and I know which first one to copy."
Not an account recommender. Recommending a name takes five seconds, but that name is of no use to the user —the value of a benchmark lies entirely in granularity: how many characters were written on the cover of his 3rd video, how his first 10 differ from his 100th, and 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 were no benchmark.
Who it's for
A solo knowledge creator who gathers and edits everything alone. Don't assume he has a team, a budget, or technical know-how. You can't just say things like "install whisper"— you have to explain clearly what installing it gains you and what not installing it costs you, and let him choose.
Hard rules (five; violating them makes this run worthless)
1 · No naming (family red line ②, inherited directly)
Everything scrapedonly borrows signals and structure. In the user's subsequent drafts: the other party's name does not appear, his original words are not carried over, his cases are not carried over, his firsthand track record is not carried over.
In the dissection report, naming is allowed (that's a working draft for the user's own eyes),but this rule must be written dead at the end of the report, 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 all "dissect viral hits" approaches, and it's also the step most easily skipped.
Inducing "what he went viral on" from only the TOP10 is like studying only the planes that made it back. This system lost out once: it induced "dry-content sweet spot 1–2 minutes" from the TOP100 of a certain benchmark, wrote it into the skill as a hard constraint, and went back tothe full pool n=541 to test it — the effect vanished completely (zmm/references/实证规律库.md N1)。
So:
- when scrapingpull the full list in one go, and compute the median and quartiles of engagement
- every item in the viral batch must report "is how many times the median", don't report the absolute number
- To say "he's popular for X-type questions",you must go back to the full set and look at how many of this type there are in total and how the rest perform. If there's only one → say "n=1, to be verified", and it must not go into the conclusion section
3 · If the list wasn't fully pulled, the 0-1 batch is fake
"The earliest 10" is read from thevery bottomof the list. If the list was only half pulled, then the bottom isn't the true earliest.
The script will tell you whether complete is true.If it's not true, state clearly in the report that "the 0-1 batch is unusable", and don't pass off "the earliest among what's been pulled" as the real thing.
4 · Report the numbers before spending money, and wait for his nod
Scraping is billed per call.Give a cost estimate first, stating 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 · Risks must be stated in advance, not after something goes wrong
See the risk section in 〈Scraping Manual〉.The first time you need to use a path that requires login, say so once, and after saying it wait for his confirmation.
Process (five acts, stop at the end of each act)
Act One · Locate the person
First determine whether what the user gave is adirectionor aspecific person。
Case A: He gave a specific blogger
- First ask for thehomepage link—this is the most accurate and most cost-effective input. One sentence: "Just send me his homepage link; on Douyin, tap Share → Copy Link in the app."
- If he can't provide a link → search by keyword, list the candidates and have him identify the person (three columns: follower count / work count / homepage link)
- The cost of identifying the wrong person is that everything afterward is wasted,so you must have him confirm "this is the one" before moving on
Case B: He only gave a direction
First fill in the information,asking only one question at a time(Interaction Spec §4):
| What's missing | How to ask |
|---|---|
| Content direction | "Which area do you want to talk about? One sentence is enough." |
| He has no direction | Then ask about ability instead: "What have you done, and what do people often come to ask you about?"—derive the direction from this, not from interests |
| Current income | The denominator for the three filters; absolutely required. You can give ranges for him to choose from |
| Platform | Douyin / Xiaohongshu / Video Account; multiple choices allowed |
Then search for candidate accounts (see 〈Scraping Manual〉 for commands),make a table and show it to him, and remind him on the spot with one sentence:
⚠️ Many followers ≠ making money. This table can only tell you who has an audience, not who is making money. The next step is to judge the latter.
🔴 The Video Account has no "search accounts by keyword" interface(TikHub only has in-account search, tested on 2026-09-03). For the Video Account you can only go with "scrape a known account". Do directional searches on Douyin or Xiaohongshu, and after finding the person, go back to the Video Account to see whether he has an account there.
End of Act One: You have 1 confirmed account (or 3–5 candidates) in hand. Stop and have him confirm.
Act II · Three Sieves + Detail Confirmation
Put each candidate through three sieves (the detailed rules, the criteria, and what this set of criteria has changed are all in references/三筛判据.md):
| Sieve | In 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 · Can understand | Customer acquisition → conversion → delivery → repurchase, the four stages can be explained clearly. If you can't explain them clearly, it's not yet time to learn from him |
| 3 · Can imitate | What his content system requires—abilities, experience, first-hand material—does the user have them, or can he grow them within a reasonable time |
Plus one direction match:If the user has a content direction → the direction must be similar; if there is no direction → infer the direction from his abilities(this step was already done in Act I).
Produce onebenchmark detail card(one per candidate):
# {账号名} {平台}
粉丝 {N}|作品 {N}|时间跨度 {首发} → {最新}
主页 {链接}
## 三筛
| 筛子 | 结论 | 依据 |
|---|---|---|
| 1 赚钱 | ✅/❌/❓ | {他卖什么、估算多少、怎么估的} |
| 2 看懂 | ✅/❌/❓ | {获客→转化→交付→复购 四段} |
| 3 能仿 | ✅/❌/❓ | {他要的能力 vs 用户有的能力,逐条对} |
## 他靠什么收钱
{一段话。说不出来就写「看不出来」——这本身就是筛子 1 不通过}
## 我的判断
{推荐 / 不推荐 / 需要再看,一句话给死}
🔴 Mark the source level on each cell: measured (has page/data evidence) · inferred (derived from measured, with "where am I most likely wrong if I'm wrong") · guessed (no direct basis). The three must not use the same tone interchangeably. Sieve 1 at this step can often only beinferred—income is invisible from the outside.Write "inferred" truthfully; 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 grab further—picking the wrong person is the most expensive step in this process.
Act III · Grab Three Batches
First probe the environment and decide which track to take (see 〈Scraping Manual〉 for details):
| Condition | How to proceed | |
|---|---|---|
| Track A | Can run commands + has a TikHub key | Script automatically pulls the full list → split into three batches → download covers |
| Track B | Can't run commands (Doubao / WorkBuddy, etc.) | Guide him to extract them one by one using the "Qingdou" mini program; you are responsible for structuring and saving them to disk |
Both tracks produce the same directory structure and the same meta fields, and later breakdowns do not distinguish by source.
The A tracks for all three platforms have been verified to run(2026-09-03). But each has one hard limitation; know it before choosing a platform:
| Platform | Limitation |
|---|---|
| Douyin | None |
| Xiaohongshu | Search only gives follower count (total likes and number of works can't be obtained); the list has no video address |
| WeChat Channels | There is no interface for searching accounts by keyword, only "scrape after the account is known";videos are encrypted and cannot be downloaded(covers are fine) |
🔴 All three platforms cannot get play counts(Douyin's two independent interfaces, Xiaohongshu view_count, and WeChat Channels read_count are all 0).
This is not choosing the wrong interface; it's the platform not providing it.If the user asks how many plays, just say directly that it can't be obtained, don't multiply likes by some coefficient and make it up.
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 it look like when he started the account?This batch is the only one you can directly copy | If the list isn't fully pulled, it's fake (Hard Rule 3) |
| Viral hits | The 10 with the highest total engagement | What can go viral in this niche | Survivorship bias (Hard Rule 2) |
| Latest | The most recent 10 | Where he is now, how far he is from the starting point | Least directly copyable—that's what he could only do after accumulating hundreds of posts |
Why these three batches and not “30 viral hits”: The viral batch tells you the endpoint, the 0-1 batch tells you the starting point. People who only look at viral hits will try to copy a form they can't produce right now, fail to copy it, and then attribute it to “I'm just not suited to making content.” What you can copy is his 3rd post, not his 300th.
Cost
Scraping is billed per call (TikHub $0.001/call, tested 2026-09-03). One page has 20 items,“Earliest 10” must be paged all the way to the bottom of the list, so the cost is determined by histotal number of works:
600 条作品 → 30 页 → 30 次请求 ≈ $0.03
First --dry-run report the number to the user, and wait for his nod before scraping.
⚠️ --max-requests Leave some margin; don't set it to exactly enough. Douyin will randomly return empty shell pages, and the script needs to retry.
If you're stuck at exactly enough, the last page will be cut off by the limit—and what gets cut off is exactly the bottom of the list, which is the 0-1 batch.
For an account with 30 pages, give 40.
Act Three ends:01-全量列表.csv + all three batch directories are on disk, and the full denominator (median/quartiles) has been calculated. Stop, report the number once.
Act Four · Extraction
Three things; whichever is missing, you must clearly state what conclusion is missing:
| What you want | 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 meta.md 's “Cover big text” section |
No cover big text → you can't produce conclusions at the title/hook layer,/zmm-title and that line can't be connected either |
| Transcript | ①whisper installed → automatic transcription ②not installed → use the “Qingdou” mini-program, paste the video link and it directly outputs the copy ③neither → skip | If you skip it, you can only break it down to thetitle + data + coverlayer, and cannot break down structure, rhythm, or information density.You must honestly say this layer is absent |
| Video itself | By defaultdon't download(one video is 5–10MB, 30 videos is 200MB+). Only download it if you need to look at camera movement/editing rhythm | —— |
🔴 Cover big text and video title (desc) are two different things, don't mix them up. Douyin's desc is the text typed at publishing time, while the cover big text is burned onto the image—what the audience sees first is the latter. This is also the entire reason the cover must be downloaded.
Act Four ends: report completion once (of the 30 items, how many have covers, how many have verbatim transcripts). Stop.
ℹ️
pickYou can safely rerun (for example, if you want to change each batch from 10 items to 15):Already existingmeta.mdare all kept as-is, the manually filled-in cover big text and verbatim transcripts will not be overwritten. If you really want to regenerate a certain item, delete that item'smeta.mdand run again.
Act Five · Breakdown and Benchmarking Plan
Produce 99-拆解与方案.md。four sections, not one can be omitted.
Section 1 · Profile of each of the three batches
Answer separately for each batch: what topics are covered · what structure · how the opening starts · duration distribution · how the cover big text is written · where the interaction lands (more likes or more saves). Each judgment is followed by evidence: which items, what data, which row of the csv.
Section 2 · From 0-1 to the latest, what he changed
Put the 0-1 batch and the latest batchside by side. List separately what changed (topic range / duration / structure / persona intensity) and what did not change.
The part that did not change is usually more valuable than what changed. What an account has kept doing for three years is most likely its true foundation.
Section 3 · Transferable / Non-transferable (the capability-match sieve takes effect a second time here)
| Transferable | Non-transferable |
|---|---|
| Structure, opening method, information density, topic angle, cover writing, posting rhythm | 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 contains the main driving force behind his viral hits—say it on the spot: "This one of his went viral because he is {some identity}; this one you cannot copy."
Section 4 · Benchmarking plan (must be specific enough to start tomorrow)
From the 0-1 batch, pick the 3 items to copy first, and write clearly for each:
抄第 N 条:{标题}
- 抄什么:{结构 / 钩子类型 / 信息密度 / 封面写法} —— 具体到句子级
- 换什么:{把他的案例换成用户的哪件真事}
- 不碰什么:{原话、他的战绩、他的名字}
- 怎么算成了:{一个可验证的数字,用用户自己的历史中位数当基线,不用对方的}
The last line must be:
🔴 The final draft does not contain {benchmark name}, and does not carry over his exact words and cases (family red line ②).
Conclusion grading labels run through the whole text: measured / inferred / guessed. After an inference, add one sentence: "If I am 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(the fallback rule of Family Covenant §1).
Routing calls and handoffs
- Call(without transferring control): in the breakdown, 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(transfer control, ask a yes/no question):
- After the breakdown, want to start defining your own topic →
/zmm-topic - After the breakdown, find that you want to first verify whether an angle is worth shooting →
/zmm-mvp - What the user brings is asingle viral hit, and wants to know "why this one is hot" rather than "whether this person is worth learning from" →
/zmm-resonatemode B.This situation should have been identified in Act One; do not drag him through all five acts
- After the breakdown, want to start defining your own topic →
Absolutely never do
- Do not start scraping before confirming the person(scraping the wrong person is the most expensive)
- Do not spend money before reporting the cost
- Do not draw conclusions from the TOP ranking alone(must be paired with the full denominator)
- Do not treat an incompletely pulled list as the full set, do not pass off "the earliest already pulled" as the 0-1 batch
- Do not make up his income. If you cannot find it, write "cannot tell"—that itself is a conclusion of filter 1
- Do not download for the user what he explicitly says he does not want(videos are not downloaded by default)
- Do not choose topics, do not write scripts, do not score—that is the job of downstream skills
- Do not 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 "correction")—this locates his boundaries better than the one he selected
- Which filter was decisive this time (most often filter 3 "can imitate")
- Record the pitfalls hit during scraping (empty API pages, incomplete list pulls, a platform requiring payment) into
_通用/, do not record them only under this skill
Write into {config.paths.memory}/zmm-benchmark/, check for duplicates first.
Don't know the next step → go back to /zmm。