@orbitant/brain-marketing 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -64,12 +64,12 @@ Flag the following patterns as issues if found:
64
64
  - **Past tense for ongoing work**: Flag use of past tense ("construimos", "fue", "era") to describe workflows, tools, or features that are currently active.
65
65
  - **Roadmap presented as operational**: Flag if features in development or planned functionality are described as currently working. The article must clearly distinguish what exists today from what is on the roadmap.
66
66
  - **AI filler formulas**: Flag expressions like "la parte que más me interesa", "me parece especialmente relevante destacar", "no podemos dejar de mencionar". These read as AI-generated filler, not as a person writing.
67
+ - **Rhetorical questions**: Flag any rhetorical question, anywhere in the article — the hook, a transition, or the closing. It is a common AI-generated pattern, not an engagement device, and it must be restated as a declarative sentence.
67
68
 
68
69
  ### Formatting Conventions
69
70
 
70
71
  | Element | Usage |
71
72
  |---------|-------|
72
- | Rhetorical questions | Hooks, transitions, and engagement devices |
73
73
  | Blockquotes | Opening hooks, attributed quotes, external citations, pull quotes as visual reinforcement |
74
74
  | Admonitions | GitHub-flavored: `> [!IMPORTANT]`, `> [!TIP]` for callouts |
75
75
  | Bold | Key insights (scannable) |
@@ -84,7 +84,7 @@ Flag the following patterns as issues if found:
84
84
 
85
85
  Review against the following expected structure:
86
86
 
87
- 1. **Hook**: Blockquote or rhetorical question that immediately engages the reader.
87
+ 1. **Hook**: An opening line that names the pain or problem the article addresses and immediately engages the reader. A blockquote is optional, never a requirement; a rhetorical question is never acceptable.
88
88
  2. **Opening paragraph**: Establishes the topic and why it matters. Primary keyword must appear within the first 100 words.
89
89
  3. **Body (H2 sections)**:
90
90
  - Minimum 3 H2 sections.
@@ -116,21 +116,22 @@ When reviewing an article generated from a multi-participant input, check:
116
116
 
117
117
  | Field | Standard |
118
118
  |---|---|
119
- | Título SEO | 55–60 characters including spaces. Must **begin with the exact primary keyword** — not a paraphrase, the exact keyword. |
120
- | Slug | 65–70 characters including spaces. Lowercase, hyphens, no accents or special characters. Must contain the primary keyword. |
121
- | Meta descripción | 130–140 characters including spaces. Must **begin with the exact primary keyword**. |
119
+ | Título SEO | 50–56 characters including spaces. Must **begin with the exact primary keyword** — not a paraphrase, the exact keyword. |
120
+ | Slug | 65–69 characters including spaces. Lowercase, hyphens, no accents or special characters. Must **begin with the exact primary keyword**. |
121
+ | Meta descripción | 130–135 characters including spaces. Must **begin with the exact primary keyword**. |
122
122
 
123
123
  ### Keyword Distribution
124
- - Primary keyword in: H1, at least one H2, meta description (as the opening), and first 100 words of the body.
124
+ - Primary keyword in: at least one H2, the meta description (as the opening), and the first 100 words of the body. **The H1 does not need to contain it** — the H1 is the creative title, and the keyword requirement lives in the Título SEO, the Slug and the meta description.
125
125
  - Natural usage — flag any keyword stuffing.
126
126
 
127
127
  ### Links
128
- - **Internal**: 2–4 links to other Orbitant blog posts. Flag if missing or excessive.
129
- - **External**: 3–5 links to authoritative sources (MDN, official docs, GitHub, research). Flag if linking to competitors or low-authority sources.
128
+ - **Internal**: 1–2 links to other Orbitant blog posts. Flag if missing or excessive.
129
+ - **External**: 1–2 links to authoritative sources (MDN, official docs, GitHub, research). Flag if linking to competitors or low-authority sources.
130
130
  - **Anchor text**: Links must span the natural phrase in which the topic appears, not just the topic noun. Flag anchor text that is too narrow (e.g., linking only the noun when the surrounding phrase would be more natural and informative).
131
131
 
132
132
  ### Images
