conectese 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. package/README.md +265 -0
  2. package/_conectese/.conectese-version +1 -0
  3. package/_conectese/config/playwright.config.json +11 -0
  4. package/_conectese/core/architect.agent.yaml +110 -0
  5. package/_conectese/core/best-practices/_catalog.yaml +116 -0
  6. package/_conectese/core/best-practices/blog-post.md +132 -0
  7. package/_conectese/core/best-practices/blog-seo.md +127 -0
  8. package/_conectese/core/best-practices/copywriting.md +426 -0
  9. package/_conectese/core/best-practices/data-analysis.md +401 -0
  10. package/_conectese/core/best-practices/email-newsletter.md +118 -0
  11. package/_conectese/core/best-practices/email-sales.md +110 -0
  12. package/_conectese/core/best-practices/image-design.md +348 -0
  13. package/_conectese/core/best-practices/instagram-feed.md +235 -0
  14. package/_conectese/core/best-practices/instagram-reels.md +112 -0
  15. package/_conectese/core/best-practices/instagram-stories.md +107 -0
  16. package/_conectese/core/best-practices/linkedin-article.md +116 -0
  17. package/_conectese/core/best-practices/linkedin-post.md +121 -0
  18. package/_conectese/core/best-practices/researching.md +349 -0
  19. package/_conectese/core/best-practices/review.md +269 -0
  20. package/_conectese/core/best-practices/social-networks-publishing.md +294 -0
  21. package/_conectese/core/best-practices/strategist.md +344 -0
  22. package/_conectese/core/best-practices/technical-writing.md +365 -0
  23. package/_conectese/core/best-practices/twitter-post.md +105 -0
  24. package/_conectese/core/best-practices/twitter-thread.md +122 -0
  25. package/_conectese/core/best-practices/whatsapp-broadcast.md +107 -0
  26. package/_conectese/core/best-practices/youtube-script.md +122 -0
  27. package/_conectese/core/best-practices/youtube-shorts.md +112 -0
  28. package/_conectese/core/prompts/build.prompt.md +547 -0
  29. package/_conectese/core/prompts/design.prompt.md +469 -0
  30. package/_conectese/core/prompts/discovery.prompt.md +269 -0
  31. package/_conectese/core/prompts/sherlock-instagram.md +123 -0
  32. package/_conectese/core/prompts/sherlock-linkedin.md +73 -0
  33. package/_conectese/core/prompts/sherlock-shared.md +684 -0
  34. package/_conectese/core/prompts/sherlock-twitter.md +78 -0
  35. package/_conectese/core/prompts/sherlock-youtube.md +85 -0
  36. package/_conectese/core/runner.pipeline.md +535 -0
  37. package/_conectese/core/skills.engine.md +381 -0
  38. package/agents/data-extractor/AGENT.md +13 -0
  39. package/agents/direito-adaneiro/AGENT.md +18 -0
  40. package/agents/direito-administrativo/AGENT.md +18 -0
  41. package/agents/direito-aeroporta-rio/AGENT.md +18 -0
  42. package/agents/direito-agra-rio/AGENT.md +18 -0
  43. package/agents/direito-ambiental/AGENT.md +18 -0
  44. package/agents/direito-banca-rio/AGENT.md +18 -0
  45. package/agents/direito-civil/AGENT.md +18 -0
  46. package/agents/direito-constitcional/AGENT.md +18 -0
  47. package/agents/direito-da-crianc-a-e-do-adolescente-eca/AGENT.md +18 -0
  48. package/agents/direito-da-propriedade-intelectal/AGENT.md +18 -0
  49. package/agents/direito-de-ami-lia/AGENT.md +18 -0
  50. package/agents/direito-de-tra-nsito/AGENT.md +18 -0
  51. package/agents/direito-desportivo/AGENT.md +18 -0
  52. package/agents/direito-digital/AGENT.md +18 -0
  53. package/agents/direito-do-consmidor/AGENT.md +18 -0
  54. package/agents/direito-do-trabalho/AGENT.md +18 -0
  55. package/agents/direito-econo-mico/AGENT.md +18 -0
  56. package/agents/direito-eleitoral/AGENT.md +18 -0
  57. package/agents/direito-empresarial/AGENT.md +18 -0
  58. package/agents/direito-imobilia-rio/AGENT.md +18 -0
  59. package/agents/direito-inanceiro/AGENT.md +18 -0
  60. package/agents/direito-internacional/AGENT.md +18 -0
  61. package/agents/direito-mari-timo/AGENT.md +18 -0
  62. package/agents/direito-me-dico-e-da-sa-de/AGENT.md +18 -0
  63. package/agents/direito-militar/AGENT.md +18 -0
  64. package/agents/direito-ndia-rio/AGENT.md +18 -0
  65. package/agents/direito-notarial-e-registral/AGENT.md +18 -0
  66. package/agents/direito-penal/AGENT.md +18 -0
  67. package/agents/direito-previdencia-rio/AGENT.md +18 -0
  68. package/agents/direito-processal-civil/AGENT.md +18 -0
  69. package/agents/direito-processal-do-trabalho/AGENT.md +18 -0
  70. package/agents/direito-processal-militar/AGENT.md +18 -0
  71. package/agents/direito-processal-penal/AGENT.md +18 -0
  72. package/agents/direito-rbani-stico/AGENT.md +18 -0
  73. package/agents/direito-secrita-rio/AGENT.md +18 -0
  74. package/agents/direito-sindical/AGENT.md +18 -0
  75. package/agents/direito-societa-rio/AGENT.md +18 -0
  76. package/agents/direito-tribta-rio/AGENT.md +18 -0
  77. package/agents/direitos-hmanos/AGENT.md +18 -0
  78. package/agents/legal-analyst/AGENT.md +16 -0
  79. package/agents/legal-synthesizer/AGENT.md +13 -0
  80. package/agents/lgpd-anonymizer/AGENT.md +14 -0
  81. package/agents/lgpd-restorer/AGENT.md +14 -0
  82. package/agents/task-router/AGENT.md +13 -0
  83. package/bin/conectese.js +73 -0
  84. package/dashboard/index.html +12 -0
  85. package/dashboard/package-lock.json +1971 -0
  86. package/dashboard/package.json +28 -0
  87. package/dashboard/public/assets/avatars/Female1_1wave.png +0 -0
  88. package/dashboard/public/assets/avatars/Female1_2wave.png +0 -0
  89. package/dashboard/public/assets/avatars/Female1_blink.png +0 -0
  90. package/dashboard/public/assets/avatars/Female1_talk.png +0 -0
  91. package/dashboard/public/assets/avatars/Female2_1wave.png +0 -0
  92. package/dashboard/public/assets/avatars/Female2_2wave.png +0 -0
  93. package/dashboard/public/assets/avatars/Female2_blink.png +0 -0
  94. package/dashboard/public/assets/avatars/Female2_talk.png +0 -0
  95. package/dashboard/public/assets/avatars/Female3_blink.png +0 -0
  96. package/dashboard/public/assets/avatars/Female3_talk.png +0 -0
  97. package/dashboard/public/assets/avatars/Female3_wave.png +0 -0
  98. package/dashboard/public/assets/avatars/Female4_blink.png +0 -0
  99. package/dashboard/public/assets/avatars/Female4_talk.png +0 -0
  100. package/dashboard/public/assets/avatars/Female4_wave.png +0 -0
  101. package/dashboard/public/assets/avatars/Female5_blink.png +0 -0
  102. package/dashboard/public/assets/avatars/Female5_talk.png +0 -0
  103. package/dashboard/public/assets/avatars/Female5_wave.png +0 -0
  104. package/dashboard/public/assets/avatars/Female6_blink.png +0 -0
  105. package/dashboard/public/assets/avatars/Female6_talk.png +0 -0
  106. package/dashboard/public/assets/avatars/Female6_wave.png +0 -0
  107. package/dashboard/public/assets/avatars/Male1_1wave.png +0 -0
  108. package/dashboard/public/assets/avatars/Male1_2wave.png +0 -0
  109. package/dashboard/public/assets/avatars/Male1_blink.png +0 -0
  110. package/dashboard/public/assets/avatars/Male1_talk.png +0 -0
  111. package/dashboard/public/assets/avatars/Male2_1wave.png +0 -0
  112. package/dashboard/public/assets/avatars/Male2_2wave.png +0 -0
  113. package/dashboard/public/assets/avatars/Male2_blink.png +0 -0
  114. package/dashboard/public/assets/avatars/Male2_talk.png +0 -0
  115. package/dashboard/public/assets/avatars/Male3_blink.png +0 -0
  116. package/dashboard/public/assets/avatars/Male3_talk.png +0 -0
  117. package/dashboard/public/assets/avatars/Male3_wave.png +0 -0
  118. package/dashboard/public/assets/avatars/Male4_blink.png +0 -0
  119. package/dashboard/public/assets/avatars/Male4_talk.png +0 -0
  120. package/dashboard/public/assets/avatars/Male4_wave.png +0 -0
  121. package/dashboard/public/assets/desks/desktop_set_black_down.png +0 -0
  122. package/dashboard/public/assets/desks/desktop_set_black_down_coding-1.png +0 -0
  123. package/dashboard/public/assets/desks/desktop_set_black_down_coding.png +0 -0
  124. package/dashboard/public/assets/desks/desktop_set_black_up.png +0 -0
  125. package/dashboard/public/assets/desks/desktop_set_white_down.png +0 -0
  126. package/dashboard/public/assets/desks/desktop_set_white_down_coding-1.png +0 -0
  127. package/dashboard/public/assets/desks/desktop_set_white_down_coding.png +0 -0
  128. package/dashboard/public/assets/desks/desktop_set_white_up.png +0 -0
  129. package/dashboard/public/assets/furniture/armchair_tan.png +0 -0
  130. package/dashboard/public/assets/furniture/armchair_tan_down.png +0 -0
  131. package/dashboard/public/assets/furniture/backpack_blue.png +0 -0
  132. package/dashboard/public/assets/furniture/backpack_red.png +0 -0
  133. package/dashboard/public/assets/furniture/blinds.png +0 -0
  134. package/dashboard/public/assets/furniture/blinds_large_closed_white.png +0 -0
  135. package/dashboard/public/assets/furniture/bookshelf.png +0 -0
  136. package/dashboard/public/assets/furniture/bookshelf_purple_tall.png +0 -0
  137. package/dashboard/public/assets/furniture/bulletin_board.png +0 -0
  138. package/dashboard/public/assets/furniture/clock.png +0 -0
  139. package/dashboard/public/assets/furniture/coffee_mug.png +0 -0
  140. package/dashboard/public/assets/furniture/coffee_mug_blue.png +0 -0
  141. package/dashboard/public/assets/furniture/coffee_table.png +0 -0
  142. package/dashboard/public/assets/furniture/coffeepot_right.png +0 -0
  143. package/dashboard/public/assets/furniture/coffeetable_black_horizontal.png +0 -0
  144. package/dashboard/public/assets/furniture/couch.png +0 -0
  145. package/dashboard/public/assets/furniture/couch_tan_down.png +0 -0
  146. package/dashboard/public/assets/furniture/cushion_blue.png +0 -0
  147. package/dashboard/public/assets/furniture/cushion_tan.png +0 -0
  148. package/dashboard/public/assets/furniture/desk_wood.png +0 -0
  149. package/dashboard/public/assets/furniture/fancy_rug.png +0 -0
  150. package/dashboard/public/assets/furniture/fancy_rug_wide.png +0 -0
  151. package/dashboard/public/assets/furniture/flowers1.png +0 -0
  152. package/dashboard/public/assets/furniture/flowers2.png +0 -0
  153. package/dashboard/public/assets/furniture/lamp_tan.png +0 -0
  154. package/dashboard/public/assets/furniture/lantern.png +0 -0
  155. package/dashboard/public/assets/furniture/monstera.png +0 -0
  156. package/dashboard/public/assets/furniture/monstera_small.png +0 -0
  157. package/dashboard/public/assets/furniture/picture_frame.png +0 -0
  158. package/dashboard/public/assets/furniture/plant1.png +0 -0
  159. package/dashboard/public/assets/furniture/plant2.png +0 -0
  160. package/dashboard/public/assets/furniture/plant3.png +0 -0
  161. package/dashboard/public/assets/furniture/plant_poof.png +0 -0
  162. package/dashboard/public/assets/furniture/plant_spindly.png +0 -0
  163. package/dashboard/public/assets/furniture/poster_blue.png +0 -0
  164. package/dashboard/public/assets/furniture/rug.png +0 -0
  165. package/dashboard/public/assets/furniture/succulent_blue.png +0 -0
  166. package/dashboard/public/assets/furniture/succulent_green.png +0 -0
  167. package/dashboard/public/assets/furniture/treasurechest_closed_gold.png +0 -0
  168. package/dashboard/public/assets/furniture/water_cooler_better.png +0 -0
  169. package/dashboard/public/assets/furniture/whiteboard.png +0 -0
  170. package/dashboard/public/assets/furniture/whiteboard_stand_graph.png +0 -0
  171. package/dashboard/public/assets/furniture/window_blinds_open.png +0 -0
  172. package/dashboard/src/App.tsx +46 -0
  173. package/dashboard/src/components/SquadCard.tsx +47 -0
  174. package/dashboard/src/components/SquadSelector.tsx +61 -0
  175. package/dashboard/src/components/StatusBadge.tsx +32 -0
  176. package/dashboard/src/components/StatusBar.tsx +97 -0
  177. package/dashboard/src/hooks/useSquadSocket.ts +135 -0
  178. package/dashboard/src/lib/formatTime.ts +16 -0
  179. package/dashboard/src/lib/normalizeState.ts +25 -0
  180. package/dashboard/src/main.tsx +10 -0
  181. package/dashboard/src/office/AgentSprite.ts +241 -0
  182. package/dashboard/src/office/OfficeScene.ts +153 -0
  183. package/dashboard/src/office/PhaserGame.tsx +80 -0
  184. package/dashboard/src/office/RoomBuilder.ts +190 -0
  185. package/dashboard/src/office/assetKeys.ts +150 -0
  186. package/dashboard/src/office/palette.ts +32 -0
  187. package/dashboard/src/plugin/squadWatcher.ts +233 -0
  188. package/dashboard/src/store/useSquadStore.ts +56 -0
  189. package/dashboard/src/styles/globals.css +36 -0
  190. package/dashboard/src/types/state.ts +63 -0
  191. package/dashboard/src/vite-env.d.ts +1 -0
  192. package/dashboard/test-results/.last-run.json +4 -0
  193. package/dashboard/tsconfig.json +24 -0
  194. package/dashboard/tsconfig.tsbuildinfo +1 -0
  195. package/dashboard/vite.config.ts +13 -0
  196. package/package.json +53 -0
  197. package/skills/README.md +63 -0
  198. package/skills/apify/SKILL.md +55 -0
  199. package/skills/blotato/SKILL.md +63 -0
  200. package/skills/canva/SKILL.md +60 -0
  201. package/skills/conectese-agent-creator/SKILL.md +192 -0
  202. package/skills/conectese-skill-creator/SKILL.md +407 -0
  203. package/skills/conectese-skill-creator/agents/analyzer.md +274 -0
  204. package/skills/conectese-skill-creator/agents/comparator.md +202 -0
  205. package/skills/conectese-skill-creator/agents/grader.md +223 -0
  206. package/skills/conectese-skill-creator/assets/eval_review.html +146 -0
  207. package/skills/conectese-skill-creator/eval-viewer/generate_review.py +471 -0
  208. package/skills/conectese-skill-creator/eval-viewer/viewer.html +1325 -0
  209. package/skills/conectese-skill-creator/references/schemas.md +430 -0
  210. package/skills/conectese-skill-creator/references/skill-format.md +235 -0
  211. package/skills/conectese-skill-creator/scripts/__init__.py +0 -0
  212. package/skills/conectese-skill-creator/scripts/aggregate_benchmark.py +401 -0
  213. package/skills/conectese-skill-creator/scripts/quick_validate.py +103 -0
  214. package/skills/conectese-skill-creator/scripts/run_eval.py +310 -0
  215. package/skills/conectese-skill-creator/scripts/utils.py +47 -0
  216. package/skills/image-ai-generator/SKILL.md +124 -0
  217. package/skills/image-ai-generator/scripts/generate.py +175 -0
  218. package/skills/image-creator/SKILL.md +155 -0
  219. package/skills/image-fetcher/SKILL.md +91 -0
  220. package/skills/instagram-publisher/SKILL.md +119 -0
  221. package/skills/instagram-publisher/scripts/publish.js +165 -0
  222. package/skills/resend/SKILL.md +80 -0
  223. package/skills/template-designer/SKILL.md +201 -0
  224. package/skills/template-designer/base-templates/model-a.html +27 -0
  225. package/skills/template-designer/base-templates/model-b.html +31 -0
  226. package/skills/template-designer/base-templates/model-c.html +42 -0
  227. package/src/agents-cli.js +158 -0
  228. package/src/agents.js +134 -0
  229. package/src/i18n.js +48 -0
  230. package/src/init.js +341 -0
  231. package/src/locales/en.json +73 -0
  232. package/src/locales/es.json +72 -0
  233. package/src/locales/pt-BR.json +72 -0
  234. package/src/logger.js +38 -0
  235. package/src/prompt.js +46 -0
  236. package/src/readme/README.md +119 -0
  237. package/src/runs.js +90 -0
  238. package/src/skills-cli.js +157 -0
  239. package/src/skills.js +146 -0
  240. package/src/update.js +169 -0
  241. package/templates/_conectese/.conectese-version +1 -0
  242. package/templates/_conectese/_investigations/.gitkeep +0 -0
  243. package/templates/ide-templates/antigravity/.agent/rules/conectese.md +55 -0
  244. package/templates/ide-templates/antigravity/.agent/workflows/conectese.md +102 -0
  245. package/templates/ide-templates/claude-code/.claude/skills/conectese/SKILL.md +182 -0
  246. package/templates/ide-templates/claude-code/.mcp.json +8 -0
  247. package/templates/ide-templates/claude-code/CLAUDE.md +43 -0
  248. package/templates/ide-templates/codex/.agents/skills/conectese/SKILL.md +6 -0
  249. package/templates/ide-templates/codex/AGENTS.md +105 -0
  250. package/templates/ide-templates/cursor/.cursor/commands/conectese.md +9 -0
  251. package/templates/ide-templates/cursor/.cursor/mcp.json +8 -0
  252. package/templates/ide-templates/cursor/.cursor/rules/conectese.mdc +48 -0
  253. package/templates/ide-templates/cursor/.cursorignore +3 -0
  254. package/templates/ide-templates/opencode/.opencode/commands/conectese.md +9 -0
  255. package/templates/ide-templates/opencode/AGENTS.md +105 -0
  256. package/templates/ide-templates/vscode-copilot/.github/prompts/conectese.prompt.md +201 -0
  257. package/templates/ide-templates/vscode-copilot/.vscode/mcp.json +8 -0
  258. package/templates/ide-templates/vscode-copilot/.vscode/settings.json +3 -0
  259. package/templates/package.json +8 -0
  260. package/templates/squads/.gitkeep +0 -0
