| name | twitter-write |
| description | Write a Twitter/X post in Anuj's voice. Five modes — quote (aphoristic single line), opinion (sharp contrarian take), share (working-on/reading note with optional link), wow (surprising number plus implication), thread (3-7 tweet structured argument). Asks mode before drafting. |
twitter-write
Drafting a Twitter / X post for Anuj Sadani. Twitter is the sharpest, most compressed of all formats — every character earns its place. The sharpest contrarian-edge register, even more compressed than LinkedIn.
Step 1 — Load context (mandatory)
Read these files:
shared/voice-rules.md
shared/voice-samples.md
shared/pet-peeves.md
shared/topic-modes.md
shared/platform-styles.md
Step 2 — Ask mode
Ask the user ONCE:
"Mode? quote (single ≤280-char aphoristic line) / opinion (sharp contrarian take, single tweet or short thread) / share (working-on or reading note, optional link) / wow (surprising number plus implication) / thread (3-7 tweet structured argument)"
Wait for the answer. Default to opinion if no response.
Step 3 — Classify topic mode + apply platform style profile
Apply shared/topic-modes.md.
Then apply the twitter/x row from shared/platform-styles.md: technical depth 1–2 (code only if a single line carries the whole point), headline aggressiveness 4 (punchy/aphoristic hook, never engagement-bait), density 1 (atomic, one idea). Thread mode is the exception: a 3–7 tweet thread tolerates technical depth ~3 and density ~3, so it can carry one explained snippet and a structured argument. Honor the precedence rules in platform-styles.md — voice-rules.md/pet-peeves.md are absolute, and topic mode can raise (never lower) substance (e.g., a CVE still needs its specifics even in a single tweet).
Step 4 — Draft by mode
Mode: quote
- One line. ≤280 characters.
- Aphoristic, dichotomy, or observation-flip cadence. See
shared/voice-samples.md.
- No hashtags. No URL. No CTA.
- Examples to calibrate against: "Same logo. Same price. Different soul." / "Evals measure what you remembered to test. Production measures what you forgot."
Mode: opinion
- One tweet (≤280) if the take fits. Otherwise a 2-tweet mini-thread.
- Lead with the contrarian observation. Land with the implication.
- No hashtags. No CTA. No "Hot take:" framing — show the take, don't announce it.
Mode: share
- One tweet (≤280).
- Structure: brief context (what you're working on / reading / encountered) + your one-line take + optional URL at the end.
- The take is the value. The link is the reference.
- Example shape: "Spent a week building agents on top of . The thing nobody tells you: . "
Mode: wow
- One tweet (≤280).
- A specific number or finding that flips an assumption, plus the implication for the reader.
- Cite the source if external (paper, product, benchmark). No source needed if it's your own measurement.
- Example shape: "Switched from to . Latency dropped 47% at p99. The interesting part: cost per token went up 12% but total spend went down. ."
Mode: thread
- 3-7 tweets numbered
1/, 2/, 3/ etc. Final tweet has no number (signals end) OR uses /end.
- Tweet 1 is the hook — must work as a standalone tweet too (in case nobody clicks "see more").
- Each subsequent tweet is one idea. No tweet exceeds 280 characters.
- Final tweet: crisp takeaway or callback to the hook. No "RT if you agree" or follow CTA.
Step 5 — Voice constraints (all modes)
- First person. "I" — owned opinions.
- Emoji: follow the Emoji Control section in
shared/voice-rules.md. Default level is low — most tweets should have zero emoji. If the user says "use medium emoji" / "high emoji" / "no emoji" override accordingly. Per the per-format ceiling: max 1 emoji per tweet even at medium. Never an opening emoji on tweet 1 of a thread.
- No hashtags in modes quote / opinion / wow / thread. In
share mode, max 1 hashtag, only if it's actually used by a community to find the topic (e.g., #defcon).
- No
@ mentions unless the post is directly addressing or crediting a specific person, and you have their actual handle.
- No CTA. Never "RT if...", "Follow for more...", "Like if you agree."
- Em-dash hyphenated-pairs like "production-grounded" are fine. Em-dashes as sentence joiners are not.
Step 6 — Pre-delivery checks
- Run the regex sweep from
shared/pet-peeves.md. Any hit → rewrite.
- Confirm: every tweet is ≤280 characters. Count carefully.
- Confirm: no engagement-bait CTA. No "Hot take:" preamble. No "Unpopular opinion:" preamble.
- Confirm: thread numbering is consistent if mode is
thread.
- Confirm: style profile applied — depth, headline, and density match the twitter/x row in
shared/platform-styles.md (thread mode uses the threads exception; topic-mode overrides may raise depth).
Step 7 — Save and deliver
Save to file. Derive a kebab-case topic slug from the user's topic. Get today's date in YYYY-MM-DD form. Save the tweet (or thread) to:
./drafts/<YYYY-MM-DD>-<topic-slug>/twitter.md
If the file already exists, suffix with -v2, -v3, etc. Create directories as needed.
Also print in chat.
For single-tweet modes (quote / opinion-single / share / wow):
─── TWEET ───
<tweet body>
─── ALTERNATE ───
<a different angle for the same observation>
─── META ───
characters: <N>/280
mode: <quote | opinion | share | wow>
topic mode: <security | architecture-agents | leadership | cost-infra>
emoji level: <none | low | medium | high>
saved to: <path>
For thread mode:
─── THREAD ───
1/ <tweet 1 — hook that stands alone>
2/ <tweet 2>
3/ <tweet 3>
<...>
<last tweet — crisp takeaway or callback>
─── ALTERNATE HOOK ───
<one alternate opener for tweet 1>
─── META ───
tweets: <N>
character counts: <comma-separated list>
mode: thread
topic mode: <security | architecture-agents | leadership | cost-infra>
emoji level: <none | low | medium | high>
saved to: <path>
The file is for review and manual copy into X. Do not auto-post.