SuperAPI AI Directory

laohan-xuanti

Data & analytics

View repository

Updated 10-15 22:12

About this skill

① Topic Decision

Trends are only used for discovery; the final result is an auditable production decision: why do it now, who it is for, on what basis the argument holds, which duplicate angles exist on Douyin, why the other candidates were eliminated, and how to review it after publication within a fixed window.

Boundaries

  • This skill is the sole lead writer for ①, writing signals, candidates, source-health and 00-选题.*。
  • laohan-douyinsousuo only writes 00-抖音搜索证据.{json,md}; the same Agent host executes according to the bianpai routing, without programmatic skill-to-skill calls.
  • ② is the one that writes the talking-head script; ① does not generate body text, outline paragraphs, or cover art.
  • ⑤ is the one that does complete fact-checking; ① must still find at least one PRIMARY original source for the final factual premise.
  • Do not install new browsers, crawlers, Python runtimes, or third-party skills. For Douyin platform access, use only the already-installed OpenCLI.
  • The same event can form both an opinion candidate and a tutorial candidate; when the audience task, title promise, and content path are genuinely different, they may compete separately. ②—④ follow the selected lane and do not mix writing.

Inputs

Episode mode must read:

  1. This episode's episode-config.json and 00-编排/ frozen artifacts.
  2. The feedback snapshot explicitly registered for this episode; if there is none, record NOT_AVAILABLE, and do not scan old episodes to guess lessons.
  3. This round's real signals and Douyin search evidence.

A standard Episode is AUTO_SELECT: the AI completes discovery, filtering, and topic setting according to the Five-Step Method, and Jeffrey retains post-hoc veto power (00-选题-Jeffrey否决.json, the veto reason is mandatory, and after a veto, rescan according to the reason). When Jeffrey explicitly gives a topic, follow USER_SEED, and still provide at least one real alternative candidate, Douyin evidence, PRIMARY evidence, and a measurement contract.

When what Jeffrey gives is a software, method, or series direction, first followUSER_DIRECTION_RESEARCH: read projectdocs/系列选题研究与分期规格.md, and complete four-platform targeted search, content-level breakdown, demand assessment, series installment planning, and single-episode material package. It does not run an unrelated 9-account broad scan to pad the trend. OnlyDEMAND_VALIDATEDcan enter a series of three or more episodes,EXPERIMENTAL_ONE_OFFonly enters a single episode,DIRECTION_REJECTEDstop. A formal episode must still provide alternative candidates.

Workflow

1. Collect current signals

Write first00-选题-signals.json.discovery_mode: no direction isAUTONOMOUS_SCAN; Jeffrey has already given a direction asUSER_DIRECTION_RESEARCH. The latter writes thenode scripts/check-series-research.mjsthat have passedseries_research_pathand SHA intodirection_research, and registers the four results from Bilibili, Xiaohongshu, Douyin, and Zhihu separately as signal sources.DEMAND_VALIDATEDAt least two platforms have real demand signals;EXPERIMENTAL_ONE_OFFenter a single episode only based on verified official new events, Jeffrey's personal experience, or niche task grounds within the research package, and do not force-fabricate popularity on two platforms.

Episode mode executes the sole deterministic entry point:

node ~/Documents/laohan-skills/laohan-xuanti/scripts/collect-topic-signals.mjs \
  --episode episodes/<slug>