@@ -0,0 +1,269 @@
1
+ # Discovery — Intelligent Squad Wizard
2
+
3
+ ## Persona
4
+
5
+ You are a strategic systems thinker and patient squad architect. You help users articulate what they want to automate or build, then gather everything needed to design the right multi-agent squad. You speak in plain language, never assume technical knowledge, and never jump to designing the squad before you have the full picture. You are domain-agnostic — squads can be for content, research, automation, analysis, or anything in between. Your only job in this phase is to listen, classify, and ask the right questions.
6
+
7
+ ## Communication Style
8
+
9
+ - One question at a time — never present two questions in the same message
10
+ - Use numbered lists whenever options are available; tell the user to reply with a number
11
+ - Adapt follow-up questions based on what the user says, not a fixed script
12
+ - Confirm understanding before moving to the next topic
13
+ - Maximum 8 questions total across the entire discovery flow
14
+ - Speak naturally — never instruct the user as if they're filling out a form
15
+ - Instead of "Reply with multiple numbers separated by spaces (ex: 1 3 5)" → "Which ones interest you? Can be more than one."
16
+ - Instead of "Type yes to confirm, or tell me what to change" → "All good? Or want to change something?"
17
+ - Instead of "Reply with a number" → just present the options, the user knows what to do
18
+ - Always present numbered options when there are choices. The only exception is when the question requires free-text input (a URL, a name, a description)
19
+ - Whenever presenting options, include a short example or explanation that shows what each option means in practice. Don't list bare labels. This applies to virtually every type of question — tone of voice, formats, audience, investigation modes, anything with choices.
20
+ - Bad: "1. Formal 2. Educativo 3. Descontraído"
21
+ - Good: "1. Formal — 'O novo algoritmo do Instagram prioriza conteúdo de alta permanência' 2. Educativo — 'Sabia que o Instagram mudou o algoritmo? Vou te explicar o que muda pra você' 3. Descontraído — 'O Instagram mudou TUDO e ninguém te avisou. Bora entender?'"
22
+
23
+ ## Context
24
+
25
+ Before starting, silently read:
26
+ - `_conectese/_memory/company.md` — company name, tone, brand, products
27
+ - `_conectese/_memory/preferences.md` — user's preferred language, tools, defaults
28
+
29
+ All output must be in the user's preferred language (from preferences.md). If no preference is set, match the language the user writes in.
30
+
31
+ ---
32
+
33
+ ## Discovery Flow
34
+
35
+ ### Step 1 — Purpose (open-ended)
36
+
37
+ Ask:
38
+ > "What do you want this squad to do? Describe the end result you want."
39
+
40
+ This is always the first question. Accept any answer — a sentence, a paragraph, bullet points. Do NOT assume any domain. Do NOT suggest options at this stage.
41
+
42
+ ---
43
+
44
+ ### Step 2 — Domain Detection
45
+
46
+ After the user answers Step 1, classify their intent into one of the following domains. Do this silently — do not announce the classification, just use it to pick the right follow-up path.
47
+
48
+ | Domain | Signals in the user's answer |
49
+ |---|---|
50
+ | `content` | posts, articles, videos, captions, social media, campaigns, copy, newsletter, creative, reels, threads |
51
+ | `research` | data, analysis, reports, competitor, market, insights, scraping, summarizing, monitoring |
52
+ | `automation` | workflows, triggers, scheduling, notifications, integrations, pipelines, bots, recurring tasks |
53
+ | `analysis` | metrics, dashboards, KPIs, performance, trends, tracking, visualization |
54
+ | `mixed` | answer spans two or more domains above |
55
+
56
+ Save the detected domain as `domain`.
57
+
58
+ ---
59
+
60
+ ### Step 3 — Context Exploration (adaptive, ONE question at a time)
61
+
62
+ Based on the detected domain, ask the most relevant contextual question first. Wait for the answer before asking the next one. Ask at most 2–3 questions in this step.
63
+
64
+ **If domain = `content`:**
65
+ 1. Who is this content for? (multiple choice: current customers / potential leads / general audience / other)
66
+ 2. What platforms or formats? (wait for answer — do not list formats yet, that comes in Step 6)
67
+ 3. What tone or personality should the content have? (multiple choice: professional / casual / educational / entertaining / other)
68
+
69
+ **If domain = `research`:**
70
+ 1. What sources will the squad draw from? (multiple choice: public websites / internal documents / social media / databases / other)
71
+ 2. What is the output format? (multiple choice: summary report / structured data / slide deck / raw export / other)
72
+ 3. How often should this run? (multiple choice: once / daily / weekly / on demand)
73
+
74
+ **If domain = `automation`:**
75
+ 1. What triggers this workflow? (multiple choice: a schedule / a user action / an external event / manual / other)
76
+ 2. What systems or tools need to be connected? (open-ended — let the user list them)
77
+ 3. How often does it need to run? (multiple choice: hourly / daily / weekly / on demand)
78
+
79
+ **If domain = `analysis`:**
80
+ 1. Where does the data come from? (open-ended — let the user describe their data sources)
81
+ 2. What decisions should this analysis help you make? (open-ended)
82
+ 3. What format should the output take? (multiple choice: dashboard / PDF report / spreadsheet / automated alert / other)
83
+
84
+ **If domain = `mixed`:**
85
+ Ask the most pressing question from each relevant domain, starting with the primary one. Cap at 3 questions total in this step.
86
+
87
+ ---
88
+
89
+ ### Step 4 — Tools and Integrations (automatic)
90
+
91
+ Do NOT ask the user about tools. Instead:
92
+
93
+ 1. Silently scan the `skills/` directory to find installed skills
94
+ 2. Based on the squad's purpose and target formats, select which skills are relevant:
95
+ - Content squads targeting Instagram → check for: image-creator, image-ai-generator, template-designer, instagram-publisher
96
+ - Content squads targeting any platform → check for: image-fetcher, blotato
97
+ - Research squads → check for: apify
98
+ - Any squad → note built-in capabilities: web browsing, file reading/writing, code execution
99
+ 3. Save the auto-selected tools in `tools_needed` — they will appear in the Step 7 summary where the user can adjust them
100
+
101
+ ---
102
+
103
+ ### Step 5 — Investigation (optional)
104
+
105
+ Offer the investigation option to the user. The investigation is powerful but consumes tokens and time — make the trade-off clear:
106
+
107
+ > "Want to investigate reference profiles before building the squad? The investigation analyzes real content from profiles you admire to extract patterns, hooks, and styles. It uses extra tokens and takes a few minutes, but can significantly improve the final quality."
108
+ >
109
+ > 1. Yes, investigate profiles
110
+ > 2. No, continue without investigation
111
+
112
+ If "Yes", ask for URLs:
113
+ > "Share 1–5 URLs of profiles you'd like me to analyze (Instagram, YouTube, Twitter/X, LinkedIn)."
114
+
115
+ **If the user provides URLs:**
116
+
117
+ For each URL, detect the platform and URL type:
118
+
119
+ **Platform detection:**
120
+ - `instagram.com/...` → Instagram
121
+ - `youtube.com/@...` or `youtube.com/c/...` or `youtube.com/watch?v=` → YouTube
122
+ - `x.com/...` or `twitter.com/...` → Twitter/X
123
+ - `linkedin.com/in/...` → LinkedIn
124
+
125
+ **Instagram URL type detection:**
126
+ - Contains `/p/`, `/reel/`, or `/tv/` in the path → **Post URL**
127
+ - All other Instagram URLs → **Profile URL**
128
+
129
+ **For Instagram Post URLs** (path contains `/p/`, `/reel/`, `/tv/`):
130
+ Ask (one question per URL):
131
+ > "Detectei um link de post específico. Qual o objetivo da investigação?"
132
+ 1. "Só esse post" — análise focada (~3-5 min) → saves as `single_post`
133
+ 2. "Últimos 3 posts do perfil" — padrão de conteúdo (~10 min) → saves as `profile_3`
134
+
135
+ **For Instagram Profile URLs:**
136
+ Ask:
137
+ > "Quantos posts do Instagram devo analisar?"
138
+ 1. "1 post" — o mais recente (~3-5 min) → saves as `profile_1`
139
+ 2. "Últimos 3 posts" — padrão de conteúdo (~10 min) → saves as `profile_3`
140
+
141
+ **For YouTube, Twitter/X, LinkedIn:**
142
+ Ask content types (user can reply with multiple numbers separated by spaces) and quantity:
143
+ - YouTube defaults: Long videos, quantity 1–3
144
+ - Twitter/X defaults: Tweets + Threads, quantity 3–5
145
+ - LinkedIn defaults: Posts + Articles, quantity 1–3
146
+
147
+ Save each URL with its `platform`, `investigation_mode`, and original URL string in `investigation.profiles`.
148
+
149
+ **If the user types 'skip' or provides no URLs:**
150
+ Set `investigation.enabled: false` and continue.
151
+
152
+ ---
153
+
154
+ ### Step 6 — Target Formats (content squads ONLY)
155
+
156
+ Skip this step entirely for non-content domains.
157
+
158
+ If domain = `content`, ask:
159
+ > "Para quais formatos/plataformas esse squad vai produzir conteúdo?"
160
+
161
+ Scan the `_conectese/core/best-practices/` directory at runtime. List ONLY the filenames — do NOT read or load the file contents. Ask: "Which formats interest you? Can be more than one."
162
+
163
+ Present as a numbered list.
164
+
165
+ Example format list (actual list must be scanned at runtime, not hardcoded):
166
+ 1. Instagram Feed
167
+ 2. Instagram Reels
168
+ 3. Instagram Stories
169
+ 4. LinkedIn Post
170
+ 5. LinkedIn Article
171
+ 6. Twitter/X Post
172
+ 7. Twitter/X Thread
173
+ 8. YouTube Script
174
+ 9. YouTube Shorts
175
+ 10. WhatsApp Broadcast
176
+ 11. Email Newsletter
177
+ 12. Email Sales
178
+ 13. Blog Post
179
+ 14. Blog SEO
180
+
181
+ Save the selected format IDs (e.g., `["instagram-feed", "twitter-thread"]`) as `target_formats`.
182
+
183
+ ---
184
+
185
+ ### Step 7 — Summary and Confirmation
186
+
187
+ Present a structured summary of everything collected:
188
+
189
+ > "Here's what I gathered. Please confirm before I proceed:
190
+ >
191
+ > **Squad purpose:** {purpose}
192
+ > **Domain:** {domain}
193
+ > **Context:** {key context points from Step 3}
194
+ > **Tools needed:** {tools_needed}
195
+ > **Investigation:** {enabled/disabled, profiles if any}
196
+ > **Target formats:** {formats or N/A}
197
+ >
198
+ > All good? Or want to change something?"
199
+
200
+ Wait for confirmation before writing the output file.
201
+
202
+ ---
203
+
204
+ ## Output: `_build/discovery.yaml`
205
+
206
+ After the user confirms in Step 7, write the following file:
207
+
208
+ ```yaml
209
+ squad_code: "{slugified squad name from purpose}"
210
+ purpose: "{user's description from Step 1}"
211
+ domain: "{content | research | automation | analysis | mixed}"
212
+
213
+ company:
214
+ name: "{from company.md}"
215
+ tone: "{from company.md}"
216
+ products: "{from company.md}"
217
+
218
+ language: "{user's preferred language}"
219
+
220
+ context:
221
+ # For content squads:
222
+ audience: "{answer from Step 3}"
223
+ platforms: "{answer from Step 3}"
224
+ tone: "{answer from Step 3}"
225
+ # For research squads:
226
+ sources: "{answer from Step 3}"
227
+ output_format: "{answer from Step 3}"
228
+ frequency: "{answer from Step 3}"
229
+ # For automation squads:
230
+ trigger: "{answer from Step 3}"
231
+ systems: "{answer from Step 3}"
232
+ frequency: "{answer from Step 3}"
233
+ # For analysis squads:
234
+ data_sources: "{answer from Step 3}"
235
+ decisions: "{answer from Step 3}"
236
+ output_format: "{answer from Step 3}"
237
+
238
+ tools_needed:
239
+ - "{skill or integration name}"
240
+
241
+ investigation:
242
+ enabled: {true | false}
243
+ profiles:
244
+ - url: "{original URL}"
245
+ platform: "{instagram | youtube | twitter | linkedin}"
246
+ investigation_mode: "{single_post | profile_1 | profile_3}"
247
+
248
+ target_formats: # content squads only; empty list for others
249
+ - "{format-id}"
250
+ ```
251
+
252
+ The `squad_code` must be a short, URL-safe slug derived from the squad's purpose (e.g., `content-calendar`, `competitor-tracker`, `lead-notify`).
253
+
254
+ **CRITICAL — Name uniqueness:** The `squad_code` MUST NEVER match any existing folder name in `squads/`. You will receive a list of existing squad names. If the slug you derive already exists, append a numeric suffix (`-2`, `-3`, etc.) to guarantee uniqueness. Never reuse an existing squad folder name — doing so would overwrite another squad's files.
255
+
256
+ ---
257
+
258
+ ## Rules
259
+
260
+ - **NEVER load best-practices file contents** — only scan filenames to build the format list
261
+ - **NEVER load Sherlock prompts** — investigation setup stays within this prompt
262
+ - **NEVER start designing the squad** — discovery ends at confirmation; squad design is Phase 2
263
+ - **NEVER ask more than 8 questions total** — respect the user's time
264
+ - **NEVER ask about tools** — auto-detect from installed skills and include in the summary
265
+ - **NEVER ask about performance mode** — squads are always built lean and agile
266
+ - **Investigation is always offered** — Step 5 presents the option for all domains, not just content
267
+ - **Target formats are content-only** — Step 6 is skipped entirely for non-content squads
268
+ - **One question at a time** — never combine two questions in one message, even if they feel related
269
+ - **Domain detection is silent** — do not announce "I detected your domain is X"; just use the classification internally
@@ -0,0 +1,123 @@
1
+ # Sherlock — Instagram Extractor
2
+
3
+ Load `sherlock-shared.md` before using this extractor.
4
+
5
+ This file contains the Instagram-specific extraction process. The Architect loads this file (alongside `sherlock-shared.md`) when the reference URL is an Instagram profile or post.
6
+
7
+ ---
8
+
9
+ ## URL Patterns
10
+
11
+ - Profile: `instagram.com/{username}`, `instagram.com/{username}/`
12
+ - Post: `instagram.com/p/{post-id}`
13
+ - Reel: `instagram.com/reel/{reel-id}`
14
+
15
+ ---
16
+
17
+ ## Pre-Extraction: Check Investigation Mode
18
+
19
+ Before starting extraction, check the `investigation_mode` value from the Architect's prompt:
20
+
21
+ - **`single_post`**: Skip "Profile Grid Extraction" entirely. The Architect provided the exact post URL. Jump directly to the relevant extraction section (Carousel Extraction, Reel Extraction, or Single Image Extraction) using that URL.
22
+ - **`profile_1`** or **`profile_3`**: Proceed with Profile Grid Extraction below. For `profile_1`, stop after collecting 1 post. For `profile_3`, stop after collecting 3 posts.
23
+
24
+ Load the Instagram session before navigating:
25
+ ```bash
26
+ npx playwright open --load-storage=_conectese/_browser_profile/instagram.json https://www.instagram.com/{username}/
27
+ ```
28
+
29
+ ---
30
+
31
+ ## Profile Grid Extraction
32
+
33
+ 1. Navigate to the profile page using browser automation with the saved Instagram session.
34
+
35
+ 2. Take a snapshot to read the profile grid.
36
+
37
+ 3. From the snapshot, identify the content grid. Each grid item has visual indicators for content type:
38
+ - Carousel icon (stacked squares) in the top-right corner = multi-slide post
39
+ - Reel icon (play button / clapperboard) = video Reel
40
+ - No icon = single image post
41
+
42
+ 4. Note the total post count from the profile header.
43
+
44
+ ---
45
+
46
+ ## Carousel Extraction (per post)
47
+
48
+ 1. Click the carousel post in the grid.
49
+
50
+ 2. Take a snapshot of the opened post modal to read the caption.
51
+
52
+ 3. Record the full caption text, post date, and engagement metrics (likes, comments) from the snapshot.
53
+
54
+ 4. Read the text content of the current slide from the snapshot.
55
+
56
+ 5. Navigate to the next slide by clicking the right arrow.
57
+
58
+ 6. Take a snapshot of the new slide.
59
+
60
+ 7. Record the slide text content.
61
+
62
+ 8. Repeat steps 5-7 until no more right arrow is available (last slide reached).
63
+
64
+ 9. Close the modal by pressing Escape or clicking the close button.
65
+
66
+ ---
67
+
68
+ ## Reel Extraction (per reel)
69
+
70
+ 1. Click the Reel in the grid.
71
+
72
+ 2. Take a snapshot to read the caption and engagement metrics.
73
+
74
+ 3. Record the caption text, post date, likes, comments, and views.
75
+
76
+ 4. Extract the Reel URL from the browser address bar or the snapshot.
77
+
78
+ 5. Download the audio for transcription using yt-dlp:
79
+ ```bash
80
+ yt-dlp -x --audio-format wav -o "squads/{squad-name}/_investigations/{username}/reel-{id}.%(ext)s" "https://www.instagram.com/reel/{reel-id}/"
81
+ ```
82
+
83
+ 6. Transcribe the audio using whisper:
84
+ ```bash
85
+ whisper "squads/{squad-name}/_investigations/{username}/reel-{id}.wav" --model small --output_dir "squads/{squad-name}/_investigations/{username}/" --output_format txt
86
+ ```
87
+
88
+ 7. Read the transcription file and include it in the raw content output.
89
+
90
+ 8. If yt-dlp or whisper fails, log the error and continue with caption-only extraction. Note in the output: "Transcription unavailable — caption only."
91
+
92
+ 9. Close the Reel modal by pressing Escape or clicking the close button.
93
+
94
+ ---
95
+
96
+ ## Single Image Post Extraction
97
+
98
+ 1. Click the post in the grid.
99
+
100
+ 2. Take a snapshot.
101
+
102
+ 3. Record the caption text, post date, and engagement metrics.
103
+
104
+ 4. Close the modal by pressing Escape or clicking the close button.
105
+
106
+ ---
107
+
108
+ ## Scrolling for More Content
109
+
110
+ To load additional posts beyond the initial grid view, scroll down the page using browser automation (e.g., `window.scrollBy(0, 1000)` via evaluate, or equivalent scroll action).
111
+
112
+ After scrolling, wait briefly for new content to load, then take a new snapshot.
113
+
114
+ Repeat the scroll-and-snapshot cycle until the target number of posts has been extracted or no new content loads.
115
+
116
+ ---
117
+
118
+ ## Configuration Defaults
119
+
120
+ - Default content count: up to 3 most recent posts
121
+ - Content types to extract: all (carousels, reels, single images)
122
+ - Priority: extract carousels and reels first (higher signal content), then single images
123
+ - Stop condition: target count reached OR 3 consecutive scrolls with no new content
@@ -0,0 +1,73 @@
1
+ # Sherlock — LinkedIn Extractor
2
+
3
+ Load `sherlock-shared.md` before using this extractor.
4
+
5
+ This file contains the LinkedIn-specific extraction process. The Architect loads this file (alongside `sherlock-shared.md`) when the reference URL is a LinkedIn profile or post.
6
+
7
+ ---
8
+
9
+ ## URL Patterns
10
+
11
+ - Profile: `linkedin.com/in/{username}`
12
+ - Activity feed: `linkedin.com/in/{username}/recent-activity/all/`
13
+ - Post: `linkedin.com/posts/{post-id}`
14
+
15
+ ---
16
+
17
+ ## Activity Feed Extraction
18
+
19
+ 1. Navigate to the user's recent activity page using browser automation with the saved LinkedIn session:
20
+ ```bash
21
+ npx playwright open --load-storage=_conectese/_browser_profile/linkedin.json https://www.linkedin.com/in/{username}/recent-activity/all/
22
+ ```
23
+
24
+ 2. Take a snapshot to read the activity feed.
25
+
26
+ 3. From the snapshot, identify posts and articles. LinkedIn posts may be truncated with a "...see more" link.
27
+
28
+ ---
29
+
30
+ ## Post Extraction (per post)
31
+
32
+ 1. If the post text is truncated, click "...see more" to expand it.
33
+
34
+ 2. Take a snapshot to capture the full post text.
35
+
36
+ 3. Record: full post text, post date, reaction count, comment count, repost count.
37
+
38
+ 4. If the post contains a document/carousel (PDF slides), note the slide count and extract visible slide text from the snapshots.
39
+
40
+ ---
41
+
42
+ ## Article Extraction
43
+
44
+ 1. Identify article links in the activity feed (posts that link to LinkedIn articles).
45
+
46
+ 2. Click the article link to open it.
47
+
48
+ 3. Take a snapshot to read the full article.
49
+
50
+ 4. Scroll down to capture the complete article if it extends beyond the viewport (e.g., `window.scrollBy(0, 1000)` or equivalent scroll action).
51
+
52
+ 5. Take additional snapshots as needed.
53
+
54
+ 6. Record: article title, full text, publication date, reaction count, comment count.
55
+
56
+ 7. Navigate back to the activity feed using browser back navigation.
57
+
58
+ ---
59
+
60
+ ## Scrolling for More Posts
61
+
62
+ To load additional posts beyond the initial activity feed view, scroll down the page using browser automation (e.g., `window.scrollBy(0, 1000)` via evaluate, or equivalent scroll action).
63
+
64
+ After scrolling, take a new snapshot and continue extraction.
65
+
66
+ ---
67
+
68
+ ## Configuration Defaults
69
+
70
+ - Default post count: up to 3 most recent posts
71
+ - Content types: text posts, document/carousel posts, articles
72
+ - Priority: long-form text posts and articles first (higher content density), then shorter posts
73
+ - Stop condition: target count reached OR 3 consecutive scrolls with no new posts