Read the nulltap.sh cybersecurity feed from a terminal.
Project description
nulltap
Nulltap in your terminal. This client reads the public nulltap.sh JSON feed and prints cybersecurity and AI coverage without requiring an account.
Install
Python 3.10 or newer is required. After the first PyPI release, install it with pipx:
pipx install nulltap
Until then, install the current version from GitHub with pipx install git+https://github.com/JustinHowe/nulltap.git.
Run nulltap --help after installation.
Commands
nulltap # paginated recent articles; type a number to read
nulltap browse # explicit form of the default command
nulltap latest -n 20 # browse the newest 20 articles
nulltap latest --topic identity
nulltap topics # choose a topic, then choose an article
nulltap topic ai # paginated articles tagged AI
nulltap topic # choose a topic interactively
nulltap search # enter search words interactively
nulltap search "token theft"
nulltap search gateway --topic appsec
nulltap read 1 # directly read the newest article
nulltap read # browse first when no number is supplied
nulltap --plain # print once; no prompts or pager
Interactive lists show five articles per page so a page fits a normal terminal window. Enter the displayed number to read an article, n for the next page, p for the previous page, or q to leave. Use --page-size N to change the page size.
Articles open in the terminal pager. Headings, lists, quotations, code blocks, images, inline links, and primary sources are formatted for terminal reading. Press q to leave the pager and return to the article list. No browser is required.
When output is redirected, nulltap automatically disables menus and the pager. --plain does the same thing explicitly. Article IDs, slugs, and URLs remain accepted as direct targets for scripts, but ordinary readers should not need them.
Search
Search belongs in the CLI because it is useful when the browser is not. It runs locally over article titles, summaries, and topic tags. Search terms are never sent to nulltap or another service.
Every word in the query must match. Title matches rank above tag and summary matches, with publication date breaking ties.
Scripts
Add --json to browse, latest, topics, topic, search, read, or show:
nulltap search ransomware --json
nulltap topics --json
Use a different compatible feed during development:
nulltap --feed http://127.0.0.1:4321/feed.json
# or
NULLTAP_FEED_URL=http://127.0.0.1:4321/feed.json nulltap
Listing and search commands make one read-only feed request. Reading an article makes a second request for that article's text. The client has no analytics, login, local database, or background process. Feed and article text are stripped of terminal control sequences before display.
Development
python -m venv .venv
# Windows: .venv\Scripts\activate
# macOS/Linux: source .venv/bin/activate
python -m pip install -e .
python -m unittest discover -s tests -v
Licensed under the MIT License.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file nulltap-0.1.0.tar.gz.
File metadata
- Download URL: nulltap-0.1.0.tar.gz
- Upload date:
- Size: 15.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dfac82f111a2039b3ddd44499b328df0c016dc5283d747f979f938485c8d2f45
|
|
| MD5 |
77369bc0a722254a2414fea01e9c0c52
|
|
| BLAKE2b-256 |
122a741aa7db49c27738703519549104334809369145b65c393c8d51ce41781a
|
Provenance
The following attestation bundles were made for nulltap-0.1.0.tar.gz:
Publisher:
publish-to-pypi.yml on JustinHowe/nulltap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nulltap-0.1.0.tar.gz -
Subject digest:
dfac82f111a2039b3ddd44499b328df0c016dc5283d747f979f938485c8d2f45 - Sigstore transparency entry: 2256201892
- Sigstore integration time:
-
Permalink:
JustinHowe/nulltap@327409570d4e9b9332cdd7639e90aa38f560a558 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/JustinHowe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@327409570d4e9b9332cdd7639e90aa38f560a558 -
Trigger Event:
release
-
Statement type:
File details
Details for the file nulltap-0.1.0-py3-none-any.whl.
File metadata
- Download URL: nulltap-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
21334e0024a05fa6c7eb369308b21f3eeb2829338a9a7fe8dc78ec6f3c1f8983
|
|
| MD5 |
c0670dc2ddea482456e982603f255af5
|
|
| BLAKE2b-256 |
4486b5520824405776676c6855522579caf3d6954c1cd80b63843f8d31702a1e
|
Provenance
The following attestation bundles were made for nulltap-0.1.0-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on JustinHowe/nulltap
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
nulltap-0.1.0-py3-none-any.whl -
Subject digest:
21334e0024a05fa6c7eb369308b21f3eeb2829338a9a7fe8dc78ec6f3c1f8983 - Sigstore transparency entry: 2256201894
- Sigstore integration time:
-
Permalink:
JustinHowe/nulltap@327409570d4e9b9332cdd7639e90aa38f560a558 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/JustinHowe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@327409570d4e9b9332cdd7639e90aa38f560a558 -
Trigger Event:
release
-
Statement type: