
Viral Title
- 54 installs
- 431 repo stars
- Updated July 22, 2026
- kangarooking/kangarooking-skills
Apply viral-title principles to create content that resonates with audiences
About
Technique for viral title from Kangarooking. Teaches the mechanics of why this approach works.
- Data-driven framework for content resonance
- Practical application examples
Viral Title by the numbers
- 54 all-time installs (skills.sh)
- +4 installs in the week ending Aug 2, 2026 (Skillselion tracking)
- Ranked #1,304 of 1,879 Marketing & SEO skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/kangarooking/kangarooking-skills --skill viral-titleAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 54 |
|---|---|
| repo stars | ★ 431 |
| Last updated | July 22, 2026 |
| Repository | kangarooking/kangarooking-skills ↗ |
What it does
Apply viral-title principles to create content that resonates with audiences
Files
Viral Title
Overview
Use this skill to generate and select viral title candidates. The current version implements Phase 1 universal methodology, WeChat public-account title reuse, X/Twitter hook generation, YouTube title-thumbnail packaging, Bilibili title-cover-tag packaging, and a lightweight evolution loop.
Phase 1 must generate 30 titles: 10 universal formulas x 3 variants per formula. Then score the candidates and recommend the single best title.
Workflow
1. Clarify only if the content is too vague to title. 2. Identify the core material:
- topic or content summary
- target audience
- platform if provided
- strongest value, conflict, novelty, or emotional hook
- hard facts, numbers, names, examples, and constraints that must remain true
3. Read references/phase1-universal-methodology.md. 4. If the user names a platform, load the matching platform reference from references/platforms/. 5. Read references/evolution/promoted-rules.md and references/evolution/anti-patterns.md. 6. Generate exactly 3 titles for each of the 10 Phase 1 formulas. 7. If a platform reference is implemented, generate platform-tuned candidates after the universal batch when the user asks for platform-specific titles. 8. If the user asks to reuse proven titles or says "套用标题库", retrieve relevant examples instead of loading full libraries. 9. Score the candidate pool with the Phase 1 scoring rubric plus any platform-specific rules. 10. Select one best title and briefly explain why. 11. End every substantial title-generation response with the feedback prompt from Feedback Hook. 12. If the user replies with a selected title, edit, rating, or critique, log it with scripts/log_feedback.py.
Platform Routing
Use one platform file at a time:
| User says | Platform file | Status |
|---|---|---|
| 公众号, 微信公众号, WeChat article | references/platforms/wechat-public-account.md | Implemented |
| X, Twitter, 推特 | references/platforms/x.md | Implemented |
| YouTube, 油管 | references/platforms/youtube.md | Implemented |
| B站, Bilibili | references/platforms/bilibili.md | Implemented |
For title-library reuse, load only the current platform's library:
references/title-library/wechat-public-account-hot-titles.mdfor summary and examples.references/title-library/wechat-ai-curated-hot-titles.mdfor user-curated AI/tech viral title patterns and hotspot-dependent examples.references/title-library/wechat-public-account-hot-titles.jsononly when many source titles are needed for matching or adaptation.references/title-library/x-hot-hooks.mdfor X/Twitter hook skeletons and reusable mechanisms.references/title-library/youtube-hot-titles.mdfor YouTube title-thumbnail packaging skeletons.references/title-library/bilibili-hot-titles.mdfor B站 title-cover-tag packaging skeletons.
For token-efficient retrieval, prefer:
python3 scripts/retrieve_title_examples.py --platform <wechat|x|youtube|bilibili> --query "<topic words>" --mechanism "<optional mechanism>" --limit 10Evolution Loop
Use the loop only when logging, feedback, review, or evaluation is useful. Do not load historical logs during ordinary title generation.
| Need | Command |
|---|---|
| Log a title session | python3 scripts/log_title_session.py --platform <platform> --topic "..." --recommended-title "..." |
| Log user feedback | python3 scripts/log_feedback.py --session-id "..." --platform <platform> --selected-title "..." --user-edit "..." --rating 5 --feedback "..." |
| Retrieve title examples | `python3 scripts/retrieve_title_examples.py --platform <wechat |
| Review recent learning | python3 scripts/analyze_feedback.py --recent 20 |
| Run seed evals | python3 scripts/run_title_evals.py --evals references/evals/bilibili-ai-title-evals.json --case-id agent-speed-step37-bilibili --titles-json titles.json |
Follow meta/RULES.md: append logs automatically, but require user confirmation before modifying core methodology or promoting rules.
Feedback Hook
After every substantial title-generation response, append exactly one short feedback prompt:
**反馈一下**
你最终会用哪个标题?如果你改了标题,把最终版发我;也可以给 1-5 分。我会用这次反馈优化下次标题。Do not ask for feedback after pure research, implementation, explanation, or tiny one-off edits.
When feedback arrives:
1. Treat a chosen title, edited title, rating, or critique as evolution feedback. 2. Log feedback with the current platform when known. 3. Prefer user_edit over selected_title when both are provided. 4. Store titles, platform, rating, tags, and concise feedback only. Do not store full unpublished drafts by default. 5. After every 5-20 feedback records, run scripts/analyze_feedback.py --recent 20 and summarize learning candidates. 6. Do not promote candidate observations into methodology files without user confirmation.
Phase 1 Output Format
Use this structure:
**内容判断**
核心对象:
目标人群:
主要点击理由:
真实约束:
**第一阶段:通用方法论标题池**
1. 结果承诺型
- ...
- ...
- ...
2. 问题解决型
- ...
- ...
- ...
[continue through all 10 formulas]
**最佳标题**
标题:
理由:
**备选 Top 3**
1. ...
2. ...
3. ...
**反馈一下**
你最终会用哪个标题?如果你改了标题,把最终版发我;也可以给 1-5 分。我会用这次反馈优化下次标题。Quality Rules
- Generate exactly 30 Phase 1 candidates unless the user explicitly asks for fewer.
- Each formula must contribute exactly 3 titles.
- Do not fabricate unsupported facts, names, numbers, or results.
- Prefer concrete nouns, visible stakes, and reader-facing benefits over abstract claims.
- Keep titles platform-neutral in Phase 1. Do not overfit to WeChat, X, YouTube, or Bilibili unless the user asks.
- Use Chinese titles by default when the user writes in Chinese. Use English when the source content or user request is English.
- Avoid empty hype such as "震惊", "必看", "全网最强", unless the user's style explicitly asks for it.
- Make the final recommendation decisive. Do not say "it depends" after scoring.
Future Extension Points
- Add deeper live-sampled libraries for each platform as more user-approved data sources become available.
- Split Bilibili libraries by partition if a single library becomes too broad.
- Load only the platform or library reference needed for the current user request.
interface:
display_name: "爆款标题"
short_description: "为公众号、X、YouTube、B站批量生成爆款标题"
default_prompt: "Use $viral-title to generate 30 viral title candidates for my content and select the best one."
Viral Title Evolution Rules
Core Principle
Keep the hot path short. Store more experience over time, but load only the smallest relevant slice during title generation.
Allowed Automatically
- Append title-generation sessions to
references/evolution/sessions.jsonlwhen the content is not sensitive. - Append user choices, edits, ratings, and comments to
references/evolution/feedback.jsonl. - Add candidate observations to
references/evolution/learning-candidates.md. - Retrieve up to 20 relevant title examples from libraries.
- Generate evaluation reports under temporary output paths.
Requires User Confirmation
- Modify
SKILL.md. - Modify platform methodology files under
references/platforms/. - Promote candidate rules into
references/evolution/promoted-rules.md. - Add or remove large title-library files.
- Delete, rewrite, or compact historical logs.
Never Do
- Load full session history during ordinary title generation.
- Load full title libraries when retrieval can return relevant examples.
- Promote a rule from a single user correction.
- Treat time-sensitive hotspot titles as timeless formulas.
- Store secrets, private credentials, or unpublished article drafts in permanent logs unless the user explicitly asks.
- Store full source articles or long unpublished drafts by default. Instead, store only titles, concise topic summaries, platform, ratings, tags, and feedback.
Token Budget Guardrails
SKILL.md: target under 150 lines.- Platform method file: target under 200 lines.
promoted-rules.md: keep at most 30 active rules.anti-patterns.md: keep at most 30 active anti-patterns.- Retrieval: return 10 examples by default, 20 maximum.
- Evolution review: analyze batches of 5-20 sessions, then summarize.
{
"cases": [
{
"id": "agent-speed-step37-bilibili",
"platform": "bilibili",
"topic": "Step 3.7 Flash Claude Code Agent speed workflow",
"preferred_mechanisms": [
"实测",
"Claude Code",
"速度",
"Agent",
"快模型",
"干活"
],
"avoid": [
"震撼",
"彻底取代",
"最强",
"best ever",
"公众号",
"tweet",
"YouTube"
]
},
{
"id": "ai-video-reverse-prompt-bilibili",
"platform": "bilibili",
"topic": "AI video reverse prompt workflow visual understanding",
"preferred_mechanisms": [
"实测",
"AI",
"提示词",
"复刻",
"工作流",
"教程"
],
"avoid": [
"端掉行业",
"封神",
"最强",
"You Won't Believe",
"thread"
]
}
]
}
{
"name": "wechat-ai-title-evals",
"description": "Small seed eval set for WeChat public-account AI title generation.",
"rubric": {
"clarity": "The title clearly names the concrete AI model, tool, workflow, or user problem.",
"wechat_fit": "The title has WeChat public-account density, stakes, and curiosity without unsupported hype.",
"mechanism": "The title uses a clear mechanism such as tool replacement, first victim, tutorial promise, evidence test, or hotspot bridge.",
"credibility": "The title stays within the article evidence.",
"selection": "The best title should be stronger than generic model-review phrasing."
},
"cases": [
{
"id": "agent-speed-step37",
"platform": "wechat",
"topic": "Step 3.7 Flash for faster local agents",
"content_summary": "Article argues that local agents are getting steadier but still slow. Step 3.7 Flash is tested in Claude Code/Codex-style workflows across video prompt reversal, physical bug detection, location reasoning, Windows troubleshooting, and HTML animation replication. The conclusion is strong models should think and fast models should do work.",
"preferred_mechanisms": ["tool replacement", "evidence test", "agent speed"],
"avoid": ["claiming Step 3.7 Flash fully replaces GPT-5.5", "generic model benchmark title"],
"ideal_directions": [
"用了几天 Step 3.7 Flash 才发现,原来 Claude Code 一直缺的是速度",
"别再让 GPT-5.5 干所有脏活了,我给 Claude Code 接了个快模型"
]
},
{
"id": "ai-prompt-title-library",
"platform": "wechat",
"topic": "AI prompt techniques for writing less AI-like copy",
"content_summary": "Article gives reusable prompts and examples for making AI writing sound less formulaic.",
"preferred_mechanisms": ["tutorial promise", "anti-skill skill", "template slot"],
"avoid": ["empty promise without number or output"],
"ideal_directions": [
"40 个让 AI 写出没有“AI 味”的通用提示词",
"AI 写作的技巧,就是先去掉 AI 味"
]
}
]
}
{
"cases": [
{
"id": "agent-speed-step37-x",
"platform": "x",
"topic": "Step 3.7 Flash Claude Code Agent speed workflow",
"preferred_mechanisms": [
"fast model executes",
"tool replacement",
"I tested it",
"strong model thinks"
],
"avoid": [
"震撼",
"彻底取代",
"最强",
"best ever",
"best ai model ever",
"公众号"
]
},
{
"id": "ai-video-reverse-prompt-x",
"platform": "x",
"topic": "AI video reverse prompt workflow visual understanding",
"preferred_mechanisms": [
"I tested it",
"workflow",
"examples",
"breakdown"
],
"avoid": [
"端掉行业",
"封神",
"best ever",
"best ai model ever",
"爆款文章"
]
}
]
}
{
"cases": [
{
"id": "agent-speed-step37-youtube",
"platform": "youtube",
"topic": "Step 3.7 Flash Claude Code Agent speed workflow",
"preferred_mechanisms": [
"I Tested",
"workflow",
"Claude Code",
"fast model",
"real task"
],
"avoid": [
"震撼",
"彻底取代",
"best ever",
"best ai model ever",
"You Won't Believe",
"公众号",
"tweet"
]
},
{
"id": "ai-video-reverse-prompt-youtube",
"platform": "youtube",
"topic": "AI video reverse prompt workflow visual understanding",
"preferred_mechanisms": [
"I Tested",
"workflow",
"I Turned",
"real task",
"AI video"
],
"avoid": [
"端掉行业",
"封神",
"You Won't Believe",
"thread"
]
}
]
}
Anti-Patterns
Avoid these patterns during title generation. Keep this file short and high-signal.
Active Anti-Patterns
1. Do not make every title sound like a generic model review. 2. Do not overclaim that a fast model replaces a stronger model when the article only argues for task division. 3. Do not use 最强, 彻底, or 封神 unless the article provides enough evidence and the user's style supports stronger wording. 4. Do not reuse old hotspot titles without replacing the underlying current event. 5. Do not hide the concrete tool, model, or platform name when that name is the main click reason.
Learning Candidates
Candidate observations live here before promotion. Promote only after repeated evidence or an evaluation win.
Candidate Template
### YYYY-MM-DD - short label
- Evidence:
- Candidate rule:
- Risk:
- Suggested eval:
- Status: pendingPromoted Rules
These rules are safe to load during normal title generation. Keep this file short and periodically merge overlapping rules.
Active Rules
1. For WeChat AI titles, prefer concrete product/tool names plus visible workflow impact over abstract "AI improves efficiency" phrasing. 2. For time-sensitive titles, verify the live traffic source before using urgency words such as 刚刚, 突发, or 今夜. 3. When adapting proven titles, preserve the mechanism and replace facts; do not copy unverifiable claims or stale events.
{
"description": "Shared mechanism -> keyword mapping used by retrieve_title_examples.py and run_title_evals.py. Single source of truth so the two scripts do not drift. Edit here instead of hardcoding keyword lists in scripts.",
"mechanisms": {
"tool replacement": ["再见", "平替", "可以删了", "出手了", "替代"],
"first victim": ["第一波受害者", "饭碗", "端掉"],
"tutorial promise": ["教程", "提示词", "一键", "分钟", "秒", "附"],
"evidence test": ["实测", "测出", "体验", "全测"],
"hotspot bridge": ["发布", "刚刚", "今夜", "爆火", "登顶"],
"public emotion": ["救了我的狗命", "破防", "看傻了", "服了"],
"hot take": ["hot take", "underestimating", "everyone", "wrong", "proof"],
"i tested it": ["tested", "spent", "tried", "ran", "测了", "试一下"],
"thread promise": ["here are", "breakdown", "bookmark", "patterns", "takeaways"],
"quote post frame": ["underestimating", "important detail", "looks small", "headed"],
"build in public": ["built", "workflow", "exact", "from zero", "ship"],
"youtube packaging": ["thumbnail", "title", "tested", "truth", "guide", "vs"],
"unexpected result": ["not what i expected", "truth", "wrong", "changed", "weirder"],
"challenge": ["tried", "only", "can you", "control", "without"],
"comparison": ["vs", "compared", "better than", "best", "result"],
"mistake warning": ["stop", "wrong", "mistake", "do not", "wasted"],
"beginner guide": ["beginners", "guide", "tutorial", "zero", "everything"],
"ranking list": ["ranked", "only", "number", "tools", "tips"],
"hidden feature": ["hidden", "nobody talks", "miss", "small", "setting"],
"documentary essay": ["real reason", "quietly", "rise and fall", "suddenly", "change"],
"bilibili packaging": ["实测", "保姆级", "建议收藏", "离谱", "看傻", "真香", "教程"],
"fast model executes": ["快模型", "干活", "executes", "do work", "does the work", "脏活"],
"strong model thinks": ["强模型", "thinks", "思考", "think", "动脑"],
"agent speed": ["速度", "speed", "快", "慢", "卡"],
"anti-skill skill": ["没有", "ai 味", "ai味", "去掉", "不像 ai", "反技巧"],
"template slot": ["xxx", "模板", "通用", "套用", "填空"],
"real task": ["真实任务", "real task", "实战", "真实"],
"实测结论": ["实测", "测了", "结果", "能不能打", "改观"],
"我用我让": ["我用", "我让", "外包", "复刻", "救回"],
"挑战约束": ["只用", "不写代码", "能不能", "小时", "预算"],
"避坑提醒": ["别再", "新手", "踩", "用错", "慢"],
"教程收藏": ["教程", "从0到1", "完整流程", "建议收藏", "看懂"],
"对比测评": ["vs", "横评", "免费", "付费", "差在哪"],
"隐藏玩法": ["隐藏", "低估", "正确打开", "玩法", "技巧"],
"复盘拆解": ["拆完", "复盘", "规律", "机制", "看懂", "拆解"],
"失败反转": ["翻车", "起飞", "打脸", "不靠谱", "正确用法"],
"收藏清单": ["建议收藏", "必备", "清单", "整理好了", "够用"]
},
"strong_markers": [
"再见",
"第一波",
"用了",
"实测",
"分钟",
"秒",
"速度",
"出手",
"缺的是",
"附",
"tested",
"spent",
"workflow",
"breakdown",
"proof",
"underestimating",
"fast model",
"strong model",
"executes",
"bookmark",
"保姆级",
"建议收藏",
"快模型",
"干活",
"复刻",
"提示词",
"工作流",
"教程"
]
}
Phase 1 Universal Viral Title Methodology
Core Model
Use this model for platform-neutral title generation:
viral title = clear information + strong click reason + specificity + curiosity gap + credible boundaryDefinitions:
- Clear information: the reader knows what the content is about.
- Strong click reason: the title offers benefit, pain relief, conflict, novelty, identity, or decision help.
- Specificity: the title includes a concrete object, scene, number, timeline, comparison, or consequence.
- Curiosity gap: the title leaves one useful unanswered question.
- Credible boundary: the claim stays within the content's real evidence.
Required Formula Set
Generate exactly 3 candidates for each formula.
1. Result Promise
Promise a desired outcome under a clear condition.
Patterns:
如何在 [时间/限制] 内实现 [结果][目标人群] 想要 [结果],先解决 [关键障碍]从 [当前状态] 到 [理想状态],真正关键的是 [机制]
Best for:
- tutorials, methods, productivity, growth, business, learning, product use cases
Avoid:
- promising outcomes the content cannot prove
2. Problem Diagnosis
Name a painful recurring problem and reveal the likely cause.
Patterns:
为什么你总是 [痛点]?真正原因可能是 [反常识原因][现象] 不是因为 [表面原因],而是因为 [深层原因]困住 [目标人群] 的,往往不是 [A],而是 [B]
Best for:
- analysis, reflection, diagnosis, opinion pieces, user education
Avoid:
- insulting the reader
3. Mistake Avoidance
Warn against a common wrong move and show the cost of continuing.
Patterns:
别再 [常见做法],你真正需要的是 [替代动作][目标人群] 最容易踩的 [数字] 个坑你以为在 [正确动作],其实正在 [负面后果]
Best for:
- guides, checklists, product education, professional advice
Avoid:
- fearmongering without a real mechanism
4. Curiosity Gap
Reveal that there is a hidden pattern, detail, or mechanism worth opening.
Patterns:
我发现了 [对象] 背后最容易被忽略的 [规律][对象] 真正厉害的地方,不是 [表象]看完 [案例/样本],我意识到 [意外结论]
Best for:
- case studies, trend observations, product reviews, personal discoveries
Avoid:
- withholding the entire meaning so the title becomes vague
5. Contrast And Conflict
Create a sharp before/after, surface/essence, old/new, or expected/unexpected contrast.
Patterns:
看起来是 [表象],本质其实是 [真相][旧认知] 已经过时了,新的关键是 [新认知]真正拉开差距的,不是 [A],而是 [B]
Best for:
- commentary, strategy, business, culture, technology, personal growth
Avoid:
- fake opposition when A and B are both true
6. List And Toolkit
Package the content as a finite set of useful items.
Patterns:
[数字] 个让你 [结果] 的方法我常用的 [数字] 个 [工具/动作/判断标准][主题] 入门/进阶,先掌握这 [数字] 件事
Best for:
- tactical content, resource collections, step-by-step teaching
Avoid:
- using arbitrary numbers that do not match the content
7. Audience Awakening
Call out the target reader's identity and make the relevance immediate.
Patterns:
如果你是 [目标人群],这件事越早知道越好写给 [目标人群]:别等到 [后果] 才明白 [道理][目标人群] 最该补上的,不是 [A],而是 [B]
Best for:
- career, creator economy, entrepreneurship, learning, niche communities
Avoid:
- making the target group too broad
8. Case Breakdown
Use a concrete example as the entry point and extract a reusable lesson.
Patterns:
[案例/人物/产品] 爆了以后,我拆出了 [可复用规律]拆解 [案例]:它为什么能 [结果]从 [案例] 看懂 [更大趋势/方法]
Best for:
- case studies, product analysis, viral content analysis, business reviews
Avoid:
- name-dropping a case that the content barely discusses
9. Data Or Evidence
Lead with analysis, samples, testing, or observed evidence.
Patterns:
我分析了 [数量/样本],发现 [结论]用 [方法] 跑了一遍 [对象],结果和我想的不一样[数据/观察] 告诉我们:[结论]
Best for:
- research, experiments, teardown posts, trend reports
Avoid:
- inventing data or exaggerating sample quality
10. Choice And Judgment
Help the reader make a decision between options.
Patterns:
[A] 和 [B] 到底怎么选?关键看 [判断标准]现在还要不要 [动作]?先看这 [数字] 个信号判断 [对象] 值不值得做,看这一个变量
Best for:
- product choice, strategy, career decisions, tool selection, investment of time
Avoid:
- pretending a complex decision has only one universal answer
Scoring Rubric
Score each candidate from 1 to 5 on each dimension:
- Clarity: can the reader immediately identify the content object?
- Click reason: does the title offer benefit, pain relief, conflict, novelty, identity, or decision help?
- Specificity: does it include concrete people, objects, numbers, scenes, comparisons, or stakes?
- Curiosity: does it leave a useful unanswered question?
- Credibility: does it stay true to the content's actual evidence?
Maximum score: 25.
Break ties by choosing the title with:
1. the clearest reader benefit 2. the most reusable phrasing across platforms 3. the lowest risk of unsupported hype
Generation Procedure
For each formula:
1. Extract one angle from the user's content. 2. Write 3 distinct titles:
- one benefit-forward
- one conflict/contrast-forward
- one curiosity-forward
3. Keep all 3 grounded in the same formula, but vary phrasing and emphasis. 4. Do not repeat the same sentence skeleton across multiple formulas. 5. After producing all 30, score internally and expose only the selected best title plus Top 3 unless the user asks to see full scores.
Bilibili Title Method
Use this file when the requested platform is B站, Bilibili, 哔哩哔哩, or when the user asks for B站视频标题、封面字、标签、分区语感.
Source Basis
The current platform method is derived from:
../title-library/bilibili-hot-titles.md- Bilibili UP主创作手册: viewers decide quickly, title and cover are both important, title should be concise, front-load key information, avoid too many adjectives, and target 25 Chinese characters or fewer.
- Prior project memory: B站 public web surfaces and UP pages are workable; 收藏 and 投币 are often better topic-value proxies than likes.
Platform Positioning
B站标题要像“视频入口”,不是公众号文章标题,也不是 YouTube 英文包装。它需要让用户一眼知道:谁/什么东西,在干什么,有什么亮点,属于哪个分区语境。
Default to a title-cover-tag package:
- 标题:25 字以内优先,重点前置。
- 封面字:1-6 个字,宁少勿多,最好和标题互补。
- 标签:类型标签 + 特色标签 + 热点/活动标签。
- 互动价值:知识类重收藏,体验/测评类重投币,娱乐类重弹幕和转发。
Output Modes
Choose one mode from the user's request. If not specified, default to standard_bilibili_video.
1. standard_bilibili_video: 中视频标题,适合知识、科技、生活、娱乐。 2. knowledge_title: 知识区/科技区/教程类,重信息密度和收藏价值。 3. review_title: 数码、AI工具、模型、游戏、软件测评,重实测和结论。 4. challenge_title: 挑战、实验、整活、极限任务,重过程悬念。 5. reaction_title: 反应、吐槽、锐评、看完后感,重情绪和观点。 6. series_title: 系列内容,系列名后置或弱化,不抢主题。 7. story_mode_title: 竖屏/短视频,更短、更口语、更结果前置。
Platform Traits
Prioritize these traits:
1. 25字以内: titles longer than this risk truncation and comprehension loss. 2. 重点前置: put product,人物,热点,事件,or result at the front. 3. 三元素组合: choose at least three from 热点/人物/事件/类型/亮点. 4. 分区语感: 科技区讲实测、效率、工具链; 知识区讲看懂、拆解、避坑; 游戏区讲版本、角色、机制、挑战; 生活区讲真实体验和反差; 鬼畜娱乐讲梗和情绪。 5. 封面互补: cover text should not repeat the title; it should sharpen the click question. 6. 收藏/投币价值: tutorials, workflows, and tool lists should imply usefulness worth saving. 7. B站口语: allow 离谱, 太猛了, 绷不住, 看傻了, 这也行, but only when tone fits. 8. 避免公众号腔: avoid long clauses, policy-news density, and article-style conclusions. 9. 避免标题党伤害完播: curiosity must be paid off early. 10. 社区感: where natural, title can imply UP主亲测、踩坑、复盘、求三连价值.
Bilibili-Specific Formulas
Generate B站 titles from these formulas. For B站 platform batches, produce exactly 3 variants per formula unless the user asks for a smaller set.
1. 实测结论: 实测[对象],[核心结论] 2. 我用/我让: 我让[工具/对象][完成任务] 3. 挑战约束: 只用[限制],能做出[结果]吗? 4. 反差发现: [对象]最离谱的不是[表象] 5. 避坑提醒: 别再这样用[工具/方法]了 6. 教程收藏: [任务]保姆级教程 7. 效率结果: [时间]做完[交付物] 8. 对比测评: [A] vs [B],谁更适合[场景]? 9. 热点借势: [热点/新品]来了,我先测了[任务] 10. 分区梗感: [人群]看完直接[情绪/动作] 11. 隐藏玩法: [工具/产品]这个功能太容易被低估 12. 复盘拆解: 拆完[案例],我发现[规律] 13. 失败反转: 我以为会翻车,结果[反转] 14. 收藏清单: [数量]个[工具/技巧],建议收藏 15. UP主体验: 用了[时间],我终于懂了[对象]
Title-Cover-Tag Pairing
For each serious B站 candidate, also draft cover text and tags.
Pairing rules:
1. 封面字控制在 1-6 个字,突出情绪或结果。 2. 标题说清楚对象和任务,封面展示反差、结果、失败、速度、爽点。 3. 标签至少给 6 个,其中前三个最重要。 4. 标签分三类:
- 类型: AI, 科技, 数码, 编程, 教程, 学习, 游戏, 生活, VLOG.
- 特色: 工具名, 模型名, UP主系列名, 工作流名.
- 热点/活动: 新品发布, 热门模型, 节日, 平台活动.
5. If the content is tutorial/workflow, make one title version explicitly collectible.
Title-Library Reuse
When the user asks for B站 proven-title reuse:
1. Prefer ../../scripts/retrieve_title_examples.py before opening the full library:
python3 ../../scripts/retrieve_title_examples.py --platform bilibili --query "<topic words>" --mechanism "<optional mechanism>" --limit 102. Match by mechanism first, not nouns:
- 实测结论
- 我用/我让
- 挑战约束
- 避坑提醒
- 教程收藏
- 对比测评
- 隐藏玩法
- 复盘拆解
- 失败反转
- 收藏清单
3. Convert the source title into a skeleton. 4. Replace object, task, result, tone, and cover text with facts from the current video. 5. Avoid stale memes and old hotspot wording unless the current B站 audience still recognizes it.
Scoring Rubric
Score each B站 candidate out of 10:
- 0-2: 一眼看懂对象和任务
- 0-2: 点击欲和封面互补
- 0-2: 分区语感和社区感
- 0-2: 收藏/投币/弹幕价值
- 0-2: 真实、不过度标题党
Penalize:
-2if it exceeds 30 Chinese characters without a reason.-2if it sounds like a WeChat article title.-2if it copies YouTube English structure too directly.-2if the title promises a result not shown in the video.-1if it uses too many adjectives instead of concrete nouns.
Output Add-On
When B站 platform adaptation is requested, append:
**B站标题包装池**
模式:
1. 实测结论
- 标题:
封面字:
标签:
互动价值:
[continue through selected formulas]
**最佳 B站标题**
标题:
封面字:
前三标签:
理由:
**A/B 测试备选**
1. ...
2. ...
3. ...WeChat Public Account Title Method
Use this file when the requested platform is 公众号 or WeChat public-account articles.
Source Basis
The current platform method is derived from:
../title-library/wechat-public-account-hot-titles.md../title-library/wechat-ai-curated-hot-titles.md
Snapshot:
- Source path: sibling project
account-growth/公众号.mdhot-articles API. - Fetch time: 2026-06-14 11:14:47.
- Scope: 12 categories, 480 raw records, 394 cleaned title records.
- Filter: hot articles with
read_num >= 10000, cleaned to title-like records of 4-80 characters. - Curated AI supplement: user-provided AI/tech high-traffic title samples, including hotspot-dependent examples and reusable
xxxskeletons.
Platform Traits
WeChat public-account titles can be denser and more explicit than X or video-platform titles. They often work because the title itself carries the narrative, conflict, and reason to open.
Prioritize these traits:
1. Concrete numbers: money, dates, percentages, rankings, counts, ages, time limits. 2. Event urgency: 刚刚, 突发, 发布, 官宣, 今夜, 最新, only when genuinely time-sensitive. 3. Information density: use colon, pause, or 丨 to pack cause, result, and context. 4. Strong nouns: people, companies, products, roles, institutions, places, regulations. 5. Visible stakes: money lost, opportunity window, policy change, job impact, status change. 6. Counterintuitive discovery: 原来, 难怪, 不是...而是..., 背后, 真相. 7. Identity callout: creators, founders,职场人, parents, developers, students, middle-aged readers. 8. Case-led extraction: name a live case first, then imply reusable lesson. 9. Hotspot bridge: connect AI to the live public topic already carrying attention, such as a product launch, movie, Olympics, cross-border platform migration, or company drama. 10. Tool replacement shock: make the old tool, old workflow, or old job feel obsolete because of a new AI capability.
Use emotional words sparingly. WeChat tolerates stronger words than many platforms, but the claim must still be true.
Platform-Specific Formulas
Generate WeChat-specific titles from these formulas:
1. 刚刚/突发,[主体][动作]:[最大变化/结果] 2. [数字/金额/时间],[主体][反常识结果] 3. [对象] 不是 [表象],而是 [本质] 4. [案例] 爆了以后,我拆出了 [可复用规律] 5. [目标人群] 要不要 [动作]?先看 [判断标准] 6. [主体] 翻车/爆火/出圈,背后是 [机制] 7. 从 [具体案例] 看懂 [大趋势/新机会] 8. [人群] 最容易忽略的 [关键变量] 9. [工具/产品/政策] 正式发布: [核心价值/影响] 10. 别再 [常见做法],现在真正有效的是 [新做法] 11. 再见 [旧工具/旧流程],[新工具/新能力] 出手了 12. [时间]![工具组合] 直接生成 [完整交付物](附 [教程/提示词/实测]) 13. [新技术/新产品] 的第一波受害者出现了 14. [热点事件] 越 [结果],[AI对象] 越 [锋利/真实/荒诞] 15. 我用 [极端测试/真实任务],测出了 [产品/模型] 的 [强结论]
Title-Library Reuse
When the user asks for proven-title reuse:
1. Load ../title-library/wechat-public-account-hot-titles.md. 2. For AI, prompt, Agent, model, coding-tool, AI image/video/audio, or AI workflow topics, also load ../title-library/wechat-ai-curated-hot-titles.md. 3. Prefer ../../scripts/retrieve_title_examples.py for token-efficient search before opening full JSON libraries. 4. Search the JSON library by topic words, category, subject type, and archetype only when the retrieval result is insufficient. 5. Search the curated AI library by mechanism: tool result shock, product replacement, first victim, era announcement, anti-skill skill, user experience proof, tutorial promise, public emotion, hotspot bridge, or template slot. 6. Select 10 source titles with similar mechanism, not merely similar nouns. 7. Convert each source title into a skeleton. 8. Replace the subject, claim, numbers, event, and conclusion with facts from the current content. 9. Do not copy unverifiable claims, sensitive events, or third-party accusations unchanged.
Time-Sensitive Hotspot Rule
Some strong WeChat titles are strong because they ride a live traffic wave, not because the sentence pattern is universally strong.
Before using a hotspot-dependent title:
1. Identify the external traffic source: launch, celebrity/public figure, movie, policy, festival, platform migration, company crisis, sports event, or viral meme. 2. Ask whether the current content has the same timing advantage. 3. If the timing is gone, reuse only the structure, such as 热点事件 + AI interpretation, not the specific claim. 4. Prefer a fresh equivalent current hotspot over an old stale hotspot.
Output Add-On
When WeChat platform adaptation is requested, append:
**公众号平台标题池**
- ...
**套用来源**
- 源标题骨架:
- 改写逻辑:X Platform Hook Method
Use this file when the requested platform is X, Twitter, 推特, or when the user asks for tweet/post/thread hooks.
Source Basis
The current platform method is derived from:
../title-library/x-hot-hooks.md- X Help Center post and thread constraints: standard posts are typically 280 characters; threads connect multiple posts.
- Public hook-writing references sampled on 2026-06-14, including Ship 30 for 30, Write With AI, OpenTweet, and Sprout Social.
Platform Positioning
On X, the "title" is usually the first line or first post. It must stop the scroll, create a reason to reply/repost/bookmark, and still sound like a human wrote it.
Do not write X hooks like WeChat headlines. Avoid dense Chinese headline punctuation, long stacked claims, and complete article summaries. X works better when the first line creates tension and the next line pays it off.
Output Modes
Choose one mode from the user's request. If not specified, default to single_post_hook.
1. single_post_hook: one post opening line or short post, target 80-220 characters. 2. thread_opener: first post of a thread, target 120-260 characters, should imply the thread payoff. 3. quote_post_frame: short framing line for quote posting another post, target 30-140 characters.
Platform Traits
Prioritize these traits:
1. First-line tension: the first 8-14 words should contain the take, surprise, or stakes. 2. Conversational clarity: sound like a sharp person thinking out loud, not a media headline. 3. Reply potential: leave a debatable edge, concrete question, or identity tension. 4. Bookmark value: promise a useful breakdown, checklist, ranking, teardown, or repeatable lesson. 5. Proof over hype: pair strong claims with evidence words such as I tested, data, screenshots, examples, breakdown, or receipts. 6. Specific audience: call out builders, founders, creators, devs, AI operators, marketers, or students when useful. 7. One idea per hook: do not cram launch, tutorial, opinion, and conclusion into one post. 8. Whitespace rhythm: 1-3 short lines beat one dense paragraph. 9. Low hashtag dependence: use zero or one hashtag only when it adds discovery value. 10. Currentness without fake urgency: use today, just shipped, or this week only when true.
X-Specific Formulas
Generate X hooks from these formulas. For X platform batches, produce exactly 3 variants per formula unless the user asks for a smaller set.
1. Hot take + proof: [Strong opinion]. I have [evidence] to prove it. 2. Everyone is wrong: Everyone is doing [thing] wrong. The real move is [insight]. 3. I tested it: I spent [time] testing [tool/topic]. The surprising part: [finding]. 4. Before/after: [Old way] is dead. [New way] is what works now. 5. Audience callout: If you are [specific audience], you should pay attention to [thing]. 6. Hidden mechanic: Most people missed the important part of [event/product]: [mechanic]. 7. Mistake confession: My biggest mistake with [topic]: [mistake]. 8. Contrarian lesson: The lesson from [case] is not [obvious lesson]. It is [real lesson]. 9. Receipts thread: [Claim]. Here are [number] examples/receipts. 10. Tool replacement: I used to use [old tool/workflow] for [job]. Now I use [new tool/workflow]. 11. Question bait, not clickbait: What happens when [new force] meets [old workflow]? I tried it. 12. Quote-post frame: This is the part everyone is underestimating.
Title-Library Reuse
When the user asks for X proven-title reuse:
1. Prefer ../../scripts/retrieve_title_examples.py before opening the full library:
python3 ../../scripts/retrieve_title_examples.py --platform x --query "<topic words>" --mechanism "<optional mechanism>" --limit 102. Match by mechanism first, not nouns:
- hot take with proof
- contrarian lesson
- build-in-public proof
- tool replacement
- thread promise
- founder/operator lesson
- reply-provoking question
- quote-post frame
3. Convert the source hook into a skeleton. 4. Replace the subject, proof, audience, and payoff with facts from the current content. 5. Keep the hook native to X: shorter, more conversational, and less conclusive than a WeChat headline.
Scoring Rubric
Score each X candidate out of 10:
- 0-2: first-line stop power
- 0-2: specificity and proof
- 0-2: reply/repost/bookmark potential
- 0-2: platform-native voice
- 0-2: truthfulness and content fit
Penalize:
-2if it sounds like a WeChat article title.-2if it makes an unsupported absolute claim.-1if it exceeds 260 characters for a standard post opener.-1if it needs more than one hashtag to work.
Output Add-On
When X platform adaptation is requested, append:
**X 平台 Hook 池**
模式:
1. Hot take + proof
- ...
- ...
- ...
[continue through selected formulas]
**最佳 X Hook**
Hook:
理由:
**可直接发的首帖版本**
...YouTube Title Method
Use this file when the requested platform is YouTube, 油管, Youtube video, or when the user asks for video titles, title-thumbnail packaging, or long-form video hooks.
Source Basis
The current platform method is derived from:
../title-library/youtube-hot-titles.md- YouTube Help title and thumbnail tips: keep titles accurate, succinct, front-load important words, limit all caps and emoji, and choose between searchable and intriguing titles.
- YouTube Help CTR guidance: packaging should be judged with impressions, CTR, traffic source, average view duration, and viewer fit; clickbait with low average view duration hurts recommendations.
- YouTube thumbnail policy: do not use thumbnail/title combinations that mislead viewers about what is in the video.
Platform Positioning
On YouTube, the title is one half of the package. The title should create a clear promise; the thumbnail should create the visual question. Do not make the title and thumbnail say the same thing.
Default to a title that works on Home/Suggested unless the user explicitly asks for search SEO. For search videos, clarity beats curiosity. For discovery videos, curiosity must still be honest and quickly paid off in the video.
Output Modes
Choose one mode from the user's request. If not specified, default to discovery_title.
1. discovery_title: Home/Suggested-oriented, curiosity plus payoff, target 45-70 characters in English or 14-28 Chinese characters. 2. search_title: tutorial/review/query-oriented, front-load keyword and outcome. 3. challenge_title: experiment, transformation, timed task, or extreme test. 4. review_comparison_title: product, model, tool, or service comparison. 5. essay_title: broader idea, documentary, or opinion video. 6. shorts_title: shorter and more direct; often result-first or question-first.
Platform Traits
Prioritize these traits:
1. Title-thumbnail gap: title names the promise; thumbnail shows the visual contrast, result, or stakes. 2. Front-loaded topic: put the searchable noun, product, person, or conflict early. 3. Retention-safe curiosity: raise a question the video actually answers in the first 30-60 seconds. 4. Clear viewer payoff: make it obvious why the viewer should spend 5-20 minutes. 5. Specific format signal: I Tried, I Tested, I Built, I Ranked, X vs Y, Beginner to Pro, Mistakes, Full Guide. 6. Human stakes: money, time, skill, status, risk, embarrassment, taste, survival, or transformation. 7. Search vs browse choice: do not mix a dry SEO title with a curiosity thumbnail unless the video is search-led. 8. Mobile readability: avoid overly long titles; important words must survive truncation. 9. No metadata fraud: do not imply a celebrity, product result, or dramatic event that is not in the video. 10. Series discipline: put episode numbers, channel branding, and repeated series labels at the end or omit them.
YouTube-Specific Formulas
Generate YouTube titles from these formulas. For YouTube platform batches, produce exactly 3 variants per formula unless the user asks for a smaller set.
1. I tested: I Tested [tool/topic] for [time/task] 2. Unexpected result: [Subject] Was Not What I Expected 3. Transformation: I Turned [input] Into [output] With [method] 4. Extreme constraint: I Tried [task] With Only [constraint] 5. Before/after: From [old state] to [new state] in [time] 6. Comparison: [A] vs [B]: Which One Actually Wins? 7. Mistake warning: Stop Doing [common behavior] in [domain] 8. Beginner guide: [Topic] Explained for Beginners 9. Ranking/list: I Ranked [number] [tools/options] So You Do Not Have To 10. Hidden feature: [Tool/Product] Has a Feature Nobody Talks About 11. Myth bust: Everyone Is Wrong About [topic] 12. Documentary/essay: The Real Reason [trend/event] Is Happening 13. Challenge payoff: Can [tool/person] [hard task]? 14. Build in public: I Built [thing] in [time] Using [tool] 15. Cost/time result: I Spent [money/time] to Find Out If [claim] Is True
Title-Thumbnail Pairing
For each serious YouTube candidate, also draft thumbnail text. Use 1-5 words, not a subtitle.
Pairing rules:
1. If the title is clear/searchable, make the thumbnail emotionally visual. 2. If the title is curiosity-led, make the thumbnail concrete enough to avoid vagueness. 3. Do not duplicate the title in the thumbnail. 4. Use contrast pairs: old/new, before/after, cheap/expensive, human/AI, slow/fast, fail/pass. 5. Avoid thumbnail text that implies something not shown in the video.
Title-Library Reuse
When the user asks for YouTube proven-title reuse:
1. Prefer ../../scripts/retrieve_title_examples.py before opening the full library:
python3 ../../scripts/retrieve_title_examples.py --platform youtube --query "<topic words>" --mechanism "<optional mechanism>" --limit 102. Match by mechanism first, not nouns:
- I tested it
- unexpected result
- transformation
- extreme constraint
- comparison
- mistake warning
- beginner guide
- ranking/list
- hidden feature
- documentary/essay
3. Convert the source title into a skeleton. 4. Replace the subject, result, constraint, and payoff with facts from the current video. 5. Add thumbnail text only after the title promise is clear.
Scoring Rubric
Score each YouTube candidate out of 10:
- 0-2: click promise and curiosity
- 0-2: topic clarity and front-loaded specificity
- 0-2: thumbnail pairing potential
- 0-2: retention safety and truthful payoff
- 0-2: platform-native voice
Penalize:
-3if the title overpromises beyond the video.-2if it is too vague to understand before clicking.-2if it reads like a WeChat article title or X post.-1if the important topic appears only at the end.-1for unnecessary all caps, emoji, or episode branding.
Output Add-On
When YouTube platform adaptation is requested, append:
**YouTube 标题包装池**
模式:
1. I tested
- 标题:
缩略图字:
首屏承诺:
[continue through selected formulas]
**最佳 YouTube 标题**
标题:
缩略图字:
理由:
**A/B 测试备选**
1. ...
2. ...
3. ...Bilibili Hot Title Library
This library stores reusable B站 title skeletons and packaging examples. Use it for mechanism matching, not verbatim copying.
Source basis sampled on 2026-06-14:
- Bilibili UP主创作手册: 标题和封面同等重要,标题建议 25 字以内,重点前置,提取关键字,覆盖热点/事件/类型/亮点/人物。
- Common B站 high-performing mechanisms across 知识区, 科技区, 数码测评, AI工具, 游戏, 生活区, and 娱乐整活.
实测结论
- 实测[工具],[结论]有点意外
- 我测了[工具]的[能力],结果绷不住
- [对象]到底能不能打?实测来了
- [工具]跑完[任务],我改观了
- [对象]最强的不是[表面能力]
我用/我让
- 我让[工具]直接干完[任务]
- 我用[工具]做了个[交付物]
- 我把[任务]外包给了[工具]
- 我让 AI 复刻了[对象]
- 我用[工具]救回了[工作流]
挑战约束
- 只用[工具],能做出[结果]吗?
- 不写代码,能不能做完[项目]?
- [时间]内做完[交付物],靠谱吗?
- 预算[金额],能跑通[任务]吗?
- 让[工具]独立干活一小时
反差发现
- [对象]最离谱的不是[表象]
- 我以为会翻车,结果[反转]
- [工具]看着普通,用起来真香
- [能力]不是演示,是真能干活
- [产品]强的地方有点反直觉
避坑提醒
- 别再这样用[工具]了
- 新手最容易踩的[数量]个坑
- [任务]做不快,问题可能在这里
- 你可能一直用错了[工具]
- [工作流]慢,不一定是模型不够强
教程收藏
- [任务]保姆级教程
- [工具]从0到1完整流程
- 一条视频讲清[工作流]
- [任务]全流程,建议收藏
- 新手也能看懂的[主题]教程
效率结果
- [时间]做完[交付物]
- [工具]把[任务]提速了[倍数]
- [数量]步搭好[工作流]
- [任务]终于不用手搓了
- [时间]跑完[原本很慢的任务]
对比测评
- [A] vs [B],谁更适合[场景]?
- [数量]个[工具]横评,结果很真实
- 免费[工具]能打过付费[工具]吗?
- [旧工具]还能打吗?
- [模型A]和[模型B]差在哪?
热点借势
- [新品]来了,我先测了[任务]
- [热点]之后,[对象]该怎么用?
- [产品]更新后,最值得看的是[能力]
- [事件]火了,我拆了它的[方法]
- [热门工具]这次真有点东西
分区梗感
- 这操作给我看傻了
- 这也能自动化?
- 用完我直接沉默
- 太丝滑了,像开挂
- 做完才发现小丑是我
隐藏玩法
- [工具]这个功能太容易被低估
- [产品]里藏了个效率神器
- [工具]的正确打开方式
- [对象]还有这种玩法?
- 很少人提的[工具]隐藏技巧
复盘拆解
- 拆完[案例],我发现[规律]
- [爆款/案例]到底赢在哪?
- 复盘[任务],关键是[变量]
- [现象]背后的机制讲清楚了
- 看懂[案例],就懂了[趋势]
失败反转
- 我以为会翻车,结果真成了
- 第一次跑崩了,第二次起飞
- 这次测试差点被打脸
- 看起来不靠谱,实测还行
- 翻车后我找到了正确用法
收藏清单
- [数量]个[工具],建议收藏
- [人群]必备的[数量]个技巧
- [任务]常用模板整理好了
- 这份[清单]够用很久
- [数量]个方法,让[任务]快很多
AI/Tech B站 Packaging
- 我把 Step 3.7 Flash 接进 Claude Code,速度离谱
- 只用快模型,能让 Agent 干完活吗?
- 别让最强模型干所有脏活了
- 我测了个国产快模型,Codex 都沉默了
- 强模型思考,快模型干活,真香吗?
- Claude Code 慢?我换了个干活模型
- 我让 AI 倒推视频提示词,效果有点狠
- 这套 Agent 分工,建议收藏
- 不写代码,也能复刻教学动画?
- AI 工作流慢,锅可能不在模型智商
WeChat AI Curated Hot Titles
Snapshot
- Source: user-curated WeChat public-account AI/tech hot-title samples.
- Added at: 2026-06-14.
- Use: AI领域公众号标题生成、标题库套用、热点借势判断、AI工具/模型/Agent/Prompt/教程类标题改写。
- Rule: preserve the title mechanism, not the unverifiable claim. Replace product names, numbers, timing, and conclusions with facts from the current content.
High-Signal AI Titles
- “小作坊下药就是猛”,找不到工作的年轻人靠 AI 半年赚 30 万
- 请收下,一次就能学会的 AI 提问技巧
- 40 个让 AI 写出没有“AI 味”的通用提示词
- o3 发布了,摔碎了码农的饭碗
- 我用 8 道变态烧脑题,测出了 o1 的国内最强平替
- 从 AI 做牛做马到给 AI 做牛马,人类决定反抗
- OpenAI 首个 AI 视频模型炸裂登场,彻底端掉行业饭碗!60 秒一镜到底惊人,世界模型真来了?
- 可灵 AI 深夜悄悄上线 AI 模特,他们这是要革电商的命
- 10 秒钟用 AI 给你的头像戴上圣诞帽,P 图软件可以歇歇了
- 30 秒就能完美复刻你的声音,这就是当今最强的中文 AI 语音克隆
- 再见 Cursor,腾讯出手了
- GPT4o 生成个人数字名片,超酷的!(附提示词)
- 用微信读书 MCP 在 Cursor 中构建私人图书馆,太哇塞了!
- Cursor+MCP 实现用嘴操纵数据库,太丝滑了!
- 两分钟!Cursor+Claude3.7 将任何内容生成可视化网页(附完整教程)
- 五分钟!Cursor+Claude3.7 直接生成一整套 APP 原型图 UI 稿(附完整教程)
- DeepSeek 的第一波受害者出现了
- OpenAI 全新发布文生视频模型 Sora - 现实,不存在了
- 可灵 2.0 正式发布 - 现实,真的不存在了
- GPT4o 生成的烂自拍,反而比我们更真实
- 我要去世了,豆包
- 用 AI 把微信聊天记录变成可视化报告,酷到封神
- 一手体验首款通用 Agent 产品 Manus - 唯有惊叹
- DeepSeek 的提示词技巧,就是没有技巧
- 可灵 AI 深夜悄悄上线 AI 模特,他们这是要革电商的命
- 30 秒就能完美复刻你的声音,这就是当今最强的中文 AI 语音克隆
- 10 秒钟用 AI 一键直出中文海报,我们终于等到了这一天
- 17 岁高中生写了个神级 Prompt,直接把 Claude 强化成了满血 o1
- 整个海外,都快被海螺 AI 给一统江湖了
- 字节全新发布豆包 AI 视频模型 - 再见了 Sora,你的时代过去了
- OpenAI 全新发布 o1 模型 - 我们正式迈入了下一个时代
- 人类还在怕鬼,AI 已经开始害怕自己了
- 他用 Luma 和 Suno 复活了逝去 11 年的爱人,给我看破防了
- 我花了 13999 买了人生第一台 AIPC,然后把你想知道的全测了
- MagnificAI 的爆火之下 - AI 时代,伟大的公司只需要 2 个人
- 【全网首发】PIKA1.0 上手评测 - 你就是传奇
- 我用 AI 做了一部《流浪地球 3》的预告片...
- 别搁那深度思考了,夸克的深度搜索一用一个不吱声
- 大佬都在玩的 AI 名片,用这个提示词轻松搞定
- 今夜,Qwen3 发布,这就是目前最强的开源模型
- 即梦 3.0 万能提示词模板,一键直出高级海报
- 这可能是目前最强的 TTS,10 秒复刻你的声音
- 凭什么?海螺 AI 登顶全球第一
- 一觉醒来,智能体的天塌了
- DeepSeek+公众号,腾讯元宝这下无敌了
- 使用 DeepSeek 必备的 10 个技巧
- 一个汉字问题,将 Kimi、通义、豆包、智谱、GPT-4o、Gemini 都掀翻了
- 发现 Kimi 的 4 种新玩法,有趣,有用!
- 万字长文:为什么 AI 陪伴产品都想抄星野?
- 高德地图新 MCP 太强了!一键生成旅游攻略还能唤起 App 导航!五一正好用上
- Trae 这次更新太炸了:上下文、MCP、智能体全上线,AI IDE 全面觉醒!
- Dia 之后,Fellou 是我非常推荐的又一 AI 浏览器
- MCP 生态爆发前夜:我亲测三大案例,这才是 AI 的真正进化!
- 震撼!腾讯官方下场 MCP:PagesMCP 实现“一句话建站”,AI 开发新时代已来临
- 新 DeepSeek V3 让我一键生成超美卡片!这款免费插件太香了!
- 万人期待的字节 Trae Win+Mac 版全量上线,免费无限量使用 Claude+直播+共学社群
- 狂揽 75K Star!最强开源 AI Workflow 平台【内置 1500+ 工具和模板】效率起飞~
- 私有知识库+本地 300 种模型一键部署,私密性拉满!这个国产开源工具太绝了
- DeepSeek 接入本地私有知识库,有电脑就能搞,这个方案可以封神了!【喂饭级教程】
- 豆包这几天救了我的狗命!
- 百度的 AI 终于开窍了!
- 找了一圈,xxxx,还得是你
- 一个极具争议的开源项目:xxx 火了!
- 你管这玩意儿叫 xxx?
- xxx 太猛了,xxx 都干出来了!
- xxx,又整了一件大事!
- 意外刷到了一个非常逆天的 xxx
- 离谱,用上了一个非常逆天的 xxx
- 感谢 xxx,帮我 xxx
- 这个 xxxx,在 xxx 爆了!
- 被 xxx 的 xxx 惊到了!
- 动动嘴,xxx 帮我 xxxx 了
- 豆包也开始抢程序员饭碗了,一个月只要 9 块 9
- Cursor 可以删了?美团悄悄上线了个更香的平替~
- 全网 AI 看不到的爱心,被这款开源全模态模型攻克了
- Dify 迎来最强开源对手!这个本地 Agent 内置微调+超细权限控制~
- 最强开源 0.9B 级 OCR 模型!本地 Agent、知识库都有救了~
- 这款国产编程模型在海外杀疯了!接入 Claude Code 是真香~
- 体验完 Kimi「OK Computer」,我发现 Agent 还得是大模型公司来做
- 最近的焦虑,被蚂蚁 Agent 团队治好了
- 终于找到可以一键做 AI 漫剧的方法了
- 一人手搓!AI 漫剧从 0 到 1 详细教程
- 越来越对 AI 做的 PPT 敬佩了!(附 7 大用法)
- TRAE SOLO 中国版终于来了,完全免费!
- Gemini3 强势来袭,这次前端真的死了
- 腾讯混元最近是咋的了?
- AutoGLM 真好玩,Github 已经 15K Star 了,闲鱼也卖 199 了
- Vibe Coding 的第一批受害者出现了!
- 用了 3 个月 Claude Code 才发现,原来一直少装了这个神器
- 20 分钟,我用 xxx 画了一部 AI 漫画
- 把 gemini3 变成效率神器的 5 个野路子
- 他们使用豆包的方式,让我大开眼界
- 豆包,掀桌子了
- 字节的即梦居然还能这么用
- 我发现了一些豆包的隐藏技巧
- 仅 1B 参数吊打全场?腾讯开源 HunyuanOCR 成为 OCR 新晋顶流!
- 豆包在视频理解这块,真的牛!
- 我把刷抖音外包给豆包了
- 一个脚本让你的 Claude Code 接入国内各种大模型
- 登顶全球榜首!腾讯的生图模型比豆包强在哪?
- 学习效率提升 200%!分享利用豆包的学习技巧
- 一张照片暴露你的全部行踪!AI 如何通过朋友圈追踪你的位置?
- Agent 这件事,终于被大模型公司玩明白了
- 一个人,也能拥有完整的品牌体系
- 一个人,一天,一套品牌 VI:AI 设计已经恐怖到这个程度了?
- 字节版 Sora 来了!附一手实测和超多玩法
- 2026 年 AI 电商带货视频得这样做,效果真的夯爆了!(附教程,超简单)
Hotspot-Dependent AI Titles
These titles depend on a live external traffic wave. Do not reuse the conclusion unless the same timing, public attention, and reader context exist.
- 一手体验首款通用 Agent 产品 Manus - 唯有惊叹。Note: immediate product launch timing matters.
- 《封神 2》崩的越惨,DeepSeek 的刀就越锋利。Note: tied to the movie's 2025-02 discussion wave.
- DeepSeek 的提示词技巧,就是没有技巧。Note: tied to the DeepSeek traffic wave.
- 全世界的赛博难民,正在疯狂涌进小红书。Note: tied to foreign users moving to Xiaohongshu.
- 我让 AI 重新设计了各大国家的奥运队服,中国队的我吹爆。Note: tied to Olympics attention.
- 成龙的新电影《传说》扑街了,因为他们的 AI 换脸实在太抽象了。Note: tied to the movie's release and discussion.
Broader Tech And Business Hook Titles
Use these as 公众号 hook skeletons when the AI content needs a familiar public-event, product, business, or controversy frame.
- 京东外卖忙活了 40 多天,淘宝只花了 5 天
- iPhone 用户被表情包闪瞎,这事得赖微信
- 排队几万人,这个“小圆脸”咋就从 X 火到朋友圈?
- 不配拥有机库的歼-10C,为啥把印度家的阵风干懵了?
- 有人做网红靠口才,有人做网红靠坐过牢
- 我知道亚瑟士的跑鞋很强,但它怎么突然在服装界出圈了?
- 法院的判决都敢违背,苹果这次摊上大事了
- 点过的网页会变色?没错,这玩意把你的浏览记录漏光了
- 工信部开始严抓智驾,为啥从业者却说影响不大?
- 于东来回应诋毁,哪吒汽车 APP 网络异常,阿维塔回应造假,GTA 开发商股价跌幅近 10%:这就是今天的其他大新闻!
- 美团反击力度小?知情人称:内部认为京东没有抖音威胁大
- 研究完蚂蚁搬家,我好像明白了为什么我们总是堵车
- 赢了输了都上头?今天公测的暗区端游有多刺激?
- 让你把长剧当短视频刷?爱奇艺给我整不会了
- 自动续费很恶心?没事,老外比我们惨多了
- 拥抱大爷大妈一年后,盒马也是好起来了
- 特斯拉财报太难看了,马斯克决定不在白宫蹦跶了
- 太好了,仅退款基本完蛋了!
- 京东外卖加价抢骑手,骑手称“跑网约车的看到收益得破防”
- vivo 手机上能收到 iPhone 的短信,蓝厂这波操作给我看傻了
- 京东外卖大打价格战:4 块钱喝奶茶,商家心甘情愿被薅
- 为了研究“不写代码怎么躺赚”,我体验了一天赛博包工头
- 因为关税战,中国电商平台成了美国 App Store 榜一大哥
- 国产 AI 六小虎已经有俩变小猫,他们活下去的理由不好找
- 美国人抽血做成的救命药,中国现在靠大米就能生产?
- 现在的面试作弊能有多简单?我买了个外挂试了下
- 有多少人,正在互联网上故意找喷?
- 都说页游要死了,结果老外想做自己的“贪玩蓝月”?
- 奔驰大裁员,为何先把净利率高达 50% 的汽车金融给裁了?
- 苹果用户 5 年没享受的微信功能,终于回归了
- 快手公开最新推荐算法!强烈推荐一读
- 谁这么设计耳机啊,服了
Reusable Mechanisms
Use these mechanisms when adapting the curated titles:
| Mechanism | Pattern | Example skeleton |
|---|---|---|
| Tool result shock | small action + huge output | 10 秒钟用 [工具] 做出 [过去很麻烦的结果] |
| Product replacement | old king replaced by new tool | 再见 [旧工具],[新工具] 出手了 |
| First victim | new tech creates visible casualties | [新技术] 的第一波受害者出现了 |
| Era announcement | product launch implies new age | [产品] 正式发布 - 我们迈入了 [新阶段] |
| Anti-skill skill | counterintuitive method | [对象] 的技巧,就是没有技巧 |
| User experience proof | first-person test | 我用 [极端测试],测出了 [结论] |
| Tutorial promise | fast time + complete output | [时间]![工具组合] 直接生成 [完整交付物](附完整教程) |
| Public emotion | funny or desperate confession | [工具] 这几天救了我的狗命 |
| Hotspot bridge | public topic + AI angle | [热点事件] 越 [结果],[AI对象] 越 [锋利/真实/荒诞] |
| Template slot | abstract skeleton | xxx 太猛了,xxx 都干出来了! |
WeChat Public Account Hot Title Library
Snapshot
- Source:
account-growth/公众号.mdhot-articles API - Fetched at:
2026-06-14T11:14:47 - Query: 12 categories, last 180 days,
read_num >= 10000 - Raw records: 480; cleaned title records: 394
- Full machine-readable library:
wechat-public-account-hot-titles.json - Use titles as structural references. Do not copy unverified facts or event claims unchanged.
Category Counts
| Category | Name | Clean Titles |
|---|---|---|
keji | 科技 | 40 |
shuma | 数码 | 40 |
yingxiao | 商业营销 | 39 |
caijing | 财经 | 38 |
biancheng | 开发者 | 38 |
chuangye | 个人成长 | 38 |
ai | AI | 37 |
zixun | 资讯热点 | 36 |
jiaoyu | 教育 | 32 |
zhichang | 职场 | 29 |
qinggan | 情感 | 23 |
wenan | 文案 | 4 |
Archetype Counts
| Archetype | Count | Use |
|---|---|---|
number-money-time | 236 | Make the payoff concrete with money, time, counts, percentages, or dates. |
colon-info-density | 94 | Pack multiple facts after a colon or 丨 for official/news-style density. |
plain-information | 86 | Use direct factual title when the fact itself is strong. |
question-decision | 46 | Turn the content into a question the reader already has. |
first-person-story | 36 | Use lived experience or direct witness as the entry point. |
risk-warning | 24 | Frame the title around loss, danger, mistake, or avoidable cost. |
contrast-reversal | 18 | Create surface-vs-truth or expectation-vs-result contrast. |
hidden-truth | 16 | Use 原来/难怪/背后/真相 to create a discovery gap. |
breaking-news | 11 | Lead with recency or urgency when the subject is genuinely time-sensitive. |
strong-emotion | 10 | Use hot emotional verbs sparingly when the content really supports them. |
list-resource | 8 | Package useful information as a guide, list, plan, or collection. |
High-Signal Samples By Category
AI (ai)
- 突发!Anthropic全球停用Claude 5 (read=100001; share=13040; 新智元)
- 刚刚,Anthropic首个神话级Claude 5正式解禁! (read=100001; share=11650; 新智元)
- 刚刚,地表最强Claude 5被攻破! (read=100001; share=7802; 新智元)
- 突发!美国政府禁止外国人使用Claude Fable 5 (read=95869; share=6659; 机器之心)
- 刚刚,Anthropic道歉了 (read=100001; share=3698; 机器之心)
- 马斯克远程敲钟穿了老黄的皮衣!SpaceX员工集体穿上绿鞋 (read=100001; share=2853; 量子位)
- 刚刚,GPT-5.5被中国纯血AI反超了! (read=100001; share=2947; 新智元)
- Claude Fable 5首日实测,杀疯了… (read=80621; share=4379; 量子位)
- 刚刚,Claude最强模型Fable 5发布:性能爆炸,价格翻倍 (read=70992; share=5413; 机器之心)
- 开源「鲁班」Skill,Claude Fable 5下线前我最想跑通的工作流! (read=46600; share=3593; 卡尔的AI沃茨)
- 瑞幸CLI 上线 (read=50521; share=3392; 赛博禅心)
- GPT-5.6首批实测来了!精准狙击Mythos (read=58534; share=997; 量子位)
- 国内首个!具身数采「黑箱」正式开源,具身数据昂贵的时代结束了 (read=42292; share=1549; AI科技评论)
- HiDream-O1-Image-1.5 刷新国产图像生成模型纪录:砍掉 VAE,是图像模型的未来吗? (read=41095; share=1480; AI科技评论)
- 万字长文:做了些爆款 Skills 以后,我对 Skills 的看法 (read=20086; share=3485; 歸藏的AI工具箱)
- 我用Fable 5做了个红警,它真给我通宵干出来了 (read=30078; share=2138; 傅盛)
- Mythos震撼发布,吓懵谷歌联合创始人 (read=26739; share=1773; 傅盛)
- 小米罗福莉:Fable 5只是阶段性成果 (read=38905; share=706; 智东西)
科技 (keji)
- SpaceX成功上市创造史上规模最大IPO!马斯克成首个万亿富豪 (read=60294; share=3691; DeepTech深科技)
- 只要 6 万,这 550km 纯电新车,香起来了 (read=100001; share=675; 科技狐)
- 199 元!小米刚偷偷上架这新品,又要卖爆啊 (read=100001; share=389; 科技狐)
- Agent 智慧空间来了,讯飞 SpaceMind 海外火出圈 (read=91448; share=356; 雷科技)
- 刚刚,千亿上海GPU龙头宣布:拟港股上市! (read=55997; share=1198; 芯东西)
- 行业销量跌近两成,合资阵营唯一连续三个月逆势增长的为何是它? (read=56060; share=1121; 创业最前线)
- 华为鸿蒙HarmonyOS 7正式发布!超多更新亮点一文盘齐 (read=54595; share=664; IT之家)
- “不吃就滚出去!”鹅腿阿姨一家,就这样背刺清北大学生 (read=47144; share=692; 朕说)
- Fable 5已被物理切断,GPT-5.5也快了 (read=36175; share=1173; 刘小排r)
- 大疆:绝对是来捣乱的!影石Luna Ultra正式发布,3999元起 (read=35541; share=993; 锋潮评测室)
- 教育部社科司关于2026年度教育部人文社会科学研究一般项目申报工作的通知 (read=18490; share=2455; 社科学术圈)
- 对话安克阳萌:AI 硬件的真门槛,是推翻计算机 80 年的「祖宗家法」 (read=30463; share=748; 极客公园)
- 当 OpenAI 还在屏幕里,这家中国车企已经让 AI 长出了身体 (read=34990; share=363; 极客公园)
- 独家丨上线一个月吸引10万开发者,一家中国团队要帮Agent看见网页之外的世界 (read=18911; share=1147; DeepTech深科技)
- 从「展开屏幕」到「展开任务」:折叠屏进入 AI 时代 (read=31932; share=302; 极客公园)
- 安克CEO阳萌:充电宝可能“过几年就死了” (read=35045; share=254; IT之家)
- Harness 之后,硅谷 AI 圈又来新词了:Loop Engineering (read=11752; share=1954; Founder Park)
- 52死30伤!梅大高速项目经理等32人被处理!中交集团被联合约谈 (read=23872; share=432; 筑龙施工)
数码 (shuma)
- 原来国行版缺这么多功能,难怪有人买海外版 (read=100001; share=651; 科技Mentor)
- 独家 | 三位网易制作人入职4399,包括前梦幻事业部负责人林云枫! (read=43333; share=3351; 游戏新知)
- 夯爆了绿联!我的2026年度最佳给你了! (read=100001; share=445; uuuhp)
- 史上最贵!iPhone Ultra,首发只有白色 (read=49776; share=610; Netskao)
- 盘点裁员幅度最大的七家上市游戏公司,一广州公司仅剩22人! (read=36853; share=1218; 游戏新知)
- 鼎心风暴番外:杨思琦商天娥“戏假仇真”?TVB艺人纷纷站队! (read=55008; share=379; 高能E蓓子)
- 吉利正式上市:6月10日,新车重磅发布 (read=50185; share=323; 科技堡垒)
- 13.4 万元!特斯拉新车直降 10 万元,全球最低 (read=42125; share=442; Netskao)
- 8.75mm!iPhone 18 Pro Max,史上最厚重 (read=44272; share=335; Netskao)
- 《浪姐7》代斯淘汰:“异域脸”在内娱,谁吃饼,谁吃肉? (read=51609; share=144; 高能E蓓子)
- 苹果刚公布的相机液冷技术,真的有点猛啊! (read=41656; share=299; Netskao)
- 手搓武侠《雨霖铃》:让江湖梦在2026重生 (read=54695; share=124; 高能E蓓子)
- 两亿人围观比伯骂iPhone,半年后苹果真改了 (read=72219; share=47; 科技Mentor)
- 前《崩坏:星穹铁道》技术负责人创业项目获库洛投资,占股10% (read=36138; share=210; 游戏新知)
- 苹果3款新品上架,6月8日,官网已开售 (read=47025; share=89; 科技堡垒)
- 开局就送“命定之人”?后面全是“现实暴击” (read=48369; share=62; 高能E蓓子)
- 美国人用 CT 把比亚迪「解剖」了,发现了什么? (read=32499; share=75; 南玄武tech)
- iPhone Ultra,首发只有 2 种颜色 (read=25212; share=214; Netskao)
开发者 (biancheng)
- 6 月底截止,Claude Code 免费白嫖 Qwen3.6,Token 无限量。 (read=100001; share=8789; 逛逛GitHub)
- Kimi 版 Codex 正式发布:股市分析给到夯! (read=83122; share=7077; JavaGuide)
- 无限期免费,Token 随便用! (read=61965; share=5842; GitHubDaily)
- 钉钉新任 CEO 的 25 岁旧文:程序员如何高效工作,并兼顾家庭? (read=68103; share=3099; InfoQ)
- 大人,AI编程又变天了!Claude Code之父、龙虾创始人同时力捧新范式,杀死提示词工程? (read=55335; share=2733; InfoQ)
- 又一个神级 Codex Skill 诞生了:一个 API Key,打通全网自媒体数据! (read=23318; share=3825; 极客之家)
- 仅15MB大小,搞定 40+ 种数据库,AI 写 SQL、MCP 对接全都有! (read=25593; share=2343; 开源先锋)
- “AI再强也只是工具!”Linus再谈AI:“氛围编程”写一次性软件可以,但撑不起需要维护35年的项目 (read=42852; share=742; CSDN)
- 2.4w Star,程序员都在偷偷用的画图神器! (read=21141; share=1391; 开源先锋)
- Agent Plan、Coding Plan限时优惠:2.5折畅享多模型! (read=26490; share=901; 火山引擎)
- 全新汽车品牌AIVA发布!火山引擎助力打造AI汽车新体验 (read=25682; share=906; 火山引擎)
- openJiuwen开源SwarmFlow,从"能协作"到"稳稳地干完",开创蜂群可控协同新范式 (read=32019; share=396; CSDN)
- 完全免费!调用量破1万亿的免费Agent模型,我用它替代了Claude Code (read=17694; share=1379; 终码一生)
- 钉钉员工7.5万字离职长文引热议,阿里合伙人委员会发声;梁文锋高考状元旧照曝光:不去清华去浙大;OpenAI将于未来一年内IPO | 极客头条 (read=36517; share=195; CSDN)
- MiniMax M3 正式发布,夯! (read=31546; share=278; JavaGuide)
- 老外做了 5年,终于开源了。 (read=22622; share=568; 开源日记)
- 组了个 AI Agent 团队,还把本地 CC、Codex、🦞都接了进去 (read=14208; share=1068; 刘聪NLP)
- 为什么Databricks值1700亿?腾讯云用Agent Ready数据平台给出了答案 (read=30535; share=210; CSDN)
商业营销 (yingxiao)
- 谢娜演唱会翻车,一次社会性死亡 (read=100001; share=1379; 李东阳朋友圈)
- 刘强东震惊全网,京东机器人集体开工 (read=100001; share=736; 电商头条)
- 辛巴徒弟扎堆解约,猛料满天飞 (read=100001; share=509; 电商头条)
- 董洁阴间造型炸上热搜!网友:赔她点钱吧 (read=100001; share=513; 李东阳朋友圈)
- 花200块起5个号?这批博主靠“人设打假”开辟新赛道 (read=76569; share=892; 新榜)
- 智能眼镜偷拍空姐,吓了全网一跳 (read=100001; share=406; 李东阳朋友圈)
- 东北雨姐现身山姆,手拿饮料,日子很滋润 (read=100001; share=374; 电商头条)
- 市值蒸发超1800亿后,赛力斯“叛变” (read=100001; share=360; 数智研究社)
- 中国精品咖啡鼻祖破产了,欠债千万,3年关店超百家 (read=53781; share=441; 新零售)
- “鹅腿阿姨”塌房记:16元吃的竟然是鸭腿,清北学子10年无人戳破 (read=30282; share=1116; 首席商业评论)
- 1.5万亿酒水赛道,即将跑出一个“万店瑞幸” (read=32430; share=742; 沥金)
- 反人性的钉钉,困在了无招的权力游戏里 (read=27867; share=519; 数智研究社)
- 全网出击,“鹅腿阿姨”事件的15个舆情扩散点 (read=17977; share=1194; 在公关)
- 999感冒灵,故意挂反广告牌,只为祝你考试666 (read=41803; share=115; 数英DIGITALING)
- 永久密钥:68MF6-8QU9Y-NG81K-A6K9J-31ZVD (read=36883; share=201; 首席商业评论)
- 大量空姐被偷拍!AI眼镜的第一波受害者出现了 (read=32166; share=278; 销售与管理Plus)
- 20 亿美元后,Salomon 萨洛蒙的 “未来之路” 指向何方? (read=32931; share=186; Vogue Business)
- 全网炸了!耐克世界杯广告请来42位巨星! (read=26206; share=276; 黑马营销)
个人成长 (chuangye)
- 容易焦虑的人,都有一个不太健康的习惯 (read=86319; share=2597; 沐瑶小筑)
- 认知的三重境界:看山是山(表象),看山不是山(解构),看山还是山(重构) (read=34700; share=5675; 先觉者Pro)
- 奇绩创坛 2026 春季路演日,56 个项目名单 (read=27749; share=4140; 奇绩创坛)
- 只要掌握 4% 法则,你的 “钱” 就能一辈子花不完 (read=30131; share=2456; 财哥总裁)
- 富养自己最好的方式:藏 (read=45460; share=869; 沐瑶小筑)
- 今年,离职潮彻底消失了 (read=44222; share=931; 肥猫说财)
- 多做对抗性运动,可以改变被动懦弱的性格 (read=25551; share=2392; 先觉者Pro)
- 大家勒紧裤腰带过苦日子吧,从6月开始! (read=48644; share=261; 铁木君)
- 985高校弥漫着一股不为外人所知的敌意 (read=24997; share=421; 虞乐仲)
- 行业财报 | 英伟达、博通、台积电、三星电子、SK海力士、美光等53家半导体企业2026年第一季度业绩汇总 (read=17915; share=759; 全球企业动态)
- 中年人的穷鬼4件套 (read=15624; share=800; 请知)
- 答谢方式,暴露了你的社交段位 (read=10437; share=1529; 破圈论)
- 2026年6月10日:那个婴儿的绝望眼神,让我明白,月薪几千,确实没有资格生3个孩子。 (read=36681; share=29; 吾从周)
- 建议大家尽量不要让别人知道「你的动态」 (read=12606; share=915; 一棵蔓草)
- 离职第四年,赚了1200万 (read=32279; share=115; 微设备)
- 说话方式真的很重要 (read=19926; share=427; 没有什么是不可能的)
- 女性外卖员越来越多,说明了什么? (read=23579; share=135; 绿巷少女)
- 89年37岁,看完我你就不焦虑了 (read=29717; share=24; 晴天在进阶)
职场 (zhichang)
- 河南女首富,16岁当厂妹,一根针狂赚800亿 (read=100001; share=5883; 正和岛)
- 面对“史上最贵一吻”,胜宏科技危机公关堪称“教科书” (read=100001; share=1433; 万能的大叔)
- 金与正去哪儿了? (read=61640; share=804; IN朝鲜)
- 豆包将正式收费 (read=65232; share=774; 海发说)
- 石斛这场"骗局",到底忽悠了多少人! (read=71874; share=260; 我的发票)
- 金价跌回2025年,黄金要撑不住了吗? (read=63875; share=202; 晓芳聊财经)
- 老婆“打”警察老公算袭警吗? (read=35296; share=625; 深蓝画画)
- 浙江一女子忍到女儿高考结束离婚,再嫁苦等10年的初恋,谁料,女儿却说,妈,我只有一个爸,你只管去奔向你的幸福吧! (read=65489; share=92; 志云说)
- 2026年济源示范区公安局公开招聘91人公告 (read=16457; share=1756; 济源招聘)
- 大胆释放你身上的强者气息 (read=16881; share=1452; 粥左罗)
- 二杠三警察的四大错觉,你有几个? (read=40490; share=124; 深蓝画画)
- 同事借我的豪车当婚车,还车充满电送两条黄鹤楼,直到我查充电记录,才发现他3天充了12次电 (read=29671; share=253; 德鲁克博雅管理)
- 面试凉了的7个危险信号(一抓一个准) (read=28965; share=288; 猎聘)
- 公司让我长期出差,每月酒店住宿费就得7000多,我便问领导能不能租房,便宜不少,然后报销房租。领导的回复简直让人迷惑 (read=36557; share=100; 人力资源管理)
- 新增值税申报表:核心变化和政策信号全解读 (read=10053; share=1630; 安永EY)
- 行政离职交接清单.xlsx (read=16092; share=492; 知行晓政)
- 为什么大多数人并不习惯使用第一性原理做事? (read=12019; share=830; warfalcon)
- 90万跌到17万,汽车圈被一颗深水炸弹震撼! (read=14238; share=409; AI科技锐评)
财经 (caijing)
- SpaceX开盘飙涨29%,美股太空股跳水,维珍银河大跌超25%,科技七巨头集体下跌 (read=100001; share=13510; 21世纪经济报道)
- 中国政府债券余额首次突破100万亿元 (read=100001; share=9506; 第一财经)
- SpaceX市值破两万亿美元 (read=100001; share=4727; 第一财经)
- “机器人伴侣”来了!10天已预售3800台,男款身着修身西装,女款可上妆,搭载“养成系”情感大模型,仅限成人购买!业内:需注意伦理隐患 (read=90426; share=4348; 每日经济新闻)
- 10家A股公司退市,超25万股民踩雷 (read=100001; share=2053; 第一财经)
- 今夜!存储芯片,集体暴涨 (read=100001; share=1994; 中国基金报)
- 京东方A、“易中天”遭猛烈抛售 (read=93069; share=2229; 21世纪经济报道)
- 黄金、白银,价格大涨 (read=100001; share=1858; 第一财经)
- 美股中概股,集体上涨 (read=100001; share=1555; 第一财经)
- 金价,罕见大涨 (read=100001; share=1609; 每日经济新闻)
- SpaceX收涨19%,市值2.1万亿美元,位列全球第六;伊美就协议文本达成一致,伊方:霍尔木兹海峡相关服务将收费;国际油价大跌4%丨每经早参 (read=100001; share=1407; 每日经济新闻)
- LABUBU世界杯联名款溢价7倍 (read=100001; share=1365; 第一财经)
- 塔克拉玛干沙漠迎来洪水 (read=100001; share=1184; 第一财经)
- 财务造假!10家A股公司退市,超25万股民踩雷,股价最高跌超98% (read=89975; share=1369; 21世纪经济报道)
- SpaceX开盘大涨,马斯同步庆贺 (read=71485; share=2242; 第一财经)
- SpaceX上市首日散户挤爆券商系统,交易员集体穿绿鞋,马斯克:曾认为成功概率不到10% (read=86654; share=1215; 21世纪经济报道)
- “胖东来员工不值这么多钱”引热议,于东来再回应:所有员工能力与薪酬不匹配,未来永远用超值薪酬成就员工 (read=100001; share=514; 每日经济新闻)
- SpaceX造富神话:一夜催生400名亿万富豪 (read=45549; share=1962; 财经杂志)
教育 (jiaoyu)
- 《广东省2026年普通高等学校志愿填报指南》使用攻略 (read=100001; share=12089; 广东省教育考试院)
- 发布!北京大学2026招生简章暨报考指南 (read=100001; share=8110; 北京大学)
- 中央司法警官学院(广东省)2026年报考须知 (read=100001; share=6344; 广东省教育考试院)
- 好简单!四六级真题答案刚刚出炉!高考生轻松500分? (read=91137; share=5550; 高考直通车)
- 炸裂!比尔·盖茨自曝出轨20次,称离婚是他一生最后悔的决定? (read=85173; share=2288; INSIGHT视界)
- 六级答案来了!比四级简单?快看看你能考多少分! (read=55464; share=4732; 高考直通车)
- 拟招7090人丨深圳大学2026年本科招生计划和亮点权威发布 (read=51487; share=4252; 深圳大学)
- 26年6月英语四级参考答案【完整版】 (read=40406; share=3465; U校园新视野答案)
- 国防科技大学2026年招收普通高中毕业生计划(生长军官本科学员)正式发布 (read=49770; share=2235; 广东省教育考试院)
- 速背!6月四六级作文预测!轻松500+ (read=24082; share=4829; 我爱竞赛网)
- 上海徐汇区通报:失联教师遗体已发现 (read=48414; share=885; 光明社教育家)
- 26年6月英语六级参考答案【完整版】 (read=26902; share=2347; U校园新视野答案)
- 全!2026年6月四级真题答案!(含翻译、阅读) (read=34269; share=1276; 我爱竞赛网)
- “6岁的忘年交知道我是警察后,不敢和我玩了!” (read=49978; share=444; 粉笔公考)
- 韩剧《铁拳教育》爆火的背后,道出了一线教师多少无奈与伤痛? (read=21735; share=1797; 光明社教育家)
- 全!2026年6月四级听力答案! (read=23790; share=1322; 我爱竞赛网)
- 全!2026年6月四级真题答案!(含翻译) (read=21554; share=1356; 我爱竞赛网)
- 豆包将正式收费 (read=36580; share=359; 教师之窗)
文案 (wenan)
- “很旺自己的句子,挑一句去旺自己” (read=39575; share=291; 闲读诗词)
- “穷极一生也写不出的顶级江湖句子” (read=16040; share=309; 闲读诗词)
- 换个韩味很重的情头吧 (read=11735; share=219; 隐喻日记)
- 𝟗𝟗张韩味很重的聊天背景 (read=10117; share=137; 隐喻日记)
资讯热点 (zixun)
- 黑豹乐队发布讣告:前主唱张克芃因病不幸离世,终年54岁,6月15日举行遗体告别仪式 (read=100001; share=10893; 九派新闻)
- 伊朗已故最高领袖哈梅内伊将于7月9日下葬;此前在美以袭击中身亡,将被安葬在伊朗圣城马什哈德 (read=100001; share=2858; 九派新闻)
- 南极半岛出现超过正常水平20多摄氏度异常高温,创下历史同期新高,冰层也出现异常融化 (read=100001; share=3448; 九派新闻)
- 扎心了!为何清北学生吃不出鸭腿鹅腿,而国贸上班族一口就能吃出来? (read=85471; share=3474; 留学生日报)
- 伊通社公布伊美谅解备忘录文本主要框架:不涉及核问题相关协议,将谈判美以赔偿战争损失问题,所有战线彻底结束战争等 (read=100001; share=2079; 九派新闻)
- 伊媒公布伊美14点谅解备忘录草案:伊朗不制造核武器,美及其盟友须提出总额至少3000亿美元的伊朗重建计划,美承诺不干涉伊朗内政等 (read=100001; share=1935; 九派新闻)
- 单位帮忙找对象,当天成了9对! (read=78175; share=845; 人民铁道)
- 泰47岁准王储帕公主昏迷3年半去世!王室借机除掉流亡王子,王后贵妃力挺太子成功上位? (read=93289; share=1273; 英国报姐)
- 北京外卖包装新规出炉!9月起施行! (read=98011; share=780; 北京本地宝)
- “00后”副站长,初露锋芒! (read=63211; share=1464; 人民铁道)
- 暴雨黄色预警!四川局地有大雨、暴雨 (read=94567; share=456; 成都日报)
- 铠侠总市值超越丰田跃居日本首位 (read=50548; share=1245; 日经中文网)
- 国际足联回应世界杯墨西哥赛场出现大量空座:许多持票球迷并未留在指定座位,而是选择在球场通道内观赛 (read=100001; share=146; 九派新闻)
- 伊朗最高领袖穆杰塔巴将于12日晚为一名宗教人士举行葬礼;其自战争开始以来从未正式公开露面,美情报称其几乎不与外界接触 (read=100001; share=28; 九派新闻)
- 吉林省省管干部任职前公示公告 (read=28116; share=1858; 中国吉林网)
- 马斯克敲钟,全球史上最大IPO诞生!SpaceX成功登陆纳斯达克 (read=27234; share=1653; 独角兽早知道)
- 中国男子在墨西哥看世界杯遭持枪抢劫:为保命全程配合,大使馆迅速介入,原本计划再去洛杉矶,现已在机场准备回国 (read=43615; share=514; 九派新闻)
- 6人拟被注销事业编 (read=67902; share=106; 黔微普法)
情感 (qinggan)
- 就在刚才,向来和我相处挺融洽的女儿,朝我说了句狠话:“下次这样我杀了你”,予我灵魂以强烈冲击 (read=100001; share=4327; 连岳)
- 我是从农村出来的姑娘,父母去世时,都还没感觉,现在坐在上海高楼的办公室里,一方面感谢党和国家,一方面,看了网络,又害怕结婚生娃 (read=100001; share=3062; 连岳)
- 鹅腿阿姨翻车:在清北卖变质鸭腿十几年,到国贸十几天就栽了 (read=44894; share=2916; 雾满拦江)
- 北京12岁少女遭33岁已婚男侵犯:谁把她推进了这个猎场? (read=38936; share=1535; 李月亮)
- 一个人最大的愚蠢,两个字! (read=34406; share=1349; 经典语录)
- 长期对伴侣有生理性喜欢的夫妻,都跨过了这一关 (read=37307; share=1196; 张德芬空间)
- 弱者给不出像样的爱 (read=20123; share=2068; 漱石枕流)
- “当朋友发现有人偷拍你后......”哈哈哈哈哈反转把我给笑岔气!! (read=49669; share=164; 喵大白话)
- 如果一个月8k,双休,但办公室就你一个人,说实话这种班你能坚持多久? (read=40477; share=311; 温血动物)
- 公公不吃牛肉 婆婆不吃鸭肉 老公不吃羊肉 女儿不吃鸡肉 儿子不吃鹅肉 [敲打][敲打][敲打] 朋友们,留言区告诉我~ 这顿饭我要怎么安排? (read=68867; share=30; 朱门大叔)
- 一个把各省状元玩弄于股掌的女人! (read=21372; share=824; 燕七公子)
- 真实故事||我跑去宁波,花10年才睡到他,小娇妻的故事开始了。 (read=36183; share=186; 猪小浅)
- 一个中医说:别说什么对男人不感兴趣。哪怕你四十、五十,帅哥还是要欣赏一下,可以有行为,不要有行动。因为它就能分泌多巴胺,延缓衰老 (read=26304; share=570; 暖心哲学)
- 故宫发狠了!这块无事牌美到窒息! (read=30683; share=195; 远方青木)
- 月薪过万的人意味着什么了 (read=32483; share=130; 今天又没洗碗)
- 公公不吃牛肉🐂 婆婆不吃鸭肉🦆 老公不吃猪肉🐖 女儿不吃鸡肉🐓 儿子不吃鹅肉🪿 如果是你,这次家庭聚餐,你会怎么安排?[撇嘴] (read=36335; share=31; 知心先生)
- 我,35岁,遇到了比婚内出轨更渣的操作! (read=30963; share=79; 猪小浅)
- 不要跟“磁场太脏”的人,深交 (read=12276; share=298; 老刘先生)
Reuse Rule
When adapting a source title, keep only the skeleton and emotional mechanism. Replace the subject, evidence, number, and conclusion with facts from the current content.
Example skeletons:
刚刚,[主体][关键动作]: [最强结果/变化][数字/金额/时间],[主体][反常识结果][对象] 不是 [表象],而是 [本质][案例] 爆了以后,我拆出了 [可复用规律][目标人群] 要不要 [动作]?先看 [判断标准]
X Hot Hook Library
This library stores reusable X/Twitter hook skeletons and synthetic examples based on observed high-performing hook mechanisms. Use it for mechanism matching, not verbatim copying.
Source basis sampled on 2026-06-14:
- X Help Center: post length and thread behavior.
- Ship 30 for 30: strong declarative opener, controversy, insider info, clear list promise.
- Write With AI: narrative flip, joke opinion, and
I spent my weekendstyle hooks. - OpenTweet: hot takes with evidence, doing-it-wrong hooks, story hooks, and proof arcs.
- Sprout Social: shareability, questions, trend fit, and fast reply behavior.
Hot Take With Proof
- Hot take: [tool/category] is not the future of [field]. [specific workflow] is.
- [Strong opinion]. I have [screenshots/data/examples] to prove it.
- Everyone is underestimating [specific capability]. It changes [job-to-be-done], not [generic field].
- The best [tool] is not the one with the smartest model. It is the one that [practical advantage].
- [Product] looks boring until you use it for [real task].
Everyone Is Doing It Wrong
- Everyone is using [tool] like [old workflow]. That is why the results are mediocre.
- Most people prompt [model] wrong. They ask for [output] before giving it [missing context].
- Stop using [tool] to [common task]. Use it to [higher-leverage task] instead.
- The mistake is not choosing the wrong model. It is giving every task to the same model.
- If your [workflow] feels slow, the bottleneck probably is not [obvious bottleneck].
I Tested It
- I spent [time] testing [tool]. The surprising part was not [expected thing]. It was [real finding].
- I gave [tool] [hard task]. It failed at [weakness], but nailed [strength].
- I tried replacing [old tool/workflow] with [new tool/workflow] for a day. Here is what actually changed.
- I ran [number] tests on [product]. One result made me rethink [belief].
- I used [tool] on a real client/internal task. The result was better than the demo.
Thread Promise
- I analyzed [number] examples of [topic]. Here are the patterns worth stealing.
- [Topic] is moving fast. Here is the simple map I wish I had yesterday.
- I tested [tool/topic] so you do not have to. Here are the [number] useful takeaways.
- There are [number] ways to use [tool]. Most people only know the boring one.
- If you work in [role/field], bookmark this breakdown of [topic].
Narrative Flip
- I thought [obvious belief]. Then [event/test] changed my mind.
- The weird thing about [topic]: the boring part is where the leverage is.
- [Tool/product] is not impressive because it can [flashy capability]. It is impressive because it can [quiet capability].
- The first wave of [trend] was about [old value]. The next wave is about [new value].
- The real lesson from [case] is not [surface lesson]. It is [deeper lesson].
Build-In-Public Proof
- I built [thing] with [tool] in [time]. Here is the exact workflow.
- I asked [tool] to do [task]. It wrote [deliverable], tested it, and fixed [issue].
- One person can now ship [deliverable] that used to need [team/tools]. That is the shift.
- I turned [messy input] into [finished output] with [tool stack]. The stack matters.
- Here is the workflow I would use if I had to rebuild [thing] from zero today.
Tool Replacement
- I used to open [old tool] for [task]. Now I start with [new tool].
- [Old workflow] still works, but [new workflow] is 4x faster for [specific job].
- The new stack is simple: [strong model] thinks, [fast model] executes.
- Do not replace your best model. Stop wasting it on cheap work.
- [Tool] did not replace [role]. It replaced the annoying part of [workflow].
Reply-Provoking Question
- What is the most underrated use case for [tool] right now?
- Are we overrating [popular thing] and underrating [quiet thing]?
- If [new capability] becomes cheap, what happens to [old workflow]?
- What is one [tool/workflow] you stopped using after trying [new tool]?
- Would you trust [agent/tool] with [specific task] today?
Quote-Post Frames
- This is the part everyone is underestimating.
- The important detail is not the launch. It is the workflow it unlocks.
- This looks small, but it changes the default behavior.
- This is exactly where [category] is headed.
- The demo is cool. The distribution consequence is bigger.
Chinese X Hooks
- 我越来越觉得,AI Agent 的下个竞争点不是更聪明,而是更快。
- 别让最强模型干所有活。聪明模型负责判断,快模型负责执行。
- 我测了一个很快的开源模型,最意外的不是速度,而是它能接住多少真实任务。
- 大多数人还在比模型智商,但 Agent 真正卡住的是任务周转速度。
- 如果你每天开 Codex / Claude Code,这个思路值得试一下。
- 我以前以为本地 Agent 缺的是更强模型。现在看,可能缺的是分工。
- 有些 AI 工作流不是被新模型颠覆的,是被快模型加速到可用了。
- 这个问题很有意思:当模型便宜且足够快,哪些任务就不该再交给最强模型?
- 不是所有任务都值得 GPT-5.5 亲自下场。
- 强模型思考,快模型干活,这可能是 Agent 更合理的打开方式。
YouTube Hot Title Library
This library stores reusable YouTube title skeletons and packaging examples. Use it for mechanism matching, not verbatim copying.
Source basis sampled on 2026-06-14:
- YouTube Help: title and thumbnail tips, CTR/impression guidance, and thumbnail policy.
- Common high-performing YouTube title mechanisms across education, tech, AI, creator, review, challenge, and documentary formats.
I Tested It
- I Tested [tool/product] for [time] so You Do Not Have To
- I Tried [tool] on [real task]. Here Is What Happened
- I Used [tool] Every Day for [time]
- I Gave [tool/model] [hard task] and It Surprised Me
- I Tested [number] [tools/options]. Only [number] Were Worth It
Unexpected Result
- [Product/tool] Was Not What I Expected
- The Truth About [topic] Nobody Shows You
- I Thought [tool] Was Hype. I Was Wrong
- [Trend] Is Weirder Than You Think
- This Changed How I Think About [topic]
Transformation
- I Turned [messy input] Into [finished output] With [tool]
- From [old state] to [new state] in [time]
- I Rebuilt [thing] Using Only [tool/method]
- I Made [boring thing] Actually Useful
- I Used AI to Turn [input] Into [output]
Extreme Constraint
- I Tried [task] With Only [constraint]
- Can You Build [thing] in [time]?
- I Let [tool] Control [workflow] for [time]
- I Replaced [old workflow] With [new workflow]
- I Made [thing] Without Writing [common input]
Comparison
- [A] vs [B]: Which One Actually Wins?
- I Compared [A], [B], and [C] on Real Tasks
- Is [new tool] Better Than [old tool]?
- The Best [category] for [specific audience]
- [Cheap/free tool] vs [expensive tool]: The Result Was Strange
Mistake Warning
- Stop Using [tool] Like This
- You Are Probably Doing [topic] Wrong
- The Biggest Mistake Beginners Make With [topic]
- Do Not Buy/Use [thing] Until You Watch This
- I Wasted [time/money] on [thing] So You Do Not Have To
Beginner Guide
- [Topic] Explained for Beginners
- The Complete Beginner Guide to [topic]
- Learn [skill] in [time] With [method]
- Everything You Need to Know About [topic]
- [Tool] Tutorial: From Zero to [outcome]
Ranking/List
- I Ranked [number] [tools/options] So You Do Not Have To
- [number] [tools/tips] That Actually Work
- The Only [number] [tools] I Still Use
- [number] Mistakes That Kill Your [result]
- [number] AI Tools I Would Actually Pay For
Hidden Feature
- [Tool] Has a Feature Nobody Talks About
- The Hidden [feature/workflow] Inside [tool]
- Most People Miss This in [product]
- This Small [feature] Changes Everything
- The [tool] Setting You Should Turn On First
Documentary/Essay
- The Real Reason [trend/event] Is Happening
- How [product/company/trend] Quietly Took Over [space]
- Why Everyone Is Suddenly Talking About [topic]
- The Rise and Fall of [thing]
- [Topic] Is About to Change Again
AI/Tech Chinese Packaging
- 我把 [AI工具] 接进 [工作流],结果比想象中离谱
- 我用 [模型] 跑了 [真实任务],最意外的不是 [表面结果]
- [旧工具] 还能打吗?我拿 [新工具] 做了 5 个实测
- 我让 AI 完成 [任务],中间翻车了 [次数] 次
- [工具A] vs [工具B]:谁才适合真正干活?
- 只用 [工具],能不能做出 [完整交付物]?
- 别再这样用 [AI工具] 了,效率真的很低
- 我花 [时间/金额] 测完 [产品],终于知道它适合谁
- [AI能力] 已经不是演示了,我用它做了个真实项目
- 这可能是 [人群] 最容易低估的 [AI工作流]
#!/usr/bin/env python3
"""Summarize recent title sessions and feedback into learning candidates."""
from __future__ import annotations
import argparse
import json
from collections import Counter
from pathlib import Path
from typing import Any
SKILL_DIR = Path(__file__).resolve().parents[1]
EVOLUTION_DIR = SKILL_DIR / "references" / "evolution"
DEFAULT_SESSIONS = EVOLUTION_DIR / "sessions.jsonl"
DEFAULT_FEEDBACK = EVOLUTION_DIR / "feedback.jsonl"
DEFAULT_OUTPUT = EVOLUTION_DIR / "learning-candidates.md"
def read_jsonl(path: Path) -> list[dict[str, Any]]:
if not path.exists():
return []
rows = []
for line in path.read_text(encoding="utf-8").splitlines():
line = line.strip()
if not line:
continue
try:
value = json.loads(line)
except json.JSONDecodeError:
continue
if isinstance(value, dict):
rows.append(value)
return rows
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--sessions", default=str(DEFAULT_SESSIONS))
parser.add_argument("--feedback", default=str(DEFAULT_FEEDBACK))
parser.add_argument("--output", default=str(DEFAULT_OUTPUT))
parser.add_argument("--recent", type=int, default=20)
parser.add_argument("--append", action="store_true")
return parser.parse_args()
def chosen_title(row: dict[str, Any]) -> str:
return str(row.get("user_edit") or row.get("selected_title") or "").strip()
def match_candidate(title: str, candidates: Any) -> dict[str, Any] | None:
"""Find the session candidate that produced the chosen title.
Tries an exact match first, then a substring match so that lightly edited
titles still resolve back to their originating formula/mechanism.
"""
if not title or not isinstance(candidates, list):
return None
normalized = title.strip().lower()
items = [c for c in candidates if isinstance(c, dict) and c.get("title")]
for candidate in items:
if str(candidate["title"]).strip().lower() == normalized:
return candidate
for candidate in items:
cand_title = str(candidate["title"]).strip().lower()
if cand_title and (cand_title in normalized or normalized in cand_title):
return candidate
return None
def main() -> int:
args = parse_args()
sessions = read_jsonl(Path(args.sessions))[-args.recent :]
feedback = read_jsonl(Path(args.feedback))[-args.recent :]
selected = [row.get("user_edit") or row.get("selected_title") for row in feedback if row.get("user_edit") or row.get("selected_title")]
tags = Counter(tag for row in feedback for tag in row.get("tags", []))
platforms = Counter(row.get("platform") for row in sessions + feedback if row.get("platform"))
session_index = {row.get("session_id"): row for row in read_jsonl(Path(args.sessions)) if row.get("session_id")}
formula_wins: Counter[str] = Counter()
mechanism_wins: Counter[str] = Counter()
platform_formula_wins: Counter[str] = Counter()
unresolved = 0
for row in feedback:
title = chosen_title(row)
if not title:
continue
session = session_index.get(row.get("session_id"))
candidate = match_candidate(title, session.get("candidates")) if session else None
if not candidate:
unresolved += 1
continue
formula = str(candidate.get("formula") or "unknown")
mechanism = str(candidate.get("mechanism") or "")
platform = str(row.get("platform") or (session.get("platform") if session else "") or "unknown")
formula_wins[formula] += 1
platform_formula_wins[f"{platform}/{formula}"] += 1
if mechanism:
mechanism_wins[mechanism] += 1
lines = [
"## Auto Review",
"",
f"- Sessions analyzed: {len(sessions)}",
f"- Feedback records analyzed: {len(feedback)}",
f"- Platforms: {dict(platforms)}",
f"- Frequent feedback tags: {dict(tags.most_common(10))}",
"",
"### Candidate Observations",
"",
]
if selected:
lines.append("- User-selected or edited titles indicate these phrasing directions:")
for title in selected[-10:]:
lines.append(f" - {title}")
else:
lines.append("- No selected-title feedback yet. Keep collecting choices before promoting rules.")
lines.extend(
[
"",
"### Winning Formulas (feedback joined to session candidates)",
"",
]
)
if formula_wins:
lines.append(f"- Formula win counts: {dict(formula_wins.most_common())}")
if mechanism_wins:
lines.append(f"- Mechanism win counts: {dict(mechanism_wins.most_common())}")
if platform_formula_wins:
lines.append(f"- Platform x formula win counts: {dict(platform_formula_wins.most_common())}")
if unresolved:
lines.append(f"- Unresolved feedback (no matching session candidate): {unresolved}")
else:
lines.append("- No feedback could be joined to session candidates yet.")
lines.append("- Tip: log sessions with candidates as objects, e.g. {\"title\": \"...\", \"formula\": \"结果承诺型\", \"mechanism\": \"tool replacement\"}, so wins resolve back to a formula.")
if unresolved:
lines.append(f"- Feedback rows with a chosen title but no matching candidate: {unresolved}")
lines.extend(
[
"",
"### Suggested Next Step",
"",
"- Promote nothing automatically. Compare repeated feedback patterns against eval cases first.",
"",
]
)
output = Path(args.output)
output.parent.mkdir(parents=True, exist_ok=True)
text = "\n".join(lines)
if args.append and output.exists():
output.write_text(output.read_text(encoding="utf-8").rstrip() + "\n\n" + text + "\n", encoding="utf-8")
else:
output.write_text("# Learning Candidates\n\n" + text + "\n", encoding="utf-8")
print(json.dumps({"ok": True, "sessions": len(sessions), "feedback": len(feedback), "output": str(output)}, ensure_ascii=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())
#!/usr/bin/env python3
"""Append user feedback for a title-generation session."""
from __future__ import annotations
import argparse
import json
from datetime import datetime, timezone
from pathlib import Path
SKILL_DIR = Path(__file__).resolve().parents[1]
DEFAULT_LOG = SKILL_DIR / "references" / "evolution" / "feedback.jsonl"
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--log", default=str(DEFAULT_LOG))
parser.add_argument("--session-id", default="")
parser.add_argument("--platform", default="")
parser.add_argument("--selected-title", default="")
parser.add_argument("--user-edit", default="")
parser.add_argument("--rating", type=int, choices=range(1, 6), default=None)
parser.add_argument("--feedback", default="")
parser.add_argument("--tags", default="", help="Comma-separated tags, e.g. too-flat,wechat-fit")
return parser.parse_args()
def main() -> int:
args = parse_args()
record = {
"created_at": datetime.now(timezone.utc).isoformat(),
"session_id": args.session_id,
"platform": args.platform,
"selected_title": args.selected_title,
"user_edit": args.user_edit,
"rating": args.rating,
"feedback": args.feedback,
"tags": [tag.strip() for tag in args.tags.split(",") if tag.strip()],
}
log_path = Path(args.log)
log_path.parent.mkdir(parents=True, exist_ok=True)
with log_path.open("a", encoding="utf-8") as handle:
handle.write(json.dumps(record, ensure_ascii=False, sort_keys=True) + "\n")
print(json.dumps({"ok": True, "log": str(log_path)}, ensure_ascii=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())
#!/usr/bin/env python3
"""Append a title-generation session to the viral-title evolution log."""
from __future__ import annotations
import argparse
import hashlib
import json
from datetime import datetime, timezone
from pathlib import Path
from typing import Any
SKILL_DIR = Path(__file__).resolve().parents[1]
DEFAULT_LOG = SKILL_DIR / "references" / "evolution" / "sessions.jsonl"
def load_json_arg(value: str | None) -> Any:
if not value:
return None
if value == "-":
import sys
return json.load(sys.stdin)
stripped = value.strip()
if stripped.startswith(("{", "[")):
return json.loads(stripped)
path = Path(value)
if path.exists():
return json.loads(path.read_text(encoding="utf-8"))
return json.loads(stripped)
def compact_hash(payload: dict[str, Any]) -> str:
raw = json.dumps(payload, ensure_ascii=False, sort_keys=True)
return hashlib.sha256(raw.encode("utf-8")).hexdigest()[:16]
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--log", default=str(DEFAULT_LOG))
parser.add_argument("--record-json", help="JSON object, path to JSON file, or '-' for stdin. Merged with CLI fields.")
parser.add_argument("--platform", default="")
parser.add_argument("--topic", default="")
parser.add_argument("--content-summary", default="")
parser.add_argument("--recommended-title", default="")
parser.add_argument("--selected-title", default="")
parser.add_argument(
"--candidates-json",
help=(
"JSON array/object, path to JSON file, or '-' for stdin. "
"For the feedback loop to learn which formula wins, use objects like "
'{"title": "...", "formula": "结果承诺型", "mechanism": "tool replacement"}.'
),
)
parser.add_argument("--notes", default="")
return parser.parse_args()
def main() -> int:
args = parse_args()
base = load_json_arg(args.record_json) or {}
if not isinstance(base, dict):
raise SystemExit("--record-json must be a JSON object")
candidates = load_json_arg(args.candidates_json)
record: dict[str, Any] = {
**base,
"created_at": base.get("created_at") or datetime.now(timezone.utc).isoformat(),
"platform": args.platform or base.get("platform", ""),
"topic": args.topic or base.get("topic", ""),
"content_summary": args.content_summary or base.get("content_summary", ""),
"recommended_title": args.recommended_title or base.get("recommended_title", ""),
"selected_title": args.selected_title or base.get("selected_title", ""),
"notes": args.notes or base.get("notes", ""),
}
if candidates is not None:
record["candidates"] = candidates
record["session_id"] = base.get("session_id") or compact_hash(record)
log_path = Path(args.log)
log_path.parent.mkdir(parents=True, exist_ok=True)
with log_path.open("a", encoding="utf-8") as handle:
handle.write(json.dumps(record, ensure_ascii=False, sort_keys=True) + "\n")
print(json.dumps({"ok": True, "session_id": record["session_id"], "log": str(log_path)}, ensure_ascii=False))
return 0
if __name__ == "__main__":
raise SystemExit(main())
#!/usr/bin/env python3
"""Shared loader for references/mechanisms.json.
Both retrieve_title_examples.py and run_title_evals.py read the mechanism ->
keyword mapping from here, so the keyword lists live in exactly one place.
"""
from __future__ import annotations
import json
from functools import lru_cache
from pathlib import Path
from typing import Any
SKILL_DIR = Path(__file__).resolve().parents[1]
MECHANISMS_PATH = SKILL_DIR / "references" / "mechanisms.json"
@lru_cache(maxsize=1)
def load_data() -> dict[str, Any]:
if not MECHANISMS_PATH.exists():
return {"mechanisms": {}, "strong_markers": []}
return json.loads(MECHANISMS_PATH.read_text(encoding="utf-8"))
def mechanisms() -> dict[str, list[str]]:
return load_data().get("mechanisms", {})
def strong_markers() -> list[str]:
return list(load_data().get("strong_markers", []))
def keywords_for_query(mechanism: str) -> list[str]:
"""Keywords for a free-text query mechanism (retrieval).
Matches loosely: a query like "tool" or "复盘" pulls in every mechanism
whose name overlaps as a substring in either direction. Returns a
de-duplicated, order-preserving list.
"""
mech = (mechanism or "").strip().lower()
if not mech:
return []
collected: list[str] = []
seen: set[str] = set()
for name, words in mechanisms().items():
key = name.lower()
if mech in key or key in mech:
for word in words:
if word not in seen:
seen.add(word)
collected.append(word)
return collected
def keywords_for_name(name: str) -> list[str]:
"""Keywords for a named mechanism (evals).
Prefers an exact key match; falls back to loose substring matching so that
eval cases stay robust to minor naming differences.
"""
target = (name or "").strip().lower()
if not target:
return []
for key, words in mechanisms().items():
if key.lower() == target:
return list(words)
return keywords_for_query(name)
#!/usr/bin/env python3
"""Retrieve a small relevant slice from title libraries without loading everything."""
from __future__ import annotations
import argparse
import json
import re
from pathlib import Path
from typing import Any
import mechanism_lib
SKILL_DIR = Path(__file__).resolve().parents[1]
LIB_DIR = SKILL_DIR / "references" / "title-library"
WECHAT_JSON = LIB_DIR / "wechat-public-account-hot-titles.json"
WECHAT_AI_MD = LIB_DIR / "wechat-ai-curated-hot-titles.md"
X_HOOKS_MD = LIB_DIR / "x-hot-hooks.md"
YOUTUBE_TITLES_MD = LIB_DIR / "youtube-hot-titles.md"
BILIBILI_TITLES_MD = LIB_DIR / "bilibili-hot-titles.md"
def tokenize(text: str) -> list[str]:
text = text.lower()
latin = re.findall(r"[a-z0-9][a-z0-9.+#-]*", text)
chinese = re.findall(r"[\u4e00-\u9fff]{2,}", text)
pieces: list[str] = latin + chinese
for chunk in chinese:
if len(chunk) > 4:
pieces.extend(chunk[i : i + 2] for i in range(len(chunk) - 1))
return [p for p in pieces if p.strip()]
def score_text(text: str, query_terms: list[str], mechanism: str = "") -> int:
lowered = text.lower()
score = 0
for term in query_terms:
if term and term in lowered:
score += 3 if len(term) > 2 else 1
if mechanism:
for word in mechanism_lib.keywords_for_query(mechanism):
if word in lowered:
score += 2
return score
def load_wechat_json() -> list[dict[str, Any]]:
if not WECHAT_JSON.exists():
return []
payload = json.loads(WECHAT_JSON.read_text(encoding="utf-8"))
return list(payload.get("items", []))
def load_curated_md() -> list[dict[str, Any]]:
if not WECHAT_AI_MD.exists():
return []
items: list[dict[str, Any]] = []
section = ""
for line in WECHAT_AI_MD.read_text(encoding="utf-8").splitlines():
if line.startswith("## "):
section = line[3:].strip()
continue
if line.startswith("- "):
title = line[2:].strip()
if title:
items.append({"title": title, "source": "wechat-ai-curated", "section": section})
return items
def load_list_md(path: Path, source: str) -> list[dict[str, Any]]:
if not path.exists():
return []
items: list[dict[str, Any]] = []
section = ""
for line in path.read_text(encoding="utf-8").splitlines():
if line.startswith("## "):
section = line[3:].strip()
continue
if line.startswith("- "):
title = line[2:].strip()
if title:
items.append({"title": title, "source": source, "section": section})
return items
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--platform", default="wechat")
parser.add_argument("--query", required=True)
parser.add_argument("--category", default="")
parser.add_argument("--mechanism", default="")
parser.add_argument("--limit", type=int, default=10)
parser.add_argument("--format", choices=["markdown", "json"], default="markdown")
return parser.parse_args()
def main() -> int:
args = parse_args()
limit = max(1, min(args.limit, 20))
terms = tokenize(args.query)
candidates: list[dict[str, Any]] = []
platform = args.platform.lower()
if platform in {"wechat", "公众号", "weixin", "wechat-public-account"}:
for item in load_wechat_json():
if args.category and item.get("category") != args.category:
continue
title = str(item.get("title") or "")
score = score_text(title, terms, args.mechanism)
if score:
candidates.append({**item, "source": "wechat-api-library", "match_score": score})
for item in load_curated_md():
title = str(item.get("title") or "")
score = score_text(title, terms, args.mechanism)
if score:
candidates.append({**item, "match_score": score})
elif platform in {"x", "twitter", "推特"}:
for item in load_list_md(X_HOOKS_MD, "x-hot-hooks"):
title = str(item.get("title") or "")
score = score_text(title, terms, args.mechanism)
if score:
candidates.append({**item, "match_score": score})
elif platform in {"youtube", "yt", "油管"}:
for item in load_list_md(YOUTUBE_TITLES_MD, "youtube-hot-titles"):
title = str(item.get("title") or "")
score = score_text(title, terms, args.mechanism)
if score:
candidates.append({**item, "match_score": score})
elif platform in {"bilibili", "b站", "哔哩哔哩", "bili"}:
for item in load_list_md(BILIBILI_TITLES_MD, "bilibili-hot-titles"):
title = str(item.get("title") or "")
score = score_text(title, terms, args.mechanism)
if score:
candidates.append({**item, "match_score": score})
else:
raise SystemExit(f"Unsupported platform: {args.platform}")
candidates.sort(key=lambda item: (int(item.get("match_score") or 0), float(item.get("library_score") or 0)), reverse=True)
results = candidates[:limit]
if args.format == "json":
print(json.dumps({"query": args.query, "count": len(results), "results": results}, ensure_ascii=False, indent=2))
else:
print(f"# Retrieved Title Examples\n\n- Query: {args.query}\n- Results: {len(results)}\n")
for index, item in enumerate(results, 1):
source = item.get("source") or item.get("platform") or "library"
meta = []
if item.get("category_name"):
meta.append(str(item["category_name"]))
if item.get("section"):
meta.append(str(item["section"]))
print(f"{index}. {item.get('title')} ")
print(f" - source: {source}; score: {item.get('match_score')}; {'; '.join(meta)}")
return 0
if __name__ == "__main__":
raise SystemExit(main())
#!/usr/bin/env python3
"""Lightweight evaluator for generated title candidates against seed cases."""
from __future__ import annotations
import argparse
import json
import re
from pathlib import Path
from typing import Any
import mechanism_lib
SKILL_DIR = Path(__file__).resolve().parents[1]
DEFAULT_EVALS = SKILL_DIR / "references" / "evals" / "wechat-ai-title-evals.json"
def tokenize(text: str) -> set[str]:
lowered = text.lower()
latin = re.findall(r"[a-z0-9][a-z0-9.+#-]*", lowered)
chinese = re.findall(r"[\u4e00-\u9fff]{2,}", lowered)
tokens: set[str] = {t for t in latin if len(t) > 1}
for chunk in chinese:
tokens.update(chunk[i : i + 2] for i in range(len(chunk) - 1))
return tokens
def ideal_similarity(title: str, ideal_directions: list[str]) -> tuple[float, str]:
"""Best Jaccard-style overlap between the title and any ideal direction."""
title_tokens = tokenize(title)
if not title_tokens:
return 0.0, ""
best_ratio = 0.0
best_ref = ""
for ideal in ideal_directions:
ideal_tokens = tokenize(str(ideal))
if not ideal_tokens:
continue
overlap = len(title_tokens & ideal_tokens)
ratio = overlap / len(ideal_tokens)
if ratio > best_ratio:
best_ratio = ratio
best_ref = str(ideal)
return best_ratio, best_ref
def load_json(path_or_json: str) -> Any:
stripped = path_or_json.strip()
if stripped.startswith(("{", "[")):
return json.loads(stripped)
path = Path(path_or_json)
if path.exists():
return json.loads(path.read_text(encoding="utf-8"))
return json.loads(stripped)
def score_title(title: str, case: dict[str, Any]) -> dict[str, Any]:
score = 0
reasons: list[str] = []
lowered = title.lower()
topic = str(case.get("topic", "")).lower()
for token in topic.replace("/", " ").replace("-", " ").split():
if len(token) > 2 and token in lowered:
score += 2
reasons.append(f"topic:{token}")
for mechanism in case.get("preferred_mechanisms", []):
mechanism_text = str(mechanism).lower()
if mechanism_text in lowered:
score += 2
reasons.append(f"mechanism:{mechanism}")
else:
expanded = mechanism_lib.keywords_for_name(mechanism_text)
hit = next((word for word in expanded if word in lowered), None)
if hit:
score += 1
reasons.append(f"mechanism~{mechanism}:{hit}")
for marker in mechanism_lib.strong_markers():
if marker in lowered:
score += 1
reasons.append(f"marker:{marker}")
ideal_directions = case.get("ideal_directions", [])
if ideal_directions:
ratio, ref = ideal_similarity(title, ideal_directions)
if ratio > 0:
bonus = round(min(ratio, 1.0) * 3, 2)
score += bonus
reasons.append(f"ideal:{ratio:.2f}->{ref}")
for bad in case.get("avoid", []):
if str(bad).lower() in lowered:
score -= 3
reasons.append(f"avoid:{bad}")
return {"title": title, "score": round(score, 2), "reasons": reasons}
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--evals", default=str(DEFAULT_EVALS))
parser.add_argument("--case-id", default="")
parser.add_argument("--titles-json", required=True, help="JSON array/object, or path. Object may contain a 'titles' or 'candidates' array.")
parser.add_argument("--format", choices=["json", "markdown"], default="markdown")
return parser.parse_args()
def main() -> int:
args = parse_args()
evals = load_json(args.evals)
cases = evals.get("cases", [])
if args.case_id:
cases = [case for case in cases if case.get("id") == args.case_id]
if not cases:
raise SystemExit(f"No eval case matched --case-id: {args.case_id}")
titles_payload = load_json(args.titles_json)
if isinstance(titles_payload, dict):
titles = titles_payload.get("titles") or titles_payload.get("candidates") or []
else:
titles = titles_payload
titles = [str(item.get("title") if isinstance(item, dict) else item) for item in titles]
results = []
for case in cases:
scored = [score_title(title, case) for title in titles]
scored.sort(key=lambda item: item["score"], reverse=True)
results.append({"case_id": case.get("id"), "top": scored[:5]})
if args.format == "json":
print(json.dumps({"results": results}, ensure_ascii=False, indent=2))
else:
print("# Title Eval Results\n")
for result in results:
print(f"## {result['case_id']}\n")
for item in result["top"]:
print(f"- score={item['score']} title={item['title']}")
if item["reasons"]:
print(f" - reasons: {', '.join(item['reasons'])}")
print()
return 0
if __name__ == "__main__":
raise SystemExit(main())