133
- - Alt text must be descriptive, SEO-friendly, and include the primary keyword naturally.
133
+ - A draft coming out of `blog-post-create` carries no alt text on purpose: it is written once the image exists, so do not flag its absence in a draft.
134
+ - If the article already has its image and its alt text, check that the alt text is descriptive, SEO-friendly, and includes the primary keyword naturally.
134
135
 
135
136
  ---
136
137
 
@@ -178,14 +179,14 @@ Produce feedback with these sections:
178
179
 
179
180
  ### 4. Revisión SEO
180
181
  Evaluate with checkmarks or crosses:
181
- - [ ] Título SEO: length (55–60 chars) and begins with exact primary keyword
182
- - [ ] Slug: length (65–70 chars), format correct, contains keyword
183
- - [ ] Meta descripción: length (130–140 chars), begins with exact keyword
184
- - [ ] Keyword in H1, at least one H2, first 100 words
185
- - [ ] Internal links (2–4)
186
- - [ ] External links (3–5, authoritative)
182
+ - [ ] Título SEO: length (50–56 chars) and begins with exact primary keyword
183
+ - [ ] Slug: length (65–69 chars), format correct, begins with exact keyword
184
+ - [ ] Meta descripción: length (130–135 chars), begins with exact keyword
185
+ - [ ] Keyword in at least one H2 and in the first 100 words (the H1 does not need it)
186
+ - [ ] Internal links (1–2)
187
+ - [ ] External links (1–2, authoritative)
187
188
  - [ ] Anchor text spans natural phrase (not just the noun)
188
- - [ ] Image alt text: descriptive and keyword-aware
189
+ - [ ] Image alt text, only if the image already exists: descriptive and keyword-aware
189
190
  - [ ] Cluster and category correctly assigned
190
191
 
191
192
  ### 5. Sugerencias accionables
