conectese 0.1.14

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.
Files changed (260) hide show
  1. package/README.md +265 -0
  2. package/_conectese/.conectese-version +1 -0
  3. package/_conectese/config/playwright.config.json +11 -0
  4. package/_conectese/core/architect.agent.yaml +110 -0
  5. package/_conectese/core/best-practices/_catalog.yaml +116 -0
  6. package/_conectese/core/best-practices/blog-post.md +132 -0
  7. package/_conectese/core/best-practices/blog-seo.md +127 -0
  8. package/_conectese/core/best-practices/copywriting.md +426 -0
  9. package/_conectese/core/best-practices/data-analysis.md +401 -0
  10. package/_conectese/core/best-practices/email-newsletter.md +118 -0
  11. package/_conectese/core/best-practices/email-sales.md +110 -0
  12. package/_conectese/core/best-practices/image-design.md +348 -0
  13. package/_conectese/core/best-practices/instagram-feed.md +235 -0
  14. package/_conectese/core/best-practices/instagram-reels.md +112 -0
  15. package/_conectese/core/best-practices/instagram-stories.md +107 -0
  16. package/_conectese/core/best-practices/linkedin-article.md +116 -0
  17. package/_conectese/core/best-practices/linkedin-post.md +121 -0
  18. package/_conectese/core/best-practices/researching.md +349 -0
  19. package/_conectese/core/best-practices/review.md +269 -0
  20. package/_conectese/core/best-practices/social-networks-publishing.md +294 -0
  21. package/_conectese/core/best-practices/strategist.md +344 -0
  22. package/_conectese/core/best-practices/technical-writing.md +365 -0
  23. package/_conectese/core/best-practices/twitter-post.md +105 -0
  24. package/_conectese/core/best-practices/twitter-thread.md +122 -0
  25. package/_conectese/core/best-practices/whatsapp-broadcast.md +107 -0
  26. package/_conectese/core/best-practices/youtube-script.md +122 -0
  27. package/_conectese/core/best-practices/youtube-shorts.md +112 -0
  28. package/_conectese/core/prompts/build.prompt.md +547 -0
  29. package/_conectese/core/prompts/design.prompt.md +469 -0
  30. package/_conectese/core/prompts/discovery.prompt.md +269 -0
  31. package/_conectese/core/prompts/sherlock-instagram.md +123 -0
  32. package/_conectese/core/prompts/sherlock-linkedin.md +73 -0
  33. package/_conectese/core/prompts/sherlock-shared.md +684 -0
  34. package/_conectese/core/prompts/sherlock-twitter.md +78 -0
  35. package/_conectese/core/prompts/sherlock-youtube.md +85 -0
  36. package/_conectese/core/runner.pipeline.md +535 -0
  37. package/_conectese/core/skills.engine.md +381 -0
  38. package/agents/data-extractor/AGENT.md +13 -0
  39. package/agents/direito-adaneiro/AGENT.md +18 -0
  40. package/agents/direito-administrativo/AGENT.md +18 -0
  41. package/agents/direito-aeroporta-rio/AGENT.md +18 -0
  42. package/agents/direito-agra-rio/AGENT.md +18 -0
  43. package/agents/direito-ambiental/AGENT.md +18 -0
  44. package/agents/direito-banca-rio/AGENT.md +18 -0
  45. package/agents/direito-civil/AGENT.md +18 -0
  46. package/agents/direito-constitcional/AGENT.md +18 -0
  47. package/agents/direito-da-crianc-a-e-do-adolescente-eca/AGENT.md +18 -0
  48. package/agents/direito-da-propriedade-intelectal/AGENT.md +18 -0
  49. package/agents/direito-de-ami-lia/AGENT.md +18 -0
  50. package/agents/direito-de-tra-nsito/AGENT.md +18 -0
  51. package/agents/direito-desportivo/AGENT.md +18 -0
  52. package/agents/direito-digital/AGENT.md +18 -0
  53. package/agents/direito-do-consmidor/AGENT.md +18 -0
  54. package/agents/direito-do-trabalho/AGENT.md +18 -0
  55. package/agents/direito-econo-mico/AGENT.md +18 -0
  56. package/agents/direito-eleitoral/AGENT.md +18 -0
  57. package/agents/direito-empresarial/AGENT.md +18 -0
  58. package/agents/direito-imobilia-rio/AGENT.md +18 -0
  59. package/agents/direito-inanceiro/AGENT.md +18 -0
  60. package/agents/direito-internacional/AGENT.md +18 -0
  61. package/agents/direito-mari-timo/AGENT.md +18 -0
  62. package/agents/direito-me-dico-e-da-sa-de/AGENT.md +18 -0
  63. package/agents/direito-militar/AGENT.md +18 -0
  64. package/agents/direito-ndia-rio/AGENT.md +18 -0
  65. package/agents/direito-notarial-e-registral/AGENT.md +18 -0
  66. package/agents/direito-penal/AGENT.md +18 -0
  67. package/agents/direito-previdencia-rio/AGENT.md +18 -0
  68. package/agents/direito-processal-civil/AGENT.md +18 -0
  69. package/agents/direito-processal-do-trabalho/AGENT.md +18 -0
  70. package/agents/direito-processal-militar/AGENT.md +18 -0
  71. package/agents/direito-processal-penal/AGENT.md +18 -0
  72. package/agents/direito-rbani-stico/AGENT.md +18 -0
  73. package/agents/direito-secrita-rio/AGENT.md +18 -0
  74. package/agents/direito-sindical/AGENT.md +18 -0
  75. package/agents/direito-societa-rio/AGENT.md +18 -0
  76. package/agents/direito-tribta-rio/AGENT.md +18 -0
  77. package/agents/direitos-hmanos/AGENT.md +18 -0
  78. package/agents/legal-analyst/AGENT.md +16 -0
  79. package/agents/legal-synthesizer/AGENT.md +13 -0
  80. package/agents/lgpd-anonymizer/AGENT.md +14 -0
  81. package/agents/lgpd-restorer/AGENT.md +14 -0
  82. package/agents/task-router/AGENT.md +13 -0
  83. package/bin/conectese.js +73 -0
  84. package/dashboard/index.html +12 -0
  85. package/dashboard/package-lock.json +1971 -0
  86. package/dashboard/package.json +28 -0
  87. package/dashboard/public/assets/avatars/Female1_1wave.png +0 -0
  88. package/dashboard/public/assets/avatars/Female1_2wave.png +0 -0
  89. package/dashboard/public/assets/avatars/Female1_blink.png +0 -0
  90. package/dashboard/public/assets/avatars/Female1_talk.png +0 -0
  91. package/dashboard/public/assets/avatars/Female2_1wave.png +0 -0
  92. package/dashboard/public/assets/avatars/Female2_2wave.png +0 -0
  93. package/dashboard/public/assets/avatars/Female2_blink.png +0 -0
  94. package/dashboard/public/assets/avatars/Female2_talk.png +0 -0
  95. package/dashboard/public/assets/avatars/Female3_blink.png +0 -0
  96. package/dashboard/public/assets/avatars/Female3_talk.png +0 -0
  97. package/dashboard/public/assets/avatars/Female3_wave.png +0 -0
  98. package/dashboard/public/assets/avatars/Female4_blink.png +0 -0
  99. package/dashboard/public/assets/avatars/Female4_talk.png +0 -0
  100. package/dashboard/public/assets/avatars/Female4_wave.png +0 -0
  101. package/dashboard/public/assets/avatars/Female5_blink.png +0 -0
  102. package/dashboard/public/assets/avatars/Female5_talk.png +0 -0
  103. package/dashboard/public/assets/avatars/Female5_wave.png +0 -0
  104. package/dashboard/public/assets/avatars/Female6_blink.png +0 -0
  105. package/dashboard/public/assets/avatars/Female6_talk.png +0 -0
  106. package/dashboard/public/assets/avatars/Female6_wave.png +0 -0
  107. package/dashboard/public/assets/avatars/Male1_1wave.png +0 -0
  108. package/dashboard/public/assets/avatars/Male1_2wave.png +0 -0
  109. package/dashboard/public/assets/avatars/Male1_blink.png +0 -0
  110. package/dashboard/public/assets/avatars/Male1_talk.png +0 -0
  111. package/dashboard/public/assets/avatars/Male2_1wave.png +0 -0
  112. package/dashboard/public/assets/avatars/Male2_2wave.png +0 -0
  113. package/dashboard/public/assets/avatars/Male2_blink.png +0 -0
  114. package/dashboard/public/assets/avatars/Male2_talk.png +0 -0
  115. package/dashboard/public/assets/avatars/Male3_blink.png +0 -0
  116. package/dashboard/public/assets/avatars/Male3_talk.png +0 -0
  117. package/dashboard/public/assets/avatars/Male3_wave.png +0 -0
  118. package/dashboard/public/assets/avatars/Male4_blink.png +0 -0
  119. package/dashboard/public/assets/avatars/Male4_talk.png +0 -0
  120. package/dashboard/public/assets/avatars/Male4_wave.png +0 -0
  121. package/dashboard/public/assets/desks/desktop_set_black_down.png +0 -0
  122. package/dashboard/public/assets/desks/desktop_set_black_down_coding-1.png +0 -0
  123. package/dashboard/public/assets/desks/desktop_set_black_down_coding.png +0 -0
  124. package/dashboard/public/assets/desks/desktop_set_black_up.png +0 -0
  125. package/dashboard/public/assets/desks/desktop_set_white_down.png +0 -0
  126. package/dashboard/public/assets/desks/desktop_set_white_down_coding-1.png +0 -0
  127. package/dashboard/public/assets/desks/desktop_set_white_down_coding.png +0 -0
  128. package/dashboard/public/assets/desks/desktop_set_white_up.png +0 -0
  129. package/dashboard/public/assets/furniture/armchair_tan.png +0 -0
  130. package/dashboard/public/assets/furniture/armchair_tan_down.png +0 -0
  131. package/dashboard/public/assets/furniture/backpack_blue.png +0 -0
  132. package/dashboard/public/assets/furniture/backpack_red.png +0 -0
  133. package/dashboard/public/assets/furniture/blinds.png +0 -0
  134. package/dashboard/public/assets/furniture/blinds_large_closed_white.png +0 -0
  135. package/dashboard/public/assets/furniture/bookshelf.png +0 -0
  136. package/dashboard/public/assets/furniture/bookshelf_purple_tall.png +0 -0
  137. package/dashboard/public/assets/furniture/bulletin_board.png +0 -0
  138. package/dashboard/public/assets/furniture/clock.png +0 -0
  139. package/dashboard/public/assets/furniture/coffee_mug.png +0 -0
  140. package/dashboard/public/assets/furniture/coffee_mug_blue.png +0 -0
  141. package/dashboard/public/assets/furniture/coffee_table.png +0 -0
  142. package/dashboard/public/assets/furniture/coffeepot_right.png +0 -0
  143. package/dashboard/public/assets/furniture/coffeetable_black_horizontal.png +0 -0
  144. package/dashboard/public/assets/furniture/couch.png +0 -0
  145. package/dashboard/public/assets/furniture/couch_tan_down.png +0 -0
  146. package/dashboard/public/assets/furniture/cushion_blue.png +0 -0
  147. package/dashboard/public/assets/furniture/cushion_tan.png +0 -0
  148. package/dashboard/public/assets/furniture/desk_wood.png +0 -0
  149. package/dashboard/public/assets/furniture/fancy_rug.png +0 -0
  150. package/dashboard/public/assets/furniture/fancy_rug_wide.png +0 -0
  151. package/dashboard/public/assets/furniture/flowers1.png +0 -0
  152. package/dashboard/public/assets/furniture/flowers2.png +0 -0
  153. package/dashboard/public/assets/furniture/lamp_tan.png +0 -0
  154. package/dashboard/public/assets/furniture/lantern.png +0 -0
  155. package/dashboard/public/assets/furniture/monstera.png +0 -0
  156. package/dashboard/public/assets/furniture/monstera_small.png +0 -0
  157. package/dashboard/public/assets/furniture/picture_frame.png +0 -0
  158. package/dashboard/public/assets/furniture/plant1.png +0 -0
  159. package/dashboard/public/assets/furniture/plant2.png +0 -0
  160. package/dashboard/public/assets/furniture/plant3.png +0 -0
  161. package/dashboard/public/assets/furniture/plant_poof.png +0 -0
  162. package/dashboard/public/assets/furniture/plant_spindly.png +0 -0
  163. package/dashboard/public/assets/furniture/poster_blue.png +0 -0
  164. package/dashboard/public/assets/furniture/rug.png +0 -0
  165. package/dashboard/public/assets/furniture/succulent_blue.png +0 -0
  166. package/dashboard/public/assets/furniture/succulent_green.png +0 -0
  167. package/dashboard/public/assets/furniture/treasurechest_closed_gold.png +0 -0
  168. package/dashboard/public/assets/furniture/water_cooler_better.png +0 -0
  169. package/dashboard/public/assets/furniture/whiteboard.png +0 -0
  170. package/dashboard/public/assets/furniture/whiteboard_stand_graph.png +0 -0
  171. package/dashboard/public/assets/furniture/window_blinds_open.png +0 -0
  172. package/dashboard/src/App.tsx +46 -0
  173. package/dashboard/src/components/SquadCard.tsx +47 -0
  174. package/dashboard/src/components/SquadSelector.tsx +61 -0
  175. package/dashboard/src/components/StatusBadge.tsx +32 -0
  176. package/dashboard/src/components/StatusBar.tsx +97 -0
  177. package/dashboard/src/hooks/useSquadSocket.ts +135 -0
  178. package/dashboard/src/lib/formatTime.ts +16 -0
  179. package/dashboard/src/lib/normalizeState.ts +25 -0
  180. package/dashboard/src/main.tsx +10 -0
  181. package/dashboard/src/office/AgentSprite.ts +241 -0
  182. package/dashboard/src/office/OfficeScene.ts +153 -0
  183. package/dashboard/src/office/PhaserGame.tsx +80 -0
  184. package/dashboard/src/office/RoomBuilder.ts +190 -0
  185. package/dashboard/src/office/assetKeys.ts +150 -0
  186. package/dashboard/src/office/palette.ts +32 -0
  187. package/dashboard/src/plugin/squadWatcher.ts +233 -0
  188. package/dashboard/src/store/useSquadStore.ts +56 -0
  189. package/dashboard/src/styles/globals.css +36 -0
  190. package/dashboard/src/types/state.ts +63 -0
  191. package/dashboard/src/vite-env.d.ts +1 -0
  192. package/dashboard/test-results/.last-run.json +4 -0
  193. package/dashboard/tsconfig.json +24 -0
  194. package/dashboard/tsconfig.tsbuildinfo +1 -0
  195. package/dashboard/vite.config.ts +13 -0
  196. package/package.json +53 -0
  197. package/skills/README.md +63 -0
  198. package/skills/apify/SKILL.md +55 -0
  199. package/skills/blotato/SKILL.md +63 -0
  200. package/skills/canva/SKILL.md +60 -0
  201. package/skills/conectese-agent-creator/SKILL.md +192 -0
  202. package/skills/conectese-skill-creator/SKILL.md +407 -0
  203. package/skills/conectese-skill-creator/agents/analyzer.md +274 -0
  204. package/skills/conectese-skill-creator/agents/comparator.md +202 -0
  205. package/skills/conectese-skill-creator/agents/grader.md +223 -0
  206. package/skills/conectese-skill-creator/assets/eval_review.html +146 -0
  207. package/skills/conectese-skill-creator/eval-viewer/generate_review.py +471 -0
  208. package/skills/conectese-skill-creator/eval-viewer/viewer.html +1325 -0
  209. package/skills/conectese-skill-creator/references/schemas.md +430 -0
  210. package/skills/conectese-skill-creator/references/skill-format.md +235 -0
  211. package/skills/conectese-skill-creator/scripts/__init__.py +0 -0
  212. package/skills/conectese-skill-creator/scripts/aggregate_benchmark.py +401 -0
  213. package/skills/conectese-skill-creator/scripts/quick_validate.py +103 -0
  214. package/skills/conectese-skill-creator/scripts/run_eval.py +310 -0
  215. package/skills/conectese-skill-creator/scripts/utils.py +47 -0
  216. package/skills/image-ai-generator/SKILL.md +124 -0
  217. package/skills/image-ai-generator/scripts/generate.py +175 -0
  218. package/skills/image-creator/SKILL.md +155 -0
  219. package/skills/image-fetcher/SKILL.md +91 -0
  220. package/skills/instagram-publisher/SKILL.md +119 -0
  221. package/skills/instagram-publisher/scripts/publish.js +165 -0
  222. package/skills/resend/SKILL.md +80 -0
  223. package/skills/template-designer/SKILL.md +201 -0
  224. package/skills/template-designer/base-templates/model-a.html +27 -0
  225. package/skills/template-designer/base-templates/model-b.html +31 -0
  226. package/skills/template-designer/base-templates/model-c.html +42 -0
  227. package/src/agents-cli.js +158 -0
  228. package/src/agents.js +134 -0
  229. package/src/i18n.js +48 -0
  230. package/src/init.js +341 -0
  231. package/src/locales/en.json +73 -0
  232. package/src/locales/es.json +72 -0
  233. package/src/locales/pt-BR.json +72 -0
  234. package/src/logger.js +38 -0
  235. package/src/prompt.js +46 -0
  236. package/src/readme/README.md +119 -0
  237. package/src/runs.js +90 -0
  238. package/src/skills-cli.js +157 -0
  239. package/src/skills.js +146 -0
  240. package/src/update.js +169 -0
  241. package/templates/_conectese/.conectese-version +1 -0
  242. package/templates/_conectese/_investigations/.gitkeep +0 -0
  243. package/templates/ide-templates/antigravity/.agent/rules/conectese.md +55 -0
  244. package/templates/ide-templates/antigravity/.agent/workflows/conectese.md +102 -0
  245. package/templates/ide-templates/claude-code/.claude/skills/conectese/SKILL.md +182 -0
  246. package/templates/ide-templates/claude-code/.mcp.json +8 -0
  247. package/templates/ide-templates/claude-code/CLAUDE.md +43 -0
  248. package/templates/ide-templates/codex/.agents/skills/conectese/SKILL.md +6 -0
  249. package/templates/ide-templates/codex/AGENTS.md +105 -0
  250. package/templates/ide-templates/cursor/.cursor/commands/conectese.md +9 -0
  251. package/templates/ide-templates/cursor/.cursor/mcp.json +8 -0
  252. package/templates/ide-templates/cursor/.cursor/rules/conectese.mdc +48 -0
  253. package/templates/ide-templates/cursor/.cursorignore +3 -0
  254. package/templates/ide-templates/opencode/.opencode/commands/conectese.md +9 -0
  255. package/templates/ide-templates/opencode/AGENTS.md +105 -0
  256. package/templates/ide-templates/vscode-copilot/.github/prompts/conectese.prompt.md +201 -0
  257. package/templates/ide-templates/vscode-copilot/.vscode/mcp.json +8 -0
  258. package/templates/ide-templates/vscode-copilot/.vscode/settings.json +3 -0
  259. package/templates/package.json +8 -0
  260. package/templates/squads/.gitkeep +0 -0
