content-scout

Installation
SKILL.md

Content Scout

Finds fresh articles relevant to TigerData's audience and drafts social posts — both a subtle version and a branded version — using the user's voice profile from Tiger Den. Supports LinkedIn (default) and X, with deduplication against previously recommended articles.

When to use this skill

  • User wants to find articles worth sharing on social media
  • User asks for LinkedIn or X post drafts based on recent industry articles
  • User wants to know what's worth posting about this week
  • User runs /content-scout with optional arguments

Arguments

The user can pass optional arguments after /content-scout:

  • Platform nameslinkedin (default), x. Can combine: /content-scout linkedin x drafts posts for both platforms.
  • Bucket names — Restrict search to specific topic buckets. Bucket names are defined in the content-scout-topic-buckets Tiger Den reference doc. Pass the bucket slug (e.g. iot, postgres, competitive) to narrow the search.
  • top1 — Run the full search and scoring, but only draft posts for the single highest-scored article.
  • noslack — Skip the Slack dedup log. Output everything inline only. Note: this means the skill can't deduplicate against these recommendations next time.

Arguments combine: /content-scout x postgres top1 noslack

If no arguments are provided, run the full workflow across all buckets for LinkedIn.


Step 0: Pre-flight checks

Three things must be confirmed before any work happens.

0a — Tiger Den

Read REFERENCES.md from the plugin root and run the pre-flight check described there. Call list_marketing_references() to verify Tiger Den is reachable. If it fails or the tool is not found, STOP — do not continue. Follow the error handling in REFERENCES.md.

0b — Voice profile

Call list_voice_profiles() to get available profiles. Look up the current user's name.

  • If a matching voice profile is found: Use it for all drafting.

  • If no match is found: Show the available profiles and let the user pick. If they don't match any profile, STOP. Tell the user:

    "This skill drafts posts in your personal voice, but I don't have a voice profile for you in Tiger Den yet. To create one, ask your Tiger Den admin to set up a voice profile for you — or ask in #marketing-tools for help."

    Do not proceed without a voice profile. Do not fall back to a generic voice. The whole point of this skill is voice-accurate drafts; without a profile, the output isn't useful.

0c — Slack connectivity

If the noslack argument was NOT passed, verify the Slack connector is available by checking for Slack tools (e.g. slack_search_users, slack_send_message). If Slack tools are not available, warn the user:

"Slack isn't connected, so I can't log recommendations for dedup or check what you've already been sent. I'll proceed without deduplication — just know you might see repeats from previous runs. To connect Slack, go to Settings → Connectors."

Continue the workflow without dedup if Slack is unavailable — this is a soft dependency, unlike the voice profile which is a hard gate.

0d — No Fly List

Fetch the No Fly List:

get_marketing_reference(slug: "no-fly-list")

This is a list of customers who cannot be publicly referenced. Load these names as a hard constraint: never include any No Fly List customer in any output — not as named examples, proof points, customer quotes, case study references, or any other mention. If the user requests content featuring or referencing a No Fly List customer, stop and inform them that this customer cannot be publicly referenced. If a No Fly List name appears in source material you are working from, omit it from all outputs.


Step 1: Fetch reference docs

Once pre-flight passes, fetch the skill's reference docs from Tiger Den:

get_marketing_context(slugs: ["brand-voice-guide", "content-scout-topic-buckets"])

The topic buckets doc defines what to search for, what qualifies as a good find per bucket, and the framing angles. The brand voice guide provides general tone and style rules.

Read both carefully before proceeding. The topic buckets doc is the search strategy — don't improvise outside its defined buckets unless the user explicitly asks for a custom topic.

Step 2: Check previously recommended articles (dedup)

If Slack is connected and noslack was not passed:

  1. Look up the current user's Slack user ID using slack_search_users with their name.
  2. Read back recent Slack DMs sent to that user ID. Look back at least 30 days of messages.
  3. Extract all URLs from messages that match the dedup log format (messages from the skill's previous runs — they'll have the "Content Scout" header).
  4. Build a dedupe list. Normalize URLs before comparing: strip trailing slashes, query params (UTM tags etc.), and www. prefixes.

If Slack read fails, continue without dedup and note it in the output.

Step 3: Search for articles

Search the web for 4-5 articles published in the last 7 days across the topic buckets from the Tiger Den reference doc.

Aim for at least one article per active bucket, but quality beats coverage.

Where to look: Dev blogs, Hacker News, The New Stack, InfoQ, personal engineering blogs, database-focused publications (Planet PostgreSQL, Percona blog, etc.), and industry outlets relevant to the bucket topics. Practitioner X/Twitter threads work if they're substantive. Avoid vendor marketing blogs unless they contain real technical depth.

Quality bar: Prioritize articles with real technical substance or genuine practitioner perspective. Skip PR fluff, press releases, and SEO-bait listicles.