@@ -0,0 +1,348 @@
1
+ ---
2
+ name: orbitant-x-post
3
+ description: |
4
+ Single standalone X (Twitter) post writer for Orbitant. Takes one piece of
5
+ material — a Knowledge Sharing session, an interview, a blog post just
6
+ published, a feature just shipped, a decision taken or reversed, a measurement
7
+ that surprised us, a build-in-public moment — and returns numbered variants
8
+ of the same post, three by default and two when the material holds only two
9
+ angles: different ways into the same material, ordered strongest first, each
10
+ with its weighted character count against X's 280 limit.
11
+
12
+ Activate when the user asks for a post, a tweet or a single piece for X, or
13
+ says "un post para X", "un tuit", "algo suelto para X", "esto no da para un
14
+ hilo", "tuitea esto", "algo corto para Twitter", "post this on X", "tweet
15
+ this". Also trigger when the user shares material and asks for something to
16
+ publish on X or from @WeOrbitant without asking for a thread. This skill
17
+ writes one post, never a thread: material that holds an argument needing
18
+ several posts goes to x-thread instead.
19
+ version: "1.0.0"
20
+ license: MIT
21
+ metadata:
22
+ author: orbitant
23
+ tags: marketing, x, twitter, post, social-media, content, engagement
24
+ ---
25
+
26
+ # Orbitant X Post Skill
27
+
28
+ A post on X arrives alone. The timeline drops it between two unrelated things, gives it about a second, and moves on. Nothing above it sets it up and nothing below it explains it.
29
+
30
+ So the job of a single post is **traction**: a reason for someone who was scrolling to stop. Not a summary of what happened, not an announcement that it happened. Every rule below follows from that.
31
+
32
+ This skill writes **one standalone post, never a thread**, and it delivers several variants of it so a human can pick one.
33
+
34
+ ---
35
+
36
+ ## Where this skill stops and x-thread starts
37
+
38
+ | | `x-post` (this skill) | `x-thread` |
39
+ |---|---|---|
40
+ | Shape | One post that stands alone | One argument spread across several posts |
41
+ | The material holds | One thing worth saying | A claim plus the evidence it needs |
42
+ | Output | Several variants of one post, pick one | One thread, every post ships together |
43
+
44
+ **Hand the material to `x-thread` when it holds a real argument that needs unpacking.** The signals are concrete: you cannot state the point without a "because" that itself needs a "because"; you keep wanting a second post to justify the first; the honest version needs evidence that will not fit in 280 characters. That is a thread. Say so and stop. Do not compress an argument into one post, and never deliver a post and a thread in the same answer.
45
+
46
+ `x-thread` says the same thing from the other side: material that fits in a single post ships as a single post. This skill is where that lands.
47
+
48
+ ---
49
+
50
+ ## What X imposes
51
+
52
+ Platform facts. They are not style preferences and you cannot write around them.
53
+
54
+ - **280 characters per post, hard.** A post at 281 does not post.
55
+ - **The limit is weighted, and weight 2 is the default.** Only a short allowlist of Unicode ranges weighs 1: `U+0000-U+10FF`, `U+2000-U+200D`, `U+2010-U+201F` and `U+2032-U+2037`. Latin text, Spanish accents, ñ, the line break and the ordinary punctuation you type all fall inside it and weigh 1.
56
+ - **Everything outside that allowlist weighs 2.** Emoji and CJK, and also the typographic ellipsis `…` (U+2026), which is the one that slips in unnoticed: three of them cost six characters, not three. A compound emoji — a skin tone modifier, a ZWJ sequence like `👩‍💻` — costs more than 2, so never try to budget one precisely.
57
+ - **A URL always counts as 23**, however short or long it is. X rewrites every link through its own shortener before counting it.
58
+ - **No text formatting.** X renders no markdown. `**bold**` shows up as literal asterisks, `##` as literal hashes. The line break is the only formatting tool you have.
59
+ - **The post is read with no context around it**, by people who have never heard of Orbitant.
60
+ - **Links cost reach.** A post carrying a link is distributed less than the same post without one.
61
+ - **Hashtags do nothing.** See the Hashtags section.
62
+ - **Code does not survive as text.** No monospace, and indentation is stripped. Code has to be an image.
63
+
64
+ ---
65
+
66
+ ## Input
67
+
68
+ ### Source material
69
+
70
+ Read it in full before writing anything. What you are looking for is the **anchor**: the one concrete, checkable thing a post can stand on (Step 1). It hides in a different place depending on what you were handed.
71
+
72
+ | Material | Where the anchor usually hides |
73
+ |---|---|
74
+ | **Knowledge Sharing session** | The one claim the room pushed back on. Not the agenda, not what was covered |
75
+ | **An interview with someone** | A sentence only that person could say, because of what they have lived |
76
+ | **A blog post just published** | The single finding the post is built on. This is the one kind that arrives with a public URL |
77
+ | **A feature just shipped** | What is possible now that was not possible last week. A changelog line is not a post |
78
+ | **A decision taken or reversed** | The reason and what it cost. A reversal beats a decision: saying what you stopped doing is rarer than saying what you started |
79
+ | **A measurement that surprised us** | The number and the expectation it broke. The surprise is the post, not the metric |
80
+ | **A build-in-public moment** | The unfinished state, said plainly, while it is still unfinished |
81
+ | **Something moving in the field** | What actually changed, and when. Not that the topic is hot |
82
+
83
+ No row outranks another. An interview is one row of eight, and a post built on one is not automatically better than a post built on a measurement or on a feature that shipped on Thursday.
84
+
85
+ **The table is a map, not a gate.** Material that fits none of these rows is not a refusal — plenty of good posts are a comment on something outside our own work. The requirement is the anchor, never the category. "Google changed how it surfaces sources on Tuesday, and this is what it breaks for anyone who optimised for the old behaviour" is a post, because it is anchored. "GEO is the new SEO" is a slogan, and you turn it down for the missing anchor, not for the missing row.
86
+
87
+ So when the material holds no anchor — only that something exists, that a session took place, or that a topic is being talked about — say so. There is no post in it yet, and inventing a reason to care is how an account loses the people it already has.
88
+
89
+ ### When you are handed a topic instead of material
90
+
91
+ A request can arrive as a subject rather than as something to read: "un tuit sobre los últimos movimientos de posicionamiento GEO". A subject contains no anchor, and this skill does not go looking for one.
92
+
93
+ Ask for the material, or for what the person who asked already found: the change, the date, the source, the number. One concrete fact is enough to start from. Whoever invokes the skill resolves the research; the skill writes the post.
94
+
95
+ ### Account and voice
96
+
97
+ Ask which account posts if it is not stated and the answer would change the copy. Default to the company account.
98
+
99
+ | Account | Pronoun | Self-mention | Signature |
100
+ |---|---|---|---|
101
+ | **Company** (`@WeOrbitant`) | "we" | Never — the account *is* Orbitant | None |
102
+ | **Personal** (a team member) | "I" | At most one `@WeOrbitant`, and only if the work was Orbitant's | The lived experience is the signature |
103
+
104
+ On a personal account the post must read as something that person actually did, decided or measured — first person singular. Do not write a company announcement and paste a name on it. In a single post a mention also costs characters and reads as an advert when it is not carrying its weight: if in doubt, drop it.
105
+
106
+ ### Language
107
+
108
+ **English by default** — every post, whatever language the material is in. Spanish material, English post.
109
+
110
+ Write the post in Spanish only when whoever asked for it asks for Spanish. Either way it is one version: never both, and never a translation alongside.
111
+
112
+ Material in Spanish and a post in English means anything you quote is being translated. Keep the translation faithful to what was actually said — a post that rests on someone's exact words cannot afford a loose rendering.
113
+
114
+ In a Spanish post, keep technical English terms in English: *framework*, *pipeline*, *deployment*, *token*.
115
+
116
+ ---
117
+
118
+ ## Step 1 — Find the anchor
119
+
120
+ Before writing anything, name the **anchor**: the one concrete, true, checkable thing the post stands on. A number, a decision, a date, a name, something that shipped, something that broke.
121
+
122
+ > Anchor: "The pipeline went from 22 minutes to 8 after we replaced one integration test."
123
+ >
124
+ > Anchor: "We reversed the multi-repo split three weeks after doing it."
125
+ >
126
+ > Anchor: "Kevin measured 3 to 5x more context per change under hexagonal architecture."
127
+
128
+ A post with no anchor is a slogan, and slogans do not get traction, they get scrolled past. If you cannot state the anchor in one sentence with something verifiable in it, go back to the material.
129
+
130
+ **The anchor is concrete; the subject is the idea.** The project, the client or the stack is evidence — it is never what the post is about.
131
+
132
+ ---
133
+
134
+ ## Step 2 — Find the angles
135
+
136
+ An angle is the way into the anchor: which part you lead with, who you are talking to, what the reader is left holding. One anchor supports several.
137
+
138
+ Write the angles down before writing any copy, one per variant. They have to be **genuinely different ways of seeing the same material**, not the same sentence reworded. Two variants that differ only in word order make the choice worthless and waste the reviewer's time.
139
+
140
+ Angles that work, all on the same anchor ("the pipeline went from 22 minutes to 8"):
141
+
142
+ - **The number first** — lead with the measurement and let it carry the post
143
+ - **The wrong assumption** — what everyone believes that the anchor contradicts
144
+ - **The cost** — what the old state was charging you, counted in something other than money
145
+ - **The admission** — the part where we were wrong, said without cushioning
146
+ - **The person** — someone named, doing something specific
147
+ - **The consequence** — what changes on Monday for someone who copies this
148
+
149
+ **Test:** can you say in one short line what each angle does that the others do not? If not, it is the same variant twice. Cut it and write a real one.
150
+
151
+ ---
152
+
153
+ ## Step 3 — Write the variants
154
+
155
+ ### How many
156
+
157
+ **Three by default. Two when the material honestly supports only two angles.**
158
+
159
+ Three gives the reviewer a real choice: a safe one, a sharper one, and one that takes a risk. Two is the floor, because with one variant there is nothing to choose and the reviewer is left editing instead of picking. Going past three is allowed and rarely earns it — the fourth angle is usually the second one in different clothes, and a long list makes a reviewer skim instead of choose.
160
+
161
+ Fewer variants that genuinely differ always beat more that nearly match.
162
+
163
+ ### Rules for every variant
164
+
165
+ - **A statement, never a rhetorical question.** A question invites "no" and a scroll.
166
+ - **It has to deliver value standing alone.** Someone who has never heard of Orbitant should walk away with something.
167
+ - **No link by default.** See the Links section.
168
+ - **Target 150 to 240 of the 280.** Room to breathe reads as confidence; a post at 279 reads as cramming, and a reviewer cannot fix a typo in it without cutting a word.
169
+ - **Do not open with "We", "Our" or "Orbitant" introducing themselves.** Open with the anchor. A "we" that is the subject of a finished, concrete action is not a self-introduction: "We put the repo back together three weeks later" opens with the anchor, "We are excited to share" does not. Exception: naming a teammate is encouraged, to give them credit.
170
+ - **Concrete beats clever.** A number, a measurement or a named consequence outperforms wordplay.
171
+ - **Report the weighted character count** for every variant, and treat your own number as an estimate. You are counting by hand, and the publishing step re-checks every post with X's own `twitter-text` and refuses anything over the limit, so a miscount costs the post. Leave margin instead of writing 279.
172
+ - **Plain text in the post itself.** Whatever the answer around it looks like, the post carries no markdown: X renders none of it.
173
+ - **Short lines and blank lines** are the whole formatting toolkit. Three lines of text at most.
174
+ - **Lists inside a post:** two items at most, one per line, no bullet characters. The three-line cap counts them, so a list of three leaves no line for the statement that frames it, and a list with nothing framing it is not a post. Three items or more is a thread.
175
+ - **No engagement bait.** Not "Agree?", not "What do you think?", not "Follow for more", not "Bookmark this". Traction is the post being worth stopping for, not the reader being asked to react.
176
+
177
+ ### Examples
178
+
179
+ Do:
180
+
181
+ - `The pipeline took 22 minutes. One integration test was eating 13 of them, because it started a real Postgres on every run.`
182
+ - `We split the repo in three. Three weeks later we put it back together, and we wrote down what the round trip cost us.` — a "we" that did something, not a "we" introducing itself
183
+
184
+ Don't:
185
+
186
+ - `Have you ever wondered why your CI is so slow?` — rhetorical question, invites a scroll
187
+ - `Excited to share our latest engineering insights!` — announces enthusiasm, delivers nothing
188
+ - `10 lessons we learned optimising our pipeline 🧵` — growth-hacker voice, and it is not even a thread
189
+
190
+ ---
191
+
192
+ ## Step 4 — Order them
193
+
194
+ **Number the variants and order them by your own preference, strongest first.** Not by length, and not in the order the angles occurred to you.
195
+
196
+ The order is load-bearing. Whoever reads the answer picks one of them, and the order is your recommendation: it saves them re-reading three posts to work out which one you believe in. **Variant 1 is the one you would publish if the decision were yours.** Do not lead with the safe one out of caution — if the sharp variant is the best post, it goes first.
197
+
198
+ Close with one line saying why the order is what it is, so a reviewer can argue with the reasoning and not only with the copy.
199
+
200
+ ---
201
+
202
+ ## A worked example
203
+
204
+ The four steps on real material. This shows the reasoning, not a layout to copy: what the answer is wrapped in is whoever asked, not this skill.
205
+
206
+ **Material:** a Slack thread where the team worked out why CI was slow, with the before and after numbers in it. Company account, no public URL.
207
+
208
+ **Anchor:** the pipeline went from 22 minutes to 8 after we replaced one integration test.
209
+
210
+ **Angles:** the number first / the admission / the wrong assumption. Three ways in: the measurement carrying the post on its own, what we did badly before we measured, and the belief the anchor contradicts.
211
+
212
+ **Variant 1, the number first.** 153 characters.
213
+
214
+ ```text
215
+ The pipeline took 22 minutes. One integration test was eating 13 of them, because it started a real Postgres on every run.
216
+
217
+ We mocked it. It now takes 8.
218
+ ```
219
+
220
+ **Variant 2, the admission.** 209 characters.
221
+
222
+ ```text
223
+ We spent months blaming the runner, the cache, the dependency install. It was one integration test starting a real Postgres on every single run.
224
+
225
+ Nobody had profiled it. 22 minutes down to 8 once somebody did.
226
+ ```
227
+
228
+ **Variant 3, the wrong assumption.** 168 characters.
229
+
230
+ ```text
231
+ A slow pipeline is rarely slow everywhere. Ours took 22 minutes and 13 of them lived inside one integration test.
232
+
233
+ Before you pay for faster runners, profile the suite.
234
+ ```
235
+
236
+ **Order:** variant 1 first, because 22 to 8 is the whole post and needs nothing else to land. The admission second: it earns more trust, but it asks the reader to care about us before it pays out. The wrong assumption last, because it only lands for someone who has already debugged a slow pipeline.
237
+
238
+ **Image:** none. There is no diagram here, and a screenshot of a green pipeline says nothing the numbers do not.
239
+
240
+ ---
241
+
242
+ ## Naming a person
243
+
244
+ The sharpest single post available is one that names a real person and says what they did *not* say or do. It is also the easiest to get wrong, and the failure is not subtle: the post reads as a reproach, and the account pays for it long after the post is gone.
245
+
246
+ The line is where the sentence puts its subject. **The subject is the idea. The person is how you got to it.**
247
+
248
+ > Do: `We asked [Name] how they measure the impact of agents. They answered with latency and with cost, and not once with "productivity". That absence is the most honest answer we have heard this year.`
249
+ >
250
+ > Don't: `[Name] had no answer when we asked them about productivity.`
251
+
252
+ The first one is about how a practitioner thinks, and the person comes out of it well. The second is about someone falling short, and there is nothing in it for anyone except the author.
253
+
254
+ Three checks before writing one of these:
255
+
256
+ - **The absence is real and you can point at it.** You have the recording, the transcript or the thread. Do not infer a silence from a summary, and never from memory.
257
+ - **You would send the post to that person before publishing it.** If the answer needs a caveat, it is a jab. Rewrite it or drop it.
258
+ - **The material was public, or was shared with you for this.** A talk, a published interview, something they wrote: fair. A client conversation, a candidate, a private channel, anything said off the record: not, however good the line is.
259
+
260
+ The same craft works with the sign flipped. Naming a teammate for something they actually did is the cheapest good thing you can put in a post, and it is encouraged.
261
+
262
+ ---
263
+
264
+ ## Links
265
+
266
+ **The default is no link.** Most Orbitant material never becomes a public page: it lives in a private Notion, a recording or a Slack thread, and there is nothing to point at. Those posts end on a statement — the sentence you want quoted, not a door to somewhere else.
267
+
268
+ When there is a real public URL, which in practice means a blog post that just went live:
269
+
270
+ - The link goes at the end, on its own line, **in one variant only** — not in all of them. Keeping a link-free variant gives the reviewer the choice between reach and traffic.
271
+ - **It costs 23 characters** whatever its length. Budget them before writing, not after.
272
+ - **It costs reach**, and that is a real trade. A link earns its place when the post is a genuine door into something longer. It does not when the post already says the whole thing.
273
+ - Phrase it naturally: `The numbers are in the post: [url]`. No "click here", no exclamation marks.
274
+
275
+ Never put a link in a post whose job is to be quoted.
276
+
277
+ ---
278
+
279
+ ## Hashtags
280
+
281
+ **Do not use hashtags on X.** Not one. The single exception is a live event tag, when there is a real convening hashtag people are actively clicking — a conference Orbitant is at or sponsoring.
282
+
283
+ They have lost their discovery function, and two or more read as bot behaviour. Hashtag conventions from Orbitant's other channels do not carry over to X. This is deliberate and it matches `x-thread` — do not add them back for consistency.
284
+
285
+ On X the brand appears as **`@WeOrbitant`**, which is a mention, and mentions do work.
286
+
287
+ ---
288
+
289
+ ## One image, or none
290
+
291
+ An image costs no characters and does earn attention, but only when it carries something:
292
+
293
+ - a system, a flow or a relationship between components (a diagram)
294
+ - a before and after comparison
295
+ - a code snippet (the only way to put code on X)
296
+ - a real result — the output, the dashboard, the timing
297
+
298
+ Propose **at most one**, in one line, and say which variant it belongs to or that it works for all of them. If nothing on that list applies, say no image is needed. A decorative image costs attention and returns nothing.
299
+
300
+ ---
301
+
302
+ ## Self-check before delivering
303
+
304
+ Verify each of these. Do not deliver an answer that fails one.
305
+
306
+ - [ ] Three variants, or two when the material only holds two angles, each a different angle and none of them another one reworded
307
+ - [ ] Numbered, ordered by preference, strongest first, with one line saying why
308
+ - [ ] A weighted count on every variant, with margin under 280: weight 1 only inside the allowlisted ranges, 2 for anything else including `…`, 23 for any URL
309
+ - [ ] Every variant stands alone, with no context and nothing to open
310
+ - [ ] Every variant is anchored in something concrete and checkable
311
+ - [ ] No rhetorical question, no engagement bait, no thread announcement
312
+ - [ ] Zero hashtags, or one real event tag
313
+ - [ ] No markdown syntax in any post body
314
+ - [ ] No link, or exactly one link in exactly one variant
315
+ - [ ] The pronoun matches the account
316
+ - [ ] The post is in English, or in Spanish because Spanish was asked for
317
+ - [ ] If a person is named for something they did not say: the absence is checkable, the idea is the subject, and you would send it to them first
318
+ - [ ] This is one post, not a thread compressed into one
319
+
320
+ ---
321
+
322
+ ## Tone
323
+
324
+ Refer to the `tone` skill for Orbitant's voice. On a single X post specifically:
325
+
326
+ - **Compress hard.** 280 characters is not a trimmed paragraph, it is a different sentence length. One clause where you would write two.
327
+ - **Concrete over abstract.** Numbers, measurements, named consequences. X punishes vagueness faster than any other channel.
328
+ - **Dry humour is welcome** when it fits naturally. Human, not polished — not forced, not performative.
329
+ - **No buzzwords:** "game-changing", "innovative", "cutting-edge", "empower", "leverage".
330
+ - **No growth-hacker voice:** "Most developers get this wrong", "Here is everything you need to know", "This changed how I think about X forever", "Steal this".
331
+ - **If the post is in Spanish, the em dash only marks a two-sided aside.** A single-sided dash used as a continuation is an anglicism. In English it is ordinary punctuation and the rule does not apply.
332
+
333
+ ---
334
+
335
+ ## What to avoid
336
+
337
+ - Writing a thread and calling it a post, or delivering a post and a thread together.
338
+ - Variants that differ in wording instead of in angle.
339
+ - Ordering the variants by length, or leaving them in the order the angles occurred to you.
340
+ - Summarising the material instead of finding the one thing in it worth saying.
341
+ - A post that only makes sense to someone who was in the room.
342
+ - Announcing that something exists without saying what it changes.
343
+ - `🧵`, `👇`, "A thread:" — there is no thread here.
344
+ - Hashtags. Any.
345
+ - A link in every variant, or a link in a post whose job is to be quoted.
346
+ - Markdown syntax. X renders none of it.
347
+ - Naming a person to score a point.
348
+ - Engagement bait of any kind, including the closing question.
@@ -70,9 +70,13 @@ On a personal account the thread must read as something that person actually did
70
70
 
