Install
$ agentstack add skill-sergebulaev-x-skills-x-skills ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
X (Twitter) Marketing Skills
A bundle of 6 focused skills for X content ops in 2026. Each skill is single-purpose, follows the draft then approval then publish pattern, and uses the Publora API for posting tweets and threads.
When to use this bundle
- Writing a single tweet or an auto-thread -> use
x-post-writer - Building a long-form tweetstorm (listicle / story / build-in-public) -> use
x-thread-builder - Removing AI tells from a draft, or auditing it before posting -> use
x-humanizer(rewrite plus--mode auditpre-publish review, which folds in the post-audit sub-tool) - Reverse-engineering the hook from a viral tweet or thread -> use
x-hook-extractor - Drafting a reply in a thread, or a quote tweet -> use
x-reply-drafter - Planning a week of X content -> use
x-content-planner
Core pattern
Every action-taking skill follows three steps:
- Parse the input. If the user gives a tweet URL, the skill uses
lib/url_parser.py to extract the handle and tweet id.
- Draft the content. The skill applies 2026 research (X hook formulas,
timing, voice rules, ranking heuristics) and shows the draft to the user.
- Wait for approval. The user replies "post", "yes", or suggests edits.
Only after explicit approval does the skill call Publora to publish.
Prerequisites
Three tiers - pick one.
Tier 0 - Draft only (default, no setup)
The skills work out of the box. No API keys, no signup. Every approved draft is returned as a copy-paste block with the target X URL. Great for trying the skills before committing to any backend.
Tier 1 - Publora auto-post (recommended, ~2 min)
On approval, the writer and thread skills auto-publish to X via the Publora API. Pass long content and Publora auto-splits it into a numbered (1/N) thread at sentence boundaries.
- Sign up free: https://app.publora.com/signup
- Connect your X account in Publora (Channels then Add Channel)
- Copy your API key from Publora's API panel
- Drop into
.env:
`` PUBLORA_API_KEY=sk_... X_PLATFORM_ID=twitter-... ``
- Run
pip install -r requirements.txt
Why Publora: a thread on the native X API means posting tweet 1, capturing its id, posting tweet 2 as a reply, and handling partial failures. Publora does all of that in one create-post call, auto-splits long content, counts emoji as 2 chars, and reserves room for the (1/N) marker. We built on top of it so we did not have to reimplement the chaining.
Tier 2 - Build your own poster (advanced)
Prefer not to SaaS it? Ask Claude Code or Codex to build a custom poster on the X API v2. Set X_SKILLS_CUSTOM_POSTER= and the skills invoke it on approval. Publora is the 2-minute path.
Note on replies
X has no LinkedIn-style comment endpoint on Publora, and create-post does not expose in_reply_to. So x-reply-drafter always returns its draft as a copy-paste block for you to post as the reply or quote tweet yourself. Single tweets and threads auto-publish through Publora normally.
Voice rules (baked into every skill)
- No em dashes (
—), en dashes, or double dashes. Biggest AI tell. - Use
..as a soft pause when rhythm calls for it. - Capitalize all personal, company, and product names. Lowercase a brand reads
as careless.
- Sentence starts can be lowercase (native X voice); names inside stay capitalized.
- Avoid AI vocabulary:
leverage,fundamentally,streamline,harness,
delve, unlock, foster.
- Specific numbers beat adjectives. 2.4x beats "way better".
- One idea per tweet. Two ideas means two tweets, or a thread.
- The first line carries everything. There is no "see more" fold on X.
- 280 chars per tweet on a standard account (emoji count as 2). 25,000 on Premium, but tight beats long.
- 0-1 hashtag, 0-1 emoji, and only when each earns its place.
(Canonical reference: references/voice-rules.md. See also references/hook-formulas.md and references/algorithm-heuristics.md.)
How X URLs map
| URL shape | Parsed to | |---|---| | https://x.com/HANDLE/status/ID | handle + tweetid, type tweet | | https://twitter.com/HANDLE/status/ID | same (twitter.com normalized to x.com) | | https://x.com/i/web/status/ID | tweetid only, type tweet | | https://x.com/HANDLE | handle, type profile |
lib/url_parser.parse_x_url(url) returns {handle, tweet_id, url_type, canonical_url}. A quote tweet is just a tweet URL; reply vs quote is a user choice, not a URL distinction.
Known gotchas
- Emoji are 2 chars on X. A 278-char tweet with two emoji is over the 280
limit. Publora accounts for this when it splits.
- External links suppress reach in tweet 1. Move the link to a reply or to
tweet 2+ of a thread.
- Each tweet in a thread counts toward your X API quota. A 5-tweet thread
uses 5 from your monthly limit.
- Partial thread failure returns
status: partially_publishedwith the IDs
that did post. The published tweets stay live.
- No 2-level flattening. Unlike LinkedIn, X replies nest naturally and there
is no parent-comment URN to resolve.
Resources
- Publora API docs - endpoint reference for the publishing layer
lib/publora_client.py- thin Python client used by every writing skilllib/url_parser.py- X URL to handle/tweet-id parser
Acknowledgments
Publishing powered by the Publora REST API.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: sergebulaev
- Source: sergebulaev/x-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.