Internet material -> structured, routed notes. A local intake router.
Project description
Verivann
A local-first intake router. Everything you save, judged — and a record of which of your sources have lied to you.
Capturing, archiving and summarizing are solved. Judging is not. Verivann reads what you throw at it — articles, videos, screenshots, voice memos, PDFs, feeds — and does the part no other tool does: it decides what the material deserves to become, routes it, connects it to what you already have, notices when it contradicts you, and keeps a permanent record of who told you.
It is not a bookmark manager, not a read-it-later app, not a YouTube summarizer, and not a cloud service. It runs on your machine. Nothing leaves it unless you say so.
Link in. → Meaning out.
The name is veri- (verify, veritas) + -vann (vannus, the fan that winnows grain from chaff): the two things it does — judge what is true, and sift signal from noise.
Install
Verivann is a local program. It needs Python 3.10+.
pipx install verivann # recommended — an isolated, always-available install
# or: pip install verivann
Then, once:
verivann setup # pick a free model, write your config, launch the inbox
setup walks you through connecting a model (there are free options — Cloudflare,
Groq, Gemini, or a fully-local Ollama). Everything works without one too, on an
offline keyword heuristic — a model just makes it much better.
The daily command is vv (verivann also works):
vv # the cockpit: what is due, what is rotting, what you owe a verdict
vv serve # the inbox in your browser — paste, search, ask
vv ingest-url "https://…" # digest something from the terminal
vv doctor # what is wired up, what is optional
The first sixty seconds
vv serveopens a small dark page atlocalhost:8130.- Paste a link or any text → you get a note: a summary, the ideas worth keeping, the claims to check, where it should be routed — and a Keep / Drop button.
- Keeping and dropping is the whole training loop. After a handful of verdicts the
router starts to know your taste;
vv calibratewill tell you how often it agreed with you, and admit when it didn't.
What it does that nothing else does
| Measures itself | Sources have a record. So does the router. vv calibrate compares every proposal it ever made against your verdicts: "it proposed keeping 40 notes; you kept 14 — and being surer did not make it righter." No other tool tells you how often it was wrong. |
| Keeps score on your sources | Every claim is filed under whoever made it. When a prediction fails or a claim is contradicted, that source carries it — permanently. vv sources shows who has held up, who hasn't, and whose 40-minute videos yield nothing. |
| Puts predictions on the record | "X will happen by Y" is stored with its due date and its author. On the date, Verivann asks you. vv predictions · vv resolve <id> --miss |
| Catches manipulation — and proves it landed | Text aimed at the analyzer ("ignore all previous instructions"), hidden text, invisible characters — detected offline, quoted in the note, the source marked hostile. And a planted canary token catches a prompt-injection that actually succeeded, not just one that tried. |
| Keeps your disk off the cloud | Anything from your own files — or carrying an IBAN, a salary, a diagnosis — is sensitive. It goes to a local model, or to nobody, or (opt-in) to a hosted model only after names and numbers are redacted on your machine. vv outbound shows exactly what left. |
| Learns without asking | A note you accepted, highlighted, reopened or searched-and-clicked is a verdict you never had to type. A note ignored for 30 days is a quieter one. Explicit verdicts always outrank inferred ones. |
| Goes and finds the other side | vv counter <id> turns a note's weakest claims into counter-queries, fetches them, and digests the results — so the claim ledger does the arguing. It never asks the accused for an alibi. |
| Writes back into old notes | vv refresh — when a claim expires, a prediction fails, or a later source contradicts it, the old note gets a banner: "Since you read this…". Obsidian notes are dead files; these are not. |
| Argues with you | When a new claim contradicts a note you kept, the note says so: you contradict yourself. |
| Shows you the mirror | vv mirror — hours consumed, notes produced, how many survived your own judgment, which channel ate the time. No streak counter, no encouragement. |
| Reads your feeds for you | vv feed run — an editor, not a reader. Only what passes your learned filter surfaces; when the filter is untrained, it says so instead of faking an opinion. |
| Judges two models against each other | vv bakeoff --models a,b — both read the same material; your verdicts decide which one is better at your material, in your language. |
Core principles
- Propose only, never commit. The core never writes into a knowledge base. It
emits a proposal (
note/task/drop).vv accept <id> --to <dir>is the one place a human turns that into a decision. - Untrusted by default. Web material is data, never instruction.
- Never fake a judgment. No model → a source's yield is unknown, not zero. Too few verdicts → the router refuses to report a score. A tool that pretends to know is worse than one that admits it doesn't.
- Orchestrate, don't rebuild. yt-dlp, Whisper, gallery-dl, tesseract, ffmpeg — all invoked as separate programs, never bundled (see NOTICE.md).
- Local-first. The library, the ledgers and your profile never leave the machine
unless you configure a hosted model — and then
vv outboundlogs every byte.
What it reads
Articles · videos (published captions → a timestamped transcript that links back into the video) · TikTok/Instagram/X · image galleries (OCR) · on-screen text in videos · Reddit · screenshots (OCR) · voice memos (transcribed) · PDFs and EPUBs · RSS/Atom feeds.
On video: Verivann reads the caption track — plain text, published by the
platform, behind no protection. It downloads the media file only when there is no
caption and only to transcribe it, then deletes it — and on platforms that protect
their stream (YouTube, Netflix, Spotify…) it never does, because that would be
circumvention. That rule is not a setting. See verivann/mediapolicy.py.
Capture without typing
| Browser extension | extensions/chrome — right-click a page, link or selection, or Alt+S. It talks only to your own local inbox. Install |
| A folder | vv folder ~/Pictures/Screenshots --watch — the screenshots you never open again, OCR'd and routed. Nothing is moved or deleted. |
| Import what you have | vv import obsidian <vault> · vv import urls <pocket-export> · vv import history — and it retro-judges your own archive. |
| Bookmarklet | Drag Verivann this from the inbox footer to your bookmarks bar. |
Run it on a schedule (optional)
vv daemon --install # prints the one line for your OS's task scheduler
Feeds, the silent-edit watchlist, and the "since you read this" banners then keep themselves current in the background. It never asks and never commits — everything it does is still a proposal.
The commands
vv the cockpit — what is due
setup connect a model, write config
serve the inbox in your browser
ingest-text/-url/-youtube/-file/-batch digest something
import urls/obsidian/history bring in what you already have
folder <dir> [--watch] digest a folder of files
feed add/run/list the editor, not the reader
question add/list/answer what you are trying to find out
search · ask · trace · resurface find it, ask it, trace it back, be handed what you forgot
sources · predictions · resolve who said it, and were they right
calibrate · bakeoff · models how good is the router — and which model suits you
mirror · slag · bias · outbound the honest look: hours, waste, bubble, what left the machine
claims · stale · counter the ledger, what has gone off, and the other side
watch add/run · refresh silent edits, and notes that learn what happened since
keep · drop · review · clarify · profile teach the router (and let it ask, once)
accept --to <dir> the one committing act
alloy <id> <id> melt several sources into one
reanalyze · digest · log re-read with a model, the week, the furnace log
export notes/anki · backup · purge your data: a readable folder, one portable .zip, or gone
daemon · doctor · list · dedupe · reindex housekeeping
dedupe --semantic also catches the same content re-posted under a different URL:
same-source reposts are merged, cross-source echoes are flagged (that is corroboration,
not a duplicate) — one threshold that keeps the credibility ledger honest.
export notes writes a plain folder of Markdown you own; backup bundles the whole
library into one .zip; purge --source <key> or purge --all erases it (irreversibly,
after a confirmation and a safety backup). No lock-in is not a slogan here — it is a command.
Is it private? Is it legal?
Yes to both, by design. It is local-first — no account, no telemetry, no phone-home. Sensitive material never reaches a hosted model unless you explicitly allow it, and even then it can be redacted first. It never bundles a media-downloader and never circumvents a platform's stream protection. Reading a published caption track is not media download.
Contributing & support
Verivann is free and open source under the MIT License. It is a donation-supported project with no commercial tier and no cloud service — if it is useful to you, a sponsorship keeps it going, but nothing is gated.
Issues and pull requests welcome — start with CONTRIBUTING.md for setup and the invariants that keep Verivann itself. Found a security problem? Please report it privately: SECURITY.md. Everyone is expected to follow the Code of Conduct.
Docs
ARCHITECTURE.md — how it fits together · CONTRACT.md — the event/routing contract · NOTICE.md — third-party licenses · CHANGELOG.md — what shipped when
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 verivann-0.1.0.tar.gz.
File metadata
- Download URL: verivann-0.1.0.tar.gz
- Upload date:
- Size: 220.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf5a357818db478cb5628c53d707aac5117df1a70246e5e7bb8f54a5d18d37f8
|
|
| MD5 |
9665d6e2652b7702843301b3f96a4803
|
|
| BLAKE2b-256 |
04f795e63b39b1510614c35c613b4912f0a6fffc8317637df5c2c09ac4061f80
|
Provenance
The following attestation bundles were made for verivann-0.1.0.tar.gz:
Publisher:
release.yml on antoniussaid/verivann
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
verivann-0.1.0.tar.gz -
Subject digest:
cf5a357818db478cb5628c53d707aac5117df1a70246e5e7bb8f54a5d18d37f8 - Sigstore transparency entry: 2165411436
- Sigstore integration time:
-
Permalink:
antoniussaid/verivann@60075cf9bf3fc76684027ecbe3afbbe2da983ea1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/antoniussaid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@60075cf9bf3fc76684027ecbe3afbbe2da983ea1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file verivann-0.1.0-py3-none-any.whl.
File metadata
- Download URL: verivann-0.1.0-py3-none-any.whl
- Upload date:
- Size: 184.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b5a99a0bb1f8c2a24a0c9c53eb356fecbdf8dd835e356c0866101ff596bd6c1
|
|
| MD5 |
2c49f08cd1a05862a720f7b7741106f5
|
|
| BLAKE2b-256 |
e31c88192e5f47ae2618fc11d2c5b5670ca1fcebab8d43a0adc77e00df09fd2a
|
Provenance
The following attestation bundles were made for verivann-0.1.0-py3-none-any.whl:
Publisher:
release.yml on antoniussaid/verivann
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
verivann-0.1.0-py3-none-any.whl -
Subject digest:
5b5a99a0bb1f8c2a24a0c9c53eb356fecbdf8dd835e356c0866101ff596bd6c1 - Sigstore transparency entry: 2165411442
- Sigstore integration time:
-
Permalink:
antoniussaid/verivann@60075cf9bf3fc76684027ecbe3afbbe2da983ea1 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/antoniussaid
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@60075cf9bf3fc76684027ecbe3afbbe2da983ea1 -
Trigger Event:
release
-
Statement type: