Przejdź do treści
Biblioteka skilli
Marketing i treści · Pisanie

x-post

/x-post

Zamienia jeden surowy pomysł w post na X: trzy haczyki, jeden szkic po humanizacji i liczenie znaków, bez publikowania.

Repozytorium
x-agent-skill ↗
Licencja
MIT
Ostatnia zmiana repozytorium
24.10.2026

Ocena i bezpieczeństwo

100/ 100Klasa: dobry
Format25 / 25
Frontmatter z nazwą i opisem, poprawna nazwa, opis do 1024 znaków, nazwa zgodna z folderem.
Odkrywalność25 / 25
Opis mówi, kiedy użyć skilla, ma sensowną długość i jest w 3. osobie.
Treść35 / 35
Co najmniej 150 słów i do 500 linii, nagłówki, listy kroków, przykłady albo kod.
Higiena15 / 15
Bez zaślepek typu TODO, bez ścieżek Windows, z licencją.
Ryzykobrak sygnałów w skanie
Pliki w paczce
4
Skrypty
2
Komentarze HTML
0
Adresy URL w SKILL.md
1
Przestarzałość

Brak sygnałów. Repozytorium zmienione 24.10.2026, bez odwołań do wycofanych modeli i API.

Licencja

MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.

Co sprawdzić przed instalacją
  • 2 skrypty w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.

Skrypty: postscore.py, xcount.py

Co robi i kiedy

Zamienia jeden surowy pomysł w post na X: trzy haczyki, jeden szkic po humanizacji i liczenie znaków, bez publikowania.

Wyzwalacze z opisu

write a post about Xtweet thisgive me a hookturn this into a post
Oryginalny opis (EN)

Turn one raw idea into an X post: three hooks off 19 formulas, scored offline, one humanized draft counted in weighted characters, ready to copy and post by hand. Use when the user says "write a post about X", "tweet this", "give me a hook", "turn this into a post", or has an idea and no first line. Free account by default (280 weighted characters, link in the first reply). Never posts.

Jak działa

  1. Before you write
  2. The loop
  3. Rules that matter
  4. Fine print
  5. Without the tools
  6. Approval gate
Sekcje z nagłówków SKILL.md, w oryginale · 143 linii, 1 138 słów
Podgląd SKILL.md
---
name: x-post
description: >-
  Turn one raw idea into an X post: three hooks off 19 formulas, scored offline,
  one humanized draft counted in weighted characters, ready to copy and post by
  hand. Use when the user says "write a post about X", "tweet this", "give me a
  hook", "turn this into a post", or has an idea and no first line. Free account
  by default (280 weighted characters, link in the first reply). Never posts.
---

# x-post

One idea in, one post out. Two tools live beside this file and both run. Use
them; do not eyeball the hook or the length. Run them from this skill's folder.

```bash
python3 xcount.py draft.txt                 # weighted length, the way X counts
python3 postscore.py draft.txt              # hook, specificity, reply pull, link, bait
python3 postscore.py --hooks hooks.txt      # rank three candidate first lines
python3 postscore.py draft.txt --split-link  # POST and FIRST REPLY blocks, link moved out
```

On Windows, where this says `python3`, use `python` (`python3` there is usually the Microsoft Store
shortcut and fails with "Python was not found"; try `py` if `python` is also missing).

## Before you write

1. Read `~/.claude/x/voice.md` (or `~/.claude/x/<handle>/voice.md`). If it does
   not exist, ask for three of the user's own posts, infer the voice, and write
   the file from `templates/voice.md`. If that template is not on disk (a by-hand
   install copies only `skills/`), write the file with these headings: Who I am on
   X (handle, what I do, who I write for, free or Premium, where the money comes
   from), How I sound (sentence length, contractions, slang, capitalisation),
   Things I never say, Proof I can use (only facts the user gave), Off-platform
   path (the one link), Never (invent a number, ask for likes).
2. Default persona: a small account on the free tier, earning off-platform
   through clients, a product or a newsletter. 280 weighted characters. Do not
   assume Premium. Premium features are documented in `references/x-rules.md`,
   not tested by the author.
3. If the idea is thin, ask one batched question: what happened, to whom, what
   did it cost or return. A post needs one specific true thing.
4. **Never invent a number.** If the draft needs a figure the user did not give,
   write `{{your number}}` and say so. `postscore.py` blocks any draft that still
   contains a `{{...}}`.

## The loop

1. **Three hooks, not one.** Choose three formulas from `hooks.json` that fit the
   idea. Different formulas, not three rewrites. Put the first lines in a file.
2. **Score them.** `python3 postscore.py --hooks hooks.txt`. Show the ranking.
   If the best is under 50, you do not have the hook yet. Get a better fact from
   the user instead of editing.
3. **Write the draft** on the winning hook. One idea. Plain words. Fits 280
   weighted characters. A link in the root post is a hard stop on a free account:
   `postscore.py` caps the score at 49 and blocks the draft.
4. **Count and score it:** `xcount.py` then `postscore.py`. Fix every flag.
5. **Humanize it:** run `/x-human` before showing anything.
6. **Print the post block.** When the draft had a link, ALWAYS print a second block
   titled FIRST REPLY containing the link, and nothing else. `--split-link` prints both.

Real output (sample draft, free account):

```
POST SCORE  93.8  STRONG   (203/280 weighted)
----------------------------------------------------------------
  HOOK         ###################.  95.0  61 weighted characters
  SPECIFICITY  #################### 100.0  9 concrete markers in 42 words
  REPLY PULL   ###############.....  75.0  question present
  LINK         #################### 100.0  no link in body
  BAIT         #################### 100.0  none
```

