@anysiteio/agent-skills 1.4.0 → 2.0.1

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 (37) hide show
  1. package/.claude-plugin/marketplace.json +49 -1
  2. package/.claude-plugin/plugin.json +5 -1
  3. package/README.md +27 -33
  4. package/bin/install.js +196 -135
  5. package/bundles.json +19 -0
  6. package/package.json +3 -2
  7. package/skills/anysite-audience-analysis/SKILL.md +110 -38
  8. package/skills/anysite-audience-analysis/references/PLATFORM_COVERAGE.md +38 -19
  9. package/skills/anysite-audience-analysis/references/TOOL_MAPPING.md +16 -11
  10. package/skills/anysite-brand-reputation/SKILL.md +105 -43
  11. package/skills/anysite-competitor-analyzer/SKILL.md +170 -111
  12. package/skills/anysite-competitor-intelligence/SKILL.md +201 -116
  13. package/skills/anysite-competitor-intelligence/references/ANALYSIS_PATTERNS.md +17 -13
  14. package/skills/anysite-content-analytics/SKILL.md +101 -33
  15. package/skills/anysite-crm-account-brief/SKILL.md +71 -0
  16. package/skills/anysite-crm-audit/SKILL.md +59 -0
  17. package/skills/anysite-crm-champions/SKILL.md +76 -0
  18. package/skills/anysite-crm-competitor-intel/SKILL.md +74 -0
  19. package/skills/anysite-crm-enrich/SKILL.md +84 -0
  20. package/skills/anysite-crm-lookalikes/SKILL.md +64 -0
  21. package/skills/anysite-crm-prospect/SKILL.md +90 -0
  22. package/skills/anysite-crm-score/SKILL.md +72 -0
  23. package/skills/anysite-crm-setup/SKILL.md +147 -0
  24. package/skills/anysite-crm-signals/SKILL.md +96 -0
  25. package/skills/anysite-influencer-discovery/SKILL.md +123 -71
  26. package/skills/anysite-lead-generation/SKILL.md +288 -256
  27. package/skills/anysite-lead-generation/references/LINKEDIN_STRATEGIES.md +79 -71
  28. package/skills/anysite-lead-generation/references/WEB_SCRAPING.md +121 -87
  29. package/skills/anysite-market-research/SKILL.md +117 -68
  30. package/skills/anysite-mcp/SKILL.md +128 -0
  31. package/skills/anysite-mcp-migration/SKILL.md +19 -8
  32. package/skills/anysite-person-analyzer/SKILL.md +86 -53
  33. package/skills/anysite-trend-analysis/SKILL.md +119 -55
  34. package/skills/anysite-vc-analyst/SKILL.md +12 -2
  35. package/skills/competitor-discovery/SKILL.md +350 -0
  36. package/skills/customer-pain-mining/SKILL.md +318 -0
  37. package/skills/positioning-map/SKILL.md +314 -0
@@ -28,9 +28,9 @@ Understand your audience through demographic analysis, engagement patterns, and
28
28
  **Step 1: Identify Audience Source**
29
29
 
30
30
  Choose platform:
31
- - Instagram: `get_instagram_user` + `get_instagram_user_friendships`
32
- - YouTube: `get_youtube_channel_videos` + comment analysis
33
- - LinkedIn: `get_linkedin_user_posts` + engagement analysis
31
+ - Instagram: `execute("instagram", "user", "user", {"user": "..."})` + `execute("instagram", "user", "user_friendships", {"user": "...", "count": 100, "type": "followers"})`
32
+ - YouTube: `execute("youtube", "channel", "channel_videos", {"channel": "...", "count": 50})` + comment analysis
33
+ - LinkedIn: `execute("linkedin", "post", "get_user_posts", {"user": "...", "count": 50})` + engagement analysis
34
34
 
35
35
  **Step 2: Collect Audience Data**
36
36
 
@@ -48,6 +48,8 @@ Look for:
48
48
  - Content preferences
