chatter-scout
Skill5 starsChanged 11 days agoMITView on GitHub
Sweep the web for new chatter on a topic, skip what earlier runs already saw, verify what is left, and write one ranked, cited findings file to feed a blog post or a digest email.
In this repository57 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- architecture-satisfactionSkill
- autopilotSkill
- browser-testSkill
- closeoutSkill
- codebase-designSkill
- code-reviewSkill
- code-smells-auditSkill
- commitSkill
- dependency-auditSkill
- diagnosing-bugsSkill
- domain-modelingSkill
- fix-ci-failuresSkill
- fix-github-issuesSkill
- fix-nightwatch-issuesSkill
- fix-posthog-issuesSkill
- grillingSkill
- grill-meSkill
- grill-with-docsSkill
- handoffSkill
- harness-toolsSkill
- housekeeperSkill
- implementSkill
- implement-specSkill
- improve-codebase-architectureSkill
- laravel-herd-worktreesSkill
- panelSkill
- prototypeSkill
- prSkill
- prune-testsSkill
- releaseSkill
- repository-cleanupSkill
- researchSkill
- resolve-review-commentsSkill
- resolving-merge-conflictsSkill
- retroSkill
- run-afterSkill
- scratch-cleanupSkill
- scratch-statusSkill
- setupSkill
- sweepSkill
- tddSkill
- teachSkill
- to-questionnaireSkill
- to-specSkill
- to-ticketsSkill
- triage-github-prSkill
- triageSkill
- ui-designSkill
- upgrade-planSkill
- verifySkill
- wait-whatSkill
- wayfinderSkill
- which-skillSkill
- wizardSkill
- writing-for-agentsSkill
The file
We split this skill into the rules it gives an agent
3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
1
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Run one scouting pass on a topic, then offer next steps.
- Very specific: line 28
Load what is already covered: If the profile has covered: globs, collect the title (and tags, if any) from each file's frontmatter, one …
- Distinctive: line 37
Never write to the profile after it exists, and never edit an earlier findings file.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Chatter Scout
Run one scouting pass on a topic, then offer next steps. Output is one findings file; nothing is drafted, sent, or published unless the user picks that next step. Safe to re-run: the seen-ledger keeps every run from resurfacing what an earlier one reported.
Cost is the design constraint. The lead (this skill) does no bulk searching or page reading; it writes briefs, runs the ledger script, ranks, and writes the file. Searching fans out to cheap sweepers; page reading goes only to candidates that survive the ledger.
Files (in the target repo)
- Profile
docs/chatter/<topic-slug>/profile.md: the lens, sources, and watchlist. Format and bootstrap rules: PROFILE-FORMAT.md. - Ledger
docs/chatter/<topic-slug>/seen.json: JSON array of normalized URLs already judged. Only scripts/filter-seen.sh reads or writes it; it never removes an entry. - Findings
.scratch/chatter/<topic-slug>/<YYYY-MM-DD>.md: this run's output. A second run on the same day appends-2,-3. - Legacy log
docs/intel/chatter-log.md: the layout before profiles. Step 1 imports it once; nothing writes to it.
Steps
- Resolve the topic.
$ARGUMENTSis a profile slug or free text. Slugify free text and match it againstdocs/chatter/*/profile.md. No argument: use the only profile; if there are zero or several, list them and stop. No profile for the topic: bootstrap one per PROFILE-FORMAT.md. Ifseen.jsondoes not exist anddocs/intel/chatter-log.mddoes, import the old log first: pipe every URL in it (grep -oE 'https?://[^ )>\]]+', as a JSON array) tofilter-seen.sh add, and note the count and the log's newest date for the recap. Earlier runs reported those items, so a missing ledger never means nothing was reported before. Done when one profile is loaded and today's date is known from the environment. - Load what is already covered. If the profile has
covered:globs, collect the title (and tags, if any) from each file's frontmatter, one line each. Do not read bodies. Done when you hold a covered-titles list (possibly empty). - Sweep. Dispatch one sweeper per profile source group (watchlist included), at most 5, in parallel (in Claude Code with this plugin installed,
subagent_type=leek-skills:chatter-sweeper; in plain Claude Code,general-purposewithmodel: haiku; in other harnesses, dispatch and wait per harness-tools on the cheapest model offered; otherwise run the groups inline one after another). Each brief carries: today's date,window_days, the Lens, Buckets, and Ignore sections verbatim, that one group's sources, queries, and notes, and the Sweeper section of BRIEFS.md. Nothing else. Done when every sweeper has returned its JSON array. - Drop what the ledger has seen. Concatenate the arrays and pipe them through
bash <skill-dir>/scripts/filter-seen.sh filter docs/chatter/<slug>/seen.json. Then drop, by title, anything a covered title already covers, or that an earlier findings file for this topic already reported under another URL (an index, mirror, or syndicated copy of the same item; read only those files'##headings and Source lines): a genuinely new development in a covered story (new ruling, new data, new state) stays. Move any item dated before the window (non-evergreen buckets) to an Older than window list: it skips verification, and the findings file names it so the user can pull it back in. If more than 15 survive, keep the 15 that best fit the Lens, taking day-dated items before undated ones: an undated item takes a slot only when no dated item fits. Done when at most 15 new candidates remain; if none remain, skip to step 6. - Verify. Split the survivors into batches of about 5 and dispatch one verifier per batch in parallel (in Claude Code,
subagent_type=leek-skills:chatter-verifier; in plain Claude Code,general-purposewithmodel: sonnet; in other harnesses, dispatch and wait per harness-tools on a mid-tier model; otherwise inline). Each brief carries: today's date,window_days, the Lens, Buckets, and Ignore sections, the batch, the profile's fetch notes, and the Verifier section of BRIEFS.md. A candidate the verifier marksunreachablestaysunreachable, including a page whose text it could not read. The lead does not fetch it or extract that text. Done when every candidate has a verdict. - Rank and write. Keep verdict
keepandcommunity. Rank by fit to the Lens first, then freshness (for non-evergreen buckets), then how many concrete facts the item carries. Take the topmax_items; the rest go under Also seen. Write the findings file in the format below. Done when the file exists. - Update the ledger. Pipe a JSON array of every URL with verdict
keep,community,off-topic,stale, orthin, plus every Older than window URL, tofilter-seen.sh add. Leaveunreachableout so a later run retries it. Done when the script reports itsaddedcount. - Recap in 3–6 lines: groups swept, candidates found, new after the ledger, kept; the single strongest item; the findings path; and, if the profile was bootstrapped, that it needs review.
- Offer next steps. End every run, a zero-keep run included, with 2–4 concrete options inside one question (a structured question (harness-tools): one single-select question, the options being the next steps; otherwise one numbered list in chat): for example draft a post or digest from item N, pull back an Older than window item, widen the window and re-run, or stop. Act only on the answer. Done when the user picked one.
Never write to the profile after it exists, and never edit an earlier findings file.
Findings format
# Chatter: <topic>, <YYYY-MM-DD>
Swept <n> groups · <n> candidates · <n> new · <n> kept. Purpose: <blog | digest | both>.
## 1. <title>
- **Bucket:** <bucket> · **Date:** <YYYY-MM-DD, or "undated"> · **New this week:** yes | no
- **Source:** <publication> <URL>
- **Summary:** 1–2 lines.
- **Facts:** the specific numbers, dates, names, and citations the item hangs on.
- **Why it matters:** 1–2 lines against the Lens.
- **Angle:** for blog, the search query or headline it could win; for digest, the one line a reader acts on.
- **Action:** watch | respond | build | share | write
- **Confidence:** verified | community (unverified sentiment, not fact)
## Also seen
- <title>, <URL>: one line.
## Older than window
- <title>, <URL>, <date>: one line. Not verified; ask to pull one back in.
## Rejected
<n> off-topic · <n> stale · <n> thin · <n> unreachable (retried next run)With no kept items, write the header line, No new relevant chatter., and the Older than window list if it has entries.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

