How to surface the right posts to engage with each day — instead of randomly scrolling.
How to surface the right posts to engage with each day — instead of randomly scrolling. The goal is a short, scorable list ("here are your top 10 posts to comment on") rather than an open feed.
Use listening when the goal is commenting and relationships, not posting. Typical asks:
If the user wants to create content, use the rest of the social skill. Listening feeds creation (it surfaces angles, language, objections), but the output is different.
A repeatable 20-minute loop the user (or you, on their behalf) can run each morning.
Output format Claude should produce:
TOP 10 POSTS — 2026-06-05
1. [Score 9/10] @author — LinkedIn — 2h ago
"We just rolled out X and the team is loving it…"
Why: ICP fit (B2B SaaS, 50–200 employees), buying-intent signal
Suggested comment: [draft]
Link: https://…
Score each post 1–10 across five dimensions, then sum and rank.
| Dimension | What it measures | Weight | |-----------|------------------|--------| | ICP fit | Is the author your target customer / influencer? | 2x | | Intent signal | Are they expressing a problem, asking, or shopping? | 2x | | Reach potential | Is the post getting traction (likes/comments rising)? | 1x | | Comment opportunity | Can you say something genuinely useful, not generic? | 2x | | Recency | Posted in last 1–4h (early comments win, especially on LinkedIn) | 1x |
Intent signal examples (high-value):
Drop if any of these are true:
Match the comment to the post. Don't waste a tier-1 draft on a tier-3 opportunity.
Tier 1 — Relationship builder (target accounts, ICP, high intent)
Tier 2 — Visibility play (high-reach post, adjacent topic)
Tier 3 — Light touch (relationship maintenance)
Never: "Great post!", emoji-only, "+1", LinkedIn-isms like "This is gold 🔥"
These are public JSON endpoints — no auth needed. Run them from bash, pipe to jq, and Claude can parse the output to score and draft comments.
Requires: jq (most recipes) and xmllint (RSS only). Install once:
# macOS
brew install jq
# xmllint ships with macOS; on Linux: apt install libxml2-utils
New posts in a subreddit:
curl -s -A "listening/1.0" \
"https://www.reddit.com/r/SaaS/new.json?limit=25" \
| jq '.data.children[].data | {title, author, url: ("https://reddit.com"+.permalink), score, num_comments, created_utc, selftext: (.selftext | .[0:300])}'
Search across Reddit by keyword (last day, sorted new):
curl -s -A "listening/1.0" \
"https://www.reddit.com/search.json?q=KEYWORD&sort=new&t=day&limit=25" \
| jq '.data.children[].data | {subreddit, title, url: ("https://reddit.com"+.permalink), author, score, created_utc}'
Swap KEYWORD for things like "alternative to notion", "recommend a crm", your competitor names, or your own brand for mentions. Use quotes around multi-word phrases.
Recent stories mentioning a keyword (last 24h):
SINCE=$(($(date +%s) - 86400))
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=KEYWORD&tags=story&numericFilters=created_at_i>${SINCE}" \
| jq '.hits[] | {title, url, author, points, num_comments, created_at, story_id: .objectID, hn_url: ("https://news.ycombinator.com/item?id="+.objectID)}'
Recent comments mentioning a keyword:
curl -s "https://hn.algolia.com/api/v1/search_by_date?query=KEYWORD&tags=comment&numericFilters=created_at_i>${SINCE}" \
| jq '.hits[] | {author, comment_text, story_title, hn_url: ("https://news.ycombinator.com/item?id="+.objectID)}'
Search posts by keyword:
curl -s "https://public.api.bsky.app/xrpc/app.bsky.feed.searchPosts?q=KEYWORD&limit=25&sort=latest" \
| jq '.posts[] | {author: .author.handle, text: .record.text, likes: .likeCount, replies: .replyCount, url: ("https://bsky.app/profile/"+.author.handle+"/post/"+(.uri | split("/") | last))}'
For target accounts that publish to RSS (most blogs, all YouTube channels):
# YouTube channel feed (replace CHANNEL_ID)
curl -s "https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID"
# Generic blog feed
curl -s "https://example.com/feed/" | xmllint --xpath "//item[position()<6]" - 2>/dev/null
LinkedIn and X don't expose useful public APIs, but you can drive a real browser session. dev-browser (MCP, already in the global setup) and Playwright both maintain persistent state — log in once, the session stays alive, Claude can navigate the authenticated feed.
dev-browser workflow (preferred — already wired up):
Useful URLs to feed dev-browser:
| URL pattern | What it shows | |-------------|---------------| | linkedin.com/in/HANDLE/recent-activity/all/ | A target account's recent posts | | linkedin.com/feed/hashtag/TOPIC/ | Hashtag feed | | linkedin.com/feed/ | Your main feed (algorithmic — less useful for triage) | | x.com/HANDLE | A target account's profile | | x.com/search?q=QUERY&f=live | Real-time search (use f=live for chronological) | | x.com/i/lists/LIST_ID | A curated list — best for target accounts |
Tips:
/recent-activity/all/ URL is the cleanest way to see one person's posts without the algorithm.Paid alternatives if you don't want to drive a browser:
| Platform | Tools | |----------|-------| | LinkedIn | Sales Navigator (saved searches), Taplio (engagement) | | X | TweetDeck/X Pro (saved columns), Typefully, Taplio, Tweet Hunter |
Still closed (no good path):
"competitor name" -site:competitor.com sorted by newThe user should maintain a list of sources somewhere persistent at .agents/listening-sources.md (or .claude/listening-sources.md). Claude reads it when running the daily loop.
A ready-to-fill template lives at listening-sources-template.md. Copy it into the project and edit. The source path depends on how the skill was installed:
# Plugin / marketplace install (most common):
cp .agents/skills/social/references/listening-sources-template.md .agents/listening-sources.md
# .claude/ install:
cp .claude/skills/social/references/listening-sources-template.md .agents/listening-sources.md
# Working inside the marketingskills repo:
cp skills/social/references/listening-sources-template.md .agents/listening-sources.md
The template covers: brand/category, ICP (for scoring), target accounts per platform, intent keywords, subreddits, saved-search URLs, and a do-not-engage list.