fraim-framework 2.0.67 → 2.0.68

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 (254) hide show
  1. package/package.json +1 -2
  2. package/dist/registry/ai-manager-rules/customer-development-phases/phase1-customer-profiling.md +0 -101
  3. package/dist/registry/ai-manager-rules/customer-development-phases/phase2-platform-discovery.md +0 -235
  4. package/dist/registry/ai-manager-rules/customer-development-phases/phase3-prospect-qualification.md +0 -243
  5. package/dist/registry/ai-manager-rules/customer-development-phases/phase4-inventory-compilation.md +0 -206
  6. package/dist/registry/ai-manager-rules/design-phases/design-completeness-review.md +0 -73
  7. package/dist/registry/ai-manager-rules/design-phases/design-design.md +0 -145
  8. package/dist/registry/ai-manager-rules/design-phases/design.md +0 -108
  9. package/dist/registry/ai-manager-rules/design-phases/finalize.md +0 -60
  10. package/dist/registry/ai-manager-rules/design-phases/validate.md +0 -125
  11. package/dist/registry/ai-manager-rules/design.json +0 -97
  12. package/dist/registry/ai-manager-rules/implement-phases/code.md +0 -323
  13. package/dist/registry/ai-manager-rules/implement-phases/completeness-review.md +0 -94
  14. package/dist/registry/ai-manager-rules/implement-phases/finalize.md +0 -177
  15. package/dist/registry/ai-manager-rules/implement-phases/implement-code.md +0 -283
  16. package/dist/registry/ai-manager-rules/implement-phases/implement-completeness-review.md +0 -120
  17. package/dist/registry/ai-manager-rules/implement-phases/implement-regression.md +0 -173
  18. package/dist/registry/ai-manager-rules/implement-phases/implement-repro.md +0 -104
  19. package/dist/registry/ai-manager-rules/implement-phases/implement-scoping.md +0 -100
  20. package/dist/registry/ai-manager-rules/implement-phases/implement-smoke.md +0 -237
  21. package/dist/registry/ai-manager-rules/implement-phases/implement-spike.md +0 -121
  22. package/dist/registry/ai-manager-rules/implement-phases/implement-validate.md +0 -375
  23. package/dist/registry/ai-manager-rules/implement-phases/quality-review.md +0 -304
  24. package/dist/registry/ai-manager-rules/implement-phases/regression.md +0 -159
  25. package/dist/registry/ai-manager-rules/implement-phases/repro.md +0 -101
  26. package/dist/registry/ai-manager-rules/implement-phases/scoping.md +0 -93
  27. package/dist/registry/ai-manager-rules/implement-phases/smoke.md +0 -225
  28. package/dist/registry/ai-manager-rules/implement-phases/spike.md +0 -118
  29. package/dist/registry/ai-manager-rules/implement-phases/validate.md +0 -347
  30. package/dist/registry/ai-manager-rules/implement.json +0 -153
  31. package/dist/registry/ai-manager-rules/retrospective.md +0 -116
  32. package/dist/registry/ai-manager-rules/shared-phases/address-pr-feedback.md +0 -188
  33. package/dist/registry/ai-manager-rules/shared-phases/finalize.md +0 -169
  34. package/dist/registry/ai-manager-rules/shared-phases/submit-pr.md +0 -202
  35. package/dist/registry/ai-manager-rules/shared-phases/wait-for-pr-review.md +0 -170
  36. package/dist/registry/ai-manager-rules/spec-phases/finalize.md +0 -60
  37. package/dist/registry/ai-manager-rules/spec-phases/spec-competitor-analysis.md +0 -105
  38. package/dist/registry/ai-manager-rules/spec-phases/spec-completeness-review.md +0 -66
  39. package/dist/registry/ai-manager-rules/spec-phases/spec-spec.md +0 -139
  40. package/dist/registry/ai-manager-rules/spec-phases/spec.md +0 -102
  41. package/dist/registry/ai-manager-rules/spec-phases/validate.md +0 -118
  42. package/dist/registry/ai-manager-rules/spec.json +0 -112
  43. package/dist/registry/ai-manager-rules/test.json +0 -98
  44. package/dist/registry/ai-manager-rules/user-survey-phases/phase1-survey-scoping.md +0 -60
  45. package/dist/registry/ai-manager-rules/user-survey-phases/phase2-survey-build-linkedin.md +0 -23
  46. package/dist/registry/ai-manager-rules/user-survey-phases/phase3-survey-build-reddit.md +0 -22
  47. package/dist/registry/ai-manager-rules/user-survey-phases/phase4-survey-build-x.md +0 -21
  48. package/dist/registry/ai-manager-rules/user-survey-phases/phase5-survey-build-facebook.md +0 -19
  49. package/dist/registry/ai-manager-rules/user-survey-phases/phase6-survey-build-custom.md +0 -15
  50. package/dist/registry/ai-manager-rules/user-survey-phases/phase7-survey-dispatch.md +0 -45
  51. package/dist/registry/delivery/address-feedback.md +0 -83
  52. package/dist/registry/delivery/retrospective.md +0 -78
  53. package/dist/registry/delivery/submit.md +0 -79
  54. package/dist/registry/providers/ado.json +0 -19
  55. package/dist/registry/providers/delivery-conversation.json +0 -9
  56. package/dist/registry/providers/delivery-pr.json +0 -9
  57. package/dist/registry/providers/github.json +0 -19
  58. package/dist/registry/rules/agent-success-criteria.md +0 -101
  59. package/dist/registry/rules/agent-testing-guidelines.md +0 -502
  60. package/dist/registry/rules/architecture.md +0 -126
  61. package/dist/registry/rules/communication.md +0 -122
  62. package/dist/registry/rules/continuous-learning.md +0 -55
  63. package/dist/registry/rules/debugging-multitenancy-issues.md +0 -85
  64. package/dist/registry/rules/ephemeral-execution.md +0 -54
  65. package/dist/registry/rules/git-safe-commands.md +0 -34
  66. package/dist/registry/rules/hitl-ppe-record-analysis.md +0 -302
  67. package/dist/registry/rules/integrity-and-test-ethics.md +0 -275
  68. package/dist/registry/rules/local-development.md +0 -275
  69. package/dist/registry/rules/mandatory-pre-completion-reflection.md +0 -193
  70. package/dist/registry/rules/merge-requirements.md +0 -238
  71. package/dist/registry/rules/simplicity.md +0 -118
  72. package/dist/registry/rules/software-development-lifecycle.md +0 -105
  73. package/dist/registry/rules/spike-first-development.md +0 -205
  74. package/dist/registry/rules/successful-debugging-patterns.md +0 -488
  75. package/dist/registry/scripts/build-scripts-generator.js +0 -205
  76. package/dist/registry/scripts/cleanup-branch.js +0 -287
  77. package/dist/registry/scripts/evaluate-code-quality.js +0 -66
  78. package/dist/registry/scripts/exec-with-timeout.js +0 -142
  79. package/dist/registry/scripts/fraim-config.js +0 -61
  80. package/dist/registry/scripts/generate-engagement-emails.js +0 -705
  81. package/dist/registry/scripts/generic-issues-api.js +0 -100
  82. package/dist/registry/scripts/newsletter-helpers.js +0 -671
  83. package/dist/registry/scripts/openapi-generator.js +0 -664
  84. package/dist/registry/scripts/performance/profile-server.js +0 -390
  85. package/dist/registry/scripts/profile-server.js +0 -389
  86. package/dist/registry/scripts/run-thank-you-workflow.js +0 -92
  87. package/dist/registry/scripts/send-newsletter-simple.js +0 -85
  88. package/dist/registry/scripts/send-thank-you-emails.js +0 -54
  89. package/dist/registry/scripts/validate-openapi-limits.js +0 -311
  90. package/dist/registry/scripts/validate-test-coverage.js +0 -262
  91. package/dist/registry/scripts/verify-test-coverage.js +0 -66
  92. package/dist/registry/stubs/workflows/azure/cost-optimization.md +0 -11
  93. package/dist/registry/stubs/workflows/bootstrap/create-architecture.md +0 -11
  94. package/dist/registry/stubs/workflows/bootstrap/detect-broken-windows.md +0 -11
  95. package/dist/registry/stubs/workflows/bootstrap/evaluate-code-quality.md +0 -11
  96. package/dist/registry/stubs/workflows/bootstrap/verify-test-coverage.md +0 -11
  97. package/dist/registry/stubs/workflows/brainstorming/blue-sky-brainstorming.md +0 -11
  98. package/dist/registry/stubs/workflows/brainstorming/codebase-brainstorming.md +0 -11
  99. package/dist/registry/stubs/workflows/business-development/create-business-plan.md +0 -11
  100. package/dist/registry/stubs/workflows/business-development/ideate-business-opportunity.md +0 -11
  101. package/dist/registry/stubs/workflows/business-development/price-product.md +0 -18
  102. package/dist/registry/stubs/workflows/compliance/detect-compliance-requirements.md +0 -11
  103. package/dist/registry/stubs/workflows/compliance/generate-audit-evidence.md +0 -11
  104. package/dist/registry/stubs/workflows/compliance/soc2-evidence-generator.md +0 -11
  105. package/dist/registry/stubs/workflows/customer-development/insight-analysis.md +0 -11
  106. package/dist/registry/stubs/workflows/customer-development/insight-triage.md +0 -11
  107. package/dist/registry/stubs/workflows/customer-development/interview-preparation.md +0 -11
  108. package/dist/registry/stubs/workflows/customer-development/linkedin-outreach.md +0 -11
  109. package/dist/registry/stubs/workflows/customer-development/strategic-brainstorming.md +0 -11
  110. package/dist/registry/stubs/workflows/customer-development/thank-customers.md +0 -11
  111. package/dist/registry/stubs/workflows/customer-development/user-survey-dispatch.md +0 -11
  112. package/dist/registry/stubs/workflows/customer-development/users-to-target.md +0 -11
  113. package/dist/registry/stubs/workflows/customer-development/weekly-newsletter.md +0 -11
  114. package/dist/registry/stubs/workflows/deploy/cloud-deployment.md +0 -11
  115. package/dist/registry/stubs/workflows/improve-fraim/contribute.md +0 -11
  116. package/dist/registry/stubs/workflows/improve-fraim/file-issue.md +0 -11
  117. package/dist/registry/stubs/workflows/learning/build-skillset.md +0 -11
  118. package/dist/registry/stubs/workflows/learning/synthesize-learnings.md +0 -11
  119. package/dist/registry/stubs/workflows/legal/contract-review-analysis.md +0 -11
  120. package/dist/registry/stubs/workflows/legal/nda.md +0 -11
  121. package/dist/registry/stubs/workflows/legal/patent-filing.md +0 -11
  122. package/dist/registry/stubs/workflows/legal/saas-contract-development.md +0 -11
  123. package/dist/registry/stubs/workflows/legal/trademark-filing.md +0 -11
  124. package/dist/registry/stubs/workflows/marketing/content-creation.md +0 -11
  125. package/dist/registry/stubs/workflows/marketing/convert-to-pdf.md +0 -11
  126. package/dist/registry/stubs/workflows/marketing/create-modern-website.md +0 -11
  127. package/dist/registry/stubs/workflows/marketing/domain-registration.md +0 -11
  128. package/dist/registry/stubs/workflows/marketing/evangelize.md +0 -11
  129. package/dist/registry/stubs/workflows/marketing/hbr-article.md +0 -11
  130. package/dist/registry/stubs/workflows/marketing/launch-checklist.md +0 -11
  131. package/dist/registry/stubs/workflows/marketing/marketing-strategy.md +0 -11
  132. package/dist/registry/stubs/workflows/marketing/storytelling.md +0 -11
  133. package/dist/registry/stubs/workflows/performance/analyze-performance.md +0 -11
  134. package/dist/registry/stubs/workflows/product-building/design.md +0 -11
  135. package/dist/registry/stubs/workflows/product-building/implement.md +0 -11
  136. package/dist/registry/stubs/workflows/product-building/iterate-on-pr-comments.md +0 -11
  137. package/dist/registry/stubs/workflows/product-building/prep-issue.md +0 -11
  138. package/dist/registry/stubs/workflows/product-building/prototype.md +0 -11
  139. package/dist/registry/stubs/workflows/product-building/resolve.md +0 -11
  140. package/dist/registry/stubs/workflows/product-building/retrospect.md +0 -11
  141. package/dist/registry/stubs/workflows/product-building/spec.md +0 -11
  142. package/dist/registry/stubs/workflows/product-building/test.md +0 -11
  143. package/dist/registry/stubs/workflows/productivity-report/productivity-report.md +0 -11
  144. package/dist/registry/stubs/workflows/quality-assurance/browser-validation.md +0 -11
  145. package/dist/registry/stubs/workflows/quality-assurance/iterative-improvement-cycle.md +0 -11
  146. package/dist/registry/stubs/workflows/replicate/replicate-discovery.md +0 -11
  147. package/dist/registry/stubs/workflows/replicate/replicate-to-issues.md +0 -11
  148. package/dist/registry/stubs/workflows/reviewer/review-implementation-vs-design-spec.md +0 -11
  149. package/dist/registry/stubs/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -11
  150. package/dist/registry/stubs/workflows/startup-credits/aws-activate-application.md +0 -11
  151. package/dist/registry/stubs/workflows/startup-credits/google-cloud-application.md +0 -11
  152. package/dist/registry/stubs/workflows/startup-credits/microsoft-azure-application.md +0 -11
  153. package/dist/registry/templates/bootstrap/ARCHITECTURE-TEMPLATE.md +0 -53
  154. package/dist/registry/templates/bootstrap/CODE-QUALITY-REPORT-TEMPLATE.md +0 -37
  155. package/dist/registry/templates/bootstrap/TEST-COVERAGE-REPORT-TEMPLATE.md +0 -35
  156. package/dist/registry/templates/business-development/IDEATION-REPORT-TEMPLATE.md +0 -29
  157. package/dist/registry/templates/business-development/PRICING-STRATEGY-TEMPLATE.md +0 -126
  158. package/dist/registry/templates/customer-development/customer-interview-template.md +0 -99
  159. package/dist/registry/templates/customer-development/customer-persona-template.md +0 -69
  160. package/dist/registry/templates/customer-development/follow-up-email-templates.md +0 -132
  161. package/dist/registry/templates/customer-development/insight-analysis-template.md +0 -74
  162. package/dist/registry/templates/customer-development/prospect-inventory-template.csv +0 -3
  163. package/dist/registry/templates/customer-development/search-strategy-template.md +0 -123
  164. package/dist/registry/templates/customer-development/strategic-recommendations-template.md +0 -53
  165. package/dist/registry/templates/customer-development/thank-you-email-template.html +0 -124
  166. package/dist/registry/templates/customer-development/thank-you-note-template.md +0 -16
  167. package/dist/registry/templates/customer-development/triage-log-template.md +0 -278
  168. package/dist/registry/templates/customer-development/weekly-newsletter-template.html +0 -204
  169. package/dist/registry/templates/evidence/Design-Evidence.md +0 -30
  170. package/dist/registry/templates/evidence/Implementation-BugEvidence.md +0 -122
  171. package/dist/registry/templates/evidence/Implementation-FeatureEvidence.md +0 -160
  172. package/dist/registry/templates/evidence/Spec-Evidence.md +0 -19
  173. package/dist/registry/templates/help/HelpNeeded.md +0 -14
  174. package/dist/registry/templates/legal/NDA-TEMPLATE.md +0 -170
  175. package/dist/registry/templates/legal/PATENT-TEMPLATE.md +0 -372
  176. package/dist/registry/templates/legal/TRADEMARK-TEMPLATE.md +0 -339
  177. package/dist/registry/templates/legal/contract-review-checklist.md +0 -193
  178. package/dist/registry/templates/legal/review-report-template.md +0 -198
  179. package/dist/registry/templates/legal/saas-terms-template.md +0 -174
  180. package/dist/registry/templates/legal/sow-template.md +0 -117
  181. package/dist/registry/templates/legal/template-variables.md +0 -131
  182. package/dist/registry/templates/marketing/DOMAIN-REGISTRATION-TEMPLATE.md +0 -194
  183. package/dist/registry/templates/marketing/EVANGELIZE-TEMPLATE.md +0 -102
  184. package/dist/registry/templates/marketing/HBR-ARTICLE-TEMPLATE.md +0 -66
  185. package/dist/registry/templates/marketing/STORYTELLING-TEMPLATE.md +0 -130
  186. package/dist/registry/templates/marketing/WEBSITE-TEMPLATE.md +0 -262
  187. package/dist/registry/templates/marketing/github-pages-workflow.yml +0 -64
  188. package/dist/registry/templates/replicate/implementation-checklist.md +0 -39
  189. package/dist/registry/templates/replicate/use-cases-template.md +0 -88
  190. package/dist/registry/templates/retrospective/RETROSPECTIVE-TEMPLATE.md +0 -55
  191. package/dist/registry/templates/specs/BUGSPEC-TEMPLATE.md +0 -37
  192. package/dist/registry/templates/specs/FEATURESPEC-TEMPLATE.md +0 -66
  193. package/dist/registry/templates/specs/TECHSPEC-TEMPLATE.md +0 -39
  194. package/dist/registry/workflows/azure/cost-optimization.md +0 -772
  195. package/dist/registry/workflows/bootstrap/create-architecture.md +0 -37
  196. package/dist/registry/workflows/bootstrap/detect-broken-windows.md +0 -300
  197. package/dist/registry/workflows/bootstrap/evaluate-code-quality.md +0 -35
  198. package/dist/registry/workflows/bootstrap/verify-test-coverage.md +0 -36
  199. package/dist/registry/workflows/brainstorming/blue-sky-brainstorming.md +0 -211
  200. package/dist/registry/workflows/brainstorming/codebase-brainstorming.md +0 -159
  201. package/dist/registry/workflows/business-development/create-business-plan.md +0 -737
  202. package/dist/registry/workflows/business-development/ideate-business-opportunity.md +0 -55
  203. package/dist/registry/workflows/business-development/price-product.md +0 -325
  204. package/dist/registry/workflows/compliance/detect-compliance-requirements.md +0 -80
  205. package/dist/registry/workflows/compliance/generate-audit-evidence.md +0 -80
  206. package/dist/registry/workflows/compliance/soc2-evidence-generator.md +0 -332
  207. package/dist/registry/workflows/customer-development/insight-analysis.md +0 -156
  208. package/dist/registry/workflows/customer-development/insight-triage.md +0 -933
  209. package/dist/registry/workflows/customer-development/interview-preparation.md +0 -452
  210. package/dist/registry/workflows/customer-development/linkedin-outreach.md +0 -599
  211. package/dist/registry/workflows/customer-development/strategic-brainstorming.md +0 -146
  212. package/dist/registry/workflows/customer-development/thank-customers.md +0 -203
  213. package/dist/registry/workflows/customer-development/user-survey-dispatch.md +0 -312
  214. package/dist/registry/workflows/customer-development/users-to-target.md +0 -427
  215. package/dist/registry/workflows/customer-development/weekly-newsletter.md +0 -366
  216. package/dist/registry/workflows/deploy/cloud-deployment.md +0 -310
  217. package/dist/registry/workflows/improve-fraim/contribute.md +0 -32
  218. package/dist/registry/workflows/improve-fraim/file-issue.md +0 -32
  219. package/dist/registry/workflows/learning/build-skillset.md +0 -212
  220. package/dist/registry/workflows/learning/synthesize-learnings.md +0 -369
  221. package/dist/registry/workflows/legal/contract-review-analysis.md +0 -382
  222. package/dist/registry/workflows/legal/nda.md +0 -69
  223. package/dist/registry/workflows/legal/patent-filing.md +0 -76
  224. package/dist/registry/workflows/legal/saas-contract-development.md +0 -204
  225. package/dist/registry/workflows/legal/trademark-filing.md +0 -77
  226. package/dist/registry/workflows/marketing/content-creation.md +0 -40
  227. package/dist/registry/workflows/marketing/convert-to-pdf.md +0 -265
  228. package/dist/registry/workflows/marketing/create-modern-website.md +0 -456
  229. package/dist/registry/workflows/marketing/domain-registration.md +0 -323
  230. package/dist/registry/workflows/marketing/evangelize.md +0 -426
  231. package/dist/registry/workflows/marketing/hbr-article.md +0 -73
  232. package/dist/registry/workflows/marketing/launch-checklist.md +0 -37
  233. package/dist/registry/workflows/marketing/marketing-strategy.md +0 -45
  234. package/dist/registry/workflows/marketing/storytelling.md +0 -65
  235. package/dist/registry/workflows/performance/analyze-performance.md +0 -65
  236. package/dist/registry/workflows/product-building/design.md +0 -263
  237. package/dist/registry/workflows/product-building/implement.md +0 -771
  238. package/dist/registry/workflows/product-building/iterate-on-pr-comments.md +0 -70
  239. package/dist/registry/workflows/product-building/prep-issue.md +0 -41
  240. package/dist/registry/workflows/product-building/prototype.md +0 -60
  241. package/dist/registry/workflows/product-building/resolve.md +0 -175
  242. package/dist/registry/workflows/product-building/retrospect.md +0 -86
  243. package/dist/registry/workflows/product-building/spec.md +0 -303
  244. package/dist/registry/workflows/product-building/test.md +0 -125
  245. package/dist/registry/workflows/productivity-report/productivity-report.md +0 -263
  246. package/dist/registry/workflows/quality-assurance/browser-validation.md +0 -221
  247. package/dist/registry/workflows/quality-assurance/iterative-improvement-cycle.md +0 -562
  248. package/dist/registry/workflows/replicate/replicate-discovery.md +0 -336
  249. package/dist/registry/workflows/replicate/replicate-to-issues.md +0 -319
  250. package/dist/registry/workflows/reviewer/review-implementation-vs-design-spec.md +0 -694
  251. package/dist/registry/workflows/reviewer/review-implementation-vs-feature-spec.md +0 -734
  252. package/dist/registry/workflows/startup-credits/aws-activate-application.md +0 -535
  253. package/dist/registry/workflows/startup-credits/google-cloud-application.md +0 -647
  254. package/dist/registry/workflows/startup-credits/microsoft-azure-application.md +0 -538