AUTONOMOUS_SCANAccording to Step 1 of the Five-Step Method, scan viral hits:数据层/tracked-creators.jsonscan the entire pool creator by creator (ACTIVE must be scanned and failure blocks; PENDING is also scanned for cross-verification, and failures are recorded truthfully without blocking),数据层/self-channel.jsonOwn channel anomaly multiplier (prioritize deep dives in directions where own anomaly multiplier is high), comprehensive hot topics (auxiliary input), andscript-pool/Jeffrey个人表达池.md(material sources). The scan simultaneously executestime layering(anomalies in the last 30 days = current demand, prioritize doing them; anomalies from 3 months ago = evergreen topics, need to re-verify current popularity) andanomaly grading(3x = worth noting, above 10x = big opportunity, prioritize deep dives), and consumes each anomaly'stop_commentshigh-like comments—high-like comments are the audience's unmet questions, directly used as candidate leads. The default discovery and display priority isBENCHMARK_CREATOR(1) > SELF_CHANNEL(2) > BROAD_HOTSPOT(3) > PERSONAL_EXPRESSION(4). The default routes for comprehensive hot topics are AIHOT, Hacker News, Zhihu, Weibo, 36kr, Bilibili, Douyin hot list, Toutiao, Tieba, and Hupu; if one route fails, record it truthfully and the other hot-topic routes continue. Only pass this when you need to narrow the hot-topic route --sources, and it cannot be used to skip the creator library and own channel.

The script only writes:

  • 00-选题-signals.json
  • Initial 00-选题-source-health.json

The script does not select topics, does not access old episodes, and does not call douyin-ai.js。

2. Standardize, deduplicate, and form candidates

Read signals, and cluster the same factual event by stable signal id; exclude duplicate expressions with the same URL/same promise/same path. For benchmark accounts, only extract the parent topic, public demand, and anomaly signals; do not copy titles, copywriting, cases, or conclusions. Only generate two forms for the same event when "help the audience make a judgment" and "take the audience through completing a task" each hold true. Write schema 4 00-选题-candidates.json, first use the top-level screening_summary to leave the filtering chain, then write at least two genuinely different shortlist candidates.screening_summary Only includes:

  • raw_signal_count: the actual total number of results in signals;event_cluster_count: the total number of event clusters after deduplication.
  • longlist: when there are enough valid events, record 8–12; when fewer than 8, record all. Each entry contains a unique event_cluster_id、working_title, non-empty signal_ids, positive integer source_count、disposition: SHORTLISTED|REJECTED , and specific reason。
  • For each final candidate, the event_cluster_id must be marked in the longlist as SHORTLISTED. Do not add intermediate files, extra nodes, or a second scoring system.

Viewpoint/tutorial variants of the same event can be counted separately when the audience task, title promise, and content path differ. Each item must have:

Pre-action for setting the angle:First read the original video—you must have read the transcript or complete content of the original viral video before you are allowed to write tension (rebuttal/deeper supplementation/personal-experience substitution are all based on the actual content; if you haven't read it, it's a guess). Benchmark video transcription reuses the project's existing transcription toolchain (large-v3), and the output is placed in数据层/scans/<日期>/or the episode temporary directory. When you can't think of a difference, use the interest market tool: combining two high-interest topics = audience stacking, and evaluate the size of the parent topic's audience pool (tool/tutorial types are usually larger than pure viewpoint types; at the same quality, prioritize the larger pool).