71
71
  ### Language
72
72
 
73
- **Follow the language of the source.** Spanish material, Spanish thread. English material, English thread. One version — never both, and never a translation alongside.
73
+ **English by default** — every thread, whatever language the material is in. Spanish material, English thread.
74
74
 
75
- If the source mixes languages, use the language of the bulk of it. Keep technical English terms in English even in a Spanish thread: *framework*, *pipeline*, *deployment*, *token*.
75
+ Write the thread in Spanish only when whoever asked for it asks for Spanish. Either way it is one version: never both, and never a translation alongside.
76
+
77
+ Material in Spanish and a thread in English means anything you quote is being translated. Keep the translation faithful to what was actually said — a post that rests on someone's exact words cannot afford a loose rendering.
78
+
79
+ In a Spanish thread, keep technical English terms in English: *framework*, *pipeline*, *deployment*, *token*.
76
80
 
77
81
  ---
78
82
 
@@ -198,7 +202,7 @@ Plain text, ready to paste into X, Typefully or n8n. No markdown in the post bod
198
202
  THREAD — [spine in one sentence]
199
203
 
200
204
  Account: @WeOrbitant (company) | personal — [name]
201
- Language: [es | en]
205
+ Language: [en | es]
202
206
  Source: [blog post URL | native: what it came from]
