suchi
00.00 suchi · noun · an index that keeps itself

The document archive that files itself.

Years of documents, saved everywhere, findable nowhere. suchi files them for you: everything that comes in files itself under a number that never moves, and every word of it is searchable. One small binary, with a filing system and an AI agent surface built in.

email it, scan it, upload it. it comes out named, filed, and searchable

Private by design Works from your phone Email it in Free and open source
21Banking38 docs
22Tax+1 filed
23Insurance17 docs
24Investments52 docs
now filing IMG_2047.pdf20-29 Money/22 Tax/2026/ITR-1__0142.pdf
00–09 See it

Six seconds, start to filed.

A scan arrives, the index row draws itself, the category stamps on, and the row slides into its numbered place between its neighbours. That sorted slide is the whole idea; everything after it is detail.

suchi · dropped in, filed, found
/app/#/dashboard
suchi dashboard: metric cards, recently added documents, custom views with live counts
The dashboard. Live counts, the newest arrivals, and your saved views. Each one is a filter with a number on it.
/app/#/documents · dark
Documents list in dark mode with thumbnails, multi-select and a bulk action bar
Working through a pile. Multi-select with shift-range and j/k keys, then refile, share, or trash the lot in one transaction. Dark mode included.
/app/#/doc/1841
Document detail with a blurred confidential preview, metadata, similar documents and versions
One document, everything about it. Confidential previews stay blurred until you ask. Similar documents surface on their own.
10–19

What it does

One small binary that takes in almost anything, gives it real structure, automates the busywork, and keeps every byte on your hardware.

11

Everything finds its way in

Watched folders, drag and drop, a sidecar spec for scripts, and email: forward a document to archive+22@… and it lands filed under 22 Tax. Scans get cleaned up on arrival, and only pages that need OCR pay for OCR.

email forwardingoffice docsEPUB · DjVu · HEICOutlook .msg + .emle-invoicesblank-page removalauto document splittingQR & barcodesper-page OCR routing
12

Organized your way

Johnny.Decimal numbering is the opinionated default: browse by number, search jd:2*, nothing is ever unfiled. Prefer classic tags and folders? Flat mode keeps everything you already know.

JD by defaultflat modenested tagscorrespondents with roles9 custom field typesdocument versionstaxonomy merge
13

It runs itself

Automations fire on trigger, condition, action: tag it, file it, route it. When a human has to sign off, approval chains with timeouts keep the loop honest, and nothing ever fails silently.

automations engineapproval chainshuman-in-the-loop taskstimeouts & escalationretries with backoffdead-letter visibility
14

Built for AI agents

Rules handle the obvious. Any OpenAI-compatible model handles the rest, Ollama included, so nothing has to leave the box. Agents get a real seat: an MCP server ships in the binary.

suchi mcpOllama or any endpointrules enginetask-claim loopper-agent tokensevery action audited
15

Private by construction

A stock install makes zero outbound connections. Sensitive documents can blur their own previews. Sharing is deliberate: expiring links, optional passwords, one switch to disable it all.

zero egresssensitivity labelsblurred previewsshare links: expiry + passwordegress_ack for cloud AIaudit log
20–29

Why an archive, not a folder

You do not need another place to put files. You need to stop losing them. This is what changes when the archive maintains its own index.

Finding a document
scroll the folder, guess the filename, give up, ask for a reissue
search every word, or walk ten numbered drawers
Filing a document
name it yourself and hope you were consistent in 2019
named and numbered for you, the same way every time
Duplicates
IMG_2047.pdf, IMG_2047(1).pdf, IMG_2047 copy.pdf
same bytes stored once, always
What it costs to run
a $5 VPS, a Pi, or the corner of a NAS
one process, ≤ 100 MB idle
30–39

Private because of how it’s built

A document archive holds the most sensitive files you own. So the rule is structural: a stock suchi makes zero outbound connections, and every possible egress is opt-in, visible in config, and logged. suchi doctor prints the active list.

What suchi never does

  • Send telemetry, usage stats, or update pings, not even as an opt-in
  • Log document content or OCR text, at any log level
  • Put content in audit events or diagnostics output
  • Send your documents to a cloud LLM without an explicit egress_ack
  • Pretend deleted data is gone everywhere. Soft-delete windows and your own backups are named in the docs

Encrypted in transit

TLS at your reverse proxy, or native TLS_CERT_FILE for proxy-less installs. Secure, HttpOnly cookies throughout.

Encrypted volume as the honest baseline

LUKS or NAS-native encryption covers blobs, database, and thumbnails in one move. The docs recommend it plainly rather than pretending app-layer crypto can substitute for it.

Encrypted backups, for free

restic and borg encrypt client-side by default, so the documented backup story is end-to-end encrypted off-box already.

Per-blob envelope encryption

A planned storage wrapper built on age: boring, audited cryptography that wraps any backend, local disk or S3.

40–49

For self-hosters and operators

The short version: AGPL-3.0, one compose block, zero external services, runs on a $5 VPS or a Pi, and backups are one directory. An existing archive imports with one command, metadata intact.

docker-compose.yml
# the whole file
services:
  suchi:
    image: ghcr.io/suchi/suchi:latest
    restart: unless-stopped
    volumes:
      - ./data:/data
    ports:
      - "8000:8000"
    environment:
      PUBLIC_URL: https://docs.example.com
      # everything else has sensible defaults
importing an existing archive
# point it at your current tool's export bundle
$ suchi import \
    --from ./export-bundle \
    --map-jd mapping.yaml

✓ 4,182 documents · metadata intact
✓ folder layout preserved, byte-equal
✓ unmapped docs waiting in 49 Inbox

First boot prints a setup link. No identity provider required; add OIDC later if you run one.

Runs anywhere: compose, bare binary with systemd, NAS templates, arm64, even Windows.