
Qiaomu Writer
- 4 installs
- Updated April 8, 2026
- joeseesun/qiaomu-writer
Helps with ai & agent building tasks.
About
qiaomu-writer is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted development.
- qiaomu-writer
- AI & Agent Building
- AI-coding skill
Qiaomu Writer by the numbers
- 4 all-time installs (skills.sh)
- Ranked #13,359 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
npx skills add https://github.com/joeseesun/qiaomu-writer --skill qiaomu-writerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 4 |
|---|---|
| Last updated | April 8, 2026 |
| Repository | joeseesun/qiaomu-writer ↗ |
What it does
Helps with ai & agent building tasks.
Files
Qiaomu Writer
Fully automated content creation workflow that produces complete articles in Qiaomu's distinctive style with strategically placed images.
Self-Improving: Writing rules auto-accumulate from your edits. The style gets better every time you revise an AI draft.
Core Philosophy
One-Step Execution: User says "write article with images" → Skill delivers complete article saved to disk.
Failure Resilience: Image generation failures never block article delivery. If MCP fails, save text-only article and report issue.
Zero User Intervention: Complete all steps automatically unless user explicitly interrupts.
Self-Improving Loop: AI draft → You edit → Extract rules → Rules written back to skill → Next draft is more accurate.
Workflow
User Request
│
├─ Research (conditional) → WebSearch
│
├─ Write article → Apply Qiaomu style
│
├─ Plan images → Read image guide, generate prompts
│
├─ Generate images → Call MCP (with error handling)
│
├─ Assemble article → Insert images at strategic positions
│
└─ Save to disk → ~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看/YYYY-MM-DD-[slug].mdStep-by-Step Process
Step 1: Research (Conditional)
When to execute:
- User provides topic/keyword only
- User explicitly requests "联网搜索"
When to skip:
- User provides raw content to rewrite
- User says "不用搜索"
Action:
Use WebSearch tool with:
- Query: Expand user's topic into 2-3 search queries
- Focus: Latest information, diverse perspectives
- Limit: Top 10 results sufficientStep 2: Write Article
Read style guide and anti-tropes first:
Read /Users/joe/.claude/skills/qiaomu-writer/references/writing-style.md
Read /Users/joe/.claude/skills/qiaomu-writer/references/tropes.mdWriting requirements:
1. Qiaomu style characteristics:
- Conversational tone with "你" (direct address)
- Short paragraphs with visual breathing room
- Bold for key points
- Life analogies for complex concepts
- Avoid AI-ish phrases like "不是...而是..."
- Use Chinese commas (,) not dashes
2. Structure:
- Opening hook (1-2 short paragraphs with question)
- 3-5 main sections with clear headings
- Conclusion that echoes opening theme
3. Length:
- User specifies: Follow user's requirement (e.g., 2000-3000 characters)
- No specification: Aim for 1500-2500 characters
4. Technical accuracy: Ensure all facts from research are accurate
IMPORTANT: Keep article text in memory, do NOT save yet (images need to be inserted first).
Step 3: Plan Image Strategy
Read image guide first:
Read /Users/joe/.claude/skills/qiaomu-writer/references/image-prompting.mdSelection criteria:
- Opening section: Always include (sets visual tone)
- Core argument sections: 2-3 images (reinforces key points)
- Conclusion: Optional (echoes opening)
- Total: 3-5 images maximum (adjust based on article length)
For each selected section:
1. Extract core concept (one concept, not all details) 2. Choose visual style based on article type:
- Tech analysis → "赛博朋克" or "商务简约"
- Product review → "小清新" or "公众号封面"
- Opinion piece → "水彩插画" or "国潮风格"
- Tutorial/guide → "商务简约" or "小清新"
3. Construct prompt:
[seedream模板名称],主题:[核心概念],[2-3个视觉元素],[色调/氛围]4. Record metadata:
- Section heading (where to insert)
- Position (after heading)
- Seedream prompt
- Image description (5-10 characters for alt text)
Step 4: Generate Images with Error Handling
IMPORTANT: If user said "不需要配图" or "不用配图", skip this step entirely.
For each image prompt:
# Pseudocode for error handling
for each image_prompt in image_prompts:
try:
image = mcp__seedream__seedream_text_to_image(
prompt=image_prompt,
size="2K",
watermark=false,
auto_save=true
)
if image.url:
collected_images.append({
"section": section_name,
"url": image.url,
"alt": alt_text
})
else:
# Image generation returned no URL, skip
log_warning(f"Image {i} generation returned no URL")
continue
except Exception as e:
# MCP call failed, skip this image
log_warning(f"Image {i} generation failed: {e}")
continue
# Continue regardless of success/failure countFailure handling rules:
- If ALL images fail: Continue with text-only article
- If SOME images fail: Use successful ones
- Never abort article due to image issues
- Report image failures to user at the end
Collect results:
- Seven Niu cloud URLs (preferred for Markdown)
- Or local paths as fallback
Step 5: Assemble Article
Image insertion logic:
For each successfully generated image: 1. Find the corresponding section heading in article text 2. Insert image immediately after the heading 3. Use format:  4. Add blank line before and after image for readability
Example:
## 人机协作的新范式