@@ -0,0 +1,365 @@
1
+ ---
2
+ id: technical-writing
3
+ name: "Technical & Long-Form Writing"
4
+ whenToUse: |
5
+ Creating agents that write articles, blog posts, documentation, tutorials,
6
+ white papers, case studies, or educational content.
7
+ NOT for: short-form persuasive copy, research, data analysis, strategic planning.
8
+ version: "1.0.0"
9
+ ---
10
+
11
+ # Technical & Long-Form Writing — Best Practices
12
+
13
+ ## Core Principles
14
+
15
+ 1. **Clarity over cleverness.** Use simple, direct language. Choose concrete examples over abstract explanations. If a twelve-year-old cannot understand your sentence structure, rewrite it. Technical content does not require complicated prose.
16
+
17
+ 2. **Structure first, always.** Never write without an outline. The outline is the skeleton that holds everything together. Define your sections, their order, and their purpose before drafting a single paragraph. Share the outline for approval before proceeding to the full draft.
18
+
19
+ 3. **Evidence-based arguments.** Every claim needs support. Cite sources, reference data, quote experts, or provide concrete examples. Unsupported assertions undermine credibility. When exact data is unavailable, say so explicitly rather than fabricating statistics.
20
+
21
+ 4. **Progressive disclosure.** Start simple, build complexity. Introduce concepts in layers so readers can follow regardless of their starting knowledge level. The first paragraph of each section should be accessible; depth increases as the section progresses.
22
+
23
+ 5. **Accessibility without compromise.** Never use jargon without defining it on first use. Acronyms get spelled out the first time. Technical terms receive inline definitions or parenthetical explanations. Accessibility does not mean dumbing down; it means removing unnecessary barriers.
24
+
25
+ 6. **Completeness within scope.** Cover the topic thoroughly within the defined boundaries. If a topic requires more depth than the current format allows, flag it and recommend a follow-up piece or a series. Never leave obvious questions unanswered.
26
+
27
+ 7. **Audience-appropriate depth.** A tutorial for beginners requires different depth than a white paper for CTOs. Assess the audience before writing and calibrate vocabulary, example complexity, and assumed knowledge accordingly. When in doubt, err on the side of more explanation, not less.
28
+
29
+ 8. **Scannable structure.** Use subheadings, bullet points, numbered lists, bold key terms, and short paragraphs. Readers scan before they read. Make scanning productive by ensuring subheadings communicate the key point of each section.
30
+
31
+ 9. **Actionable takeaways.** Every piece should leave the reader with something they can do. A blog post should end with next steps. A tutorial should produce a working result. A white paper should inform a decision. Content without action is content without purpose.
32
+
33
+ ## Writing Methodology
34
+
35
+ ### Step 1: Load Context
36
+
37
+ Gather all inputs before writing anything. Required context includes:
38
+ - Topic definition and scope boundaries
39
+ - Target audience (role, expertise level, goals)
40
+ - Brand voice guidelines (if available)
41
+ - Research brief or source materials (from researcher agent)
42
+ - Content format (blog post, tutorial, documentation, white paper)
43
+ - Target word count or depth expectations
44
+ - Any existing content on the topic to avoid duplication
45
+
46
+ ### Step 2: Create Outline
47
+
48
+ Build a detailed outline that maps the argument or teaching progression:
49
+ - Define the hook (why should the reader care right now?)
50
+ - Map sections to a logical flow (chronological, problem-solution, simple-to-complex)
51
+ - Assign approximate word counts per section
52
+ - Identify where evidence, examples, and visuals are needed
53
+ - Mark sections that may need additional research
54
+ - Present the outline for approval before proceeding
55
+
56
+ ### Step 3: Draft Introduction
57
+
58
+ Write the introduction with three components:
59
+ - **Hook:** A concrete scenario, surprising statistic, or relatable problem that pulls the reader in
60
+ - **Promise:** A clear statement of what the reader will learn or gain
61
+ - **Roadmap:** A brief preview of the article structure so the reader knows what to expect
62
+
63
+ ### Step 4: Write Body Sections
64
+
65
+ Draft one section at a time, following the approved outline:
66
+ - Open each section with a clear topic sentence
67
+ - Support claims with evidence (data, citations, examples)
68
+ - Include at least one concrete example per section
69
+ - Use transitional phrases between paragraphs and sections
70
+ - Add subheadings every 200-300 words
71
+ - Keep paragraphs under 4-5 sentences
72
+
73
+ ### Step 5: Draft Conclusion
74
+
75
+ Write a conclusion that delivers on the introduction's promise:
76
+ - Summarize key points without repeating them verbatim
77
+ - Provide an actionable takeaway the reader can implement immediately
78
+ - If appropriate, point to next steps or related resources
79
+ - End on a forward-looking or motivating note, not a summary rehash
80
+
81
+ ### Step 6: Self-Review
82
+
83
+ Review the complete draft against quality criteria:
84
+ - Read the full piece for flow and coherence
85
+ - Check that every section delivers on its outline promise
86
+ - Verify all claims have supporting evidence
87
+ - Confirm no jargon is used without definition
88
+ - Validate subheading frequency and readability
89
+ - Ensure the introduction's promise matches the conclusion's delivery
90
+ - Check reading level appropriateness for the target audience
91
+
92
+ ### Step 7: Compile with Metadata
93
+
94
+ Prepare the final output with all required metadata:
95
+ - Title (compelling, specific, keyword-aware)
96
+ - Subtitle or deck (one-sentence summary)
97
+ - Meta description (for SEO, 150-160 characters)
98
+ - Suggested tags or categories
99
+ - Estimated reading time
100
+ - The complete article body
101
+
102
+ ## Decision Criteria
103
+
104
+ - **When to add examples vs. move on:** Add an example whenever a concept is abstract, counterintuitive, or new to the target audience. Move on when the point is concrete and self-evident.
105
+ - **When depth is sufficient:** Depth is sufficient when a reader at the target expertise level can act on the information without needing to consult another source for the same concept.
106
+ - **When to recommend splitting into a series:** If the outline exceeds the target word count by more than 30%, or if two or more sections could stand alone as complete articles, recommend a series.
107
+ - **When to use lists vs. prose:** Use lists for sequential steps, parallel items, or scannable reference material. Use prose for narrative flow, argumentation, and context-setting.
108
+ - **When to recommend visuals:** Recommend a diagram, screenshot, or illustration whenever a concept involves spatial relationships, multi-step processes, or comparisons across three or more items.
109
+
110
+ ## Quality Criteria
111
+
112
+ Before delivering any piece of content, verify the following:
113
+
114
+ - [ ] **Clear structure.** The piece has a defined introduction, body sections, and conclusion. The reader can predict the flow from the introduction.
115
+ - [ ] **Examples in every section.** Each body section contains at least one concrete example, code snippet, scenario, or case reference.
116
+ - [ ] **No undefined jargon.** Every technical term, acronym, or domain-specific phrase is defined on first use.
117
+ - [ ] **Appropriate subheading frequency.** No section runs longer than 300 words without a subheading or visual break.
118
+ - [ ] **Evidence-backed claims.** Quantitative claims reference a source. Qualitative claims are supported by examples or expert references.
119
+ - [ ] **Actionable takeaway present.** The piece ends with specific next steps, recommendations, or actions the reader can take.
120
+ - [ ] **Reading level matches audience.** A beginner tutorial reads at a lower complexity than a white paper for senior engineers. Vocabulary and assumed knowledge align with the target audience.
121
+ - [ ] **Word count matches format.** Blog posts: 800-2,000 words. Tutorials: 1,500-3,000 words. White papers: 3,000-6,000 words. Documentation pages: 500-1,500 words.
122
+ - [ ] **No em dashes.** The entire output has been checked for em dashes and none are present.
123
+ - [ ] **Introduction promise matches conclusion delivery.** Whatever the introduction says the reader will learn, the conclusion confirms they learned it.
124
+ - [ ] **Transitions between sections.** Each section connects logically to the next. The reader never wonders "why am I reading this now?"
125
+ - [ ] **Metadata complete.** Title, meta description, tags, and estimated reading time are all provided with the final draft.
126
+
127
+ ## Output Examples
128
+
129
+ ### Example 1: Blog Post Introduction + Outline + First Section
130
+
131
+ **Title:** How Connection Pooling Cuts Your Database Latency in Half
132
+
133
+ **Meta description:** Learn how connection pooling works, why it reduces database latency, and how to implement it in Node.js with practical code examples.
134
+
135
+ **Estimated reading time:** 8 minutes
136
+
137
+ ---
138
+
139
+ **Introduction:**
140
+
141
+ Every time your application opens a new database connection, it pays a tax. The TCP handshake, authentication, SSL negotiation, and protocol setup add 20-50 milliseconds per connection. For a single request, that is negligible. For an application handling 1,000 requests per second, that is 20-50 seconds of cumulative overhead every second, just from connection setup.
142
+
143
+ Connection pooling eliminates this tax by maintaining a set of pre-established connections that your application reuses. Instead of opening and closing connections per request, your app borrows a connection from the pool, uses it, and returns it. The result: database latency drops by 40-60% in most production workloads.
144
+
145
+ This article covers three things. First, you will understand how connection pooling works under the hood. Second, you will see benchmark data comparing pooled and unpooled connections. Third, you will implement a production-ready connection pool in Node.js with proper error handling and monitoring.
146
+
147
+ ---
148
+
149
+ **Outline:**
150
+
151
+ 1. The cost of a database connection (what happens during setup, measured latency)
152
+ 2. How connection pooling works (pool lifecycle, borrow/return model, idle management)
153
+ 3. Benchmark results (pooled vs. unpooled across load levels)
154
+ 4. Implementation in Node.js (code walkthrough with pg-pool)
155
+ 5. Production considerations (pool sizing, error handling, monitoring)
156
+ 6. Common pitfalls (connection leaks, pool exhaustion, stale connections)
157
+ 7. Key takeaways and next steps
158
+
159
+ ---
160
+
161
+ **Section 1: The Cost of a Database Connection**
162
+
163
+ When your application calls `db.connect()`, the following sequence executes before a single query can run:
164
+
165
+ 1. **DNS resolution** resolves the database hostname to an IP address (1-10ms)
166
+ 2. **TCP handshake** establishes the network connection with a three-way SYN/SYN-ACK/ACK exchange (1-5ms locally, 10-50ms cross-region)
167
+ 3. **TLS negotiation** sets up encrypted communication if SSL is enabled (5-15ms)
168
+ 4. **Authentication** sends credentials and receives confirmation (2-10ms)
169
+ 5. **Protocol initialization** configures session parameters like character set and timezone (1-5ms)
170
+
171
+ Total setup cost per connection: **10-90ms** depending on network topology and security configuration.
172
+
173
+ For a simple SELECT query that takes 2ms to execute, the connection setup can represent 80-97% of the total request time. That ratio gets worse with geographic distance between your application server and database server.
174
+
175
+ To put this in context, consider an e-commerce application that runs 5 database queries per page load. If each query opens a new connection, the user pays 50-450ms in connection overhead alone, before any actual data retrieval. On a page that otherwise loads in 200ms, connection setup could triple the total response time.
176
+
177
+ This overhead is entirely avoidable. The connections themselves are reusable. Once established, a database connection can handle thousands of queries sequentially. The only reason to close and reopen connections is resource management, which is exactly what connection pooling automates.
178
+
179
+ ### Example 2: Tutorial Section with Step-by-Step Instructions
180
+
181
+ **Section: Setting Up Automated Backups with Cron and Restic**
182
+
183
+ Before you begin, make sure you have the following prerequisites installed on your server:
184
+
185
+ - **Restic** (version 0.14 or later): the backup tool that handles deduplication and encryption
186
+ - **Cron**: the standard Unix job scheduler (pre-installed on most Linux distributions)
187
+ - **An S3-compatible storage bucket**: where your encrypted backups will be stored (AWS S3, MinIO, or Backblaze B2 all work)
188
+
189
+ If you do not have Restic installed, run the following command on Ubuntu/Debian:
190
+
191
+ ```bash
192
+ sudo apt update && sudo apt install restic
193
+ ```
194
+
195
+ Verify the installation by checking the version:
196
+
197
+ ```bash
198
+ restic version
199
+ # Expected output: restic 0.16.2 (or later)
200
+ ```
201
+
202
+ **Step 1: Initialize the backup repository.**
203
+
204
+ A Restic repository is the destination where your backup data lives. You initialize it once, and all future backups write to the same repository. Run this command, replacing the bucket name and path with your own:
205
+
206
+ ```bash
207
+ export AWS_ACCESS_KEY_ID="your-access-key"
208
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
209
+
210
+ restic -r s3:s3.amazonaws.com/your-bucket-name/backups init
211
+ ```
212
+
213
+ Restic will prompt you for a repository password. Choose a strong password and store it in a password manager. You will need this password for every backup and restore operation. Without it, your backups are permanently inaccessible (this is a security feature, not a limitation).
214
+
215
+ **Step 2: Create the backup script.**
216
+
217
+ Rather than typing the full Restic command every time, create a shell script that handles environment variables, paths, and error reporting. Save this file as `/opt/scripts/backup.sh`:
218
+
219
+ ```bash
220
+ #!/bin/bash
221
+ set -euo pipefail
222
+
223
+ # Configuration
224
+ export AWS_ACCESS_KEY_ID="your-access-key"
225
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
226
+ export RESTIC_REPOSITORY="s3:s3.amazonaws.com/your-bucket-name/backups"
227
+ export RESTIC_PASSWORD_FILE="/etc/restic/password.txt"
228
+
229
+ # Directories to back up
230
+ BACKUP_PATHS="/var/www /etc/nginx /home"
231
+
232
+ # Directories to exclude
233
+ EXCLUDE_PATTERNS="--exclude='*.tmp' --exclude='node_modules' --exclude='.cache'"
234
+
235
+ # Run the backup
236
+ restic backup $BACKUP_PATHS $EXCLUDE_PATTERNS \
237
+ --tag "automated" \
238
+ --tag "$(hostname)" \
239
+ 2>&1 | logger -t restic-backup
240
+
241
+ # Prune old snapshots: keep 7 daily, 4 weekly, 6 monthly
242
+ restic forget \
243
+ --keep-daily 7 \
244
+ --keep-weekly 4 \
245
+ --keep-monthly 6 \
246
+ --prune \
247
+ 2>&1 | logger -t restic-prune
248
+
249
+ echo "Backup completed at $(date)" | logger -t restic-backup
250
+ ```
251
+
252
+ Two things to note about this script. First, the `set -euo pipefail` line at the top ensures the script stops immediately if any command fails, rather than silently continuing with partial backups. Second, the output pipes to `logger`, which writes to your system's syslog. This means you can review backup logs with `journalctl -t restic-backup` without managing separate log files.
253
+
254
+ **Step 3: Set file permissions.**
255
+
256
+ Your backup script contains storage credentials, so restrict its permissions to root only:
257
+
258
+ ```bash
259
+ sudo chmod 700 /opt/scripts/backup.sh
260
+ sudo chown root:root /opt/scripts/backup.sh
261
+ ```
262
+
263
+ Store the repository password in a separate file with equally restrictive permissions:
264
+
265
+ ```bash
266
+ echo "your-repository-password" | sudo tee /etc/restic/password.txt > /dev/null
267
+ sudo chmod 600 /etc/restic/password.txt
268
+ sudo chown root:root /etc/restic/password.txt
269
+ ```
270
+
271
+ **Step 4: Schedule the backup with Cron.**
272
+
273
+ Open the root crontab and add a daily backup schedule:
274
+
275
+ ```bash
276
+ sudo crontab -e
277
+ ```
278
+
279
+ Add this line to run backups every day at 2:00 AM server time:
280
+
281
+ ```cron
282
+ 0 2 * * * /opt/scripts/backup.sh
283
+ ```
284
+
285
+ The five fields represent minute (0), hour (2), day of month (any), month (any), and day of week (any). This schedule avoids peak usage hours while running frequently enough to limit data loss to a maximum of 24 hours.
286
+
287
+ **Step 5: Verify the setup.**
288
+
289
+ Run the backup script manually to confirm everything works before relying on the cron schedule:
290
+
291
+ ```bash
292
+ sudo /opt/scripts/backup.sh
293
+ ```
294
+
295
+ After the script completes, verify that snapshots appear in your repository:
296
+
297
+ ```bash
298
+ restic -r s3:s3.amazonaws.com/your-bucket-name/backups snapshots
299
+ ```
300
+
301
+ You should see one snapshot listed with the current timestamp and the tags "automated" and your hostname. If you see errors instead, check that your AWS credentials are correct and that the S3 bucket exists and is accessible from your server.
302
+
303
+ ## Anti-Patterns
304
+
305
+ ### Never Do
306
+
307
+ 1. **Write without an outline.** Drafting without structure leads to meandering content, redundant sections, and missing coverage. Always outline first, get approval, then write.
308
+
309
+ 2. **Use jargon without definition.** Every undefined technical term is a potential exit point for the reader. Define terms inline on first use, even if you think the audience "should know."
310
+
311
+ 3. **Exceed scope without flagging.** If writing reveals that the topic needs more coverage than planned, stop and flag it. Recommend a follow-up piece or series rather than inflating the current piece beyond its intended scope.
312
+
313
+ 4. **Write walls of text without subheadings.** More than 300 words without a visual break (subheading, list, code block, or image) signals that the content needs restructuring. Scan-friendliness is not optional.
314
+
315
+ 5. **Make claims without evidence.** Statements like "most developers prefer" or "this approach is faster" require supporting data, a citation, or at minimum a concrete example. Unsupported claims erode trust.
316
+
317
+ 6. **Use em dashes anywhere in the output.** Replace every em dash with a comma, period, colon, or parenthetical. This is a non-negotiable formatting rule.
318
+
319
+ 7. **Start sections with definitions.** "Authentication is the process of..." is the weakest possible opening. Start with a problem, scenario, or consequence, then introduce the concept as the solution.
320
+
321
+ 8. **Repeat the same point in different words.** If you have said it clearly once, move forward. Repetition for emphasis works in speeches, not in written content. Readers can re-read; they should not have to.
322
+
323
+ ### Always Do
324
+
325
+ 1. **Include at least one concrete example in every section.** Abstract explanations without examples leave readers uncertain about practical application. Examples bridge the gap between theory and practice.
326
+
327
+ 2. **Define technical terms on first use.** Use inline definitions (parenthetical or appositive) to keep the reader moving without requiring them to look things up externally.
328
+
329
+ 3. **Use subheadings every 200-300 words.** Subheadings serve two purposes: they help scanners find relevant sections, and they help readers track their progress through the piece.
330
+
331
+ 4. **Provide actionable takeaways.** Every article, tutorial, or guide should end with something the reader can do next. If your content does not change behavior or inform a decision, reconsider its purpose.
332
+
333
+ 5. **Front-load key information.** Put the most important point of each section in the first sentence. Readers who scan will still absorb the core message.
334
+
335
+ 6. **Use parallel structure in lists.** Every item in a list should follow the same grammatical pattern. Mixing verb forms, sentence fragments, and complete sentences within a single list creates cognitive friction.
336
+
337
+ ## Vocabulary Guidance
338
+
339
+ ### Use
340
+
341
+ - **Concrete examples** to anchor abstract concepts: "For instance, if your API returns a 429 status code, that means..."
342
+ - **Scenario-based framing** to build relevance: "Consider this scenario: your team just shipped a feature and usage spikes overnight..."
343
+ - **Transitional phrases** to maintain flow between paragraphs and sections: "Building on this foundation...", "With that context in mind...", "This brings us to..."
344
+ - **Active voice** as the default for direct, clear communication: "The function validates the input" not "The input is validated by the function."
345
+ - **Specific numbers and data** over vague qualifiers: "Reduced load time by 40%" not "Significantly improved performance."
346
+ - **Reader-addressing language** to maintain engagement: "You will notice...", "At this point, you have...", "Your next step is..."
347
+ - **Short sentences for key points.** When stating something important, keep it brief. Let the sentence stand alone.
348
+
349
+ ### Avoid
350
+
351
+ - **Jargon without definition.** If a term requires domain knowledge, define it inline on first use. No exceptions.
352
+ - **Em dashes.** Do not use em dashes in any output. They are the most recognizable marker of AI-generated text. Use commas, periods, parentheses, or colons instead.
353
+ - **Filler phrases.** Remove "It's important to note that...", "It goes without saying...", "Needless to say...", "At the end of the day...", "In today's world..." These add no information.
354
+ - **Passive voice without reason.** Use passive voice only when the actor is genuinely unknown or irrelevant. Otherwise, name the subject.
355
+ - **"In conclusion" or "To summarize."** The conclusion should feel like a natural landing, not an announcement. Show the ending through content, not labels.
356
+ - **Walls of text.** Never write more than 300 words without a subheading, list, or visual break. Dense paragraphs lose readers.
357
+ - **Rhetorical questions as filler.** Only use a question when you immediately answer it and the answer drives the narrative forward.
358
+ - **Exclamation marks.** Professional content earns enthusiasm through substance, not punctuation.
359
+
360
+ ### Tone Rules
361
+
362
+ 1. **Authoritative but approachable.** Write like a senior colleague explaining something to a motivated junior, not like a professor lecturing a class. Confidence without condescension.
363
+ 2. **Educational without patronizing.** Assume the reader is intelligent but may lack specific domain knowledge. Explain concepts, not because the reader is incapable, but because the topic is genuinely complex.
364
+ 3. **Evidence-driven, not opinion-driven.** State facts, cite sources, present data. When offering an opinion or recommendation, label it clearly: "Based on these results, we recommend..." or "In our experience..."
365
+ 4. **Calm and measured.** Avoid hype, urgency, or sensationalism. Let the content's value speak for itself. "This approach reduces errors by 60%" is more persuasive than "This game-changing approach will revolutionize your workflow."
@@ -0,0 +1,105 @@
1
+ ---
2
+ name: "Twitter/X Post"
3
+ platform: "twitter"
4
+ content_type: "post"
5
+ description: "Single tweets and quote tweets optimized for engagement, bookmarks, and algorithmic reach"
6
+ whenToUse: |
7
+ Creating agents that produce tweets, quote tweets, or single posts for X/Twitter.
8
+ constraints:
9
+ tweet_max_chars: 280
10
+ effective_chars: 260
11
+ hashtags_max: 3
12
+ recommended_hashtags: "2-3"
13
+ images_per_tweet: 4
14
+ version: "1.0.0"
15
+ ---
16
+
17
+ ## Platform Rules
18
+
19
+ - Engagement is weighted: Replies > Bookmarks > Retweets > Likes. Design tweets that provoke replies and are worth bookmarking.
20
+ - Tweets with images or video get significantly more impressions than text-only tweets. Always consider whether a visual element strengthens the tweet.
21
+ - The algorithm penalizes tweets with external links in the body. Links reduce distribution. Post the link in a reply instead or use the "link in bio" approach.
22
+ - Early engagement in the first 15-30 minutes is critical. The algorithm tests your tweet with a small audience first, then expands based on engagement velocity.
23
+ - Dwell time matters. Tweets that make people stop scrolling and read get algorithmic boosts. Multi-line tweets with line breaks create natural dwell time.
24
+ - Tweets from accounts that actively reply to others get higher baseline reach. Engagement is a two-way signal.
25
+ - Best posting times: 8-10 AM EST or 12-1 PM EST on weekdays. Tuesday through Thursday for professional and B2B content. Saturday morning works for casual content.
26
+ - Frequency: 1-3 tweets per day is a sustainable, high-performing cadence.
27
+
28
+ ## Content Structure
29
+
30
+ ### Single Tweet Formats
31
+
32
+ - **Hot take**: Contrarian opinion that sparks debate. "Most people think X. The truth is Y."
33
+ - **Question**: Simple, relatable question that invites replies. "What is the one thing you wish you knew about [topic]?"
34
+ - **Listicle**: "5 things I learned about X:" followed by a numbered list, one item per line.
35
+ - **Quote + take**: Share a quote and add your unique perspective in 1-2 sentences.
36
+ - **Data point**: One surprising stat with your interpretation. "[Stat]. Here is what most people miss:"
37
+ - **Before/After**: Contrast two states or perspectives. "Before: [old way]. Now: [new insight]."
38
+
39
+ ### Quote Tweet Structure
40
+
41
+ 1. Highlight the key point from the original tweet.
42
+ 2. Add your unique angle, experience, or data.
43
+ 3. Keep under 200 characters to leave room for the quoted content's context.
44
+
45
+ ### Tweet Anatomy
46
+
47
+ - **Opening words** — The first 5-8 words decide whether someone reads further. Front-load the value or tension.
48
+ - **Body** — One idea only. Develop it clearly in 1-3 sentences maximum.
49
+ - **Closer** — A question, bold statement, or implication that invites engagement.
50
+
51
+ ## Writing Guidelines
52
+
53
+ - **One idea per tweet.** Clarity beats cleverness. If you need multiple points, write a thread instead.
54
+ - Front-load the value. The first few words of the tweet determine whether someone reads the rest. Start with the strongest word or phrase.
55
+ - Use line breaks strategically for readability. A tweet formatted as 2-3 short lines reads better than one dense paragraph.
56
+ - Leave approximately 20 characters of headroom for hashtags. Aim for ~260 effective characters of content.
57
+ - Use 2-3 hashtags maximum. Place them at the end of the tweet or weave them naturally into the text. More than 3 hashtags signals low-quality content.
58
+ - Focus on industry/topic-specific hashtags, not generic ones. #ContentStrategy beats #Success.
59
+ - When quote tweeting, add genuine insight. Not "This!" or "So true." Add your experience, a counter-point, or additional data.
60
+ - Write tweets that invite replies: questions, fill-in-the-blank prompts, "unpopular opinion" takes, and debate-starting claims.
61
+ - Reply to comments on your tweets within the first hour to boost algorithmic momentum.
62
+
63
+ ## Output Format
64
+
65
+ ```
66
+ === TWEET ===
67
+ [Tweet text — max 280 characters. Front-load value. One clear idea. Use line breaks for readability.]
68
+
69
+ === HASHTAGS ===
70
+ #hashtag1 #hashtag2
71
+ [2-3 hashtags, placed at the end of the tweet or noted separately]
72
+
73
+ === IMAGE (optional) ===
74
+ [Image description — what the visual shows, composition, text overlay if any]
75
+ [Alt text for accessibility — max 1,000 characters]
76
+
77
+ === QUOTE TWEET (if applicable) ===
78
+ [URL or reference to the original tweet being quoted]
79
+ [Your commentary — max 200 characters to leave room for context]
80
+ ```
81
+
82
+ ## Quality Criteria
83
+
84
+ - [ ] Tweet is 280 characters or fewer, with ~260 characters of content leaving room for hashtags
85
+ - [ ] First 5-8 words create enough interest to finish reading the tweet
86
+ - [ ] Tweet contains exactly one clear idea, not multiple crammed together
87
+ - [ ] Hashtags are 2-3 maximum and topic-specific, not generic
88
+ - [ ] No external links appear in the tweet body (links go in replies)
89
+ - [ ] Tweet is formatted with line breaks for readability where appropriate
90
+ - [ ] Content invites a reply, bookmark, or retweet through its framing
91
+ - [ ] Quote tweets (if used) add genuine insight, not just agreement
92
+ - [ ] Image alt text is included if an image is attached
93
+ - [ ] Tweet avoids filler words and gets to the point immediately
94
+
95
+ ## Anti-Patterns
96
+
97
+ - **Links in tweet body** — Dramatically reduces reach due to algorithmic suppression. Post the link as a reply or use "link in bio."
98
+ - **Excessive emojis** — More than 2-3 emojis per tweet looks unprofessional and reduces credibility in professional niches.
99
+ - **Hashtag spam** — More than 3 hashtags per tweet signals low-quality content and reduces engagement rather than increasing it.
100
+ - **Reposting the same content verbatim** — The algorithm detects duplicate content and suppresses it. Rephrase or add new context when revisiting a topic.
101
+ - **Not engaging with replies** — Failing to respond to comments signals to the algorithm that your content does not generate real conversation, reducing future distribution.
102
+ - **Using URL shorteners** — Twitter/X already shortens links. Third-party shorteners look suspicious and may be flagged as spam.
103
+ - **Auto-cross-posting from other platforms** — Truncated content and broken formatting from Instagram or LinkedIn cross-posts damage credibility and get no engagement.
104
+ - **Cramming multiple ideas into one tweet** — A tweet trying to cover 3 topics communicates none of them effectively. If you have multiple points, use a thread.
105
+ - **Posting during major breaking news** — Your content will be buried under breaking news engagement. Check current events before posting.
@@ -0,0 +1,122 @@
1
+ ---
2
+ name: "Twitter/X Thread"
3
+ platform: "twitter"
4
+ content_type: "thread"
5
+ description: "Multi-tweet threads optimized for long-form storytelling, education, and sustained engagement"
6
+ whenToUse: |
7
+ Creating agents that produce Twitter/X threads or multi-tweet narratives.
8
+ constraints:
9
+ tweet_max_chars: 280
10
+ optimal_thread_length: "5-15 tweets"
11
+ hashtags: "only on first tweet"
12
+ version: "1.0.0"
13
+ ---
14
+
15
+ ## Platform Rules
16
+
17
+ - Threads receive 2-3x more impressions than standalone tweets. The multi-tweet format increases dwell time and creates multiple engagement touchpoints.
18
+ - Engagement is weighted: Replies > Bookmarks > Retweets > Likes. Threads that are bookmark-worthy (educational, reference-quality) get sustained distribution.
19
+ - Early engagement on the first tweet (first 15-30 minutes) is critical. If the first tweet does not perform, the thread's remaining tweets receive limited distribution.
20
+ - Replying to your own tweet within 1 hour can boost the thread's visibility. Consider adding a summary or additional context as a self-reply.
21
+ - The algorithm penalizes tweets with external links. If including links, place them in the final tweet or as a reply below the thread.
22
+ - Threads from accounts that actively engage with others' content get higher baseline reach.
23
+ - Best posting times: 8-10 AM EST or 12-1 PM EST on weekdays, particularly Tuesday through Thursday. Threads need immediate engagement to gain traction, so timing matters more than for standalone tweets.
24
+ - Avoid posting threads during low-traffic hours or major breaking news cycles.
25
+
26
+ ## Content Structure
27
+
28
+ ### Thread Architecture
29
+
30
+ 1. **Hook tweet (Tweet 1/N)** — The most important tweet. It must stand completely alone as a compelling, self-contained statement. This is what appears in the feed and determines whether anyone reads further. Bold claim, surprising stat, or "Here is what I learned from..." format.
31
+ 2. **Context tweet (Tweet 2/N)** — Brief background establishing why this matters and who should keep reading. Sets the stage for the body.
32
+ 3. **Body tweets (Tweets 3-N-2)** — One insight, point, or story beat per tweet. Numbered for progress tracking. Each tweet should deliver standalone value while advancing the larger narrative.
33
+ 4. **Summary tweet (Tweet N-1)** — Recap the key takeaways in bullet points. This is the second most bookmarked tweet in a thread after the first.
34
+ 5. **CTA tweet (Tweet N/N)** — Ask for a follow, retweet of the first tweet for reach, or bookmark for reference. Include a link back to the first tweet for easy sharing.
35
+
36
+ ### Tweet-Level Structure
37
+
38
+ - Each individual tweet in the thread should be a complete thought. Avoid splitting a sentence across two tweets.
39
+ - Use numbering format (1/10, 2/10... or 1., 2., 3...) so readers know the thread length and their progress.
40
+ - Start each tweet with the key point, then support it. Do not bury the insight at the end.
41
+
42
+ Thread length: 5-8 tweets for focused insights, 9-12 for comprehensive breakdowns, 13-15 maximum. Beyond 15, engagement drops sharply. Never pad to hit a target length.
43
+
44
+ ## Writing Guidelines
45
+
46
+ - **The first tweet is everything.** It must be compelling as a standalone tweet. If someone only sees tweet 1 and never clicks the thread, it should still deliver value or create irresistible curiosity.
47
+ - Number every tweet so readers know the thread length. "1/10" or "(1)" format both work. Knowing the length helps readers decide to commit.
48
+ - One point per tweet. Do not cram multiple ideas into a single tweet. Each tweet should feel like a self-contained insight with a clear beginning and end.
49
+ - Use the last tweet for a summary and CTA. Recap the 3-5 key points in bullet format, then ask for a follow, retweet of the first tweet, or bookmark.
50
+ - Use hashtags only on the first tweet. Hashtags on every tweet in a thread look spammy and reduce readability. 2-3 relevant hashtags on tweet 1 is sufficient.
51
+ - Write conversationally. Threads are a storytelling format. Use "I" instead of "one," contractions instead of formal language, and short sentences instead of complex ones.
52
+ - Include a "retweet the first tweet" call to action in the final tweet. This is the primary sharing mechanism for threads and extends reach significantly.
53
+ - Keep each tweet under 280 characters but aim for substance. A tweet that is only 40 characters feels like padding.
54
+ - Reply to comments on the thread within the first hour. Engagement velocity in the early window determines total distribution.
55
+
56
+ ## Output Format
57
+
58
+ ```
59
+ === THREAD ===
60
+ TWEET 1/N (Hook):
61
+ [Standalone compelling statement — bold claim, surprising stat, or curiosity gap. Must work even if no one reads the rest. Max 280 chars.]
62
+
63
+ #hashtag1 #hashtag2
64
+
65
+ TWEET 2/N (Context):
66
+ [Why this matters. Who should read this. Brief background. Max 280 chars.]
67
+
68
+ TWEET 3/N (Point 1):
69
+ [First key insight — one clear point with support. Max 280 chars.]
70
+
71
+ TWEET 4/N (Point 2):
72
+ [Second key insight — one clear point with support. Max 280 chars.]
73
+
74
+ TWEET 5/N (Point 3):
75
+ [Third key insight — one clear point with support. Max 280 chars.]
76
+
77
+ ...
78
+
79
+ TWEET (N-1)/N (Summary):
80
+ Key takeaways:
81
+ - [Takeaway 1]
82
+ - [Takeaway 2]
83
+ - [Takeaway 3]
84
+
85
+ TWEET N/N (CTA):
86
+ [If this was valuable, retweet tweet 1 to share it with your audience.
87
+
88
+ Follow @[handle] for more on [topic].
89
+
90
+ Bookmark this thread for reference.]
91
+
92
+ === THREAD NOTES ===
93
+ Total tweets: [N]
94
+ Primary topic: [Topic]
95
+ Target audience: [Who this is for]
96
+ ```
97
+
98
+ ## Quality Criteria
99
+
100
+ - [ ] First tweet works as a compelling standalone statement, even without the rest of the thread
101
+ - [ ] Thread is 5-15 tweets long (not shorter, not longer)
102
+ - [ ] Every tweet contains exactly one clear point or insight
103
+ - [ ] Tweets are numbered (1/N format) so readers know the length
104
+ - [ ] Hashtags appear only on the first tweet (2-3 maximum)
105
+ - [ ] No tweet splits a sentence across tweet boundaries
106
+ - [ ] Summary tweet recaps key takeaways in bullet format
107
+ - [ ] Final tweet includes a CTA: retweet tweet 1, follow, or bookmark
108
+ - [ ] No external links in tweet bodies (links go in the final tweet or a reply)
109
+ - [ ] Each tweet delivers standalone value while advancing the thread's narrative
110
+
111
+ ## Anti-Patterns
112
+
113
+ - **Thread with no hook** — Starting with "Thread on [topic]:" without any compelling reason to read guarantees low engagement. The first tweet must create curiosity or deliver a striking insight.
114
+ - **Threads longer than 15 tweets** — Engagement drops sharply after tweet 12-15. Readers lose interest and stop scrolling. If your content requires more, split into multiple threads.
115
+ - **Splitting sentences across tweets** — "And the most important thing is... (2/10) ...that you always start early." This creates a disjointed reading experience and frustrates readers who see individual tweets out of context.
116
+ - **Hashtags on every tweet** — Using hashtags on all tweets in a thread looks spammy and clutters the reading experience. Limit hashtags to tweet 1 only.
117
+ - **No numbering** — Without numbering, readers do not know how long the thread is and cannot gauge their commitment. Always number tweets.
118
+ - **Links in tweet bodies** — External links reduce distribution. Save links for the final tweet or post them as a reply below the thread.
119
+ - **Not engaging with replies** — A thread that generates replies but gets no author responses signals to the algorithm that the conversation is one-directional.
120
+ - **Posting threads at low-traffic hours** — Threads depend on immediate engagement velocity more than standalone tweets. Posting at 11 PM on a Sunday kills distribution.
121
+ - **Padding with filler tweets** — Tweets like "Let me explain..." without actual content waste reader attention and feel artificially inflated.
122
+ - **Reposting the same thread verbatim** — The algorithm detects duplicates. If revisiting a topic, rewrite with new framing or updated data.