203
207
 
204
208
  POST 1 — [n]/280
@@ -236,7 +240,7 @@ Verify each of these. Do not deliver a thread that fails one.
236
240
  - [ ] Exactly one link, in the closing post — or none, if native
237
241
  - [ ] The spine is a concept or principle, not a tool or a client
238
242
  - [ ] The pronoun matches the account
239
- - [ ] The thread language matches the source language
243
+ - [ ] The thread is in English, or in Spanish because Spanish was asked for
240
244
  - [ ] No more than 10 posts, and none of them padding
241
245
 
242
246
  ---
@@ -250,7 +254,7 @@ Refer to the `tone` skill for Orbitant's voice. On X specifically:
250
254
  - **Dry humour is welcome** when it fits naturally. Human, not polished — not forced, not performative.
251
255
  - **No buzzwords:** "game-changing", "innovative", "cutting-edge", "empower", "leverage".
252
256
  - **No growth-hacker voice.** The fastest way to lose a technical audience: "Here is everything you need to know", "10 lessons I learned", "Most developers get this wrong", "This changed how I think about X forever", "Steal this".
253
- - **In Spanish, the em dash only marks a two-sided aside.** A single-sided dash used as a continuation is an anglicism.
257
+ - **If the thread is in Spanish, the em dash only marks a two-sided aside.** A single-sided dash used as a continuation is an anglicism. In English it is ordinary punctuation and the rule does not apply.
254
258
 