49
49
  - Peak activity times
50
50
 
51
+ Use `query_cache()` to filter and aggregate cached data without re-fetching.
52
+
51
53
  **Step 4: Generate Insights**
52
54
 
53
55
  Deliver:
@@ -56,6 +58,8 @@ Deliver:
56
58
  - Content recommendations
57
59
  - Targeting suggestions
58
60
 
61
+ Use `export_data()` to provide downloadable CSV/JSON files.
62
+
59
63
  ## Common Workflows
60
64
 
61
65
  ### Workflow 1: Instagram Audience Analysis
@@ -64,37 +68,48 @@ Deliver:
64
68
 
65
69
  1. **Get Profile Overview**
66
70
  ```
67
- get_instagram_user(username)
68
- → Follower count, post count, bio
71
+ execute("instagram", "user", "user", {"user": "username"})
72
+ → Follower count (follower_count), post count (media_count), bio (description)
73
+ → Fields: id, alias, name, url, image, follower_count, following_count, description, media_count, is_private, is_verified, is_business, category, external_url, email, location
69
74
  ```
70
75
 
71
76
  2. **Analyze Followers** (sample)
72
77
  ```
73
- get_instagram_user_friendships(
74
- user=username,
75
- type="followers",
76
- count=100
77
- )
78
+ execute("instagram", "user", "user_friendships", {
79
+ "user": "username",
80
+ "count": 100,
81
+ "type": "followers"
82
+ })
83
+ → Fields: id, name, alias, url, image, is_verified, is_private
78
84
 
79
85
  For each follower (sample):
80
86
  - Profile type (personal, business, creator)
81
87
  - Bio indicators (interests, location)
82
88
  - Follower count (influence level)
89
+
90
+ Use get_page(cache_key, offset=10, limit=10) to load more followers.
83
91
  ```
84
92
 
85
93
  3. **Engagement Pattern Analysis**
86
94
  ```
87
- get_instagram_user_posts(username, count=50)
95
+ execute("instagram", "user", "user_posts", {"user": "username", "count": 50})
96
+ → Fields: id, code, url, image, text, created_at, like_count, comment_count, reshare_count, view_count, type, is_paid_partnership
88
97
 
89
98
  For each post:
90
- get_instagram_post_likes(post_id, count=100)
91
- get_instagram_post_comments(post_id, count=50)
99
+ execute("instagram", "post", "post_likes", {"post": "{id}", "count": 100})
100
+ → Fields: id, name, alias, url, image, is_verified, is_private
101
+
102
+ execute("instagram", "post", "post_comments", {"post": "{id}", "count": 50})
103
+ → Fields: id, comment_index, created_at, text, like_count, reply_count, parent_id, user
92
104
 
93
105
  Analyze:
94
106
  - Who engages most (power users)
95
- - When engagement happens (timing)
107
+ - When engagement happens (timing via created_at)
96
108
  - What content drives engagement
97
109
  - Comment quality and topics
110
+
111
+ Use query_cache(cache_key, sort_by={"field": "like_count", "order": "desc"})
112
+ to find top-performing posts without re-fetching.
98
113
  ```
99
114
 
100
115
  4. **Audience Segmentation**
@@ -104,6 +119,9 @@ Group followers by:
104
119
  - Interests (from bios)
105
120
  - Location (from profiles)
106
121
  - Influence (follower counts)
122
+
123
+ Use query_cache(cache_key, conditions=[{"field": "is_verified", "op": "eq", "value": true}])
124
+ to filter verified followers.
107
125
  ```
108
126
 
109
127
  **Expected Output**:
@@ -112,28 +130,37 @@ Group followers by:
112
130
  - Top engaged followers
113
131
  - Content preferences
114
132
 
133
+ Use `export_data(cache_key, "csv")` to provide a downloadable follower/engagement report.
134
+
115
135
  ### Workflow 2: YouTube Audience Insights
116
136
 
117
137
  **Steps**:
118
138
 
119
139
  1. **Channel Overview**
120
140
  ```