A draft with a link in the root post is capped and blocked (real output):

```

POST SCORE  49.0  WEAK   (141/280 weighted)
score capped at 49: link in root post
----------------------------------------------------------------
  HOOK         ###################.  95.0  52 weighted characters
  ...
BLOCKING: Link in root post. On free accounts, links in the root post were observed to cost reach (observed, not coded). Put it in the first reply.
```

The fix is to move the link out. `--split-link` prints the two blocks to hand to the user:

```
POST (link removed)
I sent 400 cold DMs in 30 days and 2 became clients.

What is the first line you send to a stranger?

FIRST REPLY
Full breakdown:
https://example.com/dm-breakdown
```

A weak draft looks like this, and `postscore.py` exits non-zero on it:

```
POST SCORE  37.1  WEAK   (161/280 weighted)
  BAIT         ....................   0.0  like/repost solicitation, "RT/like if" bait, "follow for more"
               - engagement bait ... This is also an Original Content Rewards ineligibility problem
BLOCKING: engagement bait; hashtag wall (more than 2)
```

## Rules that matter

- **Link in the first reply, never the root post.** On a free account a link in the
  root post is a hard stop (score capped at 49, draft blocked). Label it honestly:
  *observed, not coded*. The open-sourced ranking parameters contain no link penalty. Reach loss
  on link posts from non-Premium accounts was observed in March 2025 (Buffer,
  18.8M posts). It is a measurement from outside, not a coded rule.
- **ALLOW_LINK.** If the user has a reason to keep a link in the root post (say so out loud: it
  is the one thing the scorer will not let through by default), run `postscore.py draft.txt
  --allow-link`. The hard stop becomes the old warning, the score is not capped, and the other
  checks still apply. Never use it on your own initiative.
- **No bait.** "Like and repost if", "follow for more", "bookmark this" are ranking
  risks and Original Content Rewards ineligibility problems. Cut them.
- **At most one hashtag.** Zero is normal.
- **The first line works alone.** No "A thread", no "Here's why", no "Let me explain".
- **Replies are cheap to earn with a real question.** End on something answerable
  in one line. "Thoughts?" is not that.
- **Weights scale predicted probabilities, not raw counts.** Never repeat the
  "one report cancels 468 likes" line. See `references/x-algorithm.md`.

## Fine print

`postscore.py` is five local heuristics. It does not know how a post will do.
Measured on a public tweet corpus, its score did not predict which tweets beat
their account's median likes (AUC 0.45 to 0.50). Treat the number as a lint
result, never as a forecast, and say so if the user reads it as one. It never says a post is "undetectable"
or "will go viral".

## Without the tools

If you cannot run the Python tools (for example you pasted only this file), do the checks by hand and
say so. Count weighted characters yourself: 280 on a free account, a URL counts 23, CJK characters and
most emoji count 2. Then check: the first line works alone; there is a specific number or event the
user gave; no "like and repost if" or "follow for more"; no unfilled `{{placeholder}}`; at most one
hashtag; the link is in a separate first-reply block. Tell the user the score was not run.

## Approval gate

1. Show the finished text in one fenced block, ready to copy. If there is a link,
   show it in a second block titled FIRST REPLY.
2. End the message with: Reply yes to log it.
3. On "yes", append one line to `~/.claude/x/log.md` (or the handle's folder):
   date, skill, first line. That is all "yes" does.
4. Never post, like, follow, reply, DM or scroll. You write; the human posts, by
   hand, on x.com.
Pliki w paczce (4)
  • SKILL.md 7 KB
  • hooks.json 8 KB
  • postscore.py 17 KB
  • xcount.py 7 KB

Wersje

RepozytoriumWynikLicencja
Ta strona · muhammadhassan03/x-agent-skill100MIT
mickpletcher/AI-Skills100MIT
mickpletcher/AI-Skills100MIT
publora/skills100MIT
mickpletcher/AI-Skills100MIT
mayank-io/mstack100MIT
kiyeonjeon21/reframe100MIT

Migawka bazy z 28.10.2026 · wersja paczki dd2f1c6e7f27 (skrót SHA-256 całej paczki)

Pobrania w ostatnich 30 dniach: 0 · ranking

Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.

Podobne skille

  • 100li-post
    Pisze post na LinkedIn z surowego pomysłu według 21 sprawdzonych formuł haczyka, w głosie autora i bez śladów AI, z trzema haczykami i jednym pełnym szkicem.
  • 100x-thread
    Dzieli długi szkic na wątek na X, przenosząc linki na koniec, i sprawdza jakość pierwszego posta.
  • 100tweet-thread-builder
    Zamienia jeden pomysł w zwarty wątek na X: hak, jedna myśl na wpis i prowadzenie do jednego wezwania do działania.
  • 90content-start
    Zamienia jeden pomysł w tydzień treści: sprawdza, czy system zna głos autora, i kieruje dalej do właściwego formatu.
  • 90x-plan
    Układa tydzień na X: co publikować, w jakim formacie i o której godzinie oraz dziesięć kont do odpowiedzi, bez publikowania.
  • 100blog-post-writer
    Zamienia surowy materiał Nicka Nisiego w szkic wpisu blogowego jego głosem: celowo płaski szkic z faktami ze źródeł i oznaczonymi lukami.

Uwagi i zgłoszenia

Wiadomość trafi do Bartosza Sokolińskiego. Adres e-mail jest potrzebny tylko do odpowiedzi. Szczegóły w polityce prywatności.