--- name: eva-tweet description: Write launch/announcement tweets in Vedant's style — terse dev-tool shipping posts built from a one-line hook, an optional positioning line, an arrow bullet list of capabilities, and a punchy close. Use whenever drafting or editing a tweet, X post, thread, or launch/changelog post announcing a feature, release, version bump, or experiment — even if he doesn't say "in my voice". --- # Vedant's tweet voice These are **dev-tool shipping posts**. The reader is another engineer scrolling fast. The tweet's job is to state what now exists and what it can do — nothing else. No selling, no story, no thread of context. The whole style is one idea: **capability lists do the persuading**. You never write that something is fast or powerful; you write `83ns update dispatch` and let the reader conclude it. This is a **written** voice and it is not the same as [[vedant-voice]], which is spoken, warm, and story-shaped (before→now→why). Do not import that structure here. Tweets are flat, clipped, and declarative. ## The shape Almost every post is the same four blocks, separated by blank lines. Blocks 2 and 4 are optional. ``` 1. Hook — what now exists, one line 2. Positioning — what it is, one fragment (no verb needed) 3. Arrow list — 3–5 capabilities, each prefixed → 4. Close — the goal, the payoff, or a fragment triad ``` Worked example: ``` Introducing A built-in component for Native SDK → Real shell on a PTY → Powered by libghostty-vt → Selection, scrollback + truecolor → Record sessions, replay them offline Give your software factory or agent orchestrator a terminal ``` Short posts drop straight to blocks 1–2, or 1 alone: ``` portless v0.15.3 is out HTTPS from WSL now just works in Windows browsers ``` ## Block 1 — the hook One line. It names the thing and the fact that it exists now. Pick the opener that matches what actually happened: - `Introducing X` — a genuinely new product or surface - `New experiment: X` — early, unproven, explicitly a punt - `Now available: X` — a feature landing in something that already shipped - `X now ` — an existing thing gained a capability ("Native SDK now renders CJK") - `You can now ` — framed from the user's side - `X v0.15.3 is out` — a version bump Never `We're excited to announce`. Never `🚀`. Never a question as the hook. ## Block 2 — positioning One fragment, no full sentence needed, no period required. It answers "what _is_ this" for someone who's never heard of it. - `A TypeScript-to-native compiler` - `A built-in component for Native SDK` - `agent-browser is now a browser agent.` If the hook already made it obvious, cut this block. ## Block 3 — the arrow list The core move. `→ ` then a terse capability. Rules: - **3–5 items.** Six is too many, two isn't a list. - **No trailing punctuation.** Ever. - **Fragments, not sentences.** `→ Type checked by tsc`, not `→ It is type checked by tsc`. - **Sentence case**, except where a lowercase project name or `all-lowercase enumeration` is natural: `→ inputs, trees, charts, dialogs`. - **Mix the register freely** — a list can hold a technical spec, a benefit, and a get-out clause side by side: `→ 83ns update dispatch` / `→ Real TS: Classes, generics, try/catch` / `→ No Zig required / eject to Zig anytime`. - **Lead with what's most surprising**, not what's most fundamental. Some items are literal commands or invocations rather than prose — that's fine and common: `→ One-shot: agent-browser chat "open google, search for dogs"`. ## Block 4 — the close One line, optional. It's either: - **the goal**, stated flatly — `Goal: compile existing TS/JS with no code changes` - **the payoff, imperative** — `Give your software factory or agent orchestrator a terminal` - **a fragment triad** — three clipped fragments, usually two negations then the positive: ``` No webview. No DOM. Just markup + TypeScript. ``` - **a benefit line with numbers** — `For agents: half the turns, half the cost, half the LOC` Never a call to action. No "check it out", no "link below", no "let me know what you think". ## Code and commands CLI goes bare on its own line — no backticks, no code fences, no indentation. Twitter renders them as literal characters, so they add noise. ``` agent-browser a11y ``` Multi-line snippets can carry a `#` comment to mark the human step: ``` agent-browser network har start # agent browses, clicks around agent-browser network har stop ``` ## Register - **Terse. Declarative. Present tense.** Every line earns its place or gets cut. - **Concrete specifics always** — `40+ built-in components`, `83ns`, `WCAG`, `axe-core`, `v0.15.3`, `libghostty-vt`. Named dependencies are credibility. - **"just" as a minimizer** carries over from his spoken voice: `HTTPS from WSL now just works`, `Just markup + TypeScript`. - **Lowercase project names stay lowercase** — `agent-browser`, `portless`, `json-render`, `eva`. Never title-case them at the start of a line. - **Blank line between every block.** The whitespace is the layout. ## What to avoid - **No hashtags. No @-mentions. No links.** None of the reference posts use them. - **No exclamation marks.** Emoji almost never — at most one, only where something is genuinely wry. - **No adjective-selling** — "powerful", "blazing fast", "seamless", "game-changing", "revolutionary". State the spec instead. - **No hype openers** — "We're excited to", "Big news", "Thrilled to share". - **No threads by default.** One post, one shipped thing. Only thread if the user asks. - **No before→now story.** That's the spoken voice. Here you state the after and stop. ## Length Under 280 characters, and usually well under. Aim for the shortest version that still names every capability worth naming. If it doesn't fit, cut an arrow item — never compress by removing whitespace. ## How to apply Given a feature or release, ask three questions: what now exists (hook), what is it (positioning), what can it do (3–5 arrows). Write those, then decide whether a close adds anything — if not, end on the list. Strip every adjective that isn't load-bearing, then check each arrow item for a trailing period and delete it.