Skip to main content

Net-Sift

CI PyPI License: AGPL v3 Python 3.10+ Linting: Ruff

Net-Sift sweeps many sources for everything being said about a topic, ranks it, removes duplicates, and reports what it could not reach. The gap report is part of the answer, not an afterthought. Login-walled platforms are reached by copying your own Chromium profile and driving it headless, so searches run with the browser closed and no browser process is left running.

Table of contents

Why Net-Sift

Most research tools return a handful of links or a synthesized answer. Net-Sift returns a corpus with an explicit account of coverage: what was retrieved, what hit a ceiling, and what was out of reach. It is built for topic surveys, sentiment sweeps, competitor and discourse monitoring, and literature-style scans where a single search would under-serve the answer.

Features

  • Many sources in one sweep, keyless by default (Bluesky, Hacker News, GitHub, arXiv, Polymarket, StockTwits, Mastodon, and more).
  • Walled platforms (Twitter/X, Reddit, Instagram, Facebook, Bilibili, Xiaohongshu, Zhihu) and general web search, run headless from a copy of your logged-in Chromium profile via OpenCLI, with the browser closed.
  • Relevance ranking with head-entity grounding, CJK-aware tokenization, a recency boost, and engagement weighting.
  • A gap-closing driver that bisects the time window to recover tails a source would otherwise hide.
  • Per-source near-duplicate collapse, so repeats do not inflate the corpus while cross-platform coverage is preserved.
  • Context-lean by design: the agent receives summaries, coverage, gaps, and the top results, never the raw corpus.
  • Saved sessions you can continue later, deleted only on your confirmation.
  • Opt-in extras: dark-web discussion search (Tor, read-only and information-only) and per-account Instagram recon (HikerAPI).
  • A guided installer that copies your browser profile, logs you into any missing accounts one at a time, and adds a [NET-SIFT] status line.

How it works

query
  |
  v
sources (keyless)       access (walled + web, OpenCLI over a managed headless browser)
  \_________________  _________________/
                    \/
         gap-closing driver (bisect on ceiling)
                    |
            dedup + ranking
                    |
         session on disk  --->  summary + coverage + gaps  --->  agent

Keyless sources call public endpoints directly. Walled and web sources run through opencli <site> <command> pointed at a headless Chromium that net-sift launches from a copy of your logged-in profile, then kills when the sweep ends. Results are normalized to one record shape, deduplicated, ranked, and written to a session. Only the summary returns to the caller.

Install

uv tool install net-sift        # or: pipx install net-sift

Then run the setup wizard:

net-sift install                # guided; add --yes for unattended

net-sift install is a wizard. It:

  • registers the MCP server and a status bar with the clients it finds (Claude Code, Codex), adding a [NET-SIFT] line below any status bar you already have rather than replacing it;
  • installs OpenCLI through npm with your consent;
  • detects your Chromium browsers, shows which sites each is already logged into, and, with your consent, copies the one you pick into net-sift's managed area so searches can run with the browser closed;
  • offers to log into any walled site you are not already signed into, one at a time, in a window net-sift opens;
  • offers the optional extras: Tor (for dark-web discussion search) and a HikerAPI key (for Instagram account recon).

Every step asks before it changes anything. Add an account later with net-sift login <site>. Restart your client afterward so it picks up the server.

macOS only for now; Windows and Linux are planned.

Quickstart

net-sift doctor               # what can be reached right now
net-sift search "topic" --platforms github,arxiv --max 50

In an MCP client, call deep_search:

deep_search(query="post-quantum cryptography adoption", since="2026-01-01")

You get a summary with per-source counts, a coverage map, the gap list, the top ranked items, and the corpus path.

Walled platforms

Twitter/X, Reddit, Instagram, Facebook, Bilibili, Xiaohongshu, and Zhihu need OpenCLI and a managed browser profile. net-sift install handles this; see net_sift/guides/setup-opencli.md for the manual version:

  1. Install Node 20.18.1+ and @jackwener/opencli.
  2. Use a Chromium browser (Chrome, Comet, Brave, Edge, Arc). Safari and Firefox do not work.
  3. net-sift install copies that browser's logged-in profile into net-sift's managed area; net-sift login <site> logs you into anything you have not signed into yet.
  4. Run net-sift doctor to confirm.

Searches then run headless from the copied profile, with the browser closed; net-sift kills the browser when the sweep ends. macOS only for now. Some platforms (for example Facebook) block automated navigation even when you are logged in; net-sift reports that honestly and moves on rather than looping.