你有没有想过,AI工具真正改变的不是你的工作方式...If no images were generated:
- Use original article text as-is
- Add note in completion report that images were skipped
Step 6: Save Article
File path generation:
~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看/YYYY-MM-DD-[topic-slug].mdFilename rules:
- Use actual current date (YYYY-MM-DD)
- Topic slug: Pinyin or English, simplified (max 30 chars)
- Examples:
2025-11-18-storytelling-skills.md2025-11-18-ai-programming-tools.md
Create directory if not exists:
mkdir -p ~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看Save action:
Use Write tool to save the complete article (with or without images)Step 7: Report Completion and Open Article
Success report format:
✅ 文章已生成并保存
**文件位置**: ~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看/YYYY-MM-DD-[slug].md
**字数**: [count] 字
**配图**: [n] 张图片已插入
[If some images failed:]
⚠️ 图片生成: [success_count]/[total_count] 成功
- 第[x]张图片生成失败(已跳过)
📄 文章预览:
[Show first 200 characters of article]
📖 已在Obsidian中打开文章Open in Obsidian:
# 自动在Obsidian中打开生成的文章
open "obsidian://open?vault=乔木新知识库&file=10-19 创作/11 公众号-向阳乔木推荐看/YYYY-MM-DD-[slug]"路径说明:
- 文件保存在知识库的创作区,Obsidian 可直接打开
Usage Examples
Example 1: Full Workflow with Images
User: "联网搜索AI编程工具的发展趋势,然后用乔木风格写一篇文章,并配图"
Execution: 1. WebSearch: "AI编程工具 2025", "GitHub Copilot vs Cursor", "AI代码助手 趋势" 2. Write 1800-character article in Qiaomu style 3. Plan 4 image positions 4. Generate prompts and call MCP for each 5. Successfully generate 3/4 images (one fails, continue) 6. Insert 3 images into article 7. Save to ~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看/2025-11-18-ai-programming-trends.md 8. Report: "✅ 文章已生成,3/4张图片成功"
Example 2: Content Rewrite with Images
User: "把这段内容用乔木风格改写成文章并配图:[text]"
Execution: 1. Skip search (content provided) 2. Rewrite in Qiaomu style 3. Plan 2 image positions 4. Generate and insert images 5. Save article
Example 3: No Images Requested
User: "用乔木风格写一篇关于工作流优化的文章,不需要配图"
Execution: 1. Research topic 2. Write article 3. Skip image generation entirely 4. Save text-only article
Example 4: All Images Fail (Graceful Degradation)
User: "写一篇关于Rust编程的文章并配图"
Execution: 1. Research + Write article 2. Plan 3 images 3. MCP calls all fail (network issue, quota exceeded, etc.) 4. Continue without images 5. Save text-only article 6. Report: "✅ 文章已生成(图片生成失败,已保存纯文本版)"
Error Handling Principles
When MCP Tools Unavailable
If mcp__seedream__* tools not found:
1. Log warning
2. Continue with text-only article
3. Report MCP unavailability in completion messageWhen Individual Image Generation Fails
For each image failure:
1. Catch exception
2. Log which image failed and why
3. Continue to next image
4. Never abort article generationWhen All Images Fail
If all image generations fail:
1. Save text-only article
2. Report image failure count
3. Suggest checking MCP configuration
4. Still mark task as "successful" (article delivered)Quality Standards
Content Quality
- Engaging opening that hooks reader
- Clear logical flow between sections
- Concrete examples over abstract theory
- Natural conversational tone
- No AI clichés or formulaic expressions
Image Quality
- Prompts are specific and actionable
- Visual style matches article tone
- Placement enhances reading flow
- Not too many images (avoid distraction)
- Each image serves a clear purpose
Reliability
- Never abort due to image failures
- Always deliver complete article
- Clear error reporting
- Predictable file paths
Important Notes
- Full automation: Execute all steps without user confirmation
- Error resilience: Image failures never block article delivery
- User experience first: Completed article is the priority, images are enhancement
- Clear reporting: Always tell user what succeeded and what failed
Self-Improving Mode
Trigger phrases: "提取写作规则", "我改了这篇文章", "更新写作风格", "帮我从这次修改中提取规则"
When to use: After you edit an AI-generated article to your satisfaction, feed both versions back to extract style rules. Rules accumulate automatically in writing-style.md — zero manual writing.
Workflow
Step 1: Get both files
- AI draft: the file Claude saved originally
- Revised: your edited version (or paste the content)
Step 2: Run diff + extract rules
bash /Users/joe/.claude/skills/qiaomu-writer/scripts/extract-style-rules.sh <draft.md> <revised.md>
→ Generates a Claude prompt with the diff embedded
Step 3: Paste that prompt to Claude
→ Claude analyzes what you changed and extracts reusable rules
Step 4: Review extracted rules
→ You decide which rules are worth keeping (takes 30 seconds)
Step 5: Append approved rules to writing-style.md
→ Claude appends to: references/writing-style.mdRule format (auto-generated)
## 自动积累的规则(YYYY-MM-DD)
### 规则 N:[规则标题]
- **现象**:AI 写了什么(坏的)
- **修改**:乔帮主改成了什么(好的)
- **原则**:从这次修改提炼的通用规则Manual shortcut (in-conversation)
If you paste an AI draft + your revision directly in chat, Claude can extract rules inline without the script:
"这是AI初稿和我的修改版,帮我提取写作规则追加到 writing-style.md"
Stats tracking
After appending rules, report:
- Total rules in writing-style.md (count
### 规则headers) - Rules added this session
- Date of last update
---
References
references/writing-style.md- Qiaomu style guide (auto-accumulates rules over time)references/tropes.md- AI writing anti-tropes checklist (30+ patterns to avoid)references/image-prompting.md- Image strategy and prompt engineeringscripts/extract-style-rules.sh- Self-improving: diff two article versions → extract rules
Bud1rences @� @� @� @
referencesbwspblob�bplist00�]ShowStatusBar[ShowToolbar[ShowTabView_ContainerShowSidebar\WindowBounds[ShowSidebar _{{0, 60}, {1512, 854}} #/;R_klmno�
�
referencesdsclbool
referenceslsvCblobSbplist00�
WXYZ[\_useRelativeDates_showIconPreviewWcolumns_calculateAllSizes_scrollPositionYXtextSize_scrollPositionXZsortColumnXiconSize_viewOptionsVersion �$(-27<@EIMQ�WvisibleUwidthYascendingZidentifier , Tname�UwidthYascendingWvisibleXubiquity#�!# �\dateModified�!'[dateCreated�*, aTsize�/1 s Tkind�46d Ulabel�9;K Wversion�? Xcomments�BD�^dateLastOpened�BHZshareOwner�BL_shareLastEditor�N!YdateAdded�SU�_invitationStatus##@*#�x0Tname#@00BJ^py����������������
%'()2356CLMNZcdfgluvxy~�������������������������� '(*+>?HQZ_h]y
referenceslsvpblob�bplist00�
GHIJKL_useRelativeDates_showIconPreviewWcolumns_calculateAllSizes_scrollPositionYXtextSize_scrollPositionXZsortColumnXiconSize_viewOptionsVersion � %*/48=AXcommentsUlabelWversion[dateCreatedTsize\dateModifiedTkindTname^dateLastOpened�UindexUwidthYascendingWvisible, �!"d �&'K �+,��01a �5, �9:s �> �BC�##@*#�x0Tname#@00BJ^py������������� &,6>@CDENPRST]_abclnpqr{}��������������������������M�
referencesvSrnlongEDSDB `� @� @� @zes_scrollPositionYXtextSize_scrollPositionXZsortColumnXiconSize_viewOptionsVersion � %*/48=AXcommentsUlabelWversion[dateCreatedTsize\dateModifiedTkindTname^dateLastOpened�UindexUwidthYascendingWvisible, �!"d �&'K �+,��01a �5, �9:s �> �BC�##@*#�x0Tname#@00BJ^py������������� &,6>@CDENPRST]_abclnpqr{}��������������������������M�
referencesvSrnlongMIT License
Copyright (c) 2026 joeseesun
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Qiaomu Writer
Self-improving content creation skill with web research, distinctive writing style, and automated image generation
自我进化的内容创作技能,支持联网搜索、乔木风格写作和自动配图
[English](#english) | [中文](#中文)
---
<a name="english"></a>
English
What This Solves
You want to write articles that:
- Sound human, not AI-generated (no "不是...而是..." patterns)
- Include strategically placed images that reinforce key points
- Get better over time as you edit AI drafts (self-improving loop)
One command → Complete article with images saved to disk.
Prerequisites
- [ ] Claude Code CLI installed and authenticated
- [ ] WebSearch MCP enabled (for research mode)
# Verify WebSearch is available
claude mcp list | grep -i search- [ ] Seedream MCP enabled (for image generation)
# Install if missing
claude mcp add seedream <your-seedream-config>- [ ] Knowledge base directory exists at
~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看/
mkdir -p ~/乔木新知识库/10-19\ 创作/11\ 公众号-向阳乔木推荐看/Installation
npx skills add joeseesun/qiaomu-writerVerify installation:
ls ~/.claude/skills/qiaomu-writer/SKILL.mdUsage Examples
Basic article with research:
联网搜索 AI Agent 的最新进展,写一篇 2000 字的文章并配图Rewrite existing content:
把这段内容改写成乔木风格,不用搜索,配 3 张图Text-only mode:
写一篇关于 Rust 内存安全的文章,不需要配图Self-improving mode:
我改了这篇文章,帮我提取写作规则更新到 skillHow It Works
User Request
│
├─ Research (if needed) → WebSearch for latest info
│
├─ Write article → Apply Qiaomu style (conversational, short paragraphs, bold key points)
│
├─ Plan images → Read image guide, select 3-5 strategic positions
│
├─ Generate images → Call Seedream MCP (with error handling)
│
├─ Assemble article → Insert images at strategic positions
│
└─ Save to disk → ~/乔木新知识库/.../YYYY-MM-DD-[slug].mdSelf-Improving Loop: 1. AI generates draft 2. You edit the draft 3. Run scripts/extract-style-rules.sh original.md edited.md 4. Script extracts rules from your edits 5. Rules appended to references/writing-style.md 6. Next draft automatically applies accumulated rules
Troubleshooting
| Problem | Solution |
|---|---|
| "WebSearch tool not found" | Install WebSearch MCP: claude mcp add websearch <config> |
| "Seedream API error" | Check API key in MCP config. Skill will save text-only article if images fail. |
| "Knowledge base directory not found" | Create directory: mkdir -p ~/乔木新知识库/10-19\ 创作/11\ 公众号-向阳乔木推荐看/ |
| Images not inserted | Check references/image-prompting.md for prompt format. Verify Seedream MCP is responding. |
| Style doesn't match expectations | Read references/writing-style.md and references/tropes.md. Use self-improving mode to accumulate your preferences. |
Credits
- Seedream MCP: Image generation powered by Seedream API
- WebSearch: Research capabilities via Claude Code's WebSearch tool
- Writing style: Inspired by conversational tech writing (Paul Graham, Wait But Why)
Limitations
- Chinese-first: Writing style optimized for Chinese content (uses "你" direct address, Chinese punctuation)
- Image generation: Requires Seedream MCP. Falls back to text-only if unavailable.
- Knowledge base path: Hardcoded to
~/乔木新知识库/.... EditSKILL.mdline 37 to customize.
---
<a name="中文"></a>
中文
这能解决什么问题
你想写出这样的文章:
- 听起来像人写的,不是 AI 生成的(没有"不是...而是..."这种套路)
- 配图恰到好处,强化关键观点
- 每次你修改 AI 初稿后,下次生成的文章自动变得更好(自我进化)
一句话 → 完整的文章(含配图)保存到磁盘。
前置条件
- [ ] Claude Code CLI 已安装并登录
- [ ] WebSearch MCP 已启用(用于联网搜索)
# 验证 WebSearch 可用
claude mcp list | grep -i search- [ ] Seedream MCP 已启用(用于生成配图)
# 如果缺少,安装它
claude mcp add seedream <你的-seedream-配置>- [ ] 知识库目录 存在于
~/乔木新知识库/10-19 创作/11 公众号-向阳乔木推荐看/
mkdir -p ~/乔木新知识库/10-19\ 创作/11\ 公众号-向阳乔木推荐看/安装
npx skills add joeseesun/qiaomu-writer验证安装:
ls ~/.claude/skills/qiaomu-writer/SKILL.md使用示例
基础用法(联网搜索 + 配图):
联网搜索 AI Agent 的最新进展,写一篇 2000 字的文章并配图改写现有内容:
把这段内容改写成乔木风格,不用搜索,配 3 张图纯文字模式:
写一篇关于 Rust 内存安全的文章,不需要配图自我改进模式:
我改了这篇文章,帮我提取写作规则更新到 skill工作流程
用户请求
│
├─ 联网搜索(如果需要) → WebSearch 获取最新信息
│
├─ 写文章 → 应用乔木风格(对话式、短段落、加粗重点)
│
├─ 规划配图 → 读取配图指南,选择 3-5 个战略位置
│
├─ 生成配图 → 调用 Seedream MCP(带错误处理)
│
├─ 组装文章 → 在战略位置插入配图
│
└─ 保存到磁盘 → ~/乔木新知识库/.../YYYY-MM-DD-[slug].md自我进化循环: 1. AI 生成初稿 2. 你修改初稿 3. 运行 scripts/extract-style-rules.sh 原稿.md 修改版.md 4. 脚本从你的修改中提取规则 5. 规则追加到 references/writing-style.md 6. 下次生成的文章自动应用积累的规则
常见问题
| 问题 | 解决方法 |
|---|---|
| "WebSearch tool not found" | 安装 WebSearch MCP:claude mcp add websearch <配置> |
| "Seedream API error" | 检查 MCP 配置中的 API key。如果配图失败,skill 会保存纯文字版本。 |
| "Knowledge base directory not found" | 创建目录:mkdir -p ~/乔木新知识库/10-19\ 创作/11\ 公众号-向阳乔木推荐看/ |
| 配图没有插入 | 检查 references/image-prompting.md 的提示词格式。验证 Seedream MCP 是否响应。 |
| 风格不符合预期 | 阅读 references/writing-style.md 和 references/tropes.md。使用自我改进模式积累你的偏好。 |
致谢
- Seedream MCP:配图生成由 Seedream API 提供支持
- WebSearch:联网搜索能力由 Claude Code 的 WebSearch 工具提供
- 写作风格:灵感来自对话式技术写作(Paul Graham、Wait But Why)
限制
- 中文优先:写作风格针对中文内容优化(使用"你"直接称呼、中文标点)
- 配图生成:需要 Seedream MCP。如果不可用,会回退到纯文字模式。
- 知识库路径:硬编码为
~/乔木新知识库/...。如需自定义,编辑SKILL.md第 37 行。
图片提示词生成指导
核心原则
为文章生成配图时,图片应该: 1. 呼应内容主题 - 不是装饰,而是强化文章核心观点 2. 风格统一 - 同一篇文章的图片保持视觉一致性 3. 避免文字 - Seedream生成的文字质量不佳,优先用视觉元素表达
提示词生成流程
1. 分析段落核心
提取这个段落/章节的一个核心概念,而不是所有细节。
好的提取:
- 段落讲AI工具改变工作方式 → 核心:人机协作
- 段落讲代码审查的价值 → 核心:质量把关
不好的提取:
- 把段落所有内容都塞进提示词 → 画面混乱
2. 选择视觉风格
根据文章类型选择合适风格:
| 文章类型 | 推荐风格 | seedream模板 |
|---|---|---|
| 技术分析 | 简约、科技感 | 赛博朋克、商务简约 |
| 产品评测 | 清新、现代 | 小清新、公众号封面 |
| 观点文章 | 艺术化、抽象 | 水彩插画、国潮风格 |
| 教程指南 | 清晰、直观 | 商务简约、小清新 |
| 节日主题 | 喜庆、传统 | 新年喜庆、国潮风格 |
3. 构建提示词
基础模板:
[seedream模板名称],[核心概念],[2-3个视觉元素],[色调/氛围]具体示例:
例1 - 技术文章:
- 段落核心:AI编程工具的协作模式
- 提示词:
赛博朋克,主题:人机协作,未来感办公场景,蓝紫色调
例2 - 产品评测:
- 段落核心:工具的简洁设计
- 提示词:
商务简约,主题:极简设计,几何图形,留白,黑白灰
例3 - 观点文章:
- 段落核心:深度思考
- 提示词:
水彩插画,主题:思考,抽象脑图,冷静色调
重要章节识别
需要配图的章节:
- ✅ 文章开头 - 奠定视觉基调
- ✅ 核心观点段落 - 强化记忆
- ✅ 转折或对比部分 - 视觉辅助理解
- ✅ 总结段落 - 呼应开头(可选)
不需要配图的章节:
- ❌ 过渡性段落
- ❌ 引用/数据列举
- ❌ 纯案例说明
常见问题
Q: 一篇文章配几张图合适?
A: 1500字以内 2-3张,3000字左右 3-5张。过多会干扰阅读节奏。
Q: 如何保证图片风格统一?
A: 全文使用同一个seedream模板,只改变主题关键词。
Q: 图片生成失败怎么办?
A: 继续完成文章,不要因为图片中断写作流程。文章质量优先于配图。
AI 写作套路清单(tropes.md)
来源:tropes.fyi by ossama.is
用途:写作时自查,避免 AI 味过重。任何单个套路偶尔出现没问题,问题是多个套路叠加或同一套路反复使用。
---
用词层面
"Quietly" 等魔法副词
滥用 "quietly"、"deeply"、"fundamentally"、"remarkably"、"arguably" 来制造假深刻。
"Delve" 家族
"delve"、"certainly"、"utilize"、"leverage"(动词)、"robust"、"streamline"、"harness" — 典型 AI 高频词。
"Tapestry" 和 "Landscape"
用华丽名词替代简单表达。还有 "paradigm"、"synergy"、"ecosystem"、"framework"。
"Serves As" 替代 "Is"
用 "serves as"、"stands as"、"marks"、"represents" 替代简单的 "是"。AI 因为重复惩罚而倾向用更花哨的表达。
---
句式层面
否定对比句(最常见的 AI 写作特征)
"不是X,而是Y" / "It's not X — it's Y"。一篇文章里用一次可以,十次就是侮辱读者。
- 变体:跨句否定重构 "问题不在于X。问题在于Y。"
"不是X。不是Y。而是Z。"
戏剧性倒计时,否定两个选项再揭示答案,制造假紧张感。
"结果呢?毁灭性的。"
自问自答的修辞问题,没人问的问题自己回答制造戏剧效果。
排比滥用(Anaphora Abuse)
连续多句用相同开头:"他们认为...他们认为...他们认为..."
三段式滥用(Tricolon Abuse)
三连并列用一次优雅,连续三组三连就是模式识别失败。
"值得注意的是"
无意义的过渡词。还有 "重要的是"、"有趣的是"、"显然"。
浅表分析尾缀
句尾加 "-ing" 分词短语注入空洞分析:"highlighting its importance"、"reflecting broader trends"。
假范围
"从X到Y" 但 X 和 Y 根本不在同一个尺度上。"从创新到文化转型" — 中间是什么?什么都没有。
---
段落层面
碎片式短句
过度使用极短句作为独立段落制造假强调。"他发表了这个。公开地。在一本书里。作为一名牧师。" 没有正常人这样写初稿。
穿着风衣的列表
本质是列表但伪装成连续散文。"第一个要点是...第二个要点是...第三个要点是..."
---
语气层面
"关键来了"
假悬念过渡词,承诺揭秘但内容根本不需要铺垫。还有 "关键在于"、"有意思的地方在于"。
"你可以把它想象成..."
居高临下的类比。AI 默认进入教学模式,假设读者什么都不懂。经常产出比原始概念更难理解的类比。
"想象一个世界..."
经典 AI 未来主义开场。
假脆弱
模拟自我意识或坦诚,实际是表演性的。真正的脆弱是具体的、令人不适的;AI 的脆弱是光鲜的、零风险的。
"真相很简单"
断言某事显而易见,而不是去证明它。如果你需要告诉读者你的观点很清楚,那它很可能不清楚。
宏大叙事通胀
一切都是史上最重要的事。一篇关于 API 定价的博文变成了关于文明命运的沉思。
"让我们来拆解一下"
教学语气,假设读者需要手把手教。还有 "让我们来分析"、"让我们深入探讨"。
模糊归因
"专家认为..."、"行业报告显示..." — 没有具名来源就不是来源。
自造概念标签
造出听起来很分析但没有根据的复合标签:"监督悖论"、"加速陷阱"、"工作负荷蔓延"。
---
格式层面
破折号上瘾
正常作者一篇文章用 2-3 个破折号;AI 用 20+。
粗体开头列表
每个要点都以粗体短语开头。几乎没有人手写时这样格式化列表。
- 避免:"安全性:基于环境的配置..."
- 避免:"性能:惰性加载..."
Unicode 装饰
使用 → 箭头、弯引号等标准键盘无法直接打出的特殊字符。
---
结构层面
分形摘要
"我要告诉你什么;我正在告诉你什么;我刚才告诉了你什么" — 在文档的每个层级都重复。
死隐喻
抓住一个隐喻反复用到死。人类作者引入隐喻、使用、然后继续前进。AI 会重复同一个隐喻 5-10 次。
历史类比堆砌
快速列举历史公司或技术革命来建立假权威。"Apple 没有做 Uber。Facebook 没有做 Spotify。Stripe 没有做 Shopify。"
单点稀释
一个论点用十种不同方式重复。800 字的论证膨胀到 4000 字的循环重复。
路标式结论
用 "总之"、"综上所述"、"总结一下" 明确宣布结论。好的写作不需要告诉读者它在收尾。
"尽管面临挑战..."
刻板公式:承认问题 → 立即否定 → 乐观结论。"尽管面临这些挑战,该项目继续蓬勃发展。"
---
核心原则
偶尔使用任何一个套路都没问题。问题在于多个套路叠加出现,或同一套路反复使用。像人一样写作:多变、不完美、具体。
乔木写作风格参考
注意:这个文件会随着乔帮主的修改自动积累规则。
使用 scripts/extract-style-rules.sh <初稿> <修改版> 提取新规则并追加到本文件末尾。语言特质
- 口语化、对话感强,像和读者面对面聊天
- 善用生活化类比解释复杂概念
- 在专业性和可读性之间自然平衡
表达习惯
- 短段落,多留白,视觉舒适
- 重要观点用加粗突出
- 频繁用设问和"你"来制造互动感
- 要用中文逗号(,)不要加dash破折号
- 不要用"不是","而是"这种AI感表达
内容层次
- 不满足于表面解释,会延伸到更深的思考
- 善于在不同领域间建立联系(技术→生活→认知)
- 既讲"是什么",也讲"为什么重要"
风格调性
- 真诚、不装、承认自己的困惑
- 专业但不掉书袋,数据和案例支撑观点
- 有洞察力,能给读者"原来如此"的感觉
AI 写作反模式(Anti-Tropes)
详细清单见同目录 tropes.md,写完文章后必须自查- 禁止 "不是X,而是Y" 句式(偶尔一次可以,多次绝不允许)
- 禁止破折号泛滥(全文不超过 3 个)
- 禁止每个列表项都粗体开头
- 禁止 "让我们来拆解"、"关键在于"、"想象一个世界" 等教学腔
- 禁止用 "总之"、"综上所述" 收尾
- 禁止反复总结同一个观点(单点稀释)
- 禁止 "delve"、"landscape"、"tapestry"、"robust"、"leverage" 等 AI 高频词
- 禁止碎片式短句独立成段制造假强调
---
自动积累的规则(2026-03-25)
规则 1:小节数量克制,后半段尽量不分节
- 现象:AI 倾向把每一个视角转换都单独立一个 H2 小节(「我看到这段话时,第一反应是不对劲」「但这个观点也有它的边界」「一个值得留的问题」),全文出现 4 个小节
- 修改:乔帮主删掉后三个小节标题,把自我感受、反例、结尾问题全部连为流动散文,只保留 2 个小节
- 原则:一篇 1000 字左右的文章,小节不超过 2-3 个。自我感受、转折、结尾这类过渡段落,不要单独立标题,直接写进正文流。小节标题是给读者提供「内容地图」的,过多会让文章碎片化,失去散文的连贯呼吸感
规则 2:相邻短句用逗号连接,减少人为断句
- 现象:AI 把语义连贯的两句话拆成两个独立句(「我的内省为零。越少越好。」「他不是在炫耀。他是在描述…」)
- 修改:合并为一句(「我的内省为零,越少越好。」「他不是在炫耀,他是在描述…」)
- 原则:语义上属于同一口气的表达,用逗号而不是句号。过多的短句断开会制造「碎片式强调」的 AI 感,实际上削弱了节奏
规则 3:删掉「老实说」「说实话」等自我标注的口头语
- 现象:「老实说,我第一次读到这段对话,感觉有点被冒犯」
- 修改:「说实话,第一次读到这段对话,感觉有点诧异」(进一步简化为「说实话,第一次…」,去掉「我」)
- 原则:「老实说」「坦白讲」这类开头是 AI 的假真诚信号,直接切入感受更自然。另:「被冒犯」语气过强,「诧异」更符合乔木风格的克制
规则 4:去掉文末的来源注释行
- 现象:文末有「原始素材来自 David Senra 在 Founders Podcast 对 Marc Andreessen 的访谈,2026年3月。」
- 修改:直接删除
- 原则:公众号文章结尾不需要学术引用式的来源注释。如果要标注来源,在正文中自然带出即可(「David Senra 在 Founders Podcast 里和 Marc 聊到…」),结尾的注释行打断了文章的收尾气势
---
自动积累的规则(2026-03-25 第二次)
规则 5:评论/观点类文章,H2 节标题清零
- 现象:AI 给1200字的评论文章设了两个 H2 节(「但踩过坑才是真的」「真正让我停下来的问题」)
- 修改:两个节标题全部删除,整篇无任何 H2,内容直接流动到底
- 原则:上次规则1是「最多2-3个节」,这次更进一步——评论、观点、解读类文章,默认零节标题。节标题适用于教程、清单、多主题并列的长文;一条主线贯穿的文章,节标题只会打断读者的沉浸感
规则 6:加粗句独立成段,不和下一句同处一段
- 现象:「上下文窗口不是内存,塞得越多,模型注意力越分散,答案越差。 一个 Agent 同时要理解…」(加粗句和普通句挤在同一段)
- 修改:加粗句单独成段,下一句另起一段
- 原则:加粗句是视觉焦点,周围需要留白才能让读者停下来。和其他句子贴在一起,加粗的强调效果会被稀释
规则 7:关键定义/核心观点用引用块(>)呈现
- 现象:AI 只用了加粗来突出核心定义句
- 修改:改成
> **定义句**的引用块格式 - 原则:全文最核心的那一句定义或观点,用引用块而不只是加粗。引用块在视觉上会形成独立区域,读者扫读时不会错过
规则 8:冒号引出的长内容,冒号后另起段落
- 现象:「最后跑通的设计是:把 SGLang 文档按功能边界…汇总答案。」(冒号和内容在同一段)
- 修改:「最后跑通的设计是:\n\n把 SGLang 文档…」(冒号后空行另起)
- 原则:冒号后跟着超过一句话的展开内容,要另起段落。冒号+长段堆在一行,视觉上压迫感强,读起来喘不过气
规则 9:三条以上并列经验,用列表代替分号连接
- 现象:「这三条经验她总结得很实在:信息给 Agent 要精不要多;复杂系统…;所有知识…;路由和约束…」(四条用分号连成一段)
- 修改:改成三条 bullet list,且把相关的第三四条合并成一条
- 原则:并列经验超过三条,用列表。同时,「她总结得」这类归因性短语可以删掉,直接说「这三条经验很实在:」更干净
规则 10:情感/反应类表达,优先用精炼词而非口语展开
- 现象:「这个吐槽说到我心里了」「这个问题戳到了我」
- 修改:「这个吐槽深得我心」「这个问题切中肯綮」
- 原则:表达共鸣或触动时,四字词(深得我心、切中肯綮、深有同感)比口语化解释更有力量,也不会产生 AI 味的「假真诚」感
---
具体示例
好的例子:
你有没有想过,为什么有些工具你用得越久越顺手,有些却总觉得别扭?
这其实和工具的"设计哲学"有关。就像你习惯用筷子吃饭,突然让你改用叉子,虽然也能吃,但总觉得少了点什么。
**好的工具设计,应该让你感觉不到它的存在**。这才是真正的"好品味"。要避免的表达:
工具的可用性不是取决于功能的多少,而是取决于设计的优劣。(太AI,有"不是...而是..."句式)
众所周知,好的设计应该invisible。(掉书袋,用英文装逼)
我们认为工具设计应该注重用户体验——毕竟,这才是最重要的。(空洞,没有具体例子)#!/bin/bash
# extract-style-rules.sh
# 用法:./extract-style-rules.sh <AI初稿文件> <人工修改后文件>
# 功能:diff 两版,提取「乔帮主改了什么」,追加到 writing-style.md
set -e
DRAFT="$1"
REVISED="$2"
STYLE_FILE="$(dirname "$0")/../references/writing-style.md"
if [[ -z "$DRAFT" || -z "$REVISED" ]]; then
echo "用法: $0 <AI初稿.md> <人工修改后.md>"
exit 1
fi
if [[ ! -f "$DRAFT" ]]; then
echo "错误:找不到初稿文件 $DRAFT"
exit 1
fi
if [[ ! -f "$REVISED" ]]; then
echo "错误:找不到修改后文件 $REVISED"
exit 1
fi
echo "======================================"
echo "乔木写作风格 Self-Improving 提取器"
echo "======================================"
echo ""
echo "📄 初稿:$DRAFT"
echo "✏️ 修改后:$REVISED"
echo ""
echo "--- Diff 内容 ---"
diff --unified=2 "$DRAFT" "$REVISED" || true
echo ""
echo "--- 请将以下 prompt 发给 Claude,让它提取规则 ---"
echo ""
DIFF_CONTENT=$(diff --unified=2 "$DRAFT" "$REVISED" || true)
DATE=$(date '+%Y-%m-%d')
cat <<PROMPT
你是乔木写作风格规则提取器。
我给你 AI 写的初稿和我修改后的版本之间的 diff,请分析:
1. 我删掉了什么句式/用词
2. 我加入了什么新的表达
3. 我调整了哪些结构
4. 我改变了哪些语气
然后提取出 **可复用的写作规则**,格式如下:
\`\`\`
## 自动积累的规则(${DATE})
### 规则 N:[规则标题]
- **现象**:AI 写了什么(坏的)
- **修改**:乔帮主改成了什么(好的)
- **原则**:从这次修改提炼的通用规则
\`\`\`
只提取真正有价值的规则,不要凑数。如果某个改动是偶然的,不需要变成规则。
Diff 内容:
\`\`\`diff
${DIFF_CONTENT}
\`\`\`
提取完规则后,我会手动决定哪些规则值得追加到 writing-style.md。
PROMPT