Advay IyerSoftware / AI Engineer← Back to work
Tek logo
Cross-platform desktop app · Local-first AI

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.

01Overview

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.

02What it does

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.

03How it works
01

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.

02

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.”

03

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.

04

Follow-ups that just work

The local model rewrites follow-ups into standalone queries — “and where are the winter tires?” resolves against the conversation.

05

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.

04Stack

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 42React 19TypeScriptTailwind CSSPython 3.12FastAPIbge-small (ONNX)MiniLM rerankerLanceDBOllamaelectron-builderpython-build-standalonePlaywrightGitHub ActionsElectron 42React 19TypeScriptTailwind CSSPython 3.12FastAPIbge-small (ONNX)MiniLM rerankerLanceDBOllamaelectron-builderpython-build-standalonePlaywrightGitHub Actions
Desktop & UI
  • Electron 42
  • React 19
  • TypeScript
  • Tailwind CSS
Engine
  • Python 3.12
  • FastAPI
Retrieval & AI
  • bge-small (ONNX)
  • MiniLM reranker
  • LanceDB
  • Ollama
Packaging & CI
  • electron-builder
  • python-build-standalone
  • Playwright
  • GitHub Actions
05Architecture
system flow
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.
06My role

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.