121
- get_youtube_channel_videos(channel, count=50)
141
+ execute("youtube", "channel", "channel_videos", {"channel": "@channel_alias", "count": 50})
142
+ → Fields: id, title, url, author, duration_seconds, view_count, published_at, image
122
143
 
123
144
  Aggregate:
124
- - Total views
125
- - Subscriber milestones
126
- - Content mix
145
+ - Total views (sum view_count)
146
+ - Content mix (by duration, topic)
147
+ - Publishing frequency (by published_at)
148
+
149
+ Use query_cache(cache_key, aggregate={"field": "view_count", "op": "sum"})
150
+ to get total views.
127
151
  ```
128
152
 
129
153
  2. **Viewer Engagement Analysis**
130
154
  ```
131
155
  For recent videos:
132
- get_youtube_video(video_id)
133
- Views, likes, comments
156
+ execute("youtube", "video", "video", {"video": "{video_id}"})
157
+ Fields: id, url, title, description, author, duration_seconds, view_count, subtitles
134
158
 
135
- get_youtube_video_comments(video_id, count=200)
159
+ execute("youtube", "video", "video_comments", {"video": "{video_id}", "count": 200})
160
+ → Fields: id, text, author, published_at, like_count, reply_count, reply_level
136
161
  → Analyze commenter patterns
162
+
163
+ Use get_page(cache_key, offset=10, limit=10) to load more comments.
137
164
  ```
138
165
 
139
166
  3. **Audience Demographics from Comments**
@@ -143,6 +170,12 @@ From comments analyze:
143
170
  - Topics discussed (interests)
144
171
  - Language and tone
145
172
  - Technical depth
173
+
174
+ Use query_cache(cache_key, conditions=[{"field": "text", "op": "contains", "value": "?"}])
175
+ to filter questions from comments.
176
+
177
+ Use query_cache(cache_key, sort_by={"field": "like_count", "order": "desc"})
178
+ to find most popular comments.
146
179
  ```
147
180
 
148
181
  4. **Content Performance by Audience**
@@ -150,7 +183,9 @@ From comments analyze:
150
183
  Correlate:
151
184
  - High-view videos → audience interests
152
185
  - High-comment videos → engagement topics
153
- - High-like videos → quality indicators
186
+
187
+ Use query_cache(cache_key, sort_by={"field": "view_count", "order": "desc"})
188
+ to rank videos by performance metrics.
154
189
  ```
155
190
 
156
191
  **Expected Output**:
@@ -165,7 +200,7 @@ Correlate:
165
200
 
166
201
  1. **Get Post History**
167
202
  ```
168
- get_linkedin_user_posts(urn, count=50)
203
+ execute("linkedin", "post", "get_user_posts", {"user": "{alias}", "count": 50})
169
204
  ```
170
205
 
171
206
  2. **Analyze Engagement**
@@ -175,6 +210,9 @@ For each post:
175
210
  - Comment depth
176
211
  - Share count
177
212
  - Post reach indicators
213
+
214
+ Use query_cache(cache_key, sort_by={"field": "reactions", "order": "desc"})
215
+ to find most engaging posts.
178
216
  ```
179
217
 
180
218
  3. **Profile Engagers** (if accessible)
@@ -184,6 +222,9 @@ From reactions/comments:
184
222
  - Industries
185
223
  - Companies
186
224
  - Seniority levels
225
+
226
+ Use execute("linkedin", "user", "get", {"user": "{engager_alias}"})
227
+ to get full profiles of top engagers.
187
228
  ```
188
229
 
189
230
  4. **Content-Audience Mapping**
@@ -193,6 +234,9 @@ Correlate:
193
234
  - Which formats perform best
194
235
  - Which audiences engage with what
195
236
  - When different audiences are active
237
+
238
+ Use query_cache(cache_key, aggregate={"field": "reactions", "op": "avg"}, group_by="post_type")
239
+ to analyze performance by content type.
196
240
  ```
