goiabaseeds 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/README.md +173 -0
  2. package/bin/goiabaseeds.js +98 -0
  3. package/eslint.config.js +14 -0
  4. package/package.json +61 -0
  5. package/skills/README.md +60 -0
  6. package/skills/apify/SKILL.md +55 -0
  7. package/skills/blotato/SKILL.md +63 -0
  8. package/skills/canva/SKILL.md +60 -0
  9. package/skills/goiabaseeds-agent-creator/SKILL.md +192 -0
  10. package/skills/goiabaseeds-skill-creator/SKILL.md +407 -0
  11. package/skills/goiabaseeds-skill-creator/agents/analyzer.md +274 -0
  12. package/skills/goiabaseeds-skill-creator/agents/comparator.md +202 -0
  13. package/skills/goiabaseeds-skill-creator/agents/grader.md +223 -0
  14. package/skills/goiabaseeds-skill-creator/assets/eval_review.html +146 -0
  15. package/skills/goiabaseeds-skill-creator/eval-viewer/generate_review.py +471 -0
  16. package/skills/goiabaseeds-skill-creator/eval-viewer/viewer.html +1325 -0
  17. package/skills/goiabaseeds-skill-creator/references/schemas.md +430 -0
  18. package/skills/goiabaseeds-skill-creator/references/skill-format.md +235 -0
  19. package/skills/goiabaseeds-skill-creator/scripts/__init__.py +0 -0
  20. package/skills/goiabaseeds-skill-creator/scripts/aggregate_benchmark.py +401 -0
  21. package/skills/goiabaseeds-skill-creator/scripts/quick_validate.py +103 -0
  22. package/skills/goiabaseeds-skill-creator/scripts/run_eval.py +310 -0
  23. package/skills/goiabaseeds-skill-creator/scripts/utils.py +47 -0
  24. package/skills/image-creator/SKILL.md +155 -0
  25. package/skills/image-fetcher/SKILL.md +91 -0
  26. package/skills/image-generator/SKILL.md +124 -0
  27. package/skills/image-generator/scripts/generate.py +175 -0
  28. package/skills/instagram-publisher/SKILL.md +118 -0
  29. package/skills/instagram-publisher/scripts/publish.js +164 -0
  30. package/src/agent-session.js +110 -0
  31. package/src/agents-cli.js +158 -0
  32. package/src/agents.js +134 -0
  33. package/src/bundle-detector.js +75 -0
  34. package/src/bundle.js +286 -0
  35. package/src/context.js +142 -0
  36. package/src/export.js +52 -0
  37. package/src/i18n.js +48 -0
  38. package/src/init.js +367 -0
  39. package/src/locales/en.json +72 -0
  40. package/src/locales/es.json +71 -0
  41. package/src/locales/pt-BR.json +71 -0
  42. package/src/logger.js +38 -0
  43. package/src/models-cli.js +165 -0
  44. package/src/pipeline-runner.js +478 -0
  45. package/src/prompt.js +46 -0
  46. package/src/provider.js +156 -0
  47. package/src/readme/README.md +181 -0
  48. package/src/run.js +100 -0
  49. package/src/runs.js +90 -0
  50. package/src/skills-cli.js +157 -0
  51. package/src/skills.js +146 -0
  52. package/src/state-manager.js +280 -0
  53. package/src/tools.js +158 -0
  54. package/src/update.js +140 -0
  55. package/templates/_goiabaseeds/.goiabaseeds-version +1 -0
  56. package/templates/_goiabaseeds/_investigations/.gitkeep +0 -0
  57. package/templates/_goiabaseeds/config/playwright.config.json +11 -0
  58. package/templates/_goiabaseeds/core/architect.agent.yaml +1141 -0
  59. package/templates/_goiabaseeds/core/best-practices/_catalog.yaml +116 -0
  60. package/templates/_goiabaseeds/core/best-practices/blog-post.md +132 -0
  61. package/templates/_goiabaseeds/core/best-practices/blog-seo.md +127 -0
  62. package/templates/_goiabaseeds/core/best-practices/copywriting.md +428 -0
  63. package/templates/_goiabaseeds/core/best-practices/data-analysis.md +401 -0
  64. package/templates/_goiabaseeds/core/best-practices/email-newsletter.md +118 -0
  65. package/templates/_goiabaseeds/core/best-practices/email-sales.md +110 -0
  66. package/templates/_goiabaseeds/core/best-practices/image-design.md +349 -0
  67. package/templates/_goiabaseeds/core/best-practices/instagram-feed.md +235 -0
  68. package/templates/_goiabaseeds/core/best-practices/instagram-reels.md +112 -0
  69. package/templates/_goiabaseeds/core/best-practices/instagram-stories.md +107 -0
  70. package/templates/_goiabaseeds/core/best-practices/linkedin-article.md +116 -0
  71. package/templates/_goiabaseeds/core/best-practices/linkedin-post.md +121 -0
  72. package/templates/_goiabaseeds/core/best-practices/researching.md +347 -0
  73. package/templates/_goiabaseeds/core/best-practices/review.md +269 -0
  74. package/templates/_goiabaseeds/core/best-practices/social-networks-publishing.md +294 -0
  75. package/templates/_goiabaseeds/core/best-practices/strategist.md +344 -0
  76. package/templates/_goiabaseeds/core/best-practices/technical-writing.md +363 -0
  77. package/templates/_goiabaseeds/core/best-practices/twitter-post.md +105 -0
  78. package/templates/_goiabaseeds/core/best-practices/twitter-thread.md +122 -0
  79. package/templates/_goiabaseeds/core/best-practices/whatsapp-broadcast.md +107 -0
  80. package/templates/_goiabaseeds/core/best-practices/youtube-script.md +122 -0
  81. package/templates/_goiabaseeds/core/best-practices/youtube-shorts.md +112 -0
  82. package/templates/_goiabaseeds/core/prompts/auguste.dupin.prompt.md +1008 -0
  83. package/templates/_goiabaseeds/core/runner.pipeline.md +467 -0
  84. package/templates/_goiabaseeds/core/skills.engine.md +381 -0
  85. package/templates/dashboard/index.html +12 -0
  86. package/templates/dashboard/package-lock.json +2082 -0
  87. package/templates/dashboard/package.json +28 -0
  88. package/templates/dashboard/src/App.tsx +46 -0
  89. package/templates/dashboard/src/components/DepartmentCard.tsx +47 -0
  90. package/templates/dashboard/src/components/DepartmentSelector.tsx +61 -0
  91. package/templates/dashboard/src/components/StatusBadge.tsx +32 -0
  92. package/templates/dashboard/src/components/StatusBar.tsx +97 -0
  93. package/templates/dashboard/src/hooks/useDepartmentSocket.ts +84 -0
  94. package/templates/dashboard/src/lib/formatTime.ts +16 -0
  95. package/templates/dashboard/src/lib/normalizeState.ts +25 -0
  96. package/templates/dashboard/src/main.tsx +10 -0
  97. package/templates/dashboard/src/office/AgentDesk.tsx +151 -0
  98. package/templates/dashboard/src/office/HandoffEnvelope.tsx +108 -0
  99. package/templates/dashboard/src/office/OfficeScene.tsx +147 -0
  100. package/templates/dashboard/src/office/drawDesk.ts +263 -0
  101. package/templates/dashboard/src/office/drawFurniture.ts +129 -0
  102. package/templates/dashboard/src/office/drawRoom.ts +51 -0
  103. package/templates/dashboard/src/office/palette.ts +181 -0
  104. package/templates/dashboard/src/office/textures.ts +254 -0
  105. package/templates/dashboard/src/plugin/departmentWatcher.ts +210 -0
  106. package/templates/dashboard/src/store/useDepartmentStore.ts +56 -0
  107. package/templates/dashboard/src/styles/globals.css +36 -0
  108. package/templates/dashboard/src/types/state.ts +64 -0
  109. package/templates/dashboard/src/vite-env.d.ts +1 -0
  110. package/templates/dashboard/tsconfig.json +24 -0
  111. package/templates/dashboard/vite.config.ts +13 -0
  112. package/templates/departments/.gitkeep +0 -0
  113. package/templates/ide-templates/antigravity/.agent/rules/goiabaseeds.md +55 -0
  114. package/templates/ide-templates/antigravity/.agent/workflows/goiabaseeds.md +102 -0
  115. package/templates/ide-templates/claude-code/.claude/skills/goiabaseeds/SKILL.md +182 -0
  116. package/templates/ide-templates/claude-code/.mcp.json +8 -0
  117. package/templates/ide-templates/claude-code/CLAUDE.md +43 -0
  118. package/templates/ide-templates/codex/.agents/skills/goiabaseeds/SKILL.md +6 -0
  119. package/templates/ide-templates/codex/AGENTS.md +105 -0
  120. package/templates/ide-templates/cursor/.cursor/commands/goiabaseeds.md +9 -0
  121. package/templates/ide-templates/cursor/.cursor/mcp.json +8 -0
  122. package/templates/ide-templates/cursor/.cursor/rules/goiabaseeds.mdc +48 -0
  123. package/templates/ide-templates/cursor/.cursorignore +3 -0
  124. package/templates/ide-templates/opencode/.opencode/commands/goiabaseeds.md +9 -0
  125. package/templates/ide-templates/opencode/AGENTS.md +105 -0
  126. package/templates/ide-templates/vscode-copilot/.github/prompts/goiabaseeds.prompt.md +201 -0
  127. package/templates/ide-templates/vscode-copilot/.vscode/mcp.json +8 -0
  128. package/templates/ide-templates/vscode-copilot/.vscode/settings.json +3 -0
  129. package/templates/package.json +8 -0
