@aksp/opencrew 1.0.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.
Files changed (87) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +24 -0
  3. package/README.md +118 -0
  4. package/bin/opencrew.js +8 -0
  5. package/package.json +57 -0
  6. package/src/cli.js +70 -0
  7. package/src/commands/init.js +97 -0
  8. package/src/commands/update.js +58 -0
  9. package/src/lib/fsx.js +55 -0
  10. package/src/lib/ides.js +120 -0
  11. package/src/lib/paths.js +8 -0
  12. package/src/lib/prompts.js +35 -0
  13. package/src/lib/ui.js +20 -0
  14. package/templates/.env.example +23 -0
  15. package/templates/.mcp.json +8 -0
  16. package/templates/AGENTS.md +105 -0
  17. package/templates/_opencrew/.opencrew-version +1 -0
  18. package/templates/_opencrew/_investigations/.gitkeep +0 -0
  19. package/templates/_opencrew/_memory/company.md +4 -0
  20. package/templates/_opencrew/_memory/preferences.md +9 -0
  21. package/templates/_opencrew/config/playwright.config.json +11 -0
  22. package/templates/_opencrew/core/architect.agent.yaml +110 -0
  23. package/templates/_opencrew/core/best-practices/_catalog.yaml +116 -0
  24. package/templates/_opencrew/core/best-practices/blog-post.md +151 -0
  25. package/templates/_opencrew/core/best-practices/blog-seo.md +146 -0
  26. package/templates/_opencrew/core/best-practices/copywriting.md +446 -0
  27. package/templates/_opencrew/core/best-practices/data-analysis.md +420 -0
  28. package/templates/_opencrew/core/best-practices/email-newsletter.md +136 -0
  29. package/templates/_opencrew/core/best-practices/email-sales.md +127 -0
  30. package/templates/_opencrew/core/best-practices/image-design.md +365 -0
  31. package/templates/_opencrew/core/best-practices/instagram-feed.md +252 -0
  32. package/templates/_opencrew/core/best-practices/instagram-reels.md +128 -0
  33. package/templates/_opencrew/core/best-practices/instagram-stories.md +123 -0
  34. package/templates/_opencrew/core/best-practices/linkedin-article.md +133 -0
  35. package/templates/_opencrew/core/best-practices/linkedin-post.md +138 -0
  36. package/templates/_opencrew/core/best-practices/researching.md +366 -0
  37. package/templates/_opencrew/core/best-practices/review.md +286 -0
  38. package/templates/_opencrew/core/best-practices/social-networks-publishing.md +311 -0
  39. package/templates/_opencrew/core/best-practices/strategist.md +361 -0
  40. package/templates/_opencrew/core/best-practices/technical-writing.md +382 -0
  41. package/templates/_opencrew/core/best-practices/twitter-post.md +122 -0
  42. package/templates/_opencrew/core/best-practices/twitter-thread.md +139 -0
  43. package/templates/_opencrew/core/best-practices/whatsapp-broadcast.md +124 -0
  44. package/templates/_opencrew/core/best-practices/youtube-script.md +139 -0
  45. package/templates/_opencrew/core/best-practices/youtube-shorts.md +129 -0
  46. package/templates/_opencrew/core/prompts/build.prompt.md +547 -0
  47. package/templates/_opencrew/core/prompts/design.prompt.md +469 -0
  48. package/templates/_opencrew/core/prompts/discovery.prompt.md +269 -0
  49. package/templates/_opencrew/core/prompts/sherlock-instagram.md +123 -0
  50. package/templates/_opencrew/core/prompts/sherlock-linkedin.md +73 -0
  51. package/templates/_opencrew/core/prompts/sherlock-shared.md +684 -0
  52. package/templates/_opencrew/core/prompts/sherlock-twitter.md +78 -0
  53. package/templates/_opencrew/core/prompts/sherlock-youtube.md +85 -0
  54. package/templates/_opencrew/core/runner.pipeline.md +611 -0
  55. package/templates/_opencrew/core/skills.engine.md +388 -0
  56. package/templates/_opencrew/logs/.gitkeep +0 -0
  57. package/templates/crews/.gitkeep +0 -0
  58. package/templates/gitignore +8 -0
  59. package/templates/skills/apify/SKILL.md +55 -0
  60. package/templates/skills/blotato/SKILL.md +63 -0
  61. package/templates/skills/canva/SKILL.md +60 -0
  62. package/templates/skills/image-ai-generator/SKILL.md +124 -0
  63. package/templates/skills/image-ai-generator/scripts/generate.py +175 -0
  64. package/templates/skills/image-creator/SKILL.md +155 -0
  65. package/templates/skills/image-fetcher/SKILL.md +91 -0
  66. package/templates/skills/instagram-publisher/SKILL.md +119 -0
  67. package/templates/skills/instagram-publisher/scripts/publish.js +165 -0
  68. package/templates/skills/opencrew-best-practice-creator/SKILL.md +192 -0
  69. package/templates/skills/opencrew-skill-creator/SKILL.md +420 -0
  70. package/templates/skills/opencrew-skill-creator/agents/analyzer.md +274 -0
  71. package/templates/skills/opencrew-skill-creator/agents/comparator.md +202 -0
  72. package/templates/skills/opencrew-skill-creator/agents/grader.md +223 -0
  73. package/templates/skills/opencrew-skill-creator/assets/eval_review.html +146 -0
  74. package/templates/skills/opencrew-skill-creator/eval-viewer/generate_review.py +471 -0
  75. package/templates/skills/opencrew-skill-creator/eval-viewer/viewer.html +1325 -0
  76. package/templates/skills/opencrew-skill-creator/references/schemas.md +430 -0
  77. package/templates/skills/opencrew-skill-creator/references/skill-format.md +235 -0
  78. package/templates/skills/opencrew-skill-creator/scripts/__init__.py +0 -0
  79. package/templates/skills/opencrew-skill-creator/scripts/aggregate_benchmark.py +401 -0
  80. package/templates/skills/opencrew-skill-creator/scripts/quick_validate.py +103 -0
  81. package/templates/skills/opencrew-skill-creator/scripts/run_eval.py +310 -0
  82. package/templates/skills/opencrew-skill-creator/scripts/utils.py +47 -0
  83. package/templates/skills/resend/SKILL.md +80 -0
  84. package/templates/skills/template-designer/SKILL.md +208 -0
  85. package/templates/skills/template-designer/base-templates/model-a.html +27 -0
  86. package/templates/skills/template-designer/base-templates/model-b.html +31 -0
  87. package/templates/skills/template-designer/base-templates/model-c.html +42 -0
