x-posting
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseX Posting Workflow
X/Twitter 内容发布工作流
End-to-end workflow for creating, approving, and scheduling X/Twitter posts from OpenEd content.
从OpenEd内容创建、审核并排期X/Twitter帖子的端到端工作流。
When to Use
适用场景
- Batch processing X posts from recent content
- Promoting podcast episodes or blog posts
- Scheduling a week of social content
- Any X posting that involves guest tagging
- 批量处理基于近期内容的X/Twitter帖子
- 推广播客剧集或博客文章
- 排期一周的社交内容
- 任何涉及嘉宾标记的X/Twitter帖子发布
Prerequisites
前置条件
- in
GETLATE_API_KEY.env - Connected Twitter account in getlate.dev (@OpenEdHQ)
- 在文件中配置
.envGETLATE_API_KEY - 在getlate.dev中关联Twitter账号(@OpenEdHQ)
The Workflow
工作流步骤
Step 1: Find Content
步骤1:筛选内容
Search the Master Content Database for recent/relevant content:
bash
undefined在主内容数据库中搜索近期/相关内容:
bash
undefinedFind recent podcasts
Find recent podcasts
ls "Content/Master Content Database/Podcasts/" | head -20
ls "Content/Master Content Database/Podcasts/" | head -20
Find recent blog posts
Find recent blog posts
ls "Content/Master Content Database/Blog Posts/" | head -20
Read source files to extract:
- Key insights and quotes
- Guest names
- Actual URLs (from frontmatter `url:` field)
**CRITICAL:** Never hallucinate URLs. Always pull from the source file's frontmatter.
---ls "Content/Master Content Database/Blog Posts/" | head -20
读取源文件以提取以下信息:
- 核心观点与引用
- 嘉宾姓名
- 真实URL(来自文件头的`url:`字段)
**重要提示:** 切勿虚构URL,务必从源文件的文件头中提取。
---Step 2: Find Guest X Handles
步骤2:查找嘉宾的X/Twitter账号
Before writing any post featuring a guest:
- Web search:
"[Guest Name] [Company] Twitter X account" - Verify it's the correct person (check bio)
- Note both personal handle AND company handle if applicable
Common OpenEd guest handles:
- See for previously found handles
Studio/Social_Scheduling.md - Add new handles to the reference table when found
在撰写任何包含嘉宾的帖子之前:
- 网页搜索:
"[嘉宾姓名] [公司名称] Twitter X account" - 验证账号是否为对应人员(查看简介)
- 记录个人账号及公司账号(如适用)
OpenEd常见嘉宾账号:
- 可查看中已收录的账号
Studio/Social_Scheduling.md - 找到新账号后添加至参考表
Step 3: Framework Fitting via Sub-Agents
步骤3:通过子代理匹配框架
CRITICAL: Spawn a sub-agent for EACH piece of content.
This is token-heavy but ensures quality. Each sub-agent does deep framework fitting rather than surface-level template matching.
Sub-Agent Prompt Template:
You are writing X/Twitter posts for OpenEd. Your job is DEEP FRAMEWORK FITTING - matching this concept to proven templates that amplify it.重要提示:为每一条内容启动一个子代理。
这会消耗较多token,但能确保内容质量。每个子代理会深度匹配框架,而非表面化的模板套用。
子代理提示模板:
You are writing X/Twitter posts for OpenEd. Your job is DEEP FRAMEWORK FITTING - matching this concept to proven templates that amplify it.Source Content
Source Content
[Paste the full content or key excerpts]
[Paste the full content or key excerpts]
Guest Info
Guest Info
- Name: [Guest Name]
- X Handle: @[handle]
- Company: [Company] (@[company_handle] if applicable)
- Name: [Guest Name]
- X Handle: @[handle]
- Company: [Company] (@[company_handle] if applicable)
URL (use exactly)
URL (use exactly)
[URL from frontmatter]
[URL from frontmatter]
Your Task
Your Task
Phase 1: Concept Extraction
Phase 1: Concept Extraction
Extract from this content:
- Core insight (one sentence)
- Emotional hook (what feeling does this evoke?)
- Most quotable moment
- Surprising fact or statistic
- Contrarian angle (what does this challenge?)
Extract from this content:
- Core insight (one sentence)
- Emotional hook (what feeling does this evoke?)
- Most quotable moment
- Surprising fact or statistic
- Contrarian angle (what does this challenge?)
Phase 2: Template Review
Phase 2: Template Review
Read the FULL post-structures.md file. Do not skim.
For this concept, evaluate AT LEAST these template categories:
- Commentary (quote + translation + explanation)
- Contrast Evaluation (X overrated, Y underrated)
- Paradox Hook (present contradiction)
- Comparison with percentages (numbers + question)
- Personal Story (setup → conflict → resolution)
- One Sentence Comparison
- Behavior Dichotomy
- Binary Framing Hook
- Counterintuitive Statement Hook
For each potentially fitting template:
- Name the template
- Explain WHY it might work for this concept
- Rate fit: Strong / Moderate / Weak
- Draft a quick test version
Read the FULL post-structures.md file. Do not skim.
For this concept, evaluate AT LEAST these template categories:
- Commentary (quote + translation + explanation)
- Contrast Evaluation (X overrated, Y underrated)
- Paradox Hook (present contradiction)
- Comparison with percentages (numbers + question)
- Personal Story (setup → conflict → resolution)
- One Sentence Comparison
- Behavior Dichotomy
- Binary Framing Hook
- Counterintuitive Statement Hook
For each potentially fitting template:
- Name the template
- Explain WHY it might work for this concept
- Rate fit: Strong / Moderate / Weak
- Draft a quick test version
Phase 3: Select and Write
Phase 3: Select and Write
Choose 2-3 BEST fitting templates. Write full post variations using the EXACT template structure.
Choose 2-3 BEST fitting templates. Write full post variations using the EXACT template structure.
Phase 4: Voice Validation
Phase 4: Voice Validation
For each draft, check against AI-tells:
HARD BLOCKS (reject and rewrite if present):
- Correlative constructions ("X isn't just Y - it's Z")
- Split correlatives ("It wasn't about X. It was about Y.")
- Staccato fragments ("No X. No Y. Just Z.")
- Setup phrases ("Here's the thing:", "The best part?")
- Triple adjective patterns
- Thesaurus words (utilize, leverage, comprehensive, crucial)
VOICE CHECK:
- Does this sound like a person talking or performing "good writing"?
- Is this something you'd actually text to a friend?
- Does it follow the template structure or drift into generic copy?
For each draft, check against AI-tells:
HARD BLOCKS (reject and rewrite if present):
- Correlative constructions ("X isn't just Y - it's Z")
- Split correlatives ("It wasn't about X. It was about Y.")
- Staccato fragments ("No X. No Y. Just Z.")
- Setup phrases ("Here's the thing:", "The best part?")
- Triple adjective patterns
- Thesaurus words (utilize, leverage, comprehensive, crucial)
VOICE CHECK:
- Does this sound like a person talking or performing "good writing"?
- Is this something you'd actually text to a friend?
- Does it follow the template structure or drift into generic copy?
Output Format
Output Format
For each post option:
- Template used: [Name]
- Why this template: [1-2 sentences]
- Post:
[The actual post text][link]
- Voice validation: [Pass/Fail with notes]
**Launch sub-agents in parallel** - one per content piece. They will return structured options ready for the scheduling file.
---For each post option:
- Template used: [Name]
- Why this template: [1-2 sentences]
- Post:
[The actual post text][link]
- Voice validation: [Pass/Fail with notes]
**并行启动子代理** - 每条内容对应一个子代理。它们会返回结构化的选项,可直接用于排期文件。
---Step 4: Compile Scheduling File
步骤4:整理排期文件
Collect sub-agent outputs into :
Studio/Social_Scheduling.mdmarkdown
undefined将子代理的输出收集至:
Studio/Social_Scheduling.mdmarkdown
undefinedX Post Scheduling Queue
X Post Scheduling Queue
Created: [date]
Status: Awaiting approval
Created: [date]
Status: Awaiting approval
1. [Content Title] - @[guest_handle]
1. [Content Title] - @[guest_handle]
URL: [actual URL from source]
Option A - [Template Name]:
[Post content][link]
Template reasoning: [Why this template fits]
- Approve Option A
Option B - [Template Name]:
[Post content][link]
Template reasoning: [Why this template fits]
- Approve Option B
User marks approvals with `[X]` and adds notes in `{NOTES: ...}`.
---URL: [actual URL from source]
Option A - [Template Name]:
[Post content][link]
Template reasoning: [Why this template fits]
- Approve Option A
Option B - [Template Name]:
[Post content][link]
Template reasoning: [Why this template fits]
- Approve Option B
用户通过`[X]`标记已审核通过的选项,并在`{NOTES: ...}`中添加备注。
---Step 5: Voice Validation (Final Check)
步骤5:语气验证(最终检查)
Before posting/scheduling, run final validation:
Hard Blocks:
- No correlative constructions ("X isn't just Y - it's Z")
- No split correlatives ("X wasn't about Y. It was about Z.")
- No staccato fragments ("No X. No Y. Just Z.")
- No setup phrases ("Here's the thing:", "The best part?")
Soft Checks:
- Sounds like a person, not a copywriter
- Uses actual template structure (can identify which one)
- Guest tagged correctly
- URL is real (from source file)
在发布/排期前,进行最终验证:
硬性检查项:
- 无关联结构(如"X不只是Y - 它是Z")
- 无拆分关联句(如"这与Y无关,而是与Z有关")
- 无断句碎片(如"没有X,没有Y,只有Z")
- 无引导语(如"重点是:"、"最棒的部分是?")
软性检查项:
- 语气像真人对话,而非文案撰写
- 严格遵循模板结构(可识别具体模板类型)
- 嘉宾标记正确
- URL真实(来自源文件)
Step 6: Post and Schedule via getlate.dev
步骤6:通过getlate.dev发布并排期
Post immediately:
bash
python3 agents/post_tweet.py '[tweet content]'Schedule for future:
python
import os
import requests
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path(__file__).parent.parent / ".env")
api_key = os.getenv("GETLATE_API_KEY")
base_url = "https://getlate.dev/api/v1"
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}立即发布:
bash
python3 agents/post_tweet.py '[tweet content]'排期至未来发布:
python
import os
import requests
from pathlib import Path
from dotenv import load_dotenv
load_dotenv(Path(__file__).parent.parent / ".env")
api_key = os.getenv("GETLATE_API_KEY")
base_url = "https://getlate.dev/api/v1"
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}Get account ID
Get account ID
response = requests.get(f"{base_url}/accounts", headers=headers)
accounts = response.json().get("accounts", [])
twitter_account = next((a for a in accounts if a.get("platform") == "twitter"), None)
account_id = twitter_account.get("_id")
response = requests.get(f"{base_url}/accounts", headers=headers)
accounts = response.json().get("accounts", [])
twitter_account = next((a for a in accounts if a.get("platform") == "twitter"), None)
account_id = twitter_account.get("_id")
Schedule post (9am ET = 14:00 UTC in winter)
Schedule post (9am ET = 14:00 UTC in winter)
post_data = {
"platforms": [{"platform": "twitter", "accountId": account_id}],
"content": "Your tweet content here",
"scheduledFor": "2026-01-15T14:00:00Z" # ISO 8601 format
}
response = requests.post(f"{base_url}/posts", headers=headers, json=post_data)
**Time conversion:**
- 9am ET (winter) = 14:00 UTC
- 9am ET (summer/DST) = 13:00 UTC
---post_data = {
"platforms": [{"platform": "twitter", "accountId": account_id}],
"content": "Your tweet content here",
"scheduledFor": "2026-01-15T14:00:00Z" # ISO 8601 format
}
response = requests.post(f"{base_url}/posts", headers=headers, json=post_data)
**时间转换:**
- 东部时间上午9点(冬季)= UTC时间14:00
- 东部时间上午9点(夏季/夏令时)= UTC时间13:00
---Quick Reference
快速参考
getlate.dev API
getlate.dev API
| Endpoint | Method | Purpose |
|---|---|---|
| GET | List connected accounts |
| POST | Create/schedule post |
Post payload:
json
{
"platforms": [{"platform": "twitter", "accountId": "..."}],
"content": "Tweet text",
"publishNow": true, // OR
"scheduledFor": "ISO-8601" // for scheduling
}| 端点 | 请求方法 | 用途 |
|---|---|---|
| GET | 列出关联账号 |
| POST | 创建/排期帖子 |
帖子请求体:
json
{
"platforms": [{"platform": "twitter", "accountId": "..."}],
"content": "Tweet text",
"publishNow": true, // 或
"scheduledFor": "ISO-8601" // 用于排期
}Best Posting Times (ET)
最佳发布时间(东部时间)
- 8-9am - Morning commute
- 12-1pm - Lunch break
- 7-8pm - Evening wind-down
- 8-9点 - 早高峰通勤时段
- 12-13点 - 午餐时段
- 19-20点 - 晚间休闲时段
Character Limits
字符限制
- Optimal: 70-100 characters
- Max: 280 characters
- With link: ~250 characters of text
- 最佳范围:70-100字符
- 最大值:280字符
- 包含链接时:约250字符的文本空间
Sub-Agent Required Reading
子代理必读文件
Each sub-agent MUST read these files before writing posts:
| File | Purpose | Tokens |
|---|---|---|
| 100+ template structures | ~4000 |
| Voice constraints | ~200 |
| Voice examples | ~1500 |
| Source content file | The actual content to promote | varies |
Why this matters: The quality difference between skimming templates and deeply reading them is the difference between generic AI copy and posts that actually follow proven structures.
每个子代理在撰写帖子前必须阅读以下文件:
| 文件 | 用途 | Token数量 |
|---|---|---|
| 100+种模板结构 | ~4000 |
| 语气约束 | ~200 |
| 语气示例 | ~1500 |
| 源内容文件 | 需推广的实际内容 | 视情况而定 |
重要性说明: 浅读模板与深度理解模板的区别,就是生成通用AI文案与遵循成熟结构的优质帖子的区别。
Related Skills
相关技能
- - Template library and framework fitting
text-content - - Voice validation
ai-tells - - Deeper voice guidance
ghostwriter
- - 模板库与框架匹配
text-content - - 语气验证
ai-tells - - 深度语气指导
ghostwriter
Files
相关文件
- - Single tweet posting
agents/post_tweet.py - - API testing
agents/test_tweet.py - - Current queue
Studio/Social_Scheduling.md
Last updated: 2026-01-14 (v2 - added sub-agent framework fitting)
- - 单条帖子发布工具
agents/post_tweet.py - - API测试工具
agents/test_tweet.py - - 当前排期队列
Studio/Social_Scheduling.md
最后更新:2026-01-14(v2版本 - 新增子代理框架匹配功能)