255
259
  ---
256
260
 
@@ -12,7 +12,7 @@ description: |
12
12
  session". Also trigger when given a transcript and asked to prepare anything for a
13
13
  video upload.
14
14
  license: MIT
15
- version: "1.0.0"
15
+ version: "1.0.1"
16
16
  metadata:
17
17
  author: orbitant
18
18
  tags: marketing, youtube, seo, video, content, ks-sessions, description, bilingual, keywords
@@ -111,13 +111,13 @@ Open with:
111
111
  - Spanish: `ℹ️ En esta sesión descubrirás:`
112
112
  - English: `ℹ️ In this session you'll discover:`
113
113
 
114
- Follow with 4–7 bullet points, each starting with `→`. Each point should:
114
+ Follow with 4–7 bullet points, each starting with `—` (em dash, no space before the text). Each point should:
115
115
  - Describe something concrete and actionable
116
116
  - Reference real tools, techniques, or decisions from the session
117
117
  - Include secondary keywords naturally where they fit
118
118
 
119
- > Correct: `→ Cómo estructurar un pipeline de Claude para generar borradores de blog posts desde transcripts`
120
- > Incorrect: `→ Técnicas de productividad con IA`
119
+ > Correct: `—Cómo estructurar un pipeline de Claude para generar borradores de blog posts desde transcripts`
120
+ > Incorrect: `—Técnicas de productividad con IA`
121
121
 