@@ -1,599 +0,0 @@
1
- # LinkedIn Outreach Workflow
2
-
3
- ## INTENT
4
- To help founders and executives generate personalized LinkedIn outreach messages by researching profiles, identifying connection paths, finding conversation hooks, and combining them with the user's outreach intent.
5
-
6
- ## PRINCIPLES
7
- - **Research First**: Thoroughly research each profile before generating messages
8
- - **Personalization**: Generate highly personalized messages based on profile research
9
- - **User Intent**: Understand and incorporate the user's specific outreach goal
10
- - **Connection Paths**: Identify direct connections or mutual connections who can help
11
- - **Rate Limiting**: Respect LinkedIn's terms of service with appropriate delays
12
-
13
- ## WORKFLOW TRIGGER
14
- **User explicitly requests LinkedIn outreach help**:
15
- - "Generate LinkedIn messages for these profiles: [list of LinkedIn profile URLs]"
16
- - "Help me craft outreach messages for these people: [URLs]"
17
- - "Following the LinkedIn outreach workflow with these profiles: [URLs]"
18
-
19
- ## INPUT REQUIREMENTS
20
- **User provides**:
21
- - List of LinkedIn profile URLs (one per line or comma-separated)
22
- - User's outreach intent (will be asked if not provided)
23
-
24
- **Example input**:
25
- ```
26
- Profiles:
27
- https://linkedin.com/in/sarah-chen
28
- https://linkedin.com/in/michael-rodriguez
29
- https://linkedin.com/in/jane-smith
30
-
31
- Intent: I want to reach out to potential customers for our dev tools product
32
- ```
33
-
34
- ## AI AGENT PROCESS (Cursor)
35
-
36
- **CRITICAL**: Use Playwright MCP tools to interact with LinkedIn. Do NOT write hard-coded scripts with specific selectors. Use your intelligence to analyze what's on screen and interact accordingly.
37
-
38
- ### Step 1: Parse Input
39
- **Cursor reads user input**:
40
- 1. Extract LinkedIn profile URLs from user message
41
- 2. Extract user's outreach intent (if provided)
42
- 3. If intent not provided, ask user: "What is your goal in reaching out to these people? (e.g., 'Find potential customers', 'Build partnerships', 'Hire talent')"
43
- 4. Validate that at least one profile URL is provided
44
-
45
- ### Step 2: Browser Setup & Session Management
46
- **Use Playwright MCP to launch browser with session persistence**:
47
- 1. **Navigate to LinkedIn**: Use `browser_navigate` to open LinkedIn (the browser extension maintains session state automatically)
48
- 2. **Take snapshot**: Use `browser_snapshot` to see current state and verify if logged in
49
- 3. **Check login status from snapshot**:
50
- - If you see "Sign in" button → Not logged in
51
- - If you see navigation menu with profile/notifications → Logged in
52
- - If you see "Message" button on profiles → Logged in
53
-
54
- **Note**: The browser extension automatically maintains cookies and session state between sessions, so if the user logged in previously, they should remain logged in. No manual cookie management needed.
55
-
56
- ### Step 3: LinkedIn Navigation & Authentication
57
- **Cursor navigates to LinkedIn**:
58
- 1. Navigate to LinkedIn using `browser_navigate`
59
- 2. Take a snapshot with `browser_snapshot` to see current state
60
- 3. **Check login status**:
61
- - Look for "Sign in" button → Not logged in
62
- - Look for navigation menu with profile icon → Logged in
63
- - Look for "Message" button on profiles → Logged in
64
- 4. **If not logged in**:
65
- - Navigate to login page using `browser_navigate`
66
- - Inform user: "Please log in to LinkedIn in the browser window"
67
- - Wait for user to manually log in
68
- - Use `browser_wait_for` with text like "Home" or "Feed" to detect login success
69
- - Take snapshot to verify login
70
- - **Session is automatically saved** by the browser extension
71
- 5. **If already logged in**: Proceed directly to profile research
72
-
73
- **CRITICAL**:
74
- - Cursor does NOT automate login. User must log in manually to comply with LinkedIn ToS.
75
- - **The browser extension automatically maintains session state** - cookies are persisted between sessions
76
- - User only needs to log in once, and subsequent workflow runs will use the saved session
77
-
78
- ### Step 4: Research Each Profile
79
-
80
- {{include:orchestration/parallelization-guidance.md}}
81
-
82
- **For each profile URL, Cursor performs research using intelligent browser interaction**:
83
-
84
- #### 4a. Navigate to Profile
85
- 1. Use `browser_navigate` to go to the profile URL
86
- 2. Use `browser_wait_for` to wait for page to load
87
- 3. Take a snapshot with `browser_snapshot` to see the profile page
88
- 4. Analyze what's visible on screen
89
-
90
- #### 4b. Check Connection Status
91
- **Determine if direct connection or find mutual connections**:
92
- 1. **Look at the snapshot** to identify connection status:
93
- - If you see a "Message" button → Already connected
94
- - If you see a "Connect" button → Not connected
95
- - If you see text like "X mutual connections" → Has mutual connections
96
- 2. **If mutual connections exist**:
97
- - Click on the mutual connections indicator/text
98
- - Wait for modal/dialog to appear (use `browser_wait_for`)
99
- - Take snapshot to see mutual connection names
100
- - Extract the names from the snapshot
101
- - Close the modal (click X, press Escape, or click outside)
102
- 3. **Store connection info**:
103
- - Direct connection: "You are already connected"
104
- - Mutual connections: "You have X mutual connection(s): [names]"
105
- - No connection: "No direct or mutual connections found"
106
-
107
- #### 4c. Find Person's Interests and Hooks
108
- **Research what would be good conversation starters by analyzing the profile**:
109
-
110
- 1. **Extract Basic Profile Info**:
111
- - Look at the snapshot for the person's name (usually large heading at top)
112
- - Find their headline/title (usually below name)
113
- - Note their location if visible
114
-
115
- 2. **Scroll Through Profile**:
116
- - Use `browser_evaluate` to scroll down the page
117
- - Take multiple snapshots as you scroll to see different sections
118
- - Look for: About section, Experience, Education, Skills, Activity/Posts
119
-
120
- 3. **Find Recent Activity/Posts**:
121
- - Scroll to find their activity feed or recent posts
122
- - Look for posts they've made (usually in a feed section)
123
- - Extract the text/content of 2-3 most recent posts
124
- - Note topics they're discussing
125
-
126
- 4. **Extract Skills and Expertise**:
127
- - Find the Skills section on their profile
128
- - Extract skill names (usually listed items)
129
- - Note top 5-10 skills
130
-
131
- 5. **Extract Experience Highlights**:
132
- - Find the Experience section
133
- - Note current and previous roles
134
- - Extract company names and role titles
135
-
136
- 6. **Identify Hooks** (conversation starters):
137
- - **Recent posts**: "Recent post about: [topic]"
138
- - **Shared interests**: "Expertise in: [skills]"
139
- - **Current role**: "Current role: [headline]"
140
- - **Location**: "Based in: [location]"
141
- - **Experience**: "Background: [notable roles/companies]"
142
-
143
- **IMPORTANT**: Use snapshots to see what's actually on screen. Don't assume specific CSS selectors exist. Analyze the visual layout and extract information accordingly.
144
-
145
- #### 4d. Store Research Results
146
- **For each profile, compile**:
147
- - Profile URL
148
- - Name
149
- - Headline/Title
150
- - Connection info (direct/mutual/none)
151
- - Hooks found (array of conversation starters)
152
- - Recent posts (if found)
153
- - Skills (if found)
154
- - Experience highlights (if found)
155
-
156
- ### Step 5: Get User's Outreach Intent
157
- **If not already provided, ask user**:
158
- ```
159
- I've researched [X] profile(s). Now I need to understand your outreach goal.
160
-
161
- What is your intent in reaching out to these people?
162
- Examples:
163
- - "I want to find potential customers for our dev tools product"
164
- - "I'm looking to build partnerships with companies in this space"
165
- - "I'm hiring and want to reach out to potential candidates"
166
- - "I want to learn from their experience in [topic]"
167
-
168
- Your intent:
169
- ```
170
-
171
- Wait for user to provide their intent.
172
-
173
- ### Step 6: Generate Personalized Messages
174
-
175
- {{include:orchestration/parallelization-guidance.md}}
176
-
177
- **For each profile, combine research + user intent to create message**:
178
-
179
- Use your AI capabilities to generate a message with this prompt:
180
-
181
- ```
182
- Generate a short, personalized LinkedIn connection request message (under 300 characters).
183
-
184
- Profile Research:
185
- - Name: [name]
186
- - Headline: [headline]
187
- - Connection: [connection info]
188
- - Hooks: [list of hooks found]
189
-
190
- User's Outreach Intent: [user intent]
191
-
192
- Requirements:
193
- 1. Start with a personalized hook based on their profile (recent post, shared interest, mutual connection, etc.)
194
- 2. Clearly state the user's intent
195
- 3. Keep it under 300 characters
196
- 4. Be genuine and not salesy
197
- 5. If mutual connections exist, mention them naturally
198
- 6. End with a clear call to action
199
-
200
- Message:
201
- ```
202
-
203
- Generate one message per profile.
204
-
205
- ### Step 7: Generate Introduction Messages for Mutual Connections
206
- **If mutual connections exist, generate messages to ask for introductions**:
207
-
208
- For each mutual connection, generate a message asking them to introduce you:
209
-
210
- ```
211
- Generate a brief message (under 200 characters) asking [mutual connection name] to introduce you to [target name].
212
-
213
- Context:
214
- - You're reaching out to [target name] because: [user intent]
215
- - Your connection: [mutual connection name]
216
- - Why this introduction makes sense: [shared context, if any]
217
-
218
- Message should be:
219
- - Short and respectful
220
- - Clear about what you're asking
221
- - Explain why the introduction is valuable
222
- - Not pushy or demanding
223
-
224
- Message:
225
- ```
226
-
227
- ### Step 8: Save Research to File
228
- **Create a comprehensive research document**:
229
-
230
- Save all research to a markdown file: `docs/linkedin-outreach/[date]-[profile-name]-research.md`
231
-
232
- **File Structure**:
233
- ```markdown
234
- # LinkedIn Outreach Research - [Date]
235
-
236
- ## Target Profile: [Name]
237
-
238
- ### Profile Information
239
- - **Name:** [name]
240
- - **Headline:** [headline]
241
- - **Location:** [location]
242
- - **Profile URL:** [URL]
243
- - **Connection Status:** [direct/mutual/none]
244
-
245
- ### Connection Information
246
- - **Type:** [direct connection / mutual connections / no connection]
247
- - **Mutual Connections:**
248
- - [List all mutual connection names]
249
- - [For each, note their relationship/context if available]
250
-
251
- ### Research Findings
252
-
253
- #### Hooks Identified
254
- 1. [Hook 1 - e.g., Recent post about...]
255
- 2. [Hook 2 - e.g., Expertise in...]
256
- 3. [Hook 3 - e.g., Current role...]
257
-
258
- #### Recent Activity
259
- - [Post 1 summary]
260
- - [Post 2 summary]
261
- - [Post 3 summary]
262
-
263
- #### Skills & Expertise
264
- - [Skill 1]
265
- - [Skill 2]
266
- - [Skill 3]
267
- ...
268
-
269
- #### Experience Highlights
270
- - [Notable role/company 1]
271
- - [Notable role/company 2]
272
- ...
273
-
274
- ### Generated Messages
275
-
276
- #### Direct Connection Request Message
277
- **Length:** [X]/300 characters
278
-
279
- "[Generated message]"
280
-
281
- #### Introduction Request Messages (for Mutual Connections)
282
-
283
- **To [Mutual Connection 1 Name]:**
284
- "[Generated introduction request message]"
285
-
286
- **To [Mutual Connection 2 Name]:**
287
- "[Generated introduction request message]"
288
-
289
- ...
290
-
291
- ### Outreach Intent
292
- [User's stated intent]
293
-
294
- ### Next Steps
295
- - [ ] Review and refine messages
296
- - [ ] Decide: Direct connection or ask for introduction?
297
- - [ ] Send connection request or introduction request
298
- - [ ] Follow up if no response after 1 week
299
- ```
300
-
301
- ### Step 9: Display Results & Offer Actions
302
- **Display all generated messages and offer to populate/send**:
303
-
304
- ```
305
- ✅ LinkedIn Outreach Research Complete
306
-
307
- 📊 Profile: [Name] - [Headline]
308
- 🔗 Profile URL: [URL]
309
- 🤝 Connection: [connection info]
310
-
311
- 🎣 Hooks Found:
312
- 1. [Hook 1]
313
- 2. [Hook 2]
314
- 3. [Hook 3]
315
-
316
- 💬 Generated Connection Request Message ([X]/300 characters):
317
- "[Message]"
318
-
319
- 🤝 Mutual Connections Available:
320
- - [Name 1] - [Their role/context]
321
- - [Name 2] - [Their role/context]
322
- ...
323
-
324
- 💌 Introduction Request Messages:
325
-
326
- To [Mutual Connection 1]:
327
- "[Introduction message]"
328
-
329
- To [Mutual Connection 2]:
330
- "[Introduction message]"
331
-
332
- 📄 Research saved to: docs/linkedin-outreach/[filename].md
333
-
334
- ---
335
-
336
- 🎯 What would you like to do next?
337
-
338
- 1. **Populate message in LinkedIn** - I'll fill in the connection request form for you to review and send
339
- 2. **Send connection request** - I'll send it on your behalf (requires confirmation)
340
- 3. **Ask for introduction** - I'll help you message a mutual connection to request an introduction
341
- 4. **Refine message** - Tell me what to change and I'll update it
342
- 5. **Review research file** - Check the saved research document first
343
-
344
- Your choice:
345
- ```
346
-
347
- **CRITICAL**: Always ask for user confirmation before sending any messages. Never send automatically without explicit user approval.
348
-
349
- ### Step 10: Execute User's Choice
350
-
351
- #### Option 1: Populate Message in LinkedIn
352
- 1. Navigate to the profile using `browser_navigate`
353
- 2. Click "Connect" or "More actions" → "Connect"
354
- 3. Click "Add a note"
355
- 4. **CRITICAL - Properly type message into LinkedIn's message box:**
356
-
357
- **LinkedIn uses a contenteditable div for message input, not a regular textarea. The text must be properly inserted to activate the send button. Follow these steps:**
358
-
359
- a. **First, click/focus the message input box** using `browser_click` on the message input element
360
-
361
- b. **Clear any existing placeholder text** by:
362
- - Using `browser_evaluate` to select all text (Ctrl+A / Cmd+A)
363
- - Or using `browser_press_key` with "Control+a" (Windows) or "Meta+a" (Mac) to select all
364
- - Then `browser_press_key` with "Backspace" or "Delete" to clear
365
-
366
- c. **Type the message using `browser_type`** with the `slowly: true` parameter:
367
- ```
368
- Use browser_type with:
369
- - element: "LinkedIn message input box"
370
- - ref: [the CSS selector or ref from snapshot]
371
- - text: [the generated message]
372
- - slowly: true (IMPORTANT: This types character-by-character, which properly triggers LinkedIn's input detection)
373
- ```
374
-
375
- d. **After typing, verify the text is visible** by taking a snapshot and checking that:
376
- - The message text appears in the input box (not as placeholder)
377
- - The text has actual styling (not placeholder gray text)
378
- - The send button becomes enabled/active
379
-
380
- e. **If send button is still disabled**, try:
381
- - Clicking the message box again to ensure focus
382
- - Using `browser_evaluate` to trigger input events manually:
383
- ```javascript
384
- const messageBox = document.querySelector('.msg-form__contenteditable');
385
- if (messageBox) {
386
- messageBox.dispatchEvent(new InputEvent('input', { bubbles: true }));
387
- messageBox.dispatchEvent(new Event('change', { bubbles: true }));
388
- }
389
- ```
390
- - Wait 1-2 seconds for LinkedIn to process the input
391
- - Check snapshot again to verify send button is enabled
392
-
393
- **Common mistakes to avoid:**
394
- - ❌ Don't just set textContent/innerHTML - LinkedIn won't detect it
395
- - ❌ Don't type too fast - use `slowly: true` to type character-by-character
396
- - ❌ Don't skip clearing placeholder - old placeholder can blend with new text
397
- - ❌ Don't forget to focus the input first - typing without focus won't work
398
-
399
- 5. **DO NOT click "Send"** - leave it for user to review and send
400
- 6. Inform user: "Message populated in LinkedIn. Please review and click 'Send invitation' when ready."
401
-
402
- #### Option 2: Send Connection Request (with confirmation)
403
- 1. Ask user: "Are you sure you want me to send this connection request now?"
404
- 2. If confirmed:
405
- - Navigate to profile
406
- - Click "Connect" → "Add a note"
407
- - **Fill in message using the same detailed process from Option 1** (clear placeholder, type slowly, verify send button activates)
408
- - **Wait for send button to be enabled** - take snapshot to verify it's clickable
409
- - Click "Send invitation" only after confirming the button is enabled
410
- - Confirm: "✅ Connection request sent to [Name]"
411
- 3. If not confirmed, proceed with Option 1 (populate only)
412
-
413
- #### Option 3: Ask for Introduction via Mutual Connection
414
- 1. Ask user: "Which mutual connection would you like me to message for an introduction?"
415
- 2. Navigate to that mutual connection's profile
416
- 3. Click "Message"
417
- 4. **Fill in the introduction request message using the same detailed process:**
418
- - Click/focus the message input box
419
- - Clear any placeholder text (select all + delete)
420
- - Type message using `browser_type` with `slowly: true`
421
- - Verify text is visible and send button is enabled
422
- - If send button not enabled, follow troubleshooting steps from Option 1
423
- 5. **DO NOT send automatically** - show message to user for review
424
- 6. Ask: "Ready to send this introduction request? (Yes/No)"
425
- 7. If yes, send (only after verifying send button is enabled); if no, allow editing
426
-
427
- #### Option 4: Refine Message
428
- 1. Ask user: "What would you like to change about the message?"
429
- 2. Generate new version based on feedback
430
- 3. Update the research file
431
- 4. Offer to populate in LinkedIn again
432
-
433
- #### Option 5: Review Research File
434
- 1. Open the saved markdown file
435
- 2. Display key sections
436
- 3. Ask if user wants to proceed with any actions
437
-
438
- ## OUTPUT TEMPLATE
439
-
440
- ### Research File Template
441
- **File Location:** `docs/linkedin-outreach/[YYYY-MM-DD]-[profile-name-slug]-research.md`
442
-
443
- **Example filename:** `docs/linkedin-outreach/2025-01-15-dharmesh-shah-research.md`
444
-
445
- ### Workflow Execution Summary
446
- **Display in Cursor chat**:
447
- ```
448
- ✅ LinkedIn Outreach Research Complete
449
-
450
- 📊 Profile:
451
- 🔗 Profile URL:
452
- 🤝 Connection:
453
-
454
- 🎣 Hooks Found:
455
-
456
- 💬 Generated Connection Request Message (298/300 characters):
457
-
458
- 🤝 Mutual Connections Available:
459
-
460
- 💌 Introduction Request Messages:
461
-
462
- 📄 Research saved to:
463
-
464
- ---
465
-
466
- 🎯 What would you like to do next?
467
-
468
- 1. Populate message in LinkedIn - I'll fill in the connection request form for you to review and send
469
- 2. Send connection request - I'll send it on your behalf (requires confirmation)
470
- 3. Ask for introduction - I'll help you message a mutual connection to request an introduction
471
- 4. Refine message - Tell me what to change and I'll update it
472
- 5. Review research file - Check the saved research document first
473
-
474
- Your choice:
475
- ```
476
-
477
- ## EXAMPLES
478
-
479
- ### Good: Complete Workflow Execution
480
- ```
481
- User: "Generate LinkedIn messages for these profiles:
482
- https://linkedin.com/in/sarah-chen
483
- https://linkedin.com/in/michael-rodriguez
484
-
485
- My intent: I want to find potential customers for our dev tools product"
486
-
487
- Cursor Workflow:
488
- 1. ✅ Parsed profile URLs
489
- 2. ✅ Extracted user intent
490
- 3. ✅ Launched browser
491
- 4. ✅ User logged into LinkedIn
492
- 5. ✅ Researched Sarah's profile:
493
- - Found 2 mutual connections: John Doe, Jane Smith
494
- - Found recent post about scaling infrastructure
495
- - Identified expertise in distributed systems
496
- 6. ✅ Researched Michael's profile:
497
- - No connections found
498
- - Found expertise in microservices
499
- 7. ✅ Generated personalized messages combining hooks + intent
500
- 8. ✅ Displayed results
501
-
502
- Output: 2 personalized messages ready for review
503
- ```
504
-
505
- ### Bad: Missing User Intent
506
- ```
507
- User: "Generate messages for these profiles: [URLs]"
508
-
509
- Cursor Workflow:
510
- 1. ✅ Parsed URLs
511
- 2. ❌ No user intent provided
512
- 3. ✅ Asked user for intent
513
- 4. User provides: "Find customers"
514
- 5. ✅ Continues with research and message generation
515
-
516
- Result: Workflow completes successfully after getting intent
517
- ```
518
-
519
- ### Bad: Invalid Profile URLs
520
- ```
521
- User: "Generate messages for: invalid-url"
522
-
523
- Cursor Workflow:
524
- 1. ❌ Invalid LinkedIn URL format
525
- 2. ✅ Asks user: "Please provide valid LinkedIn profile URLs (format: https://linkedin.com/in/username)"
526
- 3. User provides correct URLs
527
- 4. ✅ Continues workflow
528
-
529
- Result: Workflow validates input and asks for correction
530
- ```
531
-
532
- ## SUCCESS METRICS
533
- - **Profile Research Accuracy**: 95% of extracted profile data is accurate
534
- - **Hook Identification**: At least one relevant hook found per profile
535
- - **Message Personalization**: Messages reference specific profile details
536
- - **Connection Path Identification**: Correctly identifies direct/mutual/no connections
537
- - **Time Efficiency**: User spends 2 minutes reviewing vs 30 minutes researching manually
538
- - **Message Quality**: Messages are under 300 characters and include both hook and intent
539
-
540
- ## TECHNICAL REQUIREMENTS
541
-
542
- ### Dependencies
543
- - Playwright (if user has not enabled this MCP, ask them to)
544
- - TypeScript
545
- - AI/LLM access (via Cursor's built-in AI or OpenAI API)
546
-
547
- ### Browser Automation Best Practices
548
- - Use realistic delays between actions (1000-2000ms)
549
- - Randomize delays to avoid detection
550
- - Scroll pages naturally to load content
551
- - Respect rate limits (don't scrape too many profiles too quickly)
552
- - Never store LinkedIn credentials
553
- - Always wait for user to log in manually
554
-
555
- ### Error Handling
556
- - If LinkedIn login fails: Ask user to log in manually
557
- - If profile URL is invalid: Skip and continue with next profile
558
- - If profile is private: Note that and use available public information
559
- - If scraping fails: Log error, continue with other profiles
560
- - If AI generation fails: Retry with simpler prompt
561
-
562
- ## SECURITY & COMPLIANCE
563
-
564
- ### LinkedIn Terms of Service
565
- - ✅ User must log in manually (no credential storage)
566
- - ✅ Respect rate limits (reasonable delays between profile visits)
567
- - ✅ Human-like behavior patterns
568
- - ✅ No mass automation or spamming
569
- - ✅ All messages are suggestions - user reviews before sending
570
-
571
- ### Data Privacy
572
- - ✅ Profile data used only for message generation
573
- - ✅ No profile data stored permanently
574
- - ✅ User can review all research before messages are generated
575
- - ✅ Messages are suggestions - user has full control
576
-
577
- ## WORKFLOW VARIATIONS
578
-
579
- ### Variation 1: Batch Processing
580
- If user provides many profiles (10+), process in batches:
581
- 1. Research first 5 profiles
582
- 2. Generate messages for those 5
583
- 3. Display results
584
- 4. Ask user if they want to continue with remaining profiles
585
-
586
- ### Variation 2: Interactive Refinement
587
- After generating messages:
588
- 1. Display all messages
589
- 2. Ask user: "Would you like to refine any messages?"
590
- 3. For each message user wants to refine:
591
- - Show current message
592
- - Ask what to change
593
- - Regenerate with new instructions
594
-
595
- ### Variation 3: Export Messages
596
- After generation:
597
- 1. Ask user: "Would you like to export these messages?"
598
- 2. If yes, create a markdown file with all messages
599
- 3. Save to `docs/linkedin-outreach/[date]-messages.md`