
Tek
A downloadable desktop app that indexes your folders on-device, lets you semantically search and chat with your files, and performs file actions behind a preview you approve — nothing ever leaves your machine.
Tek is a downloadable, cross-platform desktop app — a local-first AI agent for your files. It indexes the folders you choose on-device, lets you semantically search and chat with everything you have, and performs file actions (organize, rename, dedupe, summarize) — always behind a preview you explicitly approve.
Cloud assistants can't see your files, and the ones that can want to upload them. Tek's bet is that modern small models are good enough to run the whole stack locally: a 130MB embedding model, an 80MB reranker, and an optional 2GB chat LLM give you semantic search and grounded Q&A over your documents with zero network calls on your content. Privacy isn't a setting — it's the architecture.
Index folders you pick
Point Tek at any folders and it reads your text, code, PDFs, and docs on-device — skipping media, binaries, and junk automatically.
Always up to date
It only re-reads what changed and quietly keeps up as you add, edit, or delete files.
Search by meaning or exact text
“That note about my lease” or a literal “192.168.1.40” both surface the right file first.
Chat with your files
Ask a question and get an answer grounded in your own documents, with citations you can click to open the source.
It won't make things up
If the answer isn't in your files, Tek tells you — instead of inventing one.
Take action, safely
Dedupe, organize, rename, or summarize — always behind a preview you approve, and deletes go to the recycle bin, never gone for good.
Two searches, fused
Tek searches by meaning (vector embeddings) and by exact text (BM25 over content and filenames) at once, then fuses the two — so a vague question and a literal string both find the right file.
Reranked for precision
A cross-encoder re-scores the top hits so the best passage wins, and its confidence floor is what lets Tek honestly say “nothing matches.”
Live, incremental index
Files are chunked and embedded once; a file watcher re-embeds only what changed, so it stays fast as your folders grow.
Follow-ups that just work
The local model rewrites follow-ups into standalone queries — “and where are the winter tires?” resolves against the conversation.
Eval-first, and measured
A committed test harness gates every change: 19/19 probes return the correct file top-1, 2/2 adversarial negatives return nothing, at ~190ms/query on CPU — identical on Windows, macOS, and Linux in CI.
A privacy-first desktop stack with no cloud in the loop. An Electron + React shell talks over IPC to a Python FastAPI sidecar bound to localhost; the entire AI pipeline — embeddings, reranking, and a hybrid vector + full-text store — runs on-device via ONNX (no PyTorch), and every build bundles its own Python runtime so users install nothing.
- Electron 42
- React 19
- TypeScript
- Tailwind CSS
- Python 3.12
- FastAPI
- bge-small (ONNX)
- MiniLM reranker
- LanceDB
- Ollama
- electron-builder
- python-build-standalone
- Playwright
- GitHub Actions
Renderer (React · sandboxed)
Chat · Search · Library · Actions · Settings
no network · no filesystem
│ IPC
▼
Electron main — the only filesystem mutator
spawns · health-checks · kills the sidecar
executes actions only after you confirm → deletes go to the recycle bin
│ local HTTP · 127.0.0.1
▼
Python sidecar (FastAPI · dynamic port)
scan → extract → chunk → embed → LanceDB
retrieval · RAG stream · file watcher · action planning
proposes moves / renames — never executes them- Electron main
- Owns the window lifecycle; spawns, health-polls, and kills the Python sidecar; routes all IPC. The only process allowed to mutate the filesystem — and only after explicit user confirmation (the action execution gate). Deletes go to the recycle bin.
- Renderer (React)
- Fully sandboxed — never touches the network or filesystem. Five pages (Chat, Search, Library, Actions, Settings); all traffic flows renderer → IPC → main → local HTTP.
- Python sidecar (FastAPI)
- Bound to 127.0.0.1 on a dynamic port, owned by main. Runs the scanner → extractor → chunker → embedder → LanceDB pipeline, retrieval, RAG streaming, the file watcher, and action planning — it proposes moves and renames but can never execute them.
- Safety contract
- A compromised renderer can't read files and the sidecar can't destroy anything — the entire safety boundary lives in exactly one place.
- Packaging
- Each installer bundles its own CPython 3.12 and bootstraps a venv on first run, so users install nothing — keeping the download ~135MB instead of ~400MB.
Sole developer — I designed the trust-boundary architecture, built the local hybrid-retrieval pipeline, the Electron + Python desktop app, the eval-first test harness, and the cross-platform packaging and CI.