122
122
  ### 5. Resources section
123
123
 
@@ -125,7 +125,10 @@ Only include if there are actual resources to list. Open with:
125
125
  - Spanish: `🔗 Recursos mencionados en la sesión:`
126
126
  - English: `🔗 Resources mentioned in the session:`
127
127
 
128
- List each resource on its own line. If a URL isn't available yet, use a placeholder: `Blog post: [link próximamente]`.
128
+ List each resource on its own line using the format `Nombre: descripción` (colon, not dash). If a URL isn't available yet, use a placeholder: `Blog post: [link próximamente]`.
129
+
130
+ > Correct: `Langfuse: trazabilidad de agentes`
131
+ > Incorrect: `Langfuse — trazabilidad de agentes`
129
132
 
130
133
  ---
131
134
 
@@ -166,14 +169,14 @@ Deliver as **plain text**, ready to paste directly into YouTube. YouTube does no
166
169
  [Overview — Spanish, primary + secondary keywords woven in naturally]
167
170
 
168
171
  ℹ️ En esta sesión descubrirás:
169
- → [specific takeaway with secondary keyword]
170
- → [specific takeaway]
171
- → [specific takeaway]
172
- → [specific takeaway]
172
+ —[specific takeaway with secondary keyword]
173
+ —[specific takeaway]
174
+ —[specific takeaway]
175
+ —[specific takeaway]
173
176
 
174
177
  🔗 Recursos mencionados en la sesión:
175
- [resource 1]
176
- [resource 2]
178
+ [Nombre recurso 1]: [descripción]
179
+ [Nombre recurso 2]: [descripción]
177
180
 
178
181
  ________________________________________________
179
182
 
@@ -184,14 +187,14 @@ ________________________________________________
184
187
  [Overview — English, adapted for English search intent]
185
188
 
186
189
  ℹ️ In this session you'll discover:
187
- → [specific takeaway]
188
- → [specific takeaway]
189
- → [specific takeaway]
190
- → [specific takeaway]
190
+ —[specific takeaway]
191
+ —[specific takeaway]
192
+ —[specific takeaway]
193
+ —[specific takeaway]
191
194
 
192
195
  🔗 Resources mentioned in the session:
193
- [resource 1]
194
- [resource 2]
196
+ [Resource name 1]: [description]
197
+ [Resource name 2]: [description]
195
198
 
196
199
  #tag1 #tag2 #Orbitant
197
200