@@ -0,0 +1,382 @@
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
+ ## Compact Rules
12
+
13
+ 1. Prioritize clarity over cleverness; use simple, direct language accessible to the target audience.
14
+ 2. Always construct and secure approval for an outline before drafting the full piece.
15
+ 3. Support every claim with concrete evidence, citations, or data; never fabricate statistics.
16
+ 4. Define all technical terms, acronyms, and jargon on their first use.
17
+ 5. Employ progressive disclosure: start with accessible concepts and layer complexity gradually.
18
+ 6. Use subheadings, bullet points, and short paragraphs to make the content highly scannable.
19
+ 7. Include at least one concrete example or code snippet in every major section.
20
+ 8. Conclude with actionable takeaways or specific next steps for the reader.
21
+ 9. Ensure the introduction explicitly promises what the piece will deliver, and fulfill it.
22
+ 10. Adjust vocabulary and depth to match the specific expertise level of the target audience.
23
+ 11. Provide complete metadata: title, meta description, estimated reading time, and tags.
24
+ 12. Never use em dashes; use commas, periods, colons, or parentheses instead.
25
+
26
+ <!-- End Compact Rules. Full reference below. -->
27
+
28
+ # Technical & Long-Form Writing — Best Practices
29
+
30
+ ## Core Principles
31
+
32
+ 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.
33
+
34
+ 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.
35
+
36
+ 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.
37
+
38
+ 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.
39
+
40
+ 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.
41
+
42
+ 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.
43
+
44
+ 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.
45
+
46
+ 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.
47
+
48
+ 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.
49
+
50
+ ## Writing Methodology
51
+
52
+ ### Step 1: Load Context
53
+
54
+ Gather all inputs before writing anything. Required context includes:
55
+ - Topic definition and scope boundaries
56
+ - Target audience (role, expertise level, goals)
57
+ - Brand voice guidelines (if available)
58
+ - Research brief or source materials (from researcher agent)
59
+ - Content format (blog post, tutorial, documentation, white paper)
60
+ - Target word count or depth expectations
61
+ - Any existing content on the topic to avoid duplication
62
+
63
+ ### Step 2: Create Outline
64
+
65
+ Build a detailed outline that maps the argument or teaching progression:
66
+ - Define the hook (why should the reader care right now?)
67
+ - Map sections to a logical flow (chronological, problem-solution, simple-to-complex)
68
+ - Assign approximate word counts per section
69
+ - Identify where evidence, examples, and visuals are needed
70
+ - Mark sections that may need additional research
71
+ - Present the outline for approval before proceeding
72
+
73
+ ### Step 3: Draft Introduction
74
+
75
+ Write the introduction with three components:
76
+ - **Hook:** A concrete scenario, surprising statistic, or relatable problem that pulls the reader in
77
+ - **Promise:** A clear statement of what the reader will learn or gain
78
+ - **Roadmap:** A brief preview of the article structure so the reader knows what to expect
79
+
80
+ ### Step 4: Write Body Sections
81
+
82
+ Draft one section at a time, following the approved outline:
83
+ - Open each section with a clear topic sentence
84
+ - Support claims with evidence (data, citations, examples)
85
+ - Include at least one concrete example per section
86
+ - Use transitional phrases between paragraphs and sections
87
+ - Add subheadings every 200-300 words
88
+ - Keep paragraphs under 4-5 sentences
89
+
90
+ ### Step 5: Draft Conclusion
91
+
92
+ Write a conclusion that delivers on the introduction's promise:
93
+ - Summarize key points without repeating them verbatim
94
+ - Provide an actionable takeaway the reader can implement immediately
95
+ - If appropriate, point to next steps or related resources
96
+ - End on a forward-looking or motivating note, not a summary rehash
97
+
98
+ ### Step 6: Self-Review
99
+
100
+ Review the complete draft against quality criteria:
101
+ - Read the full piece for flow and coherence
102
+ - Check that every section delivers on its outline promise
103
+ - Verify all claims have supporting evidence
104
+ - Confirm no jargon is used without definition
105
+ - Validate subheading frequency and readability
106
+ - Ensure the introduction's promise matches the conclusion's delivery
107
+ - Check reading level appropriateness for the target audience
108
+
109
+ ### Step 7: Compile with Metadata
110
+
111
+ Prepare the final output with all required metadata:
112
+ - Title (compelling, specific, keyword-aware)
113
+ - Subtitle or deck (one-sentence summary)
114
+ - Meta description (for SEO, 150-160 characters)
115
+ - Suggested tags or categories
116
+ - Estimated reading time
117
+ - The complete article body
118
+
119
+ ## Decision Criteria
120
+
121
+ - **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.
122
+ - **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.
123
+ - **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.
124
+ - **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.
125
+ - **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.
126
+
127
+ ## Quality Criteria
128
+
129
+ Before delivering any piece of content, verify the following:
130
+
131
+ - [ ] **Clear structure.** The piece has a defined introduction, body sections, and conclusion. The reader can predict the flow from the introduction.
132
+ - [ ] **Examples in every section.** Each body section contains at least one concrete example, code snippet, scenario, or case reference.
133
+ - [ ] **No undefined jargon.** Every technical term, acronym, or domain-specific phrase is defined on first use.
134
+ - [ ] **Appropriate subheading frequency.** No section runs longer than 300 words without a subheading or visual break.
135
+ - [ ] **Evidence-backed claims.** Quantitative claims reference a source. Qualitative claims are supported by examples or expert references.
136
+ - [ ] **Actionable takeaway present.** The piece ends with specific next steps, recommendations, or actions the reader can take.
137
+ - [ ] **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.
138
+ - [ ] **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.
139
+ - [ ] **No em dashes.** The entire output has been checked for em dashes and none are present.
140
+ - [ ] **Introduction promise matches conclusion delivery.** Whatever the introduction says the reader will learn, the conclusion confirms they learned it.
141
+ - [ ] **Transitions between sections.** Each section connects logically to the next. The reader never wonders "why am I reading this now?"
142
+ - [ ] **Metadata complete.** Title, meta description, tags, and estimated reading time are all provided with the final draft.
143
+
144
+ ## Output Examples
145
+
146
+ ### Example 1: Blog Post Introduction + Outline + First Section
147
+
148
+ **Title:** How Connection Pooling Cuts Your Database Latency in Half
149
+
150
+ **Meta description:** Learn how connection pooling works, why it reduces database latency, and how to implement it in Node.js with practical code examples.
151
+
152
+ **Estimated reading time:** 8 minutes
153
+
154
+ ---
155
+
156
+ **Introduction:**
157
+
158
+ 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.
159
+
160
+ 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.
161
+
162
+ 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.
163
+
164
+ ---
165
+
166
+ **Outline:**
167
+
168
+ 1. The cost of a database connection (what happens during setup, measured latency)
169
+ 2. How connection pooling works (pool lifecycle, borrow/return model, idle management)
170
+ 3. Benchmark results (pooled vs. unpooled across load levels)
171
+ 4. Implementation in Node.js (code walkthrough with pg-pool)
172
+ 5. Production considerations (pool sizing, error handling, monitoring)
173
+ 6. Common pitfalls (connection leaks, pool exhaustion, stale connections)
174
+ 7. Key takeaways and next steps
175
+
176
+ ---
177
+
178
+ **Section 1: The Cost of a Database Connection**
179
+
180
+ When your application calls `db.connect()`, the following sequence executes before a single query can run:
181
+
182
+ 1. **DNS resolution** resolves the database hostname to an IP address (1-10ms)
183
+ 2. **TCP handshake** establishes the network connection with a three-way SYN/SYN-ACK/ACK exchange (1-5ms locally, 10-50ms cross-region)
184
+ 3. **TLS negotiation** sets up encrypted communication if SSL is enabled (5-15ms)
185
+ 4. **Authentication** sends credentials and receives confirmation (2-10ms)
186
+ 5. **Protocol initialization** configures session parameters like character set and timezone (1-5ms)
187
+
188
+ Total setup cost per connection: **10-90ms** depending on network topology and security configuration.
189
+
190
+ 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.
191
+
192
+ 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.
193
+
194
+ 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.
195
+
196
+ ### Example 2: Tutorial Section with Step-by-Step Instructions
197
+
198
+ **Section: Setting Up Automated Backups with Cron and Restic**
199
+
200
+ Before you begin, make sure you have the following prerequisites installed on your server:
201
+
202
+ - **Restic** (version 0.14 or later): the backup tool that handles deduplication and encryption
203
+ - **Cron**: the standard Unix job scheduler (pre-installed on most Linux distributions)
204
+ - **An S3-compatible storage bucket**: where your encrypted backups will be stored (AWS S3, MinIO, or Backblaze B2 all work)
205
+
206
+ If you do not have Restic installed, run the following command on Ubuntu/Debian:
207
+
208
+ ```bash
209
+ sudo apt update && sudo apt install restic
210
+ ```
211
+
212
+ Verify the installation by checking the version:
213
+
214
+ ```bash
215
+ restic version
216
+ # Expected output: restic 0.16.2 (or later)
217
+ ```
218
+
219
+ **Step 1: Initialize the backup repository.**
220
+
221
+ 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:
222
+
223
+ ```bash
224
+ export AWS_ACCESS_KEY_ID="your-access-key"
225
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
226
+
227
+ restic -r s3:s3.amazonaws.com/your-bucket-name/backups init
228
+ ```
229
+
230
+ 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).
231
+
232
+ **Step 2: Create the backup script.**
233
+
234
+ 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`:
235
+
236
+ ```bash
237
+ #!/bin/bash
238
+ set -euo pipefail
239
+
240
+ # Configuration
241
+ export AWS_ACCESS_KEY_ID="your-access-key"
242
+ export AWS_SECRET_ACCESS_KEY="your-secret-key"
243
+ export RESTIC_REPOSITORY="s3:s3.amazonaws.com/your-bucket-name/backups"
244
+ export RESTIC_PASSWORD_FILE="/etc/restic/password.txt"
245
+
246
+ # Directories to back up
247
+ BACKUP_PATHS="/var/www /etc/nginx /home"
248
+
249
+ # Directories to exclude
250
+ EXCLUDE_PATTERNS="--exclude='*.tmp' --exclude='node_modules' --exclude='.cache'"
251
+
252
+ # Run the backup
253
+ restic backup $BACKUP_PATHS $EXCLUDE_PATTERNS \
254
+ --tag "automated" \
255
+ --tag "$(hostname)" \
256
+ 2>&1 | logger -t restic-backup
257
+
258
+ # Prune old snapshots: keep 7 daily, 4 weekly, 6 monthly
259
+ restic forget \
260
+ --keep-daily 7 \
261
+ --keep-weekly 4 \
262
+ --keep-monthly 6 \
263
+ --prune \
264
+ 2>&1 | logger -t restic-prune
265
+
266
+ echo "Backup completed at $(date)" | logger -t restic-backup
267
+ ```
268
+
269
+ 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.
270
+
271
+ **Step 3: Set file permissions.**
272
+
273
+ Your backup script contains storage credentials, so restrict its permissions to root only:
274
+
275
+ ```bash
276
+ sudo chmod 700 /opt/scripts/backup.sh
277
+ sudo chown root:root /opt/scripts/backup.sh
278
+ ```
279
+
280
+ Store the repository password in a separate file with equally restrictive permissions:
281
+
282
+ ```bash
283
+ echo "your-repository-password" | sudo tee /etc/restic/password.txt > /dev/null
284
+ sudo chmod 600 /etc/restic/password.txt
285
+ sudo chown root:root /etc/restic/password.txt
286
+ ```
287
+
288
+ **Step 4: Schedule the backup with Cron.**
289
+
290
+ Open the root crontab and add a daily backup schedule:
291
+
292
+ ```bash
293
+ sudo crontab -e
294
+ ```
295
+
296
+ Add this line to run backups every day at 2:00 AM server time:
297
+
298
+ ```cron
299
+ 0 2 * * * /opt/scripts/backup.sh
300
+ ```
301
+
302
+ 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.
303
+
304
+ **Step 5: Verify the setup.**
305
+
306
+ Run the backup script manually to confirm everything works before relying on the cron schedule:
307
+
308
+ ```bash
309
+ sudo /opt/scripts/backup.sh
310
+ ```
311
+
312
+ After the script completes, verify that snapshots appear in your repository:
313
+
314
+ ```bash
315
+ restic -r s3:s3.amazonaws.com/your-bucket-name/backups snapshots
316
+ ```
317
+
318
+ 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.
319
+
320
+ ## Anti-Patterns
321
+
322
+ ### Never Do
323
+
324
+ 1. **Write without an outline.** Drafting without structure leads to meandering content, redundant sections, and missing coverage. Always outline first, get approval, then write.
325
+
326
+ 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."
327
+
328
+ 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.
329
+
330
+ 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.
331
+
332
+ 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.
333
+
334
+ 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.
335
+
336
+ 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.
337
+
338
+ 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.
339
+
340
+ ### Always Do
341
+
342
+ 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.
343
+
344
+ 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.
345
+
346
+ 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.
347
+
348
+ 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.
349
+
350
+ 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.
351
+
352
+ 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.
353
+
354
+ ## Vocabulary Guidance
355
+
356
+ ### Use
357
+
358
+ - **Concrete examples** to anchor abstract concepts: "For instance, if your API returns a 429 status code, that means..."
359
+ - **Scenario-based framing** to build relevance: "Consider this scenario: your team just shipped a feature and usage spikes overnight..."
360
+ - **Transitional phrases** to maintain flow between paragraphs and sections: "Building on this foundation...", "With that context in mind...", "This brings us to..."
361
+ - **Active voice** as the default for direct, clear communication: "The function validates the input" not "The input is validated by the function."
362
+ - **Specific numbers and data** over vague qualifiers: "Reduced load time by 40%" not "Significantly improved performance."
363
+ - **Reader-addressing language** to maintain engagement: "You will notice...", "At this point, you have...", "Your next step is..."
364
+ - **Short sentences for key points.** When stating something important, keep it brief. Let the sentence stand alone.
365
+
366
+ ### Avoid
367
+
368
+ - **Jargon without definition.** If a term requires domain knowledge, define it inline on first use. No exceptions.
369
+ - **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.
370
+ - **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.
371
+ - **Passive voice without reason.** Use passive voice only when the actor is genuinely unknown or irrelevant. Otherwise, name the subject.
372
+ - **"In conclusion" or "To summarize."** The conclusion should feel like a natural landing, not an announcement. Show the ending through content, not labels.
373
+ - **Walls of text.** Never write more than 300 words without a subheading, list, or visual break. Dense paragraphs lose readers.
374
+ - **Rhetorical questions as filler.** Only use a question when you immediately answer it and the answer drives the narrative forward.
375
+ - **Exclamation marks.** Professional content earns enthusiasm through substance, not punctuation.
376
+
377
+ ### Tone Rules
378
+
379
+ 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.
380
+ 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.
381
+ 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..."
382
+ 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,122 @@
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
+ ## Compact Rules
18
+
19
+ 1. Front-load value in the first 5-8 words to immediately capture attention.
20
+ 2. Focus on exactly one clear idea per tweet; if you have multiple points, write a thread instead.
21
+ 3. Aim for ~260 effective characters to leave room for hashtags.
22
+ 4. Strategically use line breaks to improve readability and create natural dwell time.
23
+ 5. Limit hashtags to 2-3 specific/niche tags placed at the very end of the tweet.
24
+ 6. Never place external links in the tweet body; put them in a reply or use "link in bio."
25
+ 7. End with a question, bold statement, or implication that invites replies and engagement.
26
+ 8. Attach images or videos whenever possible to significantly boost algorithmic impressions.
27
+ 9. When quote tweeting, add your own unique insight or data rather than just agreeing.
28
+ 10. Reply to comments within the first 15-30 minutes to maximize early algorithmic momentum.
29
+ 11. Post on weekdays (Tuesday-Thursday) between 8-10 AM or 12-1 PM EST for B2B/professional content.
30
+ 12. Limit posting frequency to a sustainable 1-3 tweets per day.
31
+
32
+ <!-- End Compact Rules. Full reference below. -->
33
+
34
+ ## Platform Rules
35
+
36
+ - Engagement is weighted: Replies > Bookmarks > Retweets > Likes. Design tweets that provoke replies and are worth bookmarking.
37
+ - Tweets with images or video get significantly more impressions than text-only tweets. Always consider whether a visual element strengthens the tweet.
38
+ - 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.
39
+ - 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.
40
+ - Dwell time matters. Tweets that make people stop scrolling and read get algorithmic boosts. Multi-line tweets with line breaks create natural dwell time.
41
+ - Tweets from accounts that actively reply to others get higher baseline reach. Engagement is a two-way signal.
42
+ - 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.
43
+ - Frequency: 1-3 tweets per day is a sustainable, high-performing cadence.
44
+
45
+ ## Content Structure
46
+
47
+ ### Single Tweet Formats
48
+
49
+ - **Hot take**: Contrarian opinion that sparks debate. "Most people think X. The truth is Y."
50
+ - **Question**: Simple, relatable question that invites replies. "What is the one thing you wish you knew about [topic]?"
51
+ - **Listicle**: "5 things I learned about X:" followed by a numbered list, one item per line.
52
+ - **Quote + take**: Share a quote and add your unique perspective in 1-2 sentences.
53
+ - **Data point**: One surprising stat with your interpretation. "[Stat]. Here is what most people miss:"
54
+ - **Before/After**: Contrast two states or perspectives. "Before: [old way]. Now: [new insight]."
55
+
56
+ ### Quote Tweet Structure
57
+
58
+ 1. Highlight the key point from the original tweet.
59
+ 2. Add your unique angle, experience, or data.
60
+ 3. Keep under 200 characters to leave room for the quoted content's context.
61
+
62
+ ### Tweet Anatomy
63
+
64
+ - **Opening words** — The first 5-8 words decide whether someone reads further. Front-load the value or tension.
65
+ - **Body** — One idea only. Develop it clearly in 1-3 sentences maximum.
66
+ - **Closer** — A question, bold statement, or implication that invites engagement.
67
+
68
+ ## Writing Guidelines
69
+
70
+ - **One idea per tweet.** Clarity beats cleverness. If you need multiple points, write a thread instead.
71
+ - Front-load the value. The first few words of the tweet determine whether someone reads the rest. Start with the strongest word or phrase.
72
+ - Use line breaks strategically for readability. A tweet formatted as 2-3 short lines reads better than one dense paragraph.
73
+ - Leave approximately 20 characters of headroom for hashtags. Aim for ~260 effective characters of content.
74
+ - 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.
75
+ - Focus on industry/topic-specific hashtags, not generic ones. #ContentStrategy beats #Success.
76
+ - When quote tweeting, add genuine insight. Not "This!" or "So true." Add your experience, a counter-point, or additional data.
77
+ - Write tweets that invite replies: questions, fill-in-the-blank prompts, "unpopular opinion" takes, and debate-starting claims.
78
+ - Reply to comments on your tweets within the first hour to boost algorithmic momentum.
79
+
80
+ ## Output Format
81
+
82
+ ```
83
+ === TWEET ===
84
+ [Tweet text — max 280 characters. Front-load value. One clear idea. Use line breaks for readability.]
85
+
86
+ === HASHTAGS ===
87
+ #hashtag1 #hashtag2
88
+ [2-3 hashtags, placed at the end of the tweet or noted separately]
89
+
90
+ === IMAGE (optional) ===
91
+ [Image description — what the visual shows, composition, text overlay if any]
92
+ [Alt text for accessibility — max 1,000 characters]
93
+
94
+ === QUOTE TWEET (if applicable) ===
95
+ [URL or reference to the original tweet being quoted]
96
+ [Your commentary — max 200 characters to leave room for context]
97
+ ```
98
+
99
+ ## Quality Criteria
100
+
101
+ - [ ] Tweet is 280 characters or fewer, with ~260 characters of content leaving room for hashtags
102
+ - [ ] First 5-8 words create enough interest to finish reading the tweet
103
+ - [ ] Tweet contains exactly one clear idea, not multiple crammed together
104
+ - [ ] Hashtags are 2-3 maximum and topic-specific, not generic
105
+ - [ ] No external links appear in the tweet body (links go in replies)
106
+ - [ ] Tweet is formatted with line breaks for readability where appropriate
107
+ - [ ] Content invites a reply, bookmark, or retweet through its framing
108
+ - [ ] Quote tweets (if used) add genuine insight, not just agreement
109
+ - [ ] Image alt text is included if an image is attached
110
+ - [ ] Tweet avoids filler words and gets to the point immediately
111
+
112
+ ## Anti-Patterns
113
+
114
+ - **Links in tweet body** — Dramatically reduces reach due to algorithmic suppression. Post the link as a reply or use "link in bio."
115
+ - **Excessive emojis** — More than 2-3 emojis per tweet looks unprofessional and reduces credibility in professional niches.
116
+ - **Hashtag spam** — More than 3 hashtags per tweet signals low-quality content and reduces engagement rather than increasing it.
117
+ - **Reposting the same content verbatim** — The algorithm detects duplicate content and suppresses it. Rephrase or add new context when revisiting a topic.
118
+ - **Not engaging with replies** — Failing to respond to comments signals to the algorithm that your content does not generate real conversation, reducing future distribution.
119
+ - **Using URL shorteners** — Twitter/X already shortens links. Third-party shorteners look suspicious and may be flagged as spam.
120
+ - **Auto-cross-posting from other platforms** — Truncated content and broken formatting from Instagram or LinkedIn cross-posts damage credibility and get no engagement.
121
+ - **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.
122
+ - **Posting during major breaking news** — Your content will be buried under breaking news engagement. Check current events before posting.
@@ -0,0 +1,139 @@
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
+ ## Compact Rules
16
+
17
+ 1. Write a standalone, compelling hook for Tweet 1; it determines the success of the entire thread.
18
+ 2. Keep threads between 5-15 tweets; engagement drops sharply beyond 15.
19
+ 3. Number every tweet (e.g., 1/10 or 1/N) so readers understand the total length.
20
+ 4. Ensure each tweet contains exactly one complete thought; never split sentences across tweets.
21
+ 5. Limit hashtags (2-3 max) to the first tweet only to avoid a spammy appearance.
22
+ 6. Write conversationally, using "I", contractions, and short sentences.
23
+ 7. Summarize the 3-5 key takeaways in bullet points in the second-to-last tweet.
24
+ 8. Include a clear CTA in the final tweet asking readers to retweet the first tweet, follow, or bookmark.
25
+ 9. Place any external links exclusively in the final tweet or as a reply below the thread.
26
+ 10. Reply to comments on the thread within the first hour to boost algorithmic visibility.
27
+ 11. Avoid posting during low-traffic hours or major breaking news cycles.
28
+ 12. Reply to your own thread within an hour to add summary or context and boost visibility.
29
+
30
+ <!-- End Compact Rules. Full reference below. -->
31
+
32
+ ## Platform Rules
33
+
34
+ - Threads receive 2-3x more impressions than standalone tweets. The multi-tweet format increases dwell time and creates multiple engagement touchpoints.
35
+ - Engagement is weighted: Replies > Bookmarks > Retweets > Likes. Threads that are bookmark-worthy (educational, reference-quality) get sustained distribution.
36
+ - 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.
37
+ - 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.
38
+ - The algorithm penalizes tweets with external links. If including links, place them in the final tweet or as a reply below the thread.
39
+ - Threads from accounts that actively engage with others' content get higher baseline reach.
40
+ - 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.
41
+ - Avoid posting threads during low-traffic hours or major breaking news cycles.
42
+
43
+ ## Content Structure
44
+
45
+ ### Thread Architecture
46
+
47
+ 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.
48
+ 2. **Context tweet (Tweet 2/N)** — Brief background establishing why this matters and who should keep reading. Sets the stage for the body.
49
+ 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.
50
+ 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.
51
+ 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.
52
+
53
+ ### Tweet-Level Structure
54
+
55
+ - Each individual tweet in the thread should be a complete thought. Avoid splitting a sentence across two tweets.
56
+ - Use numbering format (1/10, 2/10... or 1., 2., 3...) so readers know the thread length and their progress.
57
+ - Start each tweet with the key point, then support it. Do not bury the insight at the end.
58
+
59
+ 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.
60
+
61
+ ## Writing Guidelines
62
+
63
+ - **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.
64
+ - Number every tweet so readers know the thread length. "1/10" or "(1)" format both work. Knowing the length helps readers decide to commit.
65
+ - 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.
66
+ - 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.
67
+ - 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.
68
+ - Write conversationally. Threads are a storytelling format. Use "I" instead of "one," contractions instead of formal language, and short sentences instead of complex ones.
69
+ - 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.
70
+ - Keep each tweet under 280 characters but aim for substance. A tweet that is only 40 characters feels like padding.
71
+ - Reply to comments on the thread within the first hour. Engagement velocity in the early window determines total distribution.
72
+
73
+ ## Output Format
74
+
75
+ ```
76
+ === THREAD ===
77
+ TWEET 1/N (Hook):
78
+ [Standalone compelling statement — bold claim, surprising stat, or curiosity gap. Must work even if no one reads the rest. Max 280 chars.]
79
+
80
+ #hashtag1 #hashtag2
81
+
82
+ TWEET 2/N (Context):
83
+ [Why this matters. Who should read this. Brief background. Max 280 chars.]
84
+
85
+ TWEET 3/N (Point 1):
86
+ [First key insight — one clear point with support. Max 280 chars.]
87
+
88
+ TWEET 4/N (Point 2):
89
+ [Second key insight — one clear point with support. Max 280 chars.]
90
+
91
+ TWEET 5/N (Point 3):
92
+ [Third key insight — one clear point with support. Max 280 chars.]
93
+
94
+ ...
95
+
96
+ TWEET (N-1)/N (Summary):
97
+ Key takeaways:
98
+ - [Takeaway 1]
99
+ - [Takeaway 2]
100
+ - [Takeaway 3]
101
+
102
+ TWEET N/N (CTA):
103
+ [If this was valuable, retweet tweet 1 to share it with your audience.
104
+
105
+ Follow @[handle] for more on [topic].
106
+
107
+ Bookmark this thread for reference.]
108
+
109
+ === THREAD NOTES ===
110
+ Total tweets: [N]
111
+ Primary topic: [Topic]
112
+ Target audience: [Who this is for]
113
+ ```
114
+
115
+ ## Quality Criteria
116
+
117
+ - [ ] First tweet works as a compelling standalone statement, even without the rest of the thread
118
+ - [ ] Thread is 5-15 tweets long (not shorter, not longer)
119
+ - [ ] Every tweet contains exactly one clear point or insight
120
+ - [ ] Tweets are numbered (1/N format) so readers know the length
121
+ - [ ] Hashtags appear only on the first tweet (2-3 maximum)
122
+ - [ ] No tweet splits a sentence across tweet boundaries
123
+ - [ ] Summary tweet recaps key takeaways in bullet format
124
+ - [ ] Final tweet includes a CTA: retweet tweet 1, follow, or bookmark
125
+ - [ ] No external links in tweet bodies (links go in the final tweet or a reply)
126
+ - [ ] Each tweet delivers standalone value while advancing the thread's narrative
127
+
128
+ ## Anti-Patterns
129
+
130
+ - **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.
131
+ - **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.
132
+ - **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.
133
+ - **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.
134
+ - **No numbering** — Without numbering, readers do not know how long the thread is and cannot gauge their commitment. Always number tweets.
135
+ - **Links in tweet bodies** — External links reduce distribution. Save links for the final tweet or post them as a reply below the thread.
136
+ - **Not engaging with replies** — A thread that generates replies but gets no author responses signals to the algorithm that the conversation is one-directional.
137
+ - **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.
138
+ - **Padding with filler tweets** — Tweets like "Let me explain..." without actual content waste reader attention and feel artificially inflated.
139
+ - **Reposting the same thread verbatim** — The algorithm detects duplicates. If revisiting a topic, rewrite with new framing or updated data.