@anysiteio/agent-skills 1.4.0 → 2.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 (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 +186 -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
@@ -17,13 +17,28 @@ Monitor and protect your brand reputation across social media platforms. Track m
17
17
 
18
18
  **Coverage**: 65% - Pivoted from review platforms to social media monitoring; strong for Twitter, Reddit, Instagram, YouTube, LinkedIn
19
19
 
20
+ ## v2 Tool Interface
21
+
22
+ All data fetching uses the anysite MCP v2 universal meta-tools:
23
+
24
+ - **`execute(source, category, endpoint, params)`** — fetch data from any source. Returns first page + `cache_key`.
25
+ - **`get_page(cache_key, offset, limit)`** — paginate through results when `next_offset` is returned.
26
+ - **`query_cache(cache_key, conditions, sort_by, aggregate, group_by)`** — filter, sort, or aggregate cached data without new API calls.
27
+ - **`export_data(cache_key, format)`** — export full dataset as CSV, JSON, or JSONL for reports.
28
+
29
+ Always call `discover(source, category)` first if unsure about endpoint names or params.
30
+
31
+ ### Error Handling
32
+
33
+ v2 responses may include `llm_hint` fields with guidance on how to fix errors (e.g., wrong URN format, missing params). Always check `llm_hint` in error responses before retrying.
34
+
20
35
  ## Supported Platforms
21
36
 
22
- - **Twitter/X**: Real-time mentions, sentiment, viral content
23
- - **Reddit**: Community discussions, detailed feedback, sentiment
24
- - **Instagram**: Visual brand mentions, hashtag tracking, influencer posts
25
- - **YouTube**: Video mentions, comment sentiment, brand coverage
26
- - **LinkedIn**: Professional mentions, company updates, B2B sentiment
37
+ - **Twitter/X**: Real-time mentions, sentiment, viral content
38
+ - **Reddit**: Community discussions, detailed feedback, sentiment
39
+ - **Instagram**: Visual brand mentions, hashtag tracking, influencer posts
40
+ - **YouTube**: Video mentions, comment sentiment, brand coverage
41
+ - **LinkedIn**: Professional mentions, company updates, B2B sentiment
27
42
 
28
43
  ## Quick Start
29
44
 
@@ -39,12 +54,14 @@ Define:
39
54
 
40
55
  Platform searches:
41
56
  ```
42
- Twitter: search_twitter_posts(query="brand name", count=100)
43
- Reddit: search_reddit_posts(query="brand name", count=100)
44
- Instagram: search_instagram_posts(query="#brandname", count=100)
45
- LinkedIn: search_linkedin_posts(keywords="brand name", count=50)
57
+ Twitter: execute("twitter", "search", "search_posts", {"query": "brand name", "count": 100})
58
+ Reddit: execute("reddit", "search", "search_posts", {"query": "brand name", "count": 100})
59
+ Instagram: execute("instagram", "search", "search_posts", {"query": "#brandname", "count": 100})
60
+ LinkedIn: execute("linkedin", "post", "search_posts", {"keywords": "brand name", "count": 50})
46
61
  ```
47
62
 
63
+ Each call returns a `cache_key` — use it for pagination, filtering, and export.
64
+
48
65
  **Step 3: Analyze Sentiment**
49
66
 
50
67
  For each mention:
@@ -52,6 +69,8 @@ For each mention:
52
69
  - Categorize: Complaint, praise, question, general
53
70
  - Prioritize: Urgency, reach, influence
54
71
 
72
+ Use `query_cache(cache_key, conditions=[...], sort_by=...)` to filter high-engagement or negative mentions without re-fetching.
73
+
55
74
  **Step 4: Take Action**
56
75
 
57
76
  Based on findings:
@@ -71,25 +90,39 @@ Based on findings:
71
90
  1. **Search All Platforms**
72
91
  ```
73
92
  # Twitter (real-time pulse)
74
- search_twitter_posts(query="brand name OR @brandhandle", count=100)
75
- Filter: Last 24 hours
93
+ execute("twitter", "search", "search_posts", {"query": "brand name OR @brandhandle", "count": 100})
94
+ Returns cache_key_twitter; filter last 24h with from_date param (timestamp)
76
95
 
77
96
  # Reddit (detailed discussions)
78
- search_reddit_posts(query="brand name", count=50)
79
- Filter: Last 24 hours
97
+ execute("reddit", "search", "search_posts", {"query": "brand name", "count": 50, "time_filter": "day"})
98
+ Returns cache_key_reddit
80
99
 
81
100
  # Instagram (visual mentions)
82
- search_instagram_posts(query="#brandname OR brand name", count=50)
101
+ execute("instagram", "search", "search_posts", {"query": "#brandname OR brand name", "count": 50})
102
+ → Returns cache_key_instagram
83
103
 
84
104
  # LinkedIn (professional mentions)
85
- search_linkedin_posts(keywords="brand name", count=20)
105
+ execute("linkedin", "post", "search_posts", {"keywords": "brand name", "count": 20})
106
+ → Returns cache_key_linkedin
86
107
 
87
108
  # YouTube (video coverage)
88
- search_youtube_videos(query="brand name review OR brand name unboxing", count=20)
109
+ execute("youtube", "search", "search_videos", {"query": "brand name review OR brand name unboxing", "count": 20})
110
+ → Returns cache_key_youtube
111
+ ```
112
+
113
+ If any result includes `next_offset`, fetch more with:
114
+ ```
115
+ get_page(cache_key, offset=next_offset, limit=50)
89
116
  ```
90
117
 
91
118
  2. **Classify Mentions**
119
+
120
+ Use `query_cache` to sort and filter cached results:
92
121
  ```
122
+ # Find high-engagement mentions across platforms
123
+ query_cache(cache_key_twitter, sort_by=[{"field": "favorite_count", "order": "desc"}])
124
+ query_cache(cache_key_reddit, sort_by=[{"field": "vote_count", "order": "desc"}])
125
+
93
126
  For each mention:
94
127
 
95
128
  Sentiment:
@@ -126,7 +159,13 @@ Low Priority:
126
159
  ```
127
160
 
128
161
  4. **Generate Daily Report**
162
+
163
+ Export data for reporting:
129
164
  ```
165
+ export_data(cache_key_twitter, "csv")
166
+ export_data(cache_key_reddit, "csv")
167
+ → Returns download URLs for each dataset
168
+
130
169
  Summary:
131
170
  - Total mentions (by platform)
132
171
  - Sentiment breakdown (% positive/negative/neutral)
@@ -164,16 +203,21 @@ Alert triggers:
164
203
  ```
165
204
  When alert triggered:
166
205
 
167
- search_twitter_posts(query="brand name", count=500)
168
- → Identify what's driving spike
206
+ execute("twitter", "search", "search_posts", {"query": "brand name", "count": 500})
207
+ → Identify what's driving spike; use get_page() to load all results
169
208
 
170
- search_reddit_posts(query="brand name", count=200)
209
+ execute("reddit", "search", "search_posts", {"query": "brand name", "count": 200})
171
210
  → Check community discussions
172
211
 
173
212
  For viral posts:
174
- get_twitter_post(post_id) or get_reddit_post(url)
175
- Analyze reach and engagement
176
- Read comments for context
213
+ # Get specific Reddit post details and comments
214
+ execute("reddit", "posts", "posts", {"post_url": "<reddit_post_url>"})
215
+ execute("reddit", "posts", "posts_comments", {"post_url": "<reddit_post_url>"})
216
+ → Analyze reach and engagement, read comments for context
217
+
218
+ # For viral tweets, scrape the tweet URL directly
219
+ execute("webparser", "parse", "parse", {"url": "<tweet_url>"})
220
+ → Get tweet details and engagement metrics
177
221
  ```
178
222
 
179
223
  3. **Assess Crisis Severity**
@@ -184,6 +228,10 @@ Severity factors:
184
228
  - Reach (influencer involvement, media coverage)
185
229
  - Sentiment (how negative)
186
230
  - Validity (legitimate issue vs. misunderstanding)
231
+
232
+ Use query_cache to analyze cached data:
233
+ query_cache(cache_key, aggregate=[{"function": "count"}])
234
+ → Total mention count without re-fetching
187
235
  ```
188
236
 
189
237
  4. **Track Crisis Evolution**
@@ -225,15 +273,24 @@ List 3-5 main competitors
225
273
  2. **Gather Mentions for All**
226
274
  ```
227
275
  For brand + each competitor:
228
- search_twitter_posts(query=brand, count=200)
229
- search_reddit_posts(query=brand, count=100)
230
- search_linkedin_posts(keywords=brand, count=50)
276
+ execute("twitter", "search", "search_posts", {"query": "<brand>", "count": 200})
277
+ execute("reddit", "search", "search_posts", {"query": "<brand>", "count": 100})
278
+ execute("linkedin", "post", "search_posts", {"keywords": "<brand>", "count": 50})
279
+
280
+ Each returns a cache_key — use get_page() if next_offset indicates more data.
231
281
  ```
232
282
 
233
283
  3. **Calculate Brand Health Scores**
234
284
  ```
235
285
  For each brand:
236
286
 
287
+ Use query_cache to aggregate metrics from cached results:
288
+ query_cache(cache_key, aggregate=[{"function": "count"}])
289
+ → Total mention volume
290
+
291
+ query_cache(cache_key, aggregate=[{"function": "avg", "field": "favorite_count"}])
292
+ → Average engagement per mention
293
+
237
294
  Mention Volume: Total mentions
238
295
  Sentiment Score: (Positive - Negative) / Total
239
296
  Engagement Rate: Avg engagement per mention
@@ -264,31 +321,36 @@ Look for:
264
321
  - Strength/weakness analysis
265
322
  - Strategic opportunities
266
323
 
267
- ## MCP Tools Reference
324
+ ## MCP Tools Reference (v2)
268
325
 
269
326
  ### Twitter/X
270
- - `search_twitter_posts(query, count)` - Find brand mentions
271
- - `get_twitter_user(user)` - Check brand profile stats
272
- - `get_twitter_user_posts(user, count)` - Monitor brand account
327
+ - `execute("twitter", "search", "search_posts", {"query": ..., "count": N})` Find brand mentions. Supports `from_date`, `to_date`, `min_likes`, `min_retweets`, `language` filters.
328
+ - `execute("twitter", "user", "user", {"user": ...})` Check brand profile stats
329
+ - `execute("twitter", "user", "user_posts", {"user": ..., "count": N})` Monitor brand account posts
273
330
 
274
331
  ### Reddit
275
- - `search_reddit_posts(query, subreddit, count)` - Find discussions
276
- - `get_reddit_post(url)` - Get post details and sentiment
277
- - `get_reddit_post_comments(url)` - Deep dive on discussions
332
+ - `execute("reddit", "search", "search_posts", {"query": ..., "count": N})` Find discussions. Supports `sort` (relevance/hot/top/new) and `time_filter` (day/week/month/year).
333
+ - `execute("reddit", "posts", "posts", {"post_url": ...})` Get post details and sentiment
334
+ - `execute("reddit", "posts", "posts_comments", {"post_url": ...})` Deep dive on discussions
278
335
 
279
336
  ### Instagram
280
- - `search_instagram_posts(query, count)` - Find visual mentions
281
- - `get_instagram_post(post_id)` - Analyze mention engagement
282
- - `get_instagram_post_comments(post, count)` - Read feedback
337
+ - `execute("instagram", "search", "search_posts", {"query": ..., "count": N})` Find visual mentions
338
+ - `execute("instagram", "post", "post", {"post": ...})` Analyze mention engagement
339
+ - `execute("instagram", "post", "post_comments", {"post": ..., "count": N})` Read feedback
283
340
 
284
341
  ### YouTube
285
- - `search_youtube_videos(query, count)` - Find video mentions
286
- - `get_youtube_video(video)` - Get video details
287
- - `get_youtube_video_comments(video, count)` - Analyze sentiment
342
+ - `execute("youtube", "search", "search_videos", {"query": ..., "count": N})` Find video mentions
343
+ - `execute("youtube", "video", "video", {"video": ...})` Get video details
344
+ - `execute("youtube", "video", "video_comments", {"video": ..., "count": N})` Analyze sentiment
288
345
 
289
346
  ### LinkedIn
290
- - `search_linkedin_posts(keywords, count)` - Professional mentions
291
- - `get_linkedin_company_posts(urn, count)` - Monitor own posts
347
+ - `execute("linkedin", "post", "search_posts", {"keywords": ..., "count": N})` Professional mentions
348
+ - `execute("linkedin", "company", "company_posts", {"urn": {"type": "company", "value": "<id>"}, "count": N})` Monitor own company posts. Requires company URN from `execute("linkedin", "company", "company", {"company": "<alias>"})`.
349
+
350
+ ### Pagination, Caching & Export
351
+ - `get_page(cache_key, offset, limit)` — Load next page of results from any execute() call
352
+ - `query_cache(cache_key, conditions, sort_by, aggregate, group_by)` — Filter/sort/aggregate cached data without new API calls
353
+ - `export_data(cache_key, "csv"|"json"|"jsonl")` — Export full dataset as downloadable file
292
354
 
293
355
  ## Sentiment Analysis Framework
294
356
 
@@ -314,7 +376,7 @@ Look for:
314
376
 
315
377
  **Sentiment Score**:
316
378
  ```
317
- Score = (Positive mentions - Negative mentions) / Total mentions × 100
379
+ Score = (Positive mentions - Negative mentions) / Total mentions x 100
318
380
 
319
381
  +50 to +100: Excellent
320
382
  +20 to +49: Good
@@ -354,12 +416,12 @@ Score = (Positive mentions - Negative mentions) / Total mentions × 100
354
416
  - Top issues identified
355
417
  - Recommended actions
356
418
 
357
- **CSV Export**:
419
+ **CSV Export** (via `export_data(cache_key, "csv")`):
358
420
  - Mention list with sentiment
359
421
  - Platform, date, reach
360
422
  - Issue categorization
361
423
 
362
- **JSON Export**:
424
+ **JSON Export** (via `export_data(cache_key, "json")`):
363
425
  - Complete mention data
364
426
  - Time-series sentiment
365
427
  - Engagement metrics