Before forming candidates, restore the original analysis: mark relevance using direct words such as "AI/GPT/Claude/large models/robots/automation/programming/side hustle" and indirect words such as "education/career/consumption/entrepreneurship/workplace", but retain marginal signals that may generate new angles; tally content types such as installation tutorials/advanced tips/methodology/comparative reviews/hands-on practice/resource recommendations; mark multi-platform resonance, single-platform exclusivity, already crowded angles, and opportunities not covered by competitors. They are used to expand candidates, not to replace the later PRIMARY and Douyin keyword verification.

  • unique id, stable non-empty event_cluster_id, non-empty why_now、title、content_form: opinion-video|tutorial-video、audience_level: BEGINNER|INTERMEDIATE|ADVANCED、audience_problem、audience_promise、thesis。
  • candidate_origin must be registered as primary_lane, the corresponding priority_rank, non-empty origin_signal_ids and corroborating_lanesCross-verification can improve credibility, but personal expression sources must not be disguised as benchmark hit sources.
  • tension Must register type: CONFLICT|MISCONCEPTION|COUNTERINTUITIVE|TRADEOFF、common_assumption、jeffrey_position and one conflict_statementthat can be fulfilled by the main text. Writing only a domain name, product launch, or "worth watching" does not count as a candidate.
  • creator_fit Must clearly state basis: FIRSTHAND_EXPERIENCE|BUILT_OR_TESTED|OWNED_EVIDENCE|LONG_TERM_PRACTICE|RESEARCHED_JUDGMENT|NOT_ESTABLISHED、why_jeffrey and distinctive_judgment. It answers "why Jeffrey should talk about it, what his basis is, and what judgment it adds compared with a generic retelling." SELECTED does not allow NOT_ESTABLISHED; when there is no firsthand experience, RESEARCHED_JUDGMENTmay be used, but it must form an independent judgment with evidentiary boundaries, and "I also paid attention to it" must not be passed off as a personal advantage.
  • assumed_prerequisites and jargon_to_explain string arrays. A BEGINNER candidate must include the key tools, commands, and migration/import concepts in the title and argument in the explanation list, and must not merely raise the audience_fit score.
  • Non-empty signal_ids and evidence_ids。
  • Non-empty platform_query_intent;platform_alignment contains status: ALIGNED|ADJACENT|CONTRADICTED|UNRESOLVED|UNAVAILABLE, non-empty rationale and evidence_ids. When there are platform results, evidence ids must be real; when platform access fails, write UNAVAILABLE and an empty array.
  • content_gap contains status: CONFIRMED|NOT_CONFIRMED|UNAVAILABLE, non-empty rationale and evidence_ids. The first two may be written only when the platform directly provides search volume, supply, or gap evidence; the number of search results, missing interaction fields, or model judgment must never be passed off as a content gap.UNAVAILABLE is legal and does not participate in mechanical elimination.
  • Non-empty claim_evidence_map; each item contains a unique claim_id, non-empty claim、evidence_ids. It must bind technical facts to PRIMARY; when platform evidence is available, bind "what people on the platform care about" to PLATFORM_SIGNAL, and adjacent keywords must not be made to endorse another argument. When the platform UNAVAILABLE , do not fabricate a PLATFORM_SIGNAL claim.
  • scorecard Seven-dimensional integer 1-5:audience_fit、evidence_strength、platform_relevance、differentiation、creator_fit、production_feasibility、learning_value。
  • Non-empty rationale. When the topic is undecided, candidates are disposition: SHORTLISTEDorREJECTED; the best candidate that passes all five steps is marked by AI asAUTO_SELECTED(at the same time, give the other candidatesREJECTEDplus specific reasons).
  • false_positive_filter(Step 2: eliminate fake hits):status: PASSED|REJECTED、checksFour booleans (celebrity_event/controversy/off_niche/pure_news), non-emptyrationale. Candidates hit by any of the four types of fake signals remain REJECTED and must not be selected.
  • topic_kind(Step 3: check repetition):SERIES_CANDIDATE|ONE_OFF. The former must be bound totopic_corroboration.signal_ids—the same motif appearing abnormally on two different accounts is enough to form a series, and three or more accounts = strong signal reducing risk. For series, prefer a followable format (a progress-style series like "30-day XX challenge" or "teach XX in 10 days," directly capturing the revisit rate weight), and write the format intotopic_corroboration.series_format_hint(may be empty).
  • packaging_assessment(Step 5: verify saves): non-emptytitle_directionandcover_concept(one sentence, no diagram), three-question booleanworth_collecting/evergreen_half_year/title_clickable, non-emptyrationale. For an AUTO_SELECTED candidate, all three questions must be true; if not up to standard, return to Step 4 to change the angle or change the topic.