@@ -0,0 +1,1008 @@
1
+ # Auguste-Dupin — Content Investigator Template
2
+
3
+ Use this template when the Architect needs to investigate real content from reference profiles during department creation. Auguste-Dupin is NOT a department agent — it is a tool the Architect dispatches as a subagent during Phase 1.5 (Investigation) of the create-department workflow.
4
+
5
+ ## Purpose
6
+
7
+ When a user provides reference profile URLs during department discovery ("follow the style of @username"), the Architect dispatches one Auguste-Dupin subagent per profile URL. Each subagent navigates to the profile using Playwright MCP, extracts real content (captions, text, slide content, video transcriptions), and produces a structured analysis of patterns found.
8
+
9
+ The investigation output feeds directly into department data files — making agents, frameworks, quality criteria, and voice guidance grounded in real high-performing content rather than generic best practices.
10
+
11
+ ## How It Works
12
+
13
+ 1. The Architect receives reference URLs from the user during Phase 1 Discovery (question 5)
14
+ 2. For each URL, the Architect launches a Auguste-Dupin subagent in the background using the Task tool
15
+ 3. Each subagent runs independently — one profile per subagent
16
+ 4. Subagents produce two files each: `raw-content.md` and `pattern-analysis.md`
17
+ 5. After all subagents complete, the Architect consolidates findings into `consolidated-analysis.md`
18
+ 6. The consolidated analysis enriches all Phase 3 extraction artifacts
19
+
20
+ ---
21
+
22
+ ## Screenshot Saving Rule
23
+
24
+ When saving a browser screenshot as a file (using `browser_take_screenshot`), always specify the full path:
25
+
26
+ ```
27
+ departments/{department-name}/_investigations/{username}/screenshots/{filename}.png
28
+ ```
29
+
30
+ Never call `browser_take_screenshot` without a full output path — omitting the path saves the file to the current working directory (the repo root), polluting the project.
31
+
32
+ For content reading and navigation, prefer `browser_snapshot` (returns a live view, no file saved) over `browser_take_screenshot`.
33
+
34
+ The `{department-name}` value is always provided by the Architect in the Auguste-Dupin subagent prompt.
35
+
36
+ ---
37
+
38
+ ## Investigation Mode
39
+
40
+ The Architect always passes an `investigation_mode` parameter in the subagent prompt. Read this value and follow the corresponding behavior:
41
+
42
+ | Mode | Meaning | Behavior |
43
+ |------|---------|----------|
44
+ | `single_post` | User provided a direct post/reel/tv URL — just analyze that one post | Skip profile grid navigation. Go directly to the post URL. Extract that post only. |
45
+ | `profile_1` | Scan profile, get 1 post only | Navigate to profile grid. Collect the most recent 1 post. Stop after 1. |
46
+ | `profile_5_10` | Scan profile for patterns | Navigate to profile grid. Collect up to 10 posts. Stop at 10 even if more are available. |
47
+
48
+ **If no `investigation_mode` is specified:** default to `profile_5_10`.
49
+
50
+ This mode applies to Instagram only. YouTube, Twitter/X, and LinkedIn use their own quantity configuration.
51
+
52
+ ---
53
+
54
+ ## Prerequisites Check
55
+
56
+ Before running any Auguste-Dupin CSI, verify the required tools are available. Run each check as a Bash command.
57
+
58
+ ### Required for All Investigations
59
+
60
+ - **Playwright MCP**: The browser tools (`browser_navigate`, `browser_snapshot`, `browser_click`, `browser_evaluate`) must be available. These are provided by the Playwright MCP server and are required for every investigation.
61
+
62
+ ### Required Only for Video Content (Reels, YouTube, TikTok)
63
+
64
+ Video transcription requires three CLI tools. Check each one:
65
+
66
+ ```bash
67
+ yt-dlp --version
68
+ ```
69
+
70
+ If missing: `pip install yt-dlp` or `brew install yt-dlp`
71
+
72
+ ```bash
73
+ ffmpeg -version
74
+ ```
75
+
76
+ If missing: `brew install ffmpeg` or download from https://ffmpeg.org/download.html
77
+
78
+ ```bash
79
+ whisper --help
80
+ ```
81
+
82
+ If missing: `pip install openai-whisper`
83
+
84
+ ### When Prerequisites Are Not Met
85
+
86
+ - If Playwright MCP is unavailable, Auguste-Dupin cannot run. Inform the user and fall back to Phase 2 web research only.
87
+ - If yt-dlp, ffmpeg, or whisper are missing, Auguste-Dupin can still run but will skip video transcription. Text-based content (carousels, tweets, LinkedIn posts, text posts) can still be extracted. Log a warning: "Video transcription tools not available — skipping Reel/video transcription. Text content will still be extracted."
88
+ - Always inform the user which tools are missing and provide installation commands.
89
+
90
+ ---
91
+
92
+ ## Browser Profile Setup
93
+
94
+ Auguste-Dupin uses a persistent browser profile to preserve login sessions across investigations.
95
+
96
+ ### Profile Location
97
+
98
+ The browser profile is stored at `_goiabaseeds/_browser_profile/`. This directory persists between runs so that login cookies are preserved.
99
+
100
+ ### First-Time Setup
101
+
102
+ On the first investigation for a given platform, Auguste-Dupin may encounter a login wall. When this happens:
103
+
104
+ 1. Navigate to the platform URL using `browser_navigate`
105
+ 2. Take a snapshot with `browser_snapshot` to detect login prompts or walls
106
+ 3. If a login wall is detected, inform the user: "I need you to log in to {platform} so I can access the content. I'll open the browser — please log in manually."
107
+ 4. Wait for the user to confirm login is complete
108
+ 5. The browser profile will preserve the session cookies for future investigations
109
+
110
+ ### Subsequent Runs
111
+
112
+ After the first login, cookies are preserved in the browser profile. Auguste-Dupin should still check for login walls on each run (platforms may expire sessions) and re-prompt the user if needed.
113
+
114
+ ---
115
+
116
+ ## Platform Extractors
117
+
118
+ Each platform has a dedicated extraction process. Auguste-Dupin detects the platform from the URL and applies the corresponding extractor.
119
+
120
+ ### Instagram Extractor
121
+
122
+ **URL patterns:** `instagram.com/{username}`, `instagram.com/{username}/`, `instagram.com/p/{post-id}`, `instagram.com/reel/{reel-id}`
123
+
124
+ #### Pre-extraction: Check Investigation Mode
125
+
126
+ Before starting extraction, check the `investigation_mode` value from the Architect's prompt:
127
+
128
+ - **`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.
129
+ - **`profile_1`** or **`profile_5_10`**: Proceed with Profile Grid Extraction below. For `profile_1`, stop after collecting 1 post. For `profile_5_10`, stop after collecting 10 posts.
130
+
131
+ #### Profile Grid Extraction
132
+
133
+ 1. Navigate to the profile page:
134
+ ```
135
+ browser_navigate: https://www.instagram.com/{username}/
136
+ ```
137
+
138
+ 2. Take a snapshot to read the profile grid:
139
+ ```
140
+ browser_snapshot
141
+ ```
142
+
143
+ 3. From the snapshot, identify the content grid. Each grid item has visual indicators for content type:
144
+ - Carousel icon (stacked squares) in the top-right corner = multi-slide post
145
+ - Reel icon (play button / clapperboard) = video Reel
146
+ - No icon = single image post
147
+
148
+ 4. Note the total post count from the profile header.
149
+
150
+ #### Carousel Extraction (per post)
151
+
152
+ 1. Click the carousel post in the grid:
153
+ ```
154
+ browser_click: [ref to grid item]
155
+ ```
156
+
157
+ 2. Take a snapshot of the opened post modal to read the caption:
158
+ ```
159
+ browser_snapshot
160
+ ```
161
+
162
+ 3. Record the full caption text, post date, and engagement metrics (likes, comments) from the snapshot.
163
+
164
+ 4. Read the text content of the current slide from the snapshot.
165
+
166
+ 5. Navigate to the next slide by clicking the right arrow:
167
+ ```
168
+ browser_click: [ref to right arrow button]
169
+ ```
170
+
171
+ 6. Take a snapshot of the new slide:
172
+ ```
173
+ browser_snapshot
174
+ ```
175
+
176
+ 7. Record the slide text content.
177
+
178
+ 8. Repeat steps 5-7 until no more right arrow is available (last slide reached).
179
+
180
+ 9. Close the modal by pressing Escape or clicking the close button:
181
+ ```
182
+ browser_press_key: Escape
183
+ ```
184
+
185
+ #### Reel Extraction (per reel)
186
+
187
+ 1. Click the Reel in the grid:
188
+ ```
189
+ browser_click: [ref to grid item]
190
+ ```
191
+
192
+ 2. Take a snapshot to read the caption and engagement metrics:
193
+ ```
194
+ browser_snapshot
195
+ ```
196
+
197
+ 3. Record the caption text, post date, likes, comments, and views.
198
+
199
+ 4. Extract the Reel URL from the browser address bar or the snapshot.
200
+
201
+ 5. Download the audio for transcription using yt-dlp:
202
+ ```bash
203
+ yt-dlp -x --audio-format wav -o "departments/{department-name}/_investigations/{username}/reel-{id}.%(ext)s" "https://www.instagram.com/reel/{reel-id}/"
204
+ ```
205
+
206
+ 6. Transcribe the audio using whisper:
207
+ ```bash
208
+ whisper "departments/{department-name}/_investigations/{username}/reel-{id}.wav" --model small --output_dir "departments/{department-name}/_investigations/{username}/" --output_format txt
209
+ ```
210
+
211
+ 7. Read the transcription file and include it in the raw content output.
212
+
213
+ 8. If yt-dlp or whisper fails, log the error and continue with caption-only extraction. Note in the output: "Transcription unavailable — caption only."
214
+
215
+ 9. Close the Reel modal:
216
+ ```
217
+ browser_press_key: Escape
218
+ ```
219
+
220
+ #### Single Image Post Extraction
221
+
222
+ 1. Click the post in the grid:
223
+ ```
224
+ browser_click: [ref to grid item]
225
+ ```
226
+
227
+ 2. Take a snapshot:
228
+ ```
229
+ browser_snapshot
230
+ ```
231
+
232
+ 3. Record the caption text, post date, and engagement metrics.
233
+
234
+ 4. Close the modal:
235
+ ```
236
+ browser_press_key: Escape
237
+ ```
238
+
239
+ #### Scrolling for More Content
240
+
241
+ To load additional posts beyond the initial grid view:
242
+
243
+ ```
244
+ browser_evaluate: window.scrollBy(0, 1000)
245
+ ```
246
+
247
+ After scrolling, wait briefly for new content to load, then take a new snapshot:
248
+
249
+ ```
250
+ browser_snapshot
251
+ ```
252
+
253
+ Repeat the scroll-and-snapshot cycle until the target number of posts has been extracted or no new content loads.
254
+
255
+ #### Instagram Configuration Defaults
256
+
257
+ - Default content count: 12-15 most recent posts
258
+ - Content types to extract: all (carousels, reels, single images)
259
+ - Priority: extract carousels and reels first (higher signal content), then single images
260
+ - Stop condition: target count reached OR 3 consecutive scrolls with no new content
261
+
262
+ ---
263
+
264
+ ### YouTube Extractor
265
+
266
+ **URL patterns:** `youtube.com/@{handle}`, `youtube.com/channel/{id}`, `youtube.com/watch?v={id}`, `youtube.com/@{handle}/videos`
267
+
268
+ #### Channel Video List Extraction
269
+
270
+ 1. Navigate to the channel's videos page:
271
+ ```
272
+ browser_navigate: https://www.youtube.com/@{handle}/videos
273
+ ```
274
+
275
+ 2. Take a snapshot to read the video list:
276
+ ```
277
+ browser_snapshot
278
+ ```
279
+
280
+ 3. From the snapshot, identify video titles, view counts, and upload dates.
281
+
282
+ 4. Select videos to extract based on configuration (most recent, most viewed, or a mix).
283
+
284
+ #### Individual Video Extraction
285
+
286
+ 1. Click the video title to open it:
287
+ ```
288
+ browser_click: [ref to video title]
289
+ ```
290
+
291
+ 2. Take a snapshot to read the title, view count, like count, and upload date:
292
+ ```
293
+ browser_snapshot
294
+ ```
295
+
296
+ 3. Expand the video description by clicking "...more" or the description area:
297
+ ```
298
+ browser_click: [ref to description expand button]
299
+ ```
300
+
301
+ 4. Take another snapshot to capture the full description text:
302
+ ```
303
+ browser_snapshot
304
+ ```
305
+
306
+ 5. Record: title, full description, view count, like count, comment count, upload date.
307
+
308
+ #### Video Transcription — Primary Method (Subtitles)
309
+
310
+ Use yt-dlp to download auto-generated or manual subtitles:
311
+
312
+ ```bash
313
+ yt-dlp --write-auto-sub --sub-lang en --skip-download -o "departments/{department-name}/_investigations/{channel}/%(id)s" "https://www.youtube.com/watch?v={video-id}"
314
+ ```
315
+
316
+ If subtitles are available, read the `.vtt` or `.srt` file and extract the text content (strip timestamps).
317
+
318
+ #### Video Transcription — Fallback Method (Audio + Whisper)
319
+
320
+ If no subtitles are available, download the audio and transcribe:
321
+
322
+ ```bash
323
+ yt-dlp -x --audio-format wav -o "departments/{department-name}/_investigations/{channel}/%(id)s.%(ext)s" "https://www.youtube.com/watch?v={video-id}"
324
+ ```
325
+
326
+ ```bash
327
+ whisper "departments/{department-name}/_investigations/{channel}/{video-id}.wav" --model small --output_dir "departments/{department-name}/_investigations/{channel}/" --output_format txt
328
+ ```
329
+
330
+ Read the transcription file and include it in the raw content output.
331
+
332
+ #### Navigating Back to Video List
333
+
334
+ After extracting a video, navigate back to the channel videos page:
335
+
336
+ ```
337
+ browser_navigate_back
338
+ ```
339
+
340
+ Or navigate directly:
341
+
342
+ ```
343
+ browser_navigate: https://www.youtube.com/@{handle}/videos
344
+ ```
345
+
346
+ #### YouTube Configuration Defaults
347
+
348
+ - Default video count: 8-10 most recent videos
349
+ - Transcription method: subtitles first, audio+whisper fallback
350
+ - Priority: most recent uploads first, then highest viewed
351
+ - Stop condition: target count reached OR end of uploads page
352
+
353
+ ---
354
+
355
+ ### Twitter/X Extractor
356
+
357
+ **URL patterns:** `x.com/{username}`, `twitter.com/{username}`, `x.com/{username}/status/{id}`
358
+
359
+ #### Timeline Extraction
360
+
361
+ 1. Navigate to the user's profile:
362
+ ```
363
+ browser_navigate: https://x.com/{username}
364
+ ```
365
+
366
+ 2. Take a snapshot to read the timeline:
367
+ ```
368
+ browser_snapshot
369
+ ```
370
+
371
+ 3. From the snapshot, identify individual tweets and threads. Thread indicators include "Show this thread" links or reply chains from the same author.
372
+
373
+ #### Tweet Extraction (per tweet)
374
+
375
+ 1. From the timeline snapshot, record for each tweet:
376
+ - Full tweet text
377
+ - Post date and time
378
+ - Engagement metrics: likes, retweets, replies, bookmarks, views (if visible)
379
+ - Whether it is a standalone tweet or part of a thread
380
+
381
+ 2. If the tweet text is truncated in the timeline view, click the tweet to open it:
382
+ ```
383
+ browser_click: [ref to tweet]
384
+ ```
385
+
386
+ 3. Take a snapshot of the full tweet:
387
+ ```
388
+ browser_snapshot
389
+ ```
390
+
391
+ 4. Record the complete text and all metrics.
392
+
393
+ 5. Navigate back to the timeline:
394
+ ```
395
+ browser_navigate_back
396
+ ```
397
+
398
+ #### Thread Extraction
399
+
400
+ 1. Identify threads in the timeline (tweets with "Show this thread" or self-reply chains).
401
+
402
+ 2. Click the first tweet in the thread to open it:
403
+ ```
404
+ browser_click: [ref to thread tweet]
405
+ ```
406
+
407
+ 3. Take a snapshot to read the full thread:
408
+ ```
409
+ browser_snapshot
410
+ ```
411
+
412
+ 4. Scroll down within the thread to capture all tweets in the chain:
413
+ ```
414
+ browser_evaluate: window.scrollBy(0, 800)
415
+ ```
416
+
417
+ 5. Take additional snapshots as needed to capture the complete thread.
418
+
419
+ 6. Record all tweets in the thread as a single content unit, preserving their order.
420
+
421
+ 7. Navigate back to the timeline:
422
+ ```
423
+ browser_navigate_back
424
+ ```
425
+
426
+ #### Scrolling for More Tweets
427
+
428
+ To load older tweets beyond the initial timeline view:
429
+
430
+ ```
431
+ browser_evaluate: window.scrollBy(0, 1000)
432
+ ```
433
+
434
+ After scrolling, take a new snapshot and continue extraction.
435
+
436
+ #### Twitter/X Configuration Defaults
437
+
438
+ - Default tweet count: 15-20 most recent tweets (excluding replies to others)
439
+ - Content types: standalone tweets and threads (skip replies to other users unless they are high-engagement)
440
+ - Priority: threads first (higher content density), then standalone tweets by engagement
441
+ - Stop condition: target count reached OR 3 consecutive scrolls with no new tweets
442
+
443
+ ---
444
+
445
+ ### LinkedIn Extractor
446
+
447
+ **URL patterns:** `linkedin.com/in/{username}`, `linkedin.com/in/{username}/recent-activity/all/`, `linkedin.com/posts/{post-id}`
448
+
449
+ #### Activity Feed Extraction
450
+
451
+ 1. Navigate to the user's recent activity page:
452
+ ```
453
+ browser_navigate: https://www.linkedin.com/in/{username}/recent-activity/all/
454
+ ```
455
+
456
+ 2. Take a snapshot to read the activity feed:
457
+ ```
458
+ browser_snapshot
459
+ ```
460
+
461
+ 3. From the snapshot, identify posts and articles. LinkedIn posts may be truncated with a "...see more" link.
462
+
463
+ #### Post Extraction (per post)
464
+
465
+ 1. If the post text is truncated, click "...see more" to expand it:
466
+ ```
467
+ browser_click: [ref to "see more" link]
468
+ ```
469
+
470
+ 2. Take a snapshot to capture the full post text:
471
+ ```
472
+ browser_snapshot
473
+ ```
474
+
475
+ 3. Record: full post text, post date, reaction count, comment count, repost count.
476
+
477
+ 4. If the post contains a document/carousel (PDF slides), note the slide count and extract visible slide text from the snapshots.
478
+
479
+ #### Article Extraction
480
+
481
+ 1. Identify article links in the activity feed (posts that link to LinkedIn articles).
482
+
483
+ 2. Click the article link to open it:
484
+ ```
485
+ browser_click: [ref to article link]
486
+ ```
487
+
488
+ 3. Take a snapshot to read the full article:
489
+ ```
490
+ browser_snapshot
491
+ ```
492
+
493
+ 4. Scroll down to capture the complete article if it extends beyond the viewport:
494
+ ```
495
+ browser_evaluate: window.scrollBy(0, 1000)
496
+ ```
497
+
498
+ 5. Take additional snapshots as needed.
499
+
500
+ 6. Record: article title, full text, publication date, reaction count, comment count.
501
+
502
+ 7. Navigate back to the activity feed:
503
+ ```
504
+ browser_navigate_back
505
+ ```
506
+
507
+ #### Scrolling for More Posts
508
+
509
+ ```
510
+ browser_evaluate: window.scrollBy(0, 1000)
511
+ ```
512
+
513
+ After scrolling, take a new snapshot and continue extraction.
514
+
515
+ #### LinkedIn Configuration Defaults
516
+
517
+ - Default post count: 10-15 most recent posts
518
+ - Content types: text posts, document/carousel posts, articles
519
+ - Priority: long-form text posts and articles first (higher content density), then shorter posts
520
+ - Stop condition: target count reached OR 3 consecutive scrolls with no new posts
521
+
522
+ ---
523
+
524
+ ## Output Formats
525
+
526
+ Auguste-Dupin produces three output files per investigation. The first two are per-profile, the third is a consolidation across all profiles.
527
+
528
+ ### Raw Content File: `raw-content.md`
529
+
530
+ One file per profile, saved to `departments/{department-name}/_investigations/{username}/raw-content.md`.
531
+
532
+ ```markdown
533
+ # Raw Content: @{username} ({platform})
534
+
535
+ Investigated: {YYYY-MM-DD}
536
+ Total contents analyzed: {N}
537
+ Content types: {comma-separated list, e.g. "carousel, reel, single image"}
538
+
539
+ ---
540
+
541
+ ## Content 1: [Carousel: 8 slides | Educational]
542
+
543
+ **Date:** 2026-03-27
544
+ **Metrics:** 4,200 likes, 312 comments, 1,890 saves
545
+ **URL:** https://www.instagram.com/p/ABC123/
546
+
547
+ ### Caption
548
+ The full caption text goes here, exactly as it appears on the platform.
549
+ Including all line breaks, emojis, hashtags, and mentions.
550
+
551
+ No editing, no summarizing — raw text only.
552
+
553
+ ### Slide 1
554
+ The exact text content visible on slide 1. If the slide is purely visual
555
+ with no text overlay, note: "[Visual only — no text overlay]"
556
+
557
+ ### Slide 2
558
+ Text content of slide 2.
559
+
560
+ ### Slide 3
561
+ Text content of slide 3.
562
+
563
+ (Continue for all slides in the carousel.)
564
+
565
+ ---
566
+
567
+ ## Content 2: [Reel: 45 seconds | Storytelling]
568
+
569
+ **Date:** 2026-03-09
570
+ **Metrics:** 89,000 views, 3,100 likes, 478 comments
571
+ **URL:** https://www.instagram.com/reel/DEF456/
572
+
573
+ ### Caption
574
+ Full caption text as it appears on the platform.
575
+
576
+ ### Transcription
577
+ The complete spoken-word transcription of the Reel audio.
578
+ Every word, including filler words, pauses noted as [pause],
579
+ and any on-screen text that differs from the spoken content
580
+ noted in brackets: [on-screen: "different text here"].
581
+
582
+ If transcription was unavailable: "Transcription unavailable — audio
583
+ extraction failed. Caption only."
584
+
585
+ ---
586
+
587
+ ## Content 3: [Single Image | Motivational]
588
+
589
+ **Date:** 2026-03-19
590
+ **Metrics:** 2,800 likes, 145 comments
591
+ **URL:** https://www.instagram.com/p/GHI789/
592
+
593
+ ### Caption
594
+ Full caption text.
595
+
596
+ ---
597
+
598
+ ## Content 4: [Tweet: standalone | Opinion]
599
+
600
+ **Date:** 2026-03-28
601
+ **Metrics:** 1,200 likes, 340 retweets, 89 replies, 45,000 views
602
+ **URL:** https://x.com/username/status/123456789
603
+
604
+ ### Text
605
+ The full tweet text, exactly as posted.
606
+
607
+ ---
608
+
609
+ ## Content 5: [Thread: 7 tweets | Framework]
610
+
611
+ **Date:** 2026-03-27
612
+ **Metrics:** 3,400 likes (thread total), 890 retweets, 234 replies
613
+ **URL:** https://x.com/username/status/987654321
614
+
615
+ ### Tweet 1/7
616
+ First tweet in the thread.
617
+
618
+ ### Tweet 2/7
619
+ Second tweet in the thread.
620
+
621
+ ### Tweet 3/7
622
+ Third tweet in the thread.
623
+
624
+ (Continue for all tweets in the thread.)
625
+
626
+ ---
627
+
628
+ ## Content 6: [LinkedIn Post | Thought Leadership]
629
+
630
+ **Date:** 2026-03-26
631
+ **Metrics:** 890 reactions, 67 comments, 34 reposts
632
+ **URL:** https://www.linkedin.com/posts/username_activity-123456789
633
+
634
+ ### Text
635
+ The full post text after expanding "see more."
636
+ Including all formatting, line breaks, and emojis as they appear.
637
+
638
+ ---
639
+
640
+ ## Content 7: [LinkedIn Article | Industry Analysis]
641
+
642
+ **Date:** 2026-03-04
643
+ **Metrics:** 1,200 reactions, 89 comments
644
+ **URL:** https://www.linkedin.com/pulse/article-title-username
645
+
646
+ ### Title
647
+ The article title.
648
+
649
+ ### Text
650
+ The full article text. Include all paragraphs, headers, and sub-sections
651
+ exactly as they appear in the article.
652
+
653
+ ---
654
+
655
+ ## Content 8: [YouTube Video: 12 min | Tutorial]
656
+
657
+ **Date:** 2026-02-11
658
+ **Metrics:** 45,000 views, 2,100 likes, 189 comments
659
+ **URL:** https://www.youtube.com/watch?v=ABC123
660
+
661
+ ### Title
662
+ The video title.
663
+
664
+ ### Description
665
+ The full video description text (after expanding).
666
+
667
+ ### Transcription
668
+ The complete video transcription. If sourced from auto-generated subtitles,
669
+ note at the top: "[Auto-generated subtitles — may contain minor errors]"
670
+
671
+ Full transcription text goes here, paragraph by paragraph.
672
+ ```
673
+
674
+ ### Pattern Analysis File: `pattern-analysis.md`
675
+
676
+ One file per profile, saved to `departments/{department-name}/_investigations/{username}/pattern-analysis.md`.
677
+
678
+ ```markdown
679
+ # Pattern Analysis: @{username} ({platform})
680
+
681
+ Analyzed: {YYYY-MM-DD}
682
+ Sample size: {N} contents
683
+ Period covered: {earliest date} to {latest date}
684
+
685
+ ## Executive Summary
686
+
687
+ A 3-5 sentence overview of the most significant patterns found. What makes
688
+ this creator's content distinctive? What is their primary content strategy?
689
+ What patterns correlate most strongly with high engagement?
690
+
691
+ ## Structural Patterns
692
+
693
+ ### Content Mix
694
+ | Type | Count | Percentage | Avg. Engagement |
695
+ |------|-------|------------|-----------------|
696
+ | Carousel | 7 | 58% | 4,200 likes |
697
+ | Reel | 3 | 25% | 45,000 views |
698
+ | Single Image | 2 | 17% | 1,800 likes |
699
+
700
+ ### Format Structures
701
+ - **Carousels**: Most common structure is [N] slides. Opening slide pattern:
702
+ [describe]. Closing slide pattern: [describe]. Typical slide text length:
703
+ [N] words.
704
+ - **Reels**: Average length: [N] seconds. Opening hook pattern: [describe].
705
+ Spoken vs. on-screen text ratio: [describe].
706
+ - **Posts**: Average caption length: [N] words. Line break frequency:
707
+ [describe]. Hashtag placement: [describe].
708
+
709
+ ### Posting Cadence
710
+ - Average posts per week: [N]
711
+ - Most common posting days: [days]
712
+ - Content type rotation pattern: [describe if any]
713
+
714
+ ## Language Patterns
715
+
716
+ ### Tone Profile
717
+ Overall tone: [describe in 2-3 sentences — formal/casual, serious/playful,
718
+ authoritative/conversational, etc.]
719
+
720
+ ### Hook Patterns
721
+ The top 5 most effective hooks (by engagement), with the pattern they follow:
722
+
723
+ 1. "{exact hook text}" — Pattern: [pattern name, e.g. "contradiction opener",
724
+ "bold claim", "question that challenges assumption"]
725
+ 2. "{exact hook text}" — Pattern: [pattern name]
726
+ 3. "{exact hook text}" — Pattern: [pattern name]
727
+ 4. "{exact hook text}" — Pattern: [pattern name]
728
+ 5. "{exact hook text}" — Pattern: [pattern name]
729
+
730
+ ### Call-to-Action Patterns
731
+ The most common CTA approaches, ranked by frequency:
732
+
733
+ 1. [CTA type]: "{example}" — used in [N] of [total] posts
734
+ 2. [CTA type]: "{example}" — used in [N] of [total] posts
735
+ 3. [CTA type]: "{example}" — used in [N] of [total] posts
736
+
737
+ ### Vocabulary Signature
738
+ Words and phrases this creator uses frequently that form part of their voice:
739
+ - "{phrase}" — appears in [N] posts, used for [context]
740
+ - "{phrase}" — appears in [N] posts, used for [context]
741
+ - "{phrase}" — appears in [N] posts, used for [context]
742
+ - "{phrase}" — appears in [N] posts, used for [context]
743
+ - "{phrase}" — appears in [N] posts, used for [context]
744
+
745
+ ### Style Notes
746
+ - Sentence length tendency: [short/medium/long, with average word count]
747
+ - Emoji usage: [frequency and placement pattern]
748
+ - Formatting habits: [line breaks, bullet points, numbering, bold/caps]
749
+ - Hashtag strategy: [count, placement, type — branded vs. discovery vs. community]
750
+
751
+ ## Engagement Patterns
752
+
753
+ ### Highest Performing Content
754
+ | Rank | Content | Type | Key Metric | What Made It Work |
755
+ |------|---------|------|-----------|-------------------|
756
+ | 1 | "{title/hook}" | Carousel | 8,900 saves | [specific reason] |
757
+ | 2 | "{title/hook}" | Reel | 120K views | [specific reason] |
758
+ | 3 | "{title/hook}" | Post | 5,200 likes | [specific reason] |
759
+
760
+ ### Engagement Drivers
761
+ Patterns that correlate with above-average engagement:
762
+ - [Pattern 1]: Posts with this pattern average [X]% higher engagement
763
+ - [Pattern 2]: Posts with this pattern average [X]% higher engagement
764
+ - [Pattern 3]: Posts with this pattern average [X]% higher engagement
765
+
766
+ ### Underperforming Content
767
+ Patterns found in below-average posts:
768
+ - [Pattern]: These posts averaged [X]% lower engagement. Possible reason: [hypothesis]
769
+ - [Pattern]: These posts averaged [X]% lower engagement. Possible reason: [hypothesis]
770
+
771
+ ## Recommendations for Department
772
+
773
+ Five specific, actionable recommendations for how the department should incorporate
774
+ patterns from this creator's content:
775
+
776
+ 1. **[Recommendation title]**: [Detailed recommendation with specific examples
777
+ from the analyzed content. Reference exact posts or patterns. Explain how
778
+ to adapt this for the user's brand.]
779
+
780
+ 2. **[Recommendation title]**: [Detailed recommendation.]
781
+
782
+ 3. **[Recommendation title]**: [Detailed recommendation.]
783
+
784
+ 4. **[Recommendation title]**: [Detailed recommendation.]
785
+
786
+ 5. **[Recommendation title]**: [Detailed recommendation.]
787
+ ```
788
+
789
+ ### Consolidated Analysis File: `consolidated-analysis.md`
790
+
791
+ One file per investigation (across all profiles), saved to `departments/{department-name}/_investigations/consolidated-analysis.md`.
792
+
793
+ ```markdown
794
+ # Consolidated Investigation: {department-name}
795
+
796
+ Investigated: {YYYY-MM-DD}
797
+ Total profiles analyzed: {N}
798
+ Total contents extracted: {N across all profiles}
799
+
800
+ ## Profiles Analyzed
801
+
802
+ | # | Profile | Platform | Contents | Top Content Type | Avg. Engagement |
803
+ |---|---------|----------|----------|------------------|-----------------|
804
+ | 1 | @{username} | Instagram | 12 | Carousel (67%) | 4,200 likes |
805
+ | 2 | @{username} | YouTube | 8 | Long-form (100%) | 45,000 views |
806
+ | 3 | @{username} | X/Twitter | 15 | Threads (40%) | 2,100 likes |
807
+
808
+ ## Universal Patterns
809
+
810
+ Patterns that appear across ALL (or most) analyzed profiles:
811
+
812
+ ### Structural Patterns
813
+ - [Pattern found across multiple profiles]: Seen in [N] of [total] profiles.
814
+ Examples: [reference specific content from different profiles].
815
+ - [Pattern]: Seen in [N] of [total] profiles. Examples: [references].
816
+ - [Pattern]: Seen in [N] of [total] profiles. Examples: [references].
817
+
818
+ ### Language Patterns
819
+ - [Shared language pattern]: Found in [N] profiles. Examples: [references].
820
+ - [Shared language pattern]: Found in [N] profiles. Examples: [references].
821
+ - [Shared language pattern]: Found in [N] profiles. Examples: [references].
822
+
823
+ ### Engagement Drivers
824
+ - [Universal engagement driver]: Correlates with high performance across
825
+ [N] profiles. Evidence: [specific examples].
826
+ - [Universal engagement driver]: Evidence: [specific examples].
827
+ - [Universal engagement driver]: Evidence: [specific examples].
828
+
829
+ ## Profile Differentiators
830
+
831
+ What makes each profile's approach unique (not shared with others):
832
+
833
+ ### @{username1} — Unique Strengths
834
+ - [Unique pattern 1]: [description with examples]
835
+ - [Unique pattern 2]: [description with examples]
836
+
837
+ ### @{username2} — Unique Strengths
838
+ - [Unique pattern 1]: [description with examples]
839
+ - [Unique pattern 2]: [description with examples]
840
+
841
+ ### @{username3} — Unique Strengths
842
+ - [Unique pattern 1]: [description with examples]
843
+ - [Unique pattern 2]: [description with examples]
844
+
845
+ ## Recommended Framework
846
+
847
+ A synthesized framework based on the best patterns found across all profiles.
848
+ This framework becomes the operational blueprint for the department.
849
+
850
+ ### Structure Template
851
+ The recommended content structure, synthesized from the highest-performing
852
+ patterns across all analyzed profiles:
853
+
854
+ 1. **Opening/Hook**: [Recommended approach based on top-performing hooks across
855
+ all profiles. Include 3 hook patterns that worked best, with templates.]
856
+ 2. **Body Structure**: [Recommended structure — number of sections/slides/points,
857
+ flow pattern, information density per section.]
858
+ 3. **Supporting Elements**: [Evidence, examples, data — how to support claims
859
+ based on what top creators do.]
860
+ 4. **Closing/CTA**: [Recommended CTA approach synthesized from highest-performing
861
+ CTAs across all profiles. Include 2-3 CTA templates.]
862
+
863
+ ### Voice Guidelines
864
+ Synthesized voice recommendations based on patterns across all profiles:
865
+
866
+ - **Tone**: [Recommended tone direction with justification from data]
867
+ - **Vocabulary to adopt**: [5-8 words/phrases found in high-performing content
868
+ across profiles]
869
+ - **Vocabulary to avoid**: [3-5 patterns absent from successful content or
870
+ present in underperforming content]
871
+ - **Sentence style**: [Length, rhythm, formatting based on observed patterns]
872
+ - **Emoji and formatting**: [Recommendations based on what top performers do]
873
+
874
+ ### Hook Templates
875
+ The 5 most effective hook patterns found, abstracted into reusable templates:
876
+
877
+ 1. **[Pattern name]**: "[Template with {placeholders}]"
878
+ Source: @{username}, engagement: [metric]. Why it works: [explanation].
879
+ 2. **[Pattern name]**: "[Template]"
880
+ Source: @{username}, engagement: [metric]. Why it works: [explanation].
881
+ 3. **[Pattern name]**: "[Template]"
882
+ Source: @{username}, engagement: [metric]. Why it works: [explanation].
883
+ 4. **[Pattern name]**: "[Template]"
884
+ Source: @{username}, engagement: [metric]. Why it works: [explanation].
885
+ 5. **[Pattern name]**: "[Template]"
886
+ Source: @{username}, engagement: [metric]. Why it works: [explanation].
887
+
888
+ ### CTA Templates
889
+ The 3 most effective CTA patterns found:
890
+
891
+ 1. **[CTA type]**: "[Template]" — Avg engagement lift: [X]%
892
+ 2. **[CTA type]**: "[Template]" — Avg engagement lift: [X]%
893
+ 3. **[CTA type]**: "[Template]" — Avg engagement lift: [X]%
894
+
895
+ ### Anti-Patterns
896
+ Patterns that were absent from successful content or present in underperforming
897
+ content. These become "never do" rules for the department:
898
+
899
+ 1. [Anti-pattern]: Found in [N] underperforming posts, absent from top performers.
900
+ 2. [Anti-pattern]: Found in [N] underperforming posts, absent from top performers.
901
+ 3. [Anti-pattern]: Found in [N] underperforming posts, absent from top performers.
902
+ 4. [Anti-pattern]: Found in [N] underperforming posts, absent from top performers.
903
+ ```
904
+
905
+ ---
906
+
907
+ ## How the Architect Uses Auguste-Dupin Output
908
+
909
+ After the investigation completes, the Architect maps findings to department data files during Phase 3 (Extraction). Each department data file is enriched with real-world evidence from the investigation.
910
+
911
+ ### Mapping: Investigation Output to Department Data Files
912
+
913
+ | Investigation Section | Department Data File | What Gets Extracted |
914
+ |---|---|---|
915
+ | Highest-engagement raw content | `pipeline/data/output-examples.md` | Real posts reformatted as gold-standard examples for the writer agent |
916
+ | Anti-Patterns from consolidated analysis | `pipeline/data/anti-patterns.md` | Patterns absent from successful content become "never do" rules |
917
+ | Engagement Patterns + Quality metrics | `pipeline/data/quality-criteria.md` | Real engagement benchmarks calibrate scoring thresholds |
918
+ | Recommended Framework from consolidated analysis | `pipeline/data/domain-framework.md` | Structure template, hook templates, CTA templates become the operational framework |
919
+ | Language Patterns from pattern analyses | `pipeline/data/tone-of-voice.md` | Vocabulary signature, tone profile, and style notes inform voice options |
920
+ | Research brief (web search) + pattern analyses | `pipeline/data/research-brief.md` | Web research enriched with first-party content analysis evidence |
921
+
922
+ ### Agent Enrichment
923
+
924
+ Beyond data files, investigation output enriches individual agent definitions:
925
+
926
+ - **Writer agent persona**: Operational Framework includes real hook patterns and structure templates from the investigation. Voice Guidance uses the vocabulary signature. Output Examples are adapted from real high-performing content.
927
+ - **Reviewer agent persona**: Quality Criteria are calibrated against real engagement metrics from investigated profiles. The reviewer knows what "high-performing" looks like because it has seen real examples.
928
+ - **Researcher agent persona**: The research brief includes first-party data from the investigation, making the researcher's benchmarks grounded in real content, not just industry averages.
929
+ - **Ideator agent persona** (content departments): Hook templates and angle patterns from the investigation feed directly into the ideator's framework for generating viral angles.
930
+
931
+ ### Priority Rules
932
+
933
+ When investigation data conflicts with web research data:
934
+
935
+ 1. Investigation data (first-party, real content) takes priority over web research (third-party, aggregated)
936
+ 2. Patterns found across multiple investigated profiles carry more weight than single-profile patterns
937
+ 3. The Architect notes the source of each data point in the department data files: "[Source: Investigation — @username]" vs "[Source: Web research — URL]"
938
+
939
+ ---
940
+
941
+ ## Investigation Configuration
942
+
943
+ ### URL Parsing Rules
944
+
945
+ Auguste-Dupin detects the platform from the URL to apply the correct extractor:
946
+
947
+ | URL Contains | Platform | Extractor |
948
+ |---|---|---|
949
+ | `instagram.com` | Instagram | Instagram Extractor |
950
+ | `youtube.com` or `youtu.be` | YouTube | YouTube Extractor |
951
+ | `x.com` or `twitter.com` | Twitter/X | Twitter/X Extractor |
952
+ | `linkedin.com` | LinkedIn | LinkedIn Extractor |
953
+
954
+ If the URL does not match any known pattern, inform the user: "I don't recognize this platform. Supported platforms: Instagram, YouTube, Twitter/X, LinkedIn."
955
+
956
+ ### Configuration Prompts
957
+
958
+ Before starting extraction for each profile, Auguste-Dupin asks the user for configuration using numbered lists (one question at a time):
959
+
960
+ **Content quantity:**
961
+ "How many pieces of content should I extract from @{username}?"
962
+ 1. 5 (quick scan)
963
+ 2. 10-15 (standard)
964
+ 3. 20+ (deep dive)
965
+
966
+ **Content type focus** (platform-dependent):
967
+
968
+ For Instagram:
969
+ "What content types should I focus on for @{username}?"
970
+ 1. All types
971
+ 2. Carousels only
972
+ 3. Reels only
973
+ 4. Carousels + Reels (skip single images)
974
+
975
+ For YouTube:
976
+ "What should I extract from {channel}?"
977
+ 1. Most recent videos
978
+ 2. Most popular videos
979
+ 3. Mix of recent and popular
980
+
981
+ For Twitter/X:
982
+ "What content should I focus on from @{username}?"
983
+ 1. All tweets
984
+ 2. Threads only
985
+ 3. Tweets + Threads (skip replies)
986
+
987
+ For LinkedIn:
988
+ "What content should I focus on from {name}?"
989
+ 1. All posts
990
+ 2. Long-form posts only
991
+ 3. Articles only
992
+ 4. Posts + Articles
993
+
994
+ ### Smart Recommendations
995
+
996
+ Auguste-Dupin recommends extraction settings based on the department type:
997
+
998
+ - **Content creation departments** (writing, copywriting, posts): Recommend "Carousels + Reels" on Instagram, "Threads only" on Twitter, "Long-form posts" on LinkedIn. These content types have the highest signal for writing patterns.
999
+ - **Video departments** (YouTube, TikTok, Reels): Recommend "Reels only" on Instagram, "Most recent videos" on YouTube. Focus on video content and transcriptions.
1000
+ - **Strategy/analysis departments**: Recommend "All types" with "deep dive" quantity. Maximum data for pattern analysis.
1001
+ - **General departments**: Recommend "standard" quantity with "all types." Balanced approach.
1002
+
1003
+ ### Timeout and Error Handling
1004
+
1005
+ - Maximum time per profile: 10 minutes. If extraction exceeds this, save what has been collected so far and note: "Investigation truncated at {N} contents due to time limit."
1006
+ - If a platform blocks access or returns errors, retry once. If the retry fails, inform the user and skip that profile.
1007
+ - If the browser crashes or becomes unresponsive, save collected data to the output file and report the failure.
1008
+ - Always produce output files even on partial failure — partial data is better than no data.