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.
- package/README.md +173 -0
- package/bin/goiabaseeds.js +98 -0
- package/eslint.config.js +14 -0
- package/package.json +61 -0
- package/skills/README.md +60 -0
- package/skills/apify/SKILL.md +55 -0
- package/skills/blotato/SKILL.md +63 -0
- package/skills/canva/SKILL.md +60 -0
- package/skills/goiabaseeds-agent-creator/SKILL.md +192 -0
- package/skills/goiabaseeds-skill-creator/SKILL.md +407 -0
- package/skills/goiabaseeds-skill-creator/agents/analyzer.md +274 -0
- package/skills/goiabaseeds-skill-creator/agents/comparator.md +202 -0
- package/skills/goiabaseeds-skill-creator/agents/grader.md +223 -0
- package/skills/goiabaseeds-skill-creator/assets/eval_review.html +146 -0
- package/skills/goiabaseeds-skill-creator/eval-viewer/generate_review.py +471 -0
- package/skills/goiabaseeds-skill-creator/eval-viewer/viewer.html +1325 -0
- package/skills/goiabaseeds-skill-creator/references/schemas.md +430 -0
- package/skills/goiabaseeds-skill-creator/references/skill-format.md +235 -0
- package/skills/goiabaseeds-skill-creator/scripts/__init__.py +0 -0
- package/skills/goiabaseeds-skill-creator/scripts/aggregate_benchmark.py +401 -0
- package/skills/goiabaseeds-skill-creator/scripts/quick_validate.py +103 -0
- package/skills/goiabaseeds-skill-creator/scripts/run_eval.py +310 -0
- package/skills/goiabaseeds-skill-creator/scripts/utils.py +47 -0
- package/skills/image-creator/SKILL.md +155 -0
- package/skills/image-fetcher/SKILL.md +91 -0
- package/skills/image-generator/SKILL.md +124 -0
- package/skills/image-generator/scripts/generate.py +175 -0
- package/skills/instagram-publisher/SKILL.md +118 -0
- package/skills/instagram-publisher/scripts/publish.js +164 -0
- package/src/agent-session.js +110 -0
- package/src/agents-cli.js +158 -0
- package/src/agents.js +134 -0
- package/src/bundle-detector.js +75 -0
- package/src/bundle.js +286 -0
- package/src/context.js +142 -0
- package/src/export.js +52 -0
- package/src/i18n.js +48 -0
- package/src/init.js +367 -0
- package/src/locales/en.json +72 -0
- package/src/locales/es.json +71 -0
- package/src/locales/pt-BR.json +71 -0
- package/src/logger.js +38 -0
- package/src/models-cli.js +165 -0
- package/src/pipeline-runner.js +478 -0
- package/src/prompt.js +46 -0
- package/src/provider.js +156 -0
- package/src/readme/README.md +181 -0
- package/src/run.js +100 -0
- package/src/runs.js +90 -0
- package/src/skills-cli.js +157 -0
- package/src/skills.js +146 -0
- package/src/state-manager.js +280 -0
- package/src/tools.js +158 -0
- package/src/update.js +140 -0
- package/templates/_goiabaseeds/.goiabaseeds-version +1 -0
- package/templates/_goiabaseeds/_investigations/.gitkeep +0 -0
- package/templates/_goiabaseeds/config/playwright.config.json +11 -0
- package/templates/_goiabaseeds/core/architect.agent.yaml +1141 -0
- package/templates/_goiabaseeds/core/best-practices/_catalog.yaml +116 -0
- package/templates/_goiabaseeds/core/best-practices/blog-post.md +132 -0
- package/templates/_goiabaseeds/core/best-practices/blog-seo.md +127 -0
- package/templates/_goiabaseeds/core/best-practices/copywriting.md +428 -0
- package/templates/_goiabaseeds/core/best-practices/data-analysis.md +401 -0
- package/templates/_goiabaseeds/core/best-practices/email-newsletter.md +118 -0
- package/templates/_goiabaseeds/core/best-practices/email-sales.md +110 -0
- package/templates/_goiabaseeds/core/best-practices/image-design.md +349 -0
- package/templates/_goiabaseeds/core/best-practices/instagram-feed.md +235 -0
- package/templates/_goiabaseeds/core/best-practices/instagram-reels.md +112 -0
- package/templates/_goiabaseeds/core/best-practices/instagram-stories.md +107 -0
- package/templates/_goiabaseeds/core/best-practices/linkedin-article.md +116 -0
- package/templates/_goiabaseeds/core/best-practices/linkedin-post.md +121 -0
- package/templates/_goiabaseeds/core/best-practices/researching.md +347 -0
- package/templates/_goiabaseeds/core/best-practices/review.md +269 -0
- package/templates/_goiabaseeds/core/best-practices/social-networks-publishing.md +294 -0
- package/templates/_goiabaseeds/core/best-practices/strategist.md +344 -0
- package/templates/_goiabaseeds/core/best-practices/technical-writing.md +363 -0
- package/templates/_goiabaseeds/core/best-practices/twitter-post.md +105 -0
- package/templates/_goiabaseeds/core/best-practices/twitter-thread.md +122 -0
- package/templates/_goiabaseeds/core/best-practices/whatsapp-broadcast.md +107 -0
- package/templates/_goiabaseeds/core/best-practices/youtube-script.md +122 -0
- package/templates/_goiabaseeds/core/best-practices/youtube-shorts.md +112 -0
- package/templates/_goiabaseeds/core/prompts/auguste.dupin.prompt.md +1008 -0
- package/templates/_goiabaseeds/core/runner.pipeline.md +467 -0
- package/templates/_goiabaseeds/core/skills.engine.md +381 -0
- package/templates/dashboard/index.html +12 -0
- package/templates/dashboard/package-lock.json +2082 -0
- package/templates/dashboard/package.json +28 -0
- package/templates/dashboard/src/App.tsx +46 -0
- package/templates/dashboard/src/components/DepartmentCard.tsx +47 -0
- package/templates/dashboard/src/components/DepartmentSelector.tsx +61 -0
- package/templates/dashboard/src/components/StatusBadge.tsx +32 -0
- package/templates/dashboard/src/components/StatusBar.tsx +97 -0
- package/templates/dashboard/src/hooks/useDepartmentSocket.ts +84 -0
- package/templates/dashboard/src/lib/formatTime.ts +16 -0
- package/templates/dashboard/src/lib/normalizeState.ts +25 -0
- package/templates/dashboard/src/main.tsx +10 -0
- package/templates/dashboard/src/office/AgentDesk.tsx +151 -0
- package/templates/dashboard/src/office/HandoffEnvelope.tsx +108 -0
- package/templates/dashboard/src/office/OfficeScene.tsx +147 -0
- package/templates/dashboard/src/office/drawDesk.ts +263 -0
- package/templates/dashboard/src/office/drawFurniture.ts +129 -0
- package/templates/dashboard/src/office/drawRoom.ts +51 -0
- package/templates/dashboard/src/office/palette.ts +181 -0
- package/templates/dashboard/src/office/textures.ts +254 -0
- package/templates/dashboard/src/plugin/departmentWatcher.ts +210 -0
- package/templates/dashboard/src/store/useDepartmentStore.ts +56 -0
- package/templates/dashboard/src/styles/globals.css +36 -0
- package/templates/dashboard/src/types/state.ts +64 -0
- package/templates/dashboard/src/vite-env.d.ts +1 -0
- package/templates/dashboard/tsconfig.json +24 -0
- package/templates/dashboard/vite.config.ts +13 -0
- package/templates/departments/.gitkeep +0 -0
- package/templates/ide-templates/antigravity/.agent/rules/goiabaseeds.md +55 -0
- package/templates/ide-templates/antigravity/.agent/workflows/goiabaseeds.md +102 -0
- package/templates/ide-templates/claude-code/.claude/skills/goiabaseeds/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/goiabaseeds/SKILL.md +6 -0
- package/templates/ide-templates/codex/AGENTS.md +105 -0
- package/templates/ide-templates/cursor/.cursor/commands/goiabaseeds.md +9 -0
- package/templates/ide-templates/cursor/.cursor/mcp.json +8 -0
- package/templates/ide-templates/cursor/.cursor/rules/goiabaseeds.mdc +48 -0
- package/templates/ide-templates/cursor/.cursorignore +3 -0
- package/templates/ide-templates/opencode/.opencode/commands/goiabaseeds.md +9 -0
- package/templates/ide-templates/opencode/AGENTS.md +105 -0
- package/templates/ide-templates/vscode-copilot/.github/prompts/goiabaseeds.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
|
@@ -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.
|