Deduplicate: Compare every candidate URL against the dedup list from Step 2. Drop previously recommended articles. If a URL is a variant of a previous one (same domain + path, different query params), drop it too. If dedup wipes out a bucket, run one more targeted search before accepting the gap.

Dry weeks: Don't force bad articles to fill buckets. Three strong articles from two buckets beats five mediocre ones spread across three. If a bucket has nothing, say so and move on.

Step 4: Score and rank articles

For each article, assess commentary value — how much genuine perspective can the user add beyond "here's an interesting article"? Use the user's voice profile and role to gauge what they'd have credibility to comment on. Score 1-5:

  • 5 — Strong opinion opportunity, directly relevant to audience, clear POV available
  • 4 — Good hook, relevant problem space, easy to riff on
  • 3 — Interesting but niche, or needs more context to land
  • 2 — Tangentially relevant, thin commentary value
  • 1 — Skip

Drop anything scored 1-2. Present remaining articles ranked highest to lowest.

Step 5: Draft social posts

For each article scoring 3+, draft posts for the requested platform(s).

LinkedIn drafts

Write two variants per article:

Variant A — SUBTLE

  • No brand mentions (no TigerData, TimescaleDB, Tiger Cloud)
  • Developer-to-developer tone — sharing something genuinely worth reading
  • Lead with the insight or problem, not "I found this article"
  • 150-250 words
  • End with a question or observation that invites discussion, not a CTA

Variant B — BRANDED

  • Same voice and directness — still sounds like the author, not a press release
  • Works in TigerData, TimescaleDB, or Tiger Cloud only where it fits naturally
  • The connection should feel earned, not forced. If it's a stretch, keep it minimal.
  • Same length guidance as Variant A

Links: Every post must include the article URL. Place it naturally where the reader would want to click through (after the hook, not buried at the end). LinkedIn renders link previews, so URL placement affects how the post looks in-feed.

Hashtags: End each post with 3-5 relevant hashtags that actually have traffic on LinkedIn (e.g. #PostgreSQL, #IoT, #TimeSeries, #DevOps, #DataEngineering). Skip obscure tags nobody follows. Don't use hashtags inline — only at the end. If no hashtags feel natural, skip them.

X (Twitter) drafts

Write two variants per article:

Variant A — SUBTLE

  • No brand mentions
  • Tight and punchy — aim for a single post (under 280 chars) when possible
  • If the take needs more room, draft as a short thread (2-3 posts max)
  • Lead with the sharpest observation, not a summary
  • Link goes in the last post of a thread, or naturally placed in a single post

Variant B — BRANDED

  • Same voice constraints as LinkedIn branded, adapted for X's format
  • Brand mentions only where they'd feel natural in a tweet
  • Same length guidance as Variant A

Voice rules (both platforms, both variants)

These supplement the user's Tiger Den voice profile and the brand-voice-guide:

  • Short sentences. No bullet walls in the post body.
  • No em-dashes
  • Never use: "genuinely," "honestly," "straightforward," "dive in," "in the ever-evolving landscape," "it's worth noting"
  • No headers inside the post
  • Avoid hollow openers like "Hot take:" or "Unpopular opinion:" unless the take earns it
  • Dry humor is fine. Forced enthusiasm is not.
  • If the article is bad or wrong, say so — that's a valid post angle
  • If a draft leans on a well-worn framing, flag it so the user can decide whether to rework the hook (they may have recently posted something similar)

Step 6: Deliver output

Inline output (always)

Present the full results in the session (Cowork or CLI). Format clearly:

CONTENT SCOUT — [Today's Date] — [Platform(s)]

#1 — [ARTICLE TITLE]
[URL]

Topic: [Bucket name] | Commentary value: [X/5]
Why: [1 sentence on why it's worth sharing]

[Platform] — Subtle:
[Post text]

[Platform] — Branded:
[Post text]


#2 — [ARTICLE TITLE]
[URL]

[Repeat same structure]

If multiple platforms were requested, show all variants for each article grouped together.

Dedup log to Slack (unless noslack)

After presenting inline, send a compact log to the user's Slack DM. This is the dedup ledger, not the full output. Format:

**Content Scout Log — [Today's Date]**

Recommended articles:
• [Article Title] — [URL]
• [Article Title] — [URL]
• [Article Title] — [URL]

That's it — just titles and URLs. The user reads and iterates on drafts in the session; the Slack DM is only there so next run can check what's already been recommended.

If the Slack DM fails, warn the user that dedup won't work next time and continue.

Dependencies

  • Required: Tiger Den connector (voice profile + topic buckets + brand voice guide)
  • Required: Web search (for article discovery)
  • Soft dependency: Slack connector (for dedup log). Skill works without it but can't deduplicate across runs.
Weekly Installs
1
GitHub Stars
5
First Seen
Apr 13, 2026