197
241
 
198
242
  **Expected Output**:
@@ -203,21 +247,49 @@ Correlate:
203
247
 
204
248
  ## MCP Tools Reference
205
249
 
206
- ### Instagram
207
- - `get_instagram_user` - Profile stats
208
- - `get_instagram_user_friendships` - Follower/following lists
209
- - `get_instagram_user_posts` - Post history
210
- - `get_instagram_post_likes` - Who liked posts
211
- - `get_instagram_post_comments` - Comment analysis
250
+ ### v2 Meta-Tools
251
+
252
+ | Tool | Purpose |
253
+ |------|---------|
254
+ | `discover(source, category)` | Learn available endpoints and params before execute |
255
+ | `execute(source, category, endpoint, params)` | Fetch data — replaces all v1 tools |
256
+ | `get_page(cache_key, offset, limit)` | Load more items from previous execute |
257
+ | `query_cache(cache_key, conditions, sort_by, aggregate, group_by)` | Filter/sort/aggregate cached data |
258
+ | `export_data(cache_key, format)` | Export dataset as CSV/JSON/JSONL |
259
+
260
+ ### Instagram Endpoints
261
+
262
+ | Endpoint | Call | Key Params |
263
+ |----------|------|------------|
264
+ | Profile | `execute("instagram", "user", "user", {"user": "..."})` | `user` (alias/ID/URL) |
265
+ | Followers/Following | `execute("instagram", "user", "user_friendships", {"user": "...", "count": N, "type": "followers"})` | `user`, `count`, `type` (followers\|following) |
266
+ | User Posts | `execute("instagram", "user", "user_posts", {"user": "...", "count": N})` | `user`, `count` |
267
+ | User Reels | `execute("instagram", "user", "user_reels", {"user": "...", "count": N})` | `user`, `count` |
268
+ | Post Details | `execute("instagram", "post", "post", {"post": "{id}"})` | `post` (numeric post ID) |
269
+ | Post Likes | `execute("instagram", "post", "post_likes", {"post": "{id}", "count": N})` | `post`, `count` |
270
+ | Post Comments | `execute("instagram", "post", "post_comments", {"post": "{id}", "count": N})` | `post`, `count` |
271
+
272
+ ### YouTube Endpoints
273
+
274
+ | Endpoint | Call | Key Params |
275
+ |----------|------|------------|
276
+ | Channel Videos | `execute("youtube", "channel", "channel_videos", {"channel": "...", "count": N})` | `channel` (URL/@alias/ID), `count` (max 1000) |
277
+ | Video Details | `execute("youtube", "video", "video", {"video": "..."})` | `video` (ID or URL) |
278
+ | Video Comments | `execute("youtube", "video", "video_comments", {"video": "...", "count": N})` | `video`, `count` (max 2000) |
279
+ | Video Subtitles | `execute("youtube", "video", "video_subtitles", {"video": "...", "lang": "en"})` | `video`, `lang` |
280
+
281
+ ### LinkedIn Endpoints
282
+
283
+ | Endpoint | Call | Key Params |
284
+ |----------|------|------------|
285
+ | User Posts | `execute("linkedin", "post", "get_user_posts", {"user": "..."})` | `user` (alias) |
286
+ | User Profile | `execute("linkedin", "user", "get", {"user": "..."})` | `user` (alias) |
212
287
 
213
- ### YouTube
214
- - `get_youtube_channel_videos` - Channel content
215
- - `get_youtube_video` - Video metrics
216
- - `get_youtube_video_comments` - Audience engagement
288
+ ### Error Handling
217
289
 
218
- ### LinkedIn
219
- - `get_linkedin_user_posts` - Post history
220
- - `get_linkedin_profile` - Profile insights
290
+ - If `execute()` returns an error with `"llm_hint"`, follow the hint.
291
+ - If `execute()` returns `{"error": "Source not found", "available_sources": [...]}`, check source name.
292
+ - If `execute()` returns `{"error": "Endpoint not found", "available_endpoints": [...]}`, call `discover()` to find correct endpoint names.
221
293
 