Scores are challengeable candidate comparisons, not traffic forecasts. Popularity cannot replace audience value, evidence strength, differentiation, or shootability. SELECTED may be ALIGNED, ADJACENTwith a clear differentiation explanation, or, when discovery and PRIMARY are sufficient, UNAVAILABLEthat truthfully explains the scope of missing data; missing platform data lowers platform_relevance confidence but cannot eliminate a candidate on its own.CONTRADICTED|UNRESOLVED must not be selected. Before a tutorial candidate is written as definite steps, it still must be in tutorial_proof Registration status: VERIFIED, current period evidence_path、evidence_sha256, non-empty version_boundary and recovery。

3. Perform Douyin keyword verification on the shortlist

Design one specific query for each of the 1–3 shortlisted items, and have the same host execute laohan-douyinsousuo episode mode. Must obtain 00-抖音搜索证据.json and .md before continuing.

  • OK: cite the real result id, and clearly state the viewer intent actually proven by the query. Directly supports the candidate title promise, audience task, and why_now time marker ALIGNED; when it only supports the same product, transferred heat, or an adjacent concept, mark ADJACENT. Prioritize adding more direct queries, but do not automatically eliminate a differentiated new angle just because content with the exact same title is missing.
  • EMPTY_OR_FIELD_UNAVAILABLE: only write "platform evidence pending", and do not write "no one is doing this/blue ocean".
  • OpenCLI login or all adapters fail: keep the real FAILED evidence, and mark platform_alignment and content_gap as UNAVAILABLE; as long as discovery and PRIMARY are sufficient, continue comparing, and do not treat platform absence as a blocker.

4. Return to the PRIMARY original source

For the final candidate's factual premises, look up official websites, official announcements, papers, product documentation, or original public records. Platform trending lists, search results, and media paraphrases can only be PLATFORM_SIGNAL or SECONDARY。

Write PRIMARY and PLATFORM_SIGNAL evidence into the candidate file; each has a stable id、source、source_type、url、retrieved_at. When PRIMARY is missing, narrow the argument to what can be proven; if it still cannot hold, switch candidates or use BLOCKED.

5. AI autonomously sets the topic (Jeffrey retains veto power)

After all five steps pass, set the topic directly without waiting for Jeffrey:

  • By异常倍数 > 收藏价值 > 定位重合度sort, take the best candidate and markAUTO_SELECTED, change the rest toREJECTEDand write specific reasons; when tied, prioritizeSELF_CHANNELanomalous direction (a track that has already been verified by yourself).
  • Write schema 4 00-选题.json(includingauto_selection_rationale) and00-选题.mdthen directly enter ②.
  • Jeffrey veto: at any time can write schema 1 00-选题-Jeffrey否决.json(vetoed_by/vetoed_at/candidates_sha256/selected_candidate_id/veto_reasonrequired). After veto, enterTOPIC_RESCAN_REQUIRED: rescan according to the veto reason, delete AUTO_SELECTED and the final topic selection; the new candidate must write the veto record (four items + old candidate SHA) verbatim intoscreening_summary.rejection_history[], and must not repeatedly push the vetoed candidate.
  • When the signal is insufficient to support any candidate passing the five-step method, enterTOPIC_RESCAN_REQUIREDexpand the scan (newly register creator candidates, supplement Douyin search), and do not force a topic selection.

6. Write the final decision and source health

Update 00-选题-source-health.json, recording for each route:

  • Unique source_id and source_role: DISCOVERY|BENCHMARK_CREATOR|PERSONAL_EXPRESSION|DOUYIN_SEARCH|PRIMARY_PROOF. Schema 3 must retain the latter two local discovery roles; the personal expression pool allowsEMPTY, and benchmark accounts only allow theOK|EMPTY。
  • actual command_or_url、attempted_at、status、result_count。
  • this period relative to result_file and real result_sha256。
  • FAILED write error; SKIPPED write reason。

