一键导入
scroll-x
Extract posts from X.com feed via Libretto workflow, then analyze for comment-worthy and generally interesting content
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Extract posts from X.com feed via Libretto workflow, then analyze for comment-worthy and generally interesting content
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Scroll Reddit feed for commenting opportunities, generally interesting posts, and notification summaries
Extract posts from LinkedIn feed via Libretto workflow, then analyze for comment-worthy and generally interesting content
| name | Scroll X |
| description | Extract posts from X.com feed via Libretto workflow, then analyze for comment-worthy and generally interesting content |
Runs the Libretto workflow to extract posts from X.com, then analyzes the results for:
Always present comment-worthy posts first.
[skill:scroll-x] [target posts]
Default target: 50 posts
Run the extraction workflow headlessly with the saved auth profile:
libretto run ./workflows/scroll-x.ts --headless --auth-profile x.com --params '{"targetPosts": 50}'
If the user specified a custom target count, pass it instead:
libretto run ./workflows/scroll-x.ts --headless --auth-profile x.com --params '{"targetPosts": 80}'
If the workflow fails with an auth error, the profile may have expired. Re-login:
libretto open https://x.com --session login-x
# Log in manually...
libretto save x.com --session login-x
libretto close --session login-x
Then re-run the workflow.
After the workflow completes, read the output file and present a two-part analysis.
Read x_summary_history.json from the project root — if it doesn't exist, start with an empty array. Filter out any posts whose IDs appear in the history.
If there are no new posts, tell the user: "No new X posts since last summary."
Read profile.md from the project root to understand what topics the user cares about, what they're trying to grow, and what their engagement style is. Use this to judge which posts are comment-worthy vs. interesting vs. skippable.
link field from the extracted JSON as the post link.externalLinks is non-empty, include them as supplementary links.Include posts where the user has a real angle worth adding.
Be selective. Quality over quantity. 0-6 posts is normal.
For each such post, explain:
Do not draft the full comment unless explicitly asked.
Include posts that align with the user's broader interests even if they are not obvious commenting opportunities.
Always present comment-worthy posts first.
Use this exact format:
## Good posts to comment on
**<Short title>** — <Why this is relevant to comment on>
> *"<Relevant snippet from the post>"* — **<Author>**
> **Why comment:** <1 sentence>
> **Angle:** <1 sentence describing the helpful angle to take>
> **Post:** [link](<exact link field from JSON>)
> **Supplementary:** [link 1](<url>), [link 2](<url>)
If there are no supplementary links, omit the Supplementary line.
If there are none, say:
## Good posts to comment on
No especially strong X commenting opportunities this run.
Use this exact format:
## Interesting generally
**<Short title>** — <Why this is interesting>
> *"<Relevant snippet from the post>"* — **<Author>**
> **Post:** [link](<exact link field from JSON>)
> **Supplementary:** [link 1](<url>), [link 2](<url>)
If there are no supplementary links, omit the Supplementary line.
After generating the summary, save the IDs of all newly surfaced posts back to x_summary_history.json so they are not shown again next run.
Each post in the output file:
{
"id": "2016927763652055300",
"author": "Display Name",
"handle": "username",
"text": "Post content (truncated to 1000 chars)",
"link": "https://x.com/username/status/2016927763652055300",
"time": "2026-01-29T17:33:46.000Z",
"externalLinks": ["https://example.com/blog-post"]
}
libretto open https://x.com --session login && libretto save x.com --session loginx_summary_history.json to start fresh