222
294
  ## Audience Analysis Framework
223
295
 
@@ -253,12 +325,12 @@ Correlate:
253
325
  - Content recommendations
254
326
  - Strategic insights
255
327
 
256
- **CSV Export**:
328
+ **CSV Export** via `export_data(cache_key, "csv")`:
257
329
  - Follower sample data
258
330
  - Engagement metrics
259
331
  - Segment distribution
260
332
 
261
- **JSON Export**:
333
+ **JSON Export** via `export_data(cache_key, "json")`:
262
334
  - Complete audience data
263
335
  - Engagement time series
264
336
  - Segmentation details
@@ -2,16 +2,25 @@
2
2
 
3
3
  ## Instagram Capabilities
4
4
 
5
- **Direct Audience Data**:
6
- - Follower/following lists (sample)
7
- - Engagement on posts (likes, comments)
8
- - Profile information from followers
5
+ **Available Endpoints** (source: `"instagram"`):
6
+
7
+ | Category | Endpoint | Call |
8
+ |----------|----------|------|
9
+ | user | `user` | `execute("instagram", "user", "user", {"user": "..."})` |
10
+ | user | `user_friendships` | `execute("instagram", "user", "user_friendships", {"user": "...", "count": N, "type": "followers"})` |
11
+ | user | `user_posts` | `execute("instagram", "user", "user_posts", {"user": "...", "count": N})` |
12
+ | user | `user_reels` | `execute("instagram", "user", "user_reels", {"user": "...", "count": N})` |
13
+ | post | `post` | `execute("instagram", "post", "post", {"post": "{id}"})` |
14
+ | post | `post_likes` | `execute("instagram", "post", "post_likes", {"post": "{id}", "count": N})` |
15
+ | post | `post_comments` | `execute("instagram", "post", "post_comments", {"post": "{id}", "count": N})` |
9
16
 
10
17
  **Analysis Techniques**:
11
- - Follower quality assessment
12
- - Engagement pattern tracking
13
- - Content preference analysis
14
- - Audience segmentation
18
+ - Follower quality assessment via `user_friendships`
19
+ - Engagement pattern tracking via `user_posts` + `post_likes` + `post_comments`
20
+ - Content preference analysis via `query_cache()` with `sort_by`
21
+ - Audience segmentation via `query_cache()` with `group_by`
22
+
23
+ **Pagination**: Use `get_page(cache_key, offset, limit)` to load more followers/posts/comments.
15
24
 
16
25
  **Limitations**:
17
26
  - Can't access full follower list (privacy)
@@ -20,16 +29,22 @@
20
29
 
21
30
  ## YouTube Capabilities
22
31
 
23
- **Direct Audience Data**:
24
- - Comment analysis
25
- - Video engagement metrics
26
- - Channel growth indicators
32
+ **Available Endpoints** (source: `"youtube"`):
33
+
34
+ | Category | Endpoint | Call |
35
+ |----------|----------|------|
36
+ | channel | `channel_videos` | `execute("youtube", "channel", "channel_videos", {"channel": "...", "count": N})` |
37
+ | video | `video` | `execute("youtube", "video", "video", {"video": "..."})` |
38
+ | video | `video_comments` | `execute("youtube", "video", "video_comments", {"video": "...", "count": N})` |
39
+ | video | `video_subtitles` | `execute("youtube", "video", "video_subtitles", {"video": "...", "lang": "en"})` |
27
40
 
28
41
  **Analysis Techniques**:
29
- - Viewer interest profiling
30
- - Content performance analysis
42
+ - Viewer interest profiling from comments
43
+ - Content performance analysis via `query_cache()` with `sort_by`
31
44
  - Community engagement assessment
32
45
 
46
+ **Pagination**: Use `get_page(cache_key, offset, limit)` to load more comments (max 2000 per request).
47
+
33
48
  **Limitations**:
34
49
  - No direct subscriber access
35
50
  - Demographics inferred from comments
@@ -37,16 +52,20 @@
37
52
 
38
53
  ## LinkedIn Capabilities
39
54
 
40
- **Direct Audience Data**:
41
- - Post engagement metrics
42
- - Follower professional information
43
- - Connection quality
55
+ **Available Endpoints** (source: `"linkedin"`):
56
+
57
+ | Category | Endpoint | Call |
58
+ |----------|----------|------|
59
+ | post | `get_user_posts` | `execute("linkedin", "post", "get_user_posts", {"user": "..."})` |
60
+ | user | `get` | `execute("linkedin", "user", "get", {"user": "..."})` |
44
61
 
45
62
  **Analysis Techniques**:
46
63
  - Professional demographic profiling
47
- - Industry and seniority analysis
64
+ - Industry and seniority analysis via `query_cache()` with `group_by`
48
65
  - Content-audience matching
49
66
 
67
+ **Aggregation**: Use `query_cache(cache_key, aggregate={"field": "reactions", "op": "avg"}, group_by="post_type")` for performance analysis.
68
+
50
69
  **Limitations**:
51
70
  - Privacy settings limit visibility
52
71
  - Sample-based analysis
@@ -1,15 +1,15 @@
1
- # Audience Analysis Tool Mapping
1
+ # Audience Analysis Tool Mapping (v2)
2
2
 
3
- ## Analysis Need → MCP Tool
3
+ ## Analysis Need → MCP v2 Calls
4
4
 
5
5
  **Follower Demographics**:
6
- - Instagram: `get_instagram_user_friendships` → sample analysis
7
- - LinkedIn: `get_linkedin_profile` → professional data
6
+ - Instagram: `execute("instagram", "user", "user_friendships", {"user": "...", "count": 100, "type": "followers"})` → sample analysis
7
+ - LinkedIn: `execute("linkedin", "user", "get", {"user": "..."})` → professional data
8
8
 
9
9
  **Engagement Patterns**:
10
- - Instagram: `get_instagram_user_posts` + `get_instagram_post_likes/comments`
11
- - YouTube: `get_youtube_video` + `get_youtube_video_comments`
12
- - LinkedIn: `get_linkedin_user_posts`
10
+ - Instagram: `execute("instagram", "user", "user_posts", {"user": "...", "count": 50})` + `execute("instagram", "post", "post_likes", {"post": "{id}", "count": 100})` + `execute("instagram", "post", "post_comments", {"post": "{id}", "count": 50})`
11
+ - YouTube: `execute("youtube", "video", "video", {"video": "..."})` + `execute("youtube", "video", "video_comments", {"video": "...", "count": 200})`
12
+ - LinkedIn: `execute("linkedin", "post", "get_user_posts", {"user": "..."})`
13
13
 
14
14
  **Audience Growth**:
15
15
  - Track follower counts over time
@@ -18,10 +18,15 @@
18
18
 
19
19
  **Content Preferences**:
20
20
  - Correlate content types with engagement
21
- - Analyze top-performing posts
22
- - Track topic performance
21
+ - Use `query_cache(cache_key, sort_by={"field": "like_count", "order": "desc"})` to rank top-performing posts
22
+ - Track topic performance with `query_cache(cache_key, aggregate=..., group_by=...)`
23
23
 
24
24
  **Audience Quality**:
25
- - Analyze follower profiles
25
+ - Analyze follower profiles via `execute("instagram", "user", "user", {"user": "..."})`
26
26
  - Check engagement authenticity
27
- - Assess comment quality
27
+ - Assess comment quality via `execute("instagram", "post", "post_comments", {"post": "{id}", "count": 50})`
28
+ - Use `query_cache()` to filter suspicious patterns
29
+
30
+ **Data Export**:
31
+ - Use `export_data(cache_key, "csv")` for spreadsheet analysis
32
+ - Use `export_data(cache_key, "json")` for programmatic processing