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.
- package/README.md +265 -0
- package/_conectese/.conectese-version +1 -0
- package/_conectese/config/playwright.config.json +11 -0
- package/_conectese/core/architect.agent.yaml +110 -0
- package/_conectese/core/best-practices/_catalog.yaml +116 -0
- package/_conectese/core/best-practices/blog-post.md +132 -0
- package/_conectese/core/best-practices/blog-seo.md +127 -0
- package/_conectese/core/best-practices/copywriting.md +426 -0
- package/_conectese/core/best-practices/data-analysis.md +401 -0
- package/_conectese/core/best-practices/email-newsletter.md +118 -0
- package/_conectese/core/best-practices/email-sales.md +110 -0
- package/_conectese/core/best-practices/image-design.md +348 -0
- package/_conectese/core/best-practices/instagram-feed.md +235 -0
- package/_conectese/core/best-practices/instagram-reels.md +112 -0
- package/_conectese/core/best-practices/instagram-stories.md +107 -0
- package/_conectese/core/best-practices/linkedin-article.md +116 -0
- package/_conectese/core/best-practices/linkedin-post.md +121 -0
- package/_conectese/core/best-practices/researching.md +349 -0
- package/_conectese/core/best-practices/review.md +269 -0
- package/_conectese/core/best-practices/social-networks-publishing.md +294 -0
- package/_conectese/core/best-practices/strategist.md +344 -0
- package/_conectese/core/best-practices/technical-writing.md +365 -0
- package/_conectese/core/best-practices/twitter-post.md +105 -0
- package/_conectese/core/best-practices/twitter-thread.md +122 -0
- package/_conectese/core/best-practices/whatsapp-broadcast.md +107 -0
- package/_conectese/core/best-practices/youtube-script.md +122 -0
- package/_conectese/core/best-practices/youtube-shorts.md +112 -0
- package/_conectese/core/prompts/build.prompt.md +547 -0
- package/_conectese/core/prompts/design.prompt.md +469 -0
- package/_conectese/core/prompts/discovery.prompt.md +269 -0
- package/_conectese/core/prompts/sherlock-instagram.md +123 -0
- package/_conectese/core/prompts/sherlock-linkedin.md +73 -0
- package/_conectese/core/prompts/sherlock-shared.md +684 -0
- package/_conectese/core/prompts/sherlock-twitter.md +78 -0
- package/_conectese/core/prompts/sherlock-youtube.md +85 -0
- package/_conectese/core/runner.pipeline.md +535 -0
- package/_conectese/core/skills.engine.md +381 -0
- package/agents/data-extractor/AGENT.md +13 -0
- package/agents/direito-adaneiro/AGENT.md +18 -0
- package/agents/direito-administrativo/AGENT.md +18 -0
- package/agents/direito-aeroporta-rio/AGENT.md +18 -0
- package/agents/direito-agra-rio/AGENT.md +18 -0
- package/agents/direito-ambiental/AGENT.md +18 -0
- package/agents/direito-banca-rio/AGENT.md +18 -0
- package/agents/direito-civil/AGENT.md +18 -0
- package/agents/direito-constitcional/AGENT.md +18 -0
- package/agents/direito-da-crianc-a-e-do-adolescente-eca/AGENT.md +18 -0
- package/agents/direito-da-propriedade-intelectal/AGENT.md +18 -0
- package/agents/direito-de-ami-lia/AGENT.md +18 -0
- package/agents/direito-de-tra-nsito/AGENT.md +18 -0
- package/agents/direito-desportivo/AGENT.md +18 -0
- package/agents/direito-digital/AGENT.md +18 -0
- package/agents/direito-do-consmidor/AGENT.md +18 -0
- package/agents/direito-do-trabalho/AGENT.md +18 -0
- package/agents/direito-econo-mico/AGENT.md +18 -0
- package/agents/direito-eleitoral/AGENT.md +18 -0
- package/agents/direito-empresarial/AGENT.md +18 -0
- package/agents/direito-imobilia-rio/AGENT.md +18 -0
- package/agents/direito-inanceiro/AGENT.md +18 -0
- package/agents/direito-internacional/AGENT.md +18 -0
- package/agents/direito-mari-timo/AGENT.md +18 -0
- package/agents/direito-me-dico-e-da-sa-de/AGENT.md +18 -0
- package/agents/direito-militar/AGENT.md +18 -0
- package/agents/direito-ndia-rio/AGENT.md +18 -0
- package/agents/direito-notarial-e-registral/AGENT.md +18 -0
- package/agents/direito-penal/AGENT.md +18 -0
- package/agents/direito-previdencia-rio/AGENT.md +18 -0
- package/agents/direito-processal-civil/AGENT.md +18 -0
- package/agents/direito-processal-do-trabalho/AGENT.md +18 -0
- package/agents/direito-processal-militar/AGENT.md +18 -0
- package/agents/direito-processal-penal/AGENT.md +18 -0
- package/agents/direito-rbani-stico/AGENT.md +18 -0
- package/agents/direito-secrita-rio/AGENT.md +18 -0
- package/agents/direito-sindical/AGENT.md +18 -0
- package/agents/direito-societa-rio/AGENT.md +18 -0
- package/agents/direito-tribta-rio/AGENT.md +18 -0
- package/agents/direitos-hmanos/AGENT.md +18 -0
- package/agents/legal-analyst/AGENT.md +16 -0
- package/agents/legal-synthesizer/AGENT.md +13 -0
- package/agents/lgpd-anonymizer/AGENT.md +14 -0
- package/agents/lgpd-restorer/AGENT.md +14 -0
- package/agents/task-router/AGENT.md +13 -0
- package/bin/conectese.js +73 -0
- package/dashboard/index.html +12 -0
- package/dashboard/package-lock.json +1971 -0
- package/dashboard/package.json +28 -0
- package/dashboard/public/assets/avatars/Female1_1wave.png +0 -0
- package/dashboard/public/assets/avatars/Female1_2wave.png +0 -0
- package/dashboard/public/assets/avatars/Female1_blink.png +0 -0
- package/dashboard/public/assets/avatars/Female1_talk.png +0 -0
- package/dashboard/public/assets/avatars/Female2_1wave.png +0 -0
- package/dashboard/public/assets/avatars/Female2_2wave.png +0 -0
- package/dashboard/public/assets/avatars/Female2_blink.png +0 -0
- package/dashboard/public/assets/avatars/Female2_talk.png +0 -0
- package/dashboard/public/assets/avatars/Female3_blink.png +0 -0
- package/dashboard/public/assets/avatars/Female3_talk.png +0 -0
- package/dashboard/public/assets/avatars/Female3_wave.png +0 -0
- package/dashboard/public/assets/avatars/Female4_blink.png +0 -0
- package/dashboard/public/assets/avatars/Female4_talk.png +0 -0
- package/dashboard/public/assets/avatars/Female4_wave.png +0 -0
- package/dashboard/public/assets/avatars/Female5_blink.png +0 -0
- package/dashboard/public/assets/avatars/Female5_talk.png +0 -0
- package/dashboard/public/assets/avatars/Female5_wave.png +0 -0
- package/dashboard/public/assets/avatars/Female6_blink.png +0 -0
- package/dashboard/public/assets/avatars/Female6_talk.png +0 -0
- package/dashboard/public/assets/avatars/Female6_wave.png +0 -0
- package/dashboard/public/assets/avatars/Male1_1wave.png +0 -0
- package/dashboard/public/assets/avatars/Male1_2wave.png +0 -0
- package/dashboard/public/assets/avatars/Male1_blink.png +0 -0
- package/dashboard/public/assets/avatars/Male1_talk.png +0 -0
- package/dashboard/public/assets/avatars/Male2_1wave.png +0 -0
- package/dashboard/public/assets/avatars/Male2_2wave.png +0 -0
- package/dashboard/public/assets/avatars/Male2_blink.png +0 -0
- package/dashboard/public/assets/avatars/Male2_talk.png +0 -0
- package/dashboard/public/assets/avatars/Male3_blink.png +0 -0
- package/dashboard/public/assets/avatars/Male3_talk.png +0 -0
- package/dashboard/public/assets/avatars/Male3_wave.png +0 -0
- package/dashboard/public/assets/avatars/Male4_blink.png +0 -0
- package/dashboard/public/assets/avatars/Male4_talk.png +0 -0
- package/dashboard/public/assets/avatars/Male4_wave.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_black_down.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_black_down_coding-1.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_black_down_coding.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_black_up.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_white_down.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_white_down_coding-1.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_white_down_coding.png +0 -0
- package/dashboard/public/assets/desks/desktop_set_white_up.png +0 -0
- package/dashboard/public/assets/furniture/armchair_tan.png +0 -0
- package/dashboard/public/assets/furniture/armchair_tan_down.png +0 -0
- package/dashboard/public/assets/furniture/backpack_blue.png +0 -0
- package/dashboard/public/assets/furniture/backpack_red.png +0 -0
- package/dashboard/public/assets/furniture/blinds.png +0 -0
- package/dashboard/public/assets/furniture/blinds_large_closed_white.png +0 -0
- package/dashboard/public/assets/furniture/bookshelf.png +0 -0
- package/dashboard/public/assets/furniture/bookshelf_purple_tall.png +0 -0
- package/dashboard/public/assets/furniture/bulletin_board.png +0 -0
- package/dashboard/public/assets/furniture/clock.png +0 -0
- package/dashboard/public/assets/furniture/coffee_mug.png +0 -0
- package/dashboard/public/assets/furniture/coffee_mug_blue.png +0 -0
- package/dashboard/public/assets/furniture/coffee_table.png +0 -0
- package/dashboard/public/assets/furniture/coffeepot_right.png +0 -0
- package/dashboard/public/assets/furniture/coffeetable_black_horizontal.png +0 -0
- package/dashboard/public/assets/furniture/couch.png +0 -0
- package/dashboard/public/assets/furniture/couch_tan_down.png +0 -0
- package/dashboard/public/assets/furniture/cushion_blue.png +0 -0
- package/dashboard/public/assets/furniture/cushion_tan.png +0 -0
- package/dashboard/public/assets/furniture/desk_wood.png +0 -0
- package/dashboard/public/assets/furniture/fancy_rug.png +0 -0
- package/dashboard/public/assets/furniture/fancy_rug_wide.png +0 -0
- package/dashboard/public/assets/furniture/flowers1.png +0 -0
- package/dashboard/public/assets/furniture/flowers2.png +0 -0
- package/dashboard/public/assets/furniture/lamp_tan.png +0 -0
- package/dashboard/public/assets/furniture/lantern.png +0 -0
- package/dashboard/public/assets/furniture/monstera.png +0 -0
- package/dashboard/public/assets/furniture/monstera_small.png +0 -0
- package/dashboard/public/assets/furniture/picture_frame.png +0 -0
- package/dashboard/public/assets/furniture/plant1.png +0 -0
- package/dashboard/public/assets/furniture/plant2.png +0 -0
- package/dashboard/public/assets/furniture/plant3.png +0 -0
- package/dashboard/public/assets/furniture/plant_poof.png +0 -0
- package/dashboard/public/assets/furniture/plant_spindly.png +0 -0
- package/dashboard/public/assets/furniture/poster_blue.png +0 -0
- package/dashboard/public/assets/furniture/rug.png +0 -0
- package/dashboard/public/assets/furniture/succulent_blue.png +0 -0
- package/dashboard/public/assets/furniture/succulent_green.png +0 -0
- package/dashboard/public/assets/furniture/treasurechest_closed_gold.png +0 -0
- package/dashboard/public/assets/furniture/water_cooler_better.png +0 -0
- package/dashboard/public/assets/furniture/whiteboard.png +0 -0
- package/dashboard/public/assets/furniture/whiteboard_stand_graph.png +0 -0
- package/dashboard/public/assets/furniture/window_blinds_open.png +0 -0
- package/dashboard/src/App.tsx +46 -0
- package/dashboard/src/components/SquadCard.tsx +47 -0
- package/dashboard/src/components/SquadSelector.tsx +61 -0
- package/dashboard/src/components/StatusBadge.tsx +32 -0
- package/dashboard/src/components/StatusBar.tsx +97 -0
- package/dashboard/src/hooks/useSquadSocket.ts +135 -0
- package/dashboard/src/lib/formatTime.ts +16 -0
- package/dashboard/src/lib/normalizeState.ts +25 -0
- package/dashboard/src/main.tsx +10 -0
- package/dashboard/src/office/AgentSprite.ts +241 -0
- package/dashboard/src/office/OfficeScene.ts +153 -0
- package/dashboard/src/office/PhaserGame.tsx +80 -0
- package/dashboard/src/office/RoomBuilder.ts +190 -0
- package/dashboard/src/office/assetKeys.ts +150 -0
- package/dashboard/src/office/palette.ts +32 -0
- package/dashboard/src/plugin/squadWatcher.ts +233 -0
- package/dashboard/src/store/useSquadStore.ts +56 -0
- package/dashboard/src/styles/globals.css +36 -0
- package/dashboard/src/types/state.ts +63 -0
- package/dashboard/src/vite-env.d.ts +1 -0
- package/dashboard/test-results/.last-run.json +4 -0
- package/dashboard/tsconfig.json +24 -0
- package/dashboard/tsconfig.tsbuildinfo +1 -0
- package/dashboard/vite.config.ts +13 -0
- package/package.json +53 -0
- package/skills/README.md +63 -0
- package/skills/apify/SKILL.md +55 -0
- package/skills/blotato/SKILL.md +63 -0
- package/skills/canva/SKILL.md +60 -0
- package/skills/conectese-agent-creator/SKILL.md +192 -0
- package/skills/conectese-skill-creator/SKILL.md +407 -0
- package/skills/conectese-skill-creator/agents/analyzer.md +274 -0
- package/skills/conectese-skill-creator/agents/comparator.md +202 -0
- package/skills/conectese-skill-creator/agents/grader.md +223 -0
- package/skills/conectese-skill-creator/assets/eval_review.html +146 -0
- package/skills/conectese-skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/conectese-skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/conectese-skill-creator/references/schemas.md +430 -0
- package/skills/conectese-skill-creator/references/skill-format.md +235 -0
- package/skills/conectese-skill-creator/scripts/__init__.py +0 -0
- package/skills/conectese-skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/conectese-skill-creator/scripts/quick_validate.py +103 -0
- package/skills/conectese-skill-creator/scripts/run_eval.py +310 -0
- package/skills/conectese-skill-creator/scripts/utils.py +47 -0
- package/skills/image-ai-generator/SKILL.md +124 -0
- package/skills/image-ai-generator/scripts/generate.py +175 -0
- package/skills/image-creator/SKILL.md +155 -0
- package/skills/image-fetcher/SKILL.md +91 -0
- package/skills/instagram-publisher/SKILL.md +119 -0
- package/skills/instagram-publisher/scripts/publish.js +165 -0
- package/skills/resend/SKILL.md +80 -0
- package/skills/template-designer/SKILL.md +201 -0
- package/skills/template-designer/base-templates/model-a.html +27 -0
- package/skills/template-designer/base-templates/model-b.html +31 -0
- package/skills/template-designer/base-templates/model-c.html +42 -0
- package/src/agents-cli.js +158 -0
- package/src/agents.js +134 -0
- package/src/i18n.js +48 -0
- package/src/init.js +341 -0
- package/src/locales/en.json +73 -0
- package/src/locales/es.json +72 -0
- package/src/locales/pt-BR.json +72 -0
- package/src/logger.js +38 -0
- package/src/prompt.js +46 -0
- package/src/readme/README.md +119 -0
- package/src/runs.js +90 -0
- package/src/skills-cli.js +157 -0
- package/src/skills.js +146 -0
- package/src/update.js +169 -0
- package/templates/_conectese/.conectese-version +1 -0
- package/templates/_conectese/_investigations/.gitkeep +0 -0
- package/templates/ide-templates/antigravity/.agent/rules/conectese.md +55 -0
- package/templates/ide-templates/antigravity/.agent/workflows/conectese.md +102 -0
- package/templates/ide-templates/claude-code/.claude/skills/conectese/SKILL.md +182 -0
- package/templates/ide-templates/claude-code/.mcp.json +8 -0
- package/templates/ide-templates/claude-code/CLAUDE.md +43 -0
- package/templates/ide-templates/codex/.agents/skills/conectese/SKILL.md +6 -0
- package/templates/ide-templates/codex/AGENTS.md +105 -0
- package/templates/ide-templates/cursor/.cursor/commands/conectese.md +9 -0
- package/templates/ide-templates/cursor/.cursor/mcp.json +8 -0
- package/templates/ide-templates/cursor/.cursor/rules/conectese.mdc +48 -0
- package/templates/ide-templates/cursor/.cursorignore +3 -0
- package/templates/ide-templates/opencode/.opencode/commands/conectese.md +9 -0
- package/templates/ide-templates/opencode/AGENTS.md +105 -0
- package/templates/ide-templates/vscode-copilot/.github/prompts/conectese.prompt.md +201 -0
- package/templates/ide-templates/vscode-copilot/.vscode/mcp.json +8 -0
- package/templates/ide-templates/vscode-copilot/.vscode/settings.json +3 -0
- package/templates/package.json +8 -0
- 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
|