Optional features

  • Dark-web discussion search (darkweb_search): read-only, information-only search across Tor onion forums, with a non-optional filter that drops markets, credentials, drugs, weapons, and abuse. Needs tor; net-sift starts and stops its own ephemeral Tor. net-sift install offers to set it up.
  • Instagram account recon (instagram_recon): profile, timeline, posting locations, top engagers, followers, and shared-follower intersection via HikerAPI. Metered and opt-in; the wizard stores your key at ~/.net-sift/secrets.json (0600), or set HIKERAPI_KEY in the environment.
  • Firecrawl search (firecrawl): a hosted search that reaches sites blocked locally (Google, Cloudflare-walled pages). Opt-in and keyed; queries and URLs go to Firecrawl's servers, so it is off by default. The wizard stores your key at ~/.net-sift/secrets.json (0600), or set FIRECRAWL_API_KEY.

Sources

Full table in net_sift/guides/sources.md. Keyless sources are on by default; walled and web sources become available once a managed browser profile exists.

MCP tools

Tool Purpose
deep_search run a sweep, return a summary and the corpus path
resume continue an earlier search
list_sessions list saved searches
cleanup delete a saved search (after user confirmation)
doctor what is reachable, the managed browser, and which accounts are signed in
status compact connectivity snapshot
darkweb_search read-only, information-only Tor onion-forum discussion search (opt-in, needs Tor)
instagram_recon per-account Instagram analysis via HikerAPI (opt-in, metered, needs a key)

Configuration

Variable Effect
GITHUB_TOKEN higher GitHub Search API rate limit
BRAVE_API_KEY enables the keyed brave_api source (keyless brave runs through the browser)
MARGINALIA_API_KEY personal Marginalia key; adds marginalia to the default sweep
CONTEXT7_API_KEY enables Context7 code and library documentation search
FIRECRAWL_API_KEY enables the Firecrawl search source (reaches sites blocked locally)
HIKERAPI_KEY enables Instagram account recon
NET_SIFT_HOME session storage location (default ~/.net-sift)
NET_SIFT_OPENCLI_BIN path to the opencli binary if not on PATH

| NET_SIFT_BROWSER | id of the browser to manage (overrides the wizard's choice) |

Keys are read from the environment first. net-sift persists an optional HikerAPI key (~/.net-sift/secrets.json, 0600) and, with your consent during net-sift install, a copy of your chosen browser's profile under ~/.net-sift/profiles/ (0700). That copy holds session cookies so walled and web sources can run with the browser closed; it stays on your machine and is never uploaded.

Sessions and privacy

Each search is written to ~/.net-sift/sessions/<id>/ as corpus.jsonl and meta.json. Nothing is sent anywhere. After a search, Net-Sift reminds you the corpus is kept so you can resume it, and deletes it only when you call cleanup. Walled and web sources use a copy of your browser profile that stays on your machine under ~/.net-sift/profiles/ (0700); it is never uploaded.

Development

git clone https://github.com/ali-rajabpour/Net-Sift.git
cd Net-Sift
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
ruff check net_sift tests && pytest

See docs/architecture.md for the design.

Contributing

See CONTRIBUTING.md. Net-Sift is read-only research: it does not post, comment, or bypass authentication, and contributions stay within that scope.

Security

See SECURITY.md. Report vulnerabilities privately through GitHub.

License

GNU AGPL-3.0-or-later. See LICENSE. If you run a modified version as a network service, the AGPL requires you to offer users its source. This project includes code adapted from Agent Reach (MIT, a permissive license compatible with AGPL); that attribution is kept in NOTICE.

Acknowledgements

  • OpenCLI for logged-in browser access.
  • Agent Reach for the onboarding and doctor patterns.

Metadata

Release files for net-sift 1.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for net-sift 1.2.1
File Size Uploaded
net_sift-1.2.1.tar.gz 711.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for net-sift 1.2.1
File Interpreter ABI Platform
net_sift-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 787.3 kB

Release files / net_sift-1.2.1.tar.gz

Download URL net_sift-1.2.1.tar.gz
Size 711.0 kB
Tags Source
SHA-256 checksum
How to use checksums
1f7bf3227004c18d3a5835ddda771f284993a1d318b0b2cbbbfd5150ecbdafa2
BLAKE2b-256 checksum
How to use checksums
d50eeb23040e629ebbf74688b3019c6f4f1204822fe6a1b16a98a319941c0f0d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release files / net_sift-1.2.1-py3-none-any.whl

Download URL net_sift-1.2.1-py3-none-any.whl
Size 76.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4a43b1e654ca750c743ee0a579e70a9d349c92f22ef2e3e39a57043d4fb852f5
BLAKE2b-256 checksum
How to use checksums
103032f361e722627851ae7a52fafae95b2fd756a46bb0cab174f50711cfa04d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 4, 2026.

Transparency log

Release history Release notifications | RSS feed

1.2.2

2 release files

This release

1.2.1 This release

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

0.6.2

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page