Content Freshness Signals
thedaviddias/Front-End-Checklist
Audits article pages for freshness signals, covering the Last-Modified header, Article JSON-LD dateModified and a visible last-updated date, and fixes mismatches.
Collect, filter, and freshness-qualify news items. An agent skill from notque/vexjoy-agent.
$ npx skills add notque/vexjoy-agent --skill news-collection -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install notque/vexjoy-agent news-collection --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/research/news-collection .claude/skills/news-collection && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "news-collection" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection into .claude/skills/news-collection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "news-collection", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collectionType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add notque/vexjoy-agent --skill news-collection -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install notque/vexjoy-agent news-collection --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/research/news-collection .agents/skills/news-collection && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "news-collection" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection into .agents/skills/news-collection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "news-collection", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add notque/vexjoy-agent --skill news-collection -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install notque/vexjoy-agent news-collection --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/research/news-collection .cursor/skills/news-collection && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "news-collection" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection into .cursor/skills/news-collection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "news-collection", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/notque/vexjoy-agent.git --path skills/research/news-collection--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add notque/vexjoy-agent --skill news-collection -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install notque/vexjoy-agent news-collection --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/research/news-collection .gemini/skills/news-collection && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "news-collection" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection into .gemini/skills/news-collection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "news-collection", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install notque/vexjoy-agent news-collectionInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add notque/vexjoy-agent --skill news-collection -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/research/news-collection .github/skills/news-collection && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "news-collection" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection into .github/skills/news-collection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "news-collection", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add notque/vexjoy-agent --skill news-collection -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install notque/vexjoy-agent news-collection --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/notque/vexjoy-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/research/news-collection .opencode/skills/news-collection && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "news-collection" agent skill from https://github.com/notque/vexjoy-agent/tree/main/skills/research/news-collection into .opencode/skills/news-collection/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "news-collection", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
news-collectionCollect, filter, and freshness-qualify news items. An agent skill from notque/vexjoy-agent.
News Collection is an agent skill from notque/vexjoy-agent. Collect, filter, and freshness-qualify news items.
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
The repository describes itself as: VexJoy AI Agent with Jev Intelligent Routing - /do routes plain-English requests to the right specialist agent and gates the work with reviews, tests, and a learning loop. The licence is MIT.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 5218674. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are json).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
News Collection loads about 2.4k tokens when it runs. Until then it costs about 17 tokens; SKILL.md has 1,101 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from notque/vexjoy-agent at commit 5218674, republished under its MIT licence (© notque). 1,101 words, ~2,413 tokens.
.claude/skills/news-collection/SKILL.md (or your agent's skills folder).Gather news items on a topic, filter junk cheaply, verify freshness, and emit qualified items under an evidence contract. Pipeline-shaped: four phases, a gate between each. Content pipelines consume the JSON artifact; pair with fact-check to verify what this skill qualifies.
Goal: gather candidate items from available sources (feeds, search results, provided fixtures). Every item carries the five-fact evidence contract: title, url, outlet, author, published_at.
Rule (verbatim from the design): publish times are extracted (article
metadata), never guessed; missing timestamp → recorded as unknown, confidence
lowered and disclosed. A guessed timestamp poisons every downstream freshness
verdict; an honest "published_at": null keeps the item usable with known
uncertainty.
Record each item as one JSON object per the item schema below. Fill
evidence_notes with where each fact came from (meta tag, byline, JSON-LD,
sitemap).
Distinguish outcomes: zero items because sources were unreachable is a collection failure (report it, stop); zero items from reachable sources is a valid empty feed (deliver an empty artifact with counts of zero).
Gate: every collected item has all five fields present — value or explicit
null with a confidence downgrade and a disclosure note. Items with silent
gaps stay in COLLECT until the gap is recorded.
Goal: cheap, high-recall pass over collected items. Three verdicts:
keep / monitor_only / reject, each with a reason code (see
Coarse Filter below).
Rule (verbatim from the design): high-magnitude stories are downgraded to monitor_only at most, never rejected — a false keep is cheap, a silent drop is expensive. A keep costs one extra freshness check; a wrongly dropped major story costs the whole pipeline its value.
This phase runs on a cheap model when dispatched -- it needs recall, not judgment depth. Give the dispatched model: topic, verdict/code tables, asymmetry rule, and items' five facts plus a text excerpt.
Gate: every item has exactly one verdict and one reason code. reject
verdicts on items that look high-magnitude get re-checked once before the
phase closes.
Goal: for each keep and monitor_only item, establish when the story
first became public and whether this page is the original coverage.
Rule (verbatim from the design): two independent sources or verdict "unclear". Conservative default: unclear over guessed. An "unclear" verdict is recoverable downstream; a confidently wrong "fresh" verdict ships stale news.
Gate: every surviving item carries freshness: fresh | stale | unclear, a
first_public_estimate (or null), and the count of sources backing the
verdict. Duplicate clusters are consolidated to one canonical item with
duplicates_of links.
Goal: emit qualified items as a structured JSON artifact (see Artifact
Schema below) plus a summary table. Every verdict state
appears in the artifact — monitor_only, unclear, and reject items ship
with their verdicts rather than vanishing, so consumers see the full triage.
Gate (deterministic phase checkpoint — emit this table before delivering the artifact; delivery without it is incomplete):
| Verdict | Count |
|---|---|
| keep | n |
| monitor_only | n |
| reject | n |
| unclear (freshness) | n |
| duplicates consolidated | n |
The counts make silent drops visible: collected total must equal keep + monitor_only + reject. If it does not, return to the phase that lost items.
No items collected
No timestamp found anywhere for an item
published_at: null, confidence: low, disclose in
evidence_notes; freshness verdict for that item is unclear.Two sources disagree on first-public time
references/freshness-forensics.md); if still split, verdict unclear.Item count mismatch at DELIVER
Every collected item carries five facts:
| Fact | Type | Missing value handling |
|---|---|---|
title | string | Empty string only if page truly has none; note in evidence_notes |
url | string | Required -- no URL means unverifiable; exclude from artifact |
outlet | string | Derive from domain when no masthead found; note derivation |
author | string or null | null when no byline; note where you looked |
published_at | ISO 8601 or null | Extracted from metadata, never guessed. null when absent; lower confidence, disclose |
Confidence: high (all five extracted), medium (one derived or weak), low (published_at null or 2+ derived).
{
"id": "string", "title": "string", "url": "string",
"outlet": "string", "author": "string|null",
"published_at": "ISO 8601|null", "confidence": "high|medium|low",
"evidence_notes": "string", "verdict": "keep|monitor_only|reject",
"reason_code": "string", "freshness": "fresh|stale|unclear|null",
"first_public_estimate": "ISO 8601|null",
"freshness_sources": "integer", "duplicates_of": "string id|null"
}{
"schema_version": "1.0", "topic": "string",
"collected_at": "ISO 8601",
"counts": {"collected":0,"keep":0,"monitor_only":0,"reject":0,"unclear_freshness":0,"duplicates_consolidated":0},
"items": []
}Conservation rule: collected == keep + monitor_only + reject.
| Verdict | Meaning | Goes to freshness check |
|---|---|---|
keep | On-topic, substantive, plausibly fresh | Yes |
monitor_only | Worth watching: off-topic but high-magnitude, thin, or uncertain | Yes |
reject | Junk: spam, ads, dead pages, clearly irrelevant | No |
Asymmetry rule: high-magnitude stories downgrade to monitor_only at most, never reject. A false keep is cheap; a silent drop is expensive.
| Code | Pairs with | Meaning |
|---|---|---|
RC-ONTOPIC | keep | Directly on topic |
RC-DEV | keep | New development of known story |
RC-OFFTOPIC-BIG | monitor_only | Off-topic but high-magnitude |
RC-THIN | monitor_only | On-topic but little substance |
RC-UNCERTAIN | monitor_only | Relevance unclear |
RC-SPAM | reject | Promotional, SEO bait |
RC-IRRELEVANT | reject | Outside topic, low magnitude |
RC-NOCONTENT | reject | Dead link, paywall stub, empty page |
A syndicated repost or refreshed CMS page can carry today's date on old news. Establish first-public time from (in trust order):
article:published_time, JSON-LD datePublished) on the originating outlet's page.published_at across collected items covering the same story.Two independent sources or verdict unclear. Independent means separately reported -- two copies of the same wire story count as one.
| Verdict | Condition |
|---|---|
fresh | Two sources put first-public time inside the freshness window |
stale | Two sources put it outside, or page repackages older coverage |
unclear | <2 sources, conflicting evidence, or no usable timestamp |
Signals of a repost: wire credit in byline, rel=canonical pointing elsewhere, body near-identical to an earlier item, aggregator framing ("read more at"), outlet with no original bylines across beats. A repost inherits the original's first-public time.
When several items cover one story, deliver one canonical item, link the rest via duplicates_of. Pick canonical by: originating outlet > earliest published_at > most complete five-fact record.
| Question | Same story (consolidate) | New development (keep separate) |
|---|---|---|
| New named facts? | No | Yes |
| New primary source? | No | Yes |
| Event advanced? | No | Yes |
| Only framing/outlet changed? | Yes | -- |
Two+ "new development" answers = separate item.
© notque, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/research/news-collection of notque/vexjoy-agent.
Open the folder on GitHubat commit 5218674
News Collection next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| News Collection this skillnotque/vexjoy-agent | 441 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Content Freshness Signalsthedaviddias/Front-End-Checklist | 74k | — | ~741 | Automated safety check: Pass | MIT | |
| Filterzalando/skipper | 3.3k | — | ~527 | Automated safety check: Pass | MIT | |
| Competitor News MonitorNousResearch/hermes-agent | 252k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Newsalsk1992/CloddsBot | 3k | — | ~462 | Automated safety check: Pass | MIT | |
| Agent Collective Intelligence Coordinatorruvnet/ruflo | 74k | 2 repos | ~1k | Automated safety check: Pass | MIT |
thedaviddias/Front-End-Checklist
Audits article pages for freshness signals, covering the Last-Modified header, Article JSON-LD dateModified and a visible last-updated date, and fixes mismatches.
zalando/skipper
Create or modify code in the filters package and all its sub-folders
NousResearch/hermes-agent
Watch named companies for material news; cited digests. An agent skill from NousResearch/hermes-agent.
alsk1992/CloddsBot
Monitor news and correlate with prediction market movements. An agent skill from alsk1992/CloddsBot.
ruvnet/ruflo
Agent skill for collective-intelligence-coordinator - invoke with $agent-collective-intelligence-coordinator
outline/outline
Summarize what changed in an Outline collection since a date; use when the user asks what is new, what was updated, or wants a digest of recent documents.
notque/vexjoy-agent
Deterministic palette/matrix pixel art (not AI). An agent skill from notque/vexjoy-agent.
notque/vexjoy-agent
Pull request lifecycle: commit, codex review, sync, review, fix, status, cleanup, and PR mining.
notque/vexjoy-agent
Improve architecture across modules by deepening interfaces.
notque/vexjoy-agent
Code quality: cleanup, linting, formatting, quality gates. An agent skill from notque/vexjoy-agent.
notque/vexjoy-agent
Statistical rule discovery from Go codebase patterns. An agent skill from notque/vexjoy-agent.
notque/vexjoy-agent
Review and fix temporal references in code comments. An agent skill from notque/vexjoy-agent.
Collect, filter, and freshness-qualify news items. An agent skill from notque/vexjoy-agent. News Collection is an agent skill from notque/vexjoy-agent. Collect, filter, and freshness-qualify news items.
Run `npx skills add notque/vexjoy-agent --skill news-collection -a claude-code`. Or copy the skill folder (skills/research/news-collection in notque/vexjoy-agent) into .claude/skills/news-collection in your project. Claude Code loads it when a task matches its description.
Run `npx skills add notque/vexjoy-agent --skill news-collection -a codex`. Or copy the skill folder (skills/research/news-collection in notque/vexjoy-agent) into .agents/skills/news-collection in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add notque/vexjoy-agent --skill news-collection -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/news-collection, .gemini/skills/news-collection, .github/skills/news-collection and .opencode/skills/news-collection in your project.
SKILL.md names no scripts, command-line tools or credentials: News Collection is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
News Collection is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with News Collection: Content Freshness Signals (thedaviddias/Front-End-Checklist, 74k stars), Filter (zalando/skipper, 3.3k stars), Competitor News Monitor (NousResearch/hermes-agent, 252k stars) and News (alsk1992/CloddsBot, 3k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
notque (a GitHub user) maintains it in notque/vexjoy-agent, which has 441 GitHub stars. The repository holds 61 skills in this directory. The repository was last updated on October 9, 2026.
Source: notque/vexjoy-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.