Status must be consistent: the number of OK entries is greater than 0, and the number of EMPTY/FAILED/SKIPPED entries is 0. At least one DISCOVERY is OK, one DOUYIN_SEARCH has a real attempt record, and one PRIMARY_PROOF is OK; DOUYIN_SEARCH may be FAILED, but must be bound to this period's Douyin evidence file and the original error.

Write schema 4 00-选题.json, binding the AUTO_SELECTED candidate andauto_selection_rationale. Finally execute:

node ~/Documents/laohan-skills/laohan-xuanti/scripts/check-topic-contract.mjs --episode episodes/<slug>

Only outputPASS redian topic contract schema=4counts as ① completion.

  • schema_version: 4、selected_candidate_id, non-empty rejected_candidate_ids, non-empty auto_selection_rationale。
  • Copy the selected items as-is content_form、audience_level、audience_promise、creator_fit、assumed_prerequisites、jargon_to_explain、platform_query_intent、platform_alignment、content_gap and claim_evidence_map。
  • audience、thesis、evidence、selection_rationale、not_do_reason。
  • evidence all belongs to the selected candidate, and at least one is PRIMARY; when the platform is available, at least one PLATFORM_SIGNAL,platform_alignment.status=UNAVAILABLE may be absent when
  • experiment contains a single primary intervention, a valid metric_keys, a positive integer T+N、observation_window_unit: DAY and per-key metric_targets。

For each metric target:

{
  "key": "avg_duration_sec",
  "direction": "INCREASE",
  "baseline_ref": "recent_5_median",
  "measurement_source": "douyin_creator_center"
}

Finally write 00-选题.md, explaining only the real decisions in the machine contract, without adding unregistered facts.

Failure handling

Trigger condition Handling
A single discovery source fails Record FAILED; other sources that satisfy the role contract may continue
All discovery sources return no results BLOCKED; do not choose a topic based on model memory
Douyin returns a valid empty array Record EMPTY; do not infer that there is no competition
All OpenCLI login/adapter paths fail Record platform evidence as UNAVAILABLE and continue; do not install an alternative scraper, do not infer a blue ocean
The final candidate has no PRIMARY Narrow the thesis or switch candidates; if still none, BLOCKED
Jeffrey vetoes the current topic EnterTOPIC_RESCAN_REQUIRED; rescan according to the veto reason, carry the veto history into the new candidate, do not enter ②
The platform results support only an adjacent topic Mark ADJACENT, supplement the query; if still adjacent, truthfully explain the differentiation and risks, and it may participate in the final comparison, but must not be passed off as directly aligned
The tutorial candidate has no real local execution evidence Keep REJECTED; it may be retained as a candidate pending verification, but must not be written as a tutorial that is already deliverable
The candidate cannot be measured by the existing ⑬ metrics Change the intervention/metric or switch candidates

Anti-patterns

❌ "All three platforms are hot, so let's do this one."

✅ "Candidate C02 simultaneously solves the target audience's problem, PRIMARY supports the factual premise, Douyin evidence shows that existing content is concentrated on feature introductions, and this episode differentiates through the real workflow cost; C01/C03 were eliminated due to weak evidence or being unfilmable."

❌ "Someone on Douyin is searching for Claude Code migration, so that proves that 'validation loop closure' is a current platform demand."

✅ "This result only proves migration/import demand, mark it ADJACENT; continue searching for direct intent such as validation failures and launch regressions. If there are still no direct results, 'validation loop closure' may participate in the comparison as a differentiated viewpoint, but make it clear that the platform evidence supports only an adjacent demand."

❌ "0 search results, so this is a blue ocean."

✅ "The search executed successfully but returned 0 results; record it as platform evidence pending, and do not judge competitiveness based on this."

Non-Episode mode

When the user only wants a hot-topic brief, the same collection script may be executed to a temporary directory and then a summary of the current signals returned; do not write to the episode source of truth. When the user only wants Douyin search, route directly laohan-douyinsousuo。