news-digest
Create an automation that reads a list of public RSS and Atom feeds on a schedule - daily by default - keeps what is new and matches the configured topics…
Skill by OpenHands
Chalk Labs
Need help deploying news-digest?
Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/openhands-news-digest
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, security, writing, agent-building
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Python package
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/news-digest
What's inside
- Skill name
news-digest- Description
- Create an automation that reads a list of public RSS and Atom feeds on a schedule - daily by default - keeps what is new and matches the configured topics, and has an agent write a short digest of it. It needs no credentials: the feeds are public URLs and, on a local Agent Canvas, the conversation is started with no secrets and no MCP servers.
- License
- MIT
- Instructions
- 284 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
- Instructions call the network
Files (8)
- .claude-plugin
- .codex-plugin
- plugin.json · .plugin/
- README.md
- SKILL.md
- news-digest-setup.md · commands/
- state-schema.md · references/
- main.py · scripts/
SKILL.md (first lines)
# Daily News Digest Automation
Create a cron automation that turns a list of feeds into something worth
reading: a few hundred words a day on what happened in the topics you care
about, with a link under each item.
**It connects to nothing.** There is no token to issue, no account to link, no
OAuth screen. That makes it the automation to run first - it exercises the
schedule, the conversation, the model and the run log end to end while nothing
of yours is at stake, and it is useful in its own right afterwards.
The script is deterministic: the schedule, the once-a-day claim, fetching,
parsing, the freshness window, and remembering what has already been covered
are all Python. The LLM is invoked only for the part that
is judgement - reading the shortlist and writing something that is not just the
headlines pasted back. **When nothing new matches, no conversation is started
at all**, so a quiet day costs no tokens.
---
## Prerequisites
None. That is the point.
The runtime needs outbound HTTPS to the feed hosts, which it already has if it
can reach the model. Nothing is read from **Settings -> Secrets**, and nothing
needs to be added there.
---
## Setup Workflow
Follow these steps in order.
### Step 1 - Collect the feeds
Ask: *"Which feeds should the digest read? (One RSS or Atom URL per line. Press
Enter for a general technology set.)"*
Default:
```
https://news.ycombinator.com/rss
https://feeds.arstechnica.com/arstechnica/index
https://www.theverge.com/rss/index.xml
```
Check each one before accepting it, because a URL that returns a web page
rather than a feed is the most common setup mistake:
```bash
curl -sSL --max-time 20 -A "OpenHands-News-Digest/1.0" "{feed_url}" \
| python3 -c "
import sys
from xml.etree import ElementTree
try:
root = ElementTree.fromstring(sys.stdin.buffer.read())
except ElementTree.ParseError as exc:
print('ERROR: not valid XML:', exc); raise SystemExit
name = root.tag.rsplit('}', 1)[-1]
items = [e for e in root.iter() if e.tag.rsplit('}', 1)[-1] in ('item', 'entry')]
print(f'OK: <{name}> with {len(items)} entries' if name.lower() in ('rss', 'feed', 'rdf')
else f'ERROR: root element is <{name}>, which is not a feed')
"
```
Record every accepted URL into `FEEDS = ["...", ...]`. A feed that fails at
runtime is reported and skipped, so one bad URL does not cost you the digest -
but it is better to find out now.
### Step 2 - Collect the topics
Ask: *"What should the digest be about? (One topic per line, or comma
separated. Press Enter for `artificial intelligence, open source, developer
tools`. Leave it blank to summarise everything the feeds carry.)"*
Record as `TOPICS`. Two things are worth telling the user:
- The agent decides which stories are about them, reading each headline and
excerpt. So write topics the way you would explain your interests to a
colleague - `artificial intelligence` works even though almost every headline
says `AI`, and a story about a company releasing its model weights counts as
`open source` without using the phrase.
- An empty list means "cover whatever is most significant". That is right for a
handful of narrow feeds and vaguer for a firehose.
### Step 3 - Collect the schedule
Ask: *"When should the digest be written? (Press Enter for the default: every
day at 08:00 UTC, `0 8 * * *`.)"*
Default: `0 8 * * *`. Record as `CRON_SCHEDULE`, and the timezone as
`CRON_TIMEZONE` (default `UTC`).
A schedule more frequent than daily is allowed and is not wasteful: work is
keyed by UTC date, so extra runs stop at a state read once the day is done, and
before that they cost one HTTP request per feed and no tokens. It is a
reasonable way to say "write the digest as soon as there is anything to write".
### Step 4 - Confirm the secret scope
Do **not** ask which secrets to forward. `AGENT_SECRET_NAMES` is empty and
should stay empty: the conversation summarises text fetched from the open web,
which is written by strangers, and a credential handed to it would make every
feed on the list an instruction channel into the deployment's secret store.
If the user asks for a digest posted to Slack, Notion or a repository, that is a
different automation - it needs that integration connected, and it should be
built from the skill for it rather than by widening this one.
### Step 5 - Generate the automation script
Read `scripts/main.py` from this skill's directory. Apply exactly two constant
substitutions near the top of the file:
> The script also reads a `config.json` shipped beside it, if there is one, over
> these constants. That is how the catalog entry
> (`automations/catalog/news-digest/`) configures an unmodified copy, since a
> declarative host cannot rewrite Python. This setup path substitutes theFrom OpenHands/extensions, MIT.
More from OpenHands/extensions
- 0.721score
deno
OpenHands
If the project uses deno, use this skill.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
discord
OpenHands
Build and automate Discord integrations (bots, webhooks, slash commands, and REST API workflows).
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
code-simplifier
OpenHands
Simplifies and refines code for clarity, consistency, and maintainability while preserving all functionality.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
datadog
OpenHands
Query and analyze Datadog logs, metrics, APM traces, and monitors using the Datadog API.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
add-skill
OpenHands
Import an existing skill from a GitHub repository URL into the current workspace.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
add-javadoc
OpenHands
Add comprehensive JavaDoc documentation to Java classes and methods.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
runtime-api-configs
OpenHands
Manage warm sandbox pools on OpenHands Enterprise by driving the runtime-api admin endpoints (list, save, delete warm runtime configurations) from a Python CLI.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
agent-creator
OpenHands
Create file-based sub-agents as Markdown files following the OpenHands SDK format.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
openhands
OpenHands
Unified OpenHands plugin — bundles the OpenHands Cloud CLI, Cloud REST API (openhands-api), Automations (openhands-automation), and Software Agent SDK…
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
agent-readiness-report
OpenHands
Evaluate how well a codebase supports autonomous AI-assisted development.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
release-notes
OpenHands
Generate consistent, well-structured release notes from git history.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
github
OpenHands
Interact with GitHub repositories, pull requests, issues, and workflows using the GITHUB_TOKEN environment variable and GitHub CLI.
SkillAFreshness: A★ 173Claude Code +9
Signals
- Stars
- 173
- Forks
- 118
- Open issues
- 84
- Last commit (this folder)
- Oct 2, 2026 (29 days ago)
- Last release
- Oct 23, 2026 (8 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/OpenHands/extensions
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from OpenHands
- 0.721score
release-notes
OpenHands
Generate consistent, well-structured release notes from git history.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
add-javadoc
OpenHands
Add comprehensive JavaDoc documentation to Java classes and methods.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
agent-readiness-report
OpenHands
Evaluate how well a codebase supports autonomous AI-assisted development.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
openhands
OpenHands
Unified OpenHands plugin — bundles the OpenHands Cloud CLI, Cloud REST API (openhands-api), Automations (openhands-automation), and Software Agent SDK…
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
runtime-api-configs
OpenHands
Manage warm sandbox pools on OpenHands Enterprise by driving the runtime-api admin endpoints (list, save, delete warm runtime configurations) from a Python CLI.
SkillAFreshness: A★ 173Claude Code +9 - 0.721score
add-skill
OpenHands
Import an existing skill from a GitHub repository URL into the current workspace.
SkillAFreshness: A★ 173Claude Code +9
Done for you
Rather not set it up yourself?
Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.
See how we build AI agents →Read the case studies
Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.
- launches shipped
- 50+
- launches shipped
- media placements
- 500+
- media placements
- founders on every account
- 2
- founders on every account
Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block
Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.
Get news-digest running in your business
Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.
Cite this page
news-digest skill. Agent Mart. https://agentmart.dev/skills/openhands-news-digest (last updated 2026-10-24)