cd /news/large-language-models/show-hn-pith-a-local-first-desktop-l… · home topics large-language-models article
[ARTICLE · art-39387] src=github.com ↗ pub= topic=large-language-models verified=true sentiment=↑ positive

Show HN: Pith – A local-first desktop LLM wiki without vector DBs or embeddings

Developer l-zhi released Pith, a local-first desktop LLM wiki that ingests notes, PDFs, and emails into Markdown entries without using vector databases or embeddings, relying instead on keyword search and link traversal for retrieval. The tool, available as a desktop app and CLI, keeps all data in plain files on the user's disk and supports auto-ingestion and scheduled tasks.

read3 min views1 publishedJun 25, 2026
Show HN: Pith – A local-first desktop LLM wiki without vector DBs or embeddings
Image: source

中文版 →

[README.zh-CN.md]

A local-first LLM knowledge base. Drop in your notes, PDFs, and emails — pith hydrates each into a dense Markdown entry an LLM can read, then lets you chat with your whole library, retrieved by keyword + link traversal. No embeddings, no vector DB. Everything stays in plain files on your disk.

Drop a note into your Obsidian vault — pith auto-ingests it into an entry the LLM can pull from mid-conversation.

  • 🗂️ Plain files, not a black box— every entry is Markdown + YAML frontmatter; Obsidian, VS Code, and Git open them natively. - 🔍 Retrieval you can reason about— weighted keyword search + link-graph traversal + exact grep. No embedding drift, no vendor lock-in. - 💬 Chat that writes back— the agent reads your library through file/wiki tools;/digest

distills a conversation into a new entry. - 🤖 Auto-ingest + schedule— watch a folder for new files; run agent tasks on a cron (e.g. a daily digest of yesterday's additions). - 🔒 Local-first— all data under~/.pith-wiki/

; outbound PII filtering on by default. No cloud, no lock-in.

Design philosophy: data engineering > retrieval algorithms.Don't dump raw docs into a store and hope embeddings pull them back. Use an LLM tohydrateeach source into a high-density Markdown entry, then retrieve by keyword + link traversal. Simple, file-based, human-readable.

Input formats: .docx

.eml

.htm

.html

.md

.pdf

.txt

. The product is pith; the npm package and repo are historically named pith-wiki

.

Desktop app (recommended) — the full experience: chat, inbox, dashboard, link graph, skills, and a scheduled-tasks calendar, all over the same engine and on-disk library. No packaged installer yet, so run it from source:

git clone https://github.com/l-zhi/pith-wiki.git
cd pith-wiki/desktop
npm install
npm run dev      # electron-vite dev (HMR)

CLI (optional — for automation / headless use):

npm install -g pith-wiki
pith-wiki        # launch the REPL

On first launch, onboarding walks you through setup — pick a provider, paste an API key, and point it at a notes folder to watch. Everything lives under ~/.pith-wiki/

(config + wiki data); set PITH_WIKI_HOME

for an isolated profile.

Platforms: macOS + Linux are CI-tested (Node 20 / 22); Windows is usable but not yet CI-covered. Dev scripts: npm test

/ npm run typecheck

/ npm run build

(inside desktop/

, or repo root for engine/core). See CONTRIBUTING.md.

1. Hydrate — compress raw documents (markdown / PDF / DOCX / HTML / email) into Markdown entries roughly 30% of the original size. Strip filler, keep signal. LLMs read these directly.

2. Retrieve — no embeddings, no vector DB. Weighted keyword search (title × 2, tags × 2, summary × 1, content × 0.5) + BFS link traversal, plus exact substring/regex search (wiki_grep

) and date-range filters (when an entry was added to the library, or the content's own date). Boring on purpose. Entries are plain Markdown; Obsidian, VS Code, and Git all open them natively.

3. Chat — the agent talks to your library through file + wiki tools (wiki_query

fuzzy search, wiki_grep

exact search, wiki_get

, wiki_read_source

, wiki_ingest

, read_file

/ write_file

/ list_dir

, …). Every turn writes a transcript; /digest

distills the conversation back into a wiki entry, closing the loop chat → store → retrieve.

4. Auto-ingest — point a watch folder (Obsidian vault, inbox, etc.) at pith in Settings, and changes are auto-enqueued for a background worker to hydrate. Built-in health checks flag orphan links, broken frontmatter, and ID collisions.

5. Schedule (desktop) — set tasks that run an agent prompt on a schedule (once, or cron) — e.g. a daily digest of everything added yesterday. Each fire opens a fresh session you can reopen; ${yyyy-mm-dd -1}

-style date placeholders are resolved at run time so "yesterday" is always correct.

Document When to read it

additionalReadPaths

, on-disk layoutdocs/config.example.json~/.pith-wiki/config.json

example (multi-provider + watchDirs + queue)docs/entry-format.mddocs/architecture.mddocs/security-model.mddocs/usage.mdSECURITY.mdCONTRIBUTING.mdCHANGELOG.mdApache 2.0 · Copyright (c) 2026 lizhi

── more in #large-language-models 4 stories · sorted by recency
── more on @pith 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-pith-a-local…] indexed:0 read:3min 2026-06-25 ·