Skip to main content

Pull, don't scroll. RSS aggregator with LLM-powered summarization.

Project description

NoScroll - Pull, don't scroll

Python License CLI Sources

Language: English | 中文

What is NoScroll

NoScroll is a Python CLI that pulls information from RSS feeds, web pages, and Hacker News, then uses an LLM to summarize and rank the most useful items.

It is designed for a pull-based reading workflow: define sources once, run on schedule, read only the high-signal digest.

Installation

pipx install noscroll

If you need web source crawling support, install with crawler extras:

pipx install "noscroll[crawler]"

Minimal Sandbox Permissions

NoScroll needs outbound network access to fetch RSS feeds and Hacker News data.

Codex (~/.codex/config.toml or project .codex/config.toml)

# workspace-write has no network by default.
# Enable network access for NoScroll fetching.
sandbox_mode = "workspace-write" # read-only | workspace-write | danger-full-access

[sandbox_workspace_write]
network_access = true

Claude Code (project .claude/settings.json or ~/.claude/settings.json)

{
	"permissions": {
		"allow": ["Bash(noscroll *)"]
	},
	"sandbox": {
		"enabled": true,
		"network": {
			"allowedDomains": [
				"hn.algolia.com",
				"<YOUR_RSS_DOMAIN_1>",
				"<YOUR_RSS_DOMAIN_2>"
			]
		}
	}
}

OpenClaw (~/.openclaw/openclaw.json)

{
	"tools": {
		"allow": ["exec", "read"]
	}
}

Skills Installation

Install the built-in noscroll skill to your target host:

# Claude Code (project scope)
noscroll skills install noscroll --host claude --scope project

# Codex (project scope)
noscroll skills install noscroll --host codex --scope project

# Claude Code (user scope)
noscroll skills install noscroll --host claude --scope user

# Codex (user scope)
noscroll skills install noscroll --host codex --scope user

# OpenClaw (workspace scope)
noscroll skills install noscroll --host openclaw --scope workspace --workdir /path/to/workspace

# OpenClaw (shared scope)
noscroll skills install noscroll --host openclaw --scope shared

Ask Command

Use natural language directly:

noscroll --env-file .env ask "Collect content from the past five days, one file per day"

This will generate daily digest files in outputs/.

Example generated text:

## AI (3)
1) Off Grid: Running text/image/vision models offline on mobile | Value: 4/5 | Type: Practice
- Conclusion: This open-source project demonstrates on-device multimodal inference on smartphones, with strong privacy and offline usability.
- Why it matters: On-device AI can reduce privacy risk and cloud inference cost, and is a good fit for offline-first products.
- Evidence links: https://github.com/alichherawalla/off-grid-mobile

## Other News (2)
4) uBlock rule: hide YouTube Shorts with one click | Value: 4/5 | Domain: Tech

## Life & Health (2)
6) AI avatars for rural healthcare support | Value: 3/5 | Domain: Health

Configuration

You can provide a config file in these places:

  1. CLI argument: --config /path/to/config.toml
  2. Environment variable: NOSCROLL_CONFIG=/path/to/config.toml
  3. Default path: ~/.noscroll/config.toml

Example config.toml:

[llm]
api_url = "https://api.openai.com/v1"
api_key = "your-api-key"
model = "gpt-4o-mini"

[paths]
subscriptions = "subscriptions/subscriptions.toml"
output_dir = "outputs"

[runtime]
debug = false
# subscriptions_mode = "auto"  # auto|merge|external-only|builtin-only

For ad-hoc runs you can also override this from the CLI:

noscroll run --subscriptions /path/to/subscriptions.toml --subscriptions-mode merge

Experimental local CLI debate ranking

The default summarizer is unchanged. To use a local two-agent debate for the final ranking/summarization step, opt in explicitly:

noscroll run --ranker debate

This mode calls local non-interactive CLIs directly. It does not require or invoke the global cli-debate skill.

Requirements:

  • claude and codex must be installed and authenticated locally.
  • --format json bypasses debate and returns raw fetched items.
  • Debate transcripts are not written by default. Use --debug, --debate-archive, or --debate-archive-dir to keep prompts, candidates, and model outputs under ~/.noscroll/cache/debate/.
  • Debate subprocesses run from your home directory with a reduced environment by default. Set NOSCROLL_DEBATE_INHERIT_ENV=1 only if your local CLI auth requires the full parent environment.

Useful overrides:

noscroll run --ranker debate --debate-fallback default
noscroll run --ranker debate --debate-timeout 240
noscroll run --ranker debate --debate-archive
noscroll run --ranker debate \
  --debate-claude-cmd "claude -p --permission-mode plan --no-session-persistence" \
  --debate-codex-cmd "codex exec --sandbox read-only --skip-git-repo-check -"

Create a starter config:

noscroll init

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

noscroll-0.1.12.tar.gz (99.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

noscroll-0.1.12-py3-none-any.whl (80.2 kB view details)

Uploaded Python 3

File details

Details for the file noscroll-0.1.12.tar.gz.

File metadata

  • Download URL: noscroll-0.1.12.tar.gz
  • Upload date:
  • Size: 99.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for noscroll-0.1.12.tar.gz
Algorithm Hash digest
SHA256 4bcdf8107aff6c5503217597705ffba3f98c6f4f71a2be664b0c357d9d164295
MD5 f1fbb3153227504fb6dd3b6739d57e09
BLAKE2b-256 8479e2e5c3fdcaf865ae238ed18891b5a238f4f37c214b1cf2072d468369de3f

See more details on using hashes here.

File details

Details for the file noscroll-0.1.12-py3-none-any.whl.

File metadata

  • Download URL: noscroll-0.1.12-py3-none-any.whl
  • Upload date:
  • Size: 80.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.4

File hashes

Hashes for noscroll-0.1.12-py3-none-any.whl
Algorithm Hash digest
SHA256 de4059996990cc83ad29f28d199d56fd560eb14a078c06f09fbaab0f03ba6834
MD5 350ae6469de4960437ee41c5cfc84265
BLAKE2b-256 e2394640527d28ced47471e79461e08bde716431da69ff72